version 1.3 | | version 1.4 |
---|
| | |
/* | | /* |
* static char *rcsid_object_h = | | * static char *rcsid_object_h = |
* "$Id: object.h,v 1.3 1999/09/17 21:04:02 damn Exp $"; | | * "$Id: object.h,v 1.4 1999/09/18 07:38:06 damn Exp $"; |
*/ | | */ |
| | |
/* | | /* |
| | |
#ifndef OBJECT_H | | #ifndef OBJECT_H |
#define OBJECT_H | | #define OBJECT_H |
| | |
/* Only add new values to this list if somewhere in the program code, | | |
* it is actually needed. Just because you add a new monster does not | | |
* mean it has to have a type defined here. That only needs to happen | | |
* if in some .c file, it needs to do certain special actions based on | | |
* the monster type, that can not be handled by any of the numerous | | |
* flags | | |
* Also, if you add new entries, try and fill up the holes in this list. | | |
*/ | | |
#define PLAYER 1 | | |
#define BULLET 2 | | |
#define ROD 3 | | |
#define TREASURE 4 | | |
#define POTION 5 | | |
#define FOOD 6 | | |
#define POISON 7 | | |
#define BOOK 8 | | |
#define CLOCK 9 | | |
#define FBULLET 10 | | |
#define FBALL 11 | | |
#define LIGHTNING 12 | | |
#define ARROW 13 | | |
#define BOW 14 | | |
#define WEAPON 15 | | |
#define ARMOUR 16 | | |
#define PEDESTAL 17 | | |
#define ALTAR 18 | | |
#define CONFUSION 19 | | |
#define LOCKED_DOOR 20 | | |
#define SPECIAL_KEY 21 | | |
#define MAP 22 | | |
#define DOOR 23 | | |
#define KEY 24 | | |
#define MMISSILE 25 | | |
#define TIMED_GATE 26 | | |
#define TRIGGER 27 | | |
#define GRIMREAPER 28 | | |
#define MAGIC_EAR 29 | | |
#define TRIGGER_BUTTON 30 | | |
#define TRIGGER_ALTAR 31 | | |
#define TRIGGER_PEDESTAL 32 | | |
#define SHIELD 33 | | |
#define HELMET 34 | | |
#define HORN 35 | | |
#define MONEY 36 | | |
#define GRAVE 37 | | |
#define GRAVESTONE 38 | | |
#define AMULET 39 | | |
#define PLAYERMOVER 40 | | |
#define TELEPORTER 41 | | |
#define CREATOR 42 | | |
#define SKILL 43 /* Skills are similar to abilites, but | | |
* not related to spells. by njw@cs.city.ac.uk | | |
*/ | | |
#define EXPERIENCE 44 /* An experience 'object'. Needed for multi-exp/skills | | |
* hack. -b.t. thomas@astro.psu.edu | | |
*/ | | |
#define EARTHWALL 45 | | |
#define GOLEM 46 | | |
#define BOMB 47 | | |
#define THROWN_OBJ 48 | | |
#define BLINDNESS 49 | | |
#define GOD 50 | | |
| | |
/* peterm: detector is an object which notices the presense of | | |
another object and is triggered like buttons. */ | | |
#define DETECTOR 51 | | |
#define SPEEDBALL 52 | | |
#define DEAD_OBJECT 53 | | |
#define DRINK 54 | | |
#define MARKER 55 /* inserts an invisible, weightless | | |
force into a player with a specified string. */ | | |
#define LIQUID 56 /* potion poured out of its bottle -- DAMN */ | | |
#define BOTTLE 57 /* bottle drained of its potion -- DAMN */ | | |
| | |
#define GEM 60 | | |
#define FIRECHEST 61 | | |
#define FIREWALL 62 | | |
| | |
#define CHECK_INV 64 /* by b.t. thomas@nomad.astro.psu.edu */ | | |
#define MOOD_FLOOR 65 /* by b.t. thomas@nomad.astro.psu.edu | | |
* values of last_sp set how to change: | | |
* 0 = furious, all monsters become aggressive | | |
* 1 = angry, all but friendly become aggressive | | |
* 2 = calm, all aggressive monsters calm down | | |
* 3 = sleep, all monsters fall asleep | | |
* 4 = charm, monsters become pets | | |
*/ | | |
#define EXIT 66 | | |
#define ENCOUNTER 67 | | |
#define SHOP_FLOOR 68 | | |
#define SHOP_MAT 69 | | |
#define RING 70 | | |
| | |
#define FLESH 72 /* animal 'body parts' -b.t. */ | | |
#define INORGANIC 73 /* metals and minerals */ | | |
| | |
#define LIGHTER 75 | | |
#define TRAP_PART 76 /* Needed by set traps skill -b.t. */ | | |
| | |
#define SPELLBOOK 85 | | |
| | |
#define CLOAK 87 | | |
#define CONE 88 | | |
| | |
#define SPINNER 90 | | |
#define GATE 91 | | |
#define BUTTON 92 | | |
#define HANDLE 93 | | |
#define HOLE 94 | | |
#define TRAPDOOR 95 | | |
#define WORD_OF_RECALL 96 | | |
#define PARAIMAGE 97 | | |
#define SIGN 98 | | |
#define BOOTS 99 | | |
#define GLOVES 100 | | |
| | |
#define CONVERTER 103 | | |
#define BRACERS 104 | | |
#define POISONING 105 | | |
#define SAVEBED 106 | | |
#define POISONCLOUD 107 | | |
#define FIREHOLES 108 | | |
#define WAND 109 | | |
#define ABILITY 110 | | |
#define SCROLL 111 | | |
#define DIRECTOR 112 | | |
#define GIRDLE 113 | | |
#define FORCE 114 | | |
| | |
| | |
/* Eneq(@csd.uu.se): Id for close_container archetype. */ | | |
#define CLOSE_CON 121 | | |
#define CONTAINER 122 | | |
#define ARMOUR_IMPROVER 123 | | |
#define WEAPON_IMPROVER 124 | | |
#define MONEY_CHANGER 125 | | |
| | |
#define SKILLSCROLL 130 /* can add a skill to player's inventory -bt.*/ | | |
| | |
#define DEEP_SWAMP 138 | | |
#define IDENTIFY_ALTAR 139 | | |
| | |
#define CANCELLATION 141 | | |
| | |
/* Mark Wedel (mark@pyramid.com) Shop inventories */ | | |
#define MENU 150 | | |
| | |
/* peterm: ball lightning and color spray */ | | |
#define BALL_LIGHTNING 151 | | |
| | |
#define SWARM_SPELL 153 | | |
#define RUNE 154 | | |
| | |
#define POWER_CRYSTAL 156 | | |
#define CORPSE 157 | | |
| | |
#define DISEASE 158 | | |
#define SYMPTOM 159 | | |
| | |
| | |
/* Flag structure now changed. | | |
* Each flag is now a bit offset, starting at zero. The macros | | |
* will update/read the appropriate flag element in the object | | |
* structure. | | |
* | | |
* Hopefully, since these offsets are integer constants set at run time, | | |
* the compiler will reduce the macros something as simple as the | | |
* old system was. | | |
* | | |
* Flags now have FLAG as the prefix. This to be clearer, and also | | |
* to make sure F_ names are not still being used anyplace. | | |
* | | |
* The macros below assume that the flag size for each element is 32 | | |
* bits. IF it is smaller, bad things will happen. See structs.h | | |
* for more info. | | |
* | | |
* All functions should use the macros below. In process of converting | | |
* to the new system, I find several files that did not use the previous | | |
* macros. | | |
* | | |
* If any FLAG's are added, be sure to add them to the flag_links structure | | |
* in common/loader.c, if necessary. | | |
* | | |
* flags[0] is 0 to 31 | | |
* flags[1] is 32 to 63 | | |
* flags[2] is 64 to 95 | | |
* flags[3] is 96 to 127 | | |
*/ | | |
/* Basic routines to do above */ | | |
#define SET_FLAG(xyz, p) \ | | |
((xyz)->flags[p/32] |= (1U << (p % 32))) | | |
#define CLEAR_FLAG(xyz, p) \ | | |
((xyz)->flags[p/32] &= ~(1U << (p % 32))) | | |
#define QUERY_FLAG(xyz, p) \ | | |
((xyz)->flags[p/32] & (1U << (p % 32))) | | |
| | |
#define FLAG_ALIVE 0 /* Object can fight (or be fought) */ | | |
#define FLAG_WIZ 1 /* Object has special privilegies */ | | |
#define FLAG_REMOVED 2 /* Object is not in any map or invenory */ | | |
#define FLAG_FREED 3 /* Object is in the list of free objects */ | | |
#define FLAG_WAS_WIZ 4 /* Player was once a wiz */ | | |
#define FLAG_APPLIED 5 /* Object is ready for use by living */ | | |
#define FLAG_UNPAID 6 /* Object hasn't been paid for yet */ | | |
#define FLAG_AN 7 /* Name must be prepended by "an", not "a"*/ | | |
#define FLAG_NO_PICK 8 /* Object can't be picked up */ | | |
#define FLAG_WALK_ON 9 /* Applied when it's walked upon */ | | |
#define FLAG_NO_PASS 10 /* Nothing can pass (wall() is true) */ | | |
#define FLAG_ANIMATE 11 /* The object looks at archetype for faces */ | | |
#define FLAG_SLOW_MOVE 12 /* Uses the stats.exp/1000 to slow down */ | | |
#define FLAG_FLYING 13 /* Not affected by WALK_ON or SLOW_MOVE) */ | | |
#define FLAG_MONSTER 14 /* Will attack players */ | | |
#define FLAG_FRIENDLY 15 /* Will help players */ | | |
#define FLAG_GENERATOR 16 /* Will generate type ob->stats.food */ | | |
#define FLAG_IS_THROWN 17 /* Object is designed to be thrown. */ | | |
#define FLAG_AUTO_APPLY 18 /* Will be applied when created */ | | |
#define FLAG_TREASURE 19 /* Will generate treasure when applied */ | | |
#define FLAG_APPLY_ONCE 20 /* Will dissapear when applied */ | | |
#define FLAG_SEE_INVISIBLE 21 /* Will see invisible player */ | | |
#define FLAG_CAN_ROLL 22 /* Object can be rolled */ | | |
/* FLAG_IS_TURNING is no longer used */ | | |
/*#define FLAG_IS_TURNING 23 *//* Object will turn after player */ | | |
#define FLAG_IS_TURNABLE 24 /* Object can change face with direction */ | | |
#define FLAG_WALK_OFF 25 /* Object is applied when left */ | | |
#define FLAG_FLY_ON 26 /* As WALK_ON, but only with FLAG_FLYING */ | | |
#define FLAG_FLY_OFF 27 /* As WALK_OFF, but only with FLAG_FLYING */ | | |
#define FLAG_IS_USED_UP 28 /* When (--food<0) the object will exit */ | | |
#define FLAG_IDENTIFIED 29 /* Not implemented yet */ | | |
#define FLAG_REFLECTING 30 /* Object reflects from walls (lightning) */ | | |
#define FLAG_CHANGING 31 /* Changes to other_arch when anim is done*/ | | |
/* Start of values in flags[1] */ | | |
#define FLAG_SPLITTING 32 /* Object splits into stats.food other objs */ | | |
#define FLAG_HITBACK 33 /* Object will hit back when hit */ | | |
#define FLAG_STARTEQUIP 34 /* Object was given to player at start */ | | |
#define FLAG_BLOCKSVIEW 35 /* Object blocks view */ | | |
#define FLAG_UNDEAD 36 /* Monster is undead */ | | |
#define FLAG_SCARED 37 /* Monster is scared (mb player in future)*/ | | |
#define FLAG_UNAGGRESSIVE 38 /* Monster doesn't attack players */ | | |
#define FLAG_REFL_MISSILE 39 /* Arrows will reflect from object */ | | |
#define FLAG_REFL_SPELL 40 /* Spells (some) will reflect from object */ | | |
#define FLAG_NO_MAGIC 41 /* Spells (some) can't pass this object */ | | |
#define FLAG_NO_FIX_PLAYER 42 /* fix_player() won't be called */ | | |
#define FLAG_NEED_IE 43 /* 1 ruby -> 2 rubies */ | | |
#define FLAG_TEAR_DOWN 44 /* at->faces[hp*animations/maxhp] at hit */ | | |
#define FLAG_RUN_AWAY 45 /* Object runs away from nearest player \ | | |
but can still attack at a distance */ | | |
#define FLAG_PASS_THRU 46 /* Objects with can_pass_thru can pass \ | | |
thru this object as if it wasn't there */ | | |
#define FLAG_CAN_PASS_THRU 47 /* Can pass thru... */ | | |
#define FLAG_PICK_UP 48 /* Can pick up */ | | |
#define FLAG_UNIQUE 49 /* Item is really unique (UNIQUE_ITEMS) */ | | |
#define FLAG_NO_DROP 50 /* Object can't be dropped */ | | |
#define FLAG_NO_PRETEXT 51 /* No text is added before name. */ | | |
#define FLAG_CAST_SPELL 52 /* (Monster) can learn and cast spells */ | | |
#define FLAG_USE_SCROLL 53 /* (Monster) can read scroll */ | | |
#define FLAG_USE_WAND 54 /* (Monster) can apply and use wands */ | | |
#define FLAG_USE_BOW 55 /* (Monster) can apply and fire bows */ | | |
#define FLAG_USE_ARMOUR 56 /* (Monster) can wear armour/shield/helmet */ | | |
#define FLAG_USE_WEAPON 57 /* (Monster) can wield weapons */ | | |
#define FLAG_USE_RING 58 /* (Monster) can use rings, boots, gauntlets, etc */ | | |
#define FLAG_READY_WAND 59 /* (Monster) has a wand readied... 8) */ | | |
#define FLAG_READY_BOW 60 /* not implemented yet */ | | |
#define FLAG_XRAYS 61 /* X-ray vision */ | | |
#define FLAG_NO_APPLY 62 /* Avoids step_on/fly_on to this object */ | | |
#define FLAG_IS_FLOOR 63 /* Can't see what's underneath this object */ | | |
#define FLAG_LIFESAVE 64 /* Saves a players' life once, then destr. */ | | |
/* Start of values in flags[2] */ | | |
#define FLAG_NO_STRENGTH 65 /* Strength-bonus not added to wc/dam */ | | |
#define FLAG_SLEEP 66 /* NPC is sleeping */ | | |
#define FLAG_STAND_STILL 67 /* NPC will not (ever) move */ | | |
#define FLAG_RANDOM_MOVE 68 /* NPC will move randomly */ | | |
#define FLAG_ONLY_ATTACK 69 /* NPC will evaporate if there is no enemy */ | | |
#define FLAG_CONFUSED 70 /* Will also be unable to cast spells */ | | |
#define FLAG_STEALTH 71 /* Will wake monsters with less range */ | | |
#define FLAG_WIZPASS 72 /* The wizard can go through walls */ | | |
#define FLAG_IS_LINKED 73 /* The object is linked with other objects */ | | |
#define FLAG_CURSED 74 /* The object is cursed */ | | |
#define FLAG_DAMNED 75 /* The object is _very_ cursed */ | | |
#define FLAG_SEE_ANYWHERE 76 /* The object will be visible behind walls */ | | |
#define FLAG_KNOWN_MAGICAL 77 /* The object is known to be magical */ | | |
#define FLAG_KNOWN_CURSED 78 /* The object is known to be cursed */ | | |
#define FLAG_CAN_USE_SKILL 79 /* The monster can use skills */ | | |
#define FLAG_BEEN_APPLIED 80 /* The object has been applied */ | | |
#define FLAG_READY_ROD 81 /* (Monster) has a rod readied... 8) */ | | |
#define FLAG_USE_ROD 82 /* (Monster) can apply and use rods */ | | |
#define FLAG_READY_HORN 83 /* (Monster) has a horn readied */ | | |
#define FLAG_USE_HORN 84 /* (Monster) can apply and use horns */ | | |
#define FLAG_MAKE_INVIS 85 /* (Item) gives invisibility when applied */ | | |
#define FLAG_INV_LOCKED 86 /* Item will not be dropped from inventory */ | | |
#define FLAG_IS_WOODED 87 /* Item is wooded terrain */ | | |
#define FLAG_IS_HILLY 88 /* Item is hilly/mountain terrain */ | | |
#define FLAG_READY_SKILL 89 /* (Monster or Player) has a skill readied */ | | |
#define FLAG_READY_WEAPON 90 /* (Monster or Player) has a weapon readied */ | | |
#define FLAG_NO_SKILL_IDENT 91 /* If set, item cannot be identified w/ a skill */ | | |
#define FLAG_BLIND 92 /* If set, object cannot see (visually) */ | | |
#define FLAG_SEE_IN_DARK 93 /* if set ob not effected by darkness */ | | |
#define FLAG_IS_CAULDRON 94 /* container can make alchemical stuff */ | | |
#define FLAG_DUST 95 /* item is a 'powder', effects throwing */ | | |
/* Start of values in flags[3] */ | | |
#define FLAG_NO_STEAL 96 /* Item can't be stolen */ | | |
#define FLAG_ONE_HIT 97 /* Monster can only hit once before going | | |
* away (replaces ghosthit) | | |
*/ | | |
#define FLAG_CLIENT_SENT 98 /* THIS IS A DEBUG FLAG ONLY. We use it to | | |
* detect cases were the server is trying | | |
* to send an upditem when we have not | | |
* actually sent the item. | | |
*/ | | |
#define NUM_FLAGS 98 /* Should always be equal to the last | | |
* defined flag */ | | |
| | |
#define ARMOUR_SPEED(xyz) (xyz)->last_sp | | |
#define ARMOUR_SPELLS(xyz) (xyz)->last_heal | | |
#define WEAPON_SPEED(xyz) (xyz)->last_sp | | |
| | |
/* Values can go up to 127 before the size of the flags array in the | | |
* object structure needs to be enlarged. | | |
*/ | | |
| | |
typedef struct obj { | | typedef struct obj { |
/* These variables are not changed by copy_object(): */ | | /* These variables are not changed by copy_object(): */ |
struct pl *contr; /* Pointer to the player which control this object */ | | struct pl *contr; /* Pointer to the player which control this object */ |