Browse Source

Monster.cpp (#443)

* Clean up MAI_Golum

* Clean up MAI_Garbud

* Clean up MAI_Lachdanan

* Clean up DeleteMonsterList

* Clean up FreeMonsters

* Define enums for resistance

* Correct AddPanelString input

* Correct pinfoflag type

* Define monster_goal

* apply enum to _pIFlags

* Correct DeleteMonsterList

* Add TODO for possible bug fix.
pull/25/head
Anders Jenbo 7 years ago committed by Robin Eklind
parent
commit
04b19f604d
  1. 15
      Source/control.cpp
  2. 4
      Source/control.h
  3. 8
      Source/items.cpp
  4. 182
      Source/missiles.cpp
  5. 1017
      Source/monster.cpp
  6. 6
      Source/monster.h
  7. 2
      Source/objects.cpp
  8. 2
      Source/player.cpp
  9. 28
      enums.h

15
Source/control.cpp

@ -26,7 +26,7 @@ void *pBtmBuff;
void *pTalkBtns;
int pstrjust[4];
int pnumlines; // idb
int pinfoflag; // weak
BOOL pinfoflag;
int talkbtndown[3];
int pSpell; // weak
char *pManaBuff;
@ -766,7 +766,7 @@ void __fastcall CPrintString(int No, unsigned int glyph, unsigned char col)
}
}
void __fastcall AddPanelString(char *str, int just)
void __fastcall AddPanelString(char *str, BOOL just)
{
strcpy(&panelstr[64 * pnumlines], str);
pstrjust[pnumlines] = just;
@ -778,9 +778,8 @@ void __fastcall AddPanelString(char *str, int just)
void __cdecl ClearPanel()
{
pnumlines = 0;
pinfoflag = 0;
pinfoflag = FALSE;
}
// 4B8824: using guessed type int pinfoflag;
void __fastcall DrawPanelBox(int x, int y, int w, int h, int sx, int sy)
{
@ -1257,7 +1256,7 @@ void __cdecl CheckPanelInfo()
}
infoclr = COL_WHITE;
panelflag = 1;
pinfoflag = 1;
pinfoflag = TRUE;
}
}
++v0;
@ -1267,7 +1266,7 @@ void __cdecl CheckPanelInfo()
strcpy(infostr, "Select current spell button");
infoclr = COL_WHITE;
panelflag = 1;
pinfoflag = 1;
pinfoflag = TRUE;
strcpy(tempstr, "Hotkey : 's'");
AddPanelString(tempstr, 1);
v4 = plr[myplr]._pRSpell;
@ -1333,7 +1332,6 @@ void __cdecl CheckPanelInfo()
pcursinvitem = CheckInvHLight();
}
// 484368: using guessed type int FriendlyMode;
// 4B8824: using guessed type int pinfoflag;
// 4B883C: using guessed type int infoclr;
// 4B8A7C: using guessed type int numpanbtns;
// 4B8B84: using guessed type int panelflag;
@ -1589,7 +1587,7 @@ void __cdecl DrawInfoBox()
} else {
ClearPanel();
AddPanelString("Requirements not met", 1);
pinfoflag = 1;
pinfoflag = TRUE;
}
}
LABEL_33:
@ -1612,7 +1610,6 @@ LABEL_33:
}
}
}
// 4B8824: using guessed type int pinfoflag;
// 4B883C: using guessed type int infoclr;
// 4B8960: using guessed type int talkflag;
// 4B8B84: using guessed type int panelflag;

4
Source/control.h

@ -26,7 +26,7 @@ extern void *pBtmBuff;
extern void *pTalkBtns;
extern int pstrjust[4];
extern int pnumlines; // idb
extern int pinfoflag; // weak
extern BOOL pinfoflag;
extern int talkbtndown[3];
extern int pSpell; // weak
extern char *pManaBuff;
@ -65,7 +65,7 @@ void __cdecl SetSpell();
void __fastcall SetSpeedSpell(int slot);
void __fastcall ToggleSpell(int slot);
void __fastcall CPrintString(int No, unsigned int glyph, unsigned char col); /* check arg names */
void __fastcall AddPanelString(char *str, int just);
void __fastcall AddPanelString(char *str, BOOL just);
void __cdecl ClearPanel();
void __fastcall DrawPanelBox(int x, int y, int w, int h, int sx, int sy);
void __cdecl InitPanelStr();

8
Source/items.cpp

@ -3939,9 +3939,8 @@ void __fastcall PrintItemDetails(ItemStruct *x)
sprintf(tempstr, "%s %i Dex", tempstr, v6);
AddPanelString(tempstr, 1);
}
pinfoflag = 1;
pinfoflag = TRUE;
}
// 4B8824: using guessed type int pinfoflag;
void __fastcall PrintItemDur(ItemStruct *x)
{
@ -3993,11 +3992,10 @@ void __fastcall PrintItemDur(ItemStruct *x)
v5 = v1->_iMinDex;
if (v5)
sprintf(tempstr, "%s %i Dex", tempstr, v5);
AddPanelString(tempstr, 1);
AddPanelString(tempstr, TRUE);
}
pinfoflag = 1;
pinfoflag = TRUE;
}
// 4B8824: using guessed type int pinfoflag;
void __fastcall UseItem(int p, int Mid, int spl)
{

182
Source/missiles.cpp

@ -13,75 +13,75 @@ int numchains; // weak
MissileData missiledata[68] = {
// clang-format off
// mName, mAddProc, mProc, mDraw, mType, mResist, mFileNum, miSFX, mlSFX;
{ MIS_ARROW, &AddArrow, &MI_Arrow, 1, 0, 0, MFILE_ARROWS, -1, -1 },
{ MIS_FIREBOLT, &AddFirebolt, &MI_Firebolt, 1, 1, 1, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2 },
{ MIS_GUARDIAN, &AddGuardian, &MI_Guardian, 1, 1, 0, MFILE_GUARD, LS_GUARD, LS_GUARDLAN },
{ MIS_RNDTELEPORT, &AddRndTeleport, &MI_Teleport, 0, 1, 0, MFILE_NONE, LS_TELEPORT, -1 },
{ MIS_LIGHTBALL, &AddLightball, &MI_Lightball, 1, 1, 2, MFILE_LGHNING, -1, -1 },
{ MIS_FIREWALL, &AddFirewall, &MI_Firewall, 1, 1, 1, MFILE_FIREWAL, LS_WALLLOOP, LS_FIRIMP2 },
{ MIS_FIREBALL, &AddFireball, &MI_Fireball, 1, 1, 1, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2 },
{ MIS_LIGHTCTRL, &AddLightctrl, &MI_Lightctrl, 0, 1, 2, MFILE_LGHNING, -1, -1 },
{ MIS_LIGHTNING, &AddLightning, &MI_Lightning, 1, 1, 2, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1 },
{ MIS_MISEXP, &AddMisexp, &MI_Misexp, 1, 2, 0, MFILE_MAGBLOS, -1, -1 },
{ MIS_TOWN, &AddTown, &MI_Town, 1, 1, 3, MFILE_PORTAL, LS_SENTINEL, LS_ELEMENTL },
{ MIS_FLASH, &AddFlash, &MI_Flash, 1, 1, 3, MFILE_BLUEXFR, LS_NOVA, LS_ELECIMP1 },
{ MIS_FLASH2, &AddFlash2, &MI_Flash2, 1, 1, 3, MFILE_BLUEXBK, -1, -1 },
{ MIS_MANASHIELD, &AddManashield, &MI_SetManashield, 0, 1, 3, MFILE_MANASHLD, LS_MSHIELD, -1 },
{ MIS_FIREMOVE, &AddFiremove, &MI_Firemove, 1, 1, 1, MFILE_FIREWAL, -1, -1 },
{ MIS_CHAIN, &AddChain, &MI_Chain, 1, 1, 2, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1 },
{ MIS_SENTINAL, NULL, NULL, 1, 1, 2, MFILE_LGHNING, -1, -1 },
{ MIS_BLODSTAR, &miss_null_11, &mi_null_11, 1, 2, 0, MFILE_BLOOD, LS_BLODSTAR, LS_BLSIMPT },
{ MIS_BONE, &miss_null_12, &mi_null_11, 1, 2, 0, MFILE_BONE, -1, -1 },
{ MIS_METLHIT, &miss_null_13, &mi_null_11, 1, 2, 0, MFILE_METLHIT, -1, -1 },
{ MIS_RHINO, &AddRhino, &MI_Rhino, 1, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_MAGMABALL, &AddMagmaball, &MI_Firebolt, 1, 1, 1, MFILE_MAGBALL, -1, -1 },
{ MIS_LIGHTCTRL2, &AddLightctrl, &MI_Lightctrl, 0, 1, 2, MFILE_THINLGHT, -1, -1 },
{ MIS_LIGHTNING2, &AddLightning, &MI_Lightning, 1, 1, 2, MFILE_THINLGHT, -1, -1 },
{ MIS_FLARE, &AddFlare, &MI_Firebolt, 1, 1, 3, MFILE_FLARE, -1, -1 },
{ MIS_MISEXP2, &AddMisexp, &MI_Misexp, 1, 2, 3, MFILE_FLAREEXP, -1, -1 },
{ MIS_TELEPORT, &AddTeleport, &MI_Teleport, 0, 1, 0, MFILE_NONE, LS_ELEMENTL, -1 },
{ MIS_FARROW, &AddLArrow, &MI_LArrow, 1, 0, 1, MFILE_FARROW, -1, -1 },
{ MIS_DOOMSERP, NULL, NULL, 0, 1, 3, MFILE_DOOM, LS_DSERP, -1 },
{ MIS_FIREWALLA, &miss_null_1D, &MI_Firewall, 1, 2, 1, MFILE_FIREWAL, -1, -1 },
{ MIS_STONE, &AddStone, &MI_Stone, 0, 1, 3, MFILE_NONE, LS_SCURIMP, -1 },
{ MIS_NULL_1F, &miss_null_1F, &MI_Dummy, 1, 1, 0, MFILE_NONE, -1, -1 },
{ MIS_INVISIBL, NULL, NULL, 0, 1, 0, MFILE_NONE, LS_INVISIBL, -1 },
{ MIS_GOLEM, &AddGolem, &MI_Golem, 0, 1, 0, MFILE_NONE, LS_GOLUM, -1 },
{ MIS_ETHEREALIZE, &AddEtherealize, &MI_Etherealize, 1, 1, 0, MFILE_ETHRSHLD, LS_ETHEREAL, -1 },
{ MIS_BLODBUR, &miss_null_23, &mi_null_11, 1, 2, 0, MFILE_BLODBUR, -1, -1 },
{ MIS_BOOM, &AddBoom, &MI_Boom, 1, 2, 0, MFILE_NEWEXP, -1, -1 },
{ MIS_HEAL, &AddHeal, &MI_Dummy, 0, 1, 0, MFILE_NONE, -1, -1 },
{ MIS_FIREWALLC, &AddFirewallC, &MI_FirewallC, 0, 1, 1, MFILE_FIREWAL, -1, -1 },
{ MIS_INFRA, &AddInfra, &MI_Infra, 0, 1, 0, MFILE_NONE, LS_INFRAVIS, -1 },
{ MIS_IDENTIFY, &AddIdentify, &MI_Dummy, 0, 1, 0, MFILE_NONE, -1, -1 },
{ MIS_WAVE, &AddWave, &MI_Wave, 1, 1, 1, MFILE_FIREWAL, LS_FLAMWAVE, -1 },
{ MIS_NOVA, &AddNova, &MI_Nova, 1, 1, 2, MFILE_LGHNING, LS_NOVA, -1 },
{ MIS_BLODBOIL, &miss_null_1F, &MI_Blodboil, 1, 1, 0, MFILE_NONE, -1, LS_BLODBOIL },
{ MIS_APOCA, &AddApoca, &MI_Apoca, 1, 1, 3, MFILE_NEWEXP, LS_APOC, -1 },
{ MIS_REPAIR, &AddRepair, &MI_Dummy, 0, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_RECHARGE, &AddRecharge, &MI_Dummy, 0, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_DISARM, &AddDisarm, &MI_Dummy, 0, 2, 0, MFILE_NONE, LS_TRAPDIS, -1 },
{ MIS_FLAME, &AddFlame, &MI_Flame, 1, 1, 1, MFILE_INFERNO, LS_SPOUTSTR, -1 },
{ MIS_FLAMEC, &AddFlamec, &MI_Flamec, 0, 1, 1, MFILE_NONE, -1, -1 },
{ MIS_FIREMAN, &miss_null_32, &mi_null_32, 1, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_KRULL, &miss_null_33, &mi_null_33, 1, 0, 1, MFILE_KRULL, -1, -1 },
{ MIS_CBOLT, &AddCbolt, &MI_Cbolt, 1, 1, 2, MFILE_MINILTNG, LS_CBOLT, -1 },
{ MIS_HBOLT, &AddHbolt, &MI_Hbolt, 1, 1, 0, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1 },
{ MIS_RESURRECT, &AddResurrect, &MI_Dummy, 0, 1, 3, MFILE_NONE, -1, LS_RESUR },
{ MIS_TELEKINESIS, &AddTelekinesis, &MI_Dummy, 0, 1, 0, MFILE_NONE, LS_ETHEREAL, -1 },
{ MIS_LARROW, &AddLArrow, &MI_LArrow, 1, 0, 2, MFILE_LARROW, -1, -1 },
{ MIS_ACID, &AddAcid, &MI_Firebolt, 1, 1, 4, MFILE_ACIDBF, LS_ACID, -1 },
{ MIS_MISEXP3, &AddMisexp, &MI_Acidsplat, 1, 2, 4, MFILE_ACIDSPLA, -1, -1 },
{ MIS_ACIDPUD, &AddAcidpud, &MI_Acidpud, 1, 2, 4, MFILE_ACIDPUD, LS_PUDDLE, -1 },
{ MIS_HEALOTHER, &AddHealOther, &MI_Dummy, 0, 1, 0, MFILE_NONE, -1, -1 },
{ MIS_ELEMENT, &AddElement, &MI_Element, 1, 1, 1, MFILE_FIRERUN, LS_ELEMENTL, -1 },
{ MIS_RESURRECTBEAM, &AddResurrectBeam, &MI_ResurrectBeam, 1, 1, 0, MFILE_RESSUR1, -1, -1 },
{ MIS_BONESPIRIT, &AddBoneSpirit, &MI_Bonespirit, 1, 1, 3, MFILE_SKLBALL, LS_BONESP, LS_BSIMPCT },
{ MIS_WEAPEXP, &AddWeapexp, &MI_Weapexp, 1, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_RPORTAL, &AddRportal, &MI_Rportal, 1, 2, 0, MFILE_RPORTAL, LS_SENTINEL, LS_ELEMENTL },
{ MIS_BOOM2, &AddBoom, &MI_Boom, 1, 2, 0, MFILE_FIREPLAR, -1, -1 },
{ MIS_DIABAPOCA, &AddDiabApoca, &MI_Dummy, 0, 2, 0, MFILE_NONE, -1, -1 }
// mName, mAddProc, mProc, mDraw, mType, mResist, mFileNum, miSFX, mlSFX;
{ MIS_ARROW, &AddArrow, &MI_Arrow, 1, 0, 0, MFILE_ARROWS, -1, -1 },
{ MIS_FIREBOLT, &AddFirebolt, &MI_Firebolt, 1, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2 },
{ MIS_GUARDIAN, &AddGuardian, &MI_Guardian, 1, 1, 0, MFILE_GUARD, LS_GUARD, LS_GUARDLAN },
{ MIS_RNDTELEPORT, &AddRndTeleport, &MI_Teleport, 0, 1, 0, MFILE_NONE, LS_TELEPORT, -1 },
{ MIS_LIGHTBALL, &AddLightball, &MI_Lightball, 1, 1, MISR_LIGHTNING, MFILE_LGHNING, -1, -1 },
{ MIS_FIREWALL, &AddFirewall, &MI_Firewall, 1, 1, MISR_FIRE, MFILE_FIREWAL, LS_WALLLOOP, LS_FIRIMP2 },
{ MIS_FIREBALL, &AddFireball, &MI_Fireball, 1, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2 },
{ MIS_LIGHTCTRL, &AddLightctrl, &MI_Lightctrl, 0, 1, MISR_LIGHTNING, MFILE_LGHNING, -1, -1 },
{ MIS_LIGHTNING, &AddLightning, &MI_Lightning, 1, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1 },
{ MIS_MISEXP, &AddMisexp, &MI_Misexp, 1, 2, 0, MFILE_MAGBLOS, -1, -1 },
{ MIS_TOWN, &AddTown, &MI_Town, 1, 1, MISR_MAGIC, MFILE_PORTAL, LS_SENTINEL, LS_ELEMENTL },
{ MIS_FLASH, &AddFlash, &MI_Flash, 1, 1, MISR_MAGIC, MFILE_BLUEXFR, LS_NOVA, LS_ELECIMP1 },
{ MIS_FLASH2, &AddFlash2, &MI_Flash2, 1, 1, MISR_MAGIC, MFILE_BLUEXBK, -1, -1 },
{ MIS_MANASHIELD, &AddManashield, &MI_SetManashield, 0, 1, MISR_MAGIC, MFILE_MANASHLD, LS_MSHIELD, -1 },
{ MIS_FIREMOVE, &AddFiremove, &MI_Firemove, 1, 1, MISR_FIRE, MFILE_FIREWAL, -1, -1 },
{ MIS_CHAIN, &AddChain, &MI_Chain, 1, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1 },
{ MIS_SENTINAL, NULL, NULL, 1, 1, MISR_LIGHTNING, MFILE_LGHNING, -1, -1 },
{ MIS_BLODSTAR, &miss_null_11, &mi_null_11, 1, 2, 0, MFILE_BLOOD, LS_BLODSTAR, LS_BLSIMPT },
{ MIS_BONE, &miss_null_12, &mi_null_11, 1, 2, 0, MFILE_BONE, -1, -1 },
{ MIS_METLHIT, &miss_null_13, &mi_null_11, 1, 2, 0, MFILE_METLHIT, -1, -1 },
{ MIS_RHINO, &AddRhino, &MI_Rhino, 1, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_MAGMABALL, &AddMagmaball, &MI_Firebolt, 1, 1, MISR_FIRE, MFILE_MAGBALL, -1, -1 },
{ MIS_LIGHTCTRL2, &AddLightctrl, &MI_Lightctrl, 0, 1, MISR_LIGHTNING, MFILE_THINLGHT, -1, -1 },
{ MIS_LIGHTNING2, &AddLightning, &MI_Lightning, 1, 1, MISR_LIGHTNING, MFILE_THINLGHT, -1, -1 },
{ MIS_FLARE, &AddFlare, &MI_Firebolt, 1, 1, MISR_MAGIC, MFILE_FLARE, -1, -1 },
{ MIS_MISEXP2, &AddMisexp, &MI_Misexp, 1, 2, MISR_MAGIC, MFILE_FLAREEXP, -1, -1 },
{ MIS_TELEPORT, &AddTeleport, &MI_Teleport, 0, 1, 0, MFILE_NONE, LS_ELEMENTL, -1 },
{ MIS_FARROW, &AddLArrow, &MI_LArrow, 1, 0, MISR_FIRE, MFILE_FARROW, -1, -1 },
{ MIS_DOOMSERP, NULL, NULL, 0, 1, MISR_MAGIC, MFILE_DOOM, LS_DSERP, -1 },
{ MIS_FIREWALLA, &miss_null_1D, &MI_Firewall, 1, 2, MISR_FIRE, MFILE_FIREWAL, -1, -1 },
{ MIS_STONE, &AddStone, &MI_Stone, 0, 1, MISR_MAGIC, MFILE_NONE, LS_SCURIMP, -1 },
{ MIS_NULL_1F, &miss_null_1F, &MI_Dummy, 1, 1, 0, MFILE_NONE, -1, -1 },
{ MIS_INVISIBL, NULL, NULL, 0, 1, 0, MFILE_NONE, LS_INVISIBL, -1 },
{ MIS_GOLEM, &AddGolem, &MI_Golem, 0, 1, 0, MFILE_NONE, LS_GOLUM, -1 },
{ MIS_ETHEREALIZE, &AddEtherealize, &MI_Etherealize, 1, 1, 0, MFILE_ETHRSHLD, LS_ETHEREAL, -1 },
{ MIS_BLODBUR, &miss_null_23, &mi_null_11, 1, 2, 0, MFILE_BLODBUR, -1, -1 },
{ MIS_BOOM, &AddBoom, &MI_Boom, 1, 2, 0, MFILE_NEWEXP, -1, -1 },
{ MIS_HEAL, &AddHeal, &MI_Dummy, 0, 1, 0, MFILE_NONE, -1, -1 },
{ MIS_FIREWALLC, &AddFirewallC, &MI_FirewallC, 0, 1, MISR_FIRE, MFILE_FIREWAL, -1, -1 },
{ MIS_INFRA, &AddInfra, &MI_Infra, 0, 1, 0, MFILE_NONE, LS_INFRAVIS, -1 },
{ MIS_IDENTIFY, &AddIdentify, &MI_Dummy, 0, 1, 0, MFILE_NONE, -1, -1 },
{ MIS_WAVE, &AddWave, &MI_Wave, 1, 1, MISR_FIRE, MFILE_FIREWAL, LS_FLAMWAVE, -1 },
{ MIS_NOVA, &AddNova, &MI_Nova, 1, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_NOVA, -1 },
{ MIS_BLODBOIL, &miss_null_1F, &MI_Blodboil, 1, 1, 0, MFILE_NONE, -1, LS_BLODBOIL },
{ MIS_APOCA, &AddApoca, &MI_Apoca, 1, 1, MISR_MAGIC, MFILE_NEWEXP, LS_APOC, -1 },
{ MIS_REPAIR, &AddRepair, &MI_Dummy, 0, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_RECHARGE, &AddRecharge, &MI_Dummy, 0, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_DISARM, &AddDisarm, &MI_Dummy, 0, 2, 0, MFILE_NONE, LS_TRAPDIS, -1 },
{ MIS_FLAME, &AddFlame, &MI_Flame, 1, 1, MISR_FIRE, MFILE_INFERNO, LS_SPOUTSTR, -1 },
{ MIS_FLAMEC, &AddFlamec, &MI_Flamec, 0, 1, MISR_FIRE, MFILE_NONE, -1, -1 },
{ MIS_FIREMAN, &miss_null_32, &mi_null_32, 1, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_KRULL, &miss_null_33, &mi_null_33, 1, 0, MISR_FIRE, MFILE_KRULL, -1, -1 },
{ MIS_CBOLT, &AddCbolt, &MI_Cbolt, 1, 1, MISR_LIGHTNING, MFILE_MINILTNG, LS_CBOLT, -1 },
{ MIS_HBOLT, &AddHbolt, &MI_Hbolt, 1, 1, 0, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1 },
{ MIS_RESURRECT, &AddResurrect, &MI_Dummy, 0, 1, MISR_MAGIC, MFILE_NONE, -1, LS_RESUR },
{ MIS_TELEKINESIS, &AddTelekinesis, &MI_Dummy, 0, 1, 0, MFILE_NONE, LS_ETHEREAL, -1 },
{ MIS_LARROW, &AddLArrow, &MI_LArrow, 1, 0, MISR_LIGHTNING, MFILE_LARROW, -1, -1 },
{ MIS_ACID, &AddAcid, &MI_Firebolt, 1, 1, MISR_ACID, MFILE_ACIDBF, LS_ACID, -1 },
{ MIS_MISEXP3, &AddMisexp, &MI_Acidsplat, 1, 2, MISR_ACID, MFILE_ACIDSPLA, -1, -1 },
{ MIS_ACIDPUD, &AddAcidpud, &MI_Acidpud, 1, 2, MISR_ACID, MFILE_ACIDPUD, LS_PUDDLE, -1 },
{ MIS_HEALOTHER, &AddHealOther, &MI_Dummy, 0, 1, 0, MFILE_NONE, -1, -1 },
{ MIS_ELEMENT, &AddElement, &MI_Element, 1, 1, MISR_FIRE, MFILE_FIRERUN, LS_ELEMENTL, -1 },
{ MIS_RESURRECTBEAM, &AddResurrectBeam, &MI_ResurrectBeam, 1, 1, 0, MFILE_RESSUR1, -1, -1 },
{ MIS_BONESPIRIT, &AddBoneSpirit, &MI_Bonespirit, 1, 1, MISR_MAGIC, MFILE_SKLBALL, LS_BONESP, LS_BSIMPCT },
{ MIS_WEAPEXP, &AddWeapexp, &MI_Weapexp, 1, 2, 0, MFILE_NONE, -1, -1 },
{ MIS_RPORTAL, &AddRportal, &MI_Rportal, 1, 2, 0, MFILE_RPORTAL, LS_SENTINEL, LS_ELEMENTL },
{ MIS_BOOM2, &AddBoom, &MI_Boom, 1, 2, 0, MFILE_FIREPLAR, -1, -1 },
{ MIS_DIABAPOCA, &AddDiabApoca, &MI_Dummy, 0, 2, 0, MFILE_NONE, -1, -1 }
// clang-format on
};
MisFileData misfiledata[47] = {
@ -835,20 +835,20 @@ BOOL __fastcall MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, i
v15 = mindam;
if (monster[m].mtalkmsg
|| monster[v6]._mhitpoints >> 6 <= 0
|| monster[v6].MType->mtype == MT_ILLWEAV && _LOBYTE(monster[v6]._mgoal) == 2) {
|| monster[v6].MType->mtype == MT_ILLWEAV && _LOBYTE(monster[v6]._mgoal) == MGOAL_RETREAT) {
return 0;
}
if (monster[v6]._mmode == MM_CHARGE)
return 0;
v8 = _LOWORD(monster[v6].mMagicRes);
v9 = missiledata[t].mResist;
if (v8 & 8) {
if (v9 == 3)
if (v8 & IMUNE_MAGIC) {
if (v9 == MISR_MAGIC)
return 0;
}
if (v8 & 0x10 && v9 == 1 || v8 & 0x20 && v9 == 2)
if (v8 & IMUNE_FIRE && v9 == MISR_FIRE || v8 & IMUNE_LIGHTNING && v9 == MISR_LIGHTNING)
return 0;
if (v8 & 1 && v9 == 3 || v8 & 2 && v9 == 1 || v8 & 4 && v9 == 2)
if (v8 & RESIST_MAGIC && v9 == MISR_MAGIC || v8 & 2 && v9 == MISR_FIRE || v8 & RESIST_LIGHTNING && v9 == MISR_LIGHTNING)
v16 = 1;
v14 = random(68, 100);
v10 = 90 - (unsigned char)monster[v6].mArmorClass - dist;
@ -934,20 +934,20 @@ bool __fastcall MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, i
|| t == MIS_HBOLT && monster[v7].MType->mtype != MT_DIABLO && monster[v7].MData->mMonstClass) {
return 0;
}
if (monster[v7].MType->mtype == MT_ILLWEAV && _LOBYTE(monster[v7]._mgoal) == 2)
if (monster[v7].MType->mtype == MT_ILLWEAV && _LOBYTE(monster[v7]._mgoal) == MGOAL_RETREAT)
return 0;
if (monster[v7]._mmode == MM_CHARGE)
return 0;
v9 = monster[v7].mMagicRes;
v10 = missiledata[t].mResist;
v23 = t;
if (v9 & 8) {
if (v10 == 3)
if (v9 & IMUNE_MAGIC) {
if (v10 == MISR_MAGIC)
return 0;
}
if (v9 & 0x10 && v10 == 1 || v9 & 0x20 && v10 == 2 || (v9 & 0x80u) != 0 && v10 == 4)
if (v9 & IMUNE_FIRE && v10 == MISR_FIRE || v9 & IMUNE_LIGHTNING && v10 == MISR_LIGHTNING || (v9 & IMUNE_ACID) != 0 && v10 == MISR_ACID)
return 0;
if (v9 & 1 && v10 == 3 || v9 & 2 && v10 == 1 || v9 & 4 && v10 == 2)
if (v9 & RESIST_MAGIC && v10 == MISR_MAGIC || v9 & RESIST_FIRE && v10 == MISR_FIRE || v9 & RESIST_LIGHTNING && v10 == MISR_LIGHTNING)
v26 = 1;
v11 = random(69, 100);
v8 = missiledata[t].mType == 0;
@ -1150,12 +1150,12 @@ LABEL_25:
if (v18 > 100)
v18 = 100;
v19 = missiledata[mtype].mResist;
if (v19 == 1) {
if (v19 == MISR_FIRE) {
v20 = plr[v9]._pFireResist;
} else if (v19 == 2) {
} else if (v19 == MISR_LIGHTNING) {
v20 = plr[v9]._pLghtResist;
} else {
if (v19 <= 2u || v19 > 4u) {
if (v19 <= MISR_LIGHTNING || v19 > MISR_ACID) {
dista = 0;
goto LABEL_50;
}
@ -1169,12 +1169,12 @@ LABEL_50:
} else {
if ((_BYTE)shift) {
v23 = mind + random(75, maxd - mind + 1);
if (v34 == -1 && plr[v9]._pIFlags & 0x10000000)
if (v34 == -1 && plr[v9]._pIFlags & ISPL_ABSHALFTRAP)
v23 >>= 1;
v21 = plr[v9]._pIGetHit + v23;
} else {
v22 = (mind << 6) + random(75, (maxd - mind + 1) << 6);
if (v34 == -1 && plr[v9]._pIFlags & 0x10000000)
if (v34 == -1 && plr[v9]._pIFlags & ISPL_ABSHALFTRAP)
v22 >>= 1;
v21 = (plr[v9]._pIGetHit << 6) + v22;
}
@ -1266,12 +1266,12 @@ bool __fastcall Plr2PlrMHit(int pnum, int p, int mindam, int maxdam, int dist, i
return 0;
v22 = mtype;
v8 = missiledata[mtype].mResist;
if (v8 == 1) {
if (v8 == MISR_FIRE) {
v9 = plr[v7]._pFireResist;
} else if (v8 == 2) {
} else if (v8 == MISR_LIGHTNING) {
v9 = plr[v7]._pLghtResist;
} else {
if (v8 <= 2u || v8 > 4u) {
if (v8 <= MISR_LIGHTNING || v8 > MISR_ACID) {
v27 = 0;
goto LABEL_14;
}
@ -4007,7 +4007,7 @@ void __fastcall MI_LArrow(int i)
v20 = plr[v3]._pILMaxDam;
}
v23 = missile[v1]._miy;
missiledata[MIS_LARROW].mResist = 2;
missiledata[MIS_LARROW].mResist = MISR_LIGHTNING;
CheckMissileCol(ia, v19, v20, 0, missile[v1]._mix, v23, 1);
}
if (missile[v1]._mitype == MIS_FARROW) {
@ -4021,7 +4021,7 @@ void __fastcall MI_LArrow(int i)
v25 = plr[v3]._pIFMaxDam;
}
v28 = missile[v1]._miy;
missiledata[MIS_FARROW].mResist = 1;
missiledata[MIS_FARROW].mResist = MISR_FIRE;
CheckMissileCol(ia, v24, v25, 0, missile[v1]._mix, v28, 1);
}
missiledata[missile[v1]._mitype].mResist = v32;
@ -5239,11 +5239,11 @@ void __fastcall MI_Weapexp(int i)
if (v5) {
v6 = plr[v3]._pIFMinDam;
v7 = plr[v3]._pIFMaxDam;
missiledata[v4].mResist = 1;
missiledata[v4].mResist = MISR_FIRE;
} else {
v6 = plr[v3]._pILMinDam;
v7 = plr[v3]._pILMaxDam;
missiledata[v4].mResist = 2;
missiledata[v4].mResist = MISR_LIGHTNING;
}
CheckMissileCol(ia, v6, v7, 0, missile[v1]._mix, missile[v1]._miy, 0);
v8 = missile[v1]._miVar1;

1017
Source/monster.cpp

File diff suppressed because it is too large Load Diff

6
Source/monster.h

@ -91,14 +91,14 @@ int __fastcall M_DoDelay(int i);
int __fastcall M_DoStone(int i);
void __fastcall M_WalkDir(int i, int md);
void __fastcall GroupUnity(int i);
bool __fastcall M_CallWalk(int i, int md);
BOOL __fastcall M_CallWalk(int i, int md);
bool __fastcall M_PathWalk(int i);
bool __fastcall M_CallWalk2(int i, int md);
bool __fastcall M_DumbWalk(int i, int md);
bool __fastcall M_RoundWalk(int i, int md, int *dir);
void __fastcall MAI_Zombie(int i);
void __fastcall MAI_SkelSd(int i);
bool __fastcall MAI_Path(int i);
BOOL __fastcall MAI_Path(int i);
void __fastcall MAI_Snake(int i);
void __fastcall MAI_Bat(int i);
void __fastcall MAI_SkelBow(int i);
@ -107,7 +107,7 @@ void __fastcall MAI_Sneak(int i);
void __fastcall MAI_Fireman(int i);
void __fastcall MAI_Fallen(int i);
void __fastcall MAI_Cleaver(int i);
void __fastcall MAI_Round(int i, unsigned char special);
void __fastcall MAI_Round(int i, BOOL special);
void __fastcall MAI_GoatMc(int i);
void __fastcall MAI_Ranged(int i, int missile_type, unsigned char special);
void __fastcall MAI_GoatBow(int i);

2
Source/objects.cpp

@ -5170,7 +5170,7 @@ void __fastcall OperateBookCase(int pnum, int i, unsigned char sendmsg)
&& monster[4]._mhitpoints) {
monster[4].mtalkmsg = QUEST_ZHAR2;
M_StartStand(0, monster[4]._mdir);
_LOBYTE(monster[4]._mgoal) = 5;
_LOBYTE(monster[4]._mgoal) = MGOAL_SHOOT;
monster[4]._mmode = MM_TALK;
}
if (v4 == myplr)

2
Source/player.cpp

@ -2270,7 +2270,7 @@ BOOL __fastcall PlrHitMonst(int pnum, int m)
return FALSE;
}
if (monster[m].MType->mtype == MT_ILLWEAV && monster[m]._mgoal == 2) {
if (monster[m].MType->mtype == MT_ILLWEAV && monster[m]._mgoal == MGOAL_RETREAT) {
return FALSE;
}

28
enums.h

@ -1451,6 +1451,34 @@ enum monster_flag {
MFLAG_NOLIFESTEAL = 0x1000
};
enum monster_goal {
MGOAL_NORMAL = 1,
MGOAL_RETREAT = 2,
MGOAL_HEALING = 3,
MGOAL_MOVE = 4,
MGOAL_SHOOT = 5,
MGOAL_INQUIRING = 6,
MGOAL_TALKING = 7,
};
enum monster_resistance {
RESIST_MAGIC = 0x01,
RESIST_FIRE = 0x02,
RESIST_LIGHTNING = 0x04,
IMUNE_MAGIC = 0x08,
IMUNE_FIRE = 0x10,
IMUNE_LIGHTNING = 0x20,
IMUNE_NULL_40 = 0x40,
IMUNE_ACID = 0x80,
};
enum missile_resistance {
MISR_FIRE = 1,
MISR_LIGHTNING = 2,
MISR_MAGIC = 3,
MISR_ACID = 4,
};
enum _speech_id {
QUEST_KING1 = 0x0,
QUEST_KING2 = 0x1,

Loading…
Cancel
Save