/*****************************************************************************
* DikuMUD (C) 1990, 1991 by: *
* Sebastian Hammer, Michael Seifert, Hans Henrik Staefeldt, Tom Madsen, *
* and Katja Nyboe. *
*---------------------------------------------------------------------------*
* MERC 2.1 (C) 1992, 1993 by: *
* Michael Chastain, Michael Quan, and Mitchell Tse. *
*---------------------------------------------------------------------------*
* SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by: Derek Snider. *
* Team: Thoric, Altrag, Blodkai, Narn, Haus, Scryn, Rennard, Swordbearer, *
* gorog, Grishnakh, Nivek, Tricops, and Fireblade. *
*---------------------------------------------------------------------------*
* SMAUG 1.7 FUSS by: Samson and others of the SMAUG community. *
* Their contributions are greatly appreciated. *
*---------------------------------------------------------------------------*
* LoP (C) 2006, 2007, 2008 by: the LoP team. *
*****************************************************************************/
int get_flag( char *flag, const char *flagarray[], int max );
int get_langflag( char *flag );
int get_langnum( char *flag );
int get_pulltype( char *type );
extern const char *part_messages[];
extern int part_vnums[];
extern const char *pos_names[];
extern const char *sex_names[];
extern const char *sect_flags[];
extern const char *style_names[];
extern const char *spell_damage[];
extern const char *spell_save_effect[];
extern const char *spell_saves[];
extern const char *spell_action[];
extern const char *spell_power[];
extern const char *spell_class[];
extern const char *spell_flag[];
extern const char *target_type[];
extern const char *channelflags[];
extern const char *stattypes[];
extern const char *save_flag[];
extern const char *perms_flag[];
extern const char *he_she[];
extern const char *him_her[];
extern const char *his_her[];
#define KEY( literal, field, value ) \
if ( !str_cmp( word, (literal) ) ) \
{ \
(field) = (value); \
fMatch = true; \
break; \
}
/* Key using strings */
#define SKEY( literal, field, fpin, flagarray, max ) \
if( !str_cmp( word, (literal) ) ) \
{ \
infoflags = fread_flagstring( (fpin) ); \
while( infoflags && infoflags[0] != '\0' ) \
{ \
infoflags = one_argument( infoflags, flag ); \
value = get_flag( flag, (flagarray), (max) ); \
if( value < 0 || value >= (max) ) \
bug( "%s: Unknown %s: %s", __FUNCTION__, (literal), flag ); \
else \
(field) = value; \
} \
fMatch = true; \
break; \
}
/* KEY with EXT and While */
#define WEXTKEY( literal, field, fpin, flagarray, max ) \
if( !str_cmp( word, (literal) ) ) \
{ \
infoflags = fread_flagstring( (fpin) ); \
while( infoflags && infoflags[0] != '\0' ) \
{ \
infoflags = one_argument( infoflags, flag ); \
value = get_flag( flag, (flagarray), (max) ); \
if( value < 0 || value >= (max) ) \
bug( "%s: Unknown %s: %s", __FUNCTION__, (literal), flag ); \
else \
xSET_BIT( (field), value ); \
} \
fMatch = true; \
break; \
}
/* Uses short since can only be one of these at a time */
typedef enum
{
PERM_ALL, PERM_IMM, PERM_BUILDER, PERM_LEADER, PERM_HEAD,
PERM_IMP, PERM_MAX
} perms;
/* Uses EXT_BV - Autosave flags */
typedef enum
{
SV_DEATH, SV_KILL, SV_PASSCHG, SV_DROP, SV_PUT,
SV_GIVE, SV_AUTO, SV_ZAPDROP, SV_AUCTION, SV_GET,
SV_RECEIVE, SV_IDLE, SV_FILL, SV_EMPTY, SV_MAX
} save_flags;
/* Uses EXT_BV */
typedef enum
{
LANG_COMMON, LANG_ELVISH, LANG_DWARVEN, LANG_PIXIE, LANG_OGRE,
LANG_ORCISH, LANG_TROLLISH, LANG_HALFLING, LANG_GITH, LANG_GNOME,
LANG_UNKNOWN
} languages;
#define VALID_LANGS ( LANG_COMMON | LANG_ELVISH | LANG_DWARVEN | LANG_PIXIE | LANG_OGRE | LANG_ORCISH | \
LANG_TROLLISH | LANG_HALFLING | LANG_GITH | LANG_GNOME )
typedef enum
{
STAT_STR, STAT_INT, STAT_WIS, STAT_DEX, STAT_CON,
STAT_CHA, STAT_LCK, STAT_MAX
} stat_types;
typedef enum
{
SS_NONE, SS_POISON_DEATH, SS_ROD_WANDS, SS_PARA_PETRI,
SS_BREATH, SS_SPELL_STAFF, SS_MAX
} save_types;
/* Uses EXT_BV */
typedef enum
{
CHANNEL_GLOBAL, CHANNEL_YELL, CHANNEL_LOG, CHANNEL_CLAN,
CHANNEL_COUNCIL, CHANNEL_TELLS, CHANNEL_RACETALK, CHANNEL_WHISPER,
CHANNEL_NATION, CHANNEL_CLASS, CHANNEL_MAX
} channel_types;
/* Uses EXT_BV */
typedef enum
{
SF_WATER, SF_AREA, SF_DISTANT, SF_NOSELF,
SF_ACCUMULATIVE, SF_RECASTABLE, SF_CANSCRIBE, SF_CANBREW,
SF_GROUPSPELL, SF_OBJECT, SF_CHARACTER, SF_SECRETSKILL,
SF_PKSENSITIVE, SF_STOPONFAIL, SF_NOFIGHT, SF_NODISPEL,
SF_CANMIX, SF_CANCONCOCT, SF_CANCARVE, SF_CANIMBUE,
SF_NOMOUNT, SF_MAX
} spell_flags;
#define SPELL_FLAG( skill, flag ) ( xIS_SET( (skill)->flags, (flag) ) )
/* Each of the Spell parts here uses short since can only be one of each at a time */
typedef enum
{
SD_NONE, SD_FIRE, SD_WIND, SD_EARTH,
SD_WATER, SD_ICE, SD_COLD, SD_ELECTRICITY,
SD_ENERGY, SD_ACID, SD_POISON, SD_DRAIN,
SD_HOLY, SD_SHADOW, SD_MAX
} spell_dam_types;
#define SPELL_DAMAGE( skill ) ( (skill)->damage )
#define SET_SDAM( skill, val ) ( (skill)->damage = (val) )
#define IS_MAGIC( dt ) ( is_valid_sn( (dt) ) )
#define IS_FIRE( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_FIRE )
#define IS_WIND( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_WIND )
#define IS_EARTH( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_EARTH )
#define IS_WATER( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_WATER )
#define IS_ICE( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_ICE )
#define IS_COLD( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_COLD )
#define IS_ELECTRICITY( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_ELECTRICITY )
#define IS_ENERGY( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_ENERGY )
#define IS_ACID( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_ACID )
#define IS_POISON( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_POISON )
#define IS_DRAIN( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_DRAIN )
#define IS_HOLY( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_HOLY )
#define IS_SHADOW( dt ) ( is_valid_sn( (dt) ) && SPELL_DAMAGE( skill_table[(dt)]) == SD_SHADOW )
typedef enum
{
SA_NONE, SA_CREATE, SA_DESTROY, SA_RESIST,
SA_SUSCEPT, SA_DIVINATE, SA_OBSCURE, SA_CHANGE,
SA_MAX
} spell_act_types;
#define SPELL_ACTION( skill ) ( (skill)->action )
#define SET_SACT( skill, val ) ( (skill)->action = (val) )
typedef enum
{
SP_NONE, SP_MINOR, SP_GREATER, SP_MAJOR,
SP_MAX
} spell_power_types;
#define SPELL_POWER( skill ) ( (skill)->power )
#define SET_SPOW( skill, val ) ( (skill)->power = (val) )
typedef enum
{
SC_NONE, SC_LUNAR, SC_SOLAR, SC_TRAVEL,
SC_SUMMON, SC_LIFE, SC_DEATH, SC_ILLUSION,
SC_MAX
} spell_class_types;
#define SPELL_CLASS( skill ) ( (skill)->Class )
#define SET_SCLA( skill, val ) ( (skill)->Class = (val) )
typedef enum
{
SE_NONE, SE_NEGATE, SE_EIGHTHDAM, SE_QUARTERDAM,
SE_HALFDAM, SE_3QTRDAM, SE_REFLECT, SE_ABSORB,
SE_MAX
} spell_save_effects;
#define SPELL_SAVE( skill ) ( (skill)->save )
#define SET_SSAV( skill, val ) ( (skill)->save = (val) )
typedef enum
{
TAR_IGNORE, TAR_CHAR_OFFENSIVE, TAR_CHAR_DEFENSIVE, TAR_CHAR_SELF,
TAR_OBJ_INV, TAR_MAX
} target_types;
typedef enum
{
TRAP_TYPE_POISON_GAS = 1, TRAP_TYPE_POISON_DART, TRAP_TYPE_POISON_NEEDLE, TRAP_TYPE_POISON_DAGGER,
TRAP_TYPE_POISON_ARROW, TRAP_TYPE_BLINDNESS_GAS, TRAP_TYPE_SLEEPING_GAS, TRAP_TYPE_FLAME,
TRAP_TYPE_EXPLOSION, TRAP_TYPE_ACID_SPRAY, TRAP_TYPE_ELECTRIC_SHOCK, TRAP_TYPE_BLADE,
TRAP_TYPE_MAX
} trap_types;
typedef enum
{
TRAP_ROOM, TRAP_OBJ, TRAP_ENTER_ROOM, TRAP_LEAVE_ROOM,
TRAP_OPEN, TRAP_CLOSE, TRAP_GET, TRAP_PUT,
TRAP_PICK, TRAP_UNLOCK, TRAP_N, TRAP_S,
TRAP_E, TRAP_W, TRAP_U, TRAP_D,
TRAP_EXAMINE, TRAP_NE, TRAP_NW, TRAP_SE,
TRAP_SW, TRAP_MAX
} trapflags;
/* Can only be one style at a time so uses short */
typedef enum
{
STYLE_BERSERK, STYLE_AGGRESSIVE, STYLE_FIGHTING, STYLE_DEFENSIVE,
STYLE_EVASIVE, STYLE_MAX
} styles;
/* Uses EXT_BV */
typedef enum
{
CMD_FLAG_POLYMORPHED, CMD_FLAG_NOSHOW, CMD_FLAG_NPC, CMD_FLAG_PC,
CMD_FLAG_ALLOW_TILDE, CMD_FULL_NAME, CMD_MAX
} cmdflags;
/* Uses EXT_BV */
typedef enum
{
AFLAG_NOPKILL, AFLAG_FREEKILL, AFLAG_NOTELEPORT, AFLAG_PROTOTYPE,
AFLAG_NOQUEST, AFLAG_MAX
} aflags;
/* One apply at a time so uses short */
/* Since a Vampire uses mana now instead of blood just using APPLY_MANA */
typedef enum
{
APPLY_NONE, APPLY_EXT_AFFECT, APPLY_RESISTANT, APPLY_IMMUNE,
APPLY_SUSCEPTIBLE, APPLY_WEAPONSPELL, APPLY_WEARSPELL, APPLY_REMOVESPELL,
APPLY_STRIPSN, APPLY_HIT, APPLY_MANA, APPLY_MOVE,
APPLY_HITROLL, APPLY_DAMROLL, APPLY_ARMOR, APPLY_STAT,
APPLY_ABSORB, APPLY_WAITSTATE, APPLY_MAX
} apply_types;
/* Used to reverse the apply to the caster */
#define REVERSE_APPLY 1000
/* Uses EXT_BV */
typedef enum
{
ITEM_NO_TAKE, ITEM_WEAR_HEAD, ITEM_WEAR_EARS, ITEM_WEAR_EAR,
ITEM_WEAR_EYES, ITEM_WEAR_EYE, ITEM_WEAR_FACE, ITEM_WEAR_NECK,
ITEM_WEAR_SHOULDERS, ITEM_WEAR_SHOULDER, ITEM_WEAR_ABOUT, ITEM_WEAR_BODY,
ITEM_WEAR_BACK, ITEM_WEAR_ARMS, ITEM_WEAR_ARM, ITEM_WEAR_WRISTS,
ITEM_WEAR_WRIST, ITEM_WEAR_HANDS, ITEM_WEAR_HAND, ITEM_WEAR_FINGERS,
ITEM_WEAR_FINGER, ITEM_WEAR_HOLD_B, ITEM_WEAR_HOLD, ITEM_WEAR_WAIST,
ITEM_WEAR_LEGS, ITEM_WEAR_LEG, ITEM_WEAR_ANKLES, ITEM_WEAR_ANKLE,
ITEM_WEAR_FEET, ITEM_WEAR_FOOT, ITEM_WEAR_MAX
} item_wear_flags;
typedef enum
{
WEAR_NONE = -1, WEAR_HEAD = 0, WEAR_EARS, WEAR_EAR_L,
WEAR_EAR_R, WEAR_EYES, WEAR_EYE_L, WEAR_EYE_R,
WEAR_FACE, WEAR_NECK, WEAR_SHOULDERS, WEAR_SHOULDER_L,
WEAR_SHOULDER_R, WEAR_ABOUT, WEAR_BODY, WEAR_BACK,
WEAR_ARMS, WEAR_ARM_L, WEAR_ARM_R, WEAR_WRISTS,
WEAR_WRIST_L, WEAR_WRIST_R, WEAR_HANDS, WEAR_HAND_L,
WEAR_HAND_R, WEAR_FINGERS, WEAR_FINGER_L, WEAR_FINGER_R,
WEAR_HOLD_B, WEAR_HOLD_L, WEAR_HOLD_R, WEAR_WAIST,
WEAR_LEGS, WEAR_LEG_L, WEAR_LEG_R, WEAR_ANKLES,
WEAR_ANKLE_L, WEAR_ANKLE_R, WEAR_FEET, WEAR_FOOT_L,
WEAR_FOOT_R, WEAR_MAX
} wear_locations;
/* Uses EXT_BV */
typedef enum
{
ITEM_GLOW, ITEM_LOYAL, ITEM_INVIS, ITEM_MAGIC,
ITEM_NODROP, ITEM_BLESS, ITEM_ANTI_GOOD, ITEM_ANTI_EVIL,
ITEM_ANTI_NEUTRAL, ITEM_NOREMOVE, ITEM_INVENTORY, ITEM_ORGANIC,
ITEM_METAL, ITEM_DONATION, ITEM_CLANOBJECT, ITEM_CLANCORPSE,
ITEM_HIDDEN, ITEM_POISONED, ITEM_COVERING, ITEM_DEATHROT,
ITEM_BURIED, ITEM_PROTOTYPE, ITEM_NOLOCATE, ITEM_GROUNDROT,
ITEM_PKDISARMED, ITEM_NOSCRAP, ITEM_ENCHANTED, ITEM_QUEST,
ITEM_LODGED, ITEM_PIERCED, ITEM_RANDOM, ITEM_NOCONTAINER,
ITEM_MAX
} item_extra_flags;
/* Since for now only one type at a time uses short */
typedef enum
{
ITEM_NONE, ITEM_LIGHT, ITEM_SCROLL, ITEM_WAND,
ITEM_STAFF, ITEM_WEAPON, ITEM_TREASURE, ITEM_ARMOR,
ITEM_POTION, ITEM_TRASH, ITEM_CONTAINER, ITEM_DRINK_CON,
ITEM_KEY, ITEM_FOOD, ITEM_MONEY, ITEM_BOAT,
ITEM_CORPSE_NPC, ITEM_CORPSE_PC, ITEM_FOUNTAIN, ITEM_PILL,
ITEM_BLOOD, ITEM_BLOODSTAIN, ITEM_SCRAPS, ITEM_PIPE,
ITEM_HERB_CON, ITEM_HERB, ITEM_FIRE, ITEM_SWITCH,
ITEM_LEVER, ITEM_PULLCHAIN, ITEM_BUTTON, ITEM_TRAP,
ITEM_MAP, ITEM_PORTAL, ITEM_PAPER, ITEM_LOCKPICK,
ITEM_MISSILE_WEAPON, ITEM_PROJECTILE, ITEM_QUIVER, ITEM_SHOVEL,
ITEM_SALVE, ITEM_COOK, ITEM_KEYRING, ITEM_GEM,
ITEM_MORTAR, ITEM_POWDER, ITEM_AXE, ITEM_WOOD,
ITEM_FISH, ITEM_FISHINGPOLE, ITEM_PIECE, ITEM_FURNITURE,
ITEM_CLEANER, ITEM_TYPE_MAX
} item_types;
/* Uses an int */
typedef enum
{
SECT_INSIDE, SECT_CITY, SECT_FIELD, SECT_FOREST,
SECT_HILLS, SECT_MOUNTAIN, SECT_WATER_SWIM, SECT_WATER_NOSWIM,
SECT_UNDERWATER, SECT_AIR, SECT_DESERT, SECT_DUNNO,
SECT_OCEANFLOOR, SECT_UNDERGROUND, SECT_LAVA, SECT_SWAMP,
SECT_MAX
} sector_types;
/* Uses EXT_BV */
typedef enum
{
EX_ISDOOR, EX_CLOSED, EX_LOCKED, EX_SECRET,
EX_SWIM, EX_PICKPROOF, EX_FLY, EX_CLIMB,
EX_DIG, EX_EATKEY, EX_NOPASSDOOR, EX_HIDDEN,
EX_PASSAGE, EX_PORTAL, EX_xCLIMB, EX_xENTER,
EX_xLEAVE, EX_xAUTO, EX_NOFLEE, EX_xSEARCHABLE,
EX_BASHED, EX_BASHPROOF, EX_NOMOB, EX_WINDOW,
EX_xLOOK, EX_ISBOLT, EX_BOLTED, EX_MCREATED,
EX_MAX
} exitflags;
/* Uses EXT_BV */
typedef enum
{
RIS_FIRE, RIS_WIND, RIS_EARTH, RIS_WATER,
RIS_ICE, RIS_COLD, RIS_ELECTRICITY, RIS_ENERGY,
RIS_BLUNT, RIS_PIERCE, RIS_SLASH, RIS_ACID,
RIS_POISON, RIS_DRAIN, RIS_SLEEP, RIS_CHARM,
RIS_NONMAGIC, RIS_MAGIC, RIS_PARALYSIS, RIS_HOLY,
RIS_SHADOW, RIS_MAX
} ris_types;
/* Uses EXT_BV */
typedef enum
{
AFF_NONE, AFF_BLIND, AFF_INVISIBLE, AFF_DETECT_EVIL,
AFF_DETECT_INVIS, AFF_DETECT_MAGIC, AFF_DETECT_HIDDEN, AFF_SANCTUARY,
AFF_FAERIE_FIRE, AFF_INFRARED, AFF_CURSE, AFF_POISON,
AFF_PROTECT, AFF_PARALYSIS, AFF_SNEAK, AFF_HIDE,
AFF_SLEEP, AFF_CHARM, AFF_FLYING, AFF_PASS_DOOR,
AFF_FLOATING, AFF_TRUESIGHT, AFF_DETECTTRAPS, AFF_SCRYING,
AFF_FIRESHIELD, AFF_SHOCKSHIELD, AFF_ICESHIELD, AFF_BERSERK,
AFF_AQUA_BREATH, AFF_ACIDMIST, AFF_VENOMSHIELD, AFF_DETECT_SNEAK,
AFF_MAX
} affected_by_types;
/* Uses EXT_BV */
typedef enum
{
ATCK_BITE, ATCK_CLAWS, ATCK_TAIL, ATCK_PUNCH,
ATCK_KICK, ATCK_TRIP, ATCK_BASH, ATCK_STUN,
ATCK_GOUGE, ATCK_BACKSTAB, ATCK_FEED, ATCK_DRAIN,
ATCK_FIREBREATH, ATCK_FROSTBREATH, ATCK_ACIDBREATH, ATCK_LIGHTNBREATH,
ATCK_GASBREATH, ATCK_POISON, ATCK_BLINDNESS, ATCK_CAUSESERIOUS,
ATCK_EARTHQUAKE, ATCK_CAUSECRITICAL, ATCK_CURSE, ATCK_FIREBALL,
ATCK_MAX
} attack_types;
/* Uses EXT_BV */
typedef enum
{
DFND_PARRY, DFND_DODGE, DFND_HEAL, DFND_CURELIGHT,
DFND_CURESERIOUS, DFND_CURECRITICAL, DFND_DISPELMAGIC, DFND_DISPELEVIL,
DFND_SANCTUARY, DFND_FIRESHIELD, DFND_SHOCKSHIELD, DFND_SHIELD,
DFND_BLESS, DFND_STONESKIN, DFND_TELEPORT, DFND_DISARM,
DFND_ICESHIELD, DFND_GRIP, DFND_TRUESIGHT, DFND_ACIDMIST,
DFND_VENOMSHIELD, DFND_MAX
} defense_types;
/* Uses EXT_BV */
typedef enum
{
PLR_IS_NPC, PLR_SHOVEDRAG, PLR_AUTOEXIT, PLR_AUTOLOOT,
PLR_AUTOSAC, PLR_BLANK, PLR_BRIEF, PLR_COMBINE,
PLR_PROMPT, PLR_TELNET_GA, PLR_HOLYLIGHT, PLR_WIZINVIS,
PLR_SILENCE, PLR_NO_EMOTE, PLR_NO_TELL, PLR_DENY,
PLR_FREEZE, PLR_ANSI, PLR_NICE, PLR_FLEE,
PLR_AUTOGOLD, PLR_AFK, PLR_K_LIVE, PLR_QUESTOR,
PLR_TELLOFF, PLR_WHISPEROFF, PLR_COMPASS, PLR_SOLO,
PLR_SUICIDE, PLR_NOASSIST, PLR_GROUPAFFECTS, PLR_NOHINTS,
PLR_SMARTSAC, PLR_NOINDUCT, PLR_AUTOSPLIT, PLR_NOFINFO,
PLR_SPARING, PLR_MAX
} player_flags;
/* Uses EXT_BV */
typedef enum
{
ACT_IS_NPC, ACT_SENTINEL, ACT_SCAVENGER, ACT_AGGRESSIVE,
ACT_STAY_AREA, ACT_WIMPY, ACT_PET, ACT_PRACTICE,
ACT_IMMORTAL, ACT_META_AGGR, ACT_RUNNING, ACT_MOUNTABLE,
ACT_MOUNTED, ACT_SCHOLAR, ACT_SECRETIVE, ACT_HARDHAT,
ACT_MOBINVIS, ACT_NOASSIST, ACT_PACIFIST, ACT_NOATTACK,
ACT_ANNOYING, ACT_STATSHIELD, ACT_PROTOTYPE, ACT_BANKER,
ACT_QUESTGIVER, ACT_UNDERTAKER, ACT_MAX
} actflags;
/* Uses EXT_BV */
typedef enum
{
PCFLAG_DEADLY, PCFLAG_UNAUTHED, PCFLAG_NORECALL, PCFLAG_NOINTRO,
PCFLAG_GAG, PCFLAG_RETIRED, PCFLAG_GUEST, PCFLAG_NOSUMMON,
PCFLAG_PAGERON, PCFLAG_NOTITLE, PCFLAG_GROUPWHO, PCFLAG_DND,
PCFLAG_IDLE, PCFLAG_NOPDELETE, PCFLAG_MAX
} pcflags;
/* Uses EXT_BV */
typedef enum
{
PART_HEAD, PART_ARMS, PART_LEGS, PART_HEART,
PART_BRAINS, PART_GUTS, PART_HANDS, PART_FEET,
PART_FINGERS, PART_EAR, PART_EYE, PART_LONG_TONGUE,
PART_EYESTALKS, PART_TENTACLES, PART_FINS, PART_WINGS,
PART_TAIL, PART_SCALES, PART_CLAWS, PART_FANGS,
PART_HORNS, PART_TUSKS, PART_TAILATTACK, PART_SHARPSCALES,
PART_BEAK, PART_HAUNCH, PART_HOOVES, PART_PAWS,
PART_FORELEGS, PART_FEATHERS, PART_MAX
} parts;
/* Uses EXT_BV */
typedef enum
{
ROOM_DARK, ROOM_DEATH, ROOM_NO_MOB, ROOM_INDOORS,
ROOM_NO_MAGIC, ROOM_TUNNEL, ROOM_PRIVATE, ROOM_SAFE,
ROOM_SOLITARY, ROOM_PET_SHOP, ROOM_NO_RECALL, ROOM_DONATION,
ROOM_NODROPALL, ROOM_SILENCE, ROOM_LOGSPEECH, ROOM_NODROP,
ROOM_STORAGEROOM, ROOM_NO_SUMMON, ROOM_NO_ASTRAL, ROOM_TELEPORT,
ROOM_TELESHOWDESC, ROOM_NOFLOOR, ROOM_NOSUPPLICATE, ROOM_ARENA,
ROOM_NOMISSILE, ROOM_DND, ROOM_LOCKER, ROOM_BFS_MARK,
ROOM_EXPLORER, ROOM_MAX
} roomflags;
/* Since can only be in one position at a time uses a short */
typedef enum
{
POS_DEAD, POS_MORTAL, POS_INCAP, POS_STUNNED,
POS_SLEEPING, POS_BERSERK, POS_RESTING, POS_AGGRESSIVE,
POS_SITTING, POS_FIGHTING, POS_DEFENSIVE, POS_EVASIVE,
POS_STANDING, POS_MOUNTED, POS_SHOVE, POS_DRAG,
POS_MAX
} positions;
/* Since can only be one sex at a time uses a short */
typedef enum
{
SEX_NEUTRAL, SEX_MALE, SEX_FEMALE, SEX_MAX
} sex_types;