Browse Source

♻️ Move a large part of enums to there respective headers

pull/1422/head
Anders Jenbo 5 years ago
parent
commit
af96de4038
  1. 57
      Source/effects.cpp
  2. 1063
      Source/effects.h
  3. 12
      Source/inv.cpp
  4. 4
      Source/items.cpp
  5. 37
      Source/items.h
  6. 180
      Source/misdat.cpp
  7. 103
      Source/misdat.h
  8. 22
      Source/missiles.cpp
  9. 42
      Source/missiles.h
  10. 59
      Source/monster.h
  11. 6
      Source/objects.cpp
  12. 2
      Source/objects.h
  13. 2
      Source/portal.cpp
  14. 2
      Source/spelldat.h
  15. 393
      Source/textdat.h
  16. 4
      Source/towners.cpp
  17. 1547
      enums.h

57
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;

1063
Source/effects.h

File diff suppressed because it is too large Load Diff

12
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;

4
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,

37
Source/items.h

@ -5,19 +5,17 @@
*/
#pragma once
#include <stdint.h>
#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[];
}

180
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
};

103
Source/misdat.h

@ -5,19 +5,106 @@
*/
#pragma once
#include "missiles.h"
#include <stdint.h>
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
}

22
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,

42
Source/missiles.h

@ -5,43 +5,19 @@
*/
#pragma once
namespace devilution {
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
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
}

59
Source/monster.h

@ -5,13 +5,46 @@
*/
#pragma once
#include <stdint.h>
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
}

6
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);

2
Source/objects.h

@ -5,6 +5,8 @@
*/
#pragma once
#include "textdat.h"
namespace devilution {
#ifdef __cplusplus

2
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);

2
Source/spelldat.h

@ -5,6 +5,8 @@
*/
#pragma once
#include "effects.h"
namespace devilution {
#ifdef __cplusplus

393
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[];

4
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)
{

1547
enums.h

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save