From 00e3ff08ae8d9ad3a58e09240316bed288dcfd23 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 17 Jan 2021 01:25:57 +0100 Subject: [PATCH] Unify majorty of monster.cpp --- Source/control.cpp | 4 +- Source/diablo.cpp | 8 +- Source/inv.cpp | 4 - Source/itemdat.cpp | 51 --- Source/items.cpp | 65 +-- Source/missiles.cpp | 2 - Source/monster.cpp | 1006 +++++++------------------------------------ Source/player.cpp | 2 +- Source/player.h | 3 +- defs.h | 6 +- 10 files changed, 203 insertions(+), 948 deletions(-) diff --git a/Source/control.cpp b/Source/control.cpp index cb8d0dca5..6b9e90f86 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -1345,7 +1345,7 @@ void DrawInfoBox() infoclr = COL_GOLD; strcpy(infostr, plr[pcursplr]._pName); ClearPanel(); - sprintf(tempstr, "%s, Level : %i", ClassStrTbl[plr[pcursplr]._pClass], plr[pcursplr]._pLevel); + sprintf(tempstr, "%s, Level : %i", ClassStrTblOld[plr[pcursplr]._pClass], plr[pcursplr]._pLevel); AddPanelString(tempstr, TRUE); sprintf(tempstr, "Hit Points %i of %i", plr[pcursplr]._pHitPoints >> 6, plr[pcursplr]._pMaxHP >> 6); AddPanelString(tempstr, TRUE); @@ -1421,7 +1421,7 @@ void DrawChr() CelDraw(SCREEN_X, 351 + SCREEN_Y, pChrPanel, 1, SPANEL_WIDTH); ADD_PlrStringXY(20, 32, 151, plr[myplr]._pName, COL_WHITE); - ADD_PlrStringXY(168, 32, 299, ClassStrTbl[plr[myplr]._pClass], COL_WHITE); + ADD_PlrStringXY(168, 32, 299, ClassStrTblOld[plr[myplr]._pClass], COL_WHITE); sprintf(chrstr, "%i", plr[myplr]._pLevel); ADD_PlrStringXY(66, 69, 109, chrstr, COL_WHITE); diff --git a/Source/diablo.cpp b/Source/diablo.cpp index 7d441e22c..de254acd7 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -111,15 +111,13 @@ static void print_help_and_exit() printf(" %-20s %-30s\n", "-f", "Display frames per second"); printf(" %-20s %-30s\n", "-x", "Run in windowed mode"); printf(" %-20s %-30s\n", "--spawn", "Force spawn mode even if diabdat.mpq is found"); -#ifdef HELLFIRE + printf(" %-20s %-30s\n", "--bardtest", "Enable the Bard class"); + printf(" %-20s %-30s\n", "--barbariantest", "Enable the Barbarian class"); printf("\nHellfire options:\n"); printf(" %-20s %-30s\n", "--diablo", "Force diablo mode even if hellfire.mpq is found"); printf(" %-20s %-30s\n", "--theoquest", "Enable the Theo quest"); printf(" %-20s %-30s\n", "--cowquest", "Enable the Cow quest"); printf(" %-20s %-30s\n", "--nestart", "Use alternate nest palette"); - printf(" %-20s %-30s\n", "--bardtest", "Enable the Bard class"); - printf(" %-20s %-30s\n", "--barbariantest", "Enable the Barbarian class"); -#endif #ifdef _DEBUG printf("\nDebug options:\n"); printf(" %-20s %-30s\n", "-d", "Increaased item drops"); @@ -163,7 +161,6 @@ static void diablo_parse_flags(int argc, char **argv) fullscreen = FALSE; } else if (strcasecmp("--spawn", argv[i]) == 0) { forceSpawn = TRUE; -#ifdef HELLFIRE } else if (strcasecmp("--diablo", argv[i]) == 0) { forceDiablo = TRUE; } else if (strcasecmp("--theoquest", argv[i]) == 0) { @@ -176,7 +173,6 @@ static void diablo_parse_flags(int argc, char **argv) UseBardTest = TRUE; } else if (strcasecmp("--barbariantest", argv[i]) == 0) { UseBarbarianTest = TRUE; -#endif #ifdef _DEBUG } else if (strcasecmp("-^", argv[i]) == 0) { debug_mode_key_inverted_v = TRUE; diff --git a/Source/inv.cpp b/Source/inv.cpp index c8837025b..6e5e9bd2d 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -713,11 +713,7 @@ BOOL GoldAutoPlace(int pnum) for (int i = 0; i < plr[pnum]._pNumInv && !done; i++) { if (plr[pnum].InvList[i]._itype == ITYPE_GOLD) { int gold = plr[pnum].InvList[i]._ivalue + plr[pnum].HoldItem._ivalue; -#ifdef HELLFIRE if (gold <= MaxGold) { -#else - if (plr[pnum].HoldItem._ivalue + plr[pnum].InvList[i]._ivalue <= GOLD_MAX_LIMIT) { -#endif plr[pnum].InvList[i]._ivalue = gold; if (gold >= GOLD_MEDIUM_LIMIT) plr[pnum].InvList[i]._iCurs = ICURS_GOLD_LARGE; diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index b5d1c9b6b..1734f7f23 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -198,7 +198,6 @@ const PLStruct PL_Prefix[] = { { "Meteoric", IPL_TOHIT, 61, 80, 23, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 6100, 10000, 15 }, { "Weird", IPL_TOHIT, 81, 100, 35, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 10100, 14000, 17 }, { "Strange", IPL_TOHIT, 101, 150, 60, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 14100, 20000, 20 }, -#ifdef HELLFIRE { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -8 }, { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -4 }, { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -3 }, @@ -208,17 +207,6 @@ const PLStruct PL_Prefix[] = { { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_EVIL, TRUE, TRUE, 1000, 1450, 8 }, { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 1500, 1950, 10 }, { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 2000, 2450, 13 }, -#else - { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -8 }, - { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -4 }, - { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -3 }, - { "Jagged", IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 250, 450, 3 }, - { "Deadly", IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 500, 700, 4 }, - { "Heavy", IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 750, 950, 5 }, - { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_BOW , GOE_EVIL, TRUE, TRUE, 1000, 1450, 8 }, - { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 1500, 1950, 10 }, - { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 2000, 2450, 13 }, -#endif { "Savage", IPL_DAMP, 111, 125, 23, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 2500, 3000, 15 }, { "Ruthless", IPL_DAMP, 126, 150, 35, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 10100, 15000, 17 }, { "Merciless", IPL_DAMP, 151, 175, 60, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 15000, 20000, 20 }, @@ -281,11 +269,9 @@ const PLStruct PL_Prefix[] = { { "Bountiful", IPL_CHARGES, 3, 3, 9, PLT_STAFF , GOE_ANY, FALSE, TRUE, 3000, 3000, 3 }, { "Flaming", IPL_FIREDAM, 1, 10, 7, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 5000, 5000, 2 }, { "Lightning", IPL_LIGHTDAM, 2, 20, 18, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 10000, 10000, 2 }, -#ifdef HELLFIRE { "Jester's", IPL_JESTERS, 1, 1, 7, PLT_WEAP , GOE_ANY, FALSE, TRUE, 1200, 1200, 3 }, { "Crystalline", IPL_CRYSTALLINE, 30, 70, 5, PLT_WEAP , GOE_ANY, FALSE, TRUE, 1000, 3000, 3 }, { "Doppelganger's", IPL_DOPPELGANGER, 81, 95, 11, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 2000, 2400, 10 }, -#endif { "", IPL_INVALID, 0, 0, 0, 0 , GOE_ANY, FALSE, FALSE, 0, 0, 0 }, // clang-format on }; @@ -294,13 +280,8 @@ const PLStruct PL_Prefix[] = { const PLStruct PL_Suffix[] = { // clang-format off // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal -#ifdef HELLFIRE { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 100, 200, 2 }, { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 1300, 1500, 3 }, -#else - { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 100, 200, 2 }, - { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 1300, 1500, 3 }, -#endif { "slaying", IPL_DAMMOD, 6, 8, 15, PLT_WEAP , GOE_ANY, FALSE, TRUE, 2600, 3000, 5 }, { "gore", IPL_DAMMOD, 9, 12, 25, PLT_WEAP , GOE_ANY, FALSE, TRUE, 4100, 5000, 8 }, { "carnage", IPL_DAMMOD, 13, 16, 35, PLT_WEAP , GOE_ANY, FALSE, TRUE, 5100, 10000, 10 }, @@ -313,25 +294,15 @@ const PLStruct PL_Suffix[] = { { "deflection", IPL_GETHIT, 4, 4, 20, PLT_ARMO , GOE_GOOD, FALSE, TRUE, 2500, 6500, 15 }, { "osmosis", IPL_GETHIT, 5, 6, 50, PLT_ARMO , GOE_GOOD, FALSE, TRUE, 7500, 10000, 20 }, { "frailty", IPL_STR_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, -#ifdef HELLFIRE { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, -#else - { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, - { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, -#endif { "might", IPL_STR, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 1200, 2000, 3 }, { "power", IPL_STR, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2200, 3000, 4 }, { "giants", IPL_STR, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3200, 5000, 7 }, { "titans", IPL_STR, 21, 30, 23, PLT_WEAP | PLT_MISC, GOE_ANY, FALSE, TRUE, 5200, 10000, 10 }, { "paralysis", IPL_DEX_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, -#ifdef HELLFIRE { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, -#else - { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, - { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, -#endif { "skill", IPL_DEX, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 1200, 2000, 3 }, { "accuracy", IPL_DEX, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2200, 3000, 4 }, { "precision", IPL_DEX, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3200, 5000, 7 }, @@ -343,30 +314,17 @@ const PLStruct PL_Suffix[] = { { "brilliance", IPL_MAG, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2200, 3000, 4 }, { "sorcery", IPL_MAG, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3200, 5000, 7 }, { "wizardry", IPL_MAG, 21, 30, 23, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 5200, 10000, 10 }, -#ifdef HELLFIRE { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 200, 1000, 2 }, -#else - { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, - { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, - { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 200, 1000, 2 }, -#endif { "zest", IPL_VIT, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 1200, 2000, 3 }, { "vim", IPL_VIT, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 2200, 3000, 4 }, { "vigor", IPL_VIT, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 3200, 5000, 7 }, { "life", IPL_VIT, 21, 30, 23, PLT_MISC, GOE_GOOD, FALSE, TRUE, 5200, 10000, 10 }, -#ifdef HELLFIRE { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -10 }, { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -5 }, { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 800, 4000, 5 }, { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 4800, 8000, 10 }, -#else - { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -10 }, - { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -5 }, - { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 800, 4000, 5 }, - { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 4800, 8000, 10 }, -#endif { "the stars", IPL_ATTRIBS, 8, 11, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 8800, 12000, 15 }, { "the heavens", IPL_ATTRIBS, 12, 15, 25, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 12800, 20000, 20 }, { "the zodiac", IPL_ATTRIBS, 16, 20, 30, PLT_MISC, GOE_ANY, FALSE, TRUE, 20800, 40000, 30 }, @@ -382,17 +340,10 @@ const PLStruct PL_Suffix[] = { { "the whale", IPL_LIFE, 81, 100, 60, PLT_ARMO , GOE_ANY, FALSE, TRUE, 19100, 30000, 13 }, { "fragility", IPL_DUR_CURSE, 100, 100, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, FALSE, FALSE, 0, 0, -4 }, { "brittleness", IPL_DUR_CURSE, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, -#ifdef HELLFIRE { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 100, 100, 2 }, { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 200, 200, 2 }, { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 300, 300, 2 }, { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 600, 600, 5 }, -#else - { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 100, 100, 2 }, - { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 200, 200, 2 }, - { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 300, 300, 2 }, - { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 600, 600, 5 }, -#endif { "the dark", IPL_LIGHT_CURSE, 4, 4, 6, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, { "the night", IPL_LIGHT_CURSE, 2, 2, 3, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, { "light", IPL_LIGHT, 2, 2, 4, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_GOOD, FALSE, TRUE, 750, 750, 2 }, @@ -430,11 +381,9 @@ const PLStruct PL_Suffix[] = { { "stability", IPL_FASTRECOVER, 2, 2, 10, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, { "harmony", IPL_FASTRECOVER, 3, 3, 20, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 8000, 8000, 8 }, { "blocking", IPL_FASTBLOCK, 1, 1, 5, PLT_SHLD , GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, -#ifdef HELLFIRE { "devastation", IPL_DEVASTATION, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 1200, 1200, 3 }, { "decay", IPL_DECAY, 150, 250, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 200, 200, 2 }, { "peril", IPL_PERIL, 1, 1, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 500, 500, 1 }, -#endif { "", IPL_INVALID, 0, 0, 0, 0 , GOE_ANY, FALSE, FALSE, 0, 0, 0 }, // clang-format on }; diff --git a/Source/items.cpp b/Source/items.cpp index 576347d05..c2a09d29b 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -56,25 +56,6 @@ int MaxGold = GOLD_MAX_LIMIT; /** Maps from item_cursor_graphic to in-memory item type. */ BYTE ItemCAnimTbl[] = { -#ifndef HELLFIRE - 20, 16, 16, 16, 4, 4, 4, 12, 12, 12, - 12, 12, 12, 12, 12, 21, 21, 25, 12, 28, - 28, 28, 0, 0, 0, 32, 0, 0, 0, 24, - 24, 26, 2, 25, 22, 23, 24, 25, 27, 27, - 29, 0, 0, 0, 12, 12, 12, 12, 12, 0, - 8, 8, 0, 8, 8, 8, 8, 8, 8, 6, - 8, 8, 8, 6, 8, 8, 6, 8, 8, 6, - 6, 6, 8, 8, 8, 5, 9, 13, 13, 13, - 5, 5, 5, 15, 5, 5, 18, 18, 18, 30, - 5, 5, 14, 5, 14, 13, 16, 18, 5, 5, - 7, 1, 3, 17, 1, 15, 10, 14, 3, 11, - 8, 0, 1, 7, 0, 7, 15, 7, 3, 3, - 3, 6, 6, 11, 11, 11, 31, 14, 14, 14, - 6, 6, 7, 3, 8, 14, 0, 14, 14, 0, - 33, 1, 1, 1, 1, 1, 7, 7, 7, 14, - 14, 17, 17, 17, 0, 34, 1, 0, 3, 17, - 8, 8, 6, 1, 3, 3, 11, 3, 4 -#else 20, 16, 16, 16, 4, 4, 4, 12, 12, 12, 12, 12, 12, 12, 12, 21, 21, 25, 12, 28, 28, 28, 38, 38, 38, 32, 38, 38, 38, 24, @@ -98,7 +79,6 @@ BYTE ItemCAnimTbl[] = { 8, 8, 8, 17, 0, 6, 8, 11, 11, 3, 3, 1, 6, 6, 6, 1, 8, 6, 11, 3, 6, 8, 1, 6, 6, 17, 40, 0, 0 -#endif }; /** Map of item type .cel file names. */ const char *const ItemDropNames[] = { @@ -331,6 +311,35 @@ bool ShouldSkipItem(int i) return false; } +static bool IsPrefixValidForItemType(int i, int flgs) +{ + int PLIType = PL_Prefix[i].PLIType; + + if (!gbIsHellfire) { + if (i >= 12 && i <= 20) + PLIType &= ~PLT_STAFF; + } + + return flgs & PLIType != 0; +} + +static bool IsSuffixValidForItemType(int i, int flgs) +{ + int PLIType = PL_Suffix[i].PLIType; + + if (!gbIsHellfire) { + if ((i >= 0 && i <= 1) + || (i >= 14 && i <= 15) + || (i >= 21 && i <= 22) + || (i >= 34 && i <= 36) + || (i >= 41 && i <= 44) + || (i >= 60 && i <= 63)) + PLIType &= ~PLT_STAFF; + } + + return flgs & PLIType != 0; +} + int get_ring_max_value(int i) { int j, res; @@ -763,7 +772,6 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) } } -#ifdef HELLFIRE if ((plr[p]._pSpellFlags & 2) == 2) { sadd += 2 * plr[p]._pLevel; dadd += plr[p]._pLevel + plr[p]._pLevel / 2; @@ -774,7 +782,6 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) dadd -= plr[p]._pLevel + plr[p]._pLevel / 2; vadd -= 2 * plr[p]._pLevel; } -#endif plr[p]._pIMinDam = mind; plr[p]._pIMaxDam = maxd; @@ -884,13 +891,11 @@ void CalcPlrItemVals(int p, BOOL Loadgfx) lr += plr[p]._pLevel; } -#ifdef HELLFIRE if ((plr[p]._pSpellFlags & 4) == 4) { mr -= plr[p]._pLevel; fr -= plr[p]._pLevel; lr -= plr[p]._pLevel; } -#endif if (iflgs & ISPL_ALLRESZERO) { // reset resistances to zero if the respective special effect is active @@ -1674,7 +1679,9 @@ void GetStaffPower(int i, int lvl, int bs, BOOL onlygood) if (tmp == 0 || onlygood) { nl = 0; for (j = 0; PL_Prefix[j].PLPower != -1; j++) { - if (PL_Prefix[j].PLIType & PLT_STAFF && PL_Prefix[j].PLMinLvl <= lvl) { + if (!gbIsHellfire && j >= 83) + break; + if (IsPrefixValidForItemType(j, PLT_STAFF) && PL_Prefix[j].PLMinLvl <= lvl) { addok = TRUE; if (onlygood && !PL_Prefix[j].PLOk) addok = FALSE; @@ -2334,7 +2341,9 @@ void GetItemPower(int i, int minlvl, int maxlvl, int flgs, BOOL onlygood) if (pre == 0) { nt = 0; for (j = 0; PL_Prefix[j].PLPower != -1; j++) { - if (flgs & PL_Prefix[j].PLIType) { + if (!gbIsHellfire && j >= 83) + break; + if (IsPrefixValidForItemType(j, flgs)) { if (PL_Prefix[j].PLMinLvl >= minlvl && PL_Prefix[j].PLMinLvl <= maxlvl && (!onlygood || PL_Prefix[j].PLOk) && (flgs != PLT_STAFF || PL_Prefix[j].PLPower != IPL_CHARGES)) { l[nt] = j; nt++; @@ -2365,7 +2374,9 @@ void GetItemPower(int i, int minlvl, int maxlvl, int flgs, BOOL onlygood) if (post != 0) { nl = 0; for (j = 0; PL_Suffix[j].PLPower != -1; j++) { - if (PL_Suffix[j].PLIType & flgs + if (!gbIsHellfire && j >= 94) + break; + if (IsSuffixValidForItemType(j, flgs) && PL_Suffix[j].PLMinLvl >= minlvl && PL_Suffix[j].PLMinLvl <= maxlvl && (goe | PL_Suffix[j].PLGOE) != (GOE_GOOD | GOE_EVIL) && (!onlygood || PL_Suffix[j].PLOk)) { diff --git a/Source/missiles.cpp b/Source/missiles.cpp index e07072f9a..5e011b284 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1323,7 +1323,6 @@ void InitMissiles() } } -#ifdef HELLFIRE if ((plr[myplr]._pSpellFlags & 2) == 2 || (plr[myplr]._pSpellFlags & 4) == 4) { plr[myplr]._pSpellFlags &= ~0x2; plr[myplr]._pSpellFlags &= ~0x4; @@ -1341,7 +1340,6 @@ void InitMissiles() } } } -#endif nummissiles = 0; for (i = 0; i < MAXMISSILES; i++) { diff --git a/Source/monster.cpp b/Source/monster.cpp index 4cd30e388..34cd5e1ce 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -71,9 +71,6 @@ int offset_x[8] = { 1, 0, -1, -1, -1, 0, 1, 1 }; /** Maps from direction to delta Y-offset. */ int offset_y[8] = { 1, 1, 1, 0, -1, -1, -1, 0 }; -int HorkXAdd[8] = { 1, 0, -1, -1, -1, 0, 1, 1 }; // CODEFIX: same values as offset_x, remove it and use offset_x instead -int HorkYAdd[8] = { 1, 1, 1, 0, -1, -1, -1, 0 }; // CODEFIX: same values as offset_y, remove it and use offset_y instead - /** unused */ int rnd5[4] = { 5, 10, 15, 20 }; int rnd10[4] = { 10, 15, 20, 30 }; @@ -370,23 +367,13 @@ void InitMonsterGFX(int monst) } if (mtype == MT_SUCCUBUS && !(MissileFileFlag & 4)) { MissileFileFlag |= 4; -#ifndef HELLFIRE LoadMissileGFX(MFILE_FLARE); LoadMissileGFX(MFILE_FLAREEXP); -#endif } if (mtype >= MT_INCIN && mtype <= MT_HELLBURN && !(MissileFileFlag & 8)) { MissileFileFlag |= 8; LoadMissileGFX(MFILE_KRULL); } -#ifdef HELLFIRE - if ((mtype >= MT_NACID && mtype <= MT_XACID || mtype == MT_SPIDLORD) && !(MissileFileFlag & 0x10)) { - MissileFileFlag |= 0x10; - LoadMissileGFX(MFILE_ACIDBF); - LoadMissileGFX(MFILE_ACIDSPLA); - LoadMissileGFX(MFILE_ACIDPUD); - } -#endif if (mtype == MT_SNOWWICH && !(MissileFileFlag & 0x20)) { MissileFileFlag |= 0x20; LoadMissileGFX(MFILE_SCUBMISB); @@ -406,14 +393,12 @@ void InitMonsterGFX(int monst) MissileFileFlag |= 8; LoadMissileGFX(MFILE_KRULL); } -#ifndef HELLFIRE - if (mtype >= MT_NACID && mtype <= MT_XACID && !(MissileFileFlag & 0x10)) { + if ((mtype >= MT_NACID && mtype <= MT_XACID || mtype == MT_SPIDLORD) && !(MissileFileFlag & 0x10)) { MissileFileFlag |= 0x10; LoadMissileGFX(MFILE_ACIDBF); LoadMissileGFX(MFILE_ACIDSPLA); LoadMissileGFX(MFILE_ACIDPUD); } -#else if (mtype == MT_LICH && !(MissileFileFlag & 0x100)) { MissileFileFlag |= 0x100u; LoadMissileGFX(MFILE_LICH); @@ -441,7 +426,6 @@ void InitMonsterGFX(int monst) MissileFileFlag |= 0x2000u; LoadMissileGFX(MFILE_EXBL3); } -#endif if (mtype == MT_DIABLO) { LoadMissileGFX(MFILE_FIREPLAR); } @@ -817,22 +801,14 @@ void PlaceUniqueMonst(int uniqindex, int miniontype, int bosspacksize) if (gbMaxPlayers != 1) { if (Monst->_mAi == AI_LAZHELP) Monst->mtalkmsg = 0; -#ifndef HELLFIRE - if (Monst->_mAi != AI_LAZURUS || quests[Q_BETRAYER]._qvar1 <= 3) { - if (Monst->mtalkmsg) { - Monst->_mgoal = MGOAL_INQUIRING; - } - } else { + if (Monst->_mAi == AI_LAZURUS && quests[Q_BETRAYER]._qvar1 > 3) { Monst->_mgoal = MGOAL_NORMAL; + } else if (Monst->mtalkmsg) { + Monst->_mgoal = MGOAL_INQUIRING; } -#endif - } -#ifdef HELLFIRE - if (Monst->mtalkmsg) -#else - else if (Monst->mtalkmsg) -#endif + } else if (Monst->mtalkmsg) { Monst->_mgoal = MGOAL_INQUIRING; + } if (gnDifficulty == DIFF_NIGHTMARE) { Monst->_mmaxhp = 3 * Monst->_mmaxhp; @@ -1324,25 +1300,12 @@ void M_Enemy(int i) best_dist = -1; bestsameroom = 0; Monst = &monster[i]; - if ( - Monst->_mFlags & MFLAG_BERSERK || !(Monst->_mFlags & MFLAG_GOLEM)) { + if (Monst->_mFlags & MFLAG_BERSERK || !(Monst->_mFlags & MFLAG_GOLEM)) { for (pnum = 0; pnum < MAX_PLRS; pnum++) { if (!plr[pnum].plractive || currlevel != plr[pnum].plrlevel || plr[pnum]._pLvlChanging -#ifdef HELLFIRE - || ((plr[pnum]._pHitPoints >> 6) == 0) -#else - || (plr[pnum]._pHitPoints == 0 && gbMaxPlayers != 1) -#endif - ) + || ((plr[pnum]._pHitPoints >> 6) == 0) && gbMaxPlayers != 1) continue; -#ifdef HELLFIRE sameroom = (dTransVal[Monst->_mx][Monst->_my] == dTransVal[plr[pnum]._px][plr[pnum]._py]); -#else - if (dTransVal[Monst->_mx][Monst->_my] == dTransVal[plr[pnum]._px][plr[pnum]._py]) - sameroom = TRUE; - else - sameroom = FALSE; -#endif if (abs(Monst->_mx - plr[pnum]._px) > abs(Monst->_my - plr[pnum]._py)) dist = Monst->_mx - plr[pnum]._px; else @@ -1364,10 +1327,8 @@ void M_Enemy(int i) mi = monstactive[j]; if (mi == i) continue; -#ifdef HELLFIRE if (!((monster[mi]._mhitpoints >> 6) > 0)) continue; -#endif if (monster[mi]._mx == 1 && monster[mi]._my == 0) continue; if (M_Talker(mi) && monster[mi].mtalkmsg) @@ -1496,11 +1457,7 @@ void M_StartWalk2(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int y monster[i]._mfutx = fx; monster[i]._mfuty = fy; dMonster[fx][fy] = i + 1; -#ifdef HELLFIRE - if (!(monster[i]._mFlags & MFLAG_HIDDEN) && monster[i].mlid != 0) -#else - if (monster[i]._uniqtype != 0) -#endif + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) ChangeLightXY(monster[i].mlid, monster[i]._mx, monster[i]._my); monster[i]._mxoff = xoff; monster[i]._myoff = yoff; @@ -1522,11 +1479,7 @@ void M_StartWalk3(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int y int x = mapx + monster[i]._mx; int y = mapy + monster[i]._my; -#ifdef HELLFIRE - if (!(monster[i]._mFlags & MFLAG_HIDDEN) && monster[i].mlid != 0) -#else - if (monster[i]._uniqtype != 0) -#endif + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) ChangeLightXY(monster[i].mlid, x, y); dMonster[monster[i]._mx][monster[i]._my] = -(i + 1); @@ -1635,17 +1588,6 @@ void M_ClearSquares(int i) m1 = -1 - i; m2 = i + 1; -#ifdef HELLFIRE - for (y = my - 1; y <= my + 1; y++) { - for (x = mx - 1; x <= mx + 1; x++) { - if (dMonster[x][y] == m1 || dMonster[x][y] == m2) - dMonster[x][y] = 0; - } - } - - dFlags[mx + 1][my] &= ~BFLAG_MONSTLR; - dFlags[mx][my + 1] &= ~BFLAG_MONSTLR; -#else for (y = my - 1; y <= my + 1; y++) { if (y >= 0 && y < MAXDUNY) { for (x = mx - 1; x <= mx + 1; x++) { @@ -1659,7 +1601,6 @@ void M_ClearSquares(int i) dFlags[mx + 1][my] &= ~BFLAG_MONSTLR; if (my + 1 < MAXDUNY) dFlags[mx][my + 1] &= ~BFLAG_MONSTLR; -#endif } void M_GetKnockback(int i) @@ -1706,10 +1647,8 @@ void M_StartHit(int i, int pnum, int dam) } else if ((monster[i].MType->mtype >= MT_NSCAV && monster[i].MType->mtype <= MT_YSCAV) || monster[i].MType->mtype == MT_GRAVEDIG) { monster[i]._mgoal = MGOAL_NORMAL; -#ifdef HELLFIRE monster[i]._mgoalvar1 = 0; monster[i]._mgoalvar2 = 0; -#endif } if (monster[i]._mmode != MM_STONE) { NewMonsterAnim(i, &monster[i].MType->Anims[MA_GOTHIT], monster[i]._mdir); @@ -1739,9 +1678,6 @@ void M_DiabloDeath(int i, BOOL sendmsg) NetSendCmdQuest(TRUE, Q_DIABLO); sgbSaveSoundOn = gbSoundOn; gbProcessPlayers = FALSE; -#ifdef HELLFIRE - gbSoundOn = FALSE; -#endif for (j = 0; j < nummonsters; j++) { k = monstactive[j]; if (k == i || monster[i]._msquelch == 0) @@ -1814,21 +1750,8 @@ void SpawnLoot(int i, BOOL sendmsg) void M2MStartHit(int mid, int i, int dam) { - if ((DWORD)mid >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("Invalid monster %d getting hit by monster", mid); -#endif - } - - if (monster[mid].MType == NULL) { -#ifdef HELLFIRE - return; -#else - app_fatal("Monster %d \"%s\" getting hit by monster: MType NULL", mid, monster[mid].mName); -#endif - } + assurance((DWORD)mid < MAXMONSTERS, mid); + assurance(monster[mid].MType != NULL, mid); if (i >= 0) monster[i].mWhoHit |= 1 << i; @@ -1846,10 +1769,8 @@ void M2MStartHit(int mid, int i, int dam) } else if (monster[mid].MType->mtype >= MT_NSCAV && monster[mid].MType->mtype <= MT_YSCAV || monster[mid].MType->mtype == MT_GRAVEDIG) { monster[mid]._mgoal = MGOAL_NORMAL; -#ifdef HELLFIRE monster[mid]._mgoalvar1 = 0; monster[mid]._mgoalvar2 = 0; -#endif } if (monster[mid]._mmode != MM_STONE) { @@ -1875,20 +1796,8 @@ void MonstStartKill(int i, int pnum, BOOL sendmsg) int md; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("MonstStartKill: Invalid monster %d", i); -#endif - } - if (monster[i].MType == NULL) { -#ifdef HELLFIRE - return; -#else - app_fatal("MonstStartKill: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif - } + assurance((DWORD)i < MAXMONSTERS, i); + assurance(monster[i].MType != NULL, i); Monst = &monster[i]; if (pnum >= 0) @@ -1911,9 +1820,7 @@ void MonstStartKill(int i, int pnum, BOOL sendmsg) Monst->_mdir = md; NewMonsterAnim(i, &Monst->MType->Anims[MA_DEATH], md); Monst->_mmode = MM_DEATH; -#ifdef HELLFIRE Monst->_mgoal = 0; -#endif Monst->_mxoff = 0; Monst->_myoff = 0; Monst->_mVar1 = 0; @@ -1933,27 +1840,9 @@ void M2MStartKill(int i, int mid) { int md; - if ((DWORD)i >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("M2MStartKill: Invalid monster (attacker) %d", i); -#endif - } -#ifdef HELLFIRE - if ((DWORD)mid >= MAXMONSTERS) { - return; -#else - if ((DWORD)i >= MAXMONSTERS) { /// BUGFIX: should check `mid` - app_fatal("M2MStartKill: Invalid monster (killed) %d", mid); -#endif - } - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return; -#else - app_fatal("M2MStartKill: Monster %d \"%s\" MType NULL", mid, monster[mid].mName); -#endif + assurance((DWORD)i < MAXMONSTERS, i); + assurance((DWORD)mid < MAXMONSTERS, mid); + assurance(monster[mid].MType != NULL, mid); delta_kill_monster(mid, monster[mid]._mx, monster[mid]._my, currlevel); NetSendCmdLocParam1(FALSE, CMD_MONSTDEATH, monster[mid]._mx, monster[mid]._my, mid); @@ -1966,12 +1855,7 @@ void M2MStartKill(int i, int mid) monster[mid]._mhitpoints = 0; SetRndSeed(monster[mid]._mRndSeed); -#ifdef HELLFIRE SpawnLoot(mid, TRUE); -#else - if (mid >= MAX_PLRS) - SpawnItem(mid, monster[mid]._mx, monster[mid]._my, TRUE); -#endif if (monster[mid].MType->mtype == MT_DIABLO) M_DiabloDeath(mid, TRUE); @@ -2009,13 +1893,7 @@ void M2MStartKill(int i, int mid) void M_StartKill(int i, int pnum) { - if ((DWORD)i >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("M_StartKill: Invalid monster %d", i); -#endif - } + assurance((DWORD)i < MAXMONSTERS, i); if (myplr == pnum) { delta_kill_monster(i, monster[i]._mx, monster[i]._my, currlevel); @@ -2031,12 +1909,7 @@ void M_StartKill(int i, int pnum) void M_SyncStartKill(int i, int x, int y, int pnum) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("M_SyncStartKill: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); if (monster[i]._mhitpoints == 0 || monster[i]._mmode == MM_DEATH) { return; @@ -2050,32 +1923,18 @@ void M_SyncStartKill(int i, int x, int y, int pnum) monster[i]._moldy = y; } -#ifdef HELLFIRE - MonstStartKill(i, pnum, FALSE); -#else if (monster[i]._mmode == MM_STONE) { MonstStartKill(i, pnum, FALSE); monster[i]._mmode = MM_STONE; } else { MonstStartKill(i, pnum, FALSE); } -#endif } void M_StartFadein(int i, int md, BOOL backwards) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("M_StartFadein: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return; -#else - app_fatal("M_StartFadein: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + assurance((DWORD)i < MAXMONSTERS, i); + assurance(monster[i].MType != NULL, i); NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], md); monster[i]._mmode = MM_FADEIN; @@ -2095,18 +1954,9 @@ void M_StartFadein(int i, int md, BOOL backwards) void M_StartFadeout(int i, int md, BOOL backwards) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("M_StartFadeout: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return; -#else - app_fatal("M_StartFadeout: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + assurance((DWORD)i < MAXMONSTERS, i); + assurance(monster[i].MType != NULL, i); + assurance(monster[i].MType != NULL, i); NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], md); monster[i]._mmode = MM_FADEOUT; @@ -2127,18 +1977,8 @@ void M_StartHeal(int i) { MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("M_StartHeal: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return; -#else - app_fatal("M_StartHeal: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + assurance((DWORD)i < MAXMONSTERS, i); + assurance(monster[i].MType != NULL, i); Monst = &monster[i]; Monst->_mAnimData = Monst->MType->Anims[MA_SPECIAL].Data[Monst->_mdir]; @@ -2152,12 +1992,7 @@ void M_ChangeLightOffset(int monst) { int lx, ly, _mxoff, _myoff, sign; - if ((DWORD)monst >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("M_ChangeLightOffset: Invalid monster %d", monst); -#endif + assurance((DWORD)monst < MAXMONSTERS, monst); lx = monster[monst]._mxoff + 2 * monster[monst]._myoff; ly = 2 * monster[monst]._myoff - monster[monst]._mxoff; @@ -2178,9 +2013,7 @@ void M_ChangeLightOffset(int monst) } _myoff *= (ly >> 3); -#ifdef HELLFIRE if (monster[monst].mlid) -#endif ChangeLightOff(monster[monst].mlid, _mxoff, _myoff); } @@ -2188,18 +2021,8 @@ BOOL M_DoStand(int i) { MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return 0; -#else - app_fatal("M_DoStand: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return 0; -#else - app_fatal("M_DoStand: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); Monst = &monster[i]; if (Monst->MType->mtype == MT_GOLEM) @@ -2219,38 +2042,22 @@ BOOL M_DoWalk(int i) { BOOL rv; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoWalk: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoWalk: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); if (monster[i]._mVar8 == monster[i].MType->Anims[MA_WALK].Frames) { dMonster[monster[i]._mx][monster[i]._my] = 0; monster[i]._mx += monster[i]._mVar1; monster[i]._my += monster[i]._mVar2; dMonster[monster[i]._mx][monster[i]._my] = i + 1; -#ifdef HELLFIRE - if (!(monster[i]._mFlags & MFLAG_HIDDEN) && monster[i].mlid != 0) -#else - if (monster[i]._uniqtype != 0) -#endif + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) ChangeLightXY(monster[i].mlid, monster[i]._mx, monster[i]._my); M_StartStand(i, monster[i]._mdir); rv = TRUE; } else { if (monster[i]._mAnimCnt == 0) { -#ifdef HELLFIRE if (monster[i]._mVar8 == 0 && monster[i].MType->mtype == MT_FLESTHNG) PlayEffect(i, 3); -#endif monster[i]._mVar8++; monster[i]._mVar6 += monster[i]._mxvel; monster[i]._mVar7 += monster[i]._myvel; @@ -2260,11 +2067,7 @@ BOOL M_DoWalk(int i) rv = FALSE; } -#ifdef HELLFIRE - if (!(monster[i]._mFlags & MFLAG_HIDDEN) && monster[i].mlid != 0) -#else - if (monster[i]._uniqtype != 0) -#endif + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) M_ChangeLightOffset(i); return rv; @@ -2274,26 +2077,12 @@ BOOL M_DoWalk2(int i) { BOOL rv; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoWalk2: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoWalk2: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); if (monster[i]._mVar8 == monster[i].MType->Anims[MA_WALK].Frames) { dMonster[monster[i]._mVar1][monster[i]._mVar2] = 0; -#ifdef HELLFIRE - if (!(monster[i]._mFlags & MFLAG_HIDDEN) && monster[i].mlid != 0) -#else - if (monster[i]._uniqtype != 0) -#endif + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) ChangeLightXY(monster[i].mlid, monster[i]._mx, monster[i]._my); M_StartStand(i, monster[i]._mdir); rv = TRUE; @@ -2309,11 +2098,7 @@ BOOL M_DoWalk2(int i) } rv = FALSE; } -#ifdef HELLFIRE - if (!(monster[i]._mFlags & MFLAG_HIDDEN) && monster[i].mlid != 0) -#else - if (monster[i]._uniqtype != 0) -#endif + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) M_ChangeLightOffset(i); return rv; @@ -2323,18 +2108,8 @@ BOOL M_DoWalk3(int i) { BOOL rv; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoWalk3: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoWalk3: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); if (monster[i]._mVar8 == monster[i].MType->Anims[MA_WALK].Frames) { dMonster[monster[i]._mx][monster[i]._my] = 0; @@ -2342,11 +2117,7 @@ BOOL M_DoWalk3(int i) monster[i]._my = monster[i]._mVar2; dFlags[monster[i]._mVar4][monster[i]._mVar5] &= ~BFLAG_MONSTLR; dMonster[monster[i]._mx][monster[i]._my] = i + 1; -#ifdef HELLFIRE - if (!(monster[i]._mFlags & MFLAG_HIDDEN) && monster[i].mlid != 0) -#else - if (monster[i]._uniqtype != 0) -#endif + if ((!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN)) && monster[i].mlid != 0) ChangeLightXY(monster[i].mlid, monster[i]._mx, monster[i]._my); M_StartStand(i, monster[i]._mdir); rv = TRUE; @@ -2362,11 +2133,7 @@ BOOL M_DoWalk3(int i) } rv = FALSE; } -#ifdef HELLFIRE - if (monster[i]._uniqtype != 0 && !(monster[i]._mFlags & MFLAG_HIDDEN)) // BUGFIX: change uniqtype check to mlid check like it is in all other places -#else - if (monster[i]._uniqtype != 0) -#endif + if (monster[i].mlid != 0 && (!gbIsHellfire || !(monster[i]._mFlags & MFLAG_HIDDEN))) // BUGFIX: change uniqtype check to mlid check like it is in all other places (fixed) M_ChangeLightOffset(i); return rv; @@ -2376,19 +2143,8 @@ void M_TryM2MHit(int i, int mid, int hper, int mind, int maxd) { BOOL ret; - if ((DWORD)mid >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("M_TryM2MHit: Invalid monster %d", mid); -#endif - } - if (monster[mid].MType == NULL) -#ifdef HELLFIRE - return; -#else - app_fatal("M_TryM2MHit: Monster %d \"%s\" MType NULL", mid, monster[mid].mName); -#endif + assurance((DWORD)mid < MAXMONSTERS, mid); + assurance(monster[mid].MType != NULL, mid); if (monster[mid]._mhitpoints >> 6 > 0 && (monster[mid].MType->mtype != MT_ILLWEAV || monster[mid]._mgoal != MGOAL_RETREAT)) { int hit = random_(4, 100); if (monster[mid]._mmode == MM_STONE) @@ -2424,18 +2180,8 @@ void M_TryH2HHit(int i, int pnum, int Hit, int MinDam, int MaxDam) int newx, newy; int j, misnum, ms_num, cur_ms_num, new_hp, dir, ac; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("M_TryH2HHit: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return; -#else - app_fatal("M_TryH2HHit: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + assurance((DWORD)i < MAXMONSTERS, i); + assurance(monster[i].MType != NULL, i); if (monster[i]._mFlags & MFLAG_TARGETS_MONSTER) { M_TryM2MHit(i, pnum, Hit, MinDam, MaxDam); return; @@ -2519,10 +2265,7 @@ void M_TryH2HHit(int i, int pnum, int Hit, int MinDam, int MaxDam) ms_num = misnum; } if (plr[pnum]._pMaxHP > 64) { -#ifndef HELLFIRE - if (plr[pnum]._pMaxHPBase > 64) -#endif - { + if (plr[pnum]._pMaxHPBase > 64) { plr[pnum]._pMaxHP -= 64; if (plr[pnum]._pHitPoints > plr[pnum]._pMaxHP) { plr[pnum]._pHitPoints = plr[pnum]._pMaxHP; @@ -2600,26 +2343,10 @@ BOOL M_DoAttack(int i) { MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoAttack: Invalid monster %d", i); -#endif - + commitment((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; - if (Monst->MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoAttack: Monster %d \"%s\" MType NULL", i, Monst->mName); -#endif - if (Monst->MType == NULL) // BUGFIX: should check MData -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoAttack: Monster %d \"%s\" MData NULL", i, Monst->mName); -#endif + commitment(Monst->MType != NULL, i); + commitment(Monst->MData != NULL, i); // BUGFIX: should check MData (fixed) if (monster[i]._mAnimFrame == monster[i].MData->mAFNum) { M_TryH2HHit(i, monster[i]._menemy, monster[i].mHit, monster[i].mMinDamage, monster[i].mMaxDamage); @@ -2648,24 +2375,9 @@ BOOL M_DoRAttack(int i) { int multimissiles, mi; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoRAttack: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoRAttack: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif - if (monster[i].MType == NULL) // BUGFIX: should check MData -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoRAttack: Monster %d \"%s\" MData NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); + commitment(monster[i].MData != NULL, i); if (monster[i]._mAnimFrame == monster[i].MData->mAFNum) { if (monster[i]._mVar1 != -1) { @@ -2676,8 +2388,8 @@ BOOL M_DoRAttack(int i) for (mi = 0; mi < multimissiles; mi++) { AddMissile( #ifdef HELLFIRE - monster[i]._mx + HorkXAdd[monster[i]._mdir], - monster[i]._my + HorkYAdd[monster[i]._mdir], + monster[i]._mx + offset_x[monster[i]._mdir], + monster[i]._my + offset_y[monster[i]._mdir], #else monster[i]._mx, monster[i]._my, @@ -2705,30 +2417,15 @@ BOOL M_DoRAttack(int i) BOOL M_DoRSpAttack(int i) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoRSpAttack: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoRSpAttack: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif - if (monster[i].MType == NULL) // BUGFIX: should check MData -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoRSpAttack: Monster %d \"%s\" MData NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); + commitment(monster[i].MData != NULL, i); // BUGFIX: should check MData (fixed) if (monster[i]._mAnimFrame == monster[i].MData->mAFNum2 && monster[i]._mAnimCnt == 0) { AddMissile( #ifdef HELLFIRE - monster[i]._mx + HorkXAdd[monster[i]._mdir], - monster[i]._my + HorkYAdd[monster[i]._mdir], + monster[i]._mx + offset_x[monster[i]._mdir], + monster[i]._my + offset_y[monster[i]._mdir], #else monster[i]._mx, monster[i]._my, @@ -2741,10 +2438,7 @@ BOOL M_DoRSpAttack(int i) i, monster[i]._mVar3, 0); -#ifdef HELLFIRE - if (monster[i].MType->Snds[3][0] != 0) // BUGFIX `Monsters[i].` should be `monster[i].MType->` (fixed) -#endif - PlayEffect(i, 3); + PlayEffect(i, 3); } if (monster[i]._mAi == AI_MEGA && monster[i]._mAnimFrame == 3) { @@ -2765,24 +2459,9 @@ BOOL M_DoRSpAttack(int i) BOOL M_DoSAttack(int i) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoSAttack: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoSAttack: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif - if (monster[i].MType == NULL) // BUGFIX: should check MData -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoSAttack: Monster %d \"%s\" MData NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); + commitment(monster[i].MData != NULL, i); if (monster[i]._mAnimFrame == monster[i].MData->mAFNum2) M_TryH2HHit(i, monster[i]._menemy, monster[i].mHit2, monster[i].mMinDamage2, monster[i].mMaxDamage2); @@ -2797,12 +2476,7 @@ BOOL M_DoSAttack(int i) BOOL M_DoFadein(int i) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoFadein: Invalid monster %d", i); -#endif + commitment((DWORD)i < MAXMONSTERS, i); if ((!(monster[i]._mFlags & MFLAG_LOCK_ANIMATION) || monster[i]._mAnimFrame != 1) && (monster[i]._mFlags & MFLAG_LOCK_ANIMATION || monster[i]._mAnimFrame != monster[i]._mAnimLen)) { @@ -2819,12 +2493,7 @@ BOOL M_DoFadeout(int i) { int mt; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoFadeout: Invalid monster %d", i); -#endif + commitment((DWORD)i < MAXMONSTERS, i); if ((!(monster[i]._mFlags & MFLAG_LOCK_ANIMATION) || monster[i]._mAnimFrame != 1) && (monster[i]._mFlags & MFLAG_LOCK_ANIMATION || monster[i]._mAnimFrame != monster[i]._mAnimLen)) { @@ -2848,12 +2517,7 @@ BOOL M_DoHeal(int i) { MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoHeal: Invalid monster %d", i); -#endif + commitment((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (monster[i]._mFlags & MFLAG_NOHEAL) { #ifndef HELLFIRE @@ -2882,12 +2546,7 @@ BOOL M_DoTalk(int i) MonsterStruct *Monst; int tren; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoTalk: Invalid monster %d", i); -#endif + commitment((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; M_StartStand(i, monster[i]._mdir); @@ -2956,12 +2615,7 @@ void M_Teleport(int i) MonsterStruct *Monst; int k, j, x, y, _mx, _my, rx, ry; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("M_Teleport: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); done = FALSE; @@ -2999,19 +2653,9 @@ void M_Teleport(int i) BOOL M_DoGotHit(int i) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoGotHit: Invalid monster %d", i); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoGotHit: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif if (monster[i]._mAnimFrame == monster[i]._mAnimLen) { M_StartStand(i, monster[i]._mdir); @@ -3025,12 +2669,7 @@ void M_UpdateLeader(int i) { int ma, j; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("M_UpdateLeader: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); for (j = 0; j < nummonsters; j++) { ma = monstactive[j]; @@ -3120,18 +2759,8 @@ BOOL M_DoDeath(int i) { int x, y; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoDeath: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoDeath: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); monster[i]._mVar1++; if (monster[i].MType->mtype == MT_DIABLO) { @@ -3168,18 +2797,8 @@ BOOL M_DoDeath(int i) BOOL M_DoSpStand(int i) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoSpStand: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoSpStand: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); if (monster[i]._mAnimFrame == monster[i].MData->mAFNum2) PlayEffect(i, 3); @@ -3196,18 +2815,8 @@ BOOL M_DoDelay(int i) { int oFrame; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoDelay: Invalid monster %d", i); -#endif - if (monster[i].MType == NULL) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoDelay: Monster %d \"%s\" MType NULL", i, monster[i].mName); -#endif + commitment((DWORD)i < MAXMONSTERS, i); + commitment(monster[i].MType != NULL, i); monster[i]._mAnimData = monster[i].MType->Anims[MA_STAND].Data[M_GetDir(i)]; if (monster[i]._mAi == AI_LAZURUS) { @@ -3227,12 +2836,7 @@ BOOL M_DoDelay(int i) BOOL M_DoStone(int i) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_DoStone: Invalid monster %d", i); -#endif + commitment((DWORD)i < MAXMONSTERS, i); if (!monster[i]._mhitpoints) { dMonster[monster[i]._mx][monster[i]._my] = 0; @@ -3246,12 +2850,7 @@ void M_WalkDir(int i, int md) { int mwi; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("M_WalkDir: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); mwi = monster[i].MType->Anims[MA_WALK].Frames - 1; switch (md) { @@ -3287,12 +2886,7 @@ void GroupUnity(int i) int leader, m, j; BOOL clear; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("GroupUnity: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); if (monster[i].leaderflag != 0) { leader = monster[i].leader; @@ -3375,12 +2969,7 @@ BOOL M_PathWalk(int i) BOOL(*Check) (int, int, int); - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("M_PathWalk: Invalid monster %d", i); -#endif + commitment((DWORD)i < MAXMONSTERS, i); Check = PosOkMonst3; if (!(monster[i]._mFlags & MFLAG_CAN_OPEN_DOOR)) @@ -3458,13 +3047,7 @@ void MAI_Zombie(int i) int mx, my; int md, v; - if ((DWORD)i >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Zombie: Invalid monster %d", i); -#endif - } + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode != MM_STAND) { @@ -3506,12 +3089,7 @@ void MAI_SkelSd(int i) MonsterStruct *Monst; int mx, my, x, y, md; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_SkelSd: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode != MM_STAND || Monst->_msquelch == 0) { @@ -3547,12 +3125,7 @@ BOOL MAI_Path(int i) MonsterStruct *Monst; BOOL clear; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("MAI_Path: Invalid monster %d", i); -#endif + commitment((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->MType->mtype != MT_GOLEM) { @@ -3596,13 +3169,7 @@ void MAI_Snake(int i) int pnum; int tmp; - if ((DWORD)i >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Snake: Invalid monster %d", i); -#endif - } + assurance((DWORD)i < MAXMONSTERS, i); char pattern[6] = { 1, 1, 0, -1, -1, 0 }; Monst = &monster[i]; pnum = Monst->_menemy; @@ -3679,15 +3246,10 @@ void MAI_Snake(int i) void MAI_Bat(int i) { MonsterStruct *Monst; - int md, v, pnum; - int fx, fy, xd, yd; - - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Bat: Invalid monster %d", i); -#endif + int md, v, pnum; + int fx, fy, xd, yd; + + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; pnum = Monst->_menemy; @@ -3751,12 +3313,7 @@ void MAI_SkelBow(int i) BOOL walking; walking = FALSE; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_SkelBow: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode != MM_STAND || Monst->_msquelch == 0) { @@ -3797,12 +3354,7 @@ void MAI_Fat(int i) MonsterStruct *Monst; int mx, my, md, v; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Fat: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode != MM_STAND || Monst->_msquelch == 0) { @@ -3837,13 +3389,7 @@ void MAI_Sneak(int i) int mx, my, md; int dist, v; - if ((DWORD)i >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Sneak: Invalid monster %d", i); -#endif - } + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode == MM_STAND) { @@ -3914,12 +3460,7 @@ void MAI_Fireman(int i) int fx, fy; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Fireman: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (monster[i]._mmode != MM_STAND || Monst->_msquelch == 0) @@ -3978,13 +3519,7 @@ void MAI_Fallen(int i) int m, rad; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Fallen: Invalid monster %d", i); -#endif - } + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mgoal == MGOAL_ATTACK2) { @@ -4050,12 +3585,7 @@ void MAI_Cleaver(int i) MonsterStruct *Monst; int x, y, mx, my, md; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Cleaver: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode != MM_STAND || Monst->_msquelch == 0) { @@ -4086,12 +3616,7 @@ void MAI_Round(int i, BOOL special) int mx, my, md; int dist, v; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Round: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode == MM_STAND && Monst->_msquelch != 0) { fy = Monst->_menemyy; @@ -4153,12 +3678,7 @@ void MAI_Ranged(int i, int missile_type, BOOL special) int fx, fy, mx, my; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Ranged: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); if (monster[i]._mmode != MM_STAND) { return; @@ -4249,12 +3769,7 @@ void MAI_Scav(int i) int x, y; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Scav: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; done = FALSE; if (monster[i]._mmode != MM_STAND) @@ -4283,13 +3798,14 @@ void MAI_Scav(int i) Monst->_mmaxhp = Monst->_mhitpoints; if (Monst->_mgoalvar3 <= 0 || Monst->_mhitpoints == mMaxHP) dDead[Monst->_mx][Monst->_my] = 0; - } - if (Monst->_mhitpoints == Monst->_mmaxhp) { #else Monst->_mhitpoints += 64; - } - if (Monst->_mhitpoints >= (Monst->_mmaxhp >> 1) + (Monst->_mmaxhp >> 2)) { #endif + } + int targetHealth = Monst->_mmaxhp; + if (!gbIsHellfire) + targetHealth = (Monst->_mmaxhp >> 1) + (Monst->_mmaxhp >> 2); + if (Monst->_mhitpoints >= targetHealth) { Monst->_mgoal = MGOAL_NORMAL; Monst->_mgoalvar1 = 0; Monst->_mgoalvar2 = 0; @@ -4357,12 +3873,7 @@ void MAI_Garg(int i) MonsterStruct *Monst; int mx, my, dx, dy, md; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Garg: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; dx = Monst->_mx - Monst->_lastx; @@ -4405,12 +3916,7 @@ void MAI_RoundRanged(int i, int missile_type, BOOL checkdoors, int dam, int less int fx, fy; int md, dist, v; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_RoundRanged: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode == MM_STAND && Monst->_msquelch != 0) { fx = Monst->_menemyx; @@ -4498,12 +4004,7 @@ void MAI_RR2(int i, int mistype, int dam) int mx, my, fx, fy; int dist, v, md; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_RR2: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; mx = Monst->_mx - Monst->_menemyx; @@ -4583,12 +4084,7 @@ void MAI_Golum(int i) MonsterStruct *Monst; BOOL have_enemy, ok; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Golum: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mx == 1 && Monst->_my == 0) { @@ -4664,12 +4160,7 @@ void MAI_SkelKing(int i) int mx, my, fx, fy, nx, ny; int dist, v, md; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_SkelKing: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode == MM_STAND && Monst->_msquelch != 0) { fx = Monst->_menemyx; @@ -4736,12 +4227,7 @@ void MAI_Rhino(int i) int mx, my, fx, fy; int v, dist, md; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Rhino: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode == MM_STAND && Monst->_msquelch != 0) { fx = Monst->_menemyx; @@ -4852,7 +4338,7 @@ void MAI_HorkDemon(int i) if (Monst->_mgoal == 1) { if ((abs(mx) >= 3 || abs(my) >= 3) && v < 2 * Monst->_mint + 43) { - if (PosOkMonst(i, Monst->_mx + HorkXAdd[Monst->_mdir], Monst->_my + HorkYAdd[Monst->_mdir]) && nummonsters < MAXMONSTERS) { + if (PosOkMonst(i, Monst->_mx + offset_x[Monst->_mdir], Monst->_my + offset_y[Monst->_mdir]) && nummonsters < MAXMONSTERS) { M_StartRSpAttack(i, MIS_HORKDMN, 0); } } else if (abs(mx) < 2 && abs(my) < 2) { @@ -4881,12 +4367,7 @@ void MAI_Counselor(int i) int dist, md, v; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Counselor: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); if (monster[i]._mmode == MM_STAND && monster[i]._msquelch != 0) { Monst = &monster[i]; fx = Monst->_menemyx; @@ -4956,12 +4437,7 @@ void MAI_Garbud(int i) int _mx, _my, md; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Garbud: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (Monst->_mmode != MM_STAND) { @@ -5004,12 +4480,7 @@ void MAI_Zhar(int i) int mx, my, md; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Zhar: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (monster[i]._mmode != MM_STAND) { @@ -5048,12 +4519,7 @@ void MAI_SnotSpil(int i) int mx, my, md; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_SnotSpil: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (monster[i]._mmode != MM_STAND) { @@ -5102,12 +4568,7 @@ void MAI_Lazurus(int i) int mx, my, md; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Lazurus: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (monster[i]._mmode != MM_STAND) { @@ -5141,9 +4602,7 @@ void MAI_Lazurus(int i) } if (Monst->_mgoal == MGOAL_NORMAL || Monst->_mgoal == MGOAL_RETREAT || Monst->_mgoal == MGOAL_MOVE) { -#ifndef HELLFIRE Monst->mtalkmsg = 0; -#endif MAI_Counselor(i); } @@ -5159,12 +4618,7 @@ void MAI_Lazhelp(int i) volatile int md; // BUGFIX: very questionable volatile MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Lazhelp: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); if (monster[i]._mmode != MM_STAND) return; @@ -5196,12 +4650,7 @@ void MAI_Lachdanan(int i) int _mx, _my, md; MonsterStruct *Monst; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Lachdanan: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (monster[i]._mmode != MM_STAND) { @@ -5238,12 +4687,7 @@ void MAI_Warlord(int i) MonsterStruct *Monst; int mx, my, md; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MAI_Warlord: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; if (monster[i]._mmode != MM_STAND) { @@ -5346,26 +4790,14 @@ void ProcessMonsters() if (Monst->_mFlags & MFLAG_TARGETS_MONSTER) { _menemy = Monst->_menemy; - if ((DWORD)_menemy >= MAXMONSTERS) { -#ifdef HELLFIRE - return; -#else - app_fatal("Illegal enemy monster %d for monster \"%s\"", _menemy, Monst->mName); -#endif - } + assurance((DWORD)_menemy < MAXMONSTERS, _menemy); Monst->_lastx = monster[Monst->_menemy]._mfutx; Monst->_menemyx = Monst->_lastx; Monst->_lasty = monster[Monst->_menemy]._mfuty; Monst->_menemyy = Monst->_lasty; } else { _menemy = Monst->_menemy; - if ((DWORD)_menemy >= MAX_PLRS) { -#ifdef HELLFIRE - return; -#else - app_fatal("Illegal enemy player %d for monster \"%s\"", _menemy, Monst->mName); -#endif - } + assurance((DWORD)_menemy < MAX_PLRS, _menemy); Monst->_menemyx = plr[Monst->_menemy]._pfutx; Monst->_menemyy = plr[Monst->_menemy]._pfuty; if (dFlags[mx][my] & BFLAG_VISIBLE) { @@ -5487,12 +4919,7 @@ BOOL DirOK(int i, int mdir) int x, y; int mcount, mi; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("DirOK: Invalid monster %d", i); -#endif + commitment((DWORD)i < MAXMONSTERS, i); fx = monster[i]._mx + offset_x[mdir]; fy = monster[i]._my + offset_y[mdir]; if (fy < 0 || fy >= MAXDUNY || fx < 0 || fx >= MAXDUNX || !PosOkMonst(i, fx, fy)) @@ -5721,13 +5148,7 @@ void SyncMonsterAnim(int i) { int _mdir; -#ifdef HELLFIRE - if ((DWORD)i >= MAXMONSTERS || i < 0) - return; -#else - if ((DWORD)i >= MAXMONSTERS) - app_fatal("SyncMonsterAnim: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS || i < 0, i); monster[i].MType = &Monsters[monster[i]._mMTidx]; monster[i].MData = Monsters[monster[i]._mMTidx].MData; if (monster[i]._uniqtype != 0) @@ -5929,22 +5350,12 @@ void MissToMonst(int i, int x, int y) MissileStruct *Miss; MonsterStruct *Monst; - if ((DWORD)i >= MAXMISSILES) -#ifdef HELLFIRE - return; -#else - app_fatal("MissToMonst: Invalid missile %d", i); -#endif + assurance((DWORD)i < MAXMISSILES, i); Miss = &missile[i]; m = Miss->_misource; - if ((DWORD)m >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("MissToMonst: Invalid monster %d", m); -#endif + assurance((DWORD)m < MAXMONSTERS, m); Monst = &monster[m]; oldx = Miss->_mix; @@ -6009,48 +5420,17 @@ void MissToMonst(int i, int x, int y) BOOL PosOkMonst(int i, int x, int y) { -#ifdef HELLFIRE - int oi; - BOOL ret; - - ret = !SolidLoc(x, y) && dPlayer[x][y] == 0 && dMonster[x][y] == 0; - oi = dObject[x][y]; - if (ret && oi != 0) { - oi = oi > 0 ? oi - 1 : -(oi + 1); - if (object[oi]._oSolidFlag) - ret = FALSE; - } - - if (ret) - ret = monster_posok(i, x, y); -#else int oi, mi, j; BOOL ret, fire; - fire = FALSE; ret = !SolidLoc(x, y) && dPlayer[x][y] == 0 && dMonster[x][y] == 0; if (ret && dObject[x][y] != 0) { oi = dObject[x][y] > 0 ? dObject[x][y] - 1 : -(dObject[x][y] + 1); if (object[oi]._oSolidFlag) ret = FALSE; } - - if (ret && dMissile[x][y] && i >= 0) { - mi = dMissile[x][y]; - if (mi > 0) { - if (missile[mi - 1]._mitype == MIS_FIREWALL) { // BUGFIX: Change 'mi' to 'mi - 1' (fixed) - fire = TRUE; - } else { - for (j = 0; j < nummissiles; j++) { - if (missile[missileactive[j]]._mitype == MIS_FIREWALL) - fire = TRUE; - } - } - } - if (fire && (!(monster[i].mMagicRes & IMMUNE_FIRE) || monster[i].MType->mtype == MT_DIABLO)) - ret = FALSE; - } -#endif + if (ret) + ret = monster_posok(i, x, y); return ret; } @@ -6062,9 +5442,10 @@ BOOLEAN monster_posok(int i, int x, int y) ret = TRUE; mi = dMissile[x][y]; - if (mi && i >= 0) { - fire = FALSE; + if (mi != 0 && i >= 0) { + fire = FALSE; lightning = FALSE; +#ifdef HELLFIRE if (mi > 0) { if (missile[mi - 1]._mitype == MIS_FIREWALL) { // BUGFIX: Change 'mi' to 'mi - 1' (fixed) fire = TRUE; @@ -6086,43 +5467,7 @@ BOOLEAN monster_posok(int i, int x, int y) } } } - if ((fire && !(monster[i].mMagicRes & IMMUNE_FIRE)) || (fire && monster[i].MType->mtype == MT_DIABLO)) - ret = FALSE; - if ((lightning && !(monster[i].mMagicRes & IMMUNE_LIGHTNING)) || (lightning && monster[i].MType->mtype == MT_DIABLO)) - ret = FALSE; - } - return ret; -} - -BOOL PosOkMonst2(int i, int x, int y) -{ - int oi, mi, j; -#ifdef HELLFIRE - BOOL ret; - - oi = dObject[x][y]; - ret = !SolidLoc(x, y); - if (ret && oi != 0) { - oi = oi > 0 ? oi - 1 : -(oi + 1); - if (object[oi]._oSolidFlag) - ret = FALSE; - } - - if (ret) - ret = monster_posok(i, x, y); #else - BOOL ret, fire; - - fire = FALSE; - ret = !SolidLoc(x, y); - if (ret && dObject[x][y] != 0) { - oi = dObject[x][y] > 0 ? dObject[x][y] - 1 : -(dObject[x][y] + 1); - if (object[oi]._oSolidFlag) - ret = FALSE; - } - - if (ret && dMissile[x][y] && i >= 0) { - mi = dMissile[x][y]; if (mi > 0) { if (missile[mi - 1]._mitype == MIS_FIREWALL) { // BUGFIX: Change 'mi' to 'mi - 1' (fixed) fire = TRUE; @@ -6133,44 +5478,38 @@ BOOL PosOkMonst2(int i, int x, int y) } } } +#endif if (fire && (!(monster[i].mMagicRes & IMMUNE_FIRE) || monster[i].MType->mtype == MT_DIABLO)) ret = FALSE; + if (lightning && (!(monster[i].mMagicRes & IMMUNE_LIGHTNING) || monster[i].MType->mtype == MT_DIABLO)) + ret = FALSE; } -#endif return ret; } -BOOL PosOkMonst3(int i, int x, int y) +BOOL PosOkMonst2(int i, int x, int y) { - int j, oi, objtype, mi; -#ifdef HELLFIRE - BOOL ret; - bool isdoor; - - ret = TRUE; - isdoor = FALSE; + int oi, mi, j; + BOOL ret, fire; - oi = dObject[x][y]; - if (ret && oi != 0) { - oi = oi > 0 ? oi - 1 : -(oi + 1); - objtype = object[oi]._otype; - isdoor = objtype == OBJ_L1LDOOR || objtype == OBJ_L1RDOOR - || objtype == OBJ_L2LDOOR || objtype == OBJ_L2RDOOR - || objtype == OBJ_L3LDOOR || objtype == OBJ_L3RDOOR; - if (object[oi]._oSolidFlag && !isdoor) { + ret = !SolidLoc(x, y); + if (ret && dObject[x][y] != 0) { + oi = dObject[x][y] > 0 ? dObject[x][y] - 1 : -(dObject[x][y] + 1); + if (object[oi]._oSolidFlag) ret = FALSE; - } - } - if (ret) { - ret = (!SolidLoc(x, y) || isdoor) && dPlayer[x][y] == 0 && dMonster[x][y] == 0; } if (ret) ret = monster_posok(i, x, y); -#else - BOOL ret, fire, isdoor; - fire = FALSE; + return ret; +} + +BOOL PosOkMonst3(int i, int x, int y) +{ + int j, oi, objtype, mi; + bool ret, fire, isdoor; + ret = TRUE; isdoor = FALSE; @@ -6187,25 +5526,8 @@ BOOL PosOkMonst3(int i, int x, int y) if (ret) { ret = (!SolidLoc(x, y) || isdoor) && dPlayer[x][y] == 0 && dMonster[x][y] == 0; } - if (ret && dMissile[x][y] != 0 && i >= 0) { - mi = dMissile[x][y]; - if (mi > 0) { - if (missile[mi - 1]._mitype == MIS_FIREWALL) { // BUGFIX: Change 'mi' to 'mi - 1' (fixed) - fire = TRUE; - } else { - for (j = 0; j < nummissiles; j++) { - mi = missileactive[j]; - if (missile[mi]._mitype == MIS_FIREWALL) { - fire = TRUE; - } - } - } - } - if (fire && (!(monster[i].mMagicRes & IMMUNE_FIRE) || monster[i].MType->mtype == MT_DIABLO)) { - ret = FALSE; - } - } -#endif + if (ret) + ret = monster_posok(i, x, y); return ret; } @@ -6350,12 +5672,7 @@ void TalktoMonster(int i) MonsterStruct *Monst; int pnum, itm; - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("TalktoMonster: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); Monst = &monster[i]; pnum = Monst->_menemy; @@ -6379,12 +5696,7 @@ void TalktoMonster(int i) void SpawnGolum(int i, int x, int y, int mi) { - if ((DWORD)i >= MAXMONSTERS) -#ifdef HELLFIRE - return; -#else - app_fatal("SpawnGolum: Invalid monster %d", i); -#endif + assurance((DWORD)i < MAXMONSTERS, i); dMonster[x][y] = i + 1; monster[i]._mx = x; @@ -6416,13 +5728,7 @@ void SpawnGolum(int i, int x, int y, int mi) BOOL CanTalkToMonst(int m) { - if ((DWORD)m >= MAXMONSTERS) { -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("CanTalkToMonst: Invalid monster %d", m); -#endif - } + commitment((DWORD)m < MAXMONSTERS, m); if (monster[m]._mgoal == MGOAL_INQUIRING) { return TRUE; @@ -6433,13 +5739,7 @@ BOOL CanTalkToMonst(int m) BOOL CheckMonsterHit(int m, BOOL *ret) { - if ((DWORD)m >= MAXMONSTERS) { -#ifdef HELLFIRE - return FALSE; -#else - app_fatal("CheckMonsterHit: Invalid monster %d", m); -#endif - } + commitment((DWORD)m < MAXMONSTERS, m); if (monster[m]._mAi == AI_GARG && monster[m]._mFlags & MFLAG_ALLOW_SPECIAL) { monster[m]._mFlags &= ~MFLAG_ALLOW_SPECIAL; diff --git a/Source/player.cpp b/Source/player.cpp index efbd00f0a..aa0f58487 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -204,7 +204,7 @@ int ExpLvlsTbl[MAXCHARLEVEL] = { 1310707109, 1583495809 }; -const char *const ClassStrTbl[NUM_CLASSES] = { +const char *const ClassStrTbl[] = { "Warrior", "Rogue", "Sorceror", diff --git a/Source/player.h b/Source/player.h index 2e0f4f68f..12dc294cf 100644 --- a/Source/player.h +++ b/Source/player.h @@ -86,7 +86,8 @@ extern int MagicTbl[NUM_CLASSES]; extern int DexterityTbl[NUM_CLASSES]; extern int VitalityTbl[NUM_CLASSES]; extern int MaxStats[NUM_CLASSES][4]; -extern const char *const ClassStrTbl[NUM_CLASSES]; +extern const char *const ClassStrTblOld[]; +extern const char *const ClassStrTbl[]; #ifdef __cplusplus } diff --git a/defs.h b/defs.h index 1678e2101..ab03da629 100644 --- a/defs.h +++ b/defs.h @@ -180,9 +180,13 @@ #undef assert #ifndef _DEBUG -#define assert(exp) ((void)0) +#define assert(exp) +#define assurance(exp, value) if (exp) return +#define commitment(exp, value) if (exp) return false #else #define assert(exp) (void)((exp) || (assert_fail(__LINE__, __FILE__, #exp), 0)) +#define assurance(exp, value) (void)((exp) || (app_fatal("%s: %s was %i", __func__, #exp, value), 0)) +#define commitment(exp, value) (void)((exp) || (app_fatal("%s: %s was %i", __func__, #exp, value), 0)) #endif #define ERR_DLG(title, text) ErrDlg(title, text, __FILE__, __LINE__)