diff --git a/Source/inv.cpp b/Source/inv.cpp index e0c188479..e94b85ad3 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -1686,6 +1686,15 @@ void CheckQuestItem(int pnum) } else if (plr[pnum]._pClass == PC_SORCERER) { sfxdnum = PS_MAGE95; } +#ifdef HELLFIRE + else if (plr[pnum]._pClass == PC_MONK) { + sfxdnum = PS_MONK95; + } else if (plr[pnum]._pClass == PC_BARD) { + sfxdnum = PS_ROGUE95; + } else if (plr[pnum]._pClass == PC_BARBARIAN) { + sfxdnum = PS_WARR95; + } +#endif #endif quests[QTYPE_BLKM]._qvar1 = QS_MUSHPICKED; } @@ -1704,6 +1713,15 @@ void CheckQuestItem(int pnum) } else if (plr[myplr]._pClass == PC_SORCERER) { sfxdnum = PS_MAGE89; } +#ifdef HELLFIRE + else if (plr[myplr]._pClass == PC_MONK) { + sfxdnum = PS_MONK89; + } else if (plr[myplr]._pClass == PC_BARD) { + sfxdnum = PS_ROGUE89; + } else if (plr[myplr]._pClass == PC_BARBARIAN) { + sfxdnum = PS_WARR89; + } +#endif } #endif } @@ -1717,6 +1735,15 @@ void CheckQuestItem(int pnum) } else if (plr[myplr]._pClass == PC_SORCERER) { sfxdnum = PS_MAGE88; } +#ifdef HELLFIRE + else if (plr[myplr]._pClass == PC_MONK) { + sfxdnum = PS_MONK88; + } else if (plr[myplr]._pClass == PC_BARD) { + sfxdnum = PS_ROGUE88; + } else if (plr[myplr]._pClass == PC_BARBARIAN) { + sfxdnum = PS_WARR88; + } +#endif } #endif if (plr[pnum].HoldItem.IDidx == IDI_ROCK) { @@ -1734,6 +1761,15 @@ void CheckQuestItem(int pnum) } else if (plr[myplr]._pClass == PC_SORCERER) { sfxdnum = PS_MAGE87; } +#ifdef HELLFIRE + else if (plr[myplr]._pClass == PC_MONK) { + sfxdnum = PS_MONK87; + } else if (plr[myplr]._pClass == PC_BARD) { + sfxdnum = PS_ROGUE87; + } else if (plr[myplr]._pClass == PC_BARBARIAN) { + sfxdnum = PS_WARR87; + } +#endif } #endif } @@ -1748,8 +1784,93 @@ void CheckQuestItem(int pnum) } else if (plr[myplr]._pClass == PC_SORCERER) { sfxdnum = PS_MAGE91; } +#ifdef HELLFIRE + else if (plr[myplr]._pClass == PC_MONK) { + sfxdnum = PS_MONK91; + } else if (plr[myplr]._pClass == PC_BARD) { + sfxdnum = PS_ROGUE91; + } else if (plr[myplr]._pClass == PC_BARBARIAN) { + sfxdnum = PS_WARR91; + } #endif +#endif + } +#ifdef HELLFIRE + if (plr[pnum].HoldItem.IDidx == IDI_MAPOFDOOM) { + quests[QTYPE_GRAVE]._qlog = 0; + quests[QTYPE_GRAVE]._qactive = 2; + quests[QTYPE_GRAVE]._qvar1 = 1; + sfxdelay = 10; + if (plr[myplr]._pClass == PC_WARRIOR) { + sfxdnum = PS_WARR79; + } else if (plr[myplr]._pClass == PC_ROGUE) { + sfxdnum = PS_ROGUE79; + } else if (plr[myplr]._pClass == PC_SORCERER) { + sfxdnum = PS_MAGE79; + } else if (plr[myplr]._pClass == PC_MONK) { + sfxdnum = PS_MONK79; + } else if (plr[myplr]._pClass == PC_BARD) { + sfxdnum = PS_ROGUE79; + } else if (plr[myplr]._pClass == PC_BARBARIAN) { + sfxdnum = PS_WARR79; + } + } + if (plr[pnum].HoldItem.IDidx == IDI_NOTE1 || plr[pnum].HoldItem.IDidx == IDI_NOTE2 || plr[pnum].HoldItem.IDidx == IDI_NOTE3) { + int mask, idx, item_num; + int n1, n2, n3; + ItemStruct tmp; + mask = 0; + idx = plr[pnum].HoldItem.IDidx; + if (PlrHasItem(pnum, IDI_NOTE1, &n1) || idx == IDI_NOTE1) + mask = 1; + if (PlrHasItem(pnum, IDI_NOTE2, &n2) || idx == IDI_NOTE2) + mask |= 2; + if (PlrHasItem(pnum, IDI_NOTE3, &n3) || idx == IDI_NOTE3) + mask |= 4; + if (mask == 7) { + sfxdelay = 10; + if (plr[myplr]._pClass == PC_WARRIOR) { + sfxdnum = PS_WARR46; + } else if (plr[myplr]._pClass == PC_ROGUE) { + sfxdnum = PS_ROGUE46; + } else if (plr[myplr]._pClass == PC_SORCERER) { + sfxdnum = PS_MAGE46; + } else if (plr[myplr]._pClass == PC_MONK) { + sfxdnum = PS_MONK46; + } else if (plr[myplr]._pClass == PC_BARD) { + sfxdnum = PS_ROGUE46; + } else if (plr[myplr]._pClass == PC_BARBARIAN) { + sfxdnum = PS_WARR46; + } + switch (idx) { + case IDI_NOTE1: + PlrHasItem(pnum, IDI_NOTE2, &n2); + RemoveInvItem(pnum, n2); + PlrHasItem(pnum, IDI_NOTE3, &n3); + RemoveInvItem(pnum, n3); + break; + case IDI_NOTE2: + PlrHasItem(pnum, IDI_NOTE1, &n1); + RemoveInvItem(pnum, n1); + PlrHasItem(pnum, IDI_NOTE3, &n3); + RemoveInvItem(pnum, n3); + break; + case IDI_NOTE3: + PlrHasItem(pnum, IDI_NOTE1, &n1); + RemoveInvItem(pnum, n1); + PlrHasItem(pnum, IDI_NOTE2, &n2); + RemoveInvItem(pnum, n2); + break; + } + item_num = itemactive[0]; + tmp = item[item_num]; + GetItemAttrs(item_num, IDI_FULLNOTE, 16); + SetupItem(item_num); + plr[pnum].HoldItem = item[item_num]; + item[item_num] = tmp; + } } +#endif } void InvGetItem(int pnum, int ii) diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index d13316e94..8828e5599 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -1,6 +1,6 @@ #include "diablo.h" -ItemDataStruct AllItemsList[157] = { +ItemDataStruct AllItemsList[] = { // clang-format off // iRnd, iClass, iLoc, iCurs, itype, iItemId, iName, iSName, iMinMLvl, iDurability, iMinDam, iMaxDam, iMinAC, iMaxAC, iMinStr, iMinMag, iMinDex, iFlags, iMiscId, iSpell, iUsable, iValue, iMaxValue { IDROP_REGULAR, ICLASS_GOLD, ILOC_UNEQUIPABLE, ICURS_GOLD, 11, UITYPE_NONE, "Gold", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, TRUE, 0, 0 }, @@ -8,7 +8,11 @@ ItemDataStruct AllItemsList[157] = { { IDROP_NEVER, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_BUCKLER, 5, UITYPE_NONE, "Buckler", NULL, 2, 10, 0, 0, 3, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 50, 50 }, { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLUB, 4, UITYPE_SPIKCLUB, "Club", NULL, 1, 20, 1, 6, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BOW, 3, UITYPE_NONE, "Short Bow", NULL, 1, 30, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 100, 100 }, +#ifndef HELLFIRE { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, 10, UITYPE_NONE, "Short Staff of Charged Bolt", NULL, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_CBOLT, FALSE, 520, 520 }, +#else + { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, 10, UITYPE_NONE, "Short Staff of Mana", NULL, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_MANA, FALSE, 520, 520 }, +#endif { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_CLEAVER, 2, UITYPE_CLEAVER, "Cleaver", NULL, 10, 10, 4, 24, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 2000, 2000 }, { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_THE_UNDEAD_CROWN, 7, UITYPE_SKCROWN, "The Undead Crown", NULL, 0, 50, 0, 0, 15, 15, 0, 0, 0, ISPL_RNDSTEALLIFE, IMISC_UNIQUE, SPL_NULL, FALSE, 10000, 10000 }, { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_EMPYREAN_BAND, 12, UITYPE_INFRARING, "Empyrean Band", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 8000, 8000 }, @@ -25,7 +29,11 @@ ItemDataStruct AllItemsList[157] = { { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_FUNGAL_TOME, 0, UITYPE_NONE, "Fungal Tome", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SPECTRAL_ELIXIR, 0, UITYPE_ELIXIR, "Spectral Elixir", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SPECELIX, SPL_NULL, FALSE, 0, 0 }, { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BLOOD_STONE, 0, UITYPE_NONE, "Blood Stone", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +#ifndef HELLFIRE { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAP_OF_THE_STARS, 0, UITYPE_MAPOFDOOM, "Map of the Stars", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MAPOFDOOM, SPL_NULL, TRUE, 0, 0 }, +#else + { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAP_OF_THE_STARS, 0, UITYPE_MAPOFDOOM, "Cathedral Map", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MAPOFDOOM, SPL_NULL, TRUE, 0, 0 }, +#endif { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_EAR_SORCEROR, 0, UITYPE_NONE, "Heart", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_EAR, SPL_NULL, FALSE, 0, 0 }, { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_HEALING, 0, UITYPE_NONE, "Potion of Healing", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_HEAL, SPL_NULL, TRUE, 50, 50 }, { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_MANA, 0, UITYPE_NONE, "Potion of Mana", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MANA, SPL_NULL, TRUE, 50, 50 }, @@ -35,9 +43,14 @@ ItemDataStruct AllItemsList[157] = { { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_HEALING, 0, UITYPE_NONE, "Potion of Full Healing", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLHEAL, SPL_NULL, TRUE, 150, 150 }, { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, 0, UITYPE_NONE, "Potion of Full Mana", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, TRUE, 150, 150 }, { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BROAD_SWORD, 1, UITYPE_GRISWOLD, "Griswold's Edge", NULL, 8, 50, 4, 12, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 750, 750 }, +#ifndef HELLFIRE { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MACE, 4, UITYPE_LGTFORGE, "Lightforge", NULL, 2, 32, 1, 8, 0, 0, 16, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 200, 200 }, +#else + { IDROP_NEVER, ICLASS_ARMOR, ILOC_ARMOR, ICURS_BOVINE, 9, UITYPE_BOVINE, "Bovine Plate", NULL, 0, 40, 0, 0, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, FALSE, 200, 0 }, +#endif { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_STAFF_OF_LAZARUS, 0, UITYPE_LAZSTAFF, "Staff of Lazarus", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, 0, UITYPE_NONE, "Scroll of Resurrect", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_RESURRECT, TRUE, 250, 250 }, +#ifndef HELLFIRE { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, 0, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, 0, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, 0, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, @@ -51,6 +64,21 @@ ItemDataStruct AllItemsList[157] = { { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, 0, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, 0, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, { IDROP_NEVER, ICLASS_NONE, ILOC_NONE, ICURS_POTION_OF_FULL_MANA, 0, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +#else + { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, 0, UITYPE_NONE, "Blacksmith Oil", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, TRUE, 100, 100 }, + { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, 0, UITYPE_NONE, "Short Staff", NULL, 1, 25, 2, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, + { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, 0, UITYPE_NONE, "Sword", NULL, 2, 8, 1, 5, 0, 0, 15, 0, 20, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, + { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_DAGGER, 0, UITYPE_NONE, "Dagger", NULL, 1, 16, 1, 4, 0, 0, 15, 0, 20, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 20, 20 }, + { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_RUNE_BOMB, 0, UITYPE_NONE, "Rune Bomb", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, + { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_THEODORE, 0, UITYPE_NONE, "Theodore", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, + { IDROP_NEVER, ICLASS_MISC , ILOC_AMULET, ICURS_AURIC_AMULET, 0, UITYPE_NONE, "Auric Amulet", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AURIC, SPL_NULL, FALSE, 100, 100 }, + { IDROP_NEVER, ICLASS_QUEST , ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_1, 0, UITYPE_NONE, "Torn Note 1", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, + { IDROP_NEVER, ICLASS_QUEST , ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_2, 0, UITYPE_NONE, "Torn Note 2", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, + { IDROP_NEVER, ICLASS_QUEST , ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_3, 0, UITYPE_NONE, "Torn Note 3", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, + { IDROP_NEVER, ICLASS_QUEST , ILOC_UNEQUIPABLE, ICURS_RECONSTRUCTED_NOTE, 0, UITYPE_NONE, "Reconstructed Note", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NOTE, SPL_NULL, TRUE, 0, 0 }, + { IDROP_NEVER, ICLASS_QUEST , ILOC_UNEQUIPABLE, ICURS_BROWN_SUIT, 0, UITYPE_NONE, "Brown Suit", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, + { IDROP_NEVER, ICLASS_QUEST , ILOC_UNEQUIPABLE, ICURS_GREY_SUIT, 0, UITYPE_NONE, "Grey Suit", NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 }, +#endif { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_CAP, 7, UITYPE_NONE, "Cap", "Cap", 1, 15, 0, 0, 1, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 15, 20 }, { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_SKULL_CAP, 7, UITYPE_SKULLCAP, "Skull Cap", "Cap", 4, 20, 0, 0, 2, 4, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 25, 30 }, { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_HELM, 7, UITYPE_HELM, "Helm", "Helm", 8, 30, 0, 0, 4, 6, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 40, 70 }, @@ -86,6 +114,11 @@ ItemDataStruct AllItemsList[157] = { { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, 0, UITYPE_NONE, "Potion of Full Mana", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, TRUE, 150, 150 }, { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_REJUVENATION, 0, UITYPE_NONE, "Potion of Rejuvenation", NULL, 3, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_REJUV, SPL_NULL, TRUE, 120, 120 }, { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_REJUVENATION, 0, UITYPE_NONE, "Potion of Full Rejuvenation", NULL, 7, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLREJUV, SPL_NULL, TRUE, 600, 600 }, +#ifdef HELLFIRE + { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, 0, UITYPE_NONE, "Blacksmith Oil", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, TRUE, 100, 100 }, + { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, 0, UITYPE_NONE, "Oil of Accuracy", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILACC, SPL_NULL, TRUE, 500, 500 }, + { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, 0, UITYPE_NONE, "Oil of Sharpness", NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILSHARP, SPL_NULL, TRUE, 500, 500 }, +#endif { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_STRENGTH, 0, UITYPE_NONE, "Elixir of Strength", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXSTR, SPL_NULL, TRUE, 5000, 5000 }, { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_MAGIC, 0, UITYPE_NONE, "Elixir of Magic", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXMAG, SPL_NULL, TRUE, 5000, 5000 }, { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_DEXTERITY, 0, UITYPE_NONE, "Elixir of Dexterity", NULL, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXDEX, SPL_NULL, TRUE, 5000, 5000 }, @@ -159,6 +192,13 @@ ItemDataStruct AllItemsList[157] = { { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, 12, UITYPE_RING, "Ring", "Ring", 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, FALSE, 1000, 1000 }, { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, 13, UITYPE_AMULET, "Amulet", "Amulet", 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, FALSE, 1200, 1200 }, { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, 13, UITYPE_AMULET, "Amulet", "Amulet", 16, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, FALSE, 1200, 1200 }, +#ifdef HELLFIRE + { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_FIRE, 0, UITYPE_NONE, "Rune of Fire", "Rune", 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RUNEF, SPL_NULL, TRUE, 100, 100 }, + { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_LIGHTNING, 0, UITYPE_NONE, "Rune of Lightning", "Rune", 3, 0, 0, 0, 0, 0, 0, 13, 0, ISPL_NONE, IMISC_RUNEL, SPL_NULL, TRUE, 200, 200 }, + { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_FIRE, 0, UITYPE_NONE, "Greater Rune of Fire", "Rune", 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEF, SPL_NULL, TRUE, 400, 400 }, + { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_LIGHTNING, 0, UITYPE_NONE, "Greater Rune of Lightning", "Rune", 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEL, SPL_NULL, TRUE, 500, 500 }, + { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_STONE, 0, UITYPE_NONE, "Rune of Stone", "Rune", 7, 0, 0, 0, 0, 0, 0, 25, 0, ISPL_NONE, IMISC_RUNES, SPL_NULL, TRUE, 300, 300 }, +#endif { IDROP_NEVER, ICLASS_NONE, ILOC_INVALID, ICURS_POTION_OF_FULL_MANA, 0, UITYPE_NONE, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, FALSE, 0, 0 } // clang-format on }; diff --git a/Source/itemdat.h b/Source/itemdat.h index 00f178608..561513665 100644 --- a/Source/itemdat.h +++ b/Source/itemdat.h @@ -2,7 +2,7 @@ #ifndef __ITEMDAT_H__ #define __ITEMDAT_H__ -extern ItemDataStruct AllItemsList[157]; +extern ItemDataStruct AllItemsList[]; extern const PLStruct PL_Prefix[84]; extern const PLStruct PL_Suffix[96]; extern const UItemStruct UniqueItemList[91]; diff --git a/Source/quests.cpp b/Source/quests.cpp index 5506159b0..6125e4526 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -32,7 +32,18 @@ QuestData questlist[MAXQUESTS] = { { 3, 3, DTYPE_CATHEDRAL, QTYPE_KING, 100, 1, 1, QUEST_KING2, "The Curse of King Leoric" }, { 2, -1, DTYPE_CAVES, QTYPE_PW, 100, 4, 0, QUEST_POISON3, "Poisoned Water Supply" }, { 6, -1, DTYPE_CATACOMBS, QTYPE_BONE, 100, 2, 0, QUEST_BONER, "The Chamber of Bone" }, - { 15, 15, DTYPE_CATHEDRAL, QTYPE_VB, 100, 5, 1, QUEST_VILE1, "Archbishop Lazarus" } + { 15, 15, DTYPE_CATHEDRAL, QTYPE_VB, 100, 5, 1, QUEST_VILE1, "Archbishop Lazarus" }, +#ifdef HELLFIRE + // TODO: apply msg enum in second to last column: + { 17, 17, DTYPE_NONE, QTYPE_GRAVE, 100, 0, 1, 0x111, "Grave Matters" }, + { 9, 9, DTYPE_NONE, QTYPE_FARMER, 100, 0, 1, 0x115, "Farmer's Orchard" }, + { 17, -1, DTYPE_NONE, QTYPE_GIRL, 100, 0, 0, 0x11B, "Little Girl" }, + { 19, -1, DTYPE_NONE, QTYPE_TRADER, 100, 0, 0, 0x132, "Wandering Trader" }, + { 17, 17, DTYPE_NONE, QTYPE_DEFILER,100, 0, 1, 0x11E, "The Defiler" }, + { 21, 21, DTYPE_NONE, QTYPE_NAKRUL, 100, 0, 1, 0x123, "Na-Krul" }, + { 21, -1, DTYPE_NONE, QTYPE_CORNSTN,100, 0, 0, 0x128, "Cornerstone of the World" }, + { 9, 9, DTYPE_NONE, QTYPE_JERSEY, 100, 0, 1, 0x12C, "The Jersey's Jersey" }, +#endif // clang-format on }; char questxoff[7] = { 0, -1, 0, -1, -2, -1, -2 }; @@ -66,10 +77,10 @@ void InitQuests() } } - initiatedQuests = 0; questlog = FALSE; ALLQUESTS = 1; WaterDone = 0; + initiatedQuests = 0; for (z = 0; z < MAXQUESTS; z++) { if (gbMaxPlayers <= 1 || questlist[z]._qflags & 1) { @@ -89,11 +100,11 @@ void InitQuests() quests[z]._qlog = 0; } - quests[z]._qtx = 0; quests[z]._qslvl = questlist[z]._qslvl; + quests[z]._qtx = 0; + quests[z]._qty = 0; quests[z]._qidx = z; quests[z]._qlvltype = questlist[z]._qlvlt; - quests[z]._qty = 0; quests[z]._qvar2 = 0; quests[z]._qmsg = questlist[z]._qdmsg; } diff --git a/enums.h b/enums.h index 215479149..797c2650a 100644 --- a/enums.h +++ b/enums.h @@ -74,6 +74,9 @@ typedef enum unique_base_item { UITYPE_GRISWOLD = 0x42, UITYPE_LGTFORGE = 0x43, UITYPE_LAZSTAFF = 0x44, +#ifdef HELLFIRE + UITYPE_BOVINE = 0x45, +#endif UITYPE_INVALID = -1, } unique_base_item; @@ -179,6 +182,9 @@ typedef enum item_cursor_graphic { ICURS_EAR_WARRIOR = 20, ICURS_EAR_ROGUE = 21, ICURS_BLOOD_STONE = 25, +#ifdef HELLFIRE + ICURS_OIL = 30, +#endif ICURS_ELIXIR_OF_VITALITY = 31, ICURS_POTION_OF_HEALING = 32, ICURS_POTION_OF_FULL_REJUVENATION = 33, @@ -270,6 +276,23 @@ typedef enum item_cursor_graphic { ICURS_COMPOSITE_STAFF = 166, ICURS_SHORT_BATTLE_BOW = 167, ICURS_GOLD = 168, +#ifdef HELLFIRE + ICURS_AURIC_AMULET = 180, + ICURS_RUNE_BOMB = 187, + ICURS_THEODORE = 188, + ICURS_TORN_NOTE_1 = 189, + ICURS_TORN_NOTE_2 = 190, + ICURS_TORN_NOTE_3 = 191, + ICURS_RECONSTRUCTED_NOTE = 192, + ICURS_RUNE_OF_FIRE = 193, + ICURS_GREATER_RUNE_OF_FIRE = 194, + ICURS_RUNE_OF_LIGHTNING = 195, + ICURS_GREATER_RUNE_OF_LIGHTNING = 196, + ICURS_RUNE_OF_STONE = 197, + ICURS_GREY_SUIT = 198, + ICURS_BROWN_SUIT = 199, + ICURS_BOVINE = 226, +#endif } item_cursor_graphic; typedef enum _sfx_id { @@ -2341,6 +2364,9 @@ typedef enum spell_id { SPL_HEALOTHER = 0x22, SPL_FLARE = 0x23, SPL_BONESPIRIT = 0x24, +#ifdef HELLFIRE + SPL_MANA = 0x25, +#endif SPL_INVALID = 0xFFFFFFFF, } spell_id; @@ -2666,6 +2692,15 @@ typedef enum item_misc_id { IMISC_MAPOFDOOM = 0x2A, IMISC_EAR = 0x2B, IMISC_SPECELIX = 0x2C, +#ifdef HELLFIRE + IMISC_RUNEF = 0x2F, + IMISC_RUNEL = 0x30, + IMISC_GR_RUNEL = 0x31, + IMISC_GR_RUNEF = 0x32, + IMISC_RUNES = 0x33, + IMISC_AURIC = 0x35, + IMISC_NOTE = 0x36, +#endif IMISC_INVALID = 0xFFFFFFFF, } item_misc_id; @@ -2689,43 +2724,58 @@ typedef enum item_type { } item_type; typedef enum _item_indexes { - IDI_GOLD = 0x0, - IDI_WARRIOR = 0x1, - IDI_WARRSHLD = 0x2, - IDI_WARRCLUB = 0x3, - IDI_ROGUE = 0x4, - IDI_SORCEROR = 0x5, - IDI_CLEAVER = 0x6, - IDI_FIRSTQUEST = 0x6, - IDI_SKCROWN = 0x7, - IDI_INFRARING = 0x8, - IDI_ROCK = 0x9, - IDI_OPTAMULET = 0xA, - IDI_TRING = 0xB, - IDI_BANNER = 0xC, - IDI_HARCREST = 0xD, - IDI_STEELVEIL = 0xE, - IDI_GLDNELIX = 0xF, - IDI_ANVIL = 0x10, - IDI_MUSHROOM = 0x11, - IDI_BRAIN = 0x12, - IDI_FUNGALTM = 0x13, - IDI_SPECELIX = 0x14, - IDI_BLDSTONE = 0x15, - IDI_LASTQUEST = 0x16, - IDI_MAPOFDOOM = 0x16, - IDI_EAR = 0x17, - IDI_HEAL = 0x18, - IDI_MANA = 0x19, - IDI_IDENTIFY = 0x1A, - IDI_PORTAL = 0x1B, - IDI_ARMOFVAL = 0x1C, - IDI_FULLHEAL = 0x1D, - IDI_FULLMANA = 0x1E, - IDI_GRISWOLD = 0x1F, - IDI_LGTFORGE = 0x20, - IDI_LAZSTAFF = 0x21, - IDI_RESURRECT = 0x22, + IDI_GOLD, + IDI_WARRIOR, + IDI_WARRSHLD, + IDI_WARRCLUB, + IDI_ROGUE, + IDI_SORCEROR, + IDI_CLEAVER, + IDI_FIRSTQUEST = IDI_CLEAVER, + IDI_SKCROWN, + IDI_INFRARING , + IDI_ROCK, + IDI_OPTAMULET, + IDI_TRING, + IDI_BANNER, + IDI_HARCREST, + IDI_STEELVEIL, + IDI_GLDNELIX, + IDI_ANVIL, + IDI_MUSHROOM, + IDI_BRAIN, + IDI_FUNGALTM, + IDI_SPECELIX, + IDI_BLDSTONE, + IDI_MAPOFDOOM, + IDI_LASTQUEST = IDI_MAPOFDOOM, + IDI_EAR, + IDI_HEAL, + IDI_MANA, + IDI_IDENTIFY, + IDI_PORTAL, + IDI_ARMOFVAL, + IDI_FULLHEAL, + IDI_FULLMANA, + IDI_GRISWOLD, + IDI_LGTFORGE, + IDI_LAZSTAFF, + IDI_RESURRECT, +#ifdef HELLFIRE + IDI_OIL, + IDI_SHORTSTAFF, + IDI_SWORD, + IDI_DAGGER, + IDI_RUNEBOMB, + IDI_THEODORE, + IDI_AURIC, + IDI_NOTE1, + IDI_NOTE2, + IDI_NOTE3, + IDI_FULLNOTE, + IDI_BROWNSUIT, + IDI_GREYSUIT, +#endif } _item_indexes; typedef enum _setlevels { diff --git a/structs.h b/structs.h index 1b9ba2daa..0073a130a 100644 --- a/structs.h +++ b/structs.h @@ -998,7 +998,11 @@ typedef struct QuestStruct { int _qty; unsigned char _qslvl; unsigned char _qidx; +#ifndef HELLFIRE unsigned char _qmsg; +#else + unsigned int _qmsg; +#endif unsigned char _qvar1; unsigned char _qvar2; int _qlog;