ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/define.h
(Generate patch)

Comparing deliantra/server/include/define.h (file contents):
Revision 1.10 by root, Tue Sep 12 18:32:37 2006 UTC vs.
Revision 1.26 by elmex, Wed Dec 20 14:11:42 2006 UTC

16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 20
21 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at crossfire@schmorp.de
22*/ 22*/
23 23
24/* This file is best viewed with a window width of about 100 character */ 24/* This file is best viewed with a window width of about 100 character */
25 25
26/* This file is really too large. With all the .h files 26/* This file is really too large. With all the .h files
29 * with players in player.h, etc. As it is, everything just seems 29 * with players in player.h, etc. As it is, everything just seems
30 * to be dumped in here. 30 * to be dumped in here.
31 */ 31 */
32 32
33#ifndef DEFINE_H 33#ifndef DEFINE_H
34# define DEFINE_H 34#define DEFINE_H
35 35
36/* 36/*
37 * Crossfire requires ANSI-C, but some compilers "forget" to define it. 37 * Crossfire requires ANSI-C, but some compilers "forget" to define it.
38 * Thus the prototypes made by cextract don't get included correctly. 38 * Thus the prototypes made by cextract don't get included correctly.
39 */ 39 */
40# if !defined(__STDC__) 40#if !defined(__STDC__)
41 41
42/* Removed # from start of following line. makedepend was picking it up. 42/* Removed # from start of following line. makedepend was picking it up.
43 * The following should still hopefully result in an error. 43 * The following should still hopefully result in an error.
44 */ 44 */
45error - Your ANSI C compiler should be defining __STDC__; 45error - Your ANSI C compiler should be defining __STDC__;
46# endif 46#endif
47 47
48# ifndef WIN32 /* ---win32 exclude unix configuration part */
49# include <autoconf.h> 48#include <autoconf.h>
50# endif
51 49
52# define FONTDIR "" 50#define FONTDIR ""
53# define FONTNAME "" 51#define FONTNAME ""
54 52
55/* Decstations have trouble with fabs()... */ 53/* Decstations have trouble with fabs()... */
56# define FABS(x) ((x)<0?-(x):(x)) 54#define FABS(x) ((x)<0?-(x):(x))
57 55
58# ifdef __NetBSD__ 56#ifdef __NetBSD__
59# include <sys/param.h> 57# include <sys/param.h>
60# endif 58#endif
61# ifndef MIN 59#ifndef MIN
62# define MIN(x,y) ((x)<(y)?(x):(y)) 60# define MIN(x,y) ((x)<(y)?(x):(y))
63# endif 61#endif
64# ifndef MAX 62#ifndef MAX
65# define MAX(x,y) ((x)>(y)?(x):(y)) 63# define MAX(x,y) ((x)>(y)?(x):(y))
66# endif 64#endif
67 65
68/*NAME_MAX used by random maps may not be defined on pure ansi systems*/ 66/*NAME_MAX used by random maps may not be defined on pure ansi systems*/
69# ifndef NAME_MAX 67#ifndef NAME_MAX
70# define NAME_MAX 255 68# define NAME_MAX 255
71# endif 69#endif
72 70
73/* MAX3 is basically like MAX, but instead does 3 values. */ 71/* MAX3 is basically like MAX, but instead does 3 values. */
74# ifndef MAX3 72#ifndef MAX3
75# define MAX3(x,y, z) (MAX(x, MAX(y,z))) 73# define MAX3(x,y, z) (MAX(x, MAX(y,z)))
76# endif 74#endif
77 75
78/* MIN3 is basically like MIN, but instead does 3 values. */ 76/* MIN3 is basically like MIN, but instead does 3 values. */
79# ifndef MIN3 77#ifndef MIN3
80# define MIN3(x,y, z) (MIN(x, MIN(y,z))) 78# define MIN3(x,y, z) (MIN(x, MIN(y,z)))
81# endif 79#endif
82 80
83# define MAX_STAT 30 /* The maximum legal value of any stat */ 81#define MAX_STAT 30 /* The maximum legal value of any stat */
84# define MIN_STAT 1 /* The minimum legal value of any stat */ 82#define MIN_STAT 1 /* The minimum legal value of any stat */
85 83
86# define MAX_BUF 1024 84#define MAX_BUF 1024
87 /* Used for all kinds of things */ 85 /* Used for all kinds of things */
88# define VERY_BIG_BUF 2048 86#define VERY_BIG_BUF 2048
89# define HUGE_BUF 4096 /* Used for messages - some can be quite long */ 87#define HUGE_BUF 4096 /* Used for messages - some can be quite long */
90# define SOCKET_BUFLEN 4096 /* Max length a packet could be */ 88#define SOCKET_BUFLEN 4096 /* Max length a packet could be */
91 89
92# define FONTSIZE 3000 /* Max chars in font */ 90#define FONTSIZE 3000 /* Max chars in font */
93 91
94# define MAX_ANIMATIONS 256 92#define MAX_ANIMATIONS 256
95 93
96# define MAX_NAME 48 94#define MAX_NAME 48
97# define BIG_NAME 32
98# define MAX_EXT_TITLE 98 95#define MAX_EXT_TITLE 98
99 96
100/* Fatal variables: */ 97/* Fatal variables: */
101# define OUT_OF_MEMORY 0 98#define OUT_OF_MEMORY 0
102# define MAP_ERROR 1 99#define MAP_ERROR 1
103# define ARCHTABLE_TOO_SMALL 2 100#define ARCHTABLE_TOO_SMALL 2
104# define TOO_MANY_ERRORS 3 101#define TOO_MANY_ERRORS 3
105 102
106/* TYPE DEFINES */ 103/* TYPE DEFINES */
107 104
108/* Only add new values to this list if somewhere in the program code, 105/* Only add new values to this list if somewhere in the program code,
109 * it is actually needed. Just because you add a new monster does not 106 * it is actually needed. Just because you add a new monster does not
115 * Additionally, when you add a new entry, include it in the table in item.c 112 * Additionally, when you add a new entry, include it in the table in item.c
116 */ 113 */
117 114
118/* type 0 will be undefined and shows a non valid type information */ 115/* type 0 will be undefined and shows a non valid type information */
119 116
120# define PLAYER 1 117#define PLAYER 1
121# define TRANSPORT 2 /* see doc/Developers/objects */ 118#define TRANSPORT 2 /* see pod/objects.pod */
122# define ROD 3 119#define ROD 3
123# define TREASURE 4 120#define TREASURE 4
124# define POTION 5 121#define POTION 5
125# define FOOD 6 122#define FOOD 6
126# define POISON 7 123#define POISON 7
127# define BOOK 8 124#define BOOK 8
128# define CLOCK 9 125#define CLOCK 9
129 126
130/*#define FBULLET 10 */ 127/*#define FBULLET 10 */
131
132/*#define FBALL 11 */ 128/*#define FBALL 11 */
133# define LIGHTNING 12 129
134# define ARROW 13 130/*#define LIGHTNING 12 */ // elmex: implemented by type 102 subtype 4
135# define BOW 14 131#define ARROW 13
136# define WEAPON 15 132#define BOW 14
137# define ARMOUR 16 133#define WEAPON 15
134#define ARMOUR 16
138# define PEDESTAL 17 135#define PEDESTAL 17
139# define ALTAR 18 136#define ALTAR 18
140 137
141/*#define CONFUSION 19 */ 138/*#define CONFUSION 19 */
139
142# define LOCKED_DOOR 20 140#define LOCKED_DOOR 20
143# define SPECIAL_KEY 21 141#define SPECIAL_KEY 21
144# define MAP 22 142#define MAP 22
145# define DOOR 23 143#define DOOR 23
146# define KEY 24 144#define KEY 24
147 145
148/*#define MMISSILE 25 */ 146/*#define MMISSILE 25 */
147
149# define TIMED_GATE 26 148#define TIMED_GATE 26
150# define TRIGGER 27 149#define TRIGGER 27
151# define GRIMREAPER 28 150#define GRIMREAPER 28
152# define MAGIC_EAR 29 151#define MAGIC_EAR 29
153# define TRIGGER_BUTTON 30 152#define TRIGGER_BUTTON 30
154# define TRIGGER_ALTAR 31 153#define TRIGGER_ALTAR 31
155# define TRIGGER_PEDESTAL 32 154#define TRIGGER_PEDESTAL 32
156# define SHIELD 33 155#define SHIELD 33
157# define HELMET 34 156#define HELMET 34
158# define HORN 35 157#define HORN 35
159# define MONEY 36 158#define MONEY 36
160# define CLASS 37 /* object for applying character class modifications to someone */ 159#define CLASS 37 /* object for applying character class modifications to someone */
161# define GRAVESTONE 38 160#define GRAVESTONE 38
162# define AMULET 39 161#define AMULET 39
163# define PLAYERMOVER 40 162#define PLAYERMOVER 40
164# define TELEPORTER 41 163#define TELEPORTER 41
165# define CREATOR 42 164#define CREATOR 42
166# define SKILL 43 /* also see SKILL_TOOL (74) below */ 165#define SKILL 43 /* also see SKILL_TOOL (74) below */
166
167# define EXPERIENCE 44 /* This is basically obsolete now. It used to contain */ 167/*#define EXPERIENCE 44*//* This is basically obsolete now. It used to contain
168 /* experience for broad skill categories. This value */ 168 * experience for broad skill categories. This value
169 /* is now automatically converteed at load time. */ 169 * is now automatically converteed at load time.
170 */
171
170# define EARTHWALL 45 172#define EARTHWALL 45
171# define GOLEM 46 173#define GOLEM 46
172 174
173/*#define BOMB 47 */ 175/*#define BOMB 47 */
174# define THROWN_OBJ 48 176#define THROWN_OBJ 48
175# define BLINDNESS 49 177#define BLINDNESS 49
176# define GOD 50 178#define GOD 50
177
178# define DETECTOR 51 /* peterm: detector is an object */ 179#define DETECTOR 51 /* peterm: detector is an object
179 /* which notices the presense of */ 180 * which notices the presense of
180 /* another object and is triggered */ 181 * another object and is triggered
181 /* like buttons. */ 182 * like buttons.
183 */
182# define TRIGGER_MARKER 52 /* inserts an invisible, weightless */ 184#define TRIGGER_MARKER 52 /* inserts an invisible, weightless
183 /* force into a player with a specified string WHEN TRIGGERED. */ 185 * force into a player with a specified string WHEN TRIGGERED.
186 */
184# define DEAD_OBJECT 53 187#define DEAD_OBJECT 53
185# define DRINK 54 188#define DRINK 54
186# define MARKER 55 /* inserts an invisible, weightless */ 189#define MARKER 55 /* inserts an invisible, weightless
187 /* force into a player with a specified string. */ 190 * force into a player with a specified string.
191 */
188# define HOLY_ALTAR 56 192#define HOLY_ALTAR 56
189# define PLAYER_CHANGER 57 193#define PLAYER_CHANGER 57
190# define BATTLEGROUND 58 /* battleground, by Andreas Vogl */ 194#define BATTLEGROUND 58 /* battleground, by Andreas Vogl */
191 195
192# define PEACEMAKER 59 /* Object owned by a player which can convert */ 196#define PEACEMAKER 59 /* Object owned by a player which can convert
193 /* a monster into a peaceful being incapable of attack. */ 197 * a monster into a peaceful being incapable of attack.
194# define GEM 60 198 */
199#define GEM 60
195 200
196 /*#define FIRECHEST 61*//* FIRECHEST folded into FIREWALL */ 201/*#define FIRECHEST 61*/ /* FIRECHEST folded into FIREWALL */
202
197# define FIREWALL 62 203#define FIREWALL 62
198# define ANVIL 63 204#define ANVIL 63
199# define CHECK_INV 64 /* by b.t. thomas@nomad.astro.psu.edu */ 205#define CHECK_INV 64 /* by b.t. thomas@nomad.astro.psu.edu */
200# define MOOD_FLOOR 65 /* by b.t. thomas@nomad.astro.psu.edu 206#define MOOD_FLOOR 65 /* by b.t. thomas@nomad.astro.psu.edu
201 * values of last_sp set how to change: 207 * values of last_sp set how to change:
202 * 0 = furious, all monsters become aggressive 208 * 0 = furious, all monsters become aggressive
203 * 1 = angry, all but friendly become aggressive 209 * 1 = angry, all but friendly become aggressive
204 * 2 = calm, all aggressive monsters calm down 210 * 2 = calm, all aggressive monsters calm down
205 * 3 = sleep, all monsters fall asleep 211 * 3 = sleep, all monsters fall asleep
206 * 4 = charm, monsters become pets */ 212 * 4 = charm, monsters become pets */
207# define EXIT 66 213#define EXIT 66
208# define ENCOUNTER 67 214#define ENCOUNTER 67
209# define SHOP_FLOOR 68 215#define SHOP_FLOOR 68
210# define SHOP_MAT 69 216#define SHOP_MAT 69
211# define RING 70 217#define RING 70
212# define FLOOR 71 /* this is a floor tile -> native layer 0 */ 218#define FLOOR 71 /* this is a floor tile -> native layer 0 */
213# define FLESH 72 /* animal 'body parts' -b.t. */ 219#define FLESH 72 /* animal 'body parts' -b.t. */
214# define INORGANIC 73 /* metals and minerals */ 220#define INORGANIC 73 /* metals and minerals */
215# define SKILL_TOOL 74 /* Allows the use of a skill */ 221#define SKILL_TOOL 74 /* Allows the use of a skill */
216# define LIGHTER 75 222#define LIGHTER 75
217 223
218/* The trap_part, wall, light_source, misc_object, monster, and spawn_generator 224/* random crossfire developer: The trap_part, wall, light_source,
219 * types are not used in any archetypes, and should perhaps be removed. 225 * misc_object, monster, and spawn_generator
226 * types are not used in any archetypes,
227 * and should perhaps be removed.
220 */ 228 *
229 * Wed Dec 20 13:35:24 CET 2006:
230 * elmex: haha, removed TRAP_PART, LIGHT_SOURCE, MONSTER and SPAWN_GENERATOR now.
231 * monsters are marked by FLAG_MONSTER and generator with FLAG_GENERATOR.
232 * renamed WALL to BUILDABLE_WALL.
233 */
234
221# define TRAP_PART 76 /* Needed by set traps skill -b.t. */ 235//#define TRAP_PART 76 /* Needed by set traps skill -b.t. */
222 236
223# define WALL 77 /* this is a wall. put it always in layer 1 if not set is_floor */ 237#define BUILDABLE_WALL 77 /* this is a buildable wall */
238
224# define LIGHT_SOURCE 78 /* torches, lamps, etc. */ 239//#define LIGHT_SOURCE 78 /* torches, lamps, etc. */
240
225# define MISC_OBJECT 79 /* misc. objects are for objects without a function 241#define MISC_OBJECT 79 /* misc. objects are for objects without a function
226 in the engine. Like statues, clocks, chairs,... 242 in the engine. Like statues, clocks, chairs,...
227 If perhaps we create a function where we can sit 243 If perhaps we create a function where we can sit
228 on chairs, we create a new type and remove all 244 on chairs, we create a new type and remove all
229 chairs from here. */ 245 chairs from here. */
230# define MONSTER 80 246//#define MONSTER 80 /* yes, thats a real, living creature */
231 /* yes, thats a real, living creature */ 247//#define SPAWN_GENERATOR 81 /* a spawn point or monster generator object */
232# define SPAWN_GENERATOR 81 248
233 /* a spawn point or monster generator object */ 249#define LAMP 82 /* a lamp */
234# define LAMP 82 /* a lamp */
235# define DUPLICATOR 83 /* duplicator/multiplier object */ 250#define DUPLICATOR 83 /* duplicator/multiplier object */
236# define TOOL 84 /* a tool for building objects */ 251#define TOOL 84 /* a tool for building objects */
237# define SPELLBOOK 85 252#define SPELLBOOK 85
238# define BUILDFAC 86 /* facilities for building objects */ 253#define BUILDFAC 86 /* facilities for building objects */
239# define CLOAK 87 254#define CLOAK 87
240 255
241/*#define CONE 88 */ 256/*#define CONE 88 */
257/*#define AURA 89 */ /* aura spell object */
242 258
243 /*#define AURA 89 *//* aura spell object */
244
245# define SPINNER 90 259#define SPINNER 90
246# define GATE 91 260#define GATE 91
247# define BUTTON 92 261#define BUTTON 92
248# define CF_HANDLE 93 262#define CF_HANDLE 93
249# define HOLE 94 263#define HOLE 94
250# define TRAPDOOR 95 264#define TRAPDOOR 95
251 265
252/*#define WORD_OF_RECALL 96 */ 266/*#define WORD_OF_RECALL 96 */
253
254/*#define PARAIMAGE 97 */ 267/*#define PARAIMAGE 97 */
255# define SIGN 98 268
256# define BOOTS 99 269#define SIGN 98
270#define BOOTS 99
257# define GLOVES 100 271#define GLOVES 100
258# define SPELL 101 272#define SPELL 101
259# define SPELL_EFFECT 102 273#define SPELL_EFFECT 102
260# define CONVERTER 103 274#define CONVERTER 103
261# define BRACERS 104 275#define BRACERS 104
262# define POISONING 105 276#define POISONING 105
263# define SAVEBED 106 277#define SAVEBED 106
278
264# define POISONCLOUD 107 279// #define POISONCLOUD 107
265# define FIREHOLES 108 280// #define FIREHOLES 108
266# define WAND 109
267 281
268/*#define ABILITY 110*/ 282#define WAND 109
283
284/*#define ABILITY 110*/
269# define SCROLL 111 285#define SCROLL 111
270# define DIRECTOR 112 286#define DIRECTOR 112
271# define GIRDLE 113 287#define GIRDLE 113
272# define FORCE 114 288#define FORCE 114
273# define POTION_EFFECT 115 /* a force, holding the effect of a potion */ 289#define POTION_EFFECT 115 /* a force, holding the effect of a potion */
274# define EVENT_CONNECTOR 116/* Lauwenmark: an invisible object holding a plugin event hook */ 290#define EVENT_CONNECTOR 116 /* Lauwenmark: an invisible object holding a plugin event hook */
291
275# define CLOSE_CON 121 /* Eneq(@csd.uu.se): Id for close_container archetype. */ 292#define CLOSE_CON 121 /* Eneq(@csd.uu.se): Id for close_container archetype. */
276# define CONTAINER 122 293#define CONTAINER 122
277# define ARMOUR_IMPROVER 123 294#define ARMOUR_IMPROVER 123
278# define WEAPON_IMPROVER 124 295#define WEAPON_IMPROVER 124
279 296
280/* unused: 125 - 129 297/* unused: 125 - 129
281 * type 125 was MONEY_CHANGER 298 * type 125 was MONEY_CHANGER
282 */ 299 */
300
283# define SKILLSCROLL 130 /* can add a skill to player's inventory -bt. */ 301#define SKILLSCROLL 130 /* can add a skill to player's inventory -bt. */
284# define DEEP_SWAMP 138 302#define DEEP_SWAMP 138
285# define IDENTIFY_ALTAR 139 303#define IDENTIFY_ALTAR 139
286 304
287 /*#define CANCELLATION 141*//* not used with new spell code */ 305/*#define CANCELLATION 141 */ /* not used with new spell code */
306
288# define MENU 150 /* Mark Wedel (mark@pyramid.com) Shop inventories */ 307#define MENU 150 /* Mark Wedel (mark@pyramid.com) Shop inventories */
289 308
290 /*#define BALL_LIGHTNING 151 *//* peterm: ball lightning and color spray */ 309/*#define BALL_LIGHTNING 151 */ /* peterm: ball lightning and color spray */
291
292/*#define SWARM_SPELL 153*/ 310/*#define SWARM_SPELL 153*/
293# define RUNE 154
294# define TRAP 155
295 311
296# define POWER_CRYSTAL 156 312#define RUNE 154
297# define CORPSE 157 313#define TRAP 155
298 314
299# define DISEASE 158 315#define POWER_CRYSTAL 156
300# define SYMPTOM 159 316#define CORPSE 157
317
318#define DISEASE 158
319#define SYMPTOM 159
301# define BUILDER 160 /* Generic item builder, see subtypes */ 320#define BUILDER 160 /* Generic item builder, see subtypes */
302# define MATERIAL 161/* Material for building */ 321#define MATERIAL 161 /* Material for building */
303 322
304/* #define GPS 162 Ground positionning system, moved to Python plugin */ 323/* #define GPS 162 Ground positionning system, moved to Python plugin */
305# define ITEM_TRANSFORMER 163/* Transforming one item with another */ 324#define ITEM_TRANSFORMER 163 /* Transforming one item with another */
325
306# define QUEST 164/* See below for subtypes */ 326/*#define QUEST 164 */ /* See below for subtypes */
327
307# define SAFE_GROUND 165 /* This is a safe ground, means that neither bombs, 328#define SAFE_GROUND 165 /* This is a safe ground, means that neither bombs,
308 potions, alchemy, or magic works here (elmex) */ 329 potions, alchemy, or magic works here (elmex) */
309 330
310/* END TYPE DEFINE */ 331/* END TYPE DEFINE */
311 332
312# define NUM_SUBTYPES 64 // maximum supported subtype number + 1, can be increased to 256 333#define NUM_SUBTYPES 64 // maximum supported subtype number + 1, can be increased to 256
313 334
314/* Subtypes for BUILDER */ 335/* Subtypes for BUILDER */
315# define ST_BD_BUILD 1 /* Builds an item */ 336#define ST_BD_BUILD 1 /* Builds an item */
316# define ST_BD_REMOVE 2 /* Removes an item */ 337#define ST_BD_REMOVE 2 /* Removes an item */
317 338
318/* Subtypes for MATERIAL */ 339/* Subtypes for MATERIAL */
319# define ST_MAT_FLOOR 1 /* Floor */ 340#define ST_MAT_FLOOR 1 /* Floor */
320# define ST_MAT_WALL 2 /* Wall */ 341#define ST_MAT_WALL 2 /* Wall */
321# define ST_MAT_ITEM 3 /* All other items, including doors & such */ 342#define ST_MAT_ITEM 3 /* All other items, including doors & such */
322 343
323/* definitions for weapontypes */ 344/* definitions for weapontypes */
324 345
325# define WEAP_HIT 0 /* the basic */ 346#define WEAP_HIT 0 /* the basic */
326# define WEAP_SLASH 1 /* slash */ 347#define WEAP_SLASH 1 /* slash */
327# define WEAP_PIERCE 2 /* arrows, stiletto */ 348#define WEAP_PIERCE 2 /* arrows, stiletto */
328# define WEAP_CLEAVE 3 /* axe */ 349#define WEAP_CLEAVE 3 /* axe */
329# define WEAP_SLICE 4 /* katana */ 350#define WEAP_SLICE 4 /* katana */
330# define WEAP_STAB 5 /* knife, dagger */ 351#define WEAP_STAB 5 /* knife, dagger */
331# define WEAP_WHIP 6 /* whips n chains */ 352#define WEAP_WHIP 6 /* whips n chains */
332# define WEAP_CRUSH 7 /* big hammers, flails */ 353#define WEAP_CRUSH 7 /* big hammers, flails */
333# define WEAP_BLUD 8 /* bludgeoning, club, stick */ 354#define WEAP_BLUD 8 /* bludgeoning, club, stick */
334 355
335typedef struct typedata 356typedef struct typedata
336{ 357{
337 int number; 358 int number;
338 const char *name; 359 const char *name;
347/* definitions for detailed pickup descriptions. 368/* definitions for detailed pickup descriptions.
348 * The objective is to define intelligent groups of items that the 369 * The objective is to define intelligent groups of items that the
349 * user can pick up or leave as he likes. */ 370 * user can pick up or leave as he likes. */
350 371
351/* high bit as flag for new pickup options */ 372/* high bit as flag for new pickup options */
352# define PU_NOTHING 0x00000000 373#define PU_NOTHING 0x00000000
353 374
354# define PU_DEBUG 0x10000000 375#define PU_DEBUG 0x10000000
355# define PU_INHIBIT 0x20000000 376#define PU_INHIBIT 0x20000000
356# define PU_STOP 0x40000000 377#define PU_STOP 0x40000000
357# define PU_NEWMODE 0x80000000 378#define PU_NEWMODE 0x80000000
358 379
359# define PU_RATIO 0x0000000F 380#define PU_RATIO 0x0000000F
360 381
361# define PU_FOOD 0x00000010 382#define PU_FOOD 0x00000010
362# define PU_DRINK 0x00000020 383#define PU_DRINK 0x00000020
363# define PU_VALUABLES 0x00000040 384#define PU_VALUABLES 0x00000040
364# define PU_BOW 0x00000080 385#define PU_BOW 0x00000080
365 386
366# define PU_ARROW 0x00000100 387#define PU_ARROW 0x00000100
367# define PU_HELMET 0x00000200 388#define PU_HELMET 0x00000200
368# define PU_SHIELD 0x00000400 389#define PU_SHIELD 0x00000400
369# define PU_ARMOUR 0x00000800 390#define PU_ARMOUR 0x00000800
370 391
371# define PU_BOOTS 0x00001000 392#define PU_BOOTS 0x00001000
372# define PU_GLOVES 0x00002000 393#define PU_GLOVES 0x00002000
373# define PU_CLOAK 0x00004000 394#define PU_CLOAK 0x00004000
374# define PU_KEY 0x00008000 395#define PU_KEY 0x00008000
375 396
376# define PU_MISSILEWEAPON 0x00010000 397#define PU_MISSILEWEAPON 0x00010000
377# define PU_ALLWEAPON 0x00020000 398#define PU_ALLWEAPON 0x00020000
378# define PU_MAGICAL 0x00040000 399#define PU_MAGICAL 0x00040000
379# define PU_POTION 0x00080000 400#define PU_POTION 0x00080000
380 401
381# define PU_SPELLBOOK 0x00100000 402#define PU_SPELLBOOK 0x00100000
382# define PU_SKILLSCROLL 0x00200000 403#define PU_SKILLSCROLL 0x00200000
383# define PU_READABLES 0x00400000 404#define PU_READABLES 0x00400000
384# define PU_MAGIC_DEVICE 0x00800000 405#define PU_MAGIC_DEVICE 0x00800000
385 406
386# define PU_NOT_CURSED 0x01000000 407#define PU_NOT_CURSED 0x01000000
387# define PU_JEWELS 0x02000000 408#define PU_JEWELS 0x02000000
409#define PU_FLESH 0x04000000
388 410
389 411
390/* Instead of using arbitrary constants for indexing the 412/* Instead of using arbitrary constants for indexing the
391 * freearr, add these values. <= SIZEOFFREE1 will get you 413 * freearr, add these values. <= SIZEOFFREE1 will get you
392 * within 1 space. <= SIZEOFFREE2 wll get you withing 414 * within 1 space. <= SIZEOFFREE2 wll get you withing
393 * 2 spaces, and the entire array (< SIZEOFFREE) is 415 * 2 spaces, and the entire array (< SIZEOFFREE) is
394 * three spaces 416 * three spaces
395 */ 417 */
396# define SIZEOFFREE1 8 418#define SIZEOFFREE1 8
397# define SIZEOFFREE2 24 419#define SIZEOFFREE2 24
398# define SIZEOFFREE 49 420#define SIZEOFFREE 49
399 421
400# define NROF_SOUNDS (23 + NROFREALSPELLS) /* Number of sounds */ 422#define NROF_SOUNDS (23 + NROFREALSPELLS) /* Number of sounds */
401 423
402/* Flag structure now changed. 424/*
403 * Each flag is now a bit offset, starting at zero. The macros
404 * will update/read the appropriate flag element in the object
405 * structure.
406 *
407 * Hopefully, since these offsets are integer constants set at run time,
408 * the compiler will reduce the macros something as simple as the
409 * old system was.
410 *
411 * Flags now have FLAG as the prefix. This to be clearer, and also
412 * to make sure F_ names are not still being used anyplace.
413 *
414 * The macros below assume that the flag size for each element is 32
415 * bits. IF it is smaller, bad things will happen. See structs.h
416 * for more info.
417 *
418 * All functions should use the macros below. In process of converting
419 * to the new system, I find several files that did not use the previous
420 * macros.
421 *
422 * If any FLAG's are or changed, make sure the flag_names structure in 425 * If any FLAG's are added or changed, make sure the flag_names structure in
423 * common/loader.l is updated. 426 * common/loader.l is updated.
424 *
425 * flags[0] is 0 to 31
426 * flags[1] is 32 to 63
427 * flags[2] is 64 to 95
428 * flags[3] is 96 to 127
429 */ 427 */
430 428
431/* Basic routines to do above */ 429/* Basic routines to do above */
432# define SET_FLAG(xyz, p) \ 430#define SET_FLAG(obj, flag) (obj)->flags[flag] = 1
433 ((xyz)->flags[p/32] |= (1U << (p % 32))) 431#define CLEAR_FLAG(obj, flag) (obj)->flags[flag] = 0
434# define CLEAR_FLAG(xyz, p) \ 432#define QUERY_FLAG(obj, flag) (obj)->flags[flag]
435 ((xyz)->flags[p/32] &= ~(1U << (p % 32)))
436# define QUERY_FLAG(xyz, p) \
437 ((xyz)->flags[p/32] & (1U << (p % 32)))
438# define COMPARE_FLAGS(p,q) \
439 ( \
440 ((p)->flags[0] == (q)->flags[0]) && \
441 ((p)->flags[1] == (q)->flags[1]) && \
442 ((p)->flags[2] == (q)->flags[2]) && \
443 ((p)->flags[3] == (q)->flags[3]) \
444 )
445
446/* convenience macros to determine what kind of things we are dealing with */
447
448# define IS_WEAPON(op) \
449 (op->type == ARROW || op->type == BOW || op->type == WEAPON)
450
451# define IS_ARMOR(op) \
452 (op->type == ARMOUR || op->type == SHIELD || op->type == HELMET || \
453 op->type == CLOAK || op->type == BOOTS || op->type == GLOVES || \
454 op->type == BRACERS || op->type == GIRDLE)
455
456# define IS_LIVE(op) \
457 ((op->type == PLAYER || QUERY_FLAG(op, FLAG_MONSTER) || \
458 (QUERY_FLAG(op, FLAG_ALIVE) && !QUERY_FLAG(op, FLAG_GENERATOR) && \
459 !op->type == DOOR)) && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE)))
460
461# define IS_ARROW(op) \
462 (op->type==ARROW || \
463 (op->type==SPELL_EFFECT && \
464 (op->subtype == SP_BULLET || op->subtype == SP_MAGIC_MISSILE)))
465
466/* This return TRUE if object has still randomitems which
467 * could be expanded.
468 */
469# define HAS_RANDOM_ITEMS(op) (op->randomitems && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE)))
470 433
471/* the flags */ 434/* the flags */
472 435
473# define FLAG_ALIVE 0 /* Object can fight (or be fought) */ 436#define FLAG_ALIVE 0 /* Object can fight (or be fought) */
474# define FLAG_WIZ 1 /* Object has special privilegies */ 437#define FLAG_WIZ 1 /* Object has special privilegies */
475# define FLAG_REMOVED 2 /* Object is not in any map or invenory */ 438#define FLAG_REMOVED 2 /* Object is not in any map or invenory */
476# define FLAG_FREED 3 /* Object is in the list of free objects */ 439#define FLAG_FREED 3 /* Object is in the list of free objects */
477# define FLAG_WAS_WIZ 4 /* Player was once a wiz */ 440#define FLAG_WAS_WIZ 4 /* Player was once a wiz */
478# define FLAG_APPLIED 5 /* Object is ready for use by living */ 441#define FLAG_APPLIED 5 /* Object is ready for use by living */
479# define FLAG_UNPAID 6 /* Object hasn't been paid for yet */ 442#define FLAG_UNPAID 6 /* Object hasn't been paid for yet */
480# define FLAG_USE_SHIELD 7 443#define FLAG_USE_SHIELD 7
481 /* Can this creature use a shield? */ 444 /* Can this creature use a shield? */
482 445
483# define FLAG_NO_PICK 8 /* Object can't be picked up */ 446#define FLAG_NO_PICK 8 /* Object can't be picked up */
484 447
485 /*#define FLAG_WALK_ON 9*//* Applied when it's walked upon */ 448 /*#define FLAG_WALK_ON 9*//* Applied when it's walked upon */
486 449
487 /*#define FLAG_NO_PASS 10*//* Nothing can pass (wall() is true) */ 450 /*#define FLAG_NO_PASS 10*//* Nothing can pass (wall() is true) */
488# define FLAG_ANIMATE 11 /* The object looks at archetype for faces */ 451#define FLAG_ANIMATE 11 /* The object looks at archetype for faces */
489 452
490 /*#define FLAG_SLOW_MOVE 12*//* Uses the stats.exp/1000 to slow down */ 453 /*#define FLAG_SLOW_MOVE 12*//* Uses the stats.exp/1000 to slow down */
491 454
492 /*#define FLAG_FLYING 13*//* Not affected by WALK_ON or SLOW_MOVE) */ 455 /*#define FLAG_FLYING 13*//* Not affected by WALK_ON or SLOW_MOVE) */
493# define FLAG_MONSTER 14 /* Will attack players */ 456#define FLAG_MONSTER 14 /* Will attack players */
494# define FLAG_FRIENDLY 15 /* Will help players */ 457#define FLAG_FRIENDLY 15 /* Will help players */
495 458
496# define FLAG_GENERATOR 16 /* Will generate type ob->stats.food */ 459#define FLAG_GENERATOR 16 /* Will generate type ob->stats.food */
497# define FLAG_IS_THROWN 17 /* Object is designed to be thrown. */ 460#define FLAG_IS_THROWN 17 /* Object is designed to be thrown. */
498# define FLAG_AUTO_APPLY 18 461#define FLAG_AUTO_APPLY 18
499 /* Will be applied when created */ 462 /* Will be applied when created */
500# define FLAG_TREASURE 19 /* Will generate treasure when applied */ 463 // not used anywhere in the code // #define FLAG_TREASURE 19 /* Will generate treasure when applied */
501# define FLAG_PLAYER_SOLD 20 /* Object was sold to a shop by a player. */ 464#define FLAG_PLAYER_SOLD 20 /* Object was sold to a shop by a player. */
502# define FLAG_SEE_INVISIBLE 21 /* Will see invisible player */ 465#define FLAG_SEE_INVISIBLE 21 /* Will see invisible player */
503# define FLAG_CAN_ROLL 22 /* Object can be rolled */ 466#define FLAG_CAN_ROLL 22 /* Object can be rolled */
504# define FLAG_OVERLAY_FLOOR 23 /* Object is an overlay floor */ 467#define FLAG_OVERLAY_FLOOR 23 /* Object is an overlay floor */
505# define FLAG_IS_TURNABLE 24 /* Object can change face with direction */ 468#define FLAG_IS_TURNABLE 24 /* Object can change face with direction */
506 469
507 /*#define FLAG_WALK_OFF 25*//* Object is applied when left */ 470 /*#define FLAG_WALK_OFF 25*//* Object is applied when left */
508 471
509 /*#define FLAG_FLY_ON 26*//* As WALK_ON, but only with FLAG_FLYING */ 472 /*#define FLAG_FLY_ON 26*//* As WALK_ON, but only with FLAG_FLYING */
510 473
511 /*#define FLAG_FLY_OFF 27*//* As WALK_OFF, but only with FLAG_FLYING */ 474 /*#define FLAG_FLY_OFF 27*//* As WALK_OFF, but only with FLAG_FLYING */
512# define FLAG_IS_USED_UP 28 475#define FLAG_IS_USED_UP 28
513 /* When (--food<0) the object will exit */ 476 /* When (--food<0) the object will exit */
514# define FLAG_IDENTIFIED 29 477#define FLAG_IDENTIFIED 29
515 /* Player knows full info about item */ 478 /* Player knows full info about item */
516# define FLAG_REFLECTING 30 479#define FLAG_REFLECTING 30
517 /* Object reflects from walls (lightning) */ 480 /* Object reflects from walls (lightning) */
518# define FLAG_CHANGING 31 /* Changes to other_arch when anim is done */ 481#define FLAG_CHANGING 31 /* Changes to other_arch when anim is done */
519 482
520/* Start of values in flags[1] */ 483/* Start of values in flags[1] */
521# define FLAG_SPLITTING 32 /* Object splits into stats.food other objs */ 484#define FLAG_SPLITTING 32 /* Object splits into stats.food other objs */
522# define FLAG_HITBACK 33 /* Object will hit back when hit */ 485#define FLAG_HITBACK 33 /* Object will hit back when hit */
523# define FLAG_STARTEQUIP 34 486#define FLAG_STARTEQUIP 34
524 /* Object was given to player at start */ 487 /* Object was given to player at start */
525# define FLAG_BLOCKSVIEW 35 488#define FLAG_BLOCKSVIEW 35
526 /* Object blocks view */ 489 /* Object blocks view */
527# define FLAG_UNDEAD 36 /* Monster is undead */ 490#define FLAG_UNDEAD 36 /* Monster is undead */
528# define FLAG_SCARED 37 /* Monster is scared (mb player in future) */ 491#define FLAG_SCARED 37 /* Monster is scared (mb player in future) */
529# define FLAG_UNAGGRESSIVE 38 /* Monster doesn't attack players */ 492#define FLAG_UNAGGRESSIVE 38 /* Monster doesn't attack players */
530# define FLAG_REFL_MISSILE 39 /* Arrows will reflect from object */ 493#define FLAG_REFL_MISSILE 39 /* Arrows will reflect from object */
531 494
532# define FLAG_REFL_SPELL 40 495#define FLAG_REFL_SPELL 40
533 /* Spells (some) will reflect from object */ 496 /* Spells (some) will reflect from object */
534# define FLAG_NO_MAGIC 41 /* Spells (some) can't pass this object */ 497#define FLAG_NO_MAGIC 41 /* Spells (some) can't pass this object */
535# define FLAG_NO_FIX_PLAYER 42 /* fix_player() won't be called */ 498#define FLAG_NO_FIX_PLAYER 42 /* fix_player() won't be called */
536# define FLAG_IS_LIGHTABLE 43 /* object can be lit */ 499#define FLAG_IS_LIGHTABLE 43 /* object can be lit */
537# define FLAG_TEAR_DOWN 44 /* at->faces[hp*animations/maxhp] at hit */ 500#define FLAG_TEAR_DOWN 44 /* at->faces[hp*animations/maxhp] at hit */
538# define FLAG_RUN_AWAY 45 /* Object runs away from nearest player \ 501#define FLAG_RUN_AWAY 45 /* Object runs away from nearest player \
539 but can still attack at a distance */ 502 but can still attack at a distance */
540 503
541 /*#define FLAG_PASS_THRU 46*//* Objects with can_pass_thru can pass \ 504 /*#define FLAG_PASS_THRU 46*//* Objects with can_pass_thru can pass \
542 thru this object as if it wasn't there */ 505 thru this object as if it wasn't there */
543 506
544 /*#define FLAG_CAN_PASS_THRU 47*//* Can pass thru... */ 507 /*#define FLAG_CAN_PASS_THRU 47*//* Can pass thru... */
545 508
546# define FLAG_PICK_UP 48 /* Can pick up */ 509#define FLAG_PICK_UP 48 /* Can pick up */
547# define FLAG_UNIQUE 49 /* Item is really unique (UNIQUE_ITEMS) */ 510#define FLAG_UNIQUE 49 /* Item is really unique (UNIQUE_ITEMS) */
548# define FLAG_NO_DROP 50 /* Object can't be dropped */ 511#define FLAG_NO_DROP 50 /* Object can't be dropped */
549# define FLAG_WIZCAST 51 /* The wizard can cast spells in no-magic area */ 512#define FLAG_WIZCAST 51 /* The wizard can cast spells in no-magic area */
550# define FLAG_CAST_SPELL 52 513#define FLAG_CAST_SPELL 52
551 /* (Monster) can learn and cast spells */ 514 /* (Monster) can learn and cast spells */
552# define FLAG_USE_SCROLL 53 515#define FLAG_USE_SCROLL 53
553 /* (Monster) can read scroll */ 516 /* (Monster) can read scroll */
554# define FLAG_USE_RANGE 54 /* (Monster) can apply and use range items */ 517#define FLAG_USE_RANGE 54 /* (Monster) can apply and use range items */
555# define FLAG_USE_BOW 55 /* (Monster) can apply and fire bows */ 518#define FLAG_USE_BOW 55 /* (Monster) can apply and fire bows */
556 519
557# define FLAG_USE_ARMOUR 56 520#define FLAG_USE_ARMOUR 56
558 /* (Monster) can wear armour/shield/helmet */ 521 /* (Monster) can wear armour/shield/helmet */
559# define FLAG_USE_WEAPON 57 522#define FLAG_USE_WEAPON 57
560 /* (Monster) can wield weapons */ 523 /* (Monster) can wield weapons */
561# define FLAG_USE_RING 58 /* (Monster) can use rings, boots, gauntlets, etc */ 524#define FLAG_USE_RING 58 /* (Monster) can use rings, boots, gauntlets, etc */
562# define FLAG_READY_RANGE 59 /* (Monster) has a range attack readied... 8) */ 525#define FLAG_READY_RANGE 59 /* (Monster) has a range attack readied... 8) */
563# define FLAG_READY_BOW 60 /* not implemented yet */ 526#define FLAG_READY_BOW 60 /* not implemented yet */
564# define FLAG_XRAYS 61 /* X-ray vision */ 527#define FLAG_XRAYS 61 /* X-ray vision */
565# define FLAG_NO_APPLY 62 /* Avoids step_on/fly_on to this object */ 528#define FLAG_NO_APPLY 62 /* Avoids step_on/fly_on to this object */
566# define FLAG_IS_FLOOR 63 /* Can't see what's underneath this object */ 529#define FLAG_IS_FLOOR 63 /* Can't see what's underneath this object */
567 530
568/* Start of values in flags[2] */ 531/* Start of values in flags[2] */
569# define FLAG_LIFESAVE 64 /* Saves a players' life once, then destr. */ 532#define FLAG_LIFESAVE 64 /* Saves a players' life once, then destr. */
570# define FLAG_NO_STRENGTH 65 /* Strength-bonus not added to wc/dam */ 533#define FLAG_NO_STRENGTH 65 /* Strength-bonus not added to wc/dam */
571# define FLAG_SLEEP 66 /* NPC is sleeping */ 534#define FLAG_SLEEP 66 /* NPC is sleeping */
572# define FLAG_STAND_STILL 67 /* NPC will not (ever) move */ 535#define FLAG_STAND_STILL 67 /* NPC will not (ever) move */
573# define FLAG_RANDOM_MOVE 68 /* NPC will move randomly */ 536#define FLAG_RANDOM_MOVE 68 /* NPC will move randomly */
574# define FLAG_ONLY_ATTACK 69 /* NPC will evaporate if there is no enemy */ 537#define FLAG_ONLY_ATTACK 69 /* NPC will evaporate if there is no enemy */
575# define FLAG_CONFUSED 70 /* Will also be unable to cast spells */ 538#define FLAG_CONFUSED 70 /* Will also be unable to cast spells */
576# define FLAG_STEALTH 71 /* Will wake monsters with less range */ 539#define FLAG_STEALTH 71 /* Will wake monsters with less range */
577 540
578# define FLAG_WIZPASS 72 /* The wizard can go through walls */ 541#define FLAG_WIZPASS 72 /* The wizard can go through walls */
579# define FLAG_IS_LINKED 73 /* The object is linked with other objects */ 542#define FLAG_IS_LINKED 73 /* The object is linked with other objects */
580# define FLAG_CURSED 74 /* The object is cursed */ 543#define FLAG_CURSED 74 /* The object is cursed */
581# define FLAG_DAMNED 75 /* The object is _very_ cursed */ 544#define FLAG_DAMNED 75 /* The object is _very_ cursed */
582# define FLAG_SEE_ANYWHERE 76 /* The object will be visible behind walls */ 545#define FLAG_SEE_ANYWHERE 76 /* The object will be visible behind walls */
583# define FLAG_KNOWN_MAGICAL 77 /* The object is known to be magical */ 546#define FLAG_KNOWN_MAGICAL 77 /* The object is known to be magical */
584# define FLAG_KNOWN_CURSED 78 /* The object is known to be cursed */ 547#define FLAG_KNOWN_CURSED 78 /* The object is known to be cursed */
585# define FLAG_CAN_USE_SKILL 79 /* The monster can use skills */ 548#define FLAG_CAN_USE_SKILL 79 /* The monster can use skills */
586 549
587# define FLAG_BEEN_APPLIED 80 /* The object has been applied */ 550#define FLAG_BEEN_APPLIED 80 /* The object has been applied */
588# define FLAG_READY_SCROLL 81 /* monster has scroll in inv and can use it */ 551#define FLAG_READY_SCROLL 81 /* monster has scroll in inv and can use it */
589# define FLAG_USE_ROD 82 /* (Monster) can apply and use rods */ 552#define FLAG_USE_ROD 82 /* (Monster) can apply and use rods */
590 553
591/*#define FLAG_READY_HORN 83 unused (Monster) has a horn readied */ 554/*#define FLAG_READY_HORN 83 unused (Monster) has a horn readied */
592# define FLAG_USE_HORN 84 /* (Monster) can apply and use horns */ 555#define FLAG_USE_HORN 84 /* (Monster) can apply and use horns */
593# define FLAG_MAKE_INVIS 85 556#define FLAG_MAKE_INVIS 85
594 /* (Item) gives invisibility when applied */ 557 /* (Item) gives invisibility when applied */
595# define FLAG_INV_LOCKED 86 558#define FLAG_INV_LOCKED 86
596 /* Item will not be dropped from inventory */ 559 /* Item will not be dropped from inventory */
597# define FLAG_IS_WOODED 87 /* Item is wooded terrain */ 560#define FLAG_IS_WOODED 87 /* Item is wooded terrain */
598 561
599# define FLAG_IS_HILLY 88 /* Item is hilly/mountain terrain */ 562#define FLAG_IS_HILLY 88 /* Item is hilly/mountain terrain */
600# define FLAG_READY_SKILL 89 /* (Monster or Player) has a skill readied */ 563#define FLAG_READY_SKILL 89 /* (Monster or Player) has a skill readied */
601# define FLAG_READY_WEAPON 90 /* (Monster or Player) has a weapon readied */ 564#define FLAG_READY_WEAPON 90 /* (Monster or Player) has a weapon readied */
602# define FLAG_NO_SKILL_IDENT 91 /* If set, item cannot be identified w/ a skill */ 565#define FLAG_NO_SKILL_IDENT 91 /* If set, item cannot be identified w/ a skill */
603# define FLAG_BLIND 92 /* If set, object cannot see (visually) */ 566#define FLAG_BLIND 92 /* If set, object cannot see (visually) */
604# define FLAG_SEE_IN_DARK 93 /* if set ob not effected by darkness */ 567#define FLAG_SEE_IN_DARK 93 /* if set ob not effected by darkness */
605# define FLAG_IS_CAULDRON 94 /* container can make alchemical stuff */ 568#define FLAG_IS_CAULDRON 94 /* container can make alchemical stuff */
606 569
607 /*#define FLAG_DUST 95 *//* item is a 'powder', effects throwing */ 570 /*#define FLAG_DUST 95 *//* item is a 'powder', effects throwing */
608 571
609/* Start of values in flags[3] */ 572/* Start of values in flags[3] */
610# define FLAG_NO_STEAL 96 /* Item can't be stolen */ 573#define FLAG_NO_STEAL 96 /* Item can't be stolen */
611# define FLAG_ONE_HIT 97 /* Monster can only hit once before going 574#define FLAG_ONE_HIT 97 /* Monster can only hit once before going
612 * away (replaces ghosthit) 575 * away (replaces ghosthit)
613 */ 576 */
614# define FLAG_CLIENT_SENT 98 /* THIS IS A DEBUG FLAG ONLY. We use it to 577#define FLAG_CLIENT_SENT 98 /* THIS IS A DEBUG FLAG ONLY. We use it to
615 * detect cases were the server is trying 578 * detect cases were the server is trying
616 * to send an upditem when we have not 579 * to send an upditem when we have not
617 * actually sent the item. 580 * actually sent the item.
618 */ 581 */
619 582
620# define FLAG_BERSERK 99 /* monster will attack closest living 583#define FLAG_BERSERK 99 /* monster will attack closest living
621 object */ 584 object */
622# define FLAG_NEUTRAL 100 /* monster is from type neutral */ 585#define FLAG_NEUTRAL 100 /* monster is from type neutral */
623# define FLAG_NO_ATTACK 101 /* monster don't attack */ 586#define FLAG_NO_ATTACK 101 /* monster don't attack */
624# define FLAG_NO_DAMAGE 102 /* monster can't be damaged */ 587#define FLAG_NO_DAMAGE 102 /* monster can't be damaged */
625# define FLAG_OBJ_ORIGINAL 103 /* NEVER SET THIS. Item was loaded by 588#define FLAG_OBJ_ORIGINAL 103 /* NEVER SET THIS. Item was loaded by
626 * load_original_map() */ 589 * load_original_map() */
627# define FLAG_OBJ_SAVE_ON_OVL 104 /* this object should be saved on 590#define FLAG_OBJ_SAVE_ON_OVL 104 /* this object should be saved on
628 * the overlay, and is not subject to 591 * the overlay, and is not subject to
629 * decay. */ 592 * decay. */
630# define FLAG_ACTIVATE_ON_PUSH 105 /* connected object is activated when 'pushed' */ 593#define FLAG_ACTIVATE_ON_PUSH 105 /* connected object is activated when 'pushed' */
631# define FLAG_ACTIVATE_ON_RELEASE 106 /* connected object is activated when 'released' */ 594#define FLAG_ACTIVATE_ON_RELEASE 106 /* connected object is activated when 'released' */
632# define FLAG_IS_WATER 107 595#define FLAG_IS_WATER 107
633# define FLAG_CONTENT_ON_GEN 108 596#define FLAG_CONTENT_ON_GEN 108
634# define FLAG_IS_A_TEMPLATE 109 /* Object has no ingame life until instanciated */ 597#define FLAG_IS_A_TEMPLATE 109 /* Object has no ingame life until instanciated */
635# define FLAG_IS_BUILDABLE 110 /* Can build on item */ 598#define FLAG_IS_BUILDABLE 110 /* Can build on item */
636# define FLAG_AFK 111 /* Player is AFK */ 599#define FLAG_AFK 111 /* Player is AFK */
637# define NUM_FLAGS 111 /* Should always be equal to the last 600#define NUM_FLAGS 111 /* Should always be equal to the last
638 * defined flag. If you change this, 601 * defined flag. If you change this,
639 * make sure you update the flag_links 602 * make sure you update the flag_links
640 * in common/loader.l 603 * in common/loader.l
641 */ 604 */
642 605
644 * object structure needs to be enlarged. 607 * object structure needs to be enlarged.
645 * So there are 18 available flags slots 608 * So there are 18 available flags slots
646 */ 609 */
647 610
648 611
649# define NROFNEWOBJS(xyz) ((xyz)->stats.food) 612#define NROFNEWOBJS(xyz) ((xyz)->stats.food)
650 613
651# if 0 614#if 0
652 615
653/* These should no longer be needed - access move_slow_penalty 616/* These should no longer be needed - access move_slow_penalty
654 * directly. 617 * directly.
655 */ 618 */
656# define SLOW_PENALTY(xyz) ((xyz)->stats.exp)/1000.0 619# define SLOW_PENALTY(xyz) ((xyz)->stats.exp)/1000.0
657# define SET_SLOW_PENALTY(xyz,fl) (xyz)->stats.exp=(fl)*1000 620# define SET_SLOW_PENALTY(xyz,fl) (xyz)->stats.exp=(fl)*1000
658# endif 621#endif
659 622
660/* If you add new movement types, you may need to update 623/* If you add new movement types, you may need to update
661 * describe_item() so properly describe those types. 624 * describe_item() so properly describe those types.
662 * change_abil() probably should be updated also. 625 * change_abil() probably should be updated also.
663 */ 626 */
664# define MOVE_WALK 0x1 /* Object walks */ 627#define MOVE_WALK 0x1 /* Object walks */
665# define MOVE_FLY_LOW 0x2 /* Low flying object */ 628#define MOVE_FLY_LOW 0x2 /* Low flying object */
666# define MOVE_FLY_HIGH 0x4 /* High flying object */ 629#define MOVE_FLY_HIGH 0x4 /* High flying object */
667# define MOVE_FLYING 0x6 630#define MOVE_FLYING 0x6
668 /* Combo of fly_low and fly_high */ 631 /* Combo of fly_low and fly_high */
669# define MOVE_SWIM 0x8 /* Swimming object */ 632#define MOVE_SWIM 0x8 /* Swimming object */
670# define MOVE_BOAT 0x10 /* Boats/sailing */ 633#define MOVE_BOAT 0x10 /* Boats/sailing */
671# define MOVE_ALL 0x1f /* Mask of all movement types */ 634#define MOVE_ALL 0x1f /* Mask of all movement types */
672 635
673/* the normal assumption is that objects are walking/flying. 636/* the normal assumption is that objects are walking/flying.
674 * So often we don't want to block movement, but still don't want 637 * So often we don't want to block movement, but still don't want
675 * to allow all types (swimming is rather specialized) - I also 638 * to allow all types (swimming is rather specialized) - I also
676 * expect as more movement types show up, this is likely to get 639 * expect as more movement types show up, this is likely to get
677 * updated. Basically, this is the default for spaces that allow 640 * updated. Basically, this is the default for spaces that allow
678 * movement - anything but swimming right now. If you really 641 * movement - anything but swimming right now. If you really
679 * want nothing at all, then can always set move_block to 0 642 * want nothing at all, then can always set move_block to 0
680 */ 643 */
681# define MOVE_BLOCK_DEFAULT MOVE_SWIM 644#define MOVE_BLOCK_DEFAULT MOVE_SWIM
682 645
683/* typdef here to define type large enough to hold bitmask of 646/* typdef here to define type large enough to hold bitmask of
684 * all movement types. Make one declaration so easy to update. 647 * all movement types. Make one declaration so easy to update.
685 * uint8 is defined yet, so just use what that would define it 648 * uint8 is defined yet, so just use what that would define it
686 * at anyways. 649 * at anyways.
688typedef unsigned char MoveType; 651typedef unsigned char MoveType;
689 652
690/* Basic macro to see if ob2 blocks ob1 from moving onto this space. 653/* Basic macro to see if ob2 blocks ob1 from moving onto this space.
691 * Basically, ob2 has to block all of ob1 movement types. 654 * Basically, ob2 has to block all of ob1 movement types.
692 */ 655 */
693# define OB_MOVE_BLOCK(ob1, ob2) \ 656#define OB_MOVE_BLOCK(ob1, ob2) \
694 ((ob1->move_type & ob2->move_block) == ob1->move_type) 657 ((ob1->move_type & ob2->move_block) == ob1->move_type)
695 658
696/* Basic macro to see if if ob1 can not move onto a space based 659/* Basic macro to see if if ob1 can not move onto a space based
697 * on the 'type' move_block parameter 660 * on the 'type' move_block parameter
698 * Add check - if type is 0, don't stop anything from moving 661 * Add check - if type is 0, don't stop anything from moving
699 * onto it. 662 * onto it.
700 * 663 *
701 */ 664 */
702# define OB_TYPE_MOVE_BLOCK(ob1, type) \ 665#define OB_TYPE_MOVE_BLOCK(ob1, type) \
703 ( (type != 0) && (ob1->move_type & type) == ob1->move_type) 666 ( (type != 0) && (ob1->move_type & type) == ob1->move_type)
704 667
705 668
706# define SET_GENERATE_TYPE(xyz,va) (xyz)->stats.sp=(va) 669#define SET_GENERATE_TYPE(xyz,va) (xyz)->stats.sp=(va)
707# define GENERATE_TYPE(xyz) ((xyz)->stats.sp) 670#define GENERATE_TYPE(xyz) ((xyz)->stats.sp)
708# define GENERATE_SPEED(xyz) ((xyz)->stats.maxsp) /* if(!RANDOM()%<speed>) */ 671#define GENERATE_SPEED(xyz) ((xyz)->stats.maxsp) /* if(!RANDOM()%<speed>) */
709 672
710/* Note: These values are only a default value, resizing can change them */ 673/* Note: These values are only a default value, resizing can change them */
711# define INV_SIZE 12 /* How many items can be viewed in inventory */ 674#define INV_SIZE 12 /* How many items can be viewed in inventory */
712# define LOOK_SIZE 6 /* ditto, but for the look-window */ 675#define LOOK_SIZE 6 /* ditto, but for the look-window */
713# define MAX_INV_SIZE 40 /* For initializing arrays */ 676#define MAX_INV_SIZE 40 /* For initializing arrays */
714# define MAX_LOOK_SIZE 40 /* ditto for the look-window */ 677#define MAX_LOOK_SIZE 40 /* ditto for the look-window */
715 678
716# define EDITABLE(xyz) ((xyz)->arch->editable) 679#define EDITABLE(xyz) ((xyz)->arch->editable)
717 680
718# define E_MONSTER 0x00000001 681#define E_MONSTER 0x00000001
719# define E_EXIT 0x00000002 682#define E_EXIT 0x00000002
720# define E_TREASURE 0x00000004 683#define E_TREASURE 0x00000004
721# define E_BACKGROUND 0x00000008 684#define E_BACKGROUND 0x00000008
722# define E_DOOR 0x00000010 685#define E_DOOR 0x00000010
723# define E_SPECIAL 0x00000020 686#define E_SPECIAL 0x00000020
724# define E_SHOP 0x00000040 687#define E_SHOP 0x00000040
725# define E_NORMAL 0x00000080 688#define E_NORMAL 0x00000080
726# define E_FALSE_WALL 0x00000100 689#define E_FALSE_WALL 0x00000100
727# define E_WALL 0x00000200 690#define E_WALL 0x00000200
728# define E_EQUIPMENT 0x00000400 691#define E_EQUIPMENT 0x00000400
729# define E_OTHER 0x00000800 692#define E_OTHER 0x00000800
730# define E_ARTIFACT 0x00001000 693#define E_ARTIFACT 0x00001000
731 694
732# define EXIT_PATH(xyz) (xyz)->slaying 695#define EXIT_PATH(xyz) (xyz)->slaying
733# define EXIT_LEVEL(xyz) (xyz)->stats.food 696#define EXIT_LEVEL(xyz) (xyz)->stats.food
734# define EXIT_X(xyz) (xyz)->stats.hp 697#define EXIT_X(xyz) (xyz)->stats.hp
735# define EXIT_Y(xyz) (xyz)->stats.sp 698#define EXIT_Y(xyz) (xyz)->stats.sp
736# define EXIT_ALT_X(xyz) (xyz)->stats.maxhp 699#define EXIT_ALT_X(xyz) (xyz)->stats.maxhp
737# define EXIT_ALT_Y(xyz) (xyz)->stats.maxsp 700#define EXIT_ALT_Y(xyz) (xyz)->stats.maxsp
738 701
739/* for use by the lighting code */ 702/* for use by the lighting code */
740# define MAX_LIGHT_RADII 4 703#define MAX_LIGHT_RADII 4
741 /* max radii for 'light' object, really 704 /* max radii for 'light' object, really
742 * large values allow objects that can 705 * large values allow objects that can
743 * slow down the game */ 706 * slow down the game */
744# define MAX_DARKNESS 5 /* maximum map darkness, there is no 707#define MAX_DARKNESS 5 /* maximum map darkness, there is no
745 * practical reason to exceed this */ 708 * practical reason to exceed this */
746# define BRIGHTNESS(xyz) (xyz)->glow_radius>MAX_LIGHT_RADII? \ 709#define BRIGHTNESS(xyz) (xyz)->glow_radius>MAX_LIGHT_RADII? \
747 MAX_LIGHT_RADII:(xyz)->glow_radius; 710 MAX_LIGHT_RADII:(xyz)->glow_radius;
748 711
749# define F_BUY 0 712#define F_BUY 0
750# define F_SELL 1 713#define F_SELL 1
751# define F_TRUE 2 /* True value of item, unadjusted */ 714#define F_TRUE 2 /* True value of item, unadjusted */
752# define F_NO_BARGAIN 4 /* combine with F_BUY or F_SELL to disable bargaining calc */ 715#define F_NO_BARGAIN 4 /* combine with F_BUY or F_SELL to disable bargaining calc */
753# define F_IDENTIFIED 8 /* flag to calculate value of identified item */ 716#define F_IDENTIFIED 8 /* flag to calculate value of identified item */
754# define F_NOT_CURSED 16 /* flag to calculate value of uncursed item */ 717#define F_NOT_CURSED 16 /* flag to calculate value of uncursed item */
755# define F_APPROX 32 /* flag to give a guess of item value */ 718#define F_APPROX 32 /* flag to give a guess of item value */
756# define F_SHOP 64 /* consider the effect that the shop that the player is in has */ 719#define F_SHOP 64 /* consider the effect that the shop that the player is in has */
757 720
758# define DIRX(xyz) freearr_x[(xyz)->direction] 721#define DIRX(xyz) freearr_x[(xyz)->direction]
759# define DIRY(xyz) freearr_y[(xyz)->direction] 722#define DIRY(xyz) freearr_y[(xyz)->direction]
760 723
761# define D_LOCK(xyz) (xyz)->contr->freeze_inv=(xyz)->contr->freeze_look=1; 724#define D_LOCK(xyz) (xyz)->contr->freeze_inv=(xyz)->contr->freeze_look=1;
762# define D_UNLOCK(xyz) (xyz)->contr->freeze_inv=(xyz)->contr->freeze_look=0; 725#define D_UNLOCK(xyz) (xyz)->contr->freeze_inv=(xyz)->contr->freeze_look=0;
763 726
764# define ARMOUR_SPEED(xyz) (xyz)->last_sp 727#define ARMOUR_SPEED(xyz) (xyz)->last_sp
765# define ARMOUR_SPELLS(xyz) (xyz)->gen_sp_armour 728#define ARMOUR_SPELLS(xyz) (xyz)->gen_sp_armour
766# define WEAPON_SPEED(xyz) (xyz)->last_sp 729#define WEAPON_SPEED(xyz) (xyz)->last_sp
767 730
768/* GET_?_FROM_DIR if used only for positional firing where dir is X and Y 731/* GET_?_FROM_DIR if used only for positional firing where dir is X and Y
769 each of them signed char, concatenated in a int16 */ 732 each of them signed char, concatenated in a int16 */
770# define GET_X_FROM_DIR(dir) (signed char) ( dir & 0xFF ) 733#define GET_X_FROM_DIR(dir) (signed char) ( dir & 0xFF )
771# define GET_Y_FROM_DIR(dir) (signed char) ( (dir & 0xFF00) >> 8) 734#define GET_Y_FROM_DIR(dir) (signed char) ( (dir & 0xFF00) >> 8)
772# define SET_DIR_FROM_XY(X,Y) (signed char)X + ( ((signed char)Y)<<8) 735#define SET_DIR_FROM_XY(X,Y) (signed char)X + ( ((signed char)Y)<<8)
773# define FIRE_DIRECTIONAL 0 736#define FIRE_DIRECTIONAL 0
774# define FIRE_POSITIONAL 1 737#define FIRE_POSITIONAL 1
775 738
776/******************************************************************************/ 739/******************************************************************************/
777 740
778/* Monster Movements added by kholland@sunlab.cit.cornell.edu */ 741/* Monster Movements added by kholland@sunlab.cit.cornell.edu */
779 742
808/* ------------------- */ 771/* ------------------- */
809 772
810/* attack_movement = 33 */ 773/* attack_movement = 33 */
811 774
812/******************************************************************************/ 775/******************************************************************************/
813# define DISTATT 1 /* move toward a player if far, but mantain some space, */ 776#define DISTATT 1 /* move toward a player if far, but mantain some space, */
814 /* attack from a distance - good for missile users only */ 777 /* attack from a distance - good for missile users only */
815# define RUNATT 2 /* run but attack if player catches up to object */ 778#define RUNATT 2 /* run but attack if player catches up to object */
816# define HITRUN 3 /* run to then hit player then run away cyclicly */ 779#define HITRUN 3 /* run to then hit player then run away cyclicly */
817# define WAITATT 4 /* wait for player to approach then hit, move if hit */ 780#define WAITATT 4 /* wait for player to approach then hit, move if hit */
818# define RUSH 5 /* Rush toward player blindly, similiar to dumb monster */ 781#define RUSH 5 /* Rush toward player blindly, similiar to dumb monster */
819# define ALLRUN 6 /* always run never attack good for sim. of weak player */ 782#define ALLRUN 6 /* always run never attack good for sim. of weak player */
820# define DISTHIT 7 /* attack from a distance if hit as recommended by Frank */ 783#define DISTHIT 7 /* attack from a distance if hit as recommended by Frank */
821# define WAIT2 8 /* monster does not try to move towards player if far */ 784#define WAIT2 8 /* monster does not try to move towards player if far */
822 /* maintains comfortable distance */ 785 /* maintains comfortable distance */
823# define PETMOVE 16 /* if the upper four bits of attack_movement */ 786#define PETMOVE 16 /* if the upper four bits of attack_movement */
824 /* are set to this number, the monster follows a player */ 787 /* are set to this number, the monster follows a player */
825 /* until the owner calls it back or off */ 788 /* until the owner calls it back or off */
826 /* player followed denoted by 0b->owner */ 789 /* player followed denoted by 0b->owner */
827 /* the monster will try to attack whatever the player is */ 790 /* the monster will try to attack whatever the player is */
828 /* attacking, and will continue to do so until the owner */ 791 /* attacking, and will continue to do so until the owner */
829 /* calls off the monster - a key command will be */ 792 /* calls off the monster - a key command will be */
830 /* inserted to do so */ 793 /* inserted to do so */
831# define CIRCLE1 32 /* if the upper four bits of move_type / attack_movement */ 794#define CIRCLE1 32 /* if the upper four bits of move_type / attack_movement */
832 /* are set to this number, the monster will move in a */ 795 /* are set to this number, the monster will move in a */
833 /* circle until it is attacked, or the enemy field is */ 796 /* circle until it is attacked, or the enemy field is */
834 /* set, this is good for non-aggressive monsters and NPC */ 797 /* set, this is good for non-aggressive monsters and NPC */
835# define CIRCLE2 48 /* same as above but a larger circle is used */ 798#define CIRCLE2 48 /* same as above but a larger circle is used */
836# define PACEH 64 /* The Monster will pace back and forth until attacked */ 799#define PACEH 64 /* The Monster will pace back and forth until attacked */
837 /* this is HORIZONTAL movement */ 800 /* this is HORIZONTAL movement */
838# define PACEH2 80 /* the monster will pace as above but the length of the */ 801#define PACEH2 80 /* the monster will pace as above but the length of the */
839 /* pace area is longer and the monster stops before */ 802 /* pace area is longer and the monster stops before */
840 /* changing directions */ 803 /* changing directions */
841 /* this is HORIZONTAL movement */ 804 /* this is HORIZONTAL movement */
842# define RANDO 96 /* the monster will go in a random direction until */ 805#define RANDO 96 /* the monster will go in a random direction until */
843 /* it is stopped by an obstacle, then it chooses another */ 806 /* it is stopped by an obstacle, then it chooses another */
844 /* direction. */ 807 /* direction. */
845# define RANDO2 112 /* constantly move in a different random direction */ 808#define RANDO2 112 /* constantly move in a different random direction */
846# define PACEV 128 /* The Monster will pace back and forth until attacked */ 809#define PACEV 128 /* The Monster will pace back and forth until attacked */
847 /* this is VERTICAL movement */ 810 /* this is VERTICAL movement */
848# define PACEV2 144 /* the monster will pace as above but the length of the */ 811#define PACEV2 144 /* the monster will pace as above but the length of the */
849 /* pace area is longer and the monster stops before */ 812 /* pace area is longer and the monster stops before */
850 /* changing directions */ 813 /* changing directions */
851 /* this is VERTICAL movement */ 814 /* this is VERTICAL movement */
852# define LO4 15 /* bitmasks for upper and lower 4 bits from 8 bit fields */ 815#define LO4 15 /* bitmasks for upper and lower 4 bits from 8 bit fields */
853# define HI4 240 816#define HI4 240
854 817
855/* 818/*
856 * Use of the state-variable in player objects: 819 * Use of the state-variable in player objects:
857 */ 820 */
858 821
859# define ST_PLAYING 0 822#define ST_PLAYING 0
860# define ST_PLAY_AGAIN 1 823#define ST_PLAY_AGAIN 1
861# define ST_ROLL_STAT 2 824#define ST_ROLL_STAT 2
862# define ST_CHANGE_CLASS 3 825#define ST_CHANGE_CLASS 3
863# define ST_CONFIRM_QUIT 4 826#define ST_CONFIRM_QUIT 4
864# define ST_CONFIGURE 5 827#define ST_CONFIGURE 5
865# define ST_GET_NAME 6 828#define ST_GET_NAME 6
866# define ST_GET_PASSWORD 7 829#define ST_GET_PASSWORD 7
867# define ST_CONFIRM_PASSWORD 8 830#define ST_CONFIRM_PASSWORD 8
868# define ST_GET_PARTY_PASSWORD 10 831#define ST_GET_PARTY_PASSWORD 10
869 832
870# define BLANK_FACE_NAME "blank.111" 833#define BLANK_FACE_NAME "blank.111"
871# define EMPTY_FACE_NAME "empty.111" 834#define EMPTY_FACE_NAME "empty.111"
872# define DARK_FACE1_NAME "dark1.111" 835#define DARK_FACE1_NAME "dark1.111"
873# define DARK_FACE2_NAME "dark2.111" 836#define DARK_FACE2_NAME "dark2.111"
874# define DARK_FACE3_NAME "dark3.111" 837#define DARK_FACE3_NAME "dark3.111"
875# define SMOOTH_FACE_NAME "default_smoothed.111" 838#define SMOOTH_FACE_NAME "default_smoothed.111"
876 839
877/* 840/*
878 * Defines for the luck/random functions to make things more readable 841 * Defines for the luck/random functions to make things more readable
879 */ 842 */
880 843
881# define PREFER_HIGH 1 844#define PREFER_HIGH 1
882# define PREFER_LOW 0 845#define PREFER_LOW 0
883 846
884/* Simple function we use below to keep adding to the same string 847/* Simple function we use below to keep adding to the same string
885 * but also make sure we don't overwrite that string. 848 * but also make sure we don't overwrite that string.
886 */ 849 */
887static inline void 850static inline void
902/* The SAFE versions of these call the safe_strcat function above. 865/* The SAFE versions of these call the safe_strcat function above.
903 * Ideally, all functions should use the SAFE functions, but they 866 * Ideally, all functions should use the SAFE functions, but they
904 * require some extra support in the calling function to remain as 867 * require some extra support in the calling function to remain as
905 * efficient. 868 * efficient.
906 */ 869 */
907# define DESCRIBE_ABILITY_SAFE(retbuf, variable, name, len, maxlen) \ 870#define DESCRIBE_ABILITY_SAFE(retbuf, variable, name, len, maxlen) \
908 if(variable) { \ 871 if(variable) { \
909 int i,j=0; \ 872 int i,j=0; \
910 safe_strcat(retbuf,"(" name ": ", len, maxlen); \ 873 safe_strcat(retbuf,"(" name ": ", len, maxlen); \
911 for(i=0; i<NROFATTACKS; i++) \ 874 for(i=0; i<NROFATTACKS; i++) \
912 if(variable & (1<<i)) { \ 875 if(variable & (1<<i)) { \
920 } 883 }
921 884
922 885
923/* separated this from the common/item.c file. b.t. Dec 1995 */ 886/* separated this from the common/item.c file. b.t. Dec 1995 */
924 887
925# define DESCRIBE_ABILITY(retbuf, variable, name) \ 888#define DESCRIBE_ABILITY(retbuf, variable, name) \
926 if(variable) { \ 889 if(variable) { \
927 int i,j=0; \ 890 int i,j=0; \
928 strcat(retbuf,"(" name ": "); \ 891 strcat(retbuf,"(" name ": "); \
929 for(i=0; i<NROFATTACKS; i++) \ 892 for(i=0; i<NROFATTACKS; i++) \
930 if(variable & (1<<i)) { \ 893 if(variable & (1<<i)) { \
936 } \ 899 } \
937 strcat(retbuf,")"); \ 900 strcat(retbuf,")"); \
938 } 901 }
939 902
940 903
941# define DESCRIBE_PATH(retbuf, variable, name) \ 904#define DESCRIBE_PATH(retbuf, variable, name) \
942 if(variable) { \ 905 if(variable) { \
943 int i,j=0; \ 906 int i,j=0; \
944 strcat(retbuf,"(" name ": "); \ 907 strcat(retbuf,"(" name ": "); \
945 for(i=0; i<NRSPELLPATHS; i++) \ 908 for(i=0; i<NRSPELLPATHS; i++) \
946 if(variable & (1<<i)) { \ 909 if(variable & (1<<i)) { \
952 } \ 915 } \
953 strcat(retbuf,")"); \ 916 strcat(retbuf,")"); \
954 } 917 }
955 918
956 919
957# define DESCRIBE_PATH_SAFE(retbuf, variable, name, len, maxlen) \ 920#define DESCRIBE_PATH_SAFE(retbuf, variable, name, len, maxlen) \
958 if(variable) { \ 921 if(variable) { \
959 int i,j=0; \ 922 int i,j=0; \
960 safe_strcat(retbuf,"(" name ": ", len, maxlen); \ 923 safe_strcat(retbuf,"(" name ": ", len, maxlen); \
961 for(i=0; i<NRSPELLPATHS; i++) \ 924 for(i=0; i<NRSPELLPATHS; i++) \
962 if(variable & (1<<i)) { \ 925 if(variable & (1<<i)) { \
1010 * this one can be applied. Think of rings - human is wearing two 973 * this one can be applied. Think of rings - human is wearing two
1011 * rings and tries to apply one - there are two possible rings he 974 * rings and tries to apply one - there are two possible rings he
1012 * could remove. 975 * could remove.
1013 * 976 *
1014 */ 977 */
1015# define CAN_APPLY_NEVER 0x1 978#define CAN_APPLY_NEVER 0x1
1016# define CAN_APPLY_RESTRICTION 0x2 979#define CAN_APPLY_RESTRICTION 0x2
1017# define CAN_APPLY_NOT_MASK 0xf 980#define CAN_APPLY_NOT_MASK 0xf
1018# define CAN_APPLY_UNAPPLY 0x10 981#define CAN_APPLY_UNAPPLY 0x10
1019# define CAN_APPLY_UNAPPLY_MULT 0x20 982#define CAN_APPLY_UNAPPLY_MULT 0x20
1020# define CAN_APPLY_UNAPPLY_CHOICE 0x40 983#define CAN_APPLY_UNAPPLY_CHOICE 0x40
1021 984
1022/* Cut off point of when an object is put on the active list or not */ 985/* Cut off point of when an object is put on the active list or not */
1023# define MIN_ACTIVE_SPEED 0.00001 986#define MIN_ACTIVE_SPEED 0.00001
1024 987
1025/* 988/*
1026 * random() is much better than rand(). If you have random(), use it instead. 989 * random() is much better than rand(). If you have random(), use it instead.
1027 * You shouldn't need to change any of this 990 * You shouldn't need to change any of this
1028 * 991 *
1032 * 995 *
1033 * 0.94.2 - you probably shouldn't need to change any of the rand stuff 996 * 0.94.2 - you probably shouldn't need to change any of the rand stuff
1034 * here. 997 * here.
1035 */ 998 */
1036 999
1037# ifdef HAVE_SRANDOM
1038# define RANDOM() random() 1000#define RANDOM() random()
1039# define SRANDOM(xyz) srandom(xyz) 1001#define SRANDOM(xyz) srandom(xyz)
1040# else
1041# ifdef HAVE_SRAND48
1042# define RANDOM() lrand48()
1043# define SRANDOM(xyz) srand48(xyz)
1044# else
1045# ifdef HAVE_SRAND
1046# define RANDOM() rand()
1047# define SRANDOM(xyz) srand(xyz)
1048# else
1049# error "Could not find a usable random routine"
1050# endif
1051# endif
1052# endif
1053 1002
1054/* Returns the weight of the given object. Note: it does not take the number of 1003/* Returns the weight of the given object. Note: it does not take the number of
1055 * items (nrof) into account. 1004 * items (nrof) into account.
1056 */ 1005 */
1057# define WEIGHT(op) (op->nrof?op->weight:op->weight+op->carrying) 1006#define WEIGHT(op) (op->nrof?op->weight:op->weight+op->carrying)
1058 1007
1059 1008
1060/* Code fastening defines 1009/* Code fastening defines
1061 * FAST_STRCAT & FAST_STRNCAT will add buf2__ at position pointed by 1010 * FAST_STRCAT & FAST_STRNCAT will add buf2__ at position pointed by
1062 * buf__ and increment buf__ position so it will point to the end of buf__. 1011 * buf__ and increment buf__ position so it will point to the end of buf__.
1066 * If you use them and have choice between FAST_STRCAT and FAST_STRNCAT, 1015 * If you use them and have choice between FAST_STRCAT and FAST_STRNCAT,
1067 * keep in mind FAST_STRNCAT is faster since length of second argument is 1016 * keep in mind FAST_STRNCAT is faster since length of second argument is
1068 * kown in advance. 1017 * kown in advance.
1069 */ 1018 */
1070 1019
1071# define PREPARE_FASTCAT(buf__) buf__+strlen(buf__) 1020#define PREPARE_FASTCAT(buf__) buf__+strlen(buf__)
1072# define FAST_STRNCAT(buf__,buf2__,size__) {memcpy (buf__,buf2__,size__);buf__+=size__;} 1021#define FAST_STRNCAT(buf__,buf2__,size__) {memcpy (buf__,buf2__,size__);buf__+=size__;}
1073# define FAST_STRCAT(buf__,buf2__) {memcpy (buf__,buf2__,strlen(buf2__));buf__+=strlen(buf2__);} 1022#define FAST_STRCAT(buf__,buf2__) {memcpy (buf__,buf2__,strlen(buf2__));buf__+=strlen(buf2__);}
1074# define FINISH_FASTCAT(buf__) buf__[0]='\0'; 1023#define FINISH_FASTCAT(buf__) buf__[0]='\0';
1075 1024
1076 /* You may uncomment following define to check sanity of code. 1025 /* You may uncomment following define to check sanity of code.
1077 * But use as debug only (loses all speed gained by those macros) 1026 * But use as debug only (loses all speed gained by those macros)
1078 */ 1027 */
1079 1028
1092 * to keep the client up to date too! 1041 * to keep the client up to date too!
1093 */ 1042 */
1094 1043
1095 1044
1096/* message types */ 1045/* message types */
1097# define MSG_TYPE_BOOK 1 1046#define MSG_TYPE_BOOK 1
1098# define MSG_TYPE_CARD 2 1047#define MSG_TYPE_CARD 2
1099# define MSG_TYPE_PAPER 3 1048#define MSG_TYPE_PAPER 3
1100# define MSG_TYPE_SIGN 4 1049#define MSG_TYPE_SIGN 4
1101# define MSG_TYPE_MONUMENT 5 1050#define MSG_TYPE_MONUMENT 5
1102# define MSG_TYPE_SCRIPTED_DIALOG 6 1051#define MSG_TYPE_SCRIPTED_DIALOG 6
1103# define MSG_TYPE_MOTD 7 1052#define MSG_TYPE_MOTD 7
1104# define MSG_TYPE_ADMIN 8 1053#define MSG_TYPE_ADMIN 8
1105# define MSG_TYPE_LAST 9 1054#define MSG_TYPE_LAST 9
1106 1055
1107# define MSG_SUBTYPE_NONE 0 1056#define MSG_SUBTYPE_NONE 0
1108 1057
1109/* book messages subtypes */ 1058/* book messages subtypes */
1110# define MSG_TYPE_BOOK_CLASP_1 1 1059#define MSG_TYPE_BOOK_CLASP_1 1
1111# define MSG_TYPE_BOOK_CLASP_2 2 1060#define MSG_TYPE_BOOK_CLASP_2 2
1112# define MSG_TYPE_BOOK_ELEGANT_1 3 1061#define MSG_TYPE_BOOK_ELEGANT_1 3
1113# define MSG_TYPE_BOOK_ELEGANT_2 4 1062#define MSG_TYPE_BOOK_ELEGANT_2 4
1114# define MSG_TYPE_BOOK_QUARTO_1 5 1063#define MSG_TYPE_BOOK_QUARTO_1 5
1115# define MSG_TYPE_BOOK_QUARTO_2 6 1064#define MSG_TYPE_BOOK_QUARTO_2 6
1116# define MSG_TYPE_BOOK_SPELL_EVOKER 7 1065#define MSG_TYPE_BOOK_SPELL_EVOKER 7
1117# define MSG_TYPE_BOOK_SPELL_PRAYER 8 1066#define MSG_TYPE_BOOK_SPELL_PRAYER 8
1118# define MSG_TYPE_BOOK_SPELL_PYRO 9 1067#define MSG_TYPE_BOOK_SPELL_PYRO 9
1119# define MSG_TYPE_BOOK_SPELL_SORCERER 10 1068#define MSG_TYPE_BOOK_SPELL_SORCERER 10
1120# define MSG_TYPE_BOOK_SPELL_SUMMONER 11 1069#define MSG_TYPE_BOOK_SPELL_SUMMONER 11
1121 1070
1122/* card messages subtypes*/ 1071/* card messages subtypes*/
1123# define MSG_TYPE_CARD_SIMPLE_1 1 1072#define MSG_TYPE_CARD_SIMPLE_1 1
1124# define MSG_TYPE_CARD_SIMPLE_2 2 1073#define MSG_TYPE_CARD_SIMPLE_2 2
1125# define MSG_TYPE_CARD_SIMPLE_3 3 1074#define MSG_TYPE_CARD_SIMPLE_3 3
1126# define MSG_TYPE_CARD_ELEGANT_1 4 1075#define MSG_TYPE_CARD_ELEGANT_1 4
1127# define MSG_TYPE_CARD_ELEGANT_2 5 1076#define MSG_TYPE_CARD_ELEGANT_2 5
1128# define MSG_TYPE_CARD_ELEGANT_3 6 1077#define MSG_TYPE_CARD_ELEGANT_3 6
1129# define MSG_TYPE_CARD_STRANGE_1 7 1078#define MSG_TYPE_CARD_STRANGE_1 7
1130# define MSG_TYPE_CARD_STRANGE_2 8 1079#define MSG_TYPE_CARD_STRANGE_2 8
1131# define MSG_TYPE_CARD_STRANGE_3 9 1080#define MSG_TYPE_CARD_STRANGE_3 9
1132# define MSG_TYPE_CARD_MONEY_1 10 1081#define MSG_TYPE_CARD_MONEY_1 10
1133# define MSG_TYPE_CARD_MONEY_2 11 1082#define MSG_TYPE_CARD_MONEY_2 11
1134# define MSG_TYPE_CARD_MONEY_3 12 1083#define MSG_TYPE_CARD_MONEY_3 12
1135 1084
1136/* Paper messages subtypes */ 1085/* Paper messages subtypes */
1137# define MSG_TYPE_PAPER_NOTE_1 1 1086#define MSG_TYPE_PAPER_NOTE_1 1
1138# define MSG_TYPE_PAPER_NOTE_2 2 1087#define MSG_TYPE_PAPER_NOTE_2 2
1139# define MSG_TYPE_PAPER_NOTE_3 3 1088#define MSG_TYPE_PAPER_NOTE_3 3
1140# define MSG_TYPE_PAPER_LETTER_OLD_1 4 1089#define MSG_TYPE_PAPER_LETTER_OLD_1 4
1141# define MSG_TYPE_PAPER_LETTER_OLD_2 5 1090#define MSG_TYPE_PAPER_LETTER_OLD_2 5
1142# define MSG_TYPE_PAPER_LETTER_NEW_1 6 1091#define MSG_TYPE_PAPER_LETTER_NEW_1 6
1143# define MSG_TYPE_PAPER_LETTER_NEW_2 7 1092#define MSG_TYPE_PAPER_LETTER_NEW_2 7
1144# define MSG_TYPE_PAPER_ENVELOPE_1 8 1093#define MSG_TYPE_PAPER_ENVELOPE_1 8
1145# define MSG_TYPE_PAPER_ENVELOPE_2 9 1094#define MSG_TYPE_PAPER_ENVELOPE_2 9
1146# define MSG_TYPE_PAPER_SCROLL_OLD_1 10 1095#define MSG_TYPE_PAPER_SCROLL_OLD_1 10
1147# define MSG_TYPE_PAPER_SCROLL_OLD_2 11 1096#define MSG_TYPE_PAPER_SCROLL_OLD_2 11
1148# define MSG_TYPE_PAPER_SCROLL_NEW_1 12 1097#define MSG_TYPE_PAPER_SCROLL_NEW_1 12
1149# define MSG_TYPE_PAPER_SCROLL_NEW_2 13 1098#define MSG_TYPE_PAPER_SCROLL_NEW_2 13
1150# define MSG_TYPE_PAPER_SCROLL_MAGIC 14 1099#define MSG_TYPE_PAPER_SCROLL_MAGIC 14
1151 1100
1152/* road signs messages subtypes */ 1101/* road signs messages subtypes */
1153# define MSG_TYPE_SIGN_BASIC 1 1102#define MSG_TYPE_SIGN_BASIC 1
1154# define MSG_TYPE_SIGN_DIR_LEFT 2 1103#define MSG_TYPE_SIGN_DIR_LEFT 2
1155# define MSG_TYPE_SIGN_DIR_RIGHT 3 1104#define MSG_TYPE_SIGN_DIR_RIGHT 3
1156# define MSG_TYPE_SIGN_DIR_BOTH 4 1105#define MSG_TYPE_SIGN_DIR_BOTH 4
1157 1106
1158/* stones and monument messages */ 1107/* stones and monument messages */
1159# define MSG_TYPE_MONUMENT_STONE_1 1 1108#define MSG_TYPE_MONUMENT_STONE_1 1
1160# define MSG_TYPE_MONUMENT_STONE_2 2 1109#define MSG_TYPE_MONUMENT_STONE_2 2
1161# define MSG_TYPE_MONUMENT_STONE_3 3 1110#define MSG_TYPE_MONUMENT_STONE_3 3
1162# define MSG_TYPE_MONUMENT_STATUE_1 4 1111#define MSG_TYPE_MONUMENT_STATUE_1 4
1163# define MSG_TYPE_MONUMENT_STATUE_2 5 1112#define MSG_TYPE_MONUMENT_STATUE_2 5
1164# define MSG_TYPE_MONUMENT_STATUE_3 6 1113#define MSG_TYPE_MONUMENT_STATUE_3 6
1165# define MSG_TYPE_MONUMENT_GRAVESTONE_1 7 1114#define MSG_TYPE_MONUMENT_GRAVESTONE_1 7
1166# define MSG_TYPE_MONUMENT_GRAVESTONE_2 8 1115#define MSG_TYPE_MONUMENT_GRAVESTONE_2 8
1167# define MSG_TYPE_MONUMENT_GRAVESTONE_3 9 1116#define MSG_TYPE_MONUMENT_GRAVESTONE_3 9
1168# define MSG_TYPE_MONUMENT_WALL_1 10 1117#define MSG_TYPE_MONUMENT_WALL_1 10
1169# define MSG_TYPE_MONUMENT_WALL_2 11 1118#define MSG_TYPE_MONUMENT_WALL_2 11
1170# define MSG_TYPE_MONUMENT_WALL_3 12 1119#define MSG_TYPE_MONUMENT_WALL_3 12
1171 1120
1172/*some readable flags*/ 1121/*some readable flags*/
1173 1122
1174/* dialog messsage */ 1123/* dialog messsage */
1175# define MSG_TYPE_DIALOG_NPC 1 /*A message from the npc */ 1124#define MSG_TYPE_DIALOG_NPC 1 /*A message from the npc */
1176# define MSG_TYPE_DIALOG_ANSWER 2 /*One of possible answers */ 1125#define MSG_TYPE_DIALOG_ANSWER 2 /*One of possible answers */
1177# define MSG_TYPE_DIALOG_ANSWER_COUNT 3 /*Number of possible answers */ 1126#define MSG_TYPE_DIALOG_ANSWER_COUNT 3 /*Number of possible answers */
1178 1127
1179/* admin messages */ 1128/* admin messages */
1180# define MSG_TYPE_ADMIN_RULES 1 1129#define MSG_TYPE_ADMIN_RULES 1
1181# define MSG_TYPE_ADMIN_NEWS 2 1130#define MSG_TYPE_ADMIN_NEWS 2
1182 1131
1183#endif /* DEFINE_H */ 1132#endif /* DEFINE_H */
1133

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines