diff --git a/Source/items.cpp b/Source/items.cpp index 228107ff4..e8e08992a 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -4202,6 +4202,20 @@ BOOL WitchItemOk(int i) BOOL rv; rv = FALSE; +#ifdef HELLFIRE + if (AllItemsList[i].itype == ITYPE_MISC || AllItemsList[i].itype == ITYPE_STAFF) + rv = TRUE; + if (AllItemsList[i].iMiscId == IMISC_MANA || AllItemsList[i].iMiscId == IMISC_FULLMANA) + rv = FALSE; + if (AllItemsList[i].iSpell == SPL_TOWN) + rv = FALSE; + if (AllItemsList[i].iMiscId == IMISC_FULLHEAL || AllItemsList[i].iMiscId == IMISC_HEAL) + rv = FALSE; + if (AllItemsList[i].iMiscId > IMISC_OILFIRST && AllItemsList[i].iMiscId < IMISC_OILLAST) + rv = FALSE; + if ((AllItemsList[i].iSpell == SPL_RESURRECT && gbMaxPlayers == 1) || (AllItemsList[i].iSpell == SPL_HEALOTHER && gbMaxPlayers == 1)) + rv = FALSE; +#else if (AllItemsList[i].itype == ITYPE_MISC) rv = TRUE; if (AllItemsList[i].itype == ITYPE_STAFF) @@ -4220,6 +4234,7 @@ BOOL WitchItemOk(int i) rv = FALSE; if (AllItemsList[i].iSpell == SPL_HEALOTHER && gbMaxPlayers == 1) rv = FALSE; +#endif return rv; } diff --git a/Source/missiles.cpp b/Source/missiles.cpp index c8fbe329b..a26c30a04 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -2050,13 +2050,28 @@ void AddRndTeleport(int mi, int sx, int sy, int dx, int dy, int midir, char mien if (random(58, 2) == 1) r2 = -r2; - } while (nSolidTable[dPiece[r1 + sx][sy + r2]] || dObject[r1 + sx][sy + r2] || dMonster[r1 + sx][sy + r2]); +#ifdef HELLFIRE + r1 += sx; + r2 += sy; + if (r1 <= MAXDUNX && r1 >= 0 && r2 <= MAXDUNY && r2 >= 0) { ///BUGFIX: < MAXDUNX / < MAXDUNY + pn = dPiece[r1][r2]; + } + } while (nSolidTable[pn] || dObject[r1][r2] || dMonster[r1][r2]); +#else + pn = dPiece[r1 + sx][sy + r2]; + } while (nSolidTable[pn] || dObject[r1 + sx][sy + r2] || dMonster[r1 + sx][sy + r2]); +#endif - missile[mi]._miVar1 = 0; missile[mi]._mirange = 2; + missile[mi]._miVar1 = 0; if (!setlevel || setlvlnum != SL_VILEBETRAYER) { +#ifdef HELLFIRE + missile[mi]._mix = r1; + missile[mi]._miy = r2; +#else missile[mi]._mix = sx + r1; missile[mi]._miy = sy + r2; +#endif if (!mienemy) UseMana(id, SPL_RNDTELEPORT); } else { diff --git a/Source/pfile.cpp b/Source/pfile.cpp index e3f964c0c..cf8790ec3 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -235,6 +235,14 @@ BYTE game_2_ui_class(const PlayerStruct *p) uiclass = UI_WARRIOR; else if (p->_pClass == PC_ROGUE) uiclass = UI_ROGUE; +#ifdef HELLFIRE + else if (p->_pClass == PC_MONK) + uiclass = UI_MONK; + else if (p->_pClass == PC_BARD) + uiclass = UI_BARD; + else if (p->_pClass == PC_BARBARIAN) + uiclass = UI_BARBARIAN; +#endif else uiclass = UI_SORCERER; @@ -431,6 +439,14 @@ char pfile_get_player_class(unsigned int player_class_nr) pc_class = PC_WARRIOR; else if (player_class_nr == UI_ROGUE) pc_class = PC_ROGUE; +#ifdef HELLFIRE + else if (player_class_nr == 3) + pc_class = PC_MONK; + else if (player_class_nr == 4) + pc_class = PC_BARD; + else if (player_class_nr == 5) + pc_class = PC_BARBARIAN; +#endif else pc_class = PC_SORCERER; return pc_class; diff --git a/enums.h b/enums.h index 9beab5b42..548aa69f9 100644 --- a/enums.h +++ b/enums.h @@ -3102,7 +3102,12 @@ typedef enum _ui_classes { UI_WARRIOR = 0x0, UI_ROGUE = 0x1, UI_SORCERER = 0x2, - UI_NUM_CLASSES = 0x3, +#ifdef HELLFIRE + UI_MONK = 0x3, + UI_BARD = 0x4, + UI_BARBARIAN = 0x5, +#endif + UI_NUM_CLASSES, } _ui_classes; typedef enum _walk_path {