/** * @file monstdat.h * * Interface of all monster data. */ #ifndef __MONSTDAT_H__ #define __MONSTDAT_H__ DEVILUTION_BEGIN_NAMESPACE #ifdef __cplusplus extern "C" { #endif typedef enum _mai_id { AI_ZOMBIE, AI_FAT, AI_SKELSD, AI_SKELBOW, AI_SCAV, AI_RHINO, AI_GOATMC, AI_GOATBOW, AI_FALLEN, AI_MAGMA, AI_SKELKING, AI_BAT, AI_GARG, AI_CLEAVER, AI_SUCC, AI_SNEAK, AI_STORM, AI_FIREMAN, AI_GARBUD, AI_ACID, AI_ACIDUNIQ, AI_GOLUM, AI_ZHAR, AI_SNOTSPIL, AI_SNAKE, AI_COUNSLR, AI_MEGA, AI_DIABLO, AI_LAZURUS, AI_LAZHELP, AI_LACHDAN, AI_WARLORD, AI_FIREBAT, AI_TORCHANT, AI_HORKDMN, AI_LICH, AI_ARCHLICH, AI_PSYCHORB, AI_NECROMORB, AI_BONEDEMON, AI_INVALID = -1, } _mai_id; typedef enum _mc_id { MC_UNDEAD, MC_DEMON, MC_ANIMAL, } _mc_id; typedef enum monster_resistance { // clang-format off RESIST_MAGIC = 0x01, RESIST_FIRE = 0x02, RESIST_LIGHTNING = 0x04, IMMUNE_MAGIC = 0x08, IMMUNE_FIRE = 0x10, IMMUNE_LIGHTNING = 0x20, IMMUNE_NULL_40 = 0x40, IMMUNE_ACID = 0x80, // clang-format on } monster_resistance; typedef struct MonsterData { Sint32 width; Sint32 mImage; const char *GraphicType; bool has_special; const char *sndfile; bool snd_special; bool has_trans; const char *TransFile; Sint32 Frames[6]; Sint32 Rate[6]; const char *mName; Sint8 mMinDLvl; Sint8 mMaxDLvl; Sint8 mLevel; Sint32 mMinHP; Sint32 mMaxHP; _mai_id mAi; /** Usign monster_flag as bitflags */ Sint32 mFlags; Uint8 mInt; Uint16 mHit; Uint8 mAFNum; Uint8 mMinDamage; Uint8 mMaxDamage; Uint16 mHit2; Uint8 mAFNum2; Uint8 mMinDamage2; Uint8 mMaxDamage2; Uint8 mArmorClass; _mc_id mMonstClass; /** Using monster_resistance as bitflags */ Uint16 mMagicRes; /** Using monster_resistance as bitflags */ Uint16 mMagicRes2; Uint16 mTreasure; // TODO Create enum Sint8 mSelFlag; // TODO Create enum Uint16 mExp; } MonsterData; typedef enum _monster_id { MT_NZOMBIE, MT_BZOMBIE, MT_GZOMBIE, MT_YZOMBIE, MT_RFALLSP, MT_DFALLSP, MT_YFALLSP, MT_BFALLSP, MT_WSKELAX, MT_TSKELAX, MT_RSKELAX, MT_XSKELAX, MT_RFALLSD, MT_DFALLSD, MT_YFALLSD, MT_BFALLSD, MT_NSCAV, MT_BSCAV, MT_WSCAV, MT_YSCAV, MT_WSKELBW, MT_TSKELBW, MT_RSKELBW, MT_XSKELBW, MT_WSKELSD, MT_TSKELSD, MT_RSKELSD, MT_XSKELSD, MT_INVILORD, MT_SNEAK, MT_STALKER, MT_UNSEEN, MT_ILLWEAV, MT_LRDSAYTR, MT_NGOATMC, MT_BGOATMC, MT_RGOATMC, MT_GGOATMC, MT_FIEND, MT_BLINK, MT_GLOOM, MT_FAMILIAR, MT_NGOATBW, MT_BGOATBW, MT_RGOATBW, MT_GGOATBW, MT_NACID, MT_RACID, MT_BACID, MT_XACID, MT_SKING, MT_CLEAVER, MT_FAT, MT_MUDMAN, MT_TOAD, MT_FLAYED, MT_WYRM, MT_CAVSLUG, MT_DVLWYRM, MT_DEVOUR, MT_NMAGMA, MT_YMAGMA, MT_BMAGMA, MT_WMAGMA, MT_HORNED, MT_MUDRUN, MT_FROSTC, MT_OBLORD, MT_BONEDMN, MT_REDDTH, MT_LTCHDMN, MT_UDEDBLRG, MT_INCIN, MT_FLAMLRD, MT_DOOMFIRE, MT_HELLBURN, MT_STORM, MT_RSTORM, MT_STORML, MT_MAEL, MT_BIGFALL, MT_WINGED, MT_GARGOYLE, MT_BLOODCLW, MT_DEATHW, MT_MEGA, MT_GUARD, MT_VTEXLRD, MT_BALROG, MT_NSNAKE, MT_RSNAKE, MT_BSNAKE, MT_GSNAKE, MT_NBLACK, MT_RTBLACK, MT_BTBLACK, MT_RBLACK, MT_UNRAV, MT_HOLOWONE, MT_PAINMSTR, MT_REALWEAV, MT_SUCCUBUS, MT_SNOWWICH, MT_HLSPWN, MT_SOLBRNR, MT_COUNSLR, MT_MAGISTR, MT_CABALIST, MT_ADVOCATE, MT_GOLEM, MT_DIABLO, MT_DARKMAGE, MT_HELLBOAR, MT_STINGER, MT_PSYCHORB, MT_ARACHNON, MT_FELLTWIN, MT_HORKSPWN, MT_VENMTAIL, MT_NECRMORB, MT_SPIDLORD, MT_LASHWORM, MT_TORCHANT, MT_HORKDMN, MT_DEFILER, MT_GRAVEDIG, MT_TOMBRAT, MT_FIREBAT, MT_SKLWING, MT_LICH, MT_CRYPTDMN, MT_HELLBAT, MT_BONEDEMN, MT_ARCHLICH, MT_BICLOPS, MT_FLESTHNG, MT_REAPER, MT_NAKRUL, NUM_MTYPES, MT_INVALID = -1, } _monster_id; typedef enum _monster_availability { MAT_NEVER, MAT_ALWAYS, MAT_RETAIL, } _monster_availability; typedef struct UniqMonstStruct { _monster_id mtype; const char *mName; const char *mTrnName; Uint8 mlevel; Uint16 mmaxhp; _mai_id mAi; Uint8 mint; Uint8 mMinDamage; Uint8 mMaxDamage; /** Using monster_resistance as bitflags */ Uint16 mMagicRes; Uint16 mUnqAttr; // TODO create enum Uint8 mUnqVar1; Uint8 mUnqVar2; Sint32 mtalkmsg; } UniqMonstStruct; extern const MonsterData monsterdata[]; extern const _monster_id MonstConvTbl[]; extern const char MonstAvailTbl[]; extern const UniqMonstStruct UniqMonst[]; #ifdef __cplusplus } #endif DEVILUTION_END_NAMESPACE #endif /* __MONSTDAT_H__ */