1 | /* |
1 | /* |
2 | * static char *rcsid_define_h = |
2 | * static char *rcsid_define_h = |
3 | * "$Id: define.h,v 1.7 2006/08/27 13:02:03 root Exp $"; |
3 | * "$Id: define.h,v 1.9 2006/09/11 12:08:01 root Exp $"; |
4 | */ |
4 | */ |
5 | |
5 | |
6 | /* |
6 | /* |
7 | CrossFire, A Multiplayer game for X-windows |
7 | CrossFire, A Multiplayer game for X-windows |
8 | |
8 | |
… | |
… | |
161 | #define PLAYERMOVER 40 |
161 | #define PLAYERMOVER 40 |
162 | #define TELEPORTER 41 |
162 | #define TELEPORTER 41 |
163 | #define CREATOR 42 |
163 | #define CREATOR 42 |
164 | #define SKILL 43 /* also see SKILL_TOOL (74) below */ |
164 | #define SKILL 43 /* also see SKILL_TOOL (74) below */ |
165 | #define EXPERIENCE 44 /* This is basically obsolete now. It used to contain */ |
165 | #define EXPERIENCE 44 /* This is basically obsolete now. It used to contain */ |
166 | /* experience for broad skill categories. This value */ |
166 | /* experience for broad skill categories. This value */ |
167 | /* is now automatically converteed at load time. */ |
167 | /* is now automatically converteed at load time. */ |
168 | #define EARTHWALL 45 |
168 | #define EARTHWALL 45 |
169 | #define GOLEM 46 |
169 | #define GOLEM 46 |
170 | /*#define BOMB 47 */ |
170 | /*#define BOMB 47 */ |
171 | #define THROWN_OBJ 48 |
171 | #define THROWN_OBJ 48 |
172 | #define BLINDNESS 49 |
172 | #define BLINDNESS 49 |
173 | #define GOD 50 |
173 | #define GOD 50 |
174 | |
174 | |
175 | #define DETECTOR 51 /* peterm: detector is an object */ |
175 | #define DETECTOR 51 /* peterm: detector is an object */ |
176 | /* which notices the presense of */ |
176 | /* which notices the presense of */ |
177 | /* another object and is triggered */ |
177 | /* another object and is triggered */ |
178 | /* like buttons. */ |
178 | /* like buttons. */ |
179 | #define TRIGGER_MARKER 52 /* inserts an invisible, weightless */ |
179 | #define TRIGGER_MARKER 52 /* inserts an invisible, weightless */ |
180 | /* force into a player with a specified string WHEN TRIGGERED. */ |
180 | /* force into a player with a specified string WHEN TRIGGERED. */ |
181 | #define DEAD_OBJECT 53 |
181 | #define DEAD_OBJECT 53 |
182 | #define DRINK 54 |
182 | #define DRINK 54 |
183 | #define MARKER 55 /* inserts an invisible, weightless */ |
183 | #define MARKER 55 /* inserts an invisible, weightless */ |
184 | /* force into a player with a specified string. */ |
184 | /* force into a player with a specified string. */ |
185 | #define HOLY_ALTAR 56 |
185 | #define HOLY_ALTAR 56 |
186 | #define PLAYER_CHANGER 57 |
186 | #define PLAYER_CHANGER 57 |
187 | #define BATTLEGROUND 58 /* battleground, by Andreas Vogl */ |
187 | #define BATTLEGROUND 58 /* battleground, by Andreas Vogl */ |
188 | |
188 | |
189 | #define PEACEMAKER 59 /* Object owned by a player which can convert */ |
189 | #define PEACEMAKER 59 /* Object owned by a player which can convert */ |
190 | /* a monster into a peaceful being incapable of attack. */ |
190 | /* a monster into a peaceful being incapable of attack. */ |
191 | #define GEM 60 |
191 | #define GEM 60 |
192 | /*#define FIRECHEST 61*/ /* FIRECHEST folded into FIREWALL */ |
192 | /*#define FIRECHEST 61*/ /* FIRECHEST folded into FIREWALL */ |
193 | #define FIREWALL 62 |
193 | #define FIREWALL 62 |
194 | #define ANVIL 63 |
194 | #define ANVIL 63 |
195 | #define CHECK_INV 64 /* by b.t. thomas@nomad.astro.psu.edu */ |
195 | #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 |
196 | #define MOOD_FLOOR 65 /* by b.t. thomas@nomad.astro.psu.edu |
197 | * values of last_sp set how to change: |
197 | * values of last_sp set how to change: |
198 | * 0 = furious, all monsters become aggressive |
198 | * 0 = furious, all monsters become aggressive |
199 | * 1 = angry, all but friendly become aggressive |
199 | * 1 = angry, all but friendly become aggressive |
200 | * 2 = calm, all aggressive monsters calm down |
200 | * 2 = calm, all aggressive monsters calm down |
201 | * 3 = sleep, all monsters fall asleep |
201 | * 3 = sleep, all monsters fall asleep |
202 | * 4 = charm, monsters become pets */ |
202 | * 4 = charm, monsters become pets */ |
203 | #define EXIT 66 |
203 | #define EXIT 66 |
204 | #define ENCOUNTER 67 |
204 | #define ENCOUNTER 67 |
205 | #define SHOP_FLOOR 68 |
205 | #define SHOP_FLOOR 68 |
206 | #define SHOP_MAT 69 |
206 | #define SHOP_MAT 69 |
207 | #define RING 70 |
207 | #define RING 70 |
… | |
… | |
302 | /* Subtypes for MATERIAL */ |
302 | /* Subtypes for MATERIAL */ |
303 | #define ST_MAT_FLOOR 1 /* Floor */ |
303 | #define ST_MAT_FLOOR 1 /* Floor */ |
304 | #define ST_MAT_WALL 2 /* Wall */ |
304 | #define ST_MAT_WALL 2 /* Wall */ |
305 | #define ST_MAT_ITEM 3 /* All other items, including doors & such */ |
305 | #define ST_MAT_ITEM 3 /* All other items, including doors & such */ |
306 | |
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 | |
|
|
318 | /* definitions for weapontypes */ |
307 | /* definitions for weapontypes */ |
319 | |
308 | |
320 | #define WEAP_HIT 0 /* the basic */ |
309 | #define WEAP_HIT 0 /* the basic */ |
321 | #define WEAP_SLASH 1 /* slash */ |
310 | #define WEAP_SLASH 1 /* slash */ |
322 | #define WEAP_PIERCE 2 /* arrows, stiletto */ |
311 | #define WEAP_PIERCE 2 /* arrows, stiletto */ |
… | |
… | |
421 | * flags[2] is 64 to 95 |
410 | * flags[2] is 64 to 95 |
422 | * flags[3] is 96 to 127 |
411 | * flags[3] is 96 to 127 |
423 | */ |
412 | */ |
424 | /* Basic routines to do above */ |
413 | /* Basic routines to do above */ |
425 | #define SET_FLAG(xyz, p) \ |
414 | #define SET_FLAG(xyz, p) \ |
426 | ((xyz)->flags[p/32] |= (1U << (p % 32))) |
415 | ((xyz)->flags[p/32] |= (1U << (p % 32))) |
427 | #define CLEAR_FLAG(xyz, p) \ |
416 | #define CLEAR_FLAG(xyz, p) \ |
428 | ((xyz)->flags[p/32] &= ~(1U << (p % 32))) |
417 | ((xyz)->flags[p/32] &= ~(1U << (p % 32))) |
429 | #define QUERY_FLAG(xyz, p) \ |
418 | #define QUERY_FLAG(xyz, p) \ |
430 | ((xyz)->flags[p/32] & (1U << (p % 32))) |
419 | ((xyz)->flags[p/32] & (1U << (p % 32))) |
431 | #define COMPARE_FLAGS(p,q) \ |
420 | #define COMPARE_FLAGS(p,q) \ |
432 | ( \ |
421 | ( \ |
433 | ((p)->flags[0] == (q)->flags[0]) && \ |
422 | ((p)->flags[0] == (q)->flags[0]) && \ |
434 | ((p)->flags[1] == (q)->flags[1]) && \ |
423 | ((p)->flags[1] == (q)->flags[1]) && \ |
435 | ((p)->flags[2] == (q)->flags[2]) && \ |
424 | ((p)->flags[2] == (q)->flags[2]) && \ |
436 | ((p)->flags[3] == (q)->flags[3]) \ |
425 | ((p)->flags[3] == (q)->flags[3]) \ |
437 | ) |
426 | ) |
438 | /* convenience macros to determine what kind of things we are dealing with */ |
427 | /* convenience macros to determine what kind of things we are dealing with */ |
439 | |
428 | |
440 | #define IS_WEAPON(op) \ |
429 | #define IS_WEAPON(op) \ |
441 | (op->type == ARROW || op->type == BOW || op->type == WEAPON) |
430 | (op->type == ARROW || op->type == BOW || op->type == WEAPON) |
442 | |
431 | |
443 | #define IS_ARMOR(op) \ |
432 | #define IS_ARMOR(op) \ |
444 | (op->type == ARMOUR || op->type == SHIELD || op->type == HELMET || \ |
433 | (op->type == ARMOUR || op->type == SHIELD || op->type == HELMET || \ |
445 | op->type == CLOAK || op->type == BOOTS || op->type == GLOVES || \ |
434 | op->type == CLOAK || op->type == BOOTS || op->type == GLOVES || \ |
446 | op->type == BRACERS || op->type == GIRDLE) |
435 | op->type == BRACERS || op->type == GIRDLE) |
447 | |
436 | |
448 | #define IS_LIVE(op) \ |
437 | #define IS_LIVE(op) \ |
449 | ((op->type == PLAYER || QUERY_FLAG(op, FLAG_MONSTER) || \ |
438 | ((op->type == PLAYER || QUERY_FLAG(op, FLAG_MONSTER) || \ |
450 | (QUERY_FLAG(op, FLAG_ALIVE) && !QUERY_FLAG(op, FLAG_GENERATOR) && \ |
439 | (QUERY_FLAG(op, FLAG_ALIVE) && !QUERY_FLAG(op, FLAG_GENERATOR) && \ |
451 | !op->type == DOOR)) && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE))) |
440 | !op->type == DOOR)) && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE))) |
452 | |
441 | |
453 | #define IS_ARROW(op) \ |
442 | #define IS_ARROW(op) \ |
454 | (op->type==ARROW || \ |
443 | (op->type==ARROW || \ |
455 | (op->type==SPELL_EFFECT && \ |
444 | (op->type==SPELL_EFFECT && \ |
456 | (op->subtype == SP_BULLET || op->subtype == SP_MAGIC_MISSILE))) |
445 | (op->subtype == SP_BULLET || op->subtype == SP_MAGIC_MISSILE))) |
457 | |
446 | |
458 | /* This return TRUE if object has still randomitems which |
447 | /* This return TRUE if object has still randomitems which |
459 | * could be expanded. |
448 | * could be expanded. |
460 | */ |
449 | */ |
461 | #define HAS_RANDOM_ITEMS(op) (op->randomitems && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE))) |
450 | #define HAS_RANDOM_ITEMS(op) (op->randomitems && (!QUERY_FLAG(op,FLAG_IS_A_TEMPLATE))) |
… | |
… | |
511 | #define FLAG_NO_MAGIC 41 /* Spells (some) can't pass this object */ |
500 | #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 */ |
501 | #define FLAG_NO_FIX_PLAYER 42 /* fix_player() won't be called */ |
513 | #define FLAG_IS_LIGHTABLE 43 /* object can be lit */ |
502 | #define FLAG_IS_LIGHTABLE 43 /* object can be lit */ |
514 | #define FLAG_TEAR_DOWN 44 /* at->faces[hp*animations/maxhp] at hit */ |
503 | #define FLAG_TEAR_DOWN 44 /* at->faces[hp*animations/maxhp] at hit */ |
515 | #define FLAG_RUN_AWAY 45 /* Object runs away from nearest player \ |
504 | #define FLAG_RUN_AWAY 45 /* Object runs away from nearest player \ |
516 | but can still attack at a distance */ |
505 | but can still attack at a distance */ |
517 | /*#define FLAG_PASS_THRU 46*/ /* Objects with can_pass_thru can pass \ |
506 | /*#define FLAG_PASS_THRU 46*/ /* Objects with can_pass_thru can pass \ |
518 | thru this object as if it wasn't there */ |
507 | thru this object as if it wasn't there */ |
519 | /*#define FLAG_CAN_PASS_THRU 47*/ /* Can pass thru... */ |
508 | /*#define FLAG_CAN_PASS_THRU 47*/ /* Can pass thru... */ |
520 | |
509 | |
521 | #define FLAG_PICK_UP 48 /* Can pick up */ |
510 | #define FLAG_PICK_UP 48 /* Can pick up */ |
522 | #define FLAG_UNIQUE 49 /* Item is really unique (UNIQUE_ITEMS) */ |
511 | #define FLAG_UNIQUE 49 /* Item is really unique (UNIQUE_ITEMS) */ |
523 | #define FLAG_NO_DROP 50 /* Object can't be dropped */ |
512 | #define FLAG_NO_DROP 50 /* Object can't be dropped */ |
… | |
… | |
574 | /*#define FLAG_DUST 95 *//* item is a 'powder', effects throwing */ |
563 | /*#define FLAG_DUST 95 *//* item is a 'powder', effects throwing */ |
575 | |
564 | |
576 | /* Start of values in flags[3] */ |
565 | /* Start of values in flags[3] */ |
577 | #define FLAG_NO_STEAL 96 /* Item can't be stolen */ |
566 | #define FLAG_NO_STEAL 96 /* Item can't be stolen */ |
578 | #define FLAG_ONE_HIT 97 /* Monster can only hit once before going |
567 | #define FLAG_ONE_HIT 97 /* Monster can only hit once before going |
579 | * away (replaces ghosthit) |
568 | * away (replaces ghosthit) |
580 | */ |
569 | */ |
581 | #define FLAG_CLIENT_SENT 98 /* THIS IS A DEBUG FLAG ONLY. We use it to |
570 | #define FLAG_CLIENT_SENT 98 /* THIS IS A DEBUG FLAG ONLY. We use it to |
582 | * detect cases were the server is trying |
571 | * detect cases were the server is trying |
583 | * to send an upditem when we have not |
572 | * to send an upditem when we have not |
584 | * actually sent the item. |
573 | * actually sent the item. |
585 | */ |
574 | */ |
586 | |
575 | |
587 | #define FLAG_BERSERK 99 /* monster will attack closest living |
576 | #define FLAG_BERSERK 99 /* monster will attack closest living |
588 | object */ |
577 | object */ |
589 | #define FLAG_NEUTRAL 100 /* monster is from type neutral */ |
578 | #define FLAG_NEUTRAL 100 /* monster is from type neutral */ |
590 | #define FLAG_NO_ATTACK 101 /* monster don't attack */ |
579 | #define FLAG_NO_ATTACK 101 /* monster don't attack */ |
591 | #define FLAG_NO_DAMAGE 102 /* monster can't be damaged */ |
580 | #define FLAG_NO_DAMAGE 102 /* monster can't be damaged */ |
592 | #define FLAG_OBJ_ORIGINAL 103 /* NEVER SET THIS. Item was loaded by |
581 | #define FLAG_OBJ_ORIGINAL 103 /* NEVER SET THIS. Item was loaded by |
593 | * load_original_map() */ |
582 | * load_original_map() */ |
594 | #define FLAG_OBJ_SAVE_ON_OVL 104 /* this object should be saved on |
583 | #define FLAG_OBJ_SAVE_ON_OVL 104 /* this object should be saved on |
595 | * the overlay, and is not subject to |
584 | * the overlay, and is not subject to |
596 | * decay. */ |
585 | * decay. */ |
597 | #define FLAG_ACTIVATE_ON_PUSH 105 /* connected object is activated when 'pushed' */ |
586 | #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' */ |
587 | #define FLAG_ACTIVATE_ON_RELEASE 106 /* connected object is activated when 'released' */ |
599 | #define FLAG_IS_WATER 107 |
588 | #define FLAG_IS_WATER 107 |
600 | #define FLAG_CONTENT_ON_GEN 108 |
589 | #define FLAG_CONTENT_ON_GEN 108 |
601 | #define FLAG_IS_A_TEMPLATE 109 /* Object has no ingame life until instanciated*/ |
590 | #define FLAG_IS_A_TEMPLATE 109 /* Object has no ingame life until instanciated*/ |
… | |
… | |
701 | #define EXIT_ALT_X(xyz) (xyz)->stats.maxhp |
690 | #define EXIT_ALT_X(xyz) (xyz)->stats.maxhp |
702 | #define EXIT_ALT_Y(xyz) (xyz)->stats.maxsp |
691 | #define EXIT_ALT_Y(xyz) (xyz)->stats.maxsp |
703 | |
692 | |
704 | /* for use by the lighting code */ |
693 | /* for use by the lighting code */ |
705 | #define MAX_LIGHT_RADII 4 /* max radii for 'light' object, really |
694 | #define MAX_LIGHT_RADII 4 /* max radii for 'light' object, really |
706 | * large values allow objects that can |
695 | * large values allow objects that can |
707 | * slow down the game */ |
696 | * slow down the game */ |
708 | #define MAX_DARKNESS 5 /* maximum map darkness, there is no |
697 | #define MAX_DARKNESS 5 /* maximum map darkness, there is no |
709 | * practical reason to exceed this */ |
698 | * practical reason to exceed this */ |
710 | #define BRIGHTNESS(xyz) (xyz)->glow_radius>MAX_LIGHT_RADII? \ |
699 | #define BRIGHTNESS(xyz) (xyz)->glow_radius>MAX_LIGHT_RADII? \ |
711 | MAX_LIGHT_RADII:(xyz)->glow_radius; |
700 | MAX_LIGHT_RADII:(xyz)->glow_radius; |
712 | |
701 | |
713 | #define F_BUY 0 |
702 | #define F_BUY 0 |
714 | #define F_SELL 1 |
703 | #define F_SELL 1 |
715 | #define F_TRUE 2 /* True value of item, unadjusted */ |
704 | #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 */ |
705 | #define F_NO_BARGAIN 4 /* combine with F_BUY or F_SELL to disable bargaining calc */ |
… | |
… | |
921 | |
910 | |
922 | /* Optional flags, for bitwise or with a basic flag */ |
911 | /* Optional flags, for bitwise or with a basic flag */ |
923 | AP_NO_MERGE = 16, |
912 | AP_NO_MERGE = 16, |
924 | AP_IGNORE_CURSE = 32, |
913 | AP_IGNORE_CURSE = 32, |
925 | AP_PRINT = 64 /* Print what to do, don't actually do it */ |
914 | AP_PRINT = 64 /* Print what to do, don't actually do it */ |
926 | /* Note this is supported in all the functions */ |
915 | /* Note this is supported in all the functions */ |
927 | |
916 | |
928 | }; |
917 | }; |
929 | |
918 | |
930 | /* Bitmask values for 'can_apply_object()' return values. |
919 | /* Bitmask values for 'can_apply_object()' return values. |
931 | * the CAN_APPLY_ prefix is to just note what function the |
920 | * the CAN_APPLY_ prefix is to just note what function the |