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.7 by root, Sun Aug 27 13:02:03 2006 UTC vs.
Revision 1.24 by elmex, Wed Dec 20 12:13:48 2006 UTC

1/*
2 * static char *rcsid_define_h =
3 * "$Id: define.h,v 1.7 2006/08/27 13:02:03 root Exp $";
4 */
5
6/* 1/*
7 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
8 3
9 Copyright (C) 2003-2005 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2003-2005 Mark Wedel & Crossfire Development Team
10 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
21 16
22 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
23 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 20
26 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
27*/ 22*/
28 23
29/* 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 */
30 25
31/* This file is really too large. With all the .h files 26/* This file is really too large. With all the .h files
41/* 36/*
42 * Crossfire requires ANSI-C, but some compilers "forget" to define it. 37 * Crossfire requires ANSI-C, but some compilers "forget" to define it.
43 * Thus the prototypes made by cextract don't get included correctly. 38 * Thus the prototypes made by cextract don't get included correctly.
44 */ 39 */
45#if !defined(__STDC__) 40#if !defined(__STDC__)
41
46/* Removed # from start of following line. makedepend was picking it up. 42/* Removed # from start of following line. makedepend was picking it up.
47 * The following should still hopefully result in an error. 43 * The following should still hopefully result in an error.
48 */ 44 */
49error - Your ANSI C compiler should be defining __STDC__; 45error - Your ANSI C compiler should be defining __STDC__;
50#endif 46#endif
51 47
52#ifndef WIN32 /* ---win32 exclude unix configuration part */
53#include <autoconf.h> 48#include <autoconf.h>
54#endif
55 49
56#define FONTDIR "" 50#define FONTDIR ""
57#define FONTNAME "" 51#define FONTNAME ""
58 52
59/* Decstations have trouble with fabs()... */ 53/* Decstations have trouble with fabs()... */
60#define FABS(x) ((x)<0?-(x):(x)) 54#define FABS(x) ((x)<0?-(x):(x))
61 55
62#ifdef __NetBSD__ 56#ifdef __NetBSD__
63#include <sys/param.h> 57# include <sys/param.h>
64#endif 58#endif
65#ifndef MIN 59#ifndef MIN
66#define MIN(x,y) ((x)<(y)?(x):(y)) 60# define MIN(x,y) ((x)<(y)?(x):(y))
67#endif 61#endif
68#ifndef MAX 62#ifndef MAX
69#define MAX(x,y) ((x)>(y)?(x):(y)) 63# define MAX(x,y) ((x)>(y)?(x):(y))
70#endif 64#endif
71 65
72/*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*/
73#ifndef NAME_MAX 67#ifndef NAME_MAX
74#define NAME_MAX 255 68# define NAME_MAX 255
75#endif 69#endif
76 70
77/* MAX3 is basically like MAX, but instead does 3 values. */ 71/* MAX3 is basically like MAX, but instead does 3 values. */
78#ifndef MAX3 72#ifndef MAX3
79#define MAX3(x,y, z) (MAX(x, MAX(y,z))) 73# define MAX3(x,y, z) (MAX(x, MAX(y,z)))
80#endif 74#endif
81 75
82/* MIN3 is basically like MIN, but instead does 3 values. */ 76/* MIN3 is basically like MIN, but instead does 3 values. */
83#ifndef MIN3 77#ifndef MIN3
84#define MIN3(x,y, z) (MIN(x, MIN(y,z))) 78# define MIN3(x,y, z) (MIN(x, MIN(y,z)))
85#endif 79#endif
86 80
87#define MAX_STAT 30 /* The maximum legal value of any stat */ 81#define MAX_STAT 30 /* The maximum legal value of any stat */
88#define MIN_STAT 1 /* The minimum legal value of any stat */ 82#define MIN_STAT 1 /* The minimum legal value of any stat */
89 83
90#define MAX_BUF 1024 /* Used for all kinds of things */ 84#define MAX_BUF 1024
85 /* Used for all kinds of things */
91#define VERY_BIG_BUF 2048 86#define VERY_BIG_BUF 2048
92#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 */
93#define SOCKET_BUFLEN 4096 /* Max length a packet could be */ 88#define SOCKET_BUFLEN 4096 /* Max length a packet could be */
94 89
95#define FONTSIZE 3000 /* Max chars in font */ 90#define FONTSIZE 3000 /* Max chars in font */
96 91
97#define MAX_ANIMATIONS 256 92#define MAX_ANIMATIONS 256
98 93
99#define MAX_NAME 48 94#define MAX_NAME 48
100#define BIG_NAME 32
101#define MAX_EXT_TITLE 98 95#define MAX_EXT_TITLE 98
102 96
103/* Fatal variables: */ 97/* Fatal variables: */
104#define OUT_OF_MEMORY 0 98#define OUT_OF_MEMORY 0
105#define MAP_ERROR 1 99#define MAP_ERROR 1
106#define ARCHTABLE_TOO_SMALL 2 100#define ARCHTABLE_TOO_SMALL 2
107#define TOO_MANY_ERRORS 3 101#define TOO_MANY_ERRORS 3
108 102
109/* TYPE DEFINES */ 103/* TYPE DEFINES */
104
110/* 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,
111 * 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
112 * mean it has to have a type defined here. That only needs to happen 107 * mean it has to have a type defined here. That only needs to happen
113 * if in some .c file, it needs to do certain special actions based on 108 * if in some .c file, it needs to do certain special actions based on
114 * the monster type, that can not be handled by any of the numerous 109 * the monster type, that can not be handled by any of the numerous
117 * 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
118 */ 113 */
119 114
120/* 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 */
121 116
122#define PLAYER 1 117#define PLAYER 1
123#define TRANSPORT 2 /* see doc/Developers/objects */ 118#define TRANSPORT 2 /* see pod/objects.pod */
124#define ROD 3 119#define ROD 3
125#define TREASURE 4 120#define TREASURE 4
126#define POTION 5 121#define POTION 5
127#define FOOD 6 122#define FOOD 6
128#define POISON 7 123#define POISON 7
129#define BOOK 8 124#define BOOK 8
130#define CLOCK 9 125#define CLOCK 9
131/*#define FBULLET 10 */ 126
127/*#define FBULLET 10 */
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
132#define BOW 14
136#define WEAPON 15 133#define WEAPON 15
137#define ARMOUR 16 134#define ARMOUR 16
138#define PEDESTAL 17 135#define PEDESTAL 17
139#define ALTAR 18 136#define ALTAR 18
137
140/*#define CONFUSION 19 */ 138/*#define CONFUSION 19 */
139
141#define LOCKED_DOOR 20 140#define LOCKED_DOOR 20
142#define SPECIAL_KEY 21 141#define SPECIAL_KEY 21
143#define MAP 22 142#define MAP 22
144#define DOOR 23 143#define DOOR 23
145#define KEY 24 144#define KEY 24
145
146/*#define MMISSILE 25 */ 146/*#define MMISSILE 25 */
147
147#define TIMED_GATE 26 148#define TIMED_GATE 26
148#define TRIGGER 27 149#define TRIGGER 27
149#define GRIMREAPER 28 150#define GRIMREAPER 28
150#define MAGIC_EAR 29 151#define MAGIC_EAR 29
151#define TRIGGER_BUTTON 30 152#define TRIGGER_BUTTON 30
152#define TRIGGER_ALTAR 31 153#define TRIGGER_ALTAR 31
153#define TRIGGER_PEDESTAL 32 154#define TRIGGER_PEDESTAL 32
154#define SHIELD 33 155#define SHIELD 33
155#define HELMET 34 156#define HELMET 34
156#define HORN 35 157#define HORN 35
157#define MONEY 36 158#define MONEY 36
158#define CLASS 37 /* object for applying character class modifications to someone */ 159#define CLASS 37 /* object for applying character class modifications to someone */
159#define GRAVESTONE 38 160#define GRAVESTONE 38
160#define AMULET 39 161#define AMULET 39
161#define PLAYERMOVER 40 162#define PLAYERMOVER 40
162#define TELEPORTER 41 163#define TELEPORTER 41
163#define CREATOR 42 164#define CREATOR 42
164#define SKILL 43 /* also see SKILL_TOOL (74) below */ 165#define SKILL 43 /* also see SKILL_TOOL (74) below */
166
165#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
166 /* experience for broad skill categories. This value */ 168 * experience for broad skill categories. This value
167 /* is now automatically converteed at load time. */ 169 * is now automatically converteed at load time.
170 */
171
168#define EARTHWALL 45 172#define EARTHWALL 45
169#define GOLEM 46 173#define GOLEM 46
174
170/*#define BOMB 47 */ 175/*#define BOMB 47 */
171#define THROWN_OBJ 48 176#define THROWN_OBJ 48
172#define BLINDNESS 49 177#define BLINDNESS 49
173#define GOD 50 178#define GOD 50
174
175#define DETECTOR 51 /* peterm: detector is an object */ 179#define DETECTOR 51 /* peterm: detector is an object
176 /* which notices the presense of */ 180 * which notices the presense of
177 /* another object and is triggered */ 181 * another object and is triggered
178 /* like buttons. */ 182 * like buttons.
183 */
179#define TRIGGER_MARKER 52 /* inserts an invisible, weightless */ 184#define TRIGGER_MARKER 52 /* inserts an invisible, weightless
180 /* force into a player with a specified string WHEN TRIGGERED. */ 185 * force into a player with a specified string WHEN TRIGGERED.
186 */
181#define DEAD_OBJECT 53 187#define DEAD_OBJECT 53
182#define DRINK 54 188#define DRINK 54
183#define MARKER 55 /* inserts an invisible, weightless */ 189#define MARKER 55 /* inserts an invisible, weightless
184 /* force into a player with a specified string. */ 190 * force into a player with a specified string.
191 */
185#define HOLY_ALTAR 56 192#define HOLY_ALTAR 56
186#define PLAYER_CHANGER 57 193#define PLAYER_CHANGER 57
187#define BATTLEGROUND 58 /* battleground, by Andreas Vogl */ 194#define BATTLEGROUND 58 /* battleground, by Andreas Vogl */
188 195
189#define PEACEMAKER 59 /* Object owned by a player which can convert */ 196#define PEACEMAKER 59 /* Object owned by a player which can convert
190 /* a monster into a peaceful being incapable of attack. */ 197 * a monster into a peaceful being incapable of attack.
191#define GEM 60 198 */
199#define GEM 60
200
192/*#define FIRECHEST 61*/ /* FIRECHEST folded into FIREWALL */ 201/*#define FIRECHEST 61*/ /* FIRECHEST folded into FIREWALL */
202
193#define FIREWALL 62 203#define FIREWALL 62
194#define ANVIL 63 204#define ANVIL 63
195#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 */
196#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
197 * values of last_sp set how to change: 207 * values of last_sp set how to change:
198 * 0 = furious, all monsters become aggressive 208 * 0 = furious, all monsters become aggressive
199 * 1 = angry, all but friendly become aggressive 209 * 1 = angry, all but friendly become aggressive
200 * 2 = calm, all aggressive monsters calm down 210 * 2 = calm, all aggressive monsters calm down
201 * 3 = sleep, all monsters fall asleep 211 * 3 = sleep, all monsters fall asleep
202 * 4 = charm, monsters become pets */ 212 * 4 = charm, monsters become pets */
203#define EXIT 66 213#define EXIT 66
204#define ENCOUNTER 67 214#define ENCOUNTER 67
205#define SHOP_FLOOR 68 215#define SHOP_FLOOR 68
206#define SHOP_MAT 69 216#define SHOP_MAT 69
207#define RING 70 217#define RING 70
208#define FLOOR 71 /* this is a floor tile -> native layer 0 */ 218#define FLOOR 71 /* this is a floor tile -> native layer 0 */
209#define FLESH 72 /* animal 'body parts' -b.t. */ 219#define FLESH 72 /* animal 'body parts' -b.t. */
210#define INORGANIC 73 /* metals and minerals */ 220#define INORGANIC 73 /* metals and minerals */
211#define SKILL_TOOL 74 /* Allows the use of a skill */ 221#define SKILL_TOOL 74 /* Allows the use of a skill */
212#define LIGHTER 75 222#define LIGHTER 75
213 223
214/* The trap_part, wall, light_source, misc_object, monster, and spawn_generator 224/* The trap_part, wall, light_source, misc_object, monster, and spawn_generator
215 * types are not used in any archetypes, and should perhaps be removed. 225 * types are not used in any archetypes, and should perhaps be removed.
226 * elmex: haha, removed TRAP_PART now. renamed WALL to BUILDABLE_WALL
216 */ 227 */
228
217#define TRAP_PART 76 /* Needed by set traps skill -b.t. */ 229/*#define TRAP_PART 76 */ /* Needed by set traps skill -b.t. */
218 230
219#define WALL 77 /* this is a wall. put it always in layer 1 if not set is_floor */ 231#define BUILDABLE_WALL 77 /* this is a buildable wall */
220#define LIGHT_SOURCE 78 /* torches, lamps, etc. */ 232#define LIGHT_SOURCE 78 /* torches, lamps, etc. */
221#define MISC_OBJECT 79 /* misc. objects are for objects without a function 233#define MISC_OBJECT 79 /* misc. objects are for objects without a function
222 in the engine. Like statues, clocks, chairs,... 234 in the engine. Like statues, clocks, chairs,...
223 If perhaps we create a function where we can sit 235 If perhaps we create a function where we can sit
224 on chairs, we create a new type and remove all 236 on chairs, we create a new type and remove all
225 chairs from here. */ 237 chairs from here. */
226#define MONSTER 80 /* yes, thats a real, living creature */ 238#define MONSTER 80 /* yes, thats a real, living creature */
227#define SPAWN_GENERATOR 81 /* a spawn point or monster generator object */ 239#define SPAWN_GENERATOR 81 /* a spawn point or monster generator object */
228#define LAMP 82 /* a lamp */ 240#define LAMP 82 /* a lamp */
229#define DUPLICATOR 83 /* duplicator/multiplier object */ 241#define DUPLICATOR 83 /* duplicator/multiplier object */
230#define TOOL 84 /* a tool for building objects */ 242#define TOOL 84 /* a tool for building objects */
231#define SPELLBOOK 85 243#define SPELLBOOK 85
232#define BUILDFAC 86 /* facilities for building objects */ 244#define BUILDFAC 86 /* facilities for building objects */
233#define CLOAK 87 245#define CLOAK 87
246
234/*#define CONE 88 */ 247/*#define CONE 88 */
235/*#define AURA 89 *//* aura spell object */ 248/*#define AURA 89 */ /* aura spell object */
236 249
237#define SPINNER 90 250#define SPINNER 90
238#define GATE 91 251#define GATE 91
239#define BUTTON 92 252#define BUTTON 92
240#define CF_HANDLE 93 253#define CF_HANDLE 93
241#define HOLE 94 254#define HOLE 94
242#define TRAPDOOR 95 255#define TRAPDOOR 95
256
243/*#define WORD_OF_RECALL 96 */ 257/*#define WORD_OF_RECALL 96 */
244/*#define PARAIMAGE 97 */ 258/*#define PARAIMAGE 97 */
245#define SIGN 98 259
246#define BOOTS 99 260#define SIGN 98
261#define BOOTS 99
247#define GLOVES 100 262#define GLOVES 100
248#define SPELL 101 263#define SPELL 101
249#define SPELL_EFFECT 102 264#define SPELL_EFFECT 102
250#define CONVERTER 103 265#define CONVERTER 103
251#define BRACERS 104 266#define BRACERS 104
252#define POISONING 105 267#define POISONING 105
253#define SAVEBED 106 268#define SAVEBED 106
254#define POISONCLOUD 107 269#define POISONCLOUD 107
255#define FIREHOLES 108 270#define FIREHOLES 108
256#define WAND 109 271#define WAND 109
257/*#define ABILITY 110*/ 272
273/*#define ABILITY 110*/
258#define SCROLL 111 274#define SCROLL 111
259#define DIRECTOR 112 275#define DIRECTOR 112
260#define GIRDLE 113 276#define GIRDLE 113
261#define FORCE 114 277#define FORCE 114
262#define POTION_EFFECT 115 /* a force, holding the effect of a potion */ 278#define POTION_EFFECT 115 /* a force, holding the effect of a potion */
263#define EVENT_CONNECTOR 116 /* Lauwenmark: an invisible object holding a plugin event hook */ 279#define EVENT_CONNECTOR 116 /* Lauwenmark: an invisible object holding a plugin event hook */
280
264#define CLOSE_CON 121 /* Eneq(@csd.uu.se): Id for close_container archetype. */ 281#define CLOSE_CON 121 /* Eneq(@csd.uu.se): Id for close_container archetype. */
265#define CONTAINER 122 282#define CONTAINER 122
266#define ARMOUR_IMPROVER 123 283#define ARMOUR_IMPROVER 123
267#define WEAPON_IMPROVER 124 284#define WEAPON_IMPROVER 124
268 285
269/* unused: 125 - 129 286/* unused: 125 - 129
270 * type 125 was MONEY_CHANGER 287 * type 125 was MONEY_CHANGER
271 */ 288 */
289
272#define SKILLSCROLL 130 /* can add a skill to player's inventory -bt.*/ 290#define SKILLSCROLL 130 /* can add a skill to player's inventory -bt. */
273#define DEEP_SWAMP 138 291#define DEEP_SWAMP 138
274#define IDENTIFY_ALTAR 139 292#define IDENTIFY_ALTAR 139
293
275/*#define CANCELLATION 141*/ /* not used with new spell code */ 294/*#define CANCELLATION 141 */ /* not used with new spell code */
295
276#define MENU 150 /* Mark Wedel (mark@pyramid.com) Shop inventories */ 296#define MENU 150 /* Mark Wedel (mark@pyramid.com) Shop inventories */
297
277/*#define BALL_LIGHTNING 151 */ /* peterm: ball lightning and color spray */ 298/*#define BALL_LIGHTNING 151 */ /* peterm: ball lightning and color spray */
278/*#define SWARM_SPELL 153*/ 299/*#define SWARM_SPELL 153*/
279#define RUNE 154
280#define TRAP 155
281 300
301#define RUNE 154
302#define TRAP 155
303
282#define POWER_CRYSTAL 156 304#define POWER_CRYSTAL 156
283#define CORPSE 157 305#define CORPSE 157
284 306
285#define DISEASE 158 307#define DISEASE 158
286#define SYMPTOM 159 308#define SYMPTOM 159
287#define BUILDER 160 /* Generic item builder, see subtypes */ 309#define BUILDER 160 /* Generic item builder, see subtypes */
288#define MATERIAL 161 /* Material for building */ 310#define MATERIAL 161 /* Material for building */
311
289/* #define GPS 162 Ground positionning system, moved to Python plugin */ 312/* #define GPS 162 Ground positionning system, moved to Python plugin */
290#define ITEM_TRANSFORMER 163 /* Transforming one item with another */ 313#define ITEM_TRANSFORMER 163 /* Transforming one item with another */
314
291#define QUEST 164 /* See below for subtypes */ 315/*#define QUEST 164 */ /* See below for subtypes */
316
292#define SAFE_GROUND 165 /* This is a safe ground, means that neither bombs, 317#define SAFE_GROUND 165 /* This is a safe ground, means that neither bombs,
293 potions, alchemy, or magic works here (elmex) */ 318 potions, alchemy, or magic works here (elmex) */
319
294/* END TYPE DEFINE */ 320/* END TYPE DEFINE */
295 321
296#define NUM_SUBTYPES 64 // maximum supported subtype number + 1, can be increased to 256 322#define NUM_SUBTYPES 64 // maximum supported subtype number + 1, can be increased to 256
297 323
298/* Subtypes for BUILDER */ 324/* Subtypes for BUILDER */
299#define ST_BD_BUILD 1 /* Builds an item */ 325#define ST_BD_BUILD 1 /* Builds an item */
300#define ST_BD_REMOVE 2 /* Removes an item */ 326#define ST_BD_REMOVE 2 /* Removes an item */
301 327
302/* Subtypes for MATERIAL */ 328/* Subtypes for MATERIAL */
303#define ST_MAT_FLOOR 1 /* Floor */ 329#define ST_MAT_FLOOR 1 /* Floor */
304#define ST_MAT_WALL 2 /* Wall */ 330#define ST_MAT_WALL 2 /* Wall */
305#define ST_MAT_ITEM 3 /* All other items, including doors & such */ 331#define ST_MAT_ITEM 3 /* All other items, including doors & such */
306
307/* Subtypes for QUEST */
308#define QUEST_IN_PROGRESS 1
309#define QUEST_DONE_QUEST 2
310#define QUEST_DONE_TASK 3
311#define QUEST_START_QUEST 4
312#define QUEST_END_QUEST 5
313#define QUEST_START_TASK 6
314#define QUEST_END_TASK 7
315#define QUEST_OVERRIDE 8
316#define QUEST_ON_ACTIVATE 9
317 332
318/* definitions for weapontypes */ 333/* definitions for weapontypes */
319 334
320#define WEAP_HIT 0 /* the basic */ 335#define WEAP_HIT 0 /* the basic */
321#define WEAP_SLASH 1 /* slash */ 336#define WEAP_SLASH 1 /* slash */
322#define WEAP_PIERCE 2 /* arrows, stiletto */ 337#define WEAP_PIERCE 2 /* arrows, stiletto */
323#define WEAP_CLEAVE 3 /* axe */ 338#define WEAP_CLEAVE 3 /* axe */
324#define WEAP_SLICE 4 /* katana */ 339#define WEAP_SLICE 4 /* katana */
325#define WEAP_STAB 5 /* knife, dagger */ 340#define WEAP_STAB 5 /* knife, dagger */
326#define WEAP_WHIP 6 /* whips n chains */ 341#define WEAP_WHIP 6 /* whips n chains */
327#define WEAP_CRUSH 7 /* big hammers, flails */ 342#define WEAP_CRUSH 7 /* big hammers, flails */
328#define WEAP_BLUD 8 /* bludgeoning, club, stick */ 343#define WEAP_BLUD 8 /* bludgeoning, club, stick */
329 344
330typedef struct typedata { 345typedef struct typedata
346{
331 int number; 347 int number;
332 const char *name; 348 const char *name;
333 const char *name_pl; 349 const char *name_pl;
334 int identifyskill; 350 int identifyskill;
335 int identifyskill2; 351 int identifyskill2;
336} typedata; 352} typedata;
337 353
338extern const int ItemTypesSize; 354extern const int ItemTypesSize;
339extern typedata ItemTypes[]; 355extern typedata ItemTypes[];
340 356
377#define PU_READABLES 0x00400000 393#define PU_READABLES 0x00400000
378#define PU_MAGIC_DEVICE 0x00800000 394#define PU_MAGIC_DEVICE 0x00800000
379 395
380#define PU_NOT_CURSED 0x01000000 396#define PU_NOT_CURSED 0x01000000
381#define PU_JEWELS 0x02000000 397#define PU_JEWELS 0x02000000
398#define PU_FLESH 0x04000000
382 399
383 400
384/* Instead of using arbitrary constants for indexing the 401/* Instead of using arbitrary constants for indexing the
385 * freearr, add these values. <= SIZEOFFREE1 will get you 402 * freearr, add these values. <= SIZEOFFREE1 will get you
386 * within 1 space. <= SIZEOFFREE2 wll get you withing 403 * within 1 space. <= SIZEOFFREE2 wll get you withing
389 */ 406 */
390#define SIZEOFFREE1 8 407#define SIZEOFFREE1 8
391#define SIZEOFFREE2 24 408#define SIZEOFFREE2 24
392#define SIZEOFFREE 49 409#define SIZEOFFREE 49
393 410
394#define NROF_SOUNDS (23 + NROFREALSPELLS) /* Number of sounds */ 411#define NROF_SOUNDS (23 + NROFREALSPELLS) /* Number of sounds */
395 412
396/* Flag structure now changed. 413/*
397 * Each flag is now a bit offset, starting at zero. The macros
398 * will update/read the appropriate flag element in the object
399 * structure.
400 *
401 * Hopefully, since these offsets are integer constants set at run time,
402 * the compiler will reduce the macros something as simple as the
403 * old system was.
404 *
405 * Flags now have FLAG as the prefix. This to be clearer, and also
406 * to make sure F_ names are not still being used anyplace.
407 *
408 * The macros below assume that the flag size for each element is 32
409 * bits. IF it is smaller, bad things will happen. See structs.h
410 * for more info.
411 *
412 * All functions should use the macros below. In process of converting
413 * to the new system, I find several files that did not use the previous
414 * macros.
415 *
416 * If any FLAG's are or changed, make sure the flag_names structure in 414 * If any FLAG's are added or changed, make sure the flag_names structure in
417 * common/loader.l is updated. 415 * common/loader.l is updated.
418 * 416 */
419 * flags[0] is 0 to 31 417
420 * flags[1] is 32 to 63
421 * flags[2] is 64 to 95
422 * flags[3] is 96 to 127
423 */
424/* Basic routines to do above */ 418/* Basic routines to do above */
425#define SET_FLAG(xyz, p) \ 419#define SET_FLAG(obj, flag) (obj)->flags[flag] = 1
426 ((xyz)->flags[p/32] |= (1U << (p % 32))) 420#define CLEAR_FLAG(obj, flag) (obj)->flags[flag] = 0
427#define CLEAR_FLAG(xyz, p) \ 421#define QUERY_FLAG(obj, flag) (obj)->flags[flag]
428 ((xyz)->flags[p/32] &= ~(1U << (p % 32)))
429#define QUERY_FLAG(xyz, p) \
430 ((xyz)->flags[p/32] & (1U << (p % 32)))
431#define COMPARE_FLAGS(p,q) \
432 ( \
433 ((p)->flags[0] == (q)->flags[0]) && \
434 ((p)->flags[1] == (q)->flags[1]) && \
435 ((p)->flags[2] == (q)->flags[2]) && \
436 ((p)->flags[3] == (q)->flags[3]) \
437 )
438/* convenience macros to determine what kind of things we are dealing with */
439
440#define IS_WEAPON(op) \
441 (op->type == ARROW || op->type == BOW || op->type == WEAPON)
442
443#define IS_ARMOR(op) \
444 (op->type == ARMOUR || op->type == SHIELD || op->type == HELMET || \
445 op->type == CLOAK || op->type == BOOTS || op->type == GLOVES || \
446 op->type == BRACERS || op->type == GIRDLE)
447
448#define IS_LIVE(op) \
449 ((op->type == PLAYER || QUERY_FLAG(op, FLAG_MONSTER) || \
450 (QUERY_FLAG(op, FLAG_ALIVE) && !QUERY_FLAG(op, FLAG_GENERATOR) && \
451 !op->type == DOOR)) && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE)))
452
453#define IS_ARROW(op) \
454 (op->type==ARROW || \
455 (op->type==SPELL_EFFECT && \
456 (op->subtype == SP_BULLET || op->subtype == SP_MAGIC_MISSILE)))
457
458/* This return TRUE if object has still randomitems which
459 * could be expanded.
460 */
461#define HAS_RANDOM_ITEMS(op) (op->randomitems && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE)))
462 422
463/* the flags */ 423/* the flags */
464 424
465#define FLAG_ALIVE 0 /* Object can fight (or be fought) */ 425#define FLAG_ALIVE 0 /* Object can fight (or be fought) */
466#define FLAG_WIZ 1 /* Object has special privilegies */ 426#define FLAG_WIZ 1 /* Object has special privilegies */
467#define FLAG_REMOVED 2 /* Object is not in any map or invenory */ 427#define FLAG_REMOVED 2 /* Object is not in any map or invenory */
468#define FLAG_FREED 3 /* Object is in the list of free objects */ 428#define FLAG_FREED 3 /* Object is in the list of free objects */
469#define FLAG_WAS_WIZ 4 /* Player was once a wiz */ 429#define FLAG_WAS_WIZ 4 /* Player was once a wiz */
470#define FLAG_APPLIED 5 /* Object is ready for use by living */ 430#define FLAG_APPLIED 5 /* Object is ready for use by living */
471#define FLAG_UNPAID 6 /* Object hasn't been paid for yet */ 431#define FLAG_UNPAID 6 /* Object hasn't been paid for yet */
472#define FLAG_USE_SHIELD 7 /* Can this creature use a shield? */ 432#define FLAG_USE_SHIELD 7
433 /* Can this creature use a shield? */
473 434
474#define FLAG_NO_PICK 8 /* Object can't be picked up */ 435#define FLAG_NO_PICK 8 /* Object can't be picked up */
436
475/*#define FLAG_WALK_ON 9*//* Applied when it's walked upon */ 437 /*#define FLAG_WALK_ON 9*//* Applied when it's walked upon */
438
476/*#define FLAG_NO_PASS 10*//* Nothing can pass (wall() is true) */ 439 /*#define FLAG_NO_PASS 10*//* Nothing can pass (wall() is true) */
477#define FLAG_ANIMATE 11 /* The object looks at archetype for faces */ 440#define FLAG_ANIMATE 11 /* The object looks at archetype for faces */
441
478/*#define FLAG_SLOW_MOVE 12*//* Uses the stats.exp/1000 to slow down */ 442 /*#define FLAG_SLOW_MOVE 12*//* Uses the stats.exp/1000 to slow down */
443
479/*#define FLAG_FLYING 13*//* Not affected by WALK_ON or SLOW_MOVE) */ 444 /*#define FLAG_FLYING 13*//* Not affected by WALK_ON or SLOW_MOVE) */
480#define FLAG_MONSTER 14 /* Will attack players */ 445#define FLAG_MONSTER 14 /* Will attack players */
481#define FLAG_FRIENDLY 15 /* Will help players */ 446#define FLAG_FRIENDLY 15 /* Will help players */
482 447
483#define FLAG_GENERATOR 16 /* Will generate type ob->stats.food */ 448#define FLAG_GENERATOR 16 /* Will generate type ob->stats.food */
484#define FLAG_IS_THROWN 17 /* Object is designed to be thrown. */ 449#define FLAG_IS_THROWN 17 /* Object is designed to be thrown. */
485#define FLAG_AUTO_APPLY 18 /* Will be applied when created */ 450#define FLAG_AUTO_APPLY 18
486#define FLAG_TREASURE 19 /* Will generate treasure when applied */ 451 /* Will be applied when created */
452 // not used anywhere in the code // #define FLAG_TREASURE 19 /* Will generate treasure when applied */
487#define FLAG_PLAYER_SOLD 20 /* Object was sold to a shop by a player. */ 453#define FLAG_PLAYER_SOLD 20 /* Object was sold to a shop by a player. */
488#define FLAG_SEE_INVISIBLE 21 /* Will see invisible player */ 454#define FLAG_SEE_INVISIBLE 21 /* Will see invisible player */
489#define FLAG_CAN_ROLL 22 /* Object can be rolled */ 455#define FLAG_CAN_ROLL 22 /* Object can be rolled */
490#define FLAG_OVERLAY_FLOOR 23 /* Object is an overlay floor */ 456#define FLAG_OVERLAY_FLOOR 23 /* Object is an overlay floor */
491#define FLAG_IS_TURNABLE 24 /* Object can change face with direction */ 457#define FLAG_IS_TURNABLE 24 /* Object can change face with direction */
458
492/*#define FLAG_WALK_OFF 25*//* Object is applied when left */ 459 /*#define FLAG_WALK_OFF 25*//* Object is applied when left */
460
493/*#define FLAG_FLY_ON 26*//* As WALK_ON, but only with FLAG_FLYING */ 461 /*#define FLAG_FLY_ON 26*//* As WALK_ON, but only with FLAG_FLYING */
462
494/*#define FLAG_FLY_OFF 27*//* As WALK_OFF, but only with FLAG_FLYING */ 463 /*#define FLAG_FLY_OFF 27*//* As WALK_OFF, but only with FLAG_FLYING */
495#define FLAG_IS_USED_UP 28 /* When (--food<0) the object will exit */ 464#define FLAG_IS_USED_UP 28
496#define FLAG_IDENTIFIED 29 /* Player knows full info about item */ 465 /* When (--food<0) the object will exit */
497#define FLAG_REFLECTING 30 /* Object reflects from walls (lightning) */ 466#define FLAG_IDENTIFIED 29
467 /* Player knows full info about item */
468#define FLAG_REFLECTING 30
469 /* Object reflects from walls (lightning) */
498#define FLAG_CHANGING 31 /* Changes to other_arch when anim is done*/ 470#define FLAG_CHANGING 31 /* Changes to other_arch when anim is done */
499 471
500/* Start of values in flags[1] */ 472/* Start of values in flags[1] */
501#define FLAG_SPLITTING 32 /* Object splits into stats.food other objs */ 473#define FLAG_SPLITTING 32 /* Object splits into stats.food other objs */
502#define FLAG_HITBACK 33 /* Object will hit back when hit */ 474#define FLAG_HITBACK 33 /* Object will hit back when hit */
503#define FLAG_STARTEQUIP 34 /* Object was given to player at start */ 475#define FLAG_STARTEQUIP 34
504#define FLAG_BLOCKSVIEW 35 /* Object blocks view */ 476 /* Object was given to player at start */
477#define FLAG_BLOCKSVIEW 35
478 /* Object blocks view */
505#define FLAG_UNDEAD 36 /* Monster is undead */ 479#define FLAG_UNDEAD 36 /* Monster is undead */
506#define FLAG_SCARED 37 /* Monster is scared (mb player in future)*/ 480#define FLAG_SCARED 37 /* Monster is scared (mb player in future) */
507#define FLAG_UNAGGRESSIVE 38 /* Monster doesn't attack players */ 481#define FLAG_UNAGGRESSIVE 38 /* Monster doesn't attack players */
508#define FLAG_REFL_MISSILE 39 /* Arrows will reflect from object */ 482#define FLAG_REFL_MISSILE 39 /* Arrows will reflect from object */
509 483
510#define FLAG_REFL_SPELL 40 /* Spells (some) will reflect from object */ 484#define FLAG_REFL_SPELL 40
485 /* Spells (some) will reflect from object */
511#define FLAG_NO_MAGIC 41 /* Spells (some) can't pass this object */ 486#define FLAG_NO_MAGIC 41 /* Spells (some) can't pass this object */
512#define FLAG_NO_FIX_PLAYER 42 /* fix_player() won't be called */ 487#define FLAG_NO_FIX_PLAYER 42 /* fix_player() won't be called */
513#define FLAG_IS_LIGHTABLE 43 /* object can be lit */ 488#define FLAG_IS_LIGHTABLE 43 /* object can be lit */
514#define FLAG_TEAR_DOWN 44 /* at->faces[hp*animations/maxhp] at hit */ 489#define FLAG_TEAR_DOWN 44 /* at->faces[hp*animations/maxhp] at hit */
515#define FLAG_RUN_AWAY 45 /* Object runs away from nearest player \ 490#define FLAG_RUN_AWAY 45 /* Object runs away from nearest player \
516 but can still attack at a distance */ 491 but can still attack at a distance */
492
517/*#define FLAG_PASS_THRU 46*/ /* Objects with can_pass_thru can pass \ 493 /*#define FLAG_PASS_THRU 46*//* Objects with can_pass_thru can pass \
518 thru this object as if it wasn't there */ 494 thru this object as if it wasn't there */
519/*#define FLAG_CAN_PASS_THRU 47*/ /* Can pass thru... */
520 495
496 /*#define FLAG_CAN_PASS_THRU 47*//* Can pass thru... */
497
521#define FLAG_PICK_UP 48 /* Can pick up */ 498#define FLAG_PICK_UP 48 /* Can pick up */
522#define FLAG_UNIQUE 49 /* Item is really unique (UNIQUE_ITEMS) */ 499#define FLAG_UNIQUE 49 /* Item is really unique (UNIQUE_ITEMS) */
523#define FLAG_NO_DROP 50 /* Object can't be dropped */ 500#define FLAG_NO_DROP 50 /* Object can't be dropped */
524#define FLAG_WIZCAST 51 /* The wizard can cast spells in no-magic area */ 501#define FLAG_WIZCAST 51 /* The wizard can cast spells in no-magic area */
525#define FLAG_CAST_SPELL 52 /* (Monster) can learn and cast spells */ 502#define FLAG_CAST_SPELL 52
526#define FLAG_USE_SCROLL 53 /* (Monster) can read scroll */ 503 /* (Monster) can learn and cast spells */
504#define FLAG_USE_SCROLL 53
505 /* (Monster) can read scroll */
527#define FLAG_USE_RANGE 54 /* (Monster) can apply and use range items */ 506#define FLAG_USE_RANGE 54 /* (Monster) can apply and use range items */
528#define FLAG_USE_BOW 55 /* (Monster) can apply and fire bows */ 507#define FLAG_USE_BOW 55 /* (Monster) can apply and fire bows */
529 508
530#define FLAG_USE_ARMOUR 56 /* (Monster) can wear armour/shield/helmet */ 509#define FLAG_USE_ARMOUR 56
531#define FLAG_USE_WEAPON 57 /* (Monster) can wield weapons */ 510 /* (Monster) can wear armour/shield/helmet */
511#define FLAG_USE_WEAPON 57
512 /* (Monster) can wield weapons */
532#define FLAG_USE_RING 58 /* (Monster) can use rings, boots, gauntlets, etc */ 513#define FLAG_USE_RING 58 /* (Monster) can use rings, boots, gauntlets, etc */
533#define FLAG_READY_RANGE 59 /* (Monster) has a range attack readied... 8) */ 514#define FLAG_READY_RANGE 59 /* (Monster) has a range attack readied... 8) */
534#define FLAG_READY_BOW 60 /* not implemented yet */ 515#define FLAG_READY_BOW 60 /* not implemented yet */
535#define FLAG_XRAYS 61 /* X-ray vision */ 516#define FLAG_XRAYS 61 /* X-ray vision */
536#define FLAG_NO_APPLY 62 /* Avoids step_on/fly_on to this object */ 517#define FLAG_NO_APPLY 62 /* Avoids step_on/fly_on to this object */
537#define FLAG_IS_FLOOR 63 /* Can't see what's underneath this object */ 518#define FLAG_IS_FLOOR 63 /* Can't see what's underneath this object */
538 519
539/* Start of values in flags[2] */ 520/* Start of values in flags[2] */
540#define FLAG_LIFESAVE 64 /* Saves a players' life once, then destr. */ 521#define FLAG_LIFESAVE 64 /* Saves a players' life once, then destr. */
541#define FLAG_NO_STRENGTH 65 /* Strength-bonus not added to wc/dam */ 522#define FLAG_NO_STRENGTH 65 /* Strength-bonus not added to wc/dam */
542#define FLAG_SLEEP 66 /* NPC is sleeping */ 523#define FLAG_SLEEP 66 /* NPC is sleeping */
543#define FLAG_STAND_STILL 67 /* NPC will not (ever) move */ 524#define FLAG_STAND_STILL 67 /* NPC will not (ever) move */
544#define FLAG_RANDOM_MOVE 68 /* NPC will move randomly */ 525#define FLAG_RANDOM_MOVE 68 /* NPC will move randomly */
545#define FLAG_ONLY_ATTACK 69 /* NPC will evaporate if there is no enemy */ 526#define FLAG_ONLY_ATTACK 69 /* NPC will evaporate if there is no enemy */
546#define FLAG_CONFUSED 70 /* Will also be unable to cast spells */ 527#define FLAG_CONFUSED 70 /* Will also be unable to cast spells */
547#define FLAG_STEALTH 71 /* Will wake monsters with less range */ 528#define FLAG_STEALTH 71 /* Will wake monsters with less range */
548 529
549#define FLAG_WIZPASS 72 /* The wizard can go through walls */ 530#define FLAG_WIZPASS 72 /* The wizard can go through walls */
550#define FLAG_IS_LINKED 73 /* The object is linked with other objects */ 531#define FLAG_IS_LINKED 73 /* The object is linked with other objects */
551#define FLAG_CURSED 74 /* The object is cursed */ 532#define FLAG_CURSED 74 /* The object is cursed */
552#define FLAG_DAMNED 75 /* The object is _very_ cursed */ 533#define FLAG_DAMNED 75 /* The object is _very_ cursed */
553#define FLAG_SEE_ANYWHERE 76 /* The object will be visible behind walls */ 534#define FLAG_SEE_ANYWHERE 76 /* The object will be visible behind walls */
554#define FLAG_KNOWN_MAGICAL 77 /* The object is known to be magical */ 535#define FLAG_KNOWN_MAGICAL 77 /* The object is known to be magical */
555#define FLAG_KNOWN_CURSED 78 /* The object is known to be cursed */ 536#define FLAG_KNOWN_CURSED 78 /* The object is known to be cursed */
556#define FLAG_CAN_USE_SKILL 79 /* The monster can use skills */ 537#define FLAG_CAN_USE_SKILL 79 /* The monster can use skills */
557 538
558#define FLAG_BEEN_APPLIED 80 /* The object has been applied */ 539#define FLAG_BEEN_APPLIED 80 /* The object has been applied */
559#define FLAG_READY_SCROLL 81 /* monster has scroll in inv and can use it */ 540#define FLAG_READY_SCROLL 81 /* monster has scroll in inv and can use it */
560#define FLAG_USE_ROD 82 /* (Monster) can apply and use rods */ 541#define FLAG_USE_ROD 82 /* (Monster) can apply and use rods */
542
561/*#define FLAG_READY_HORN 83 unused (Monster) has a horn readied */ 543/*#define FLAG_READY_HORN 83 unused (Monster) has a horn readied */
562#define FLAG_USE_HORN 84 /* (Monster) can apply and use horns */ 544#define FLAG_USE_HORN 84 /* (Monster) can apply and use horns */
563#define FLAG_MAKE_INVIS 85 /* (Item) gives invisibility when applied */ 545#define FLAG_MAKE_INVIS 85
564#define FLAG_INV_LOCKED 86 /* Item will not be dropped from inventory */ 546 /* (Item) gives invisibility when applied */
547#define FLAG_INV_LOCKED 86
548 /* Item will not be dropped from inventory */
565#define FLAG_IS_WOODED 87 /* Item is wooded terrain */ 549#define FLAG_IS_WOODED 87 /* Item is wooded terrain */
566 550
567#define FLAG_IS_HILLY 88 /* Item is hilly/mountain terrain */ 551#define FLAG_IS_HILLY 88 /* Item is hilly/mountain terrain */
568#define FLAG_READY_SKILL 89 /* (Monster or Player) has a skill readied */ 552#define FLAG_READY_SKILL 89 /* (Monster or Player) has a skill readied */
569#define FLAG_READY_WEAPON 90 /* (Monster or Player) has a weapon readied */ 553#define FLAG_READY_WEAPON 90 /* (Monster or Player) has a weapon readied */
570#define FLAG_NO_SKILL_IDENT 91 /* If set, item cannot be identified w/ a skill */ 554#define FLAG_NO_SKILL_IDENT 91 /* If set, item cannot be identified w/ a skill */
571#define FLAG_BLIND 92 /* If set, object cannot see (visually) */ 555#define FLAG_BLIND 92 /* If set, object cannot see (visually) */
572#define FLAG_SEE_IN_DARK 93 /* if set ob not effected by darkness */ 556#define FLAG_SEE_IN_DARK 93 /* if set ob not effected by darkness */
573#define FLAG_IS_CAULDRON 94 /* container can make alchemical stuff */ 557#define FLAG_IS_CAULDRON 94 /* container can make alchemical stuff */
558
574/*#define FLAG_DUST 95 *//* item is a 'powder', effects throwing */ 559 /*#define FLAG_DUST 95 *//* item is a 'powder', effects throwing */
575 560
576/* Start of values in flags[3] */ 561/* Start of values in flags[3] */
577#define FLAG_NO_STEAL 96 /* Item can't be stolen */ 562#define FLAG_NO_STEAL 96 /* Item can't be stolen */
578#define FLAG_ONE_HIT 97 /* Monster can only hit once before going 563#define FLAG_ONE_HIT 97 /* Monster can only hit once before going
579 * away (replaces ghosthit) 564 * away (replaces ghosthit)
580 */ 565 */
581#define FLAG_CLIENT_SENT 98 /* THIS IS A DEBUG FLAG ONLY. We use it to 566#define FLAG_CLIENT_SENT 98 /* THIS IS A DEBUG FLAG ONLY. We use it to
582 * detect cases were the server is trying 567 * detect cases were the server is trying
583 * to send an upditem when we have not 568 * to send an upditem when we have not
584 * actually sent the item. 569 * actually sent the item.
585 */ 570 */
586 571
587#define FLAG_BERSERK 99 /* monster will attack closest living 572#define FLAG_BERSERK 99 /* monster will attack closest living
588 object */ 573 object */
589#define FLAG_NEUTRAL 100 /* monster is from type neutral */ 574#define FLAG_NEUTRAL 100 /* monster is from type neutral */
590#define FLAG_NO_ATTACK 101 /* monster don't attack */ 575#define FLAG_NO_ATTACK 101 /* monster don't attack */
591#define FLAG_NO_DAMAGE 102 /* monster can't be damaged */ 576#define FLAG_NO_DAMAGE 102 /* monster can't be damaged */
592#define FLAG_OBJ_ORIGINAL 103 /* NEVER SET THIS. Item was loaded by 577#define FLAG_OBJ_ORIGINAL 103 /* NEVER SET THIS. Item was loaded by
593 * load_original_map() */ 578 * load_original_map() */
594#define FLAG_OBJ_SAVE_ON_OVL 104 /* this object should be saved on 579#define FLAG_OBJ_SAVE_ON_OVL 104 /* this object should be saved on
595 * the overlay, and is not subject to 580 * the overlay, and is not subject to
596 * decay. */ 581 * decay. */
597#define FLAG_ACTIVATE_ON_PUSH 105 /* connected object is activated when 'pushed' */ 582#define FLAG_ACTIVATE_ON_PUSH 105 /* connected object is activated when 'pushed' */
598#define FLAG_ACTIVATE_ON_RELEASE 106 /* connected object is activated when 'released' */ 583#define FLAG_ACTIVATE_ON_RELEASE 106 /* connected object is activated when 'released' */
599#define FLAG_IS_WATER 107 584#define FLAG_IS_WATER 107
600#define FLAG_CONTENT_ON_GEN 108 585#define FLAG_CONTENT_ON_GEN 108
601#define FLAG_IS_A_TEMPLATE 109 /* Object has no ingame life until instanciated*/ 586#define FLAG_IS_A_TEMPLATE 109 /* Object has no ingame life until instanciated */
602#define FLAG_IS_BUILDABLE 110 /* Can build on item */ 587#define FLAG_IS_BUILDABLE 110 /* Can build on item */
603#define FLAG_AFK 111 /* Player is AFK */ 588#define FLAG_AFK 111 /* Player is AFK */
604#define NUM_FLAGS 111 /* Should always be equal to the last 589#define NUM_FLAGS 111 /* Should always be equal to the last
605 * defined flag. If you change this, 590 * defined flag. If you change this,
606 * make sure you update the flag_links 591 * make sure you update the flag_links
607 * in common/loader.l 592 * in common/loader.l
608 */ 593 */
609 594
610/* Values can go up to 127 before the size of the flags array in the 595/* Values can go up to 127 before the size of the flags array in the
611 * object structure needs to be enlarged. 596 * object structure needs to be enlarged.
612 * So there are 18 available flags slots 597 * So there are 18 available flags slots
613 */ 598 */
614 599
615 600
616#define NROFNEWOBJS(xyz) ((xyz)->stats.food) 601#define NROFNEWOBJS(xyz) ((xyz)->stats.food)
617 602
618#if 0 603#if 0
604
619/* These should no longer be needed - access move_slow_penalty 605/* These should no longer be needed - access move_slow_penalty
620 * directly. 606 * directly.
621 */ 607 */
622#define SLOW_PENALTY(xyz) ((xyz)->stats.exp)/1000.0 608# define SLOW_PENALTY(xyz) ((xyz)->stats.exp)/1000.0
623#define SET_SLOW_PENALTY(xyz,fl) (xyz)->stats.exp=(fl)*1000 609# define SET_SLOW_PENALTY(xyz,fl) (xyz)->stats.exp=(fl)*1000
624#endif 610#endif
625 611
626/* If you add new movement types, you may need to update 612/* If you add new movement types, you may need to update
627 * describe_item() so properly describe those types. 613 * describe_item() so properly describe those types.
628 * change_abil() probably should be updated also. 614 * change_abil() probably should be updated also.
629 */ 615 */
630#define MOVE_WALK 0x1 /* Object walks */ 616#define MOVE_WALK 0x1 /* Object walks */
631#define MOVE_FLY_LOW 0x2 /* Low flying object */ 617#define MOVE_FLY_LOW 0x2 /* Low flying object */
632#define MOVE_FLY_HIGH 0x4 /* High flying object */ 618#define MOVE_FLY_HIGH 0x4 /* High flying object */
633#define MOVE_FLYING 0x6 /* Combo of fly_low and fly_high */ 619#define MOVE_FLYING 0x6
620 /* Combo of fly_low and fly_high */
634#define MOVE_SWIM 0x8 /* Swimming object */ 621#define MOVE_SWIM 0x8 /* Swimming object */
635#define MOVE_BOAT 0x10 /* Boats/sailing */ 622#define MOVE_BOAT 0x10 /* Boats/sailing */
636#define MOVE_ALL 0x1f /* Mask of all movement types */ 623#define MOVE_ALL 0x1f /* Mask of all movement types */
637 624
638/* the normal assumption is that objects are walking/flying. 625/* the normal assumption is that objects are walking/flying.
639 * So often we don't want to block movement, but still don't want 626 * So often we don't want to block movement, but still don't want
640 * to allow all types (swimming is rather specialized) - I also 627 * to allow all types (swimming is rather specialized) - I also
641 * expect as more movement types show up, this is likely to get 628 * expect as more movement types show up, this is likely to get
648/* typdef here to define type large enough to hold bitmask of 635/* typdef here to define type large enough to hold bitmask of
649 * all movement types. Make one declaration so easy to update. 636 * all movement types. Make one declaration so easy to update.
650 * uint8 is defined yet, so just use what that would define it 637 * uint8 is defined yet, so just use what that would define it
651 * at anyways. 638 * at anyways.
652 */ 639 */
653typedef unsigned char MoveType; 640typedef unsigned char MoveType;
654 641
655/* Basic macro to see if ob2 blocks ob1 from moving onto this space. 642/* Basic macro to see if ob2 blocks ob1 from moving onto this space.
656 * Basically, ob2 has to block all of ob1 movement types. 643 * Basically, ob2 has to block all of ob1 movement types.
657 */ 644 */
658#define OB_MOVE_BLOCK(ob1, ob2) \ 645#define OB_MOVE_BLOCK(ob1, ob2) \
668 ( (type != 0) && (ob1->move_type & type) == ob1->move_type) 655 ( (type != 0) && (ob1->move_type & type) == ob1->move_type)
669 656
670 657
671#define SET_GENERATE_TYPE(xyz,va) (xyz)->stats.sp=(va) 658#define SET_GENERATE_TYPE(xyz,va) (xyz)->stats.sp=(va)
672#define GENERATE_TYPE(xyz) ((xyz)->stats.sp) 659#define GENERATE_TYPE(xyz) ((xyz)->stats.sp)
673#define GENERATE_SPEED(xyz) ((xyz)->stats.maxsp) /* if(!RANDOM()%<speed>) */ 660#define GENERATE_SPEED(xyz) ((xyz)->stats.maxsp) /* if(!RANDOM()%<speed>) */
674 661
675/* Note: These values are only a default value, resizing can change them */ 662/* Note: These values are only a default value, resizing can change them */
676#define INV_SIZE 12 /* How many items can be viewed in inventory */ 663#define INV_SIZE 12 /* How many items can be viewed in inventory */
677#define LOOK_SIZE 6 /* ditto, but for the look-window */ 664#define LOOK_SIZE 6 /* ditto, but for the look-window */
678#define MAX_INV_SIZE 40 /* For initializing arrays */ 665#define MAX_INV_SIZE 40 /* For initializing arrays */
679#define MAX_LOOK_SIZE 40 /* ditto for the look-window */ 666#define MAX_LOOK_SIZE 40 /* ditto for the look-window */
680 667
681#define EDITABLE(xyz) ((xyz)->arch->editable) 668#define EDITABLE(xyz) ((xyz)->arch->editable)
682 669
683#define E_MONSTER 0x00000001 670#define E_MONSTER 0x00000001
684#define E_EXIT 0x00000002 671#define E_EXIT 0x00000002
700#define EXIT_Y(xyz) (xyz)->stats.sp 687#define EXIT_Y(xyz) (xyz)->stats.sp
701#define EXIT_ALT_X(xyz) (xyz)->stats.maxhp 688#define EXIT_ALT_X(xyz) (xyz)->stats.maxhp
702#define EXIT_ALT_Y(xyz) (xyz)->stats.maxsp 689#define EXIT_ALT_Y(xyz) (xyz)->stats.maxsp
703 690
704/* for use by the lighting code */ 691/* for use by the lighting code */
705#define MAX_LIGHT_RADII 4 /* max radii for 'light' object, really 692#define MAX_LIGHT_RADII 4
706 * large values allow objects that can 693 /* max radii for 'light' object, really
707 * slow down the game */ 694 * large values allow objects that can
695 * slow down the game */
708#define MAX_DARKNESS 5 /* maximum map darkness, there is no 696#define MAX_DARKNESS 5 /* maximum map darkness, there is no
709 * practical reason to exceed this */ 697 * practical reason to exceed this */
710#define BRIGHTNESS(xyz) (xyz)->glow_radius>MAX_LIGHT_RADII? \ 698#define BRIGHTNESS(xyz) (xyz)->glow_radius>MAX_LIGHT_RADII? \
711 MAX_LIGHT_RADII:(xyz)->glow_radius; 699 MAX_LIGHT_RADII:(xyz)->glow_radius;
712 700
713#define F_BUY 0 701#define F_BUY 0
714#define F_SELL 1 702#define F_SELL 1
715#define F_TRUE 2 /* True value of item, unadjusted */ 703#define F_TRUE 2 /* True value of item, unadjusted */
716#define F_NO_BARGAIN 4 /* combine with F_BUY or F_SELL to disable bargaining calc */ 704#define F_NO_BARGAIN 4 /* combine with F_BUY or F_SELL to disable bargaining calc */
717#define F_IDENTIFIED 8 /* flag to calculate value of identified item */ 705#define F_IDENTIFIED 8 /* flag to calculate value of identified item */
718#define F_NOT_CURSED 16 /* flag to calculate value of uncursed item */ 706#define F_NOT_CURSED 16 /* flag to calculate value of uncursed item */
719#define F_APPROX 32 /* flag to give a guess of item value */ 707#define F_APPROX 32 /* flag to give a guess of item value */
720#define F_SHOP 64 /* consider the effect that the shop that the player is in has */ 708#define F_SHOP 64 /* consider the effect that the shop that the player is in has */
721 709
722#define DIRX(xyz) freearr_x[(xyz)->direction] 710#define DIRX(xyz) freearr_x[(xyz)->direction]
723#define DIRY(xyz) freearr_y[(xyz)->direction] 711#define DIRY(xyz) freearr_y[(xyz)->direction]
724 712
725#define D_LOCK(xyz) (xyz)->contr->freeze_inv=(xyz)->contr->freeze_look=1; 713#define D_LOCK(xyz) (xyz)->contr->freeze_inv=(xyz)->contr->freeze_look=1;
736#define SET_DIR_FROM_XY(X,Y) (signed char)X + ( ((signed char)Y)<<8) 724#define SET_DIR_FROM_XY(X,Y) (signed char)X + ( ((signed char)Y)<<8)
737#define FIRE_DIRECTIONAL 0 725#define FIRE_DIRECTIONAL 0
738#define FIRE_POSITIONAL 1 726#define FIRE_POSITIONAL 1
739 727
740/******************************************************************************/ 728/******************************************************************************/
729
741/* Monster Movements added by kholland@sunlab.cit.cornell.edu */ 730/* Monster Movements added by kholland@sunlab.cit.cornell.edu */
731
742/******************************************************************************/ 732/******************************************************************************/
733
743/* if your monsters start acting wierd, mail me */ 734/* if your monsters start acting wierd, mail me */
735
744/******************************************************************************/ 736/******************************************************************************/
737
745/* the following definitions are for the attack_movement variable in monsters */ 738/* the following definitions are for the attack_movement variable in monsters */
739
746/* if the attack_variable movement is left out of the monster archetype, or is*/ 740/* if the attack_variable movement is left out of the monster archetype, or is*/
741
747/* set to zero */ 742/* set to zero */
743
748/* the standard mode of movement from previous versions of crossfire will be */ 744/* the standard mode of movement from previous versions of crossfire will be */
745
749/* used. the upper four bits of movement data are not in effect when the monst*/ 746/* used. the upper four bits of movement data are not in effect when the monst*/
747
750/* er has an enemy. these should only be used for non agressive monsters. */ 748/* er has an enemy. these should only be used for non agressive monsters. */
749
751/* to program a monsters movement add the attack movement numbers to the movem*/ 750/* to program a monsters movement add the attack movement numbers to the movem*/
751
752/* ment numbers example a monster that moves in a circle until attacked and */ 752/* ment numbers example a monster that moves in a circle until attacked and */
753
753/* then attacks from a distance: */ 754/* then attacks from a distance: */
755
754/* CIRCLE1 = 32 */ 756/* CIRCLE1 = 32 */
757
755/* + DISTATT = 1 */ 758/* + DISTATT = 1 */
759
756/* ------------------- */ 760/* ------------------- */
761
757/* attack_movement = 33 */ 762/* attack_movement = 33 */
763
758/******************************************************************************/ 764/******************************************************************************/
759#define DISTATT 1 /* move toward a player if far, but mantain some space, */ 765#define DISTATT 1 /* move toward a player if far, but mantain some space, */
760 /* attack from a distance - good for missile users only */ 766 /* attack from a distance - good for missile users only */
761#define RUNATT 2 /* run but attack if player catches up to object */ 767#define RUNATT 2 /* run but attack if player catches up to object */
762#define HITRUN 3 /* run to then hit player then run away cyclicly */ 768#define HITRUN 3 /* run to then hit player then run away cyclicly */
763#define WAITATT 4 /* wait for player to approach then hit, move if hit */ 769#define WAITATT 4 /* wait for player to approach then hit, move if hit */
764#define RUSH 5 /* Rush toward player blindly, similiar to dumb monster */ 770#define RUSH 5 /* Rush toward player blindly, similiar to dumb monster */
765#define ALLRUN 6 /* always run never attack good for sim. of weak player */ 771#define ALLRUN 6 /* always run never attack good for sim. of weak player */
766#define DISTHIT 7 /* attack from a distance if hit as recommended by Frank */ 772#define DISTHIT 7 /* attack from a distance if hit as recommended by Frank */
767#define WAIT2 8 /* monster does not try to move towards player if far */ 773#define WAIT2 8 /* monster does not try to move towards player if far */
768 /* maintains comfortable distance */ 774 /* maintains comfortable distance */
769#define PETMOVE 16 /* if the upper four bits of attack_movement */ 775#define PETMOVE 16 /* if the upper four bits of attack_movement */
770 /* are set to this number, the monster follows a player */ 776 /* are set to this number, the monster follows a player */
771 /* until the owner calls it back or off */ 777 /* until the owner calls it back or off */
772 /* player followed denoted by 0b->owner */ 778 /* player followed denoted by 0b->owner */
773 /* the monster will try to attack whatever the player is */ 779 /* the monster will try to attack whatever the player is */
774 /* attacking, and will continue to do so until the owner */ 780 /* attacking, and will continue to do so until the owner */
775 /* calls off the monster - a key command will be */ 781 /* calls off the monster - a key command will be */
776 /* inserted to do so */ 782 /* inserted to do so */
777#define CIRCLE1 32 /* if the upper four bits of move_type / attack_movement */ 783#define CIRCLE1 32 /* if the upper four bits of move_type / attack_movement */
778 /* are set to this number, the monster will move in a */ 784 /* are set to this number, the monster will move in a */
779 /* circle until it is attacked, or the enemy field is */ 785 /* circle until it is attacked, or the enemy field is */
780 /* set, this is good for non-aggressive monsters and NPC */ 786 /* set, this is good for non-aggressive monsters and NPC */
781#define CIRCLE2 48 /* same as above but a larger circle is used */ 787#define CIRCLE2 48 /* same as above but a larger circle is used */
782#define PACEH 64 /* The Monster will pace back and forth until attacked */ 788#define PACEH 64 /* The Monster will pace back and forth until attacked */
783 /* this is HORIZONTAL movement */ 789 /* this is HORIZONTAL movement */
784#define PACEH2 80 /* the monster will pace as above but the length of the */ 790#define PACEH2 80 /* the monster will pace as above but the length of the */
785 /* pace area is longer and the monster stops before */ 791 /* pace area is longer and the monster stops before */
786 /* changing directions */ 792 /* changing directions */
787 /* this is HORIZONTAL movement */ 793 /* this is HORIZONTAL movement */
788#define RANDO 96 /* the monster will go in a random direction until */ 794#define RANDO 96 /* the monster will go in a random direction until */
789 /* it is stopped by an obstacle, then it chooses another */ 795 /* it is stopped by an obstacle, then it chooses another */
790 /* direction. */ 796 /* direction. */
791#define RANDO2 112 /* constantly move in a different random direction */ 797#define RANDO2 112 /* constantly move in a different random direction */
792#define PACEV 128 /* The Monster will pace back and forth until attacked */ 798#define PACEV 128 /* The Monster will pace back and forth until attacked */
793 /* this is VERTICAL movement */ 799 /* this is VERTICAL movement */
794#define PACEV2 144 /* the monster will pace as above but the length of the */ 800#define PACEV2 144 /* the monster will pace as above but the length of the */
795 /* pace area is longer and the monster stops before */ 801 /* pace area is longer and the monster stops before */
796 /* changing directions */ 802 /* changing directions */
797 /* this is VERTICAL movement */ 803 /* this is VERTICAL movement */
798#define LO4 15 /* bitmasks for upper and lower 4 bits from 8 bit fields */ 804#define LO4 15 /* bitmasks for upper and lower 4 bits from 8 bit fields */
799#define HI4 240 805#define HI4 240
800 806
801/* 807/*
802 * Use of the state-variable in player objects: 808 * Use of the state-variable in player objects:
803 */ 809 */
828#define PREFER_LOW 0 834#define PREFER_LOW 0
829 835
830/* Simple function we use below to keep adding to the same string 836/* Simple function we use below to keep adding to the same string
831 * but also make sure we don't overwrite that string. 837 * but also make sure we don't overwrite that string.
832 */ 838 */
839static inline void
833static inline void safe_strcat(char *dest, const char *orig, int *curlen, int maxlen) 840safe_strcat (char *dest, const char *orig, int *curlen, int maxlen)
834{ 841{
835 if (*curlen == (maxlen-1)) return; 842 if (*curlen == (maxlen - 1))
843 return;
844
836 strncpy(dest+*curlen, orig, maxlen-*curlen-1); 845 strncpy (dest + *curlen, orig, maxlen - *curlen - 1);
837 dest[maxlen-1]=0; 846 dest[maxlen - 1] = 0;
838 *curlen += strlen(orig); 847 *curlen += strlen (orig);
839 if (*curlen>(maxlen-1)) *curlen=maxlen-1; 848
849 if (*curlen > (maxlen - 1))
850 *curlen = maxlen - 1;
840} 851}
841 852
842 853
843/* The SAFE versions of these call the safe_strcat function above. 854/* The SAFE versions of these call the safe_strcat function above.
844 * Ideally, all functions should use the SAFE functions, but they 855 * Ideally, all functions should use the SAFE functions, but they
857 j = 1; \ 868 j = 1; \
858 safe_strcat(retbuf, attacks[i], len, maxlen); \ 869 safe_strcat(retbuf, attacks[i], len, maxlen); \
859 } \ 870 } \
860 safe_strcat(retbuf,")",len,maxlen); \ 871 safe_strcat(retbuf,")",len,maxlen); \
861 } 872 }
862 873
863 874
864/* separated this from the common/item.c file. b.t. Dec 1995 */ 875/* separated this from the common/item.c file. b.t. Dec 1995 */
865 876
866#define DESCRIBE_ABILITY(retbuf, variable, name) \ 877#define DESCRIBE_ABILITY(retbuf, variable, name) \
867 if(variable) { \ 878 if(variable) { \
875 j = 1; \ 886 j = 1; \
876 strcat(retbuf, attacks[i]); \ 887 strcat(retbuf, attacks[i]); \
877 } \ 888 } \
878 strcat(retbuf,")"); \ 889 strcat(retbuf,")"); \
879 } 890 }
880 891
881 892
882#define DESCRIBE_PATH(retbuf, variable, name) \ 893#define DESCRIBE_PATH(retbuf, variable, name) \
883 if(variable) { \ 894 if(variable) { \
884 int i,j=0; \ 895 int i,j=0; \
885 strcat(retbuf,"(" name ": "); \ 896 strcat(retbuf,"(" name ": "); \
886 for(i=0; i<NRSPELLPATHS; i++) \ 897 for(i=0; i<NRSPELLPATHS; i++) \
909 } \ 920 } \
910 safe_strcat(retbuf,")", len, maxlen); \ 921 safe_strcat(retbuf,")", len, maxlen); \
911 } 922 }
912 923
913/* Flags for apply_special() */ 924/* Flags for apply_special() */
914enum apply_flag { 925enum apply_flag
926{
915 /* Basic flags, always use one of these */ 927 /* Basic flags, always use one of these */
916 AP_NULL = 0, 928 AP_NULL = 0,
917 AP_APPLY = 1, 929 AP_APPLY = 1,
918 AP_UNAPPLY = 2, 930 AP_UNAPPLY = 2,
919 931
920 AP_BASIC_FLAGS = 15, 932 AP_BASIC_FLAGS = 15,
921 933
922 /* Optional flags, for bitwise or with a basic flag */ 934 /* Optional flags, for bitwise or with a basic flag */
923 AP_NO_MERGE = 16, 935 AP_NO_MERGE = 16,
924 AP_IGNORE_CURSE = 32, 936 AP_IGNORE_CURSE = 32,
925 AP_PRINT = 64 /* Print what to do, don't actually do it */ 937 AP_PRINT = 64 /* Print what to do, don't actually do it */
926 /* Note this is supported in all the functions */ 938 /* Note this is supported in all the functions */
927
928}; 939};
929 940
930/* Bitmask values for 'can_apply_object()' return values. 941/* Bitmask values for 'can_apply_object()' return values.
931 * the CAN_APPLY_ prefix is to just note what function the 942 * the CAN_APPLY_ prefix is to just note what function the
932 * are returned from. 943 * are returned from.
973 * 984 *
974 * 0.94.2 - you probably shouldn't need to change any of the rand stuff 985 * 0.94.2 - you probably shouldn't need to change any of the rand stuff
975 * here. 986 * here.
976 */ 987 */
977 988
978#ifdef HAVE_SRANDOM
979#define RANDOM() random() 989#define RANDOM() random()
980#define SRANDOM(xyz) srandom(xyz) 990#define SRANDOM(xyz) srandom(xyz)
981#else
982# ifdef HAVE_SRAND48
983# define RANDOM() lrand48()
984# define SRANDOM(xyz) srand48(xyz)
985# else
986# ifdef HAVE_SRAND
987# define RANDOM() rand()
988# define SRANDOM(xyz) srand(xyz)
989# else
990# error "Could not find a usable random routine"
991# endif
992# endif
993#endif
994 991
995/* Returns the weight of the given object. Note: it does not take the number of 992/* Returns the weight of the given object. Note: it does not take the number of
996 * items (nrof) into account. 993 * items (nrof) into account.
997 */ 994 */
998#define WEIGHT(op) (op->nrof?op->weight:op->weight+op->carrying) 995#define WEIGHT(op) (op->nrof?op->weight:op->weight+op->carrying)
1007 * If you use them and have choice between FAST_STRCAT and FAST_STRNCAT, 1004 * If you use them and have choice between FAST_STRCAT and FAST_STRNCAT,
1008 * keep in mind FAST_STRNCAT is faster since length of second argument is 1005 * keep in mind FAST_STRNCAT is faster since length of second argument is
1009 * kown in advance. 1006 * kown in advance.
1010 */ 1007 */
1011 1008
1012 #define PREPARE_FASTCAT(buf__) buf__+strlen(buf__) 1009#define PREPARE_FASTCAT(buf__) buf__+strlen(buf__)
1013 #define FAST_STRNCAT(buf__,buf2__,size__) {memcpy (buf__,buf2__,size__);buf__+=size__;} 1010#define FAST_STRNCAT(buf__,buf2__,size__) {memcpy (buf__,buf2__,size__);buf__+=size__;}
1014 #define FAST_STRCAT(buf__,buf2__) {memcpy (buf__,buf2__,strlen(buf2__));buf__+=strlen(buf2__);} 1011#define FAST_STRCAT(buf__,buf2__) {memcpy (buf__,buf2__,strlen(buf2__));buf__+=strlen(buf2__);}
1015 #define FINISH_FASTCAT(buf__) buf__[0]='\0'; 1012#define FINISH_FASTCAT(buf__) buf__[0]='\0';
1016 1013
1017 /* You may uncomment following define to check sanity of code. 1014 /* You may uncomment following define to check sanity of code.
1018 * But use as debug only (loses all speed gained by those macros) 1015 * But use as debug only (loses all speed gained by those macros)
1019 */ 1016 */
1017
1020/*#define FAST_STRNCAT(buf__,buf2__,size__) {memcpy (buf__,buf2__,size__);buf__+=size__;\ 1018/*#define FAST_STRNCAT(buf__,buf2__,size__) {memcpy (buf__,buf2__,size__);buf__+=size__;\
1021 if (size__!=strlen(buf2__)) LOG(llevError, "Error, bad length for %s\n",buf2__);}*/ 1019 if (size__!=strlen(buf2__)) LOG(llevError, "Error, bad length for %s\n",buf2__);}*/
1022 1020
1023 1021
1024 1022
1025 1023
1026 1024
1027 1025
1028 1026
1029/* 1027/*
1030 * Warning! 1028 * Warning!
1031 * If you add message types here, don't forget 1029 * If you add message types here, don't forget
1032 * to keep the client up to date too! 1030 * to keep the client up to date too!
1033 */ 1031 */
1034 1032
1035 1033
1036/* message types */ 1034/* message types */
1037#define MSG_TYPE_BOOK 1 1035#define MSG_TYPE_BOOK 1
1038#define MSG_TYPE_CARD 2 1036#define MSG_TYPE_CARD 2
1039#define MSG_TYPE_PAPER 3 1037#define MSG_TYPE_PAPER 3
1040#define MSG_TYPE_SIGN 4 1038#define MSG_TYPE_SIGN 4
1110#define MSG_TYPE_MONUMENT_WALL_3 12 1108#define MSG_TYPE_MONUMENT_WALL_3 12
1111 1109
1112/*some readable flags*/ 1110/*some readable flags*/
1113 1111
1114/* dialog messsage */ 1112/* dialog messsage */
1115#define MSG_TYPE_DIALOG_NPC 1 /*A message from the npc*/ 1113#define MSG_TYPE_DIALOG_NPC 1 /*A message from the npc */
1116#define MSG_TYPE_DIALOG_ANSWER 2 /*One of possible answers*/ 1114#define MSG_TYPE_DIALOG_ANSWER 2 /*One of possible answers */
1117#define MSG_TYPE_DIALOG_ANSWER_COUNT 3 /*Number of possible answers*/ 1115#define MSG_TYPE_DIALOG_ANSWER_COUNT 3 /*Number of possible answers */
1118 1116
1119/* admin messages */ 1117/* admin messages */
1120#define MSG_TYPE_ADMIN_RULES 1 1118#define MSG_TYPE_ADMIN_RULES 1
1121#define MSG_TYPE_ADMIN_NEWS 2 1119#define MSG_TYPE_ADMIN_NEWS 2
1122 1120
1123#endif /* DEFINE_H */ 1121#endif /* DEFINE_H */
1122

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines