Browse Source

Merge pull request #1604 from Predelnik/PR

[hellfire] CheckQuestItem + InitQuests + some array/enum additions
pull/876/head
Robin Eklind 7 years ago committed by GitHub
parent
commit
3266a69419
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 121
      Source/inv.cpp
  2. 42
      Source/itemdat.cpp
  3. 2
      Source/itemdat.h
  4. 19
      Source/quests.cpp
  5. 124
      enums.h
  6. 4
      structs.h

121
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)

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

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

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

124
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 {

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

Loading…
Cancel
Save