diff --git a/Source/effects.cpp b/Source/effects.cpp index c2c1b650e..55b54b4a0 100644 --- a/Source/effects.cpp +++ b/Source/effects.cpp @@ -9,7 +9,7 @@ namespace devilution { int sfxdelay; -int sfxdnum; +_sfx_id sfxdnum = SFX_NONE; /** Specifies the sound file and the playback state of the current sound effect. */ static TSFX *sgpStreamSFX = NULL; @@ -1246,42 +1246,39 @@ void PlayEffect(int i, int mode) snd_play_snd(snd, lVolume, lPan); } -static int RndSFX(int psfx) +static _sfx_id RndSFX(_sfx_id psfx) { int nRand; - if (psfx == PS_WARR69) + switch (psfx) { + case PS_WARR69: + case PS_MAGE69: + case PS_ROGUE69: + case PS_MONK69: + case PS_SWING: + case LS_ACID: + case IS_FMAG: + case IS_MAGIC: + case IS_BHIT: nRand = 2; - else if (psfx == PS_WARR14) + break; + case PS_WARR14: + case PS_WARR15: + case PS_WARR16: + case PS_WARR2: + case PS_ROGUE14: + case PS_MAGE14: + case PS_MONK14: nRand = 3; - else if (psfx == PS_WARR15) - nRand = 3; - else if (psfx == PS_WARR16) - nRand = 3; - else if (psfx == PS_MAGE69) - nRand = 2; - else if (psfx == PS_ROGUE69) - nRand = 2; - else if (psfx == PS_MONK69) - nRand = 2; - else if (psfx == PS_SWING) - nRand = 2; - else if (psfx == LS_ACID) - nRand = 2; - else if (psfx == IS_FMAG) - nRand = 2; - else if (psfx == IS_MAGIC) - nRand = 2; - else if (psfx == IS_BHIT) - nRand = 2; - else if (psfx == PS_WARR2) - nRand = 3; - else + break; + default: return psfx; - return psfx + random_(165, nRand); + } + + return static_cast<_sfx_id>(psfx + random_(165, nRand)); } -void PlaySFX(int psfx, bool randomizeByCategory) +void PlaySFX(_sfx_id psfx, bool randomizeByCategory) { if (randomizeByCategory) { psfx = RndSFX(psfx); @@ -1290,7 +1287,7 @@ void PlaySFX(int psfx, bool randomizeByCategory) PlaySFX_priv(&sgSFX[psfx], FALSE, 0, 0); } -void PlaySfxLoc(int psfx, int x, int y) +void PlaySfxLoc(_sfx_id psfx, int x, int y) { TSnd *pSnd; diff --git a/Source/effects.h b/Source/effects.h index 3a6ba2a7c..fbf3fd4df 100644 --- a/Source/effects.h +++ b/Source/effects.h @@ -5,22 +5,1065 @@ */ #pragma once +#include + #include "sound.h" namespace devilution { -#ifdef __cplusplus -extern "C" { -#endif +enum _sfx_id : int16_t { + PS_WALK1, + PS_WALK2, + PS_WALK3, + PS_WALK4, + PS_BFIRE, + PS_FMAG, + PS_TMAG, + PS_LGHIT, + PS_LGHIT1, + PS_SWING, + PS_SWING2, + PS_DEAD, + IS_STING1, + IS_FBALLBOW, + IS_QUESTDN, + IS_ARMRFKD, + IS_BARLFIRE, + IS_BARREL, + IS_POPPOP8, + IS_POPPOP5, + IS_POPPOP3, + IS_POPPOP2, + IS_BHIT, + IS_BHIT1, + IS_CHEST, + IS_DOORCLOS, + IS_DOOROPEN, + IS_FANVL, + IS_FAXE, + IS_FBLST, + IS_FBODY, + IS_FBOOK, + IS_FBOW, + IS_FCAP, + IS_FHARM, + IS_FLARM, + IS_FMAG, + IS_FMAG1, + IS_FMUSH, + IS_FPOT, + IS_FRING, + IS_FROCK, + IS_FSCRL, + IS_FSHLD, + IS_FSIGN, + IS_FSTAF, + IS_FSWOR, + IS_GOLD, + IS_HLMTFKD, + IS_IANVL, + IS_IAXE, + IS_IBLST, + IS_IBODY, + IS_IBOOK, + IS_IBOW, + IS_ICAP, + IS_IGRAB, + IS_IHARM, + IS_ILARM, + IS_IMUSH, + IS_IPOT, + IS_IRING, + IS_IROCK, + IS_ISCROL, + IS_ISHIEL, + IS_ISIGN, + IS_ISTAF, + IS_ISWORD, + IS_LEVER, + IS_MAGIC, + IS_MAGIC1, + IS_RBOOK, + IS_SARC, + IS_SHLDFKD, + IS_SWRDFKD, + IS_TITLEMOV, + IS_TITLSLCT, + SFX_SILENCE, + IS_TRAP, + IS_CAST1, + IS_CAST10, + IS_CAST12, + IS_CAST2, + IS_CAST3, + IS_CAST4, + IS_CAST5, + IS_CAST6, + IS_CAST7, + IS_CAST8, + IS_CAST9, + LS_HEALING, + IS_REPAIR, + LS_ACID, + LS_ACIDS, + LS_APOC, + LS_ARROWALL, + LS_BLODBOIL, + LS_BLODSTAR, + LS_BLSIMPT, + LS_BONESP, + LS_BSIMPCT, + LS_CALDRON, + LS_CBOLT, + LS_CHLTNING, + LS_DSERP, + LS_ELECIMP1, + LS_ELEMENTL, + LS_ETHEREAL, + LS_FBALL, + LS_FBOLT1, + LS_FBOLT2, + LS_FIRIMP1, + LS_FIRIMP2, + LS_FLAMWAVE, + LS_FLASH, + LS_FOUNTAIN, + LS_GOLUM, + LS_GOLUMDED, + LS_GSHRINE, + LS_GUARD, + LS_GUARDLAN, + LS_HOLYBOLT, + LS_HYPER, + LS_INFRAVIS, + LS_INVISIBL, + LS_INVPOT, + LS_LNING1, + LS_LTNING, + LS_MSHIELD, + LS_NESTXPLD, + LS_NOVA, + LS_PORTAL, + LS_PUDDLE, + LS_RESUR, + LS_SCURSE, + LS_SCURIMP, + LS_SENTINEL, + LS_SHATTER, + LS_SOULFIRE, + LS_SPOUTLOP, + LS_SPOUTSTR, + LS_STORM, + LS_TRAPDIS, + LS_TELEPORT, + LS_VTHEFT, + LS_WALLLOOP, + LS_WALLSTRT, + LS_LMAG, + TSFX_BMAID1, + TSFX_BMAID2, + TSFX_BMAID3, + TSFX_BMAID4, + TSFX_BMAID5, + TSFX_BMAID6, + TSFX_BMAID7, + TSFX_BMAID8, + TSFX_BMAID9, + TSFX_BMAID10, + TSFX_BMAID11, + TSFX_BMAID12, + TSFX_BMAID13, + TSFX_BMAID14, + TSFX_BMAID15, + TSFX_BMAID16, + TSFX_BMAID17, + TSFX_BMAID18, + TSFX_BMAID19, + TSFX_BMAID20, + TSFX_BMAID21, + TSFX_BMAID22, + TSFX_BMAID23, + TSFX_BMAID24, + TSFX_BMAID25, + TSFX_BMAID26, + TSFX_BMAID27, + TSFX_BMAID28, + TSFX_BMAID29, + TSFX_BMAID30, + TSFX_BMAID31, + TSFX_BMAID32, + TSFX_BMAID33, + TSFX_BMAID34, + TSFX_BMAID35, + TSFX_BMAID36, + TSFX_BMAID37, + TSFX_BMAID38, + TSFX_BMAID39, + TSFX_BMAID40, + TSFX_SMITH1, + TSFX_SMITH2, + TSFX_SMITH3, + TSFX_SMITH4, + TSFX_SMITH5, + TSFX_SMITH6, + TSFX_SMITH7, + TSFX_SMITH8, + TSFX_SMITH9, + TSFX_SMITH10, + TSFX_SMITH11, + TSFX_SMITH12, + TSFX_SMITH13, + TSFX_SMITH14, + TSFX_SMITH15, + TSFX_SMITH16, + TSFX_SMITH17, + TSFX_SMITH18, + TSFX_SMITH19, + TSFX_SMITH20, + TSFX_SMITH21, + TSFX_SMITH22, + TSFX_SMITH23, + TSFX_SMITH24, + TSFX_SMITH25, + TSFX_SMITH26, + TSFX_SMITH27, + TSFX_SMITH28, + TSFX_SMITH29, + TSFX_SMITH30, + TSFX_SMITH31, + TSFX_SMITH32, + TSFX_SMITH33, + TSFX_SMITH34, + TSFX_SMITH35, + TSFX_SMITH36, + TSFX_SMITH37, + TSFX_SMITH38, + TSFX_SMITH39, + TSFX_SMITH40, + TSFX_SMITH41, + TSFX_SMITH42, + TSFX_SMITH43, + TSFX_SMITH44, + TSFX_SMITH45, + TSFX_SMITH46, + TSFX_SMITH47, + TSFX_SMITH48, + TSFX_SMITH49, + TSFX_SMITH50, + TSFX_SMITH51, + TSFX_SMITH52, + TSFX_SMITH53, + TSFX_SMITH54, + TSFX_SMITH55, + TSFX_SMITH56, + TSFX_COW1, + TSFX_COW2, + /* + TSFX_COW3, + TSFX_COW4, + TSFX_COW5, + TSFX_COW6, + */ + TSFX_COW7, + TSFX_COW8, + TSFX_DEADGUY, + TSFX_DRUNK1, + TSFX_DRUNK2, + TSFX_DRUNK3, + TSFX_DRUNK4, + TSFX_DRUNK5, + TSFX_DRUNK6, + TSFX_DRUNK7, + TSFX_DRUNK8, + TSFX_DRUNK9, + TSFX_DRUNK10, + TSFX_DRUNK11, + TSFX_DRUNK12, + TSFX_DRUNK13, + TSFX_DRUNK14, + TSFX_DRUNK15, + TSFX_DRUNK16, + TSFX_DRUNK17, + TSFX_DRUNK18, + TSFX_DRUNK19, + TSFX_DRUNK20, + TSFX_DRUNK21, + TSFX_DRUNK22, + TSFX_DRUNK23, + TSFX_DRUNK24, + TSFX_DRUNK25, + TSFX_DRUNK26, + TSFX_DRUNK27, + TSFX_DRUNK28, + TSFX_DRUNK29, + TSFX_DRUNK30, + TSFX_DRUNK31, + TSFX_DRUNK32, + TSFX_DRUNK33, + TSFX_DRUNK34, + TSFX_DRUNK35, + TSFX_HEALER1, + TSFX_HEALER2, + TSFX_HEALER3, + TSFX_HEALER4, + TSFX_HEALER5, + TSFX_HEALER6, + TSFX_HEALER7, + TSFX_HEALER8, + TSFX_HEALER9, + TSFX_HEALER10, + TSFX_HEALER11, + TSFX_HEALER12, + TSFX_HEALER13, + TSFX_HEALER14, + TSFX_HEALER15, + TSFX_HEALER16, + TSFX_HEALER17, + TSFX_HEALER18, + TSFX_HEALER19, + TSFX_HEALER20, + TSFX_HEALER21, + TSFX_HEALER22, + TSFX_HEALER23, + TSFX_HEALER24, + TSFX_HEALER25, + TSFX_HEALER26, + TSFX_HEALER27, + TSFX_HEALER28, + TSFX_HEALER29, + TSFX_HEALER30, + TSFX_HEALER31, + TSFX_HEALER32, + TSFX_HEALER33, + TSFX_HEALER34, + TSFX_HEALER35, + TSFX_HEALER36, + TSFX_HEALER37, + TSFX_HEALER38, + TSFX_HEALER39, + TSFX_HEALER40, + TSFX_HEALER41, + TSFX_HEALER42, + TSFX_HEALER43, + TSFX_HEALER44, + TSFX_HEALER45, + TSFX_HEALER46, + TSFX_HEALER47, + TSFX_PEGBOY1, + TSFX_PEGBOY2, + TSFX_PEGBOY3, + TSFX_PEGBOY4, + TSFX_PEGBOY5, + TSFX_PEGBOY6, + TSFX_PEGBOY7, + TSFX_PEGBOY8, + TSFX_PEGBOY9, + TSFX_PEGBOY10, + TSFX_PEGBOY11, + TSFX_PEGBOY12, + TSFX_PEGBOY13, + TSFX_PEGBOY14, + TSFX_PEGBOY15, + TSFX_PEGBOY16, + TSFX_PEGBOY17, + TSFX_PEGBOY18, + TSFX_PEGBOY19, + TSFX_PEGBOY20, + TSFX_PEGBOY21, + TSFX_PEGBOY22, + TSFX_PEGBOY23, + TSFX_PEGBOY24, + TSFX_PEGBOY25, + TSFX_PEGBOY26, + TSFX_PEGBOY27, + TSFX_PEGBOY28, + TSFX_PEGBOY29, + TSFX_PEGBOY30, + TSFX_PEGBOY31, + TSFX_PEGBOY32, + TSFX_PEGBOY33, + TSFX_PEGBOY34, + TSFX_PEGBOY35, + TSFX_PEGBOY36, + TSFX_PEGBOY37, + TSFX_PEGBOY38, + TSFX_PEGBOY39, + TSFX_PEGBOY40, + TSFX_PEGBOY41, + TSFX_PEGBOY42, + TSFX_PEGBOY43, + TSFX_PRIEST0, + TSFX_PRIEST1, + TSFX_PRIEST2, + TSFX_PRIEST3, + TSFX_PRIEST4, + TSFX_PRIEST5, + TSFX_PRIEST6, + TSFX_PRIEST7, + TSFX_STORY0, + TSFX_STORY1, + TSFX_STORY2, + TSFX_STORY3, + TSFX_STORY4, + TSFX_STORY5, + TSFX_STORY6, + TSFX_STORY7, + TSFX_STORY8, + TSFX_STORY9, + TSFX_STORY10, + TSFX_STORY11, + TSFX_STORY12, + TSFX_STORY13, + TSFX_STORY14, + TSFX_STORY15, + TSFX_STORY16, + TSFX_STORY17, + TSFX_STORY18, + TSFX_STORY19, + TSFX_STORY20, + TSFX_STORY21, + TSFX_STORY22, + TSFX_STORY23, + TSFX_STORY24, + TSFX_STORY25, + TSFX_STORY26, + TSFX_STORY27, + TSFX_STORY28, + TSFX_STORY29, + TSFX_STORY30, + TSFX_STORY31, + TSFX_STORY32, + TSFX_STORY33, + TSFX_STORY34, + TSFX_STORY35, + TSFX_STORY36, + TSFX_STORY37, + TSFX_STORY38, + TSFX_TAVERN0, + TSFX_TAVERN1, + TSFX_TAVERN2, + TSFX_TAVERN3, + TSFX_TAVERN4, + TSFX_TAVERN5, + TSFX_TAVERN6, + TSFX_TAVERN7, + TSFX_TAVERN8, + TSFX_TAVERN9, + TSFX_TAVERN10, + TSFX_TAVERN11, + TSFX_TAVERN12, + TSFX_TAVERN13, + TSFX_TAVERN14, + TSFX_TAVERN15, + TSFX_TAVERN16, + TSFX_TAVERN17, + TSFX_TAVERN18, + TSFX_TAVERN19, + TSFX_TAVERN20, + TSFX_TAVERN21, + TSFX_TAVERN22, + TSFX_TAVERN23, + TSFX_TAVERN24, + TSFX_TAVERN25, + TSFX_TAVERN26, + TSFX_TAVERN27, + TSFX_TAVERN28, + TSFX_TAVERN29, + TSFX_TAVERN30, + TSFX_TAVERN31, + TSFX_TAVERN32, + TSFX_TAVERN33, + TSFX_TAVERN34, + TSFX_TAVERN35, + TSFX_TAVERN36, + TSFX_TAVERN37, + TSFX_TAVERN38, + TSFX_TAVERN39, + TSFX_TAVERN40, + TSFX_TAVERN41, + TSFX_TAVERN42, + TSFX_TAVERN43, + TSFX_TAVERN44, + TSFX_TAVERN45, + TSFX_WITCH1, + TSFX_WITCH2, + TSFX_WITCH3, + TSFX_WITCH4, + TSFX_WITCH5, + TSFX_WITCH6, + TSFX_WITCH7, + TSFX_WITCH8, + TSFX_WITCH9, + TSFX_WITCH10, + TSFX_WITCH11, + TSFX_WITCH12, + TSFX_WITCH13, + TSFX_WITCH14, + TSFX_WITCH15, + TSFX_WITCH16, + TSFX_WITCH17, + TSFX_WITCH18, + TSFX_WITCH19, + TSFX_WITCH20, + TSFX_WITCH21, + TSFX_WITCH22, + TSFX_WITCH23, + TSFX_WITCH24, + TSFX_WITCH25, + TSFX_WITCH26, + TSFX_WITCH27, + TSFX_WITCH28, + TSFX_WITCH29, + TSFX_WITCH30, + TSFX_WITCH31, + TSFX_WITCH32, + TSFX_WITCH33, + TSFX_WITCH34, + TSFX_WITCH35, + TSFX_WITCH36, + TSFX_WITCH37, + TSFX_WITCH38, + TSFX_WITCH39, + TSFX_WITCH40, + TSFX_WITCH41, + TSFX_WITCH42, + TSFX_WITCH43, + TSFX_WITCH44, + TSFX_WITCH45, + TSFX_WITCH46, + TSFX_WITCH47, + TSFX_WITCH48, + TSFX_WITCH49, + TSFX_WITCH50, + TSFX_WOUND, + PS_MAGE1, + PS_MAGE2, + PS_MAGE3, + PS_MAGE4, + PS_MAGE5, + PS_MAGE6, + PS_MAGE7, + PS_MAGE8, + PS_MAGE9, + PS_MAGE10, + PS_MAGE11, + PS_MAGE12, + PS_MAGE13, + PS_MAGE14, + PS_MAGE15, + PS_MAGE16, + PS_MAGE17, + PS_MAGE18, + PS_MAGE19, + PS_MAGE20, + PS_MAGE21, + PS_MAGE22, + PS_MAGE23, + PS_MAGE24, + PS_MAGE25, + PS_MAGE26, + PS_MAGE27, + PS_MAGE28, + PS_MAGE29, + PS_MAGE30, + PS_MAGE31, + PS_MAGE32, + PS_MAGE33, + PS_MAGE34, + PS_MAGE35, + PS_MAGE36, + PS_MAGE37, + PS_MAGE38, + PS_MAGE39, + PS_MAGE40, + PS_MAGE41, + PS_MAGE42, + PS_MAGE43, + PS_MAGE44, + PS_MAGE45, + PS_MAGE46, + PS_MAGE47, + PS_MAGE48, + PS_MAGE49, + PS_MAGE50, + PS_MAGE51, + PS_MAGE52, + PS_MAGE53, + PS_MAGE54, + PS_MAGE55, + PS_MAGE56, + PS_MAGE57, + PS_MAGE58, + PS_MAGE59, + PS_MAGE60, + PS_MAGE61, + PS_MAGE62, + PS_MAGE63, + PS_MAGE64, + PS_MAGE65, + PS_MAGE66, + PS_MAGE67, + PS_MAGE68, + PS_MAGE69, + PS_MAGE69B, + PS_MAGE70, + PS_MAGE71, + PS_MAGE72, + PS_MAGE73, + PS_MAGE74, + PS_MAGE75, + PS_MAGE76, + PS_MAGE77, + PS_MAGE78, + PS_MAGE79, + PS_MAGE80, + PS_MAGE81, + PS_MAGE82, + PS_MAGE83, + PS_MAGE84, + PS_MAGE85, + PS_MAGE86, + PS_MAGE87, + PS_MAGE88, + PS_MAGE89, + PS_MAGE90, + PS_MAGE91, + PS_MAGE92, + PS_MAGE93, + PS_MAGE94, + PS_MAGE95, + PS_MAGE96, + PS_MAGE97, + PS_MAGE98, + PS_MAGE99, + PS_MAGE100, + PS_MAGE101, + PS_MAGE102, + PS_ROGUE1, + PS_ROGUE2, + PS_ROGUE3, + PS_ROGUE4, + PS_ROGUE5, + PS_ROGUE6, + PS_ROGUE7, + PS_ROGUE8, + PS_ROGUE9, + PS_ROGUE10, + PS_ROGUE11, + PS_ROGUE12, + PS_ROGUE13, + PS_ROGUE14, + PS_ROGUE15, + PS_ROGUE16, + PS_ROGUE17, + PS_ROGUE18, + PS_ROGUE19, + PS_ROGUE20, + PS_ROGUE21, + PS_ROGUE22, + PS_ROGUE23, + PS_ROGUE24, + PS_ROGUE25, + PS_ROGUE26, + PS_ROGUE27, + PS_ROGUE28, + PS_ROGUE29, + PS_ROGUE30, + PS_ROGUE31, + PS_ROGUE32, + PS_ROGUE33, + PS_ROGUE34, + PS_ROGUE35, + PS_ROGUE36, + PS_ROGUE37, + PS_ROGUE38, + PS_ROGUE39, + PS_ROGUE40, + PS_ROGUE41, + PS_ROGUE42, + PS_ROGUE43, + PS_ROGUE44, + PS_ROGUE45, + PS_ROGUE46, + PS_ROGUE47, + PS_ROGUE48, + PS_ROGUE49, + PS_ROGUE50, + PS_ROGUE51, + PS_ROGUE52, + PS_ROGUE53, + PS_ROGUE54, + PS_ROGUE55, + PS_ROGUE56, + PS_ROGUE57, + PS_ROGUE58, + PS_ROGUE59, + PS_ROGUE60, + PS_ROGUE61, + PS_ROGUE62, + PS_ROGUE63, + PS_ROGUE64, + PS_ROGUE65, + PS_ROGUE66, + PS_ROGUE67, + PS_ROGUE68, + PS_ROGUE69, + PS_ROGUE69B, + PS_ROGUE70, + PS_ROGUE71, + PS_ROGUE72, + PS_ROGUE73, + PS_ROGUE74, + PS_ROGUE75, + PS_ROGUE76, + PS_ROGUE77, + PS_ROGUE78, + PS_ROGUE79, + PS_ROGUE80, + PS_ROGUE81, + PS_ROGUE82, + PS_ROGUE83, + PS_ROGUE84, + PS_ROGUE85, + PS_ROGUE86, + PS_ROGUE87, + PS_ROGUE88, + PS_ROGUE89, + PS_ROGUE90, + PS_ROGUE91, + PS_ROGUE92, + PS_ROGUE93, + PS_ROGUE94, + PS_ROGUE95, + PS_ROGUE96, + PS_ROGUE97, + PS_ROGUE98, + PS_ROGUE99, + PS_ROGUE100, + PS_ROGUE101, + PS_ROGUE102, + PS_WARR1, + PS_WARR2, + PS_WARR3, + PS_WARR4, + PS_WARR5, + PS_WARR6, + PS_WARR7, + PS_WARR8, + PS_WARR9, + PS_WARR10, + PS_WARR11, + PS_WARR12, + PS_WARR13, + PS_WARR14, + PS_WARR14B, + PS_WARR14C, + PS_WARR15, + PS_WARR15B, + PS_WARR15C, + PS_WARR16, + PS_WARR16B, + PS_WARR16C, + PS_WARR17, + PS_WARR18, + PS_WARR19, + PS_WARR20, + PS_WARR21, + PS_WARR22, + PS_WARR23, + PS_WARR24, + PS_WARR25, + PS_WARR26, + PS_WARR27, + PS_WARR28, + PS_WARR29, + PS_WARR30, + PS_WARR31, + PS_WARR32, + PS_WARR33, + PS_WARR34, + PS_WARR35, + PS_WARR36, + PS_WARR37, + PS_WARR38, + PS_WARR39, + PS_WARR40, + PS_WARR41, + PS_WARR42, + PS_WARR43, + PS_WARR44, + PS_WARR45, + PS_WARR46, + PS_WARR47, + PS_WARR48, + PS_WARR49, + PS_WARR50, + PS_WARR51, + PS_WARR52, + PS_WARR53, + PS_WARR54, + PS_WARR55, + PS_WARR56, + PS_WARR57, + PS_WARR58, + PS_WARR59, + PS_WARR60, + PS_WARR61, + PS_WARR62, + PS_WARR63, + PS_WARR64, + PS_WARR65, + PS_WARR66, + PS_WARR67, + PS_WARR68, + PS_WARR69, + PS_WARR69B, + PS_WARR70, + PS_WARR71, + PS_WARR72, + PS_WARR73, + PS_WARR74, + PS_WARR75, + PS_WARR76, + PS_WARR77, + PS_WARR78, + PS_WARR79, + PS_WARR80, + PS_WARR81, + PS_WARR82, + PS_WARR83, + PS_WARR84, + PS_WARR85, + PS_WARR86, + PS_WARR87, + PS_WARR88, + PS_WARR89, + PS_WARR90, + PS_WARR91, + PS_WARR92, + PS_WARR93, + PS_WARR94, + PS_WARR95, + PS_WARR95B, + PS_WARR95C, + PS_WARR95D, + PS_WARR95E, + PS_WARR95F, + PS_WARR96B, + PS_WARR97, + PS_WARR98, + PS_WARR99, + PS_WARR100, + PS_WARR101, + PS_WARR102, + PS_MONK1, + PS_MONK2, + PS_MONK3, + PS_MONK4, + PS_MONK5, + PS_MONK6, + PS_MONK7, + PS_MONK8, + PS_MONK9, + PS_MONK10, + PS_MONK11, + PS_MONK12, + PS_MONK13, + PS_MONK14, + PS_MONK15, + PS_MONK16, + PS_MONK17, + PS_MONK18, + PS_MONK19, + PS_MONK20, + PS_MONK21, + PS_MONK22, + PS_MONK23, + PS_MONK24, + PS_MONK25, + PS_MONK26, + PS_MONK27, + PS_MONK28, + PS_MONK29, + PS_MONK30, + PS_MONK31, + PS_MONK32, + PS_MONK33, + PS_MONK34, + PS_MONK35, + PS_MONK36, + PS_MONK37, + PS_MONK38, + PS_MONK39, + PS_MONK40, + PS_MONK41, + PS_MONK42, + PS_MONK43, + PS_MONK44, + PS_MONK45, + PS_MONK46, + PS_MONK47, + PS_MONK48, + PS_MONK49, + PS_MONK50, + PS_MONK51, + PS_MONK52, + PS_MONK53, + PS_MONK54, + PS_MONK55, + PS_MONK56, + PS_MONK57, + PS_MONK58, + PS_MONK59, + PS_MONK60, + PS_MONK61, + PS_MONK62, + PS_MONK63, + PS_MONK64, + PS_MONK65, + PS_MONK66, + PS_MONK67, + PS_MONK68, + PS_MONK69, + PS_MONK69B, + PS_MONK70, + PS_MONK71, + PS_MONK72, + PS_MONK73, + PS_MONK74, + PS_MONK75, + PS_MONK76, + PS_MONK77, + PS_MONK78, + PS_MONK79, + PS_MONK80, + PS_MONK81, + PS_MONK82, + PS_MONK83, + PS_MONK84, + PS_MONK85, + PS_MONK86, + PS_MONK87, + PS_MONK88, + PS_MONK89, + PS_MONK90, + PS_MONK91, + PS_MONK92, + PS_MONK93, + PS_MONK94, + PS_MONK95, + PS_MONK96, + PS_MONK97, + PS_MONK98, + PS_MONK99, + PS_MONK100, + PS_MONK101, + PS_MONK102, + PS_NAR1, + PS_NAR2, + PS_NAR3, + PS_NAR4, + PS_NAR5, + PS_NAR6, + PS_NAR7, + PS_NAR8, + PS_NAR9, + PS_DIABLVLINT, + USFX_CLEAVER, + USFX_GARBUD1, + USFX_GARBUD2, + USFX_GARBUD3, + USFX_GARBUD4, + USFX_IZUAL1, + USFX_LACH1, + USFX_LACH2, + USFX_LACH3, + USFX_LAZ1, + USFX_LAZ2, + USFX_SKING1, + USFX_SNOT1, + USFX_SNOT2, + USFX_SNOT3, + USFX_WARLRD1, + USFX_WLOCK1, + USFX_ZHAR1, + USFX_ZHAR2, + USFX_DIABLOD, + TSFX_FARMER1, + TSFX_FARMER2, + TSFX_FARMER2A, + TSFX_FARMER3, + TSFX_FARMER4, + TSFX_FARMER5, + TSFX_FARMER6, + TSFX_FARMER7, + TSFX_FARMER8, + TSFX_FARMER9, + TSFX_TEDDYBR1, + TSFX_TEDDYBR2, + TSFX_TEDDYBR3, + TSFX_TEDDYBR4, + USFX_DEFILER1, + USFX_DEFILER2, + USFX_DEFILER3, + USFX_DEFILER4, + USFX_DEFILER8, + USFX_DEFILER6, + USFX_DEFILER7, + USFX_NAKRUL1, + USFX_NAKRUL2, + USFX_NAKRUL3, + USFX_NAKRUL4, + USFX_NAKRUL5, + USFX_NAKRUL6, + PS_NARATR3, + TSFX_COWSUT1, + TSFX_COWSUT2, + TSFX_COWSUT3, + TSFX_COWSUT4, + TSFX_COWSUT4A, + TSFX_COWSUT5, + TSFX_COWSUT6, + TSFX_COWSUT7, + TSFX_COWSUT8, + TSFX_COWSUT9, + TSFX_COWSUT10, + TSFX_COWSUT11, + TSFX_COWSUT12, + USFX_SKLJRN1, + PS_NARATR6, + PS_NARATR7, + PS_NARATR8, + PS_NARATR5, + PS_NARATR9, + PS_NARATR4, + TSFX_TRADER1, + IS_CROPEN, + IS_CRCLOS, + SFX_NONE = -1, +}; + +enum sfx_flag : uint8_t { + // clang-format off + sfx_STREAM = 0x01, + sfx_MISC = 0x02, + sfx_UI = 0x04, + sfx_MONK = 0x08, + sfx_ROGUE = 0x10, + sfx_WARRIOR = 0x20, + sfx_SORCERER = 0x40, + sfx_HELLFIRE = 0x80, + // clang-format on +}; -typedef struct TSFX { +struct TSFX { Uint8 bFlags; const char *pszName; TSnd *pSnd; -} TSFX; +}; extern int sfxdelay; -extern int sfxdnum; +extern _sfx_id sfxdnum; BOOL effect_is_playing(int nSFX); void stream_stop(); @@ -28,8 +1071,8 @@ void InitMonsterSND(int monst); void FreeMonsterSnd(); BOOL calc_snd_position(int x, int y, int *plVolume, int *plPan); void PlayEffect(int i, int mode); -void PlaySFX(int psfx, bool randomizeByCategory = true); -void PlaySfxLoc(int psfx, int x, int y); +void PlaySFX(_sfx_id psfx, bool randomizeByCategory = true); +void PlaySfxLoc(_sfx_id psfx, int x, int y); void sound_stop(); void sound_update(); void effects_cleanup_sfx(); @@ -38,8 +1081,4 @@ void ui_sound_init(); void effects_play_sound(const char *snd_file); int GetSFXLength(int nSFX); -#ifdef __cplusplus -} -#endif - } diff --git a/Source/inv.cpp b/Source/inv.cpp index e91983ebf..ece400c94 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -2168,17 +2168,17 @@ void AutoGetItem(int pnum, ItemStruct *item, int ii) if (pnum == myplr) { if (plr[pnum]._pClass == PC_WARRIOR) { - PlaySFX(random_(0, 3) + PS_WARR14); + PlaySFX(PS_WARR14); } else if (plr[pnum]._pClass == PC_ROGUE) { - PlaySFX(random_(0, 3) + PS_ROGUE14); + PlaySFX(PS_ROGUE14); } else if (plr[pnum]._pClass == PC_SORCERER) { - PlaySFX(random_(0, 3) + PS_MAGE14); + PlaySFX(PS_MAGE14); } else if (plr[pnum]._pClass == PC_MONK) { - PlaySFX(random_(0, 3) + PS_MONK14); + PlaySFX(PS_MONK14); } else if (plr[pnum]._pClass == PC_BARD) { - PlaySFX(random_(0, 3) + PS_ROGUE14); + PlaySFX(PS_ROGUE14); } else if (plr[pnum]._pClass == PC_BARBARIAN) { - PlaySFX(random_(0, 3) + PS_WARR14); + PlaySFX(PS_WARR14); } } plr[pnum].HoldItem = *item; diff --git a/Source/items.cpp b/Source/items.cpp index 1ef352984..36705b1a8 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -172,7 +172,7 @@ BYTE ItemAnimLs[] = { 15, }; /** Maps of drop sounds effect of dropping the item on ground. */ -int ItemDropSnds[] = { +_sfx_id ItemDropSnds[] = { IS_FHARM, IS_FAXE, IS_FPOT, @@ -218,7 +218,7 @@ int ItemDropSnds[] = { IS_FLARM, }; /** Maps of drop sounds effect of placing the item in the inventory. */ -int ItemInvSnds[] = { +_sfx_id ItemInvSnds[] = { IS_IHARM, IS_IAXE, IS_IPOT, diff --git a/Source/items.h b/Source/items.h index 3658b64f3..1e5b1bdf8 100644 --- a/Source/items.h +++ b/Source/items.h @@ -5,19 +5,17 @@ */ #pragma once +#include + #include "itemdat.h" namespace devilution { -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum item_quality { +enum item_quality { ITEM_QUALITY_NORMAL, ITEM_QUALITY_MAGIC, ITEM_QUALITY_UNIQUE, -} item_quality; +}; /* First 5 bits store level @@ -35,7 +33,7 @@ typedef enum item_quality { combining CF_UPER15 and CF_UPER1 flags (CF_USEFUL) is used to mark potions and town portal scrolls created on the ground CF_TOWN is combining all store flags and indicates if item has been bought from a NPC */ -typedef enum icreateinfo_flag { +enum icreateinfo_flag { // clang-format off CF_LEVEL = (1 << 6) - 1, CF_ONLYGOOD = 1 << 6, @@ -52,15 +50,15 @@ typedef enum icreateinfo_flag { CF_USEFUL = CF_UPER15 | CF_UPER1, CF_TOWN = CF_SMITH | CF_SMITHPREMIUM | CF_BOY | CF_WITCH | CF_HEALER, // clang-format on -} icreateinfo_flag; +}; -typedef enum icreateinfo_flag2 { +enum icreateinfo_flag2 { // clang-format off CF_HELLFIRE = 1, // clang-format on -} icreateinfo_flag2; +}; -typedef struct ItemStruct { +struct ItemStruct { Sint32 _iSeed; Uint16 _iCreateInfo; enum item_type _itype; @@ -245,22 +243,21 @@ typedef struct ItemStruct { return false; } } +}; -} ItemStruct; - -typedef struct ItemGetRecordStruct { +struct ItemGetRecordStruct { Sint32 nSeed; Uint16 wCI; Sint32 nIndex; Uint32 dwTimestamp; -} ItemGetRecordStruct; +}; -typedef struct CornerStoneStruct { +struct CornerStoneStruct { Sint32 x; Sint32 y; bool activated; ItemStruct item; -} CornerStoneStruct; +}; extern int itemactive[MAXITEMS]; extern BOOL uitemflag; @@ -346,10 +343,6 @@ void PutItemRecord(int nSeed, WORD wCI, int nIndex); extern int MaxGold; extern BYTE ItemCAnimTbl[]; -extern int ItemInvSnds[]; - -#ifdef __cplusplus -} -#endif +extern _sfx_id ItemInvSnds[]; } diff --git a/Source/misdat.cpp b/Source/misdat.cpp index 09990dbf7..3433a15e0 100644 --- a/Source/misdat.cpp +++ b/Source/misdat.cpp @@ -11,114 +11,114 @@ namespace devilution { MissileData missiledata[] = { // clang-format off // mAddProc, mProc, mName, mDraw, mType, mResist, mFileNum, miSFX, mlSFX; - { &AddArrow, &MI_Arrow, MIS_ARROW, true, 0, MISR_NONE, MFILE_ARROWS, -1, -1 }, + { &AddArrow, &MI_Arrow, MIS_ARROW, true, 0, MISR_NONE, MFILE_ARROWS, SFX_NONE, SFX_NONE }, { &AddFirebolt, &MI_Firebolt, MIS_FIREBOLT, true, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2 }, { &AddGuardian, &MI_Guardian, MIS_GUARDIAN, true, 1, MISR_NONE, MFILE_GUARD, LS_GUARD, LS_GUARDLAN }, - { &AddRndTeleport, &MI_Teleport, MIS_RNDTELEPORT, false, 1, MISR_NONE, MFILE_NONE, LS_TELEPORT, -1 }, - { &AddLightball, &MI_Lightball, MIS_LIGHTBALL, true, 1, MISR_LIGHTNING, MFILE_LGHNING, -1, -1 }, + { &AddRndTeleport, &MI_Teleport, MIS_RNDTELEPORT, false, 1, MISR_NONE, MFILE_NONE, LS_TELEPORT, SFX_NONE }, + { &AddLightball, &MI_Lightball, MIS_LIGHTBALL, true, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE }, { &AddFirewall, &MI_Firewall, MIS_FIREWALL, true, 1, MISR_FIRE, MFILE_FIREWAL, LS_WALLLOOP, LS_FIRIMP2 }, { &AddFireball, &MI_Fireball, MIS_FIREBALL, true, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2 }, - { &AddLightctrl, &MI_Lightctrl, MIS_LIGHTCTRL, false, 1, MISR_LIGHTNING, MFILE_LGHNING, -1, -1 }, + { &AddLightctrl, &MI_Lightctrl, MIS_LIGHTCTRL, false, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE }, { &AddLightning, &MI_Lightning, MIS_LIGHTNING, true, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1 }, - { &AddMisexp, &MI_Misexp, MIS_MISEXP, true, 2, MISR_NONE, MFILE_MAGBLOS, -1, -1 }, + { &AddMisexp, &MI_Misexp, MIS_MISEXP, true, 2, MISR_NONE, MFILE_MAGBLOS, SFX_NONE, SFX_NONE }, { &AddTown, &MI_Town, MIS_TOWN, true, 1, MISR_MAGIC, MFILE_PORTAL, LS_SENTINEL, LS_ELEMENTL }, { &AddFlash, &MI_Flash, MIS_FLASH, true, 1, MISR_MAGIC, MFILE_BLUEXFR, LS_NOVA, LS_ELECIMP1 }, - { &AddFlash2, &MI_Flash2, MIS_FLASH2, true, 1, MISR_MAGIC, MFILE_BLUEXBK, -1, -1 }, - { &AddManashield, &MI_SetManashield, MIS_MANASHIELD, false, 1, MISR_MAGIC, MFILE_MANASHLD, LS_MSHIELD, -1 }, - { &AddFiremove, &MI_Firemove, MIS_FIREMOVE, true, 1, MISR_FIRE, MFILE_FIREWAL, -1, -1 }, + { &AddFlash2, &MI_Flash2, MIS_FLASH2, true, 1, MISR_MAGIC, MFILE_BLUEXBK, SFX_NONE, SFX_NONE }, + { &AddManashield, &MI_SetManashield, MIS_MANASHIELD, false, 1, MISR_MAGIC, MFILE_MANASHLD, LS_MSHIELD, SFX_NONE }, + { &AddFiremove, &MI_Firemove, MIS_FIREMOVE, true, 1, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE }, { &AddChain, &MI_Chain, MIS_CHAIN, true, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1 }, - { NULL, NULL, MIS_SENTINAL, true, 1, MISR_LIGHTNING, MFILE_LGHNING, -1, -1 }, + { NULL, NULL, MIS_SENTINAL, true, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE }, { &AddBloodStar, &MI_Blood, MIS_BLODSTAR, true, 2, MISR_NONE, MFILE_BLOOD, LS_BLODSTAR, LS_BLSIMPT }, - { &AddBone, &MI_Blood, MIS_BONE, true, 2, MISR_NONE, MFILE_BONE, -1, -1 }, - { &AddMetlHit, &MI_Blood, MIS_METLHIT, true, 2, MISR_NONE, MFILE_METLHIT, -1, -1 }, - { &AddRhino, &MI_Rhino, MIS_RHINO, true, 2, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddMagmaball, &MI_Firebolt, MIS_MAGMABALL, true, 1, MISR_FIRE, MFILE_MAGBALL, -1, -1 }, - { &AddLightctrl, &MI_Lightctrl, MIS_LIGHTCTRL2, false, 1, MISR_LIGHTNING, MFILE_THINLGHT, -1, -1 }, - { &AddLightning, &MI_Lightning, MIS_LIGHTNING2, true, 1, MISR_LIGHTNING, MFILE_THINLGHT, -1, -1 }, - { &AddFlare, &MI_Firebolt, MIS_FLARE, true, 1, MISR_MAGIC, MFILE_FLARE, -1, -1 }, - { &AddMisexp, &MI_Misexp, MIS_MISEXP2, true, 2, MISR_MAGIC, MFILE_FLAREEXP, -1, -1 }, - { &AddTeleport, &MI_Teleport, MIS_TELEPORT, false, 1, MISR_NONE, MFILE_NONE, LS_ELEMENTL, -1 }, - { &AddLArrow, &MI_LArrow, MIS_FARROW, true, 0, MISR_FIRE, MFILE_FARROW, -1, -1 }, - { NULL, NULL, MIS_DOOMSERP, false, 1, MISR_MAGIC, MFILE_DOOM, LS_DSERP, -1 }, - { &AddFireWallA, &MI_Firewall, MIS_FIREWALLA, true, 2, MISR_FIRE, MFILE_FIREWAL, -1, -1 }, - { &AddStone, &MI_Stone, MIS_STONE, false, 1, MISR_MAGIC, MFILE_NONE, LS_SCURIMP, -1 }, - { &AddDummy, &MI_Dummy, MIS_NULL_1F, true, 1, MISR_NONE, MFILE_NONE, -1, -1 }, - { NULL, NULL, MIS_INVISIBL, false, 1, MISR_NONE, MFILE_NONE, LS_INVISIBL, -1 }, - { &AddGolem, &MI_Golem, MIS_GOLEM, false, 1, MISR_NONE, MFILE_NONE, LS_GOLUM, -1 }, - { &AddEtherealize, &MI_Etherealize, MIS_ETHEREALIZE, true, 1, MISR_NONE, MFILE_ETHRSHLD, LS_ETHEREAL, -1 }, - { &AddBlodbur, &MI_Blood, MIS_BLODBUR, true, 2, MISR_NONE, MFILE_BLODBUR, -1, -1 }, - { &AddBoom, &MI_Boom, MIS_BOOM, true, 2, MISR_NONE, MFILE_NEWEXP, -1, -1 }, - { &AddHeal, &MI_Dummy, MIS_HEAL, false, 1, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddFirewallC, &MI_FirewallC, MIS_FIREWALLC, false, 1, MISR_FIRE, MFILE_FIREWAL, -1, -1 }, - { &AddInfra, &MI_Infra, MIS_INFRA, false, 1, MISR_NONE, MFILE_NONE, LS_INFRAVIS, -1 }, - { &AddIdentify, &MI_Dummy, MIS_IDENTIFY, false, 1, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddWave, &MI_Wave, MIS_WAVE, true, 1, MISR_FIRE, MFILE_FIREWAL, LS_FLAMWAVE, -1 }, - { &AddNova, &MI_Nova, MIS_NOVA, true, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_NOVA, -1 }, - { &AddBlodboil, &MI_Blodboil, MIS_BLODBOIL, false, 1, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddApoca, &MI_Apoca, MIS_APOCA, true, 1, MISR_MAGIC, MFILE_NEWEXP, LS_APOC, -1 }, - { &AddRepair, &MI_Dummy, MIS_REPAIR, false, 2, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddRecharge, &MI_Dummy, MIS_RECHARGE, false, 2, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddDisarm, &MI_Dummy, MIS_DISARM, false, 2, MISR_NONE, MFILE_NONE, LS_TRAPDIS, -1 }, - { &AddFlame, &MI_Flame, MIS_FLAME, true, 1, MISR_FIRE, MFILE_INFERNO, LS_SPOUTSTR, -1 }, - { &AddFlamec, &MI_Flamec, MIS_FLAMEC, false, 1, MISR_FIRE, MFILE_NONE, -1, -1 }, - { &AddFireman, &MI_Fireman, MIS_FIREMAN, true, 2, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddKrull, &MI_Krull, MIS_KRULL, true, 0, MISR_FIRE, MFILE_KRULL, -1, -1 }, - { &AddCbolt, &MI_Cbolt, MIS_CBOLT, true, 1, MISR_LIGHTNING, MFILE_MINILTNG, LS_CBOLT, -1 }, + { &AddBone, &MI_Blood, MIS_BONE, true, 2, MISR_NONE, MFILE_BONE, SFX_NONE, SFX_NONE }, + { &AddMetlHit, &MI_Blood, MIS_METLHIT, true, 2, MISR_NONE, MFILE_METLHIT, SFX_NONE, SFX_NONE }, + { &AddRhino, &MI_Rhino, MIS_RHINO, true, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddMagmaball, &MI_Firebolt, MIS_MAGMABALL, true, 1, MISR_FIRE, MFILE_MAGBALL, SFX_NONE, SFX_NONE }, + { &AddLightctrl, &MI_Lightctrl, MIS_LIGHTCTRL2, false, 1, MISR_LIGHTNING, MFILE_THINLGHT, SFX_NONE, SFX_NONE }, + { &AddLightning, &MI_Lightning, MIS_LIGHTNING2, true, 1, MISR_LIGHTNING, MFILE_THINLGHT, SFX_NONE, SFX_NONE }, + { &AddFlare, &MI_Firebolt, MIS_FLARE, true, 1, MISR_MAGIC, MFILE_FLARE, SFX_NONE, SFX_NONE }, + { &AddMisexp, &MI_Misexp, MIS_MISEXP2, true, 2, MISR_MAGIC, MFILE_FLAREEXP, SFX_NONE, SFX_NONE }, + { &AddTeleport, &MI_Teleport, MIS_TELEPORT, false, 1, MISR_NONE, MFILE_NONE, LS_ELEMENTL, SFX_NONE }, + { &AddLArrow, &MI_LArrow, MIS_FARROW, true, 0, MISR_FIRE, MFILE_FARROW, SFX_NONE, SFX_NONE }, + { NULL, NULL, MIS_DOOMSERP, false, 1, MISR_MAGIC, MFILE_DOOM, LS_DSERP, SFX_NONE }, + { &AddFireWallA, &MI_Firewall, MIS_FIREWALLA, true, 2, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE }, + { &AddStone, &MI_Stone, MIS_STONE, false, 1, MISR_MAGIC, MFILE_NONE, LS_SCURIMP, SFX_NONE }, + { &AddDummy, &MI_Dummy, MIS_NULL_1F, true, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { NULL, NULL, MIS_INVISIBL, false, 1, MISR_NONE, MFILE_NONE, LS_INVISIBL, SFX_NONE }, + { &AddGolem, &MI_Golem, MIS_GOLEM, false, 1, MISR_NONE, MFILE_NONE, LS_GOLUM, SFX_NONE }, + { &AddEtherealize, &MI_Etherealize, MIS_ETHEREALIZE, true, 1, MISR_NONE, MFILE_ETHRSHLD, LS_ETHEREAL, SFX_NONE }, + { &AddBlodbur, &MI_Blood, MIS_BLODBUR, true, 2, MISR_NONE, MFILE_BLODBUR, SFX_NONE, SFX_NONE }, + { &AddBoom, &MI_Boom, MIS_BOOM, true, 2, MISR_NONE, MFILE_NEWEXP, SFX_NONE, SFX_NONE }, + { &AddHeal, &MI_Dummy, MIS_HEAL, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddFirewallC, &MI_FirewallC, MIS_FIREWALLC, false, 1, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE }, + { &AddInfra, &MI_Infra, MIS_INFRA, false, 1, MISR_NONE, MFILE_NONE, LS_INFRAVIS, SFX_NONE }, + { &AddIdentify, &MI_Dummy, MIS_IDENTIFY, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddWave, &MI_Wave, MIS_WAVE, true, 1, MISR_FIRE, MFILE_FIREWAL, LS_FLAMWAVE, SFX_NONE }, + { &AddNova, &MI_Nova, MIS_NOVA, true, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_NOVA, SFX_NONE }, + { &AddBlodboil, &MI_Blodboil, MIS_BLODBOIL, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddApoca, &MI_Apoca, MIS_APOCA, true, 1, MISR_MAGIC, MFILE_NEWEXP, LS_APOC, SFX_NONE }, + { &AddRepair, &MI_Dummy, MIS_REPAIR, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddRecharge, &MI_Dummy, MIS_RECHARGE, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddDisarm, &MI_Dummy, MIS_DISARM, false, 2, MISR_NONE, MFILE_NONE, LS_TRAPDIS, SFX_NONE }, + { &AddFlame, &MI_Flame, MIS_FLAME, true, 1, MISR_FIRE, MFILE_INFERNO, LS_SPOUTSTR, SFX_NONE }, + { &AddFlamec, &MI_Flamec, MIS_FLAMEC, false, 1, MISR_FIRE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddFireman, &MI_Fireman, MIS_FIREMAN, true, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddKrull, &MI_Krull, MIS_KRULL, true, 0, MISR_FIRE, MFILE_KRULL, SFX_NONE, SFX_NONE }, + { &AddCbolt, &MI_Cbolt, MIS_CBOLT, true, 1, MISR_LIGHTNING, MFILE_MINILTNG, LS_CBOLT, SFX_NONE }, { &AddHbolt, &MI_Hbolt, MIS_HBOLT, true, 1, MISR_NONE, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1 }, - { &AddResurrect, &MI_Dummy, MIS_RESURRECT, false, 1, MISR_MAGIC, MFILE_NONE, -1, LS_RESUR }, - { &AddTelekinesis, &MI_Dummy, MIS_TELEKINESIS, false, 1, MISR_NONE, MFILE_NONE, LS_ETHEREAL, -1 }, - { &AddLArrow, &MI_LArrow, MIS_LARROW, true, 0, MISR_LIGHTNING, MFILE_LARROW, -1, -1 }, - { &AddAcid, &MI_Firebolt, MIS_ACID, true, 1, MISR_ACID, MFILE_ACIDBF, LS_ACID, -1 }, - { &AddMisexp, &MI_Acidsplat, MIS_MISEXP3, true, 2, MISR_ACID, MFILE_ACIDSPLA, -1, -1 }, - { &AddAcidpud, &MI_Acidpud, MIS_ACIDPUD, true, 2, MISR_ACID, MFILE_ACIDPUD, LS_PUDDLE, -1 }, - { &AddHealOther, &MI_Dummy, MIS_HEALOTHER, false, 1, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddElement, &MI_Element, MIS_ELEMENT, true, 1, MISR_FIRE, MFILE_FIRERUN, LS_ELEMENTL, -1 }, - { &AddResurrectBeam, &MI_ResurrectBeam, MIS_RESURRECTBEAM, true, 1, MISR_NONE, MFILE_RESSUR1, -1, -1 }, + { &AddResurrect, &MI_Dummy, MIS_RESURRECT, false, 1, MISR_MAGIC, MFILE_NONE, SFX_NONE, LS_RESUR }, + { &AddTelekinesis, &MI_Dummy, MIS_TELEKINESIS, false, 1, MISR_NONE, MFILE_NONE, LS_ETHEREAL, SFX_NONE }, + { &AddLArrow, &MI_LArrow, MIS_LARROW, true, 0, MISR_LIGHTNING, MFILE_LARROW, SFX_NONE, SFX_NONE }, + { &AddAcid, &MI_Firebolt, MIS_ACID, true, 1, MISR_ACID, MFILE_ACIDBF, LS_ACID, SFX_NONE }, + { &AddMisexp, &MI_Acidsplat, MIS_MISEXP3, true, 2, MISR_ACID, MFILE_ACIDSPLA, SFX_NONE, SFX_NONE }, + { &AddAcidpud, &MI_Acidpud, MIS_ACIDPUD, true, 2, MISR_ACID, MFILE_ACIDPUD, LS_PUDDLE, SFX_NONE }, + { &AddHealOther, &MI_Dummy, MIS_HEALOTHER, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddElement, &MI_Element, MIS_ELEMENT, true, 1, MISR_FIRE, MFILE_FIRERUN, LS_ELEMENTL, SFX_NONE }, + { &AddResurrectBeam, &MI_ResurrectBeam, MIS_RESURRECTBEAM, true, 1, MISR_NONE, MFILE_RESSUR1, SFX_NONE, SFX_NONE }, { &AddBoneSpirit, &MI_Bonespirit, MIS_BONESPIRIT, true, 1, MISR_MAGIC, MFILE_SKLBALL, LS_BONESP, LS_BSIMPCT }, - { &AddWeapexp, &MI_Weapexp, MIS_WEAPEXP, true, 2, MISR_NONE, MFILE_NONE, -1, -1 }, + { &AddWeapexp, &MI_Weapexp, MIS_WEAPEXP, true, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, { &AddRportal, &MI_Rportal, MIS_RPORTAL, true, 2, MISR_NONE, MFILE_RPORTAL, LS_SENTINEL, LS_ELEMENTL }, - { &AddBoom, &MI_Boom, MIS_BOOM2, true, 2, MISR_NONE, MFILE_FIREPLAR, -1, -1 }, - { &AddDiabApoca, &MI_Dummy, MIS_DIABAPOCA, false, 2, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddMana, &MI_Dummy, MIS_MANA, false, 1, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddMagi, &MI_Dummy, MIS_MAGI, false, 1, MISR_NONE, MFILE_NONE, -1, -1 }, + { &AddBoom, &MI_Boom, MIS_BOOM2, true, 2, MISR_NONE, MFILE_FIREPLAR, SFX_NONE, SFX_NONE }, + { &AddDiabApoca, &MI_Dummy, MIS_DIABAPOCA, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddMana, &MI_Dummy, MIS_MANA, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddMagi, &MI_Dummy, MIS_MAGI, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, { &AddLightningWall, &MI_LightningWall, MIS_LIGHTWALL, true, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_LMAG, LS_ELECIMP1 }, - { &AddFirewallC, &MI_LightningWallC, MIS_LIGHTNINGWALL, false, 1, MISR_LIGHTNING, MFILE_LGHNING, -1, -1 }, + { &AddFirewallC, &MI_LightningWallC, MIS_LIGHTNINGWALL, false, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE }, { &AddNova, &MI_FireNova, MIS_IMMOLATION, true, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2 }, - { &AddSpecArrow, &MI_SpecArrow, MIS_SPECARROW, true, 0, MISR_NONE, MFILE_ARROWS, -1, -1 }, + { &AddSpecArrow, &MI_SpecArrow, MIS_SPECARROW, true, 0, MISR_NONE, MFILE_ARROWS, SFX_NONE, SFX_NONE }, { &AddFireNova, &MI_Fireball, MIS_FIRENOVA, true, 1, MISR_FIRE, MFILE_FIREBA, IS_FBALLBOW, LS_FIRIMP2 }, - { &AddLightningArrow, &MI_LightningArrow, MIS_LIGHTARROW, false, 1, MISR_LIGHTNING, MFILE_LGHNING, IS_FBALLBOW, -1 }, - { &AddCboltArrow, &MI_Cbolt, MIS_CBOLTARROW, true, 1, MISR_LIGHTNING, MFILE_MINILTNG, LS_CBOLT, -1 }, + { &AddLightningArrow, &MI_LightningArrow, MIS_LIGHTARROW, false, 1, MISR_LIGHTNING, MFILE_LGHNING, IS_FBALLBOW, SFX_NONE }, + { &AddCboltArrow, &MI_Cbolt, MIS_CBOLTARROW, true, 1, MISR_LIGHTNING, MFILE_MINILTNG, LS_CBOLT, SFX_NONE }, { &AddHbolt, &MI_Hbolt, MIS_HBOLTARROW, true, 1, MISR_NONE, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1 }, - { &AddWarp, &MI_Teleport, MIS_WARP, false, 1, MISR_NONE, MFILE_NONE, LS_ETHEREAL, -1 }, - { &AddReflection, &MI_Reflect, MIS_REFLECT, true, 1, MISR_NONE, MFILE_REFLECT, LS_MSHIELD, -1 }, - { &AddBerserk, &MI_Dummy, MIS_BERSERK, false, 1, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddRing, &MI_FireRing, MIS_FIRERING, false, 1, MISR_FIRE, MFILE_FIREWAL, -1, -1 }, - { &AddStealPotions, &MI_Dummy, MIS_STEALPOTS, false, 1, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddManaTrap, &MI_Dummy, MIS_MANATRAP, false, 1, MISR_NONE, MFILE_NONE, IS_CAST7, -1 }, - { &AddRing, &MI_LightningRing, MIS_LIGHTRING, false, 1, MISR_LIGHTNING, MFILE_LGHNING, -1, -1 }, - { &AddSearch, &MI_Search, MIS_SEARCH, false, 1, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddFlashBack, &MI_FlashBack, MIS_FLASHBK, true, 1, MISR_MAGIC, MFILE_BLUEXBK, -1, -1 }, - { &AddFlashFront, &MI_FlashFront, MIS_FLASHFR, true, 1, MISR_MAGIC, MFILE_BLUEXFR, -1, LS_ELECIMP1 }, + { &AddWarp, &MI_Teleport, MIS_WARP, false, 1, MISR_NONE, MFILE_NONE, LS_ETHEREAL, SFX_NONE }, + { &AddReflection, &MI_Reflect, MIS_REFLECT, true, 1, MISR_NONE, MFILE_REFLECT, LS_MSHIELD, SFX_NONE }, + { &AddBerserk, &MI_Dummy, MIS_BERSERK, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddRing, &MI_FireRing, MIS_FIRERING, false, 1, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE }, + { &AddStealPotions, &MI_Dummy, MIS_STEALPOTS, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddManaTrap, &MI_Dummy, MIS_MANATRAP, false, 1, MISR_NONE, MFILE_NONE, IS_CAST7, SFX_NONE }, + { &AddRing, &MI_LightningRing, MIS_LIGHTRING, false, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE }, + { &AddSearch, &MI_Search, MIS_SEARCH, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddFlashBack, &MI_FlashBack, MIS_FLASHBK, true, 1, MISR_MAGIC, MFILE_BLUEXBK, SFX_NONE, SFX_NONE }, + { &AddFlashFront, &MI_FlashFront, MIS_FLASHFR, true, 1, MISR_MAGIC, MFILE_BLUEXFR, SFX_NONE, LS_ELECIMP1 }, { &AddImmolation, &MI_Immolation, MIS_IMMOLATION2, true, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2 }, - { &AddFireRune, &MI_Rune, MIS_RUNEFIRE, true, 1, MISR_NONE, MFILE_RUNE, -1, -1 }, - { &AddLightningRune, &MI_Rune, MIS_RUNELIGHT, true, 1, MISR_NONE, MFILE_RUNE, -1, -1 }, - { &AddGreatLightningRune, &MI_Rune, MIS_RUNENOVA, true, 1, MISR_NONE, MFILE_RUNE, -1, -1 }, - { &AddImmolationRune, &MI_Rune, MIS_RUNEIMMOLAT, true, 1, MISR_NONE, MFILE_RUNE, -1, -1 }, - { &AddStoneRune, &MI_Rune, MIS_RUNESTONE, true, 1, MISR_NONE, MFILE_RUNE, -1, -1 }, + { &AddFireRune, &MI_Rune, MIS_RUNEFIRE, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE }, + { &AddLightningRune, &MI_Rune, MIS_RUNELIGHT, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE }, + { &AddGreatLightningRune, &MI_Rune, MIS_RUNENOVA, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE }, + { &AddImmolationRune, &MI_Rune, MIS_RUNEIMMOLAT, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE }, + { &AddStoneRune, &MI_Rune, MIS_RUNESTONE, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE }, { &AddRuneExplosion, &MI_HiveExplode, MIS_HIVEEXP, true, 1, MISR_FIRE, MFILE_BIGEXP, LS_NESTXPLD, LS_NESTXPLD }, - { &AddHorkSpawn, &MI_HorkSpawn, MIS_HORKDMN, true, 2, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddJester, &MI_Dummy, MIS_JESTER, false, 2, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddHiveExplosion, &MI_Dummy, MIS_HIVEEXP2, false, 2, MISR_NONE, MFILE_NONE, -1, -1 }, - { &AddFlare, &MI_Firebolt, MIS_LICH, true, 1, MISR_MAGIC, MFILE_LICH, -1, -1 }, - { &AddFlare, &MI_Firebolt, MIS_PSYCHORB, true, 1, MISR_MAGIC, MFILE_BONEDEMON, -1, -1 }, - { &AddFlare, &MI_Firebolt, MIS_NECROMORB, true, 1, MISR_MAGIC, MFILE_NECROMORB, -1, -1 }, - { &AddFlare, &MI_Firebolt, MIS_ARCHLICH, true, 1, MISR_MAGIC, MFILE_ARCHLICH, -1, -1 }, - { &AddFlare, &MI_Firebolt, MIS_BONEDEMON, true, 1, MISR_MAGIC, MFILE_BONEDEMON, -1, -1 }, - { &AddMisexp, &MI_Misexp, MIS_EXYEL2, true, 2, MISR_NONE, MFILE_EXYEL2, LS_FIRIMP2, -1 }, - { &AddMisexp, &MI_Misexp, MIS_EXRED3, true, 2, MISR_NONE, MFILE_EXRED3, LS_FIRIMP2, -1 }, - { &AddMisexp, &MI_Misexp, MIS_EXBL2, true, 2, MISR_NONE, MFILE_EXBL2, LS_FIRIMP2, -1 }, - { &AddMisexp, &MI_Misexp, MIS_EXBL3, true, 2, MISR_NONE, MFILE_EXBL3, LS_FIRIMP2, -1 }, - { &AddMisexp, &MI_Misexp, MIS_EXORA1, true, 2, MISR_NONE, MFILE_EXORA1, LS_FIRIMP2, -1 }, + { &AddHorkSpawn, &MI_HorkSpawn, MIS_HORKDMN, true, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddJester, &MI_Dummy, MIS_JESTER, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddHiveExplosion, &MI_Dummy, MIS_HIVEEXP2, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE }, + { &AddFlare, &MI_Firebolt, MIS_LICH, true, 1, MISR_MAGIC, MFILE_LICH, SFX_NONE, SFX_NONE }, + { &AddFlare, &MI_Firebolt, MIS_PSYCHORB, true, 1, MISR_MAGIC, MFILE_BONEDEMON, SFX_NONE, SFX_NONE }, + { &AddFlare, &MI_Firebolt, MIS_NECROMORB, true, 1, MISR_MAGIC, MFILE_NECROMORB, SFX_NONE, SFX_NONE }, + { &AddFlare, &MI_Firebolt, MIS_ARCHLICH, true, 1, MISR_MAGIC, MFILE_ARCHLICH, SFX_NONE, SFX_NONE }, + { &AddFlare, &MI_Firebolt, MIS_BONEDEMON, true, 1, MISR_MAGIC, MFILE_BONEDEMON, SFX_NONE, SFX_NONE }, + { &AddMisexp, &MI_Misexp, MIS_EXYEL2, true, 2, MISR_NONE, MFILE_EXYEL2, LS_FIRIMP2, SFX_NONE }, + { &AddMisexp, &MI_Misexp, MIS_EXRED3, true, 2, MISR_NONE, MFILE_EXRED3, LS_FIRIMP2, SFX_NONE }, + { &AddMisexp, &MI_Misexp, MIS_EXBL2, true, 2, MISR_NONE, MFILE_EXBL2, LS_FIRIMP2, SFX_NONE }, + { &AddMisexp, &MI_Misexp, MIS_EXBL3, true, 2, MISR_NONE, MFILE_EXBL3, LS_FIRIMP2, SFX_NONE }, + { &AddMisexp, &MI_Misexp, MIS_EXORA1, true, 2, MISR_NONE, MFILE_EXORA1, LS_FIRIMP2, SFX_NONE }, // clang-format on }; diff --git a/Source/misdat.h b/Source/misdat.h index ae2a84409..c84f3fd16 100644 --- a/Source/misdat.h +++ b/Source/misdat.h @@ -5,19 +5,106 @@ */ #pragma once -#include "missiles.h" +#include namespace devilution { -#ifdef __cplusplus -extern "C" { -#endif +enum missile_resistance : uint8_t { + MISR_NONE, + MISR_FIRE, + MISR_LIGHTNING, + MISR_MAGIC, + MISR_ACID, +}; + +typedef enum missile_graphic_id : uint8_t { + MFILE_ARROWS, + MFILE_FIREBA, + MFILE_GUARD, + MFILE_LGHNING, + MFILE_FIREWAL, + MFILE_MAGBLOS, + MFILE_PORTAL, + MFILE_BLUEXFR, + MFILE_BLUEXBK, + MFILE_MANASHLD, + MFILE_BLOOD, + MFILE_BONE, + MFILE_METLHIT, + MFILE_FARROW, + MFILE_DOOM, + MFILE_0F, + MFILE_BLODBUR, + MFILE_NEWEXP, + MFILE_SHATTER1, + MFILE_BIGEXP, + MFILE_INFERNO, + MFILE_THINLGHT, + MFILE_FLARE, + MFILE_FLAREEXP, + MFILE_MAGBALL, + MFILE_KRULL, + MFILE_MINILTNG, + MFILE_HOLY, + MFILE_HOLYEXPL, + MFILE_LARROW, + MFILE_FIRARWEX, + MFILE_ACIDBF, + MFILE_ACIDSPLA, + MFILE_ACIDPUD, + MFILE_ETHRSHLD, + MFILE_FIRERUN, + MFILE_RESSUR1, + MFILE_SKLBALL, + MFILE_RPORTAL, + MFILE_FIREPLAR, + MFILE_SCUBMISB, + MFILE_SCBSEXPB, + MFILE_SCUBMISC, + MFILE_SCBSEXPC, + MFILE_SCUBMISD, + MFILE_SCBSEXPD, + MFILE_SPAWNS, + MFILE_REFLECT, + MFILE_LICH, + MFILE_MSBLA, + MFILE_NECROMORB, + MFILE_ARCHLICH, + MFILE_RUNE, + MFILE_EXYEL2, + MFILE_EXBL2, + MFILE_EXRED3, + MFILE_BONEDEMON, + MFILE_EXORA1, + MFILE_EXBL3, + MFILE_NONE, // BUGFIX: should be `MFILE_NONE = MFILE_SCBSEXPD+1`, i.e. MFILE_NULL, since there would otherwise be an out-of-bounds in SetMissAnim when accessing misfiledata for any of the missiles that have MFILE_NONE as mFileNum in missiledata. (fixed) +} missile_graphic_id; + +typedef struct MissileData { + void (*mAddProc)(Sint32, Sint32, Sint32, Sint32, Sint32, Sint32, Sint8, Sint32, Sint32); + void (*mProc)(Sint32); + Uint8 mName; + bool mDraw; + Uint8 mType; + missile_resistance mResist; + Uint8 mFileNum; + _sfx_id mlSFX; + _sfx_id miSFX; +} MissileData; + +typedef struct MisFileData { + const char *mName; + Uint8 mAnimName; + Uint8 mAnimFAmt; + Sint32 mFlags; + Uint8 *mAnimData[16]; + Uint8 mAnimDelay[16]; + Uint8 mAnimLen[16]; + Sint16 mAnimWidth[16]; + Sint16 mAnimWidth2[16]; +} MisFileData; extern MissileData missiledata[]; extern MisFileData misfiledata[]; -#ifdef __cplusplus -} -#endif - } diff --git a/Source/missiles.cpp b/Source/missiles.cpp index cda178945..f5d7fa008 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -530,7 +530,7 @@ void MoveMissilePos(int i) BOOL MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, BOOLEAN shift) { - int hit, hper, dam, mor, mir; + int hit, hper, dam, mor; BOOL resist, ret; resist = FALSE; @@ -545,7 +545,7 @@ BOOL MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, BOOLEAN shif if (monster[m]._mmode == MM_CHARGE) return FALSE; - mir = missiledata[t].mResist; + missile_resistance mir = missiledata[t].mResist; mor = monster[m].mMagicRes; if (mor & IMMUNE_MAGIC && mir == MISR_MAGIC || mor & IMMUNE_FIRE && mir == MISR_FIRE @@ -611,7 +611,7 @@ BOOL MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, BOOLEAN shif BOOL MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, BOOLEAN shift) { - int hit, hper, dam, mor, mir; + int hit, hper, dam, mor; BOOL resist, ret; resist = FALSE; @@ -626,7 +626,7 @@ BOOL MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, BOOLE return FALSE; mor = monster[m].mMagicRes; - mir = missiledata[t].mResist; + missile_resistance mir = missiledata[t].mResist; if (mor & IMMUNE_MAGIC && mir == MISR_MAGIC || mor & IMMUNE_FIRE && mir == MISR_FIRE @@ -3085,7 +3085,7 @@ void AddBlodboil(Sint32 mi, Sint32 sx, Sint32 sy, Sint32 dx, Sint32 dy, Sint32 m if (id == -1 || plr[id]._pSpellFlags & 6 || plr[id]._pHitPoints <= plr[id]._pLevel << 6) { missile[mi]._miDelFlag = TRUE; } else { - int blodboilSFX[NUM_CLASSES] = { + _sfx_id blodboilSFX[NUM_CLASSES] = { PS_WARR70, PS_ROGUE70, PS_MAGE70, @@ -3493,13 +3493,13 @@ void MI_SetManashield(Sint32 i) void MI_LArrow(Sint32 i) { - int p, mind, maxd, rst; + int p, mind, maxd; missile[i]._mirange--; p = missile[i]._misource; if (missile[i]._miAnimType == MFILE_MINILTNG || missile[i]._miAnimType == MFILE_MAGBLOS) { ChangeLight(missile[i]._mlid, missile[i]._mix, missile[i]._miy, missile[i]._miAnimFrame + 5); - rst = missiledata[missile[i]._mitype].mResist; + missile_resistance rst = missiledata[missile[i]._mitype].mResist; if (missile[i]._mitype == MIS_LARROW) { if (p != -1) { mind = plr[p]._pILMinDam; @@ -3543,8 +3543,8 @@ void MI_LArrow(Sint32 i) } if (missile[i]._mix != missile[i]._misx || missile[i]._miy != missile[i]._misy) { - rst = missiledata[missile[i]._mitype].mResist; - missiledata[missile[i]._mitype].mResist = 0; + missile_resistance rst = missiledata[missile[i]._mitype].mResist; + missiledata[missile[i]._mitype].mResist = MISR_NONE; CheckMissileCol(i, mind, maxd, FALSE, missile[i]._mix, missile[i]._miy, FALSE); missiledata[missile[i]._mitype].mResist = rst; } @@ -5245,7 +5245,7 @@ void MI_Blodboil(Sint32 i) if (missile[i]._mirange == 0) { id = missile[i]._miVar1; if ((plr[id]._pSpellFlags & 2) == 2) { - int blodboilSFX[NUM_CLASSES] = { + _sfx_id blodboilSFX[NUM_CLASSES] = { PS_WARR72, PS_ROGUE72, PS_MAGE72, @@ -5267,7 +5267,7 @@ void MI_Blodboil(Sint32 i) force_redraw = 255; PlaySfxLoc(blodboilSFX[plr[id]._pClass], plr[id]._px, plr[id]._py); } else { - int blodboilSFX[NUM_CLASSES] = { + _sfx_id blodboilSFX[NUM_CLASSES] = { PS_WARR72, PS_ROGUE72, PS_MAGE72, diff --git a/Source/missiles.h b/Source/missiles.h index aa4cbf49d..00a521cfc 100644 --- a/Source/missiles.h +++ b/Source/missiles.h @@ -5,43 +5,19 @@ */ #pragma once -namespace devilution { - -#ifdef __cplusplus -extern "C" { -#endif +#include -typedef struct MissileData { - void (*mAddProc)(Sint32, Sint32, Sint32, Sint32, Sint32, Sint32, Sint8, Sint32, Sint32); - void (*mProc)(Sint32); - Uint8 mName; - bool mDraw; - Uint8 mType; - Uint8 mResist; - Uint8 mFileNum; - Sint16 mlSFX; - Sint16 miSFX; -} MissileData; +#include "misdat.h" -typedef struct MisFileData { - const char *mName; - Uint8 mAnimName; - Uint8 mAnimFAmt; - Sint32 mFlags; - Uint8 *mAnimData[16]; - Uint8 mAnimDelay[16]; - Uint8 mAnimLen[16]; - Sint16 mAnimWidth[16]; - Sint16 mAnimWidth2[16]; -} MisFileData; +namespace devilution { -typedef struct ChainStruct { +struct ChainStruct { Sint32 idx; Sint32 _mitype; Sint32 _mirange; -} ChainStruct; +}; -typedef struct MissileStruct { +struct MissileStruct { Sint32 _mitype; // Type of projectile (missile_id) Sint32 _mix; // Tile X-position of the missile Sint32 _miy; // Tile Y-position of the missile @@ -86,7 +62,7 @@ typedef struct MissileStruct { Sint32 _miVar6; Sint32 _miVar7; Sint32 _miVar8; -} MissileStruct; +}; extern int missileactive[MAXMISSILES]; extern int missileavail[MAXMISSILES]; @@ -257,8 +233,4 @@ void ProcessMissiles(); void missiles_process_charge(); void ClearMissileSpot(int mi); -#ifdef __cplusplus -} -#endif - } diff --git a/Source/monster.h b/Source/monster.h index cfa705f0b..3051a0316 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -5,13 +5,46 @@ */ #pragma once +#include + namespace devilution { -#ifdef __cplusplus -extern "C" { -#endif +enum monster_flag : uint16_t { + // clang-format off + MFLAG_HIDDEN = 0x0001, + MFLAG_LOCK_ANIMATION = 0x0002, + MFLAG_ALLOW_SPECIAL = 0x0004, + MFLAG_NOHEAL = 0x0008, + MFLAG_TARGETS_MONSTER = 0x0010, + MFLAG_GOLEM = 0x0020, + MFLAG_QUEST_COMPLETE = 0x0040, + MFLAG_KNOCKBACK = 0x0080, + MFLAG_SEARCH = 0x0100, + MFLAG_CAN_OPEN_DOOR = 0x0200, + MFLAG_NO_ENEMY = 0x0400, + MFLAG_BERSERK = 0x0800, + MFLAG_NOLIFESTEAL = 0x1000 + // clang-format on +}; + +/** this enum contains indexes from UniqMonst array for special unique monsters (usually quest related) */ +enum : uint8_t { + UMT_GARBUD, + UMT_SKELKING, + UMT_ZHAR, + UMT_SNOTSPIL, + UMT_LAZURUS, + UMT_RED_VEX, + UMT_BLACKJADE, + UMT_LACHDAN, + UMT_WARLORD, + UMT_BUTCHER, + UMT_HORKDMN, + UMT_DEFILER, + UMT_NAKRUL, +}; -typedef enum MON_MODE { +enum MON_MODE { MM_STAND, /** Movement towards N, NW, or NE */ MM_WALK, @@ -33,16 +66,16 @@ typedef enum MON_MODE { MM_STONE, MM_HEAL, MM_TALK, -} MON_MODE; +}; -typedef struct AnimStruct { +struct AnimStruct { Uint8 *CMem; Uint8 *Data[8]; Sint32 Frames; Sint32 Rate; -} AnimStruct; +}; -typedef struct CMonster { +struct CMonster { _monster_id mtype; /** placeflag enum as a flags*/ Uint8 mPlaceFlags; @@ -61,9 +94,9 @@ typedef struct CMonster { * as indexes into a palette. (a 256 byte array of palette indices) */ Uint8 *trans_file; -} CMonster; +}; -typedef struct MonsterStruct { // note: missing field _mAFNum +struct MonsterStruct { // note: missing field _mAFNum Sint32 _mMTidx; MON_MODE _mmode; Uint8 _mgoal; @@ -152,7 +185,7 @@ typedef struct MonsterStruct { // note: missing field _mAFNum const char *mName; CMonster *MType; const MonsterData *MData; -} MonsterStruct; +}; extern int monstkills[MAXMONSTERS]; extern int monstactive[MAXMONSTERS]; @@ -265,8 +298,4 @@ extern int opposite[8]; extern int offset_x[8]; extern int offset_y[8]; -#ifdef __cplusplus -} -#endif - } diff --git a/Source/objects.cpp b/Source/objects.cpp index 1aa042819..f8cb97371 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -3342,7 +3342,7 @@ int ItemMiscIdIdx(item_misc_id imiscid) return i; } -void OperateShrine(int pnum, int i, int sType) +void OperateShrine(int pnum, int i, _sfx_id sType) { int cnt; int r, j; @@ -4239,7 +4239,7 @@ int FindValidShrine(int i) return rv; } -void OperateGoatShrine(int pnum, int i, int sType) +void OperateGoatShrine(int pnum, int i, _sfx_id sType) { SetRndSeed(object[i]._oRndSeed); object[i]._oVar1 = FindValidShrine(i); @@ -4248,7 +4248,7 @@ void OperateGoatShrine(int pnum, int i, int sType) force_redraw = 255; } -void OperateCauldron(int pnum, int i, int sType) +void OperateCauldron(int pnum, int i, _sfx_id sType) { SetRndSeed(object[i]._oRndSeed); object[i]._oVar1 = FindValidShrine(i); diff --git a/Source/objects.h b/Source/objects.h index cb46f7224..e7861ec78 100644 --- a/Source/objects.h +++ b/Source/objects.h @@ -5,6 +5,8 @@ */ #pragma once +#include "textdat.h" + namespace devilution { #ifdef __cplusplus diff --git a/Source/portal.cpp b/Source/portal.cpp index f03dd0343..c4b28845e 100644 --- a/Source/portal.cpp +++ b/Source/portal.cpp @@ -41,7 +41,7 @@ void AddWarpMissile(int i, int x, int y) { int mi; - missiledata[MIS_TOWN].mlSFX = -1; + missiledata[MIS_TOWN].mlSFX = SFX_NONE; dMissile[x][y] = 0; mi = AddMissile(0, 0, x, y, 0, MIS_TOWN, TARGET_MONSTERS, i, 0, 0); diff --git a/Source/spelldat.h b/Source/spelldat.h index 58bf116be..91fa1fd75 100644 --- a/Source/spelldat.h +++ b/Source/spelldat.h @@ -5,6 +5,8 @@ */ #pragma once +#include "effects.h" + namespace devilution { #ifdef __cplusplus diff --git a/Source/textdat.h b/Source/textdat.h index 3d39780c6..dab7584f4 100644 --- a/Source/textdat.h +++ b/Source/textdat.h @@ -7,11 +7,400 @@ namespace devilution { -typedef struct TextDataStruct { +enum _speech_id : int16_t { + TEXT_KING1, + TEXT_KING2, + TEXT_KING3, + TEXT_KING4, + TEXT_KING5, + TEXT_KING6, + TEXT_KING7, + TEXT_KING8, + TEXT_KING9, + TEXT_KING10, + TEXT_KING11, + TEXT_BANNER1, + TEXT_BANNER2, + TEXT_BANNER3, + TEXT_BANNER4, + TEXT_BANNER5, + TEXT_BANNER6, + TEXT_BANNER7, + TEXT_BANNER8, + TEXT_BANNER9, + TEXT_BANNER10, + TEXT_BANNER11, + TEXT_BANNER12, + TEXT_VILE1, + TEXT_VILE2, + TEXT_VILE3, + TEXT_VILE4, + TEXT_VILE5, + TEXT_VILE6, + TEXT_VILE7, + TEXT_VILE8, + TEXT_VILE9, + TEXT_VILE10, + TEXT_VILE11, + TEXT_VILE12, + TEXT_VILE13, + TEXT_VILE14, + TEXT_POISON1, + TEXT_POISON2, + TEXT_POISON3, + TEXT_POISON4, + TEXT_POISON5, + TEXT_POISON6, + TEXT_POISON7, + TEXT_POISON8, + TEXT_POISON9, + TEXT_POISON10, + TEXT_BONE1, + TEXT_BONE2, + TEXT_BONE3, + TEXT_BONE4, + TEXT_BONE5, + TEXT_BONE6, + TEXT_BONE7, + TEXT_BONE8, + TEXT_BUTCH1, + TEXT_BUTCH2, + TEXT_BUTCH3, + TEXT_BUTCH4, + TEXT_BUTCH5, + TEXT_BUTCH6, + TEXT_BUTCH7, + TEXT_BUTCH8, + TEXT_BUTCH9, + TEXT_BUTCH10, + TEXT_BLIND1, + TEXT_BLIND2, + TEXT_BLIND3, + TEXT_BLIND4, + TEXT_BLIND5, + TEXT_BLIND6, + TEXT_BLIND7, + TEXT_BLIND8, + TEXT_VEIL1, + TEXT_VEIL2, + TEXT_VEIL3, + TEXT_VEIL4, + TEXT_VEIL5, + TEXT_VEIL6, + TEXT_VEIL7, + TEXT_VEIL8, + TEXT_VEIL9, + TEXT_VEIL10, + TEXT_VEIL11, + TEXT_ANVIL1, + TEXT_ANVIL2, + TEXT_ANVIL3, + TEXT_ANVIL4, + TEXT_ANVIL5, + TEXT_ANVIL6, + TEXT_ANVIL7, + TEXT_ANVIL8, + TEXT_ANVIL9, + TEXT_ANVIL10, + TEXT_BLOOD1, + TEXT_BLOOD2, + TEXT_BLOOD3, + TEXT_BLOOD4, + TEXT_BLOOD5, + TEXT_BLOOD6, + TEXT_BLOOD7, + TEXT_BLOOD8, + TEXT_WARLRD1, + TEXT_WARLRD2, + TEXT_WARLRD3, + TEXT_WARLRD4, + TEXT_WARLRD5, + TEXT_WARLRD6, + TEXT_WARLRD7, + TEXT_WARLRD8, + TEXT_WARLRD9, + TEXT_INFRA1, + TEXT_INFRA2, + TEXT_INFRA3, + TEXT_INFRA4, + TEXT_INFRA5, + TEXT_INFRA6, + TEXT_INFRA7, + TEXT_INFRA8, + TEXT_INFRA9, + TEXT_INFRA10, + TEXT_MUSH1, + TEXT_MUSH2, + TEXT_MUSH3, + TEXT_MUSH4, + TEXT_MUSH5, + TEXT_MUSH6, + TEXT_MUSH7, + TEXT_MUSH8, + TEXT_MUSH9, + TEXT_MUSH10, + TEXT_MUSH11, + TEXT_MUSH12, + TEXT_MUSH13, + TEXT_DOOM1, + TEXT_DOOM2, + TEXT_DOOM3, + TEXT_DOOM4, + TEXT_DOOM5, + TEXT_DOOM6, + TEXT_DOOM7, + TEXT_DOOM8, + TEXT_DOOM9, + TEXT_DOOM10, + TEXT_GARBUD1, + TEXT_GARBUD2, + TEXT_GARBUD3, + TEXT_GARBUD4, + TEXT_ZHAR1, + TEXT_ZHAR2, + TEXT_STORY1, + TEXT_STORY2, + TEXT_STORY3, + TEXT_STORY4, + TEXT_STORY5, + TEXT_STORY6, + TEXT_STORY7, + TEXT_STORY9, + TEXT_STORY10, + TEXT_STORY11, + TEXT_OGDEN1, + TEXT_OGDEN2, + TEXT_OGDEN3, + TEXT_OGDEN4, + TEXT_OGDEN5, + TEXT_OGDEN6, + TEXT_OGDEN8, + TEXT_OGDEN9, + TEXT_OGDEN10, + TEXT_PEPIN1, + TEXT_PEPIN2, + TEXT_PEPIN3, + TEXT_PEPIN4, + TEXT_PEPIN5, + TEXT_PEPIN6, + TEXT_PEPIN7, + TEXT_PEPIN9, + TEXT_PEPIN10, + TEXT_PEPIN11, + TEXT_GILLIAN1, + TEXT_GILLIAN2, + TEXT_GILLIAN3, + TEXT_GILLIAN4, + TEXT_GILLIAN5, + TEXT_GILLIAN6, + TEXT_GILLIAN7, + TEXT_GILLIAN9, + TEXT_GILLIAN10, + TEXT_GRISWOLD1, + TEXT_GRISWOLD2, + TEXT_GRISWOLD3, + TEXT_GRISWOLD4, + TEXT_GRISWOLD5, + TEXT_GRISWOLD6, + TEXT_GRISWOLD7, + TEXT_GRISWOLD8, + TEXT_GRISWOLD9, + TEXT_GRISWOLD10, + TEXT_GRISWOLD12, + TEXT_GRISWOLD13, + TEXT_FARNHAM1, + TEXT_FARNHAM2, + TEXT_FARNHAM3, + TEXT_FARNHAM4, + TEXT_FARNHAM5, + TEXT_FARNHAM6, + TEXT_FARNHAM8, + TEXT_FARNHAM9, + TEXT_FARNHAM10, + TEXT_FARNHAM11, + TEXT_FARNHAM12, + TEXT_FARNHAM13, + TEXT_ADRIA1, + TEXT_ADRIA2, + TEXT_ADRIA3, + TEXT_ADRIA4, + TEXT_ADRIA5, + TEXT_ADRIA6, + TEXT_ADRIA7, + TEXT_ADRIA8, + TEXT_ADRIA9, + TEXT_ADRIA10, + TEXT_ADRIA12, + TEXT_ADRIA13, + TEXT_WIRT1, + TEXT_WIRT2, + TEXT_WIRT3, + TEXT_WIRT4, + TEXT_WIRT5, + TEXT_WIRT6, + TEXT_WIRT7, + TEXT_WIRT8, + TEXT_WIRT9, + TEXT_WIRT11, + TEXT_WIRT12, + TEXT_BONER, + TEXT_BLOODY, + TEXT_BLINDING, + TEXT_BLOODWAR, + TEXT_MBONER, + TEXT_MBLOODY, + TEXT_MBLINDING, + TEXT_MBLOODWAR, + TEXT_RBONER, + TEXT_RBLOODY, + TEXT_RBLINDING, + TEXT_RBLOODWAR, + TEXT_COW1, + TEXT_COW2, + TEXT_BOOK11, + TEXT_BOOK12, + TEXT_BOOK13, + TEXT_BOOK21, + TEXT_BOOK22, + TEXT_BOOK23, + TEXT_BOOK31, + TEXT_BOOK32, + TEXT_BOOK33, + TEXT_INTRO, + TEXT_HBONER, + TEXT_HBLOODY, + TEXT_HBLINDING, + TEXT_HBLOODWAR, + TEXT_BBONER, + TEXT_BBLOODY, + TEXT_BBLINDING, + TEXT_BBLOODWAR, + TEXT_GRAVE1, + TEXT_GRAVE2, + TEXT_GRAVE3, + TEXT_GRAVE4, + TEXT_GRAVE5, + TEXT_GRAVE6, + TEXT_GRAVE7, + TEXT_GRAVE8, + TEXT_GRAVE9, + TEXT_GRAVE10, + TEXT_FARMER1, + TEXT_FARMER2, + TEXT_FARMER3, + TEXT_FARMER4, + TEXT_FARMER5, + TEXT_GIRL1, + TEXT_GIRL2, + TEXT_GIRL3, + TEXT_GIRL4, + TEXT_DEFILER1, + TEXT_DEFILER2, + TEXT_DEFILER3, + TEXT_DEFILER4, + TEXT_DEFILER5, + TEXT_NAKRUL1, + TEXT_NAKRUL2, + TEXT_NAKRUL3, + TEXT_NAKRUL4, + TEXT_NAKRUL5, + TEXT_CORNSTN, + TEXT_JERSEY1, + TEXT_JERSEY2, + TEXT_JERSEY3, + TEXT_JERSEY4, + TEXT_JERSEY5, + TEXT_JERSEY6, + TEXT_JERSEY7, + TEXT_JERSEY8, + TEXT_JERSEY9, + TEXT_TRADER, + TEXT_FARMER6, + TEXT_FARMER7, + TEXT_FARMER8, + TEXT_FARMER9, + TEXT_FARMER10, + TEXT_JERSEY10, + TEXT_JERSEY11, + TEXT_JERSEY12, + TEXT_JERSEY13, + TEXT_SKLJRN, + TEXT_BOOK4, + TEXT_BOOK5, + TEXT_BOOK6, + TEXT_BOOK7, + TEXT_BOOK8, + TEXT_BOOK9, + TEXT_BOOKA, + TEXT_BOOKB, + TEXT_BOOKC, + TEXT_OBOOKA, + TEXT_OBOOKB, + TEXT_OBOOKC, + TEXT_MBOOKA, + TEXT_MBOOKB, + TEXT_MBOOKC, + TEXT_RBOOKA, + TEXT_RBOOKB, + TEXT_RBOOKC, + TEXT_BBOOKA, + TEXT_BBOOKB, + TEXT_BBOOKC, + /* + TEXT_DEADGUY, + TEXT_FARNHAM14, + TEXT_FARNHAM15, + TEXT_FARNHAM16, + TEXT_FARNHAM17, + TEXT_FARNHAM18, + TEXT_FARNHAM19, + TEXT_FARNHAM20, + TEXT_FARNHAM21, + TEXT_FARNHAM22, + TEXT_GILLIAN11, + TEXT_GILLIAN12, + TEXT_GILLIAN13, + TEXT_GILLIAN14, + TEXT_GILLIAN15, + TEXT_GILLIAN16, + TEXT_GILLIAN17, + TEXT_GILLIAN18, + TEXT_GILLIAN19, + TEXT_GILLIAN20, + TEXT_GILLIAN21, + TEXT_GILLIAN22, + TEXT_GILLIAN23, + TEXT_GILLIAN24, + TEXT_GILLIAN25, + TEXT_GILLIAN26, + TEXT_PEPIN12, + TEXT_PEPIN13, + TEXT_PEPIN14, + TEXT_PEPIN15, + TEXT_PEPIN16, + TEXT_PEPIN17, + TEXT_PEPIN18, + TEXT_PEPIN19, + TEXT_PEPIN20, + TEXT_PEPIN21, + TEXT_PEPIN22, + TEXT_PEPIN23, + TEXT_PEPIN24, + TEXT_PEPIN25, + TEXT_PEPIN26, + TEXT_PEPIN27, + TEXT_PEPIN28, + TEXT_PEPIN29, + TEXT_PEPIN30, + */ + TEXT_NONE = -1, +}; + +struct TextDataStruct { const char *txtstr; bool scrlltxt; _sfx_id sfxnr; -} TextDataStruct; +}; extern const TextDataStruct alltext[]; diff --git a/Source/towners.cpp b/Source/towners.cpp index 4e60198e0..506107346 100644 --- a/Source/towners.cpp +++ b/Source/towners.cpp @@ -21,7 +21,7 @@ TownerStruct towner[NUM_TOWNERS]; * ref: enum _sfx_id * ref: enum plr_class */ -const int snSFX[3][NUM_CLASSES] = { +const _sfx_id snSFX[3][NUM_CLASSES] = { { PS_WARR52, PS_ROGUE52, PS_MAGE52, PS_MONK52, PS_ROGUE52, PS_WARR52 }, // BUGFIX: add warrior sounds for barbarian instead of 0 - walk sound (fixed) { PS_WARR49, PS_ROGUE49, PS_MAGE49, PS_MONK49, PS_ROGUE49, PS_WARR49 }, { PS_WARR50, PS_ROGUE50, PS_MAGE50, PS_MONK50, PS_ROGUE50, PS_WARR50 }, @@ -131,7 +131,7 @@ _speech_id Qtalklist[NUM_TOWNER_TYPES][MAXQUESTS] = { // clang-format on }; /** Specifies the active sound effect ID for interacting with cows. */ -int CowPlaying = -1; +_sfx_id CowPlaying = SFX_NONE; static void CowSFX(int pnum) { diff --git a/enums.h b/enums.h index 35d5a8839..e32d86b09 100644 --- a/enums.h +++ b/enums.h @@ -8,1156 +8,6 @@ namespace devilution { -typedef enum _sfx_id : int16_t { - PS_WALK1, - PS_WALK2, - PS_WALK3, - PS_WALK4, - PS_BFIRE, - PS_FMAG, - PS_TMAG, - PS_LGHIT, - PS_LGHIT1, - PS_SWING, - PS_SWING2, - PS_DEAD, - IS_STING1, - IS_FBALLBOW, - IS_QUESTDN, - IS_ARMRFKD, - IS_BARLFIRE, - IS_BARREL, - IS_POPPOP8, - IS_POPPOP5, - IS_POPPOP3, - IS_POPPOP2, - IS_BHIT, - IS_BHIT1, - IS_CHEST, - IS_DOORCLOS, - IS_DOOROPEN, - IS_FANVL, - IS_FAXE, - IS_FBLST, - IS_FBODY, - IS_FBOOK, - IS_FBOW, - IS_FCAP, - IS_FHARM, - IS_FLARM, - IS_FMAG, - IS_FMAG1, - IS_FMUSH, - IS_FPOT, - IS_FRING, - IS_FROCK, - IS_FSCRL, - IS_FSHLD, - IS_FSIGN, - IS_FSTAF, - IS_FSWOR, - IS_GOLD, - IS_HLMTFKD, - IS_IANVL, - IS_IAXE, - IS_IBLST, - IS_IBODY, - IS_IBOOK, - IS_IBOW, - IS_ICAP, - IS_IGRAB, - IS_IHARM, - IS_ILARM, - IS_IMUSH, - IS_IPOT, - IS_IRING, - IS_IROCK, - IS_ISCROL, - IS_ISHIEL, - IS_ISIGN, - IS_ISTAF, - IS_ISWORD, - IS_LEVER, - IS_MAGIC, - IS_MAGIC1, - IS_RBOOK, - IS_SARC, - IS_SHLDFKD, - IS_SWRDFKD, - IS_TITLEMOV, - IS_TITLSLCT, - SFX_SILENCE, - IS_TRAP, - IS_CAST1, - IS_CAST10, - IS_CAST12, - IS_CAST2, - IS_CAST3, - IS_CAST4, - IS_CAST5, - IS_CAST6, - IS_CAST7, - IS_CAST8, - IS_CAST9, - LS_HEALING, - IS_REPAIR, - LS_ACID, - LS_ACIDS, - LS_APOC, - LS_ARROWALL, - LS_BLODBOIL, - LS_BLODSTAR, - LS_BLSIMPT, - LS_BONESP, - LS_BSIMPCT, - LS_CALDRON, - LS_CBOLT, - LS_CHLTNING, - LS_DSERP, - LS_ELECIMP1, - LS_ELEMENTL, - LS_ETHEREAL, - LS_FBALL, - LS_FBOLT1, - LS_FBOLT2, - LS_FIRIMP1, - LS_FIRIMP2, - LS_FLAMWAVE, - LS_FLASH, - LS_FOUNTAIN, - LS_GOLUM, - LS_GOLUMDED, - LS_GSHRINE, - LS_GUARD, - LS_GUARDLAN, - LS_HOLYBOLT, - LS_HYPER, - LS_INFRAVIS, - LS_INVISIBL, - LS_INVPOT, - LS_LNING1, - LS_LTNING, - LS_MSHIELD, - LS_NESTXPLD, - LS_NOVA, - LS_PORTAL, - LS_PUDDLE, - LS_RESUR, - LS_SCURSE, - LS_SCURIMP, - LS_SENTINEL, - LS_SHATTER, - LS_SOULFIRE, - LS_SPOUTLOP, - LS_SPOUTSTR, - LS_STORM, - LS_TRAPDIS, - LS_TELEPORT, - LS_VTHEFT, - LS_WALLLOOP, - LS_WALLSTRT, - LS_LMAG, - TSFX_BMAID1, - TSFX_BMAID2, - TSFX_BMAID3, - TSFX_BMAID4, - TSFX_BMAID5, - TSFX_BMAID6, - TSFX_BMAID7, - TSFX_BMAID8, - TSFX_BMAID9, - TSFX_BMAID10, - TSFX_BMAID11, - TSFX_BMAID12, - TSFX_BMAID13, - TSFX_BMAID14, - TSFX_BMAID15, - TSFX_BMAID16, - TSFX_BMAID17, - TSFX_BMAID18, - TSFX_BMAID19, - TSFX_BMAID20, - TSFX_BMAID21, - TSFX_BMAID22, - TSFX_BMAID23, - TSFX_BMAID24, - TSFX_BMAID25, - TSFX_BMAID26, - TSFX_BMAID27, - TSFX_BMAID28, - TSFX_BMAID29, - TSFX_BMAID30, - TSFX_BMAID31, - TSFX_BMAID32, - TSFX_BMAID33, - TSFX_BMAID34, - TSFX_BMAID35, - TSFX_BMAID36, - TSFX_BMAID37, - TSFX_BMAID38, - TSFX_BMAID39, - TSFX_BMAID40, - TSFX_SMITH1, - TSFX_SMITH2, - TSFX_SMITH3, - TSFX_SMITH4, - TSFX_SMITH5, - TSFX_SMITH6, - TSFX_SMITH7, - TSFX_SMITH8, - TSFX_SMITH9, - TSFX_SMITH10, - TSFX_SMITH11, - TSFX_SMITH12, - TSFX_SMITH13, - TSFX_SMITH14, - TSFX_SMITH15, - TSFX_SMITH16, - TSFX_SMITH17, - TSFX_SMITH18, - TSFX_SMITH19, - TSFX_SMITH20, - TSFX_SMITH21, - TSFX_SMITH22, - TSFX_SMITH23, - TSFX_SMITH24, - TSFX_SMITH25, - TSFX_SMITH26, - TSFX_SMITH27, - TSFX_SMITH28, - TSFX_SMITH29, - TSFX_SMITH30, - TSFX_SMITH31, - TSFX_SMITH32, - TSFX_SMITH33, - TSFX_SMITH34, - TSFX_SMITH35, - TSFX_SMITH36, - TSFX_SMITH37, - TSFX_SMITH38, - TSFX_SMITH39, - TSFX_SMITH40, - TSFX_SMITH41, - TSFX_SMITH42, - TSFX_SMITH43, - TSFX_SMITH44, - TSFX_SMITH45, - TSFX_SMITH46, - TSFX_SMITH47, - TSFX_SMITH48, - TSFX_SMITH49, - TSFX_SMITH50, - TSFX_SMITH51, - TSFX_SMITH52, - TSFX_SMITH53, - TSFX_SMITH54, - TSFX_SMITH55, - TSFX_SMITH56, - TSFX_COW1, - TSFX_COW2, -/* - TSFX_COW3, - TSFX_COW4, - TSFX_COW5, - TSFX_COW6, -*/ - TSFX_COW7, - TSFX_COW8, - TSFX_DEADGUY, - TSFX_DRUNK1, - TSFX_DRUNK2, - TSFX_DRUNK3, - TSFX_DRUNK4, - TSFX_DRUNK5, - TSFX_DRUNK6, - TSFX_DRUNK7, - TSFX_DRUNK8, - TSFX_DRUNK9, - TSFX_DRUNK10, - TSFX_DRUNK11, - TSFX_DRUNK12, - TSFX_DRUNK13, - TSFX_DRUNK14, - TSFX_DRUNK15, - TSFX_DRUNK16, - TSFX_DRUNK17, - TSFX_DRUNK18, - TSFX_DRUNK19, - TSFX_DRUNK20, - TSFX_DRUNK21, - TSFX_DRUNK22, - TSFX_DRUNK23, - TSFX_DRUNK24, - TSFX_DRUNK25, - TSFX_DRUNK26, - TSFX_DRUNK27, - TSFX_DRUNK28, - TSFX_DRUNK29, - TSFX_DRUNK30, - TSFX_DRUNK31, - TSFX_DRUNK32, - TSFX_DRUNK33, - TSFX_DRUNK34, - TSFX_DRUNK35, - TSFX_HEALER1, - TSFX_HEALER2, - TSFX_HEALER3, - TSFX_HEALER4, - TSFX_HEALER5, - TSFX_HEALER6, - TSFX_HEALER7, - TSFX_HEALER8, - TSFX_HEALER9, - TSFX_HEALER10, - TSFX_HEALER11, - TSFX_HEALER12, - TSFX_HEALER13, - TSFX_HEALER14, - TSFX_HEALER15, - TSFX_HEALER16, - TSFX_HEALER17, - TSFX_HEALER18, - TSFX_HEALER19, - TSFX_HEALER20, - TSFX_HEALER21, - TSFX_HEALER22, - TSFX_HEALER23, - TSFX_HEALER24, - TSFX_HEALER25, - TSFX_HEALER26, - TSFX_HEALER27, - TSFX_HEALER28, - TSFX_HEALER29, - TSFX_HEALER30, - TSFX_HEALER31, - TSFX_HEALER32, - TSFX_HEALER33, - TSFX_HEALER34, - TSFX_HEALER35, - TSFX_HEALER36, - TSFX_HEALER37, - TSFX_HEALER38, - TSFX_HEALER39, - TSFX_HEALER40, - TSFX_HEALER41, - TSFX_HEALER42, - TSFX_HEALER43, - TSFX_HEALER44, - TSFX_HEALER45, - TSFX_HEALER46, - TSFX_HEALER47, - TSFX_PEGBOY1, - TSFX_PEGBOY2, - TSFX_PEGBOY3, - TSFX_PEGBOY4, - TSFX_PEGBOY5, - TSFX_PEGBOY6, - TSFX_PEGBOY7, - TSFX_PEGBOY8, - TSFX_PEGBOY9, - TSFX_PEGBOY10, - TSFX_PEGBOY11, - TSFX_PEGBOY12, - TSFX_PEGBOY13, - TSFX_PEGBOY14, - TSFX_PEGBOY15, - TSFX_PEGBOY16, - TSFX_PEGBOY17, - TSFX_PEGBOY18, - TSFX_PEGBOY19, - TSFX_PEGBOY20, - TSFX_PEGBOY21, - TSFX_PEGBOY22, - TSFX_PEGBOY23, - TSFX_PEGBOY24, - TSFX_PEGBOY25, - TSFX_PEGBOY26, - TSFX_PEGBOY27, - TSFX_PEGBOY28, - TSFX_PEGBOY29, - TSFX_PEGBOY30, - TSFX_PEGBOY31, - TSFX_PEGBOY32, - TSFX_PEGBOY33, - TSFX_PEGBOY34, - TSFX_PEGBOY35, - TSFX_PEGBOY36, - TSFX_PEGBOY37, - TSFX_PEGBOY38, - TSFX_PEGBOY39, - TSFX_PEGBOY40, - TSFX_PEGBOY41, - TSFX_PEGBOY42, - TSFX_PEGBOY43, - TSFX_PRIEST0, - TSFX_PRIEST1, - TSFX_PRIEST2, - TSFX_PRIEST3, - TSFX_PRIEST4, - TSFX_PRIEST5, - TSFX_PRIEST6, - TSFX_PRIEST7, - TSFX_STORY0, - TSFX_STORY1, - TSFX_STORY2, - TSFX_STORY3, - TSFX_STORY4, - TSFX_STORY5, - TSFX_STORY6, - TSFX_STORY7, - TSFX_STORY8, - TSFX_STORY9, - TSFX_STORY10, - TSFX_STORY11, - TSFX_STORY12, - TSFX_STORY13, - TSFX_STORY14, - TSFX_STORY15, - TSFX_STORY16, - TSFX_STORY17, - TSFX_STORY18, - TSFX_STORY19, - TSFX_STORY20, - TSFX_STORY21, - TSFX_STORY22, - TSFX_STORY23, - TSFX_STORY24, - TSFX_STORY25, - TSFX_STORY26, - TSFX_STORY27, - TSFX_STORY28, - TSFX_STORY29, - TSFX_STORY30, - TSFX_STORY31, - TSFX_STORY32, - TSFX_STORY33, - TSFX_STORY34, - TSFX_STORY35, - TSFX_STORY36, - TSFX_STORY37, - TSFX_STORY38, - TSFX_TAVERN0, - TSFX_TAVERN1, - TSFX_TAVERN2, - TSFX_TAVERN3, - TSFX_TAVERN4, - TSFX_TAVERN5, - TSFX_TAVERN6, - TSFX_TAVERN7, - TSFX_TAVERN8, - TSFX_TAVERN9, - TSFX_TAVERN10, - TSFX_TAVERN11, - TSFX_TAVERN12, - TSFX_TAVERN13, - TSFX_TAVERN14, - TSFX_TAVERN15, - TSFX_TAVERN16, - TSFX_TAVERN17, - TSFX_TAVERN18, - TSFX_TAVERN19, - TSFX_TAVERN20, - TSFX_TAVERN21, - TSFX_TAVERN22, - TSFX_TAVERN23, - TSFX_TAVERN24, - TSFX_TAVERN25, - TSFX_TAVERN26, - TSFX_TAVERN27, - TSFX_TAVERN28, - TSFX_TAVERN29, - TSFX_TAVERN30, - TSFX_TAVERN31, - TSFX_TAVERN32, - TSFX_TAVERN33, - TSFX_TAVERN34, - TSFX_TAVERN35, - TSFX_TAVERN36, - TSFX_TAVERN37, - TSFX_TAVERN38, - TSFX_TAVERN39, - TSFX_TAVERN40, - TSFX_TAVERN41, - TSFX_TAVERN42, - TSFX_TAVERN43, - TSFX_TAVERN44, - TSFX_TAVERN45, - TSFX_WITCH1, - TSFX_WITCH2, - TSFX_WITCH3, - TSFX_WITCH4, - TSFX_WITCH5, - TSFX_WITCH6, - TSFX_WITCH7, - TSFX_WITCH8, - TSFX_WITCH9, - TSFX_WITCH10, - TSFX_WITCH11, - TSFX_WITCH12, - TSFX_WITCH13, - TSFX_WITCH14, - TSFX_WITCH15, - TSFX_WITCH16, - TSFX_WITCH17, - TSFX_WITCH18, - TSFX_WITCH19, - TSFX_WITCH20, - TSFX_WITCH21, - TSFX_WITCH22, - TSFX_WITCH23, - TSFX_WITCH24, - TSFX_WITCH25, - TSFX_WITCH26, - TSFX_WITCH27, - TSFX_WITCH28, - TSFX_WITCH29, - TSFX_WITCH30, - TSFX_WITCH31, - TSFX_WITCH32, - TSFX_WITCH33, - TSFX_WITCH34, - TSFX_WITCH35, - TSFX_WITCH36, - TSFX_WITCH37, - TSFX_WITCH38, - TSFX_WITCH39, - TSFX_WITCH40, - TSFX_WITCH41, - TSFX_WITCH42, - TSFX_WITCH43, - TSFX_WITCH44, - TSFX_WITCH45, - TSFX_WITCH46, - TSFX_WITCH47, - TSFX_WITCH48, - TSFX_WITCH49, - TSFX_WITCH50, - TSFX_WOUND, - PS_MAGE1, - PS_MAGE2, - PS_MAGE3, - PS_MAGE4, - PS_MAGE5, - PS_MAGE6, - PS_MAGE7, - PS_MAGE8, - PS_MAGE9, - PS_MAGE10, - PS_MAGE11, - PS_MAGE12, - PS_MAGE13, - PS_MAGE14, - PS_MAGE15, - PS_MAGE16, - PS_MAGE17, - PS_MAGE18, - PS_MAGE19, - PS_MAGE20, - PS_MAGE21, - PS_MAGE22, - PS_MAGE23, - PS_MAGE24, - PS_MAGE25, - PS_MAGE26, - PS_MAGE27, - PS_MAGE28, - PS_MAGE29, - PS_MAGE30, - PS_MAGE31, - PS_MAGE32, - PS_MAGE33, - PS_MAGE34, - PS_MAGE35, - PS_MAGE36, - PS_MAGE37, - PS_MAGE38, - PS_MAGE39, - PS_MAGE40, - PS_MAGE41, - PS_MAGE42, - PS_MAGE43, - PS_MAGE44, - PS_MAGE45, - PS_MAGE46, - PS_MAGE47, - PS_MAGE48, - PS_MAGE49, - PS_MAGE50, - PS_MAGE51, - PS_MAGE52, - PS_MAGE53, - PS_MAGE54, - PS_MAGE55, - PS_MAGE56, - PS_MAGE57, - PS_MAGE58, - PS_MAGE59, - PS_MAGE60, - PS_MAGE61, - PS_MAGE62, - PS_MAGE63, - PS_MAGE64, - PS_MAGE65, - PS_MAGE66, - PS_MAGE67, - PS_MAGE68, - PS_MAGE69, - PS_MAGE69B, - PS_MAGE70, - PS_MAGE71, - PS_MAGE72, - PS_MAGE73, - PS_MAGE74, - PS_MAGE75, - PS_MAGE76, - PS_MAGE77, - PS_MAGE78, - PS_MAGE79, - PS_MAGE80, - PS_MAGE81, - PS_MAGE82, - PS_MAGE83, - PS_MAGE84, - PS_MAGE85, - PS_MAGE86, - PS_MAGE87, - PS_MAGE88, - PS_MAGE89, - PS_MAGE90, - PS_MAGE91, - PS_MAGE92, - PS_MAGE93, - PS_MAGE94, - PS_MAGE95, - PS_MAGE96, - PS_MAGE97, - PS_MAGE98, - PS_MAGE99, - PS_MAGE100, - PS_MAGE101, - PS_MAGE102, - PS_ROGUE1, - PS_ROGUE2, - PS_ROGUE3, - PS_ROGUE4, - PS_ROGUE5, - PS_ROGUE6, - PS_ROGUE7, - PS_ROGUE8, - PS_ROGUE9, - PS_ROGUE10, - PS_ROGUE11, - PS_ROGUE12, - PS_ROGUE13, - PS_ROGUE14, - PS_ROGUE15, - PS_ROGUE16, - PS_ROGUE17, - PS_ROGUE18, - PS_ROGUE19, - PS_ROGUE20, - PS_ROGUE21, - PS_ROGUE22, - PS_ROGUE23, - PS_ROGUE24, - PS_ROGUE25, - PS_ROGUE26, - PS_ROGUE27, - PS_ROGUE28, - PS_ROGUE29, - PS_ROGUE30, - PS_ROGUE31, - PS_ROGUE32, - PS_ROGUE33, - PS_ROGUE34, - PS_ROGUE35, - PS_ROGUE36, - PS_ROGUE37, - PS_ROGUE38, - PS_ROGUE39, - PS_ROGUE40, - PS_ROGUE41, - PS_ROGUE42, - PS_ROGUE43, - PS_ROGUE44, - PS_ROGUE45, - PS_ROGUE46, - PS_ROGUE47, - PS_ROGUE48, - PS_ROGUE49, - PS_ROGUE50, - PS_ROGUE51, - PS_ROGUE52, - PS_ROGUE53, - PS_ROGUE54, - PS_ROGUE55, - PS_ROGUE56, - PS_ROGUE57, - PS_ROGUE58, - PS_ROGUE59, - PS_ROGUE60, - PS_ROGUE61, - PS_ROGUE62, - PS_ROGUE63, - PS_ROGUE64, - PS_ROGUE65, - PS_ROGUE66, - PS_ROGUE67, - PS_ROGUE68, - PS_ROGUE69, - PS_ROGUE69B, - PS_ROGUE70, - PS_ROGUE71, - PS_ROGUE72, - PS_ROGUE73, - PS_ROGUE74, - PS_ROGUE75, - PS_ROGUE76, - PS_ROGUE77, - PS_ROGUE78, - PS_ROGUE79, - PS_ROGUE80, - PS_ROGUE81, - PS_ROGUE82, - PS_ROGUE83, - PS_ROGUE84, - PS_ROGUE85, - PS_ROGUE86, - PS_ROGUE87, - PS_ROGUE88, - PS_ROGUE89, - PS_ROGUE90, - PS_ROGUE91, - PS_ROGUE92, - PS_ROGUE93, - PS_ROGUE94, - PS_ROGUE95, - PS_ROGUE96, - PS_ROGUE97, - PS_ROGUE98, - PS_ROGUE99, - PS_ROGUE100, - PS_ROGUE101, - PS_ROGUE102, - PS_WARR1, - PS_WARR2, - PS_WARR3, - PS_WARR4, - PS_WARR5, - PS_WARR6, - PS_WARR7, - PS_WARR8, - PS_WARR9, - PS_WARR10, - PS_WARR11, - PS_WARR12, - PS_WARR13, - PS_WARR14, - PS_WARR14B, - PS_WARR14C, - PS_WARR15, - PS_WARR15B, - PS_WARR15C, - PS_WARR16, - PS_WARR16B, - PS_WARR16C, - PS_WARR17, - PS_WARR18, - PS_WARR19, - PS_WARR20, - PS_WARR21, - PS_WARR22, - PS_WARR23, - PS_WARR24, - PS_WARR25, - PS_WARR26, - PS_WARR27, - PS_WARR28, - PS_WARR29, - PS_WARR30, - PS_WARR31, - PS_WARR32, - PS_WARR33, - PS_WARR34, - PS_WARR35, - PS_WARR36, - PS_WARR37, - PS_WARR38, - PS_WARR39, - PS_WARR40, - PS_WARR41, - PS_WARR42, - PS_WARR43, - PS_WARR44, - PS_WARR45, - PS_WARR46, - PS_WARR47, - PS_WARR48, - PS_WARR49, - PS_WARR50, - PS_WARR51, - PS_WARR52, - PS_WARR53, - PS_WARR54, - PS_WARR55, - PS_WARR56, - PS_WARR57, - PS_WARR58, - PS_WARR59, - PS_WARR60, - PS_WARR61, - PS_WARR62, - PS_WARR63, - PS_WARR64, - PS_WARR65, - PS_WARR66, - PS_WARR67, - PS_WARR68, - PS_WARR69, - PS_WARR69B, - PS_WARR70, - PS_WARR71, - PS_WARR72, - PS_WARR73, - PS_WARR74, - PS_WARR75, - PS_WARR76, - PS_WARR77, - PS_WARR78, - PS_WARR79, - PS_WARR80, - PS_WARR81, - PS_WARR82, - PS_WARR83, - PS_WARR84, - PS_WARR85, - PS_WARR86, - PS_WARR87, - PS_WARR88, - PS_WARR89, - PS_WARR90, - PS_WARR91, - PS_WARR92, - PS_WARR93, - PS_WARR94, - PS_WARR95, - PS_WARR95B, - PS_WARR95C, - PS_WARR95D, - PS_WARR95E, - PS_WARR95F, - PS_WARR96B, - PS_WARR97, - PS_WARR98, - PS_WARR99, - PS_WARR100, - PS_WARR101, - PS_WARR102, - PS_MONK1, - PS_MONK2, - PS_MONK3, - PS_MONK4, - PS_MONK5, - PS_MONK6, - PS_MONK7, - PS_MONK8, - PS_MONK9, - PS_MONK10, - PS_MONK11, - PS_MONK12, - PS_MONK13, - PS_MONK14, - PS_MONK15, - PS_MONK16, - PS_MONK17, - PS_MONK18, - PS_MONK19, - PS_MONK20, - PS_MONK21, - PS_MONK22, - PS_MONK23, - PS_MONK24, - PS_MONK25, - PS_MONK26, - PS_MONK27, - PS_MONK28, - PS_MONK29, - PS_MONK30, - PS_MONK31, - PS_MONK32, - PS_MONK33, - PS_MONK34, - PS_MONK35, - PS_MONK36, - PS_MONK37, - PS_MONK38, - PS_MONK39, - PS_MONK40, - PS_MONK41, - PS_MONK42, - PS_MONK43, - PS_MONK44, - PS_MONK45, - PS_MONK46, - PS_MONK47, - PS_MONK48, - PS_MONK49, - PS_MONK50, - PS_MONK51, - PS_MONK52, - PS_MONK53, - PS_MONK54, - PS_MONK55, - PS_MONK56, - PS_MONK57, - PS_MONK58, - PS_MONK59, - PS_MONK60, - PS_MONK61, - PS_MONK62, - PS_MONK63, - PS_MONK64, - PS_MONK65, - PS_MONK66, - PS_MONK67, - PS_MONK68, - PS_MONK69, - PS_MONK69B, - PS_MONK70, - PS_MONK71, - PS_MONK72, - PS_MONK73, - PS_MONK74, - PS_MONK75, - PS_MONK76, - PS_MONK77, - PS_MONK78, - PS_MONK79, - PS_MONK80, - PS_MONK81, - PS_MONK82, - PS_MONK83, - PS_MONK84, - PS_MONK85, - PS_MONK86, - PS_MONK87, - PS_MONK88, - PS_MONK89, - PS_MONK90, - PS_MONK91, - PS_MONK92, - PS_MONK93, - PS_MONK94, - PS_MONK95, - PS_MONK96, - PS_MONK97, - PS_MONK98, - PS_MONK99, - PS_MONK100, - PS_MONK101, - PS_MONK102, - PS_NAR1, - PS_NAR2, - PS_NAR3, - PS_NAR4, - PS_NAR5, - PS_NAR6, - PS_NAR7, - PS_NAR8, - PS_NAR9, - PS_DIABLVLINT, - USFX_CLEAVER, - USFX_GARBUD1, - USFX_GARBUD2, - USFX_GARBUD3, - USFX_GARBUD4, - USFX_IZUAL1, - USFX_LACH1, - USFX_LACH2, - USFX_LACH3, - USFX_LAZ1, - USFX_LAZ2, - USFX_SKING1, - USFX_SNOT1, - USFX_SNOT2, - USFX_SNOT3, - USFX_WARLRD1, - USFX_WLOCK1, - USFX_ZHAR1, - USFX_ZHAR2, - USFX_DIABLOD, - TSFX_FARMER1, - TSFX_FARMER2, - TSFX_FARMER2A, - TSFX_FARMER3, - TSFX_FARMER4, - TSFX_FARMER5, - TSFX_FARMER6, - TSFX_FARMER7, - TSFX_FARMER8, - TSFX_FARMER9, - TSFX_TEDDYBR1, - TSFX_TEDDYBR2, - TSFX_TEDDYBR3, - TSFX_TEDDYBR4, - USFX_DEFILER1, - USFX_DEFILER2, - USFX_DEFILER3, - USFX_DEFILER4, - USFX_DEFILER8, - USFX_DEFILER6, - USFX_DEFILER7, - USFX_NAKRUL1, - USFX_NAKRUL2, - USFX_NAKRUL3, - USFX_NAKRUL4, - USFX_NAKRUL5, - USFX_NAKRUL6, - PS_NARATR3, - TSFX_COWSUT1, - TSFX_COWSUT2, - TSFX_COWSUT3, - TSFX_COWSUT4, - TSFX_COWSUT4A, - TSFX_COWSUT5, - TSFX_COWSUT6, - TSFX_COWSUT7, - TSFX_COWSUT8, - TSFX_COWSUT9, - TSFX_COWSUT10, - TSFX_COWSUT11, - TSFX_COWSUT12, - USFX_SKLJRN1, - PS_NARATR6, - PS_NARATR7, - PS_NARATR8, - PS_NARATR5, - PS_NARATR9, - PS_NARATR4, - TSFX_TRADER1, - IS_CROPEN, - IS_CRCLOS, - SFX_NONE = -1, -} _sfx_id; - -typedef enum sfx_flag : uint8_t { - sfx_STREAM = 0x01, - sfx_MISC = 0x02, - sfx_UI = 0x04, - sfx_MONK = 0x08, - sfx_ROGUE = 0x10, - sfx_WARRIOR = 0x20, - sfx_SORCERER = 0x40, - sfx_HELLFIRE = 0x80, -} sfx_flag; - -typedef enum missile_graphic_id : uint8_t { - MFILE_ARROWS, - MFILE_FIREBA, - MFILE_GUARD, - MFILE_LGHNING, - MFILE_FIREWAL, - MFILE_MAGBLOS, - MFILE_PORTAL, - MFILE_BLUEXFR, - MFILE_BLUEXBK, - MFILE_MANASHLD, - MFILE_BLOOD, - MFILE_BONE, - MFILE_METLHIT, - MFILE_FARROW, - MFILE_DOOM, - MFILE_0F, - MFILE_BLODBUR, - MFILE_NEWEXP, - MFILE_SHATTER1, - MFILE_BIGEXP, - MFILE_INFERNO, - MFILE_THINLGHT, - MFILE_FLARE, - MFILE_FLAREEXP, - MFILE_MAGBALL, - MFILE_KRULL, - MFILE_MINILTNG, - MFILE_HOLY, - MFILE_HOLYEXPL, - MFILE_LARROW, - MFILE_FIRARWEX, - MFILE_ACIDBF, - MFILE_ACIDSPLA, - MFILE_ACIDPUD, - MFILE_ETHRSHLD, - MFILE_FIRERUN, - MFILE_RESSUR1, - MFILE_SKLBALL, - MFILE_RPORTAL, - MFILE_FIREPLAR, - MFILE_SCUBMISB, - MFILE_SCBSEXPB, - MFILE_SCUBMISC, - MFILE_SCBSEXPC, - MFILE_SCUBMISD, - MFILE_SCBSEXPD, - MFILE_SPAWNS, - MFILE_REFLECT, - MFILE_LICH, - MFILE_MSBLA, - MFILE_NECROMORB, - MFILE_ARCHLICH, - MFILE_RUNE, - MFILE_EXYEL2, - MFILE_EXBL2, - MFILE_EXRED3, - MFILE_BONEDEMON, - MFILE_EXORA1, - MFILE_EXBL3, - MFILE_NONE, // BUGFIX: should be `MFILE_NONE = MFILE_SCBSEXPD+1`, i.e. MFILE_NULL, since there would otherwise be an out-of-bounds in SetMissAnim when accessing misfiledata for any of the missiles that have MFILE_NONE as mFileNum in missiledata. (fixed) -} missile_graphic_id; - -typedef enum _artfonts : uint8_t { - AF_SMALL = 0, - AF_SMALLGRAY = 1, - AF_MED = 2, - AF_MEDGRAY = 3, - AF_BIG = 4, - AF_BIGGRAY = 5, - AF_HUGE = 6, - AF_HUGEGRAY = 7, -} _artfonts; - -// this enum contains indexes from UniqMonst array for special unique monsters (usually quest related) -typedef enum : uint8_t { - UMT_GARBUD = 0, - UMT_SKELKING = 1, - UMT_ZHAR = 2, - UMT_SNOTSPIL = 3, - UMT_LAZURUS = 4, - UMT_RED_VEX = 5, - UMT_BLACKJADE = 6, - UMT_LACHDAN = 7, - UMT_WARLORD = 8, - UMT_BUTCHER = 9, - UMT_HORKDMN = 10, - UMT_DEFILER = 11, - UMT_NAKRUL = 12, -} _uniq_monsterid; - -typedef enum monster_flag : uint16_t { - MFLAG_HIDDEN = 0x01, - MFLAG_LOCK_ANIMATION = 0x02, - MFLAG_ALLOW_SPECIAL = 0x04, - MFLAG_NOHEAL = 0x08, - MFLAG_TARGETS_MONSTER = 0x10, - MFLAG_GOLEM = 0x20, - MFLAG_QUEST_COMPLETE = 0x40, - MFLAG_KNOCKBACK = 0x80, - MFLAG_SEARCH = 0x100, - MFLAG_CAN_OPEN_DOOR = 0x200, - MFLAG_NO_ENEMY = 0x400, - MFLAG_BERSERK = 0x800, - MFLAG_NOLIFESTEAL = 0x1000 -} monster_flag; - typedef enum monster_goal { MGOAL_NORMAL = 1, MGOAL_RETREAT = 2, @@ -1168,403 +18,6 @@ typedef enum monster_goal { MGOAL_TALKING = 7, } monster_goal; -typedef enum missile_resistance { - MISR_NONE = 0, - MISR_FIRE = 1, - MISR_LIGHTNING = 2, - MISR_MAGIC = 3, - MISR_ACID = 4, -} missile_resistance; - -typedef enum _speech_id : int16_t { - TEXT_KING1, - TEXT_KING2, - TEXT_KING3, - TEXT_KING4, - TEXT_KING5, - TEXT_KING6, - TEXT_KING7, - TEXT_KING8, - TEXT_KING9, - TEXT_KING10, - TEXT_KING11, - TEXT_BANNER1, - TEXT_BANNER2, - TEXT_BANNER3, - TEXT_BANNER4, - TEXT_BANNER5, - TEXT_BANNER6, - TEXT_BANNER7, - TEXT_BANNER8, - TEXT_BANNER9, - TEXT_BANNER10, - TEXT_BANNER11, - TEXT_BANNER12, - TEXT_VILE1, - TEXT_VILE2, - TEXT_VILE3, - TEXT_VILE4, - TEXT_VILE5, - TEXT_VILE6, - TEXT_VILE7, - TEXT_VILE8, - TEXT_VILE9, - TEXT_VILE10, - TEXT_VILE11, - TEXT_VILE12, - TEXT_VILE13, - TEXT_VILE14, - TEXT_POISON1, - TEXT_POISON2, - TEXT_POISON3, - TEXT_POISON4, - TEXT_POISON5, - TEXT_POISON6, - TEXT_POISON7, - TEXT_POISON8, - TEXT_POISON9, - TEXT_POISON10, - TEXT_BONE1, - TEXT_BONE2, - TEXT_BONE3, - TEXT_BONE4, - TEXT_BONE5, - TEXT_BONE6, - TEXT_BONE7, - TEXT_BONE8, - TEXT_BUTCH1, - TEXT_BUTCH2, - TEXT_BUTCH3, - TEXT_BUTCH4, - TEXT_BUTCH5, - TEXT_BUTCH6, - TEXT_BUTCH7, - TEXT_BUTCH8, - TEXT_BUTCH9, - TEXT_BUTCH10, - TEXT_BLIND1, - TEXT_BLIND2, - TEXT_BLIND3, - TEXT_BLIND4, - TEXT_BLIND5, - TEXT_BLIND6, - TEXT_BLIND7, - TEXT_BLIND8, - TEXT_VEIL1, - TEXT_VEIL2, - TEXT_VEIL3, - TEXT_VEIL4, - TEXT_VEIL5, - TEXT_VEIL6, - TEXT_VEIL7, - TEXT_VEIL8, - TEXT_VEIL9, - TEXT_VEIL10, - TEXT_VEIL11, - TEXT_ANVIL1, - TEXT_ANVIL2, - TEXT_ANVIL3, - TEXT_ANVIL4, - TEXT_ANVIL5, - TEXT_ANVIL6, - TEXT_ANVIL7, - TEXT_ANVIL8, - TEXT_ANVIL9, - TEXT_ANVIL10, - TEXT_BLOOD1, - TEXT_BLOOD2, - TEXT_BLOOD3, - TEXT_BLOOD4, - TEXT_BLOOD5, - TEXT_BLOOD6, - TEXT_BLOOD7, - TEXT_BLOOD8, - TEXT_WARLRD1, - TEXT_WARLRD2, - TEXT_WARLRD3, - TEXT_WARLRD4, - TEXT_WARLRD5, - TEXT_WARLRD6, - TEXT_WARLRD7, - TEXT_WARLRD8, - TEXT_WARLRD9, - TEXT_INFRA1, - TEXT_INFRA2, - TEXT_INFRA3, - TEXT_INFRA4, - TEXT_INFRA5, - TEXT_INFRA6, - TEXT_INFRA7, - TEXT_INFRA8, - TEXT_INFRA9, - TEXT_INFRA10, - TEXT_MUSH1, - TEXT_MUSH2, - TEXT_MUSH3, - TEXT_MUSH4, - TEXT_MUSH5, - TEXT_MUSH6, - TEXT_MUSH7, - TEXT_MUSH8, - TEXT_MUSH9, - TEXT_MUSH10, - TEXT_MUSH11, - TEXT_MUSH12, - TEXT_MUSH13, - TEXT_DOOM1, - TEXT_DOOM2, - TEXT_DOOM3, - TEXT_DOOM4, - TEXT_DOOM5, - TEXT_DOOM6, - TEXT_DOOM7, - TEXT_DOOM8, - TEXT_DOOM9, - TEXT_DOOM10, - TEXT_GARBUD1, - TEXT_GARBUD2, - TEXT_GARBUD3, - TEXT_GARBUD4, - TEXT_ZHAR1, - TEXT_ZHAR2, - TEXT_STORY1, - TEXT_STORY2, - TEXT_STORY3, - TEXT_STORY4, - TEXT_STORY5, - TEXT_STORY6, - TEXT_STORY7, - TEXT_STORY9, - TEXT_STORY10, - TEXT_STORY11, - TEXT_OGDEN1, - TEXT_OGDEN2, - TEXT_OGDEN3, - TEXT_OGDEN4, - TEXT_OGDEN5, - TEXT_OGDEN6, - TEXT_OGDEN8, - TEXT_OGDEN9, - TEXT_OGDEN10, - TEXT_PEPIN1, - TEXT_PEPIN2, - TEXT_PEPIN3, - TEXT_PEPIN4, - TEXT_PEPIN5, - TEXT_PEPIN6, - TEXT_PEPIN7, - TEXT_PEPIN9, - TEXT_PEPIN10, - TEXT_PEPIN11, - TEXT_GILLIAN1, - TEXT_GILLIAN2, - TEXT_GILLIAN3, - TEXT_GILLIAN4, - TEXT_GILLIAN5, - TEXT_GILLIAN6, - TEXT_GILLIAN7, - TEXT_GILLIAN9, - TEXT_GILLIAN10, - TEXT_GRISWOLD1, - TEXT_GRISWOLD2, - TEXT_GRISWOLD3, - TEXT_GRISWOLD4, - TEXT_GRISWOLD5, - TEXT_GRISWOLD6, - TEXT_GRISWOLD7, - TEXT_GRISWOLD8, - TEXT_GRISWOLD9, - TEXT_GRISWOLD10, - TEXT_GRISWOLD12, - TEXT_GRISWOLD13, - TEXT_FARNHAM1, - TEXT_FARNHAM2, - TEXT_FARNHAM3, - TEXT_FARNHAM4, - TEXT_FARNHAM5, - TEXT_FARNHAM6, - TEXT_FARNHAM8, - TEXT_FARNHAM9, - TEXT_FARNHAM10, - TEXT_FARNHAM11, - TEXT_FARNHAM12, - TEXT_FARNHAM13, - TEXT_ADRIA1, - TEXT_ADRIA2, - TEXT_ADRIA3, - TEXT_ADRIA4, - TEXT_ADRIA5, - TEXT_ADRIA6, - TEXT_ADRIA7, - TEXT_ADRIA8, - TEXT_ADRIA9, - TEXT_ADRIA10, - TEXT_ADRIA12, - TEXT_ADRIA13, - TEXT_WIRT1, - TEXT_WIRT2, - TEXT_WIRT3, - TEXT_WIRT4, - TEXT_WIRT5, - TEXT_WIRT6, - TEXT_WIRT7, - TEXT_WIRT8, - TEXT_WIRT9, - TEXT_WIRT11, - TEXT_WIRT12, - TEXT_BONER, - TEXT_BLOODY, - TEXT_BLINDING, - TEXT_BLOODWAR, - TEXT_MBONER, - TEXT_MBLOODY, - TEXT_MBLINDING, - TEXT_MBLOODWAR, - TEXT_RBONER, - TEXT_RBLOODY, - TEXT_RBLINDING, - TEXT_RBLOODWAR, - TEXT_COW1, - TEXT_COW2, - TEXT_BOOK11, - TEXT_BOOK12, - TEXT_BOOK13, - TEXT_BOOK21, - TEXT_BOOK22, - TEXT_BOOK23, - TEXT_BOOK31, - TEXT_BOOK32, - TEXT_BOOK33, - TEXT_INTRO, - TEXT_HBONER, - TEXT_HBLOODY, - TEXT_HBLINDING, - TEXT_HBLOODWAR, - TEXT_BBONER, - TEXT_BBLOODY, - TEXT_BBLINDING, - TEXT_BBLOODWAR, - TEXT_GRAVE1, - TEXT_GRAVE2, - TEXT_GRAVE3, - TEXT_GRAVE4, - TEXT_GRAVE5, - TEXT_GRAVE6, - TEXT_GRAVE7, - TEXT_GRAVE8, - TEXT_GRAVE9, - TEXT_GRAVE10, - TEXT_FARMER1, - TEXT_FARMER2, - TEXT_FARMER3, - TEXT_FARMER4, - TEXT_FARMER5, - TEXT_GIRL1, - TEXT_GIRL2, - TEXT_GIRL3, - TEXT_GIRL4, - TEXT_DEFILER1, - TEXT_DEFILER2, - TEXT_DEFILER3, - TEXT_DEFILER4, - TEXT_DEFILER5, - TEXT_NAKRUL1, - TEXT_NAKRUL2, - TEXT_NAKRUL3, - TEXT_NAKRUL4, - TEXT_NAKRUL5, - TEXT_CORNSTN, - TEXT_JERSEY1, - TEXT_JERSEY2, - TEXT_JERSEY3, - TEXT_JERSEY4, - TEXT_JERSEY5, - TEXT_JERSEY6, - TEXT_JERSEY7, - TEXT_JERSEY8, - TEXT_JERSEY9, - TEXT_TRADER, - TEXT_FARMER6, - TEXT_FARMER7, - TEXT_FARMER8, - TEXT_FARMER9, - TEXT_FARMER10, - TEXT_JERSEY10, - TEXT_JERSEY11, - TEXT_JERSEY12, - TEXT_JERSEY13, - TEXT_SKLJRN, - TEXT_BOOK4, - TEXT_BOOK5, - TEXT_BOOK6, - TEXT_BOOK7, - TEXT_BOOK8, - TEXT_BOOK9, - TEXT_BOOKA, - TEXT_BOOKB, - TEXT_BOOKC, - TEXT_OBOOKA, - TEXT_OBOOKB, - TEXT_OBOOKC, - TEXT_MBOOKA, - TEXT_MBOOKB, - TEXT_MBOOKC, - TEXT_RBOOKA, - TEXT_RBOOKB, - TEXT_RBOOKC, - TEXT_BBOOKA, - TEXT_BBOOKB, - TEXT_BBOOKC, -/* - TEXT_DEADGUY, - TEXT_FARNHAM14, - TEXT_FARNHAM15, - TEXT_FARNHAM16, - TEXT_FARNHAM17, - TEXT_FARNHAM18, - TEXT_FARNHAM19, - TEXT_FARNHAM20, - TEXT_FARNHAM21, - TEXT_FARNHAM22, - TEXT_GILLIAN11, - TEXT_GILLIAN12, - TEXT_GILLIAN13, - TEXT_GILLIAN14, - TEXT_GILLIAN15, - TEXT_GILLIAN16, - TEXT_GILLIAN17, - TEXT_GILLIAN18, - TEXT_GILLIAN19, - TEXT_GILLIAN20, - TEXT_GILLIAN21, - TEXT_GILLIAN22, - TEXT_GILLIAN23, - TEXT_GILLIAN24, - TEXT_GILLIAN25, - TEXT_GILLIAN26, - TEXT_PEPIN12, - TEXT_PEPIN13, - TEXT_PEPIN14, - TEXT_PEPIN15, - TEXT_PEPIN16, - TEXT_PEPIN17, - TEXT_PEPIN18, - TEXT_PEPIN19, - TEXT_PEPIN20, - TEXT_PEPIN21, - TEXT_PEPIN22, - TEXT_PEPIN23, - TEXT_PEPIN24, - TEXT_PEPIN25, - TEXT_PEPIN26, - TEXT_PEPIN27, - TEXT_PEPIN28, - TEXT_PEPIN29, - TEXT_PEPIN30, -*/ - TEXT_NONE = -1, -} _speech_id; - typedef enum dungeon_type : int8_t { DTYPE_TOWN = 0x0, DTYPE_CATHEDRAL = 0x1,