ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/define.h
Revision: 1.62
Committed: Sun Jul 1 05:00:18 2007 UTC (16 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.61: +11 -12 lines
Log Message:
- upgrade crossfire trt to the GPL version 3 (hopefully correctly).
- add a single file covered by the GNU Affero General Public License
  (which is not yet released, so I used the current draft, which is
  legally a bit wavy, but its likely better than nothing as it expresses
  direct intent by the authors, and we can upgrade as soon as it has been
  released).
  * this should ensure availability of source code for the server at least
    and hopefully also archetypes and maps even when modified versions
    are not being distributed, in accordance of section 13 of the agplv3.

File Contents

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