/***************************************************************************** * 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, char *const flagarray[], int max ); int get_langflag( char *flag ); int get_langnum( char *flag ); int get_pulltype( char *type ); extern char *part_messages[]; extern int part_vnums[]; extern char *const pos_names[]; extern char *const sex_names[]; extern char *const sect_flags[]; extern char *const style_names[]; extern char *const spell_damage[]; extern char *const spell_save_effect[]; extern char *const spell_saves[]; extern char *const spell_action[]; extern char *const spell_power[]; extern char *const spell_class[]; extern char *const spell_flag[]; extern char *const target_type[]; extern char *const channelflags[]; extern char *const stattypes[]; extern char *const save_flag[]; extern char *const perms_flag[]; extern char *const he_she[]; extern char *const him_her[]; extern char *const 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 }; /* 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 }; /* Uses EXT_BV */ typedef enum { LANG_COMMON, LANG_UNKNOWN } languages; #define VALID_LANGS ( LANG_COMMON ) 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_MAX }; #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 }; /* 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 */ 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_BLOOD, APPLY_MOVE, APPLY_HITROLL, APPLY_DAMROLL, APPLY_ARMOR, 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_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_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 }; /* 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_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_CLANSTOREROOM, ROOM_NO_SUMMON, ROOM_NO_ASTRAL, ROOM_TELEPORT, ROOM_TELESHOWDESC, ROOM_NOFLOOR, ROOM_NOSUPPLICATE, ROOM_ARENA, ROOM_NOMISSILE, ROOM_DND, ROOM_LOCKER, 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;