Browse Source

♻️ Convert 'ItemType' enum to enum class

🎨 Rename 'ItemType' elements to enum class standards
pull/2862/head
Juliano Leal Goncalves 5 years ago committed by Anders Jenbo
parent
commit
379a27b64a
  1. 12
      Source/control.cpp
  2. 12
      Source/controls/plrctrls.cpp
  3. 2
      Source/debug.cpp
  4. 2
      Source/diablo.cpp
  5. 84
      Source/inv.cpp
  6. 338
      Source/itemdat.cpp
  7. 32
      Source/itemdat.h
  8. 216
      Source/items.cpp
  9. 26
      Source/items.h
  10. 10
      Source/loadsave.cpp
  11. 2
      Source/missiles.cpp
  12. 10
      Source/monster.cpp
  13. 80
      Source/objects.cpp
  14. 6
      Source/pack.cpp
  15. 4
      Source/panels/charpanel.cpp
  16. 70
      Source/player.cpp
  17. 2
      Source/player.h
  18. 4
      Source/qol/autopickup.cpp
  19. 2
      Source/qol/itemlabels.cpp
  20. 56
      Source/stores.cpp
  21. 2
      Source/themes.cpp
  22. 42
      test/inv_test.cpp
  23. 392
      test/pack_test.cpp

12
Source/control.cpp

@ -429,19 +429,19 @@ int DrawDurIcon4Item(const Surface &out, Item &pItem, int x, int c)
return x; return x;
if (c == 0) { if (c == 0) {
switch (pItem._itype) { switch (pItem._itype) {
case ITYPE_SWORD: case ItemType::Sword:
c = 2; c = 2;
break; break;
case ITYPE_AXE: case ItemType::Axe:
c = 6; c = 6;
break; break;
case ITYPE_BOW: case ItemType::Bow:
c = 7; c = 7;
break; break;
case ITYPE_MACE: case ItemType::Mace:
c = 5; c = 5;
break; break;
case ITYPE_STAFF: case ItemType::Staff:
c = 8; c = 8;
break; break;
default: default:
@ -1314,7 +1314,7 @@ void DrawInfoBox(const Surface &out)
InfoColor = UiFlags::ColorSilver; InfoColor = UiFlags::ColorSilver;
} else if (pcurs >= CURSOR_FIRSTITEM) { } else if (pcurs >= CURSOR_FIRSTITEM) {
auto &myPlayer = Players[MyPlayerId]; auto &myPlayer = Players[MyPlayerId];
if (myPlayer.HoldItem._itype == ITYPE_GOLD) { if (myPlayer.HoldItem._itype == ItemType::Gold) {
int nGold = myPlayer.HoldItem._ivalue; int nGold = myPlayer.HoldItem._ivalue;
strcpy(infostr, fmt::format(ngettext("{:d} gold piece", "{:d} gold pieces", nGold), nGold).c_str()); strcpy(infostr, fmt::format(ngettext("{:d} gold piece", "{:d} gold pieces", nGold), nGold).c_str());
} else if (!myPlayer.HoldItem._iStatFlag) { } else if (!myPlayer.HoldItem._iStatFlag) {

12
Source/controls/plrctrls.cpp

@ -686,7 +686,7 @@ void InvMove(AxisDirection dir)
} else if (Slot > SLOTXY_BELT_FIRST && Slot <= SLOTXY_BELT_LAST) { } else if (Slot > SLOTXY_BELT_FIRST && Slot <= SLOTXY_BELT_LAST) {
Slot -= 1; Slot -= 1;
mousePos = BeltGetSlotCoord(Slot); mousePos = BeltGetSlotCoord(Slot);
} else if (myPlayer.HoldItem._itype == ITYPE_RING) { } else if (myPlayer.HoldItem._itype == ItemType::Ring) {
Slot = SLOTXY_RING_LEFT; Slot = SLOTXY_RING_LEFT;
mousePos = InvGetEquipSlotCoord(INVLOC_RING_LEFT); mousePos = InvGetEquipSlotCoord(INVLOC_RING_LEFT);
} else if (myPlayer.HoldItem.isWeapon() || myPlayer.HoldItem.isShield()) { } else if (myPlayer.HoldItem.isWeapon() || myPlayer.HoldItem.isShield()) {
@ -736,7 +736,7 @@ void InvMove(AxisDirection dir)
} else if (Slot >= SLOTXY_BELT_FIRST && Slot < SLOTXY_BELT_LAST) { } else if (Slot >= SLOTXY_BELT_FIRST && Slot < SLOTXY_BELT_LAST) {
Slot += 1; Slot += 1;
mousePos = BeltGetSlotCoord(Slot); mousePos = BeltGetSlotCoord(Slot);
} else if (myPlayer.HoldItem._itype == ITYPE_RING) { } else if (myPlayer.HoldItem._itype == ItemType::Ring) {
Slot = SLOTXY_RING_RIGHT; Slot = SLOTXY_RING_RIGHT;
mousePos = InvGetEquipSlotCoord(INVLOC_RING_RIGHT); mousePos = InvGetEquipSlotCoord(INVLOC_RING_RIGHT);
} else if (myPlayer.HoldItem.isWeapon() || myPlayer.HoldItem.isShield()) { } else if (myPlayer.HoldItem.isWeapon() || myPlayer.HoldItem.isShield()) {
@ -781,7 +781,7 @@ void InvMove(AxisDirection dir)
Slot -= INV_ROW_SLOT_SIZE; Slot -= INV_ROW_SLOT_SIZE;
mousePos = InvGetSlotCoord(Slot); mousePos = InvGetSlotCoord(Slot);
} else if (Slot >= SLOTXY_INV_FIRST) { } else if (Slot >= SLOTXY_INV_FIRST) {
if (myPlayer.HoldItem._itype == ITYPE_RING) { if (myPlayer.HoldItem._itype == ItemType::Ring) {
if (Slot >= SLOTXY_INV_ROW1_FIRST && Slot <= SLOTXY_INV_ROW1_FIRST + (INV_ROW_SLOT_SIZE / 2) - 1) { if (Slot >= SLOTXY_INV_ROW1_FIRST && Slot <= SLOTXY_INV_ROW1_FIRST + (INV_ROW_SLOT_SIZE / 2) - 1) {
Slot = SLOTXY_RING_LEFT; Slot = SLOTXY_RING_LEFT;
mousePos = InvGetEquipSlotCoord(INVLOC_RING_LEFT); mousePos = InvGetEquipSlotCoord(INVLOC_RING_LEFT);
@ -801,7 +801,7 @@ void InvMove(AxisDirection dir)
} else if (myPlayer.HoldItem.isArmor()) { } else if (myPlayer.HoldItem.isArmor()) {
Slot = SLOTXY_CHEST_FIRST; Slot = SLOTXY_CHEST_FIRST;
mousePos = InvGetEquipSlotCoord(INVLOC_CHEST); mousePos = InvGetEquipSlotCoord(INVLOC_CHEST);
} else if (myPlayer.HoldItem._itype == ITYPE_AMULET) { } else if (myPlayer.HoldItem._itype == ItemType::Amulet) {
Slot = SLOTXY_AMULET; Slot = SLOTXY_AMULET;
mousePos = InvGetEquipSlotCoord(INVLOC_AMULET); mousePos = InvGetEquipSlotCoord(INVLOC_AMULET);
} }
@ -847,7 +847,7 @@ void InvMove(AxisDirection dir)
} else if (Slot <= (SLOTXY_INV_ROW4_LAST - (icursSize28.height * INV_ROW_SLOT_SIZE))) { } else if (Slot <= (SLOTXY_INV_ROW4_LAST - (icursSize28.height * INV_ROW_SLOT_SIZE))) {
Slot += INV_ROW_SLOT_SIZE; Slot += INV_ROW_SLOT_SIZE;
mousePos = InvGetSlotCoord(Slot); mousePos = InvGetSlotCoord(Slot);
} else if (Slot <= SLOTXY_INV_LAST && myPlayer.HoldItem._itype == ITYPE_MISC && icursSize28 == Size { 1, 1 }) { // forcing only 1x1 misc items } else if (Slot <= SLOTXY_INV_LAST && myPlayer.HoldItem._itype == ItemType::Misc && icursSize28 == Size { 1, 1 }) { // forcing only 1x1 misc items
Slot += INV_ROW_SLOT_SIZE; Slot += INV_ROW_SLOT_SIZE;
if (Slot > SLOTXY_BELT_LAST) if (Slot > SLOTXY_BELT_LAST)
Slot = SLOTXY_BELT_LAST; Slot = SLOTXY_BELT_LAST;
@ -1319,7 +1319,7 @@ void UseBeltItem(int type)
if ((type == BLT_HEALING && (id == IMISC_HEAL || id == IMISC_FULLHEAL || (id == IMISC_SCROLL && spellId == SPL_HEAL))) if ((type == BLT_HEALING && (id == IMISC_HEAL || id == IMISC_FULLHEAL || (id == IMISC_SCROLL && spellId == SPL_HEAL)))
|| (type == BLT_MANA && (id == IMISC_MANA || id == IMISC_FULLMANA)) || (type == BLT_MANA && (id == IMISC_MANA || id == IMISC_FULLMANA))
|| id == IMISC_REJUV || id == IMISC_FULLREJUV) { || id == IMISC_REJUV || id == IMISC_FULLREJUV) {
if (myPlayer.SpdList[i]._itype > -1) { if (!myPlayer.SpdList[i].isEmpty()) {
UseInvItem(MyPlayerId, INVITEM_BELT_FIRST + i); UseInvItem(MyPlayerId, INVITEM_BELT_FIRST + i);
break; break;
} }

2
Source/debug.cpp

@ -161,7 +161,7 @@ std::string DebugCmdTakeGoldCheat(const string_view parameter)
if (itemId < 0) if (itemId < 0)
continue; continue;
if (myPlayer.InvList[itemId]._itype != ITYPE_GOLD) if (myPlayer.InvList[itemId]._itype != ItemType::Gold)
continue; continue;
myPlayer.RemoveInvItem(itemId); myPlayer.RemoveInvItem(itemId);

2
Source/diablo.cpp

@ -1478,7 +1478,7 @@ void InitKeymapActions()
'1' + i, '1' + i,
[i] { [i] {
auto &myPlayer = Players[MyPlayerId]; auto &myPlayer = Players[MyPlayerId];
if (!myPlayer.SpdList[i].isEmpty() && myPlayer.SpdList[i]._itype != ITYPE_GOLD) { if (!myPlayer.SpdList[i].isEmpty() && myPlayer.SpdList[i]._itype != ItemType::Gold) {
UseInvItem(MyPlayerId, INVITEM_BELT_FIRST + i); UseInvItem(MyPlayerId, INVITEM_BELT_FIRST + i);
} }
}, },

84
Source/inv.cpp

@ -208,7 +208,7 @@ bool FitsInBeltSlot(const Item &item)
bool CanBePlacedOnBelt(const Item &item) bool CanBePlacedOnBelt(const Item &item)
{ {
return FitsInBeltSlot(item) return FitsInBeltSlot(item)
&& item._itype != ITYPE_GOLD && item._itype != ItemType::Gold
&& item._iStatFlag && item._iStatFlag
&& AllItemsList[item.IDidx].iUsable; && AllItemsList[item.IDidx].iUsable;
} }
@ -254,7 +254,7 @@ bool CanWield(Player &player, const Item &item)
// Barbarian can wield two handed swords and maces in one hand, so we allow equiping any sword/mace as long as his occupied // Barbarian can wield two handed swords and maces in one hand, so we allow equiping any sword/mace as long as his occupied
// hand has a shield (i.e. no dual wielding allowed) // hand has a shield (i.e. no dual wielding allowed)
if (player._pClass == HeroClass::Barbarian) { if (player._pClass == HeroClass::Barbarian) {
if (occupiedHand._itype == ITYPE_SHIELD && IsAnyOf(item._itype, ITYPE_SWORD, ITYPE_MACE)) if (occupiedHand._itype == ItemType::Shield && IsAnyOf(item._itype, ItemType::Sword, ItemType::Mace))
return true; return true;
} }
@ -262,10 +262,10 @@ bool CanWield(Player &player, const Item &item)
// slot is another one-handed weapon. // slot is another one-handed weapon.
if (player._pClass == HeroClass::Bard) { if (player._pClass == HeroClass::Bard) {
bool occupiedHandIsOneHandedSwordOrMace = occupiedHand._iLoc == ILOC_ONEHAND bool occupiedHandIsOneHandedSwordOrMace = occupiedHand._iLoc == ILOC_ONEHAND
&& IsAnyOf(occupiedHand._itype, ITYPE_SWORD, ITYPE_MACE); && IsAnyOf(occupiedHand._itype, ItemType::Sword, ItemType::Mace);
bool weaponToEquipIsOneHandedSwordOrMace = item._iLoc == ILOC_ONEHAND bool weaponToEquipIsOneHandedSwordOrMace = item._iLoc == ILOC_ONEHAND
&& IsAnyOf(item._itype, ITYPE_SWORD, ITYPE_MACE); && IsAnyOf(item._itype, ItemType::Sword, ItemType::Mace);
if (occupiedHandIsOneHandedSwordOrMace && weaponToEquipIsOneHandedSwordOrMace) { if (occupiedHandIsOneHandedSwordOrMace && weaponToEquipIsOneHandedSwordOrMace) {
return true; return true;
@ -397,7 +397,7 @@ void CheckInvPaste(int pnum, Point cursorPosition)
if (il == ILOC_ONEHAND && player.HoldItem._iLoc == ILOC_TWOHAND) { if (il == ILOC_ONEHAND && player.HoldItem._iLoc == ILOC_TWOHAND) {
if (player._pClass == HeroClass::Barbarian if (player._pClass == HeroClass::Barbarian
&& IsAnyOf(player.HoldItem._itype, ITYPE_SWORD, ITYPE_MACE)) && IsAnyOf(player.HoldItem._itype, ItemType::Sword, ItemType::Mace))
il = ILOC_ONEHAND; il = ILOC_ONEHAND;
else else
il = ILOC_TWOHAND; il = ILOC_TWOHAND;
@ -410,7 +410,7 @@ void CheckInvPaste(int pnum, Point cursorPosition)
done = false; done = false;
if (!player.HoldItem._iStatFlag) if (!player.HoldItem._iStatFlag)
done = false; done = false;
if (player.HoldItem._itype == ITYPE_GOLD) if (player.HoldItem._itype == ItemType::Gold)
done = false; done = false;
} }
} }
@ -419,11 +419,11 @@ void CheckInvPaste(int pnum, Point cursorPosition)
if (il == ILOC_UNEQUIPABLE) { if (il == ILOC_UNEQUIPABLE) {
done = true; done = true;
int ii = r - SLOTXY_INV_FIRST; int ii = r - SLOTXY_INV_FIRST;
if (player.HoldItem._itype == ITYPE_GOLD) { if (player.HoldItem._itype == ItemType::Gold) {
if (player.InvGrid[ii] != 0) { if (player.InvGrid[ii] != 0) {
int8_t iv = player.InvGrid[ii]; int8_t iv = player.InvGrid[ii];
if (iv > 0) { if (iv > 0) {
if (player.InvList[iv - 1]._itype != ITYPE_GOLD) { if (player.InvList[iv - 1]._itype != ItemType::Gold) {
it = iv; it = iv;
} }
} else { } else {
@ -525,7 +525,7 @@ void CheckInvPaste(int pnum, Point cursorPosition)
} }
if (player.InvBody[INVLOC_HAND_RIGHT].isEmpty()) { if (player.InvBody[INVLOC_HAND_RIGHT].isEmpty()) {
if ((player.InvBody[INVLOC_HAND_LEFT].isEmpty() || player.InvBody[INVLOC_HAND_LEFT]._iLoc != ILOC_TWOHAND) if ((player.InvBody[INVLOC_HAND_LEFT].isEmpty() || player.InvBody[INVLOC_HAND_LEFT]._iLoc != ILOC_TWOHAND)
|| (player._pClass == HeroClass::Barbarian && (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SWORD || player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_MACE))) { || (player._pClass == HeroClass::Barbarian && (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Sword || player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Mace))) {
if ((player.InvBody[INVLOC_HAND_LEFT].isEmpty() || player.InvBody[INVLOC_HAND_LEFT]._iClass != player.HoldItem._iClass) if ((player.InvBody[INVLOC_HAND_LEFT].isEmpty() || player.InvBody[INVLOC_HAND_LEFT]._iClass != player.HoldItem._iClass)
|| (player._pClass == HeroClass::Bard && player.InvBody[INVLOC_HAND_LEFT]._iClass == ICLASS_WEAPON && player.HoldItem._iClass == ICLASS_WEAPON)) { || (player._pClass == HeroClass::Bard && player.InvBody[INVLOC_HAND_LEFT]._iClass == ICLASS_WEAPON && player.HoldItem._iClass == ICLASS_WEAPON)) {
NetSendCmdChItem(false, INVLOC_HAND_RIGHT); NetSendCmdChItem(false, INVLOC_HAND_RIGHT);
@ -555,7 +555,7 @@ void CheckInvPaste(int pnum, Point cursorPosition)
case ILOC_TWOHAND: case ILOC_TWOHAND:
if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() && !player.InvBody[INVLOC_HAND_RIGHT].isEmpty()) { if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() && !player.InvBody[INVLOC_HAND_RIGHT].isEmpty()) {
Item tempitem = player.HoldItem; Item tempitem = player.HoldItem;
if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Shield)
player.HoldItem = player.InvBody[INVLOC_HAND_RIGHT]; player.HoldItem = player.InvBody[INVLOC_HAND_RIGHT];
else else
player.HoldItem = player.InvBody[INVLOC_HAND_LEFT]; player.HoldItem = player.InvBody[INVLOC_HAND_LEFT];
@ -572,10 +572,10 @@ void CheckInvPaste(int pnum, Point cursorPosition)
if (!done2h) if (!done2h)
return; return;
if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Shield)
player.InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_RIGHT]._itype = ItemType::None;
else else
player.InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_LEFT]._itype = ItemType::None;
} }
NetSendCmdDelItem(false, INVLOC_HAND_RIGHT); NetSendCmdDelItem(false, INVLOC_HAND_RIGHT);
@ -591,7 +591,7 @@ void CheckInvPaste(int pnum, Point cursorPosition)
} }
break; break;
case ILOC_UNEQUIPABLE: case ILOC_UNEQUIPABLE:
if (player.HoldItem._itype == ITYPE_GOLD && it == 0) { if (player.HoldItem._itype == ItemType::Gold && it == 0) {
int ii = r - SLOTXY_INV_FIRST; int ii = r - SLOTXY_INV_FIRST;
if (player.InvGrid[ii] > 0) { if (player.InvGrid[ii] > 0) {
int invIndex = player.InvGrid[ii] - 1; int invIndex = player.InvGrid[ii] - 1;
@ -626,10 +626,10 @@ void CheckInvPaste(int pnum, Point cursorPosition)
it = player._pNumInv; it = player._pNumInv;
} else { } else {
int invIndex = it - 1; int invIndex = it - 1;
if (player.HoldItem._itype == ITYPE_GOLD) if (player.HoldItem._itype == ItemType::Gold)
player._pGold += player.HoldItem._ivalue; player._pGold += player.HoldItem._ivalue;
cn = SwapItem(&player.InvList[invIndex], &player.HoldItem); cn = SwapItem(&player.InvList[invIndex], &player.HoldItem);
if (player.HoldItem._itype == ITYPE_GOLD) if (player.HoldItem._itype == ItemType::Gold)
player._pGold = CalculateGold(player); player._pGold = CalculateGold(player);
for (auto &itemId : player.InvGrid) { for (auto &itemId : player.InvGrid) {
if (itemId == it) if (itemId == it)
@ -653,7 +653,7 @@ void CheckInvPaste(int pnum, Point cursorPosition)
player.SpdList[ii] = player.HoldItem; player.SpdList[ii] = player.HoldItem;
} else { } else {
cn = SwapItem(&player.SpdList[ii], &player.HoldItem); cn = SwapItem(&player.SpdList[ii], &player.HoldItem);
if (player.HoldItem._itype == ITYPE_GOLD) if (player.HoldItem._itype == ItemType::Gold)
player._pGold = CalculateGold(player); player._pGold = CalculateGold(player);
} }
drawsbarflag = true; drawsbarflag = true;
@ -710,7 +710,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
} }
Item &holdItem = player.HoldItem; Item &holdItem = player.HoldItem;
holdItem._itype = ITYPE_NONE; holdItem._itype = ItemType::None;
bool automaticallyMoved = false; bool automaticallyMoved = false;
bool automaticallyEquipped = false; bool automaticallyEquipped = false;
@ -726,7 +726,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
if (!automaticMove || automaticallyMoved) { if (!automaticMove || automaticallyMoved) {
NetSendCmdDelItem(false, INVLOC_HEAD); NetSendCmdDelItem(false, INVLOC_HEAD);
headItem._itype = ITYPE_NONE; headItem._itype = ItemType::None;
} }
} }
@ -740,7 +740,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
if (!automaticMove || automaticallyMoved) { if (!automaticMove || automaticallyMoved) {
NetSendCmdDelItem(false, INVLOC_RING_LEFT); NetSendCmdDelItem(false, INVLOC_RING_LEFT);
leftRingItem._itype = ITYPE_NONE; leftRingItem._itype = ItemType::None;
} }
} }
@ -754,7 +754,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
if (!automaticMove || automaticallyMoved) { if (!automaticMove || automaticallyMoved) {
NetSendCmdDelItem(false, INVLOC_RING_RIGHT); NetSendCmdDelItem(false, INVLOC_RING_RIGHT);
rightRingItem._itype = ITYPE_NONE; rightRingItem._itype = ItemType::None;
} }
} }
@ -768,7 +768,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
if (!automaticMove || automaticallyMoved) { if (!automaticMove || automaticallyMoved) {
NetSendCmdDelItem(false, INVLOC_AMULET); NetSendCmdDelItem(false, INVLOC_AMULET);
amuletItem._itype = ITYPE_NONE; amuletItem._itype = ItemType::None;
} }
} }
@ -782,7 +782,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
if (!automaticMove || automaticallyMoved) { if (!automaticMove || automaticallyMoved) {
NetSendCmdDelItem(false, INVLOC_HAND_LEFT); NetSendCmdDelItem(false, INVLOC_HAND_LEFT);
leftHandItem._itype = ITYPE_NONE; leftHandItem._itype = ItemType::None;
} }
} }
@ -796,7 +796,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
if (!automaticMove || automaticallyMoved) { if (!automaticMove || automaticallyMoved) {
NetSendCmdDelItem(false, INVLOC_HAND_RIGHT); NetSendCmdDelItem(false, INVLOC_HAND_RIGHT);
rightHandItem._itype = ITYPE_NONE; rightHandItem._itype = ItemType::None;
} }
} }
@ -810,7 +810,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
if (!automaticMove || automaticallyMoved) { if (!automaticMove || automaticallyMoved) {
NetSendCmdDelItem(false, INVLOC_CHEST); NetSendCmdDelItem(false, INVLOC_CHEST);
chestItem._itype = ITYPE_NONE; chestItem._itype = ItemType::None;
} }
} }
@ -844,14 +844,14 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
} }
if (!automaticMove || automaticallyMoved) { if (!automaticMove || automaticallyMoved) {
beltItem._itype = ITYPE_NONE; beltItem._itype = ItemType::None;
drawsbarflag = true; drawsbarflag = true;
} }
} }
} }
if (!holdItem.isEmpty()) { if (!holdItem.isEmpty()) {
if (holdItem._itype == ITYPE_GOLD) { if (holdItem._itype == ItemType::Gold) {
player._pGold = CalculateGold(player); player._pGold = CalculateGold(player);
} }
@ -874,7 +874,7 @@ void CheckInvCut(int pnum, Point cursorPosition, bool automaticMove)
} }
} }
holdItem._itype = ITYPE_NONE; holdItem._itype = ItemType::None;
} else { } else {
NewCursor(holdItem._iCurs + CURSOR_FIRSTITEM); NewCursor(holdItem._iCurs + CURSOR_FIRSTITEM);
if (!IsHardwareCursor()) { if (!IsHardwareCursor()) {
@ -991,7 +991,7 @@ void CleanupItems(Item *item, int ii)
dItem[item->position.x][item->position.y] = 0; dItem[item->position.x][item->position.y] = 0;
if (currlevel == 21 && item->position == CornerStone.position) { if (currlevel == 21 && item->position == CornerStone.position) {
CornerStone.item._itype = ITYPE_NONE; CornerStone.item._itype = ItemType::None;
CornerStone.item._iSelFlag = 0; CornerStone.item._iSelFlag = 0;
CornerStone.item.position = { 0, 0 }; CornerStone.item.position = { 0, 0 };
CornerStone.item._iAnimFlag = false; CornerStone.item._iAnimFlag = false;
@ -1163,7 +1163,7 @@ void DrawInv(const Surface &out)
if (slot == INVLOC_HAND_LEFT) { if (slot == INVLOC_HAND_LEFT) {
if (myPlayer.InvBody[slot]._iLoc == ILOC_TWOHAND) { if (myPlayer.InvBody[slot]._iLoc == ILOC_TWOHAND) {
if (myPlayer._pClass != HeroClass::Barbarian if (myPlayer._pClass != HeroClass::Barbarian
|| IsNoneOf(myPlayer.InvBody[slot]._itype, ITYPE_SWORD, ITYPE_MACE)) { || IsNoneOf(myPlayer.InvBody[slot]._itype, ItemType::Sword, ItemType::Mace)) {
InvDrawSlotBack(out, GetPanelPosition(UiPanels::Inventory, slotPos[INVLOC_HAND_RIGHT]), { slotSize[INVLOC_HAND_RIGHT].width * InventorySlotSizeInPixels.width, slotSize[INVLOC_HAND_RIGHT].height * InventorySlotSizeInPixels.height }); InvDrawSlotBack(out, GetPanelPosition(UiPanels::Inventory, slotPos[INVLOC_HAND_RIGHT]), { slotSize[INVLOC_HAND_RIGHT].width * InventorySlotSizeInPixels.width, slotSize[INVLOC_HAND_RIGHT].height * InventorySlotSizeInPixels.height });
LightTableIndex = 0; LightTableIndex = 0;
cel_transparency_active = true; cel_transparency_active = true;
@ -1245,7 +1245,7 @@ void DrawInvBelt(const Surface &out)
if (AllItemsList[myPlayer.SpdList[i].IDidx].iUsable if (AllItemsList[myPlayer.SpdList[i].IDidx].iUsable
&& myPlayer.SpdList[i]._iStatFlag && myPlayer.SpdList[i]._iStatFlag
&& myPlayer.SpdList[i]._itype != ITYPE_GOLD) { && myPlayer.SpdList[i]._itype != ItemType::Gold) {
snprintf(tempstr, sizeof(tempstr) / sizeof(*tempstr), "%i", i + 1); snprintf(tempstr, sizeof(tempstr) / sizeof(*tempstr), "%i", i + 1);
DrawString(out, tempstr, { position - Displacement { 0, 12 }, InventorySlotSizeInPixels }, UiFlags::ColorSilver | UiFlags::AlignRight); DrawString(out, tempstr, { position - Displacement { 0, 12 }, InventorySlotSizeInPixels }, UiFlags::ColorSilver | UiFlags::AlignRight);
} }
@ -1410,7 +1410,7 @@ bool GoldAutoPlace(Player &player)
bool done = false; bool done = false;
for (int i = 0; i < player._pNumInv && !done; i++) { for (int i = 0; i < player._pNumInv && !done; i++) {
if (player.InvList[i]._itype != ITYPE_GOLD) if (player.InvList[i]._itype != ItemType::Gold)
continue; continue;
if (player.InvList[i]._ivalue >= MaxGold) if (player.InvList[i]._ivalue >= MaxGold)
continue; continue;
@ -1487,9 +1487,9 @@ void CheckInvSwap(Player &player, BYTE bLoc, int idx, uint16_t wCI, int seed, bo
player.InvBody[bLoc] = player.HoldItem; player.InvBody[bLoc] = player.HoldItem;
if (bLoc == INVLOC_HAND_LEFT && player.HoldItem._iLoc == ILOC_TWOHAND) { if (bLoc == INVLOC_HAND_LEFT && player.HoldItem._iLoc == ILOC_TWOHAND) {
player.InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_RIGHT]._itype = ItemType::None;
} else if (bLoc == INVLOC_HAND_RIGHT && player.HoldItem._iLoc == ILOC_TWOHAND) { } else if (bLoc == INVLOC_HAND_RIGHT && player.HoldItem._iLoc == ILOC_TWOHAND) {
player.InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_LEFT]._itype = ItemType::None;
} }
} }
@ -1499,7 +1499,7 @@ void CheckInvSwap(Player &player, BYTE bLoc, int idx, uint16_t wCI, int seed, bo
void inv_update_rem_item(Player &player, BYTE iv) void inv_update_rem_item(Player &player, BYTE iv)
{ {
if (iv < NUM_INVLOC) { if (iv < NUM_INVLOC) {
player.InvBody[iv]._itype = ITYPE_NONE; player.InvBody[iv]._itype = ItemType::None;
} }
CalcPlrInv(player, player._pmode != PM_DEATH); CalcPlrInv(player, player._pmode != PM_DEATH);
@ -1556,7 +1556,7 @@ void InvGetItem(int pnum, Item *item, int ii)
CheckBookLevel(player); CheckBookLevel(player);
CheckItemStats(player); CheckItemStats(player);
bool cursorUpdated = false; bool cursorUpdated = false;
if (player.HoldItem._itype == ITYPE_GOLD && GoldAutoPlace(player)) if (player.HoldItem._itype == ItemType::Gold && GoldAutoPlace(player))
cursorUpdated = true; cursorUpdated = true;
CleanupItems(item, ii); CleanupItems(item, ii);
pcursitem = -1; pcursitem = -1;
@ -1588,7 +1588,7 @@ void AutoGetItem(int pnum, Item *item, int ii)
CheckBookLevel(player); CheckBookLevel(player);
CheckItemStats(player); CheckItemStats(player);
SetICursor(player.HoldItem._iCurs + CURSOR_FIRSTITEM); SetICursor(player.HoldItem._iCurs + CURSOR_FIRSTITEM);
if (player.HoldItem._itype == ITYPE_GOLD) { if (player.HoldItem._itype == ItemType::Gold) {
done = GoldAutoPlace(player); done = GoldAutoPlace(player);
if (!done) { if (!done) {
item->_ivalue = player.HoldItem._ivalue; item->_ivalue = player.HoldItem._ivalue;
@ -1615,7 +1615,7 @@ void AutoGetItem(int pnum, Item *item, int ii)
player.HoldItem = *item; player.HoldItem = *item;
RespawnItem(item, true); RespawnItem(item, true);
NetSendCmdPItem(true, CMD_RESPAWNITEM, item->position); NetSendCmdPItem(true, CMD_RESPAWNITEM, item->position);
player.HoldItem._itype = ITYPE_NONE; player.HoldItem._itype = ItemType::None;
} }
int FindGetItem(int idx, uint16_t ci, int iseed) int FindGetItem(int idx, uint16_t ci, int iseed)
@ -1860,7 +1860,7 @@ int8_t CheckInvHLight()
} else if (r >= SLOTXY_HAND_RIGHT_FIRST && r <= SLOTXY_HAND_RIGHT_LAST) { } else if (r >= SLOTXY_HAND_RIGHT_FIRST && r <= SLOTXY_HAND_RIGHT_LAST) {
pi = &myPlayer.InvBody[INVLOC_HAND_LEFT]; pi = &myPlayer.InvBody[INVLOC_HAND_LEFT];
if (pi->isEmpty() || pi->_iLoc != ILOC_TWOHAND if (pi->isEmpty() || pi->_iLoc != ILOC_TWOHAND
|| (myPlayer._pClass == HeroClass::Barbarian && IsAnyOf(myPlayer.InvBody[INVLOC_HAND_LEFT]._itype, ITYPE_SWORD, ITYPE_MACE))) { || (myPlayer._pClass == HeroClass::Barbarian && IsAnyOf(myPlayer.InvBody[INVLOC_HAND_LEFT]._itype, ItemType::Sword, ItemType::Mace))) {
rv = INVLOC_HAND_RIGHT; rv = INVLOC_HAND_RIGHT;
pi = &myPlayer.InvBody[rv]; pi = &myPlayer.InvBody[rv];
} else { } else {
@ -1888,7 +1888,7 @@ int8_t CheckInvHLight()
if (pi->isEmpty()) if (pi->isEmpty())
return -1; return -1;
if (pi->_itype == ITYPE_GOLD) { if (pi->_itype == ItemType::Gold) {
int nGold = pi->_ivalue; int nGold = pi->_ivalue;
strcpy(infostr, fmt::format(ngettext("{:d} gold piece", "{:d} gold pieces", nGold), nGold).c_str()); strcpy(infostr, fmt::format(ngettext("{:d} gold piece", "{:d} gold pieces", nGold), nGold).c_str());
} else { } else {
@ -2024,7 +2024,7 @@ bool UseInvItem(int pnum, int cii)
return true; return true;
} }
if (item->_iMiscId == IMISC_NONE && item->_itype == ITYPE_GOLD) { if (item->_iMiscId == IMISC_NONE && item->_itype == ItemType::Gold) {
StartGoldDrop(); StartGoldDrop();
return true; return true;
} }
@ -2094,7 +2094,7 @@ int CalculateGold(Player &player)
int gold = 0; int gold = 0;
for (int i = 0; i < player._pNumInv; i++) { for (int i = 0; i < player._pNumInv; i++) {
if (player.InvList[i]._itype == ITYPE_GOLD) if (player.InvList[i]._itype == ItemType::Gold)
gold += player.InvList[i]._ivalue; gold += player.InvList[i]._ivalue;
} }

338
Source/itemdat.cpp

@ -12,175 +12,175 @@ namespace devilution {
/** Contains the data related to each item ID. */ /** Contains the data related to each item ID. */
ItemData AllItemsList[] = { ItemData AllItemsList[] = {
// clang-format off // clang-format off
//_item_indexes iRnd, iClass, iLoc, iCurs, itype, iItemId, iName, iSName, iMinMLvl, iDurability, iMinDam, iMaxDam, iMinAC, iMaxAC, iMinStr, iMinMag, iMinDex, iFlags, iMiscId, iSpell, iUsable, iValue //_item_indexes iRnd, iClass, iLoc, iCurs, itype, iItemId, iName, iSName, iMinMLvl, iDurability, iMinDam, iMaxDam, iMinAC, iMaxAC, iMinStr, iMinMag, iMinDex, iFlags, iMiscId, iSpell, iUsable, iValue
/*IDI_GOLD */ { IDROP_REGULAR, ICLASS_GOLD, ILOC_UNEQUIPABLE, ICURS_GOLD, ITYPE_GOLD, UITYPE_NONE, N_("Gold"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, true, 0 }, /*IDI_GOLD */ { IDROP_REGULAR, ICLASS_GOLD, ILOC_UNEQUIPABLE, ICURS_GOLD, ItemType::Gold, UITYPE_NONE, N_("Gold"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, true, 0 },
/*IDI_WARRIOR */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ITYPE_SWORD, UITYPE_NONE, N_("Short Sword"), nullptr, 2, 20, 2, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 50 }, /*IDI_WARRIOR */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ItemType::Sword, UITYPE_NONE, N_("Short Sword"), nullptr, 2, 20, 2, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 50 },
/*IDI_WARRSHLD */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_BUCKLER, ITYPE_SHIELD, UITYPE_NONE, N_("Buckler"), nullptr, 2, 10, 0, 0, 3, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 50 }, /*IDI_WARRSHLD */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_BUCKLER, ItemType::Shield, UITYPE_NONE, N_("Buckler"), nullptr, 2, 10, 0, 0, 3, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 50 },
/*IDI_WARRCLUB */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLUB, ITYPE_MACE, UITYPE_SPIKCLUB, N_("Club"), nullptr, 1, 20, 1, 6, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 }, /*IDI_WARRCLUB */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLUB, ItemType::Mace, UITYPE_SPIKCLUB, N_("Club"), nullptr, 1, 20, 1, 6, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 },
/*IDI_ROGUE */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BOW, ITYPE_BOW, UITYPE_NONE, N_("Short Bow"), nullptr, 1, 30, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 100 }, /*IDI_ROGUE */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BOW, ItemType::Bow, UITYPE_NONE, N_("Short Bow"), nullptr, 1, 30, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 100 },
/*IDI_SORCERER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_NONE, N_("Short Staff of Mana"), nullptr, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_MANA, false, 520 }, /*IDI_SORCERER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ItemType::Staff, UITYPE_NONE, N_("Short Staff of Mana"), nullptr, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_MANA, false, 520 },
/*IDI_CLEAVER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_CLEAVER, ITYPE_AXE, UITYPE_CLEAVER, N_("Cleaver"), nullptr, 10, 10, 4, 24, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 2000 }, /*IDI_CLEAVER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_CLEAVER, ItemType::Axe, UITYPE_CLEAVER, N_("Cleaver"), nullptr, 10, 10, 4, 24, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 2000 },
/*IDI_SKCROWN */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_THE_UNDEAD_CROWN, ITYPE_HELM, UITYPE_SKCROWN, N_("The Undead Crown"), nullptr, 0, 50, 0, 0, 15, 15, 0, 0, 0, ISPL_RNDSTEALLIFE, IMISC_UNIQUE, SPL_NULL, false, 10000 }, /*IDI_SKCROWN */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_THE_UNDEAD_CROWN, ItemType::Helm, UITYPE_SKCROWN, N_("The Undead Crown"), nullptr, 0, 50, 0, 0, 15, 15, 0, 0, 0, ISPL_RNDSTEALLIFE, IMISC_UNIQUE, SPL_NULL, false, 10000 },
/*IDI_INFRARING */ { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_EMPYREAN_BAND, ITYPE_RING, UITYPE_INFRARING, N_("Empyrean Band"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 8000 }, /*IDI_INFRARING */ { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_EMPYREAN_BAND, ItemType::Ring, UITYPE_INFRARING, N_("Empyrean Band"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 8000 },
/*IDI_ROCK */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAGIC_ROCK, ITYPE_MISC, UITYPE_NONE, N_("Magic Rock"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_ROCK */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAGIC_ROCK, ItemType::Misc, UITYPE_NONE, N_("Magic Rock"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_OPTAMULET */ { IDROP_NEVER, ICLASS_MISC, ILOC_AMULET, ICURS_OPTIC_AMULET, ITYPE_AMULET, UITYPE_OPTAMULET, N_("Optic Amulet"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 5000 }, /*IDI_OPTAMULET */ { IDROP_NEVER, ICLASS_MISC, ILOC_AMULET, ICURS_OPTIC_AMULET, ItemType::Amulet, UITYPE_OPTAMULET, N_("Optic Amulet"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 5000 },
/*IDI_TRING */ { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_RING_OF_TRUTH, ITYPE_RING, UITYPE_TRING, N_("Ring of Truth"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 1000 }, /*IDI_TRING */ { IDROP_NEVER, ICLASS_MISC, ILOC_RING, ICURS_RING_OF_TRUTH, ItemType::Ring, UITYPE_TRING, N_("Ring of Truth"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 1000 },
/*IDI_BANNER */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TAVERN_SIGN, ITYPE_MISC, UITYPE_NONE, N_("Tavern Sign"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_BANNER */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TAVERN_SIGN, ItemType::Misc, UITYPE_NONE, N_("Tavern Sign"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_HARCREST */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_HARLEQUIN_CREST, ITYPE_HELM, UITYPE_HARCREST, N_("Harlequin Crest"), nullptr, 0, 15, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 15 }, /*IDI_HARCREST */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_HARLEQUIN_CREST, ItemType::Helm, UITYPE_HARCREST, N_("Harlequin Crest"), nullptr, 0, 15, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 15 },
/*IDI_STEELVEIL */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_VIEL_OF_STEEL, ITYPE_HELM, UITYPE_STEELVEIL, N_("Veil of Steel"), nullptr, 0, 60, 0, 0, 18, 18, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 0 }, /*IDI_STEELVEIL */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_HELM, ICURS_VIEL_OF_STEEL, ItemType::Helm, UITYPE_STEELVEIL, N_("Veil of Steel"), nullptr, 0, 60, 0, 0, 18, 18, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 0 },
/*IDI_GLDNELIX */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GOLDEN_ELIXIR, ITYPE_MISC, UITYPE_ELIXIR, N_("Golden Elixir"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_GLDNELIX */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GOLDEN_ELIXIR, ItemType::Misc, UITYPE_ELIXIR, N_("Golden Elixir"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_ANVIL */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_ANVIL_OF_FURY, ITYPE_MISC, UITYPE_NONE, N_("Anvil of Fury"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_ANVIL */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_ANVIL_OF_FURY, ItemType::Misc, UITYPE_NONE, N_("Anvil of Fury"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_MUSHROOM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BLACK_MUSHROOM, ITYPE_MISC, UITYPE_NONE, N_("Black Mushroom"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_MUSHROOM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BLACK_MUSHROOM, ItemType::Misc, UITYPE_NONE, N_("Black Mushroom"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_BRAIN */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BRAIN, ITYPE_MISC, UITYPE_NONE, N_("Brain"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_BRAIN */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BRAIN, ItemType::Misc, UITYPE_NONE, N_("Brain"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_FUNGALTM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_FUNGAL_TOME, ITYPE_MISC, UITYPE_NONE, N_("Fungal Tome"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_FUNGALTM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_FUNGAL_TOME, ItemType::Misc, UITYPE_NONE, N_("Fungal Tome"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_SPECELIX */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SPECTRAL_ELIXIR, ITYPE_MISC, UITYPE_ELIXIR, N_("Spectral Elixir"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SPECELIX, SPL_NULL, false, 0 }, /*IDI_SPECELIX */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SPECTRAL_ELIXIR, ItemType::Misc, UITYPE_ELIXIR, N_("Spectral Elixir"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SPECELIX, SPL_NULL, false, 0 },
/*IDI_BLDSTONE */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BLOOD_STONE, ITYPE_MISC, UITYPE_NONE, N_("Blood Stone"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_BLDSTONE */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BLOOD_STONE, ItemType::Misc, UITYPE_NONE, N_("Blood Stone"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_MAPOFDOOM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAP_OF_THE_STARS, ITYPE_MISC, UITYPE_MAPOFDOOM, N_("Cathedral Map"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MAPOFDOOM, SPL_NULL, true, 0 }, /*IDI_MAPOFDOOM */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_MAP_OF_THE_STARS, ItemType::Misc, UITYPE_MAPOFDOOM, N_("Cathedral Map"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MAPOFDOOM, SPL_NULL, true, 0 },
/*IDI_EAR */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_EAR_SORCERER, ITYPE_MISC, UITYPE_NONE, N_("Heart"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_EAR, SPL_NULL, false, 0 }, /*IDI_EAR */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_EAR_SORCERER, ItemType::Misc, UITYPE_NONE, N_("Heart"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_EAR, SPL_NULL, false, 0 },
/*IDI_HEAL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_HEALING, ITYPE_MISC, UITYPE_NONE, N_("Potion of Healing"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_HEAL, SPL_NULL, true, 50 }, /*IDI_HEAL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_HEALING, ItemType::Misc, UITYPE_NONE, N_("Potion of Healing"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_HEAL, SPL_NULL, true, 50 },
/*IDI_MANA */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_MANA, ITYPE_MISC, UITYPE_NONE, N_("Potion of Mana"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MANA, SPL_NULL, true, 50 }, /*IDI_MANA */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_MANA, ItemType::Misc, UITYPE_NONE, N_("Potion of Mana"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MANA, SPL_NULL, true, 50 },
/*IDI_IDENTIFY */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Identify"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_IDENTIFY, true, 200 }, /*IDI_IDENTIFY */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Identify"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_IDENTIFY, true, 200 },
/*IDI_PORTAL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Town Portal"), nullptr, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_TOWN, true, 200 }, /*IDI_PORTAL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Town Portal"), nullptr, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_TOWN, true, 200 },
/*IDI_ARMOFVAL */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_ARMOR, ICURS_ARKAINES_VALOR, ITYPE_MARMOR, UITYPE_ARMOFVAL, N_("Arkaine's Valor"), nullptr, 0, 40, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 0 }, /*IDI_ARMOFVAL */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_ARMOR, ICURS_ARKAINES_VALOR, ItemType::MediumArmor, UITYPE_ARMOFVAL, N_("Arkaine's Valor"), nullptr, 0, 40, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 0 },
/*IDI_FULLHEAL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_HEALING, ITYPE_MISC, UITYPE_NONE, N_("Potion of Full Healing"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLHEAL, SPL_NULL, true, 150 }, /*IDI_FULLHEAL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_HEALING, ItemType::Misc, UITYPE_NONE, N_("Potion of Full Healing"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLHEAL, SPL_NULL, true, 150 },
/*IDI_FULLMANA */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, N_("Potion of Full Mana"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, true, 150 }, /*IDI_FULLMANA */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, ItemType::Misc, UITYPE_NONE, N_("Potion of Full Mana"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, true, 150 },
/*IDI_GRISWOLD */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BROAD_SWORD, ITYPE_SWORD, UITYPE_GRISWOLD, N_("Griswold's Edge"), nullptr, 8, 50, 4, 12, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 750 }, /*IDI_GRISWOLD */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BROAD_SWORD, ItemType::Sword, UITYPE_GRISWOLD, N_("Griswold's Edge"), nullptr, 8, 50, 4, 12, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 750 },
/*IDI_LGTFORGE */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_ARMOR, ICURS_BOVINE, ITYPE_HARMOR, UITYPE_BOVINE, N_("Bovine Plate"), nullptr, 0, 40, 0, 0, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 0 }, /*IDI_LGTFORGE */ { IDROP_NEVER, ICLASS_ARMOR, ILOC_ARMOR, ICURS_BOVINE, ItemType::HeavyArmor, UITYPE_BOVINE, N_("Bovine Plate"), nullptr, 0, 40, 0, 0, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_UNIQUE, SPL_NULL, false, 0 },
/*IDI_LAZSTAFF */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_STAFF_OF_LAZARUS, ITYPE_MISC, UITYPE_LAZSTAFF, N_("Staff of Lazarus"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_LAZSTAFF */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_STAFF_OF_LAZARUS, ItemType::Misc, UITYPE_LAZSTAFF, N_("Staff of Lazarus"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_RESURRECT */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Resurrect"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_RESURRECT, true, 250 }, /*IDI_RESURRECT */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Resurrect"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_RESURRECT, true, 250 },
/*IDI_OIL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, N_("Blacksmith Oil"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, true, 100 }, /*IDI_OIL */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ItemType::Misc, UITYPE_NONE, N_("Blacksmith Oil"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, true, 100 },
/*IDI_SHORTSTAFF */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_NONE, N_("Short Staff"), nullptr, 1, 25, 2, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 }, /*IDI_SHORTSTAFF */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ItemType::Staff, UITYPE_NONE, N_("Short Staff"), nullptr, 1, 25, 2, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 },
/*IDI_BARDSWORD */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ITYPE_SWORD, UITYPE_NONE, N_("Sword"), nullptr, 2, 8, 1, 5, 0, 0, 15, 0, 20, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 }, /*IDI_BARDSWORD */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ItemType::Sword, UITYPE_NONE, N_("Sword"), nullptr, 2, 8, 1, 5, 0, 0, 15, 0, 20, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 },
/*IDI_BARDDAGGER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_DAGGER, ITYPE_SWORD, UITYPE_NONE, N_("Dagger"), nullptr, 1, 16, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 }, /*IDI_BARDDAGGER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_DAGGER, ItemType::Sword, UITYPE_NONE, N_("Dagger"), nullptr, 1, 16, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 },
/*IDI_RUNEBOMB */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_RUNE_BOMB, ITYPE_MISC, UITYPE_NONE, N_("Rune Bomb"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_RUNEBOMB */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_RUNE_BOMB, ItemType::Misc, UITYPE_NONE, N_("Rune Bomb"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_THEODORE */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_THEODORE, ITYPE_MISC, UITYPE_NONE, N_("Theodore"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_THEODORE */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_THEODORE, ItemType::Misc, UITYPE_NONE, N_("Theodore"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_AURIC */ { IDROP_NEVER, ICLASS_MISC, ILOC_AMULET, ICURS_AURIC_AMULET, ITYPE_MISC, UITYPE_NONE, N_("Auric Amulet"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AURIC, SPL_NULL, false, 100 }, /*IDI_AURIC */ { IDROP_NEVER, ICLASS_MISC, ILOC_AMULET, ICURS_AURIC_AMULET, ItemType::Misc, UITYPE_NONE, N_("Auric Amulet"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AURIC, SPL_NULL, false, 100 },
/*IDI_NOTE1 */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_1, ITYPE_MISC, UITYPE_NONE, N_("Torn Note 1"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_NOTE1 */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_1, ItemType::Misc, UITYPE_NONE, N_("Torn Note 1"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_NOTE2 */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_2, ITYPE_MISC, UITYPE_NONE, N_("Torn Note 2"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_NOTE2 */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_2, ItemType::Misc, UITYPE_NONE, N_("Torn Note 2"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_NOTE3 */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_3, ITYPE_MISC, UITYPE_NONE, N_("Torn Note 3"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_NOTE3 */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_TORN_NOTE_3, ItemType::Misc, UITYPE_NONE, N_("Torn Note 3"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_FULLNOTE */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_RECONSTRUCTED_NOTE, ITYPE_MISC, UITYPE_NONE, N_("Reconstructed Note"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NOTE, SPL_NULL, true, 0 }, /*IDI_FULLNOTE */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_RECONSTRUCTED_NOTE, ItemType::Misc, UITYPE_NONE, N_("Reconstructed Note"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NOTE, SPL_NULL, true, 0 },
/*IDI_BROWNSUIT */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BROWN_SUIT, ITYPE_MISC, UITYPE_NONE, N_("Brown Suit"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_BROWNSUIT */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_BROWN_SUIT, ItemType::Misc, UITYPE_NONE, N_("Brown Suit"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/*IDI_GREYSUIT */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_GREY_SUIT, ITYPE_MISC, UITYPE_NONE, N_("Grey Suit"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /*IDI_GREYSUIT */ { IDROP_NEVER, ICLASS_QUEST, ILOC_UNEQUIPABLE, ICURS_GREY_SUIT, ItemType::Misc, UITYPE_NONE, N_("Grey Suit"), nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_CAP, ITYPE_HELM, UITYPE_NONE, N_("Cap"), N_("Cap"), 1, 15, 0, 0, 1, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 15 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_CAP, ItemType::Helm, UITYPE_NONE, N_("Cap"), N_("Cap"), 1, 15, 0, 0, 1, 3, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 15 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_SKULL_CAP, ITYPE_HELM, UITYPE_SKULLCAP, N_("Skull Cap"), N_("Cap"), 4, 20, 0, 0, 2, 4, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 25 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_SKULL_CAP, ItemType::Helm, UITYPE_SKULLCAP, N_("Skull Cap"), N_("Cap"), 4, 20, 0, 0, 2, 4, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 25 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_HELM, ITYPE_HELM, UITYPE_HELM, N_("Helm"), N_("Helm"), 8, 30, 0, 0, 4, 6, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 40 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_HELM, ItemType::Helm, UITYPE_HELM, N_("Helm"), N_("Helm"), 8, 30, 0, 0, 4, 6, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 40 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_FULL_HELM, ITYPE_HELM, UITYPE_NONE, N_("Full Helm"), N_("Helm"), 12, 35, 0, 0, 6, 8, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 90 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_FULL_HELM, ItemType::Helm, UITYPE_NONE, N_("Full Helm"), N_("Helm"), 12, 35, 0, 0, 6, 8, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 90 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_CROWN, ITYPE_HELM, UITYPE_CROWN, N_("Crown"), N_("Crown"), 16, 40, 0, 0, 8, 12, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_CROWN, ItemType::Helm, UITYPE_CROWN, N_("Crown"), N_("Crown"), 16, 40, 0, 0, 8, 12, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_GREAT_HELM, ITYPE_HELM, UITYPE_GREATHELM, N_("Great Helm"), N_("Helm"), 20, 60, 0, 0, 10, 15, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 400 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_HELM, ICURS_GREAT_HELM, ItemType::Helm, UITYPE_GREATHELM, N_("Great Helm"), N_("Helm"), 20, 60, 0, 0, 10, 15, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 400 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CAPE, ITYPE_LARMOR, UITYPE_CAPE, N_("Cape"), N_("Cape"), 1, 12, 0, 0, 1, 5, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 10 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CAPE, ItemType::LightArmor, UITYPE_CAPE, N_("Cape"), N_("Cape"), 1, 12, 0, 0, 1, 5, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 10 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_RAGS, ITYPE_LARMOR, UITYPE_RAGS, N_("Rags"), N_("Rags"), 1, 6, 0, 0, 2, 6, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 5 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_RAGS, ItemType::LightArmor, UITYPE_RAGS, N_("Rags"), N_("Rags"), 1, 6, 0, 0, 2, 6, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 5 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CLOAK, ITYPE_LARMOR, UITYPE_CLOAK, N_("Cloak"), N_("Cloak"), 2, 18, 0, 0, 3, 7, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 40 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CLOAK, ItemType::LightArmor, UITYPE_CLOAK, N_("Cloak"), N_("Cloak"), 2, 18, 0, 0, 3, 7, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 40 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_ROBE, ITYPE_LARMOR, UITYPE_ROBE, N_("Robe"), N_("Robe"), 3, 24, 0, 0, 4, 7, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 75 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_ROBE, ItemType::LightArmor, UITYPE_ROBE, N_("Robe"), N_("Robe"), 3, 24, 0, 0, 4, 7, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 75 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_QUILTED_ARMOR, ITYPE_LARMOR, UITYPE_NONE, N_("Quilted Armor"), N_("Armor"), 4, 30, 0, 0, 7, 10, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_QUILTED_ARMOR, ItemType::LightArmor, UITYPE_NONE, N_("Quilted Armor"), N_("Armor"), 4, 30, 0, 0, 7, 10, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_LEATHER_ARMOR, ITYPE_LARMOR, UITYPE_LEATHARMOR, N_("Leather Armor"), N_("Armor"), 6, 35, 0, 0, 10, 13, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 300 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_LEATHER_ARMOR, ItemType::LightArmor, UITYPE_LEATHARMOR, N_("Leather Armor"), N_("Armor"), 6, 35, 0, 0, 10, 13, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 300 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_HARD_LEATHER_ARMOR, ITYPE_LARMOR, UITYPE_NONE, N_("Hard Leather Armor"), N_("Armor"), 7, 40, 0, 0, 11, 14, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 450 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_HARD_LEATHER_ARMOR, ItemType::LightArmor, UITYPE_NONE, N_("Hard Leather Armor"), N_("Armor"), 7, 40, 0, 0, 11, 14, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 450 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_STUDDED_LEATHER_ARMOR, ITYPE_LARMOR, UITYPE_STUDARMOR, N_("Studded Leather Armor"), N_("Armor"), 9, 45, 0, 0, 15, 17, 20, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 700 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_STUDDED_LEATHER_ARMOR, ItemType::LightArmor, UITYPE_STUDARMOR, N_("Studded Leather Armor"), N_("Armor"), 9, 45, 0, 0, 15, 17, 20, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 700 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_RING_MAIL, ITYPE_MARMOR, UITYPE_NONE, N_("Ring Mail"), N_("Mail"), 11, 50, 0, 0, 17, 20, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 900 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_RING_MAIL, ItemType::MediumArmor, UITYPE_NONE, N_("Ring Mail"), N_("Mail"), 11, 50, 0, 0, 17, 20, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 900 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CHAIN_MAIL, ITYPE_MARMOR, UITYPE_CHAINMAIL, N_("Chain Mail"), N_("Mail"), 13, 55, 0, 0, 18, 22, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1250 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_CHAIN_MAIL, ItemType::MediumArmor, UITYPE_CHAINMAIL, N_("Chain Mail"), N_("Mail"), 13, 55, 0, 0, 18, 22, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1250 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_SCALE_MAIL, ITYPE_MARMOR, UITYPE_NONE, N_("Scale Mail"), N_("Mail"), 15, 60, 0, 0, 23, 28, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2300 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_SCALE_MAIL, ItemType::MediumArmor, UITYPE_NONE, N_("Scale Mail"), N_("Mail"), 15, 60, 0, 0, 23, 28, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2300 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_BREAST_PLATE, ITYPE_HARMOR, UITYPE_BREASTPLATE, N_("Breast Plate"), N_("Plate"), 16, 80, 0, 0, 20, 24, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2800 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_BREAST_PLATE, ItemType::HeavyArmor, UITYPE_BREASTPLATE, N_("Breast Plate"), N_("Plate"), 16, 80, 0, 0, 20, 24, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2800 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_SPLINT_MAIL, ITYPE_MARMOR, UITYPE_NONE, N_("Splint Mail"), N_("Mail"), 17, 65, 0, 0, 30, 35, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 3250 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_SPLINT_MAIL, ItemType::MediumArmor, UITYPE_NONE, N_("Splint Mail"), N_("Mail"), 17, 65, 0, 0, 30, 35, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 3250 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FIELD_PLATE, ITYPE_HARMOR, UITYPE_PLATEMAIL, N_("Plate Mail"), N_("Plate"), 19, 75, 0, 0, 42, 50, 60, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 4600 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FIELD_PLATE, ItemType::HeavyArmor, UITYPE_PLATEMAIL, N_("Plate Mail"), N_("Plate"), 19, 75, 0, 0, 42, 50, 60, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 4600 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FIELD_PLATE, ITYPE_HARMOR, UITYPE_NONE, N_("Field Plate"), N_("Plate"), 21, 80, 0, 0, 40, 45, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 5800 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FIELD_PLATE, ItemType::HeavyArmor, UITYPE_NONE, N_("Field Plate"), N_("Plate"), 21, 80, 0, 0, 40, 45, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 5800 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_GOTHIC_PLATE, ITYPE_HARMOR, UITYPE_NONE, N_("Gothic Plate"), N_("Plate"), 23, 100, 0, 0, 50, 60, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 8000 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_GOTHIC_PLATE, ItemType::HeavyArmor, UITYPE_NONE, N_("Gothic Plate"), N_("Plate"), 23, 100, 0, 0, 50, 60, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 8000 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FULL_PLATE_MAIL, ITYPE_HARMOR, UITYPE_FULLPLATE, N_("Full Plate Mail"), N_("Plate"), 25, 90, 0, 0, 60, 75, 90, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 6500 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ARMOR, ICURS_FULL_PLATE_MAIL, ItemType::HeavyArmor, UITYPE_FULLPLATE, N_("Full Plate Mail"), N_("Plate"), 25, 90, 0, 0, 60, 75, 90, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 6500 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_BUCKLER, ITYPE_SHIELD, UITYPE_BUCKLER, N_("Buckler"), N_("Shield"), 1, 16, 0, 0, 1, 5, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 30 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_BUCKLER, ItemType::Shield, UITYPE_BUCKLER, N_("Buckler"), N_("Shield"), 1, 16, 0, 0, 1, 5, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 30 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_SMALL_SHIELD, ITYPE_SHIELD, UITYPE_SMALLSHIELD, N_("Small Shield"), N_("Shield"), 5, 24, 0, 0, 3, 8, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 90 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_SMALL_SHIELD, ItemType::Shield, UITYPE_SMALLSHIELD, N_("Small Shield"), N_("Shield"), 5, 24, 0, 0, 3, 8, 25, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 90 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_LARGE_SHIELD, ITYPE_SHIELD, UITYPE_LARGESHIELD, N_("Large Shield"), N_("Shield"), 9, 32, 0, 0, 5, 10, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_LARGE_SHIELD, ItemType::Shield, UITYPE_LARGESHIELD, N_("Large Shield"), N_("Shield"), 9, 32, 0, 0, 5, 10, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_KITE_SHIELD, ITYPE_SHIELD, UITYPE_KITESHIELD, N_("Kite Shield"), N_("Shield"), 14, 40, 0, 0, 8, 15, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 400 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_KITE_SHIELD, ItemType::Shield, UITYPE_KITESHIELD, N_("Kite Shield"), N_("Shield"), 14, 40, 0, 0, 8, 15, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 400 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_TOWER_SHIELD, ITYPE_SHIELD, UITYPE_GOTHSHIELD, N_("Tower Shield"), N_("Shield"), 20, 50, 0, 0, 12, 20, 60, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 850 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_TOWER_SHIELD, ItemType::Shield, UITYPE_GOTHSHIELD, N_("Tower Shield"), N_("Shield"), 20, 50, 0, 0, 12, 20, 60, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 850 },
/* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_GOTHIC_SHIELD, ITYPE_SHIELD, UITYPE_GOTHSHIELD, N_("Gothic Shield"), N_("Shield"), 23, 60, 0, 0, 14, 18, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2300 }, /* */ { IDROP_REGULAR, ICLASS_ARMOR, ILOC_ONEHAND, ICURS_GOTHIC_SHIELD, ItemType::Shield, UITYPE_GOTHSHIELD, N_("Gothic Shield"), N_("Shield"), 23, 60, 0, 0, 14, 18, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2300 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_HEALING, ITYPE_MISC, UITYPE_NONE, N_("Potion of Healing"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_HEAL, SPL_NULL, true, 50 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_HEALING, ItemType::Misc, UITYPE_NONE, N_("Potion of Healing"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_HEAL, SPL_NULL, true, 50 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_HEALING, ITYPE_MISC, UITYPE_NONE, N_("Potion of Full Healing"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLHEAL, SPL_NULL, true, 150 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_HEALING, ItemType::Misc, UITYPE_NONE, N_("Potion of Full Healing"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLHEAL, SPL_NULL, true, 150 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_MANA, ITYPE_MISC, UITYPE_NONE, N_("Potion of Mana"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MANA, SPL_NULL, true, 50 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_MANA, ItemType::Misc, UITYPE_NONE, N_("Potion of Mana"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_MANA, SPL_NULL, true, 50 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, N_("Potion of Full Mana"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, true, 150 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_MANA, ItemType::Misc, UITYPE_NONE, N_("Potion of Full Mana"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLMANA, SPL_NULL, true, 150 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_REJUVENATION, ITYPE_MISC, UITYPE_NONE, N_("Potion of Rejuvenation"), nullptr, 3, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_REJUV, SPL_NULL, true, 120 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_REJUVENATION, ItemType::Misc, UITYPE_NONE, N_("Potion of Rejuvenation"), nullptr, 3, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_REJUV, SPL_NULL, true, 120 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_REJUVENATION, ITYPE_MISC, UITYPE_NONE, N_("Potion of Full Rejuvenation"), nullptr, 7, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLREJUV, SPL_NULL, true, 600 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_POTION_OF_FULL_REJUVENATION, ItemType::Misc, UITYPE_NONE, N_("Potion of Full Rejuvenation"), nullptr, 7, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_FULLREJUV, SPL_NULL, true, 600 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, N_("Blacksmith Oil"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, true, 100 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ItemType::Misc, UITYPE_NONE, N_("Blacksmith Oil"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILBSMTH, SPL_NULL, true, 100 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, N_("Oil of Accuracy"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILACC, SPL_NULL, true, 500 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ItemType::Misc, UITYPE_NONE, N_("Oil of Accuracy"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILACC, SPL_NULL, true, 500 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, N_("Oil of Sharpness"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILSHARP, SPL_NULL, true, 500 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ItemType::Misc, UITYPE_NONE, N_("Oil of Sharpness"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILSHARP, SPL_NULL, true, 500 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ITYPE_MISC, UITYPE_NONE, N_("Oil"), nullptr, 10, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILOF, SPL_NULL, true, 0 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_OIL, ItemType::Misc, UITYPE_NONE, N_("Oil"), nullptr, 10, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_OILOF, SPL_NULL, true, 0 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_STRENGTH, ITYPE_MISC, UITYPE_NONE, N_("Elixir of Strength"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXSTR, SPL_NULL, true, 5000 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_STRENGTH, ItemType::Misc, UITYPE_NONE, N_("Elixir of Strength"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXSTR, SPL_NULL, true, 5000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_MAGIC, ITYPE_MISC, UITYPE_NONE, N_("Elixir of Magic"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXMAG, SPL_NULL, true, 5000 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_MAGIC, ItemType::Misc, UITYPE_NONE, N_("Elixir of Magic"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXMAG, SPL_NULL, true, 5000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_DEXTERITY, ITYPE_MISC, UITYPE_NONE, N_("Elixir of Dexterity"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXDEX, SPL_NULL, true, 5000 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_DEXTERITY, ItemType::Misc, UITYPE_NONE, N_("Elixir of Dexterity"), nullptr, 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXDEX, SPL_NULL, true, 5000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_VITALITY, ITYPE_MISC, UITYPE_NONE, N_("Elixir of Vitality"), nullptr, 20, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXVIT, SPL_NULL, true, 5000 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_ELIXIR_OF_VITALITY, ItemType::Misc, UITYPE_NONE, N_("Elixir of Vitality"), nullptr, 20, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_ELIXVIT, SPL_NULL, true, 5000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Healing"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_HEAL, true, 50 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Healing"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_HEAL, true, 50 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Search"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_SEARCH, true, 50 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Search"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_SEARCH, true, 50 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Lightning"), nullptr, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_LIGHTNING, true, 150 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Lightning"), nullptr, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_LIGHTNING, true, 150 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Identify"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_IDENTIFY, true, 100 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Identify"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_IDENTIFY, true, 100 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Resurrect"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_RESURRECT, true, 250 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Resurrect"), nullptr, 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLLT, SPL_RESURRECT, true, 250 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Fire Wall"), nullptr, 4, 0, 0, 0, 0, 0, 0, 17, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FIREWALL, true, 400 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Fire Wall"), nullptr, 4, 0, 0, 0, 0, 0, 0, 17, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FIREWALL, true, 400 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Inferno"), nullptr, 1, 0, 0, 0, 0, 0, 0, 19, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FLAME, true, 100 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Inferno"), nullptr, 1, 0, 0, 0, 0, 0, 0, 19, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FLAME, true, 100 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Town Portal"), nullptr, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_TOWN, true, 200 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Town Portal"), nullptr, 4, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_TOWN, true, 200 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Flash"), nullptr, 6, 0, 0, 0, 0, 0, 0, 21, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FLASH, true, 500 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Flash"), nullptr, 6, 0, 0, 0, 0, 0, 0, 21, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FLASH, true, 500 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Infravision"), nullptr, 8, 0, 0, 0, 0, 0, 0, 23, 0, ISPL_NONE, IMISC_SCROLL, SPL_INFRA, true, 600 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Infravision"), nullptr, 8, 0, 0, 0, 0, 0, 0, 23, 0, ISPL_NONE, IMISC_SCROLL, SPL_INFRA, true, 600 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Phasing"), nullptr, 6, 0, 0, 0, 0, 0, 0, 25, 0, ISPL_NONE, IMISC_SCROLL, SPL_RNDTELEPORT, true, 200 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Phasing"), nullptr, 6, 0, 0, 0, 0, 0, 0, 25, 0, ISPL_NONE, IMISC_SCROLL, SPL_RNDTELEPORT, true, 200 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Mana Shield"), nullptr, 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_MANASHIELD, true, 1200 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Mana Shield"), nullptr, 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_SCROLL, SPL_MANASHIELD, true, 1200 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Flame Wave"), nullptr, 10, 0, 0, 0, 0, 0, 0, 29, 0, ISPL_NONE, IMISC_SCROLLT, SPL_WAVE, true, 650 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Flame Wave"), nullptr, 10, 0, 0, 0, 0, 0, 0, 29, 0, ISPL_NONE, IMISC_SCROLLT, SPL_WAVE, true, 650 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Fireball"), nullptr, 8, 0, 0, 0, 0, 0, 0, 31, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FIREBALL, true, 300 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Fireball"), nullptr, 8, 0, 0, 0, 0, 0, 0, 31, 0, ISPL_NONE, IMISC_SCROLLT, SPL_FIREBALL, true, 300 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Stone Curse"), nullptr, 6, 0, 0, 0, 0, 0, 0, 33, 0, ISPL_NONE, IMISC_SCROLLT, SPL_STONE, true, 800 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Stone Curse"), nullptr, 6, 0, 0, 0, 0, 0, 0, 33, 0, ISPL_NONE, IMISC_SCROLLT, SPL_STONE, true, 800 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Chain Lightning"), nullptr, 10, 0, 0, 0, 0, 0, 0, 35, 0, ISPL_NONE, IMISC_SCROLLT, SPL_CHAIN, true, 750 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Chain Lightning"), nullptr, 10, 0, 0, 0, 0, 0, 0, 35, 0, ISPL_NONE, IMISC_SCROLLT, SPL_CHAIN, true, 750 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Guardian"), nullptr, 12, 0, 0, 0, 0, 0, 0, 47, 0, ISPL_NONE, IMISC_SCROLLT, SPL_GUARDIAN, true, 950 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Guardian"), nullptr, 12, 0, 0, 0, 0, 0, 0, 47, 0, ISPL_NONE, IMISC_SCROLLT, SPL_GUARDIAN, true, 950 },
/* */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Non Item", nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /* */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, "Non Item", nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Nova"), nullptr, 14, 0, 0, 0, 0, 0, 0, 57, 0, ISPL_NONE, IMISC_SCROLL, SPL_NOVA, true, 1300 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Nova"), nullptr, 14, 0, 0, 0, 0, 0, 0, 57, 0, ISPL_NONE, IMISC_SCROLL, SPL_NOVA, true, 1300 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Golem"), nullptr, 10, 0, 0, 0, 0, 0, 0, 51, 0, ISPL_NONE, IMISC_SCROLLT, SPL_GOLEM, true, 1100 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Golem"), nullptr, 10, 0, 0, 0, 0, 0, 0, 51, 0, ISPL_NONE, IMISC_SCROLLT, SPL_GOLEM, true, 1100 },
/* */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, "Scroll of None", nullptr, 99, 0, 0, 0, 0, 0, 0, 61, 0, ISPL_NONE, IMISC_SCROLLT, SPL_NULL, true, 1000 }, /* */ { IDROP_NEVER, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, "Scroll of None", nullptr, 99, 0, 0, 0, 0, 0, 0, 61, 0, ISPL_NONE, IMISC_SCROLLT, SPL_NULL, true, 1000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Teleport"), nullptr, 14, 0, 0, 0, 0, 0, 0, 81, 0, ISPL_NONE, IMISC_SCROLL, SPL_TELEPORT, true, 3000 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Teleport"), nullptr, 14, 0, 0, 0, 0, 0, 0, 81, 0, ISPL_NONE, IMISC_SCROLL, SPL_TELEPORT, true, 3000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ITYPE_MISC, UITYPE_NONE, N_("Scroll of Apocalypse"), nullptr, 22, 0, 0, 0, 0, 0, 0, 117, 0, ISPL_NONE, IMISC_SCROLL, SPL_APOCA, true, 2000 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_SCROLL_OF, ItemType::Misc, UITYPE_NONE, N_("Scroll of Apocalypse"), nullptr, 22, 0, 0, 0, 0, 0, 0, 117, 0, ISPL_NONE, IMISC_SCROLL, SPL_APOCA, true, 2000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, N_("Book of "), nullptr, 2, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, true, 0 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ItemType::Misc, UITYPE_NONE, N_("Book of "), nullptr, 2, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, true, 0 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, N_("Book of "), nullptr, 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, true, 0 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ItemType::Misc, UITYPE_NONE, N_("Book of "), nullptr, 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, true, 0 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, N_("Book of "), nullptr, 14, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, true, 0 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ItemType::Misc, UITYPE_NONE, N_("Book of "), nullptr, 14, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, true, 0 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ITYPE_MISC, UITYPE_NONE, N_("Book of "), nullptr, 20, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, true, 0 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_BOOK_BLUE, ItemType::Misc, UITYPE_NONE, N_("Book of "), nullptr, 20, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_BOOK, SPL_NULL, true, 0 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_DAGGER, ITYPE_SWORD, UITYPE_DAGGER, N_("Dagger"), N_("Dagger"), 1, 16, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 60 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_DAGGER, ItemType::Sword, UITYPE_DAGGER, N_("Dagger"), N_("Dagger"), 1, 16, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 60 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ITYPE_SWORD, UITYPE_NONE, N_("Short Sword"), N_("Sword"), 1, 24, 2, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 120 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SHORT_SWORD, ItemType::Sword, UITYPE_NONE, N_("Short Sword"), N_("Sword"), 1, 24, 2, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 120 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_FALCHION, ITYPE_SWORD, UITYPE_FALCHION, N_("Falchion"), N_("Sword"), 2, 20, 4, 8, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 250 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_FALCHION, ItemType::Sword, UITYPE_FALCHION, N_("Falchion"), N_("Sword"), 2, 20, 4, 8, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 250 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SCIMITAR, ITYPE_SWORD, UITYPE_SCIMITAR, N_("Scimitar"), N_("Sword"), 4, 28, 3, 7, 0, 0, 23, 0, 23, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SCIMITAR, ItemType::Sword, UITYPE_SCIMITAR, N_("Scimitar"), N_("Sword"), 4, 28, 3, 7, 0, 0, 23, 0, 23, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLAYMORE, ITYPE_SWORD, UITYPE_CLAYMORE, N_("Claymore"), N_("Sword"), 5, 36, 1, 12, 0, 0, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 450 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLAYMORE, ItemType::Sword, UITYPE_CLAYMORE, N_("Claymore"), N_("Sword"), 5, 36, 1, 12, 0, 0, 35, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 450 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BLADE, ITYPE_SWORD, UITYPE_NONE, N_("Blade"), N_("Blade"), 4, 30, 3, 8, 0, 0, 25, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 280 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BLADE, ItemType::Sword, UITYPE_NONE, N_("Blade"), N_("Blade"), 4, 30, 3, 8, 0, 0, 25, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 280 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SABRE, ITYPE_SWORD, UITYPE_SABRE, N_("Sabre"), N_("Sabre"), 1, 45, 1, 8, 0, 0, 17, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 170 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SABRE, ItemType::Sword, UITYPE_SABRE, N_("Sabre"), N_("Sabre"), 1, 45, 1, 8, 0, 0, 17, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 170 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_LONG_SWORD, ITYPE_SWORD, UITYPE_LONGSWR, N_("Long Sword"), N_("Sword"), 6, 40, 2, 10, 0, 0, 30, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 350 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_LONG_SWORD, ItemType::Sword, UITYPE_LONGSWR, N_("Long Sword"), N_("Sword"), 6, 40, 2, 10, 0, 0, 30, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 350 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BROAD_SWORD, ITYPE_SWORD, UITYPE_BROADSWR, N_("Broad Sword"), N_("Sword"), 8, 50, 4, 12, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 750 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BROAD_SWORD, ItemType::Sword, UITYPE_BROADSWR, N_("Broad Sword"), N_("Sword"), 8, 50, 4, 12, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 750 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BASTARD_SWORD, ITYPE_SWORD, UITYPE_BASTARDSWR, N_("Bastard Sword"), N_("Sword"), 10, 60, 6, 15, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1000 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_BASTARD_SWORD, ItemType::Sword, UITYPE_BASTARDSWR, N_("Bastard Sword"), N_("Sword"), 10, 60, 6, 15, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1000 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_TWO_HANDED_SWORD, ITYPE_SWORD, UITYPE_TWOHANDSWR, N_("Two-Handed Sword"), N_("Sword"), 14, 75, 8, 16, 0, 0, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1800 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_TWO_HANDED_SWORD, ItemType::Sword, UITYPE_TWOHANDSWR, N_("Two-Handed Sword"), N_("Sword"), 14, 75, 8, 16, 0, 0, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1800 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_GREAT_SWORD, ITYPE_SWORD, UITYPE_GREATSWR, N_("Great Sword"), N_("Sword"), 17, 100, 10, 20, 0, 0, 75, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 3000 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_GREAT_SWORD, ItemType::Sword, UITYPE_GREATSWR, N_("Great Sword"), N_("Sword"), 17, 100, 10, 20, 0, 0, 75, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 3000 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SMALL_AXE, ITYPE_AXE, UITYPE_SMALLAXE, N_("Small Axe"), N_("Axe"), 2, 24, 2, 10, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 150 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SMALL_AXE, ItemType::Axe, UITYPE_SMALLAXE, N_("Small Axe"), N_("Axe"), 2, 24, 2, 10, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 150 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_AXE, ITYPE_AXE, UITYPE_NONE, N_("Axe"), N_("Axe"), 4, 32, 4, 12, 0, 0, 22, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 450 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_AXE, ItemType::Axe, UITYPE_NONE, N_("Axe"), N_("Axe"), 4, 32, 4, 12, 0, 0, 22, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 450 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LARGE_AXE, ITYPE_AXE, UITYPE_LARGEAXE, N_("Large Axe"), N_("Axe"), 6, 40, 6, 16, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 750 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LARGE_AXE, ItemType::Axe, UITYPE_LARGEAXE, N_("Large Axe"), N_("Axe"), 6, 40, 6, 16, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 750 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_BROAD_AXE, ITYPE_AXE, UITYPE_BROADAXE, N_("Broad Axe"), N_("Axe"), 8, 50, 8, 20, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1000 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_BROAD_AXE, ItemType::Axe, UITYPE_BROADAXE, N_("Broad Axe"), N_("Axe"), 8, 50, 8, 20, 0, 0, 50, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1000 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_BATTLE_AXE, ITYPE_AXE, UITYPE_BATTLEAXE, N_("Battle Axe"), N_("Axe"), 10, 60, 10, 25, 0, 0, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1500 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_BATTLE_AXE, ItemType::Axe, UITYPE_BATTLEAXE, N_("Battle Axe"), N_("Axe"), 10, 60, 10, 25, 0, 0, 65, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1500 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_GREAT_AXE, ITYPE_AXE, UITYPE_GREATAXE, N_("Great Axe"), N_("Axe"), 12, 75, 12, 30, 0, 0, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2500 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_GREAT_AXE, ItemType::Axe, UITYPE_GREATAXE, N_("Great Axe"), N_("Axe"), 12, 75, 12, 30, 0, 0, 80, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2500 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MACE, ITYPE_MACE, UITYPE_MACE, N_("Mace"), N_("Mace"), 2, 32, 1, 8, 0, 0, 16, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MACE, ItemType::Mace, UITYPE_MACE, N_("Mace"), N_("Mace"), 2, 32, 1, 8, 0, 0, 16, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 200 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MORNING_STAR, ITYPE_MACE, UITYPE_MORNSTAR, N_("Morning Star"), N_("Mace"), 3, 40, 1, 10, 0, 0, 26, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 300 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_MORNING_STAR, ItemType::Mace, UITYPE_MORNSTAR, N_("Morning Star"), N_("Mace"), 3, 40, 1, 10, 0, 0, 26, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 300 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_WAR_HAMMER, ITYPE_MACE, UITYPE_WARHAMMER, N_("War Hammer"), N_("Hammer"), 5, 50, 5, 9, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 600 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_WAR_HAMMER, ItemType::Mace, UITYPE_WARHAMMER, N_("War Hammer"), N_("Hammer"), 5, 50, 5, 9, 0, 0, 40, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 600 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SPIKED_CLUB, ITYPE_MACE, UITYPE_SPIKCLUB, N_("Spiked Club"), N_("Club"), 4, 20, 3, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 225 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_SPIKED_CLUB, ItemType::Mace, UITYPE_SPIKCLUB, N_("Spiked Club"), N_("Club"), 4, 20, 3, 6, 0, 0, 18, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 225 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLUB, ITYPE_MACE, UITYPE_SPIKCLUB, N_("Club"), N_("Club"), 1, 20, 1, 6, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_CLUB, ItemType::Mace, UITYPE_SPIKCLUB, N_("Club"), N_("Club"), 1, 20, 1, 6, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 20 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_FLAIL, ITYPE_MACE, UITYPE_FLAIL, N_("Flail"), N_("Flail"), 7, 36, 2, 12, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 500 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_ONEHAND, ICURS_FLAIL, ItemType::Mace, UITYPE_FLAIL, N_("Flail"), N_("Flail"), 7, 36, 2, 12, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 500 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_MAUL, ITYPE_MACE, UITYPE_MAUL, N_("Maul"), N_("Maul"), 10, 50, 6, 20, 0, 0, 55, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 900 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_MAUL, ItemType::Mace, UITYPE_MAUL, N_("Maul"), N_("Maul"), 10, 50, 6, 20, 0, 0, 55, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 900 },
/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BOW, ITYPE_BOW, UITYPE_SHORTBOW, N_("Short Bow"), N_("Bow"), 1, 30, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 100 }, /* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BOW, ItemType::Bow, UITYPE_SHORTBOW, N_("Short Bow"), N_("Bow"), 1, 30, 1, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 100 },
/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_HUNTERS_BOW, ITYPE_BOW, UITYPE_HUNTBOW, N_("Hunter's Bow"), N_("Bow"), 3, 40, 2, 5, 0, 0, 20, 0, 35, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 350 }, /* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_HUNTERS_BOW, ItemType::Bow, UITYPE_HUNTBOW, N_("Hunter's Bow"), N_("Bow"), 3, 40, 2, 5, 0, 0, 20, 0, 35, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 350 },
/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_HUNTERS_BOW, ITYPE_BOW, UITYPE_LONGBOW, N_("Long Bow"), N_("Bow"), 5, 35, 1, 6, 0, 0, 25, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 250 }, /* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_HUNTERS_BOW, ItemType::Bow, UITYPE_LONGBOW, N_("Long Bow"), N_("Bow"), 5, 35, 1, 6, 0, 0, 25, 0, 30, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 250 },
/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_COMPOSITE_BOW, ITYPE_BOW, UITYPE_COMPBOW, N_("Composite Bow"), N_("Bow"), 7, 45, 3, 6, 0, 0, 25, 0, 40, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 600 }, /* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_COMPOSITE_BOW, ItemType::Bow, UITYPE_COMPBOW, N_("Composite Bow"), N_("Bow"), 7, 45, 3, 6, 0, 0, 25, 0, 40, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 600 },
/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BATTLE_BOW, ITYPE_BOW, UITYPE_NONE, N_("Short Battle Bow"), N_("Bow"), 9, 45, 3, 7, 0, 0, 30, 0, 50, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 750 }, /* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_BATTLE_BOW, ItemType::Bow, UITYPE_NONE, N_("Short Battle Bow"), N_("Bow"), 9, 45, 3, 7, 0, 0, 30, 0, 50, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 750 },
/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_WAR_BOW, ITYPE_BOW, UITYPE_BATTLEBOW, N_("Long Battle Bow"), N_("Bow"), 11, 50, 1, 10, 0, 0, 30, 0, 60, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1000 }, /* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_WAR_BOW, ItemType::Bow, UITYPE_BATTLEBOW, N_("Long Battle Bow"), N_("Bow"), 11, 50, 1, 10, 0, 0, 30, 0, 60, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1000 },
/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_WAR_BOW, ITYPE_BOW, UITYPE_NONE, N_("Short War Bow"), N_("Bow"), 15, 55, 4, 8, 0, 0, 35, 0, 70, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1500 }, /* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_WAR_BOW, ItemType::Bow, UITYPE_NONE, N_("Short War Bow"), N_("Bow"), 15, 55, 4, 8, 0, 0, 35, 0, 70, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 1500 },
/* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_WAR_BOW, ITYPE_BOW, UITYPE_WARBOW, N_("Long War Bow"), N_("Bow"), 19, 60, 1, 14, 0, 0, 45, 0, 80, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2000 }, /* */ { IDROP_DOUBLE, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_WAR_BOW, ItemType::Bow, UITYPE_WARBOW, N_("Long War Bow"), N_("Bow"), 19, 60, 1, 14, 0, 0, 45, 0, 80, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 2000 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_SHORTSTAFF, N_("Short Staff"), N_("Staff"), 1, 25, 2, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 30 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ItemType::Staff, UITYPE_SHORTSTAFF, N_("Short Staff"), N_("Staff"), 1, 25, 2, 4, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 30 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_STAFF, ITYPE_STAFF, UITYPE_LONGSTAFF, N_("Long Staff"), N_("Staff"), 4, 35, 4, 8, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 100 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_LONG_STAFF, ItemType::Staff, UITYPE_LONGSTAFF, N_("Long Staff"), N_("Staff"), 4, 35, 4, 8, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 100 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_COMPOSITE_STAFF, ITYPE_STAFF, UITYPE_COMPSTAFF, N_("Composite Staff"), N_("Staff"), 6, 45, 5, 10, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 500 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_COMPOSITE_STAFF, ItemType::Staff, UITYPE_COMPSTAFF, N_("Composite Staff"), N_("Staff"), 6, 45, 5, 10, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 500 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_QUARSTAFF, N_("Quarter Staff"), N_("Staff"), 9, 55, 6, 12, 0, 0, 20, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 1000 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ItemType::Staff, UITYPE_QUARSTAFF, N_("Quarter Staff"), N_("Staff"), 9, 55, 6, 12, 0, 0, 20, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 1000 },
/* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_WAR_STAFF, ITYPE_STAFF, UITYPE_WARSTAFF, N_("War Staff"), N_("Staff"), 12, 75, 8, 16, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 1500 }, /* */ { IDROP_REGULAR, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_WAR_STAFF, ItemType::Staff, UITYPE_WARSTAFF, N_("War Staff"), N_("Staff"), 12, 75, 8, 16, 0, 0, 30, 0, 0, ISPL_NONE, IMISC_STAFF, SPL_NULL, false, 1500 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ITYPE_RING, UITYPE_RING, N_("Ring"), N_("Ring"), 5, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, false, 1000 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ItemType::Ring, UITYPE_RING, N_("Ring"), N_("Ring"), 5, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, false, 1000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ITYPE_RING, UITYPE_RING, N_("Ring"), N_("Ring"), 10, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, false, 1000 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ItemType::Ring, UITYPE_RING, N_("Ring"), N_("Ring"), 10, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, false, 1000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ITYPE_RING, UITYPE_RING, N_("Ring"), N_("Ring"), 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, false, 1000 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_RING, ICURS_RING, ItemType::Ring, UITYPE_RING, N_("Ring"), N_("Ring"), 15, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RING, SPL_NULL, false, 1000 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, ITYPE_AMULET, UITYPE_AMULET, N_("Amulet"), N_("Amulet"), 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, false, 1200 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, ItemType::Amulet, UITYPE_AMULET, N_("Amulet"), N_("Amulet"), 8, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, false, 1200 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, ITYPE_AMULET, UITYPE_AMULET, N_("Amulet"), N_("Amulet"), 16, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, false, 1200 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_AMULET, ICURS_AMULET, ItemType::Amulet, UITYPE_AMULET, N_("Amulet"), N_("Amulet"), 16, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_AMULET, SPL_NULL, false, 1200 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_FIRE, ITYPE_MISC, UITYPE_NONE, N_("Rune of Fire"), N_("Rune"), 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RUNEF, SPL_NULL, true, 100 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_FIRE, ItemType::Misc, UITYPE_NONE, N_("Rune of Fire"), N_("Rune"), 1, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_RUNEF, SPL_NULL, true, 100 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_LIGHTNING, ITYPE_MISC, UITYPE_NONE, N_("Rune of Lightning"), N_("Rune"), 3, 0, 0, 0, 0, 0, 0, 13, 0, ISPL_NONE, IMISC_RUNEL, SPL_NULL, true, 200 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_LIGHTNING, ItemType::Misc, UITYPE_NONE, N_("Rune of Lightning"), N_("Rune"), 3, 0, 0, 0, 0, 0, 0, 13, 0, ISPL_NONE, IMISC_RUNEL, SPL_NULL, true, 200 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_FIRE, ITYPE_MISC, UITYPE_NONE, N_("Greater Rune of Fire"), N_("Rune"), 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEF, SPL_NULL, true, 400 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_FIRE, ItemType::Misc, UITYPE_NONE, N_("Greater Rune of Fire"), N_("Rune"), 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEF, SPL_NULL, true, 400 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_LIGHTNING, ITYPE_MISC, UITYPE_NONE, N_("Greater Rune of Lightning"), N_("Rune"), 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEL, SPL_NULL, true, 500 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_GREATER_RUNE_OF_LIGHTNING, ItemType::Misc, UITYPE_NONE, N_("Greater Rune of Lightning"), N_("Rune"), 7, 0, 0, 0, 0, 0, 0, 42, 0, ISPL_NONE, IMISC_GR_RUNEL, SPL_NULL, true, 500 },
/* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_STONE, ITYPE_MISC, UITYPE_NONE, N_("Rune of Stone"), N_("Rune"), 7, 0, 0, 0, 0, 0, 0, 25, 0, ISPL_NONE, IMISC_RUNES, SPL_NULL, true, 300 }, /* */ { IDROP_REGULAR, ICLASS_MISC, ILOC_UNEQUIPABLE, ICURS_RUNE_OF_STONE, ItemType::Misc, UITYPE_NONE, N_("Rune of Stone"), N_("Rune"), 7, 0, 0, 0, 0, 0, 0, 25, 0, ISPL_NONE, IMISC_RUNES, SPL_NULL, true, 300 },
/*IDI_SORCERER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ITYPE_STAFF, UITYPE_NONE, N_("Short Staff of Charged Bolt"), nullptr, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_CBOLT, false, 520 }, /*IDI_SORCERER */ { IDROP_NEVER, ICLASS_WEAPON, ILOC_TWOHAND, ICURS_SHORT_STAFF, ItemType::Staff, UITYPE_NONE, N_("Short Staff of Charged Bolt"), nullptr, 1, 25, 2, 4, 0, 0, 0, 20, 0, ISPL_NONE, IMISC_STAFF, SPL_CBOLT, false, 520 },
/* */ { IDROP_NEVER, ICLASS_NONE, ILOC_INVALID, ICURS_POTION_OF_FULL_MANA, ITYPE_MISC, UITYPE_NONE, nullptr, nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 }, /* */ { IDROP_NEVER, ICLASS_NONE, ILOC_INVALID, ICURS_POTION_OF_FULL_MANA, ItemType::Misc, UITYPE_NONE, nullptr, nullptr, 0, 0, 0, 0, 0, 0, 0, 0, 0, ISPL_NONE, IMISC_NONE, SPL_NULL, false, 0 },
// clang-format on // clang-format on
}; };

32
Source/itemdat.h

@ -222,22 +222,22 @@ enum item_cursor_graphic : uint8_t {
// clang-format on // clang-format on
}; };
enum ItemType : int8_t { enum class ItemType : int8_t {
ITYPE_MISC, Misc,
ITYPE_SWORD, Sword,
ITYPE_AXE, Axe,
ITYPE_BOW, Bow,
ITYPE_MACE, Mace,
ITYPE_SHIELD, Shield,
ITYPE_LARMOR, LightArmor,
ITYPE_HELM, Helm,
ITYPE_MARMOR, MediumArmor,
ITYPE_HARMOR, HeavyArmor,
ITYPE_STAFF, Staff,
ITYPE_GOLD, Gold,
ITYPE_RING, Ring,
ITYPE_AMULET, Amulet,
ITYPE_NONE = -1, None = -1,
}; };
enum unique_base_item : int8_t { enum unique_base_item : int8_t {

216
Source/items.cpp

@ -574,7 +574,7 @@ void CalcPlrBookVals(Player &player)
} }
for (int i = 0; i < player._pNumInv; i++) { for (int i = 0; i < player._pNumInv; i++) {
if (player.InvList[i]._itype == ITYPE_MISC && player.InvList[i]._iMiscId == IMISC_BOOK) { if (player.InvList[i]._itype == ItemType::Misc && player.InvList[i]._iMiscId == IMISC_BOOK) {
player.InvList[i]._iMinMag = spelldata[player.InvList[i]._iSpell].sMinInt; player.InvList[i]._iMinMag = spelldata[player.InvList[i]._iSpell].sMinInt;
int8_t spellLevel = player._pSplLvl[player.InvList[i]._iSpell]; int8_t spellLevel = player._pSplLvl[player.InvList[i]._iSpell];
@ -1372,36 +1372,36 @@ void GetItemBonus(Item &item, int minlvl, int maxlvl, bool onlygood, bool allows
minlvl = 25; minlvl = 25;
switch (item._itype) { switch (item._itype) {
case ITYPE_SWORD: case ItemType::Sword:
case ITYPE_AXE: case ItemType::Axe:
case ITYPE_MACE: case ItemType::Mace:
GetItemPower(item, minlvl, maxlvl, PLT_WEAP, onlygood); GetItemPower(item, minlvl, maxlvl, PLT_WEAP, onlygood);
break; break;
case ITYPE_BOW: case ItemType::Bow:
GetItemPower(item, minlvl, maxlvl, PLT_BOW, onlygood); GetItemPower(item, minlvl, maxlvl, PLT_BOW, onlygood);
break; break;
case ITYPE_SHIELD: case ItemType::Shield:
GetItemPower(item, minlvl, maxlvl, PLT_SHLD, onlygood); GetItemPower(item, minlvl, maxlvl, PLT_SHLD, onlygood);
break; break;
case ITYPE_LARMOR: case ItemType::LightArmor:
case ITYPE_HELM: case ItemType::Helm:
case ITYPE_MARMOR: case ItemType::MediumArmor:
case ITYPE_HARMOR: case ItemType::HeavyArmor:
GetItemPower(item, minlvl, maxlvl, PLT_ARMO, onlygood); GetItemPower(item, minlvl, maxlvl, PLT_ARMO, onlygood);
break; break;
case ITYPE_STAFF: case ItemType::Staff:
if (allowspells) if (allowspells)
GetStaffSpell(item, maxlvl, onlygood); GetStaffSpell(item, maxlvl, onlygood);
else else
GetItemPower(item, minlvl, maxlvl, PLT_STAFF, onlygood); GetItemPower(item, minlvl, maxlvl, PLT_STAFF, onlygood);
break; break;
case ITYPE_RING: case ItemType::Ring:
case ITYPE_AMULET: case ItemType::Amulet:
GetItemPower(item, minlvl, maxlvl, PLT_MISC, onlygood); GetItemPower(item, minlvl, maxlvl, PLT_MISC, onlygood);
break; break;
case ITYPE_NONE: case ItemType::None:
case ITYPE_MISC: case ItemType::Misc:
case ITYPE_GOLD: case ItemType::Gold:
break; break;
} }
} }
@ -1429,9 +1429,9 @@ int RndUItem(Monster *monster)
if (2 * curlv < AllItemsList[i].iMinMLvl) if (2 * curlv < AllItemsList[i].iMinMLvl)
okflag = false; okflag = false;
} }
if (AllItemsList[i].itype == ITYPE_MISC) if (AllItemsList[i].itype == ItemType::Misc)
okflag = false; okflag = false;
if (AllItemsList[i].itype == ITYPE_GOLD) if (AllItemsList[i].itype == ItemType::Gold)
okflag = false; okflag = false;
if (AllItemsList[i].iMiscId == IMISC_BOOK) if (AllItemsList[i].iMiscId == IMISC_BOOK)
okflag = true; okflag = true;
@ -1753,7 +1753,7 @@ void RepairItem(Item &item, int lvl)
} }
if (item._iMaxDur <= 0) { if (item._iMaxDur <= 0) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
return; return;
} }
@ -1762,7 +1762,7 @@ void RepairItem(Item &item, int lvl)
rep += lvl + GenerateRnd(lvl); rep += lvl + GenerateRnd(lvl);
item._iMaxDur -= std::max(item._iMaxDur / (lvl + 9), 1); item._iMaxDur -= std::max(item._iMaxDur / (lvl + 9), 1);
if (item._iMaxDur == 0) { if (item._iMaxDur == 0) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
return; return;
} }
} while (rep + item._iDurability < item._iMaxDur); } while (rep + item._iDurability < item._iMaxDur);
@ -1812,7 +1812,7 @@ bool ApplyOilToItem(Item &item, Player &player)
if (item._iClass == ICLASS_ARMOR) { if (item._iClass == ICLASS_ARMOR) {
return false; return false;
} }
if (item._itype == ITYPE_BOW) { if (item._itype == ItemType::Bow) {
return false; return false;
} }
break; break;
@ -2121,15 +2121,15 @@ void PrintItemInfo(Item &item)
bool SmithItemOk(int i) bool SmithItemOk(int i)
{ {
if (AllItemsList[i].itype == ITYPE_MISC) if (AllItemsList[i].itype == ItemType::Misc)
return false; return false;
if (AllItemsList[i].itype == ITYPE_GOLD) if (AllItemsList[i].itype == ItemType::Gold)
return false; return false;
if (AllItemsList[i].itype == ITYPE_STAFF && (!gbIsHellfire || AllItemsList[i].iSpell != SPL_NULL)) if (AllItemsList[i].itype == ItemType::Staff && (!gbIsHellfire || AllItemsList[i].iSpell != SPL_NULL))
return false; return false;
if (AllItemsList[i].itype == ITYPE_RING) if (AllItemsList[i].itype == ItemType::Ring)
return false; return false;
if (AllItemsList[i].itype == ITYPE_AMULET) if (AllItemsList[i].itype == ItemType::Amulet)
return false; return false;
return true; return true;
@ -2188,19 +2188,19 @@ void SortVendor(Item *itemList)
bool PremiumItemOk(int i) bool PremiumItemOk(int i)
{ {
if (AllItemsList[i].itype == ITYPE_MISC) if (AllItemsList[i].itype == ItemType::Misc)
return false; return false;
if (AllItemsList[i].itype == ITYPE_GOLD) if (AllItemsList[i].itype == ItemType::Gold)
return false; return false;
if (!gbIsHellfire && AllItemsList[i].itype == ITYPE_STAFF) if (!gbIsHellfire && AllItemsList[i].itype == ItemType::Staff)
return false; return false;
if (gbIsMultiplayer) { if (gbIsMultiplayer) {
if (AllItemsList[i].iMiscId == IMISC_OILOF) if (AllItemsList[i].iMiscId == IMISC_OILOF)
return false; return false;
if (AllItemsList[i].itype == ITYPE_RING) if (AllItemsList[i].itype == ItemType::Ring)
return false; return false;
if (AllItemsList[i].itype == ITYPE_AMULET) if (AllItemsList[i].itype == ItemType::Amulet)
return false; return false;
} }
@ -2249,26 +2249,26 @@ void SpawnOnePremium(int i, int plvl, int playerId)
} }
switch (Items[0]._itype) { switch (Items[0]._itype) {
case ITYPE_LARMOR: case ItemType::LightArmor:
case ITYPE_MARMOR: case ItemType::MediumArmor:
case ITYPE_HARMOR: { case ItemType::HeavyArmor: {
const auto *const mostValuablePlayerArmor = player.GetMostValuableItem( const auto *const mostValuablePlayerArmor = player.GetMostValuableItem(
[](const Item &item) { [](const Item &item) {
return IsAnyOf(item._itype, ITYPE_LARMOR, ITYPE_MARMOR, ITYPE_HARMOR); return IsAnyOf(item._itype, ItemType::LightArmor, ItemType::MediumArmor, ItemType::HeavyArmor);
}); });
itemValue = mostValuablePlayerArmor == nullptr ? 0 : mostValuablePlayerArmor->_iIvalue; itemValue = mostValuablePlayerArmor == nullptr ? 0 : mostValuablePlayerArmor->_iIvalue;
break; break;
} }
case ITYPE_SHIELD: case ItemType::Shield:
case ITYPE_AXE: case ItemType::Axe:
case ITYPE_BOW: case ItemType::Bow:
case ITYPE_MACE: case ItemType::Mace:
case ITYPE_SWORD: case ItemType::Sword:
case ITYPE_HELM: case ItemType::Helm:
case ITYPE_STAFF: case ItemType::Staff:
case ITYPE_RING: case ItemType::Ring:
case ITYPE_AMULET: { case ItemType::Amulet: {
const auto *const mostValuablePlayerItem = player.GetMostValuableItem( const auto *const mostValuablePlayerItem = player.GetMostValuableItem(
[](const Item &item) { return item._itype == Items[0]._itype; }); [](const Item &item) { return item._itype == Items[0]._itype; });
@ -2299,7 +2299,7 @@ void SpawnOnePremium(int i, int plvl, int playerId)
bool WitchItemOk(int i) bool WitchItemOk(int i)
{ {
if (IsNoneOf(AllItemsList[i].itype, ITYPE_MISC, ITYPE_STAFF)) if (IsNoneOf(AllItemsList[i].itype, ItemType::Misc, ItemType::Staff))
return false; return false;
if (AllItemsList[i].iMiscId == IMISC_MANA) if (AllItemsList[i].iMiscId == IMISC_MANA)
return false; return false;
@ -2333,7 +2333,7 @@ int RndBoyItem(int lvl)
bool HealerItemOk(int i) bool HealerItemOk(int i)
{ {
if (AllItemsList[i].itype != ITYPE_MISC) if (AllItemsList[i].itype != ItemType::Misc)
return false; return false;
if (AllItemsList[i].iMiscId == IMISC_SCROLL) if (AllItemsList[i].iMiscId == IMISC_SCROLL)
@ -2554,7 +2554,7 @@ BYTE GetOutlineColor(const Item &item, bool checkReq)
{ {
if (checkReq && !item._iStatFlag) if (checkReq && !item._iStatFlag)
return ICOL_RED; return ICOL_RED;
if (item._itype == ITYPE_GOLD) if (item._itype == ItemType::Gold)
return ICOL_YELLOW; return ICOL_YELLOW;
if (item._iMagical == ITEM_QUALITY_MAGIC) if (item._iMagical == ITEM_QUALITY_MAGIC)
return ICOL_BLUE; return ICOL_BLUE;
@ -2591,7 +2591,7 @@ void InitItems()
for (int i = 0; i < MAXITEMS; i++) { for (int i = 0; i < MAXITEMS; i++) {
auto &item = Items[i]; auto &item = Items[i];
item._itype = ITYPE_NONE; item._itype = ItemType::None;
item.position = { 0, 0 }; item.position = { 0, 0 };
item._iAnimFlag = false; item._iAnimFlag = false;
item._iSelFlag = 0; item._iSelFlag = 0;
@ -2717,11 +2717,11 @@ void CalcPlrItemVals(Player &player, bool loadgfx)
mind = 1; mind = 1;
maxd = 1; maxd = 1;
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD && player.InvBody[INVLOC_HAND_LEFT]._iStatFlag) { if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Shield && player.InvBody[INVLOC_HAND_LEFT]._iStatFlag) {
maxd = 3; maxd = 3;
} }
if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD && player.InvBody[INVLOC_HAND_RIGHT]._iStatFlag) { if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Shield && player.InvBody[INVLOC_HAND_RIGHT]._iStatFlag) {
maxd = 3; maxd = 3;
} }
@ -2769,8 +2769,8 @@ void CalcPlrItemVals(Player &player, bool loadgfx)
if (player._pClass == HeroClass::Rogue) { if (player._pClass == HeroClass::Rogue) {
player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 200; player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 200;
} else if (player._pClass == HeroClass::Monk) { } else if (player._pClass == HeroClass::Monk) {
if (player.InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_STAFF) { if (player.InvBody[INVLOC_HAND_LEFT]._itype != ItemType::Staff) {
if (player.InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_STAFF && (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() || !player.InvBody[INVLOC_HAND_RIGHT].isEmpty())) { if (player.InvBody[INVLOC_HAND_RIGHT]._itype != ItemType::Staff && (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() || !player.InvBody[INVLOC_HAND_RIGHT].isEmpty())) {
player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 300; player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 300;
} else { } else {
player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 150; player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 150;
@ -2779,31 +2779,31 @@ void CalcPlrItemVals(Player &player, bool loadgfx)
player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 150; player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 150;
} }
} else if (player._pClass == HeroClass::Bard) { } else if (player._pClass == HeroClass::Bard) {
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SWORD || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SWORD) if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Sword || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Sword)
player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 150; player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 150;
else if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_BOW || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_BOW) { else if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Bow || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Bow) {
player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 250; player._pDamageMod = player._pLevel * (player._pStrength + player._pDexterity) / 250;
} else { } else {
player._pDamageMod = player._pLevel * player._pStrength / 100; player._pDamageMod = player._pLevel * player._pStrength / 100;
} }
} else if (player._pClass == HeroClass::Barbarian) { } else if (player._pClass == HeroClass::Barbarian) {
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_AXE || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_AXE) { if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Axe || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Axe) {
player._pDamageMod = player._pLevel * player._pStrength / 75; player._pDamageMod = player._pLevel * player._pStrength / 75;
} else if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_MACE || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_MACE) { } else if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Mace || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Mace) {
player._pDamageMod = player._pLevel * player._pStrength / 75; player._pDamageMod = player._pLevel * player._pStrength / 75;
} else if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_BOW || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_BOW) { } else if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Bow || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Bow) {
player._pDamageMod = player._pLevel * player._pStrength / 300; player._pDamageMod = player._pLevel * player._pStrength / 300;
} else { } else {
player._pDamageMod = player._pLevel * player._pStrength / 100; player._pDamageMod = player._pLevel * player._pStrength / 100;
} }
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) { if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Shield || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Shield) {
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD) if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Shield)
player._pIAC -= player.InvBody[INVLOC_HAND_LEFT]._iAC / 2; player._pIAC -= player.InvBody[INVLOC_HAND_LEFT]._iAC / 2;
else if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) else if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Shield)
player._pIAC -= player.InvBody[INVLOC_HAND_RIGHT]._iAC / 2; player._pIAC -= player.InvBody[INVLOC_HAND_RIGHT]._iAC / 2;
} else if (IsNoneOf(player.InvBody[INVLOC_HAND_LEFT]._itype, ITYPE_STAFF, ITYPE_BOW) && IsNoneOf(player.InvBody[INVLOC_HAND_RIGHT]._itype, ITYPE_STAFF, ITYPE_BOW)) { } else if (IsNoneOf(player.InvBody[INVLOC_HAND_LEFT]._itype, ItemType::Staff, ItemType::Bow) && IsNoneOf(player.InvBody[INVLOC_HAND_RIGHT]._itype, ItemType::Staff, ItemType::Bow)) {
player._pDamageMod += player._pLevel * player._pVitality / 100; player._pDamageMod += player._pLevel * player._pVitality / 100;
} }
player._pIAC += player._pLevel / 4; player._pIAC += player._pLevel / 4;
@ -2880,11 +2880,11 @@ void CalcPlrItemVals(Player &player, bool loadgfx)
player._pBlockFlag = false; player._pBlockFlag = false;
if (player._pClass == HeroClass::Monk) { if (player._pClass == HeroClass::Monk) {
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_STAFF && player.InvBody[INVLOC_HAND_LEFT]._iStatFlag) { if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Staff && player.InvBody[INVLOC_HAND_LEFT]._iStatFlag) {
player._pBlockFlag = true; player._pBlockFlag = true;
player._pIFlags |= ISPL_FASTBLOCK; player._pIFlags |= ISPL_FASTBLOCK;
} }
if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_STAFF && player.InvBody[INVLOC_HAND_RIGHT]._iStatFlag) { if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Staff && player.InvBody[INVLOC_HAND_RIGHT]._iStatFlag) {
player._pBlockFlag = true; player._pBlockFlag = true;
player._pIFlags |= ISPL_FASTBLOCK; player._pIFlags |= ISPL_FASTBLOCK;
} }
@ -2896,7 +2896,7 @@ void CalcPlrItemVals(Player &player, bool loadgfx)
player._pBlockFlag = true; player._pBlockFlag = true;
} }
ItemType weaponItemType = ItemType::ITYPE_NONE; ItemType weaponItemType = ItemType::None;
bool holdsShield = false; bool holdsShield = false;
if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty()
&& player.InvBody[INVLOC_HAND_LEFT]._iClass == ICLASS_WEAPON && player.InvBody[INVLOC_HAND_LEFT]._iClass == ICLASS_WEAPON
@ -2910,30 +2910,30 @@ void CalcPlrItemVals(Player &player, bool loadgfx)
weaponItemType = player.InvBody[INVLOC_HAND_RIGHT]._itype; weaponItemType = player.InvBody[INVLOC_HAND_RIGHT]._itype;
} }
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD && player.InvBody[INVLOC_HAND_LEFT]._iStatFlag) { if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Shield && player.InvBody[INVLOC_HAND_LEFT]._iStatFlag) {
player._pBlockFlag = true; player._pBlockFlag = true;
holdsShield = true; holdsShield = true;
} }
if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD && player.InvBody[INVLOC_HAND_RIGHT]._iStatFlag) { if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Shield && player.InvBody[INVLOC_HAND_RIGHT]._iStatFlag) {
player._pBlockFlag = true; player._pBlockFlag = true;
holdsShield = true; holdsShield = true;
} }
PlayerWeaponGraphic animWeaponId = holdsShield ? PlayerWeaponGraphic::UnarmedShield : PlayerWeaponGraphic::Unarmed; PlayerWeaponGraphic animWeaponId = holdsShield ? PlayerWeaponGraphic::UnarmedShield : PlayerWeaponGraphic::Unarmed;
switch (weaponItemType) { switch (weaponItemType) {
case ITYPE_SWORD: case ItemType::Sword:
animWeaponId = holdsShield ? PlayerWeaponGraphic::SwordShield : PlayerWeaponGraphic::Sword; animWeaponId = holdsShield ? PlayerWeaponGraphic::SwordShield : PlayerWeaponGraphic::Sword;
break; break;
case ITYPE_AXE: case ItemType::Axe:
animWeaponId = PlayerWeaponGraphic::Axe; animWeaponId = PlayerWeaponGraphic::Axe;
break; break;
case ITYPE_BOW: case ItemType::Bow:
animWeaponId = PlayerWeaponGraphic::Bow; animWeaponId = PlayerWeaponGraphic::Bow;
break; break;
case ITYPE_MACE: case ItemType::Mace:
animWeaponId = holdsShield ? PlayerWeaponGraphic::MaceShield : PlayerWeaponGraphic::Mace; animWeaponId = holdsShield ? PlayerWeaponGraphic::MaceShield : PlayerWeaponGraphic::Mace;
break; break;
case ITYPE_STAFF: case ItemType::Staff:
animWeaponId = PlayerWeaponGraphic::Staff; animWeaponId = PlayerWeaponGraphic::Staff;
break; break;
default: default:
@ -2941,11 +2941,11 @@ void CalcPlrItemVals(Player &player, bool loadgfx)
} }
PlayerArmorGraphic animArmorId = PlayerArmorGraphic::Light; PlayerArmorGraphic animArmorId = PlayerArmorGraphic::Light;
if (player.InvBody[INVLOC_CHEST]._itype == ITYPE_HARMOR && player.InvBody[INVLOC_CHEST]._iStatFlag) { if (player.InvBody[INVLOC_CHEST]._itype == ItemType::HeavyArmor && player.InvBody[INVLOC_CHEST]._iStatFlag) {
if (player._pClass == HeroClass::Monk && player.InvBody[INVLOC_CHEST]._iMagical == ITEM_QUALITY_UNIQUE) if (player._pClass == HeroClass::Monk && player.InvBody[INVLOC_CHEST]._iMagical == ITEM_QUALITY_UNIQUE)
player._pIAC += player._pLevel / 2; player._pIAC += player._pLevel / 2;
animArmorId = PlayerArmorGraphic::Heavy; animArmorId = PlayerArmorGraphic::Heavy;
} else if (player.InvBody[INVLOC_CHEST]._itype == ITYPE_MARMOR && player.InvBody[INVLOC_CHEST]._iStatFlag) { } else if (player.InvBody[INVLOC_CHEST]._itype == ItemType::MediumArmor && player.InvBody[INVLOC_CHEST]._iStatFlag) {
if (player._pClass == HeroClass::Monk) { if (player._pClass == HeroClass::Monk) {
if (player.InvBody[INVLOC_CHEST]._iMagical == ITEM_QUALITY_UNIQUE) if (player.InvBody[INVLOC_CHEST]._iMagical == ITEM_QUALITY_UNIQUE)
player._pIAC += player._pLevel * 2; player._pIAC += player._pLevel * 2;
@ -3092,7 +3092,7 @@ void CreatePlrItems(int playerId)
auto &player = Players[playerId]; auto &player = Players[playerId];
for (auto &item : player.InvBody) { for (auto &item : player.InvBody) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
// converting this to a for loop creates a `rep stosd` instruction, // converting this to a for loop creates a `rep stosd` instruction,
@ -3100,13 +3100,13 @@ void CreatePlrItems(int playerId)
memset(&player.InvGrid, 0, sizeof(player.InvGrid)); memset(&player.InvGrid, 0, sizeof(player.InvGrid));
for (auto &item : player.InvList) { for (auto &item : player.InvList) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
player._pNumInv = 0; player._pNumInv = 0;
for (auto &item : player.SpdList) { for (auto &item : player.SpdList) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
switch (player._pClass) { switch (player._pClass) {
@ -3297,7 +3297,7 @@ void GetItemAttrs(Item &item, int itemData, int lvl)
if (gbIsHellfire && item._iMiscId == IMISC_OILOF) if (gbIsHellfire && item._iMiscId == IMISC_OILOF)
GetOilType(item, lvl); GetOilType(item, lvl);
if (item._itype != ITYPE_GOLD) if (item._itype != ItemType::Gold)
return; return;
int rndv; int rndv;
@ -3461,7 +3461,7 @@ void CreateTypeItem(Point position, bool onlygood, ItemType itemType, int imisc,
int idx; int idx;
int curlv = ItemsGetCurrlevel(); int curlv = ItemsGetCurrlevel();
if (itemType != ITYPE_GOLD) if (itemType != ItemType::Gold)
idx = RndTypeItems(itemType, imisc, curlv); idx = RndTypeItems(itemType, imisc, curlv);
else else
idx = IDI_GOLD; idx = IDI_GOLD;
@ -3572,7 +3572,7 @@ void CornerstoneLoad(Point position)
return; return;
} }
CornerStone.item._itype = ITYPE_NONE; CornerStone.item._itype = ItemType::None;
CornerStone.activated = true; CornerStone.activated = true;
if (dItem[position.x][position.y] != 0) { if (dItem[position.x][position.y] != 0) {
int ii = dItem[position.x][position.y] - 1; int ii = dItem[position.x][position.y] - 1;
@ -3748,7 +3748,7 @@ void GetItemFrm(Item &item)
void GetItemStr(Item &item) void GetItemStr(Item &item)
{ {
if (item._itype != ITYPE_GOLD) { if (item._itype != ItemType::Gold) {
if (item._iIdentified) if (item._iIdentified)
strcpy(infostr, item._iIName); strcpy(infostr, item._iIName);
else else
@ -3805,7 +3805,7 @@ void DoRecharge(Player &player, int cii)
} else { } else {
pi = &player.InvBody[cii]; pi = &player.InvBody[cii];
} }
if (pi->_itype == ITYPE_STAFF && pi->_iSpell != SPL_NULL) { if (pi->_itype == ItemType::Staff && pi->_iSpell != SPL_NULL) {
int r = GetSpellBookLevel(pi->_iSpell); int r = GetSpellBookLevel(pi->_iSpell);
r = GenerateRnd(player._pLevel / r) + 1; r = GenerateRnd(player._pLevel / r) + 1;
RechargeItem(*pi, r); RechargeItem(*pi, r);
@ -4227,7 +4227,7 @@ void PrintItemDur(Item *x)
AddPanelString(tempstr); AddPanelString(tempstr);
} }
} }
if (IsAnyOf(x->_itype, ITYPE_RING, ITYPE_AMULET)) if (IsAnyOf(x->_itype, ItemType::Ring, ItemType::Amulet))
AddPanelString(_("Not Identified")); AddPanelString(_("Not Identified"));
PrintItemInfo(*x); PrintItemInfo(*x);
} }
@ -4464,7 +4464,7 @@ void SpawnSmith(int lvl)
smithitem[i]._iStatFlag = StoreStatOk(smithitem[i]); smithitem[i]._iStatFlag = StoreStatOk(smithitem[i]);
} }
for (int i = iCnt; i < SMITH_ITEMS; i++) for (int i = iCnt; i < SMITH_ITEMS; i++)
smithitem[i]._itype = ITYPE_NONE; smithitem[i]._itype = ItemType::None;
SortVendor(smithitem + PinnedItemCount); SortVendor(smithitem + PinnedItemCount);
Items[0] = holditem; Items[0] = holditem;
@ -4578,7 +4578,7 @@ void SpawnWitch(int lvl)
} }
for (int i = iCnt; i < WITCH_ITEMS; i++) for (int i = iCnt; i < WITCH_ITEMS; i++)
witchitem[i]._itype = ITYPE_NONE; witchitem[i]._itype = ItemType::None;
SortVendor(witchitem + PinnedItemCount); SortVendor(witchitem + PinnedItemCount);
} }
@ -4620,29 +4620,29 @@ void SpawnBoy(int lvl)
ivalue = 0; ivalue = 0;
int itemType = Items[0]._itype; ItemType itemType = Items[0]._itype;
switch (itemType) { switch (itemType) {
case ITYPE_LARMOR: case ItemType::LightArmor:
case ITYPE_MARMOR: case ItemType::MediumArmor:
case ITYPE_HARMOR: { case ItemType::HeavyArmor: {
const auto *const mostValuablePlayerArmor = myPlayer.GetMostValuableItem( const auto *const mostValuablePlayerArmor = myPlayer.GetMostValuableItem(
[](const Item &item) { [](const Item &item) {
return IsAnyOf(item._itype, ITYPE_LARMOR, ITYPE_MARMOR, ITYPE_HARMOR); return IsAnyOf(item._itype, ItemType::LightArmor, ItemType::MediumArmor, ItemType::HeavyArmor);
}); });
ivalue = mostValuablePlayerArmor == nullptr ? 0 : mostValuablePlayerArmor->_iIvalue; ivalue = mostValuablePlayerArmor == nullptr ? 0 : mostValuablePlayerArmor->_iIvalue;
break; break;
} }
case ITYPE_SHIELD: case ItemType::Shield:
case ITYPE_AXE: case ItemType::Axe:
case ITYPE_BOW: case ItemType::Bow:
case ITYPE_MACE: case ItemType::Mace:
case ITYPE_SWORD: case ItemType::Sword:
case ITYPE_HELM: case ItemType::Helm:
case ITYPE_STAFF: case ItemType::Staff:
case ITYPE_RING: case ItemType::Ring:
case ITYPE_AMULET: { case ItemType::Amulet: {
const auto *const mostValuablePlayerItem = myPlayer.GetMostValuableItem( const auto *const mostValuablePlayerItem = myPlayer.GetMostValuableItem(
[itemType](const Item &item) { return item._itype == itemType; }); [itemType](const Item &item) { return item._itype == itemType; });
@ -4657,27 +4657,27 @@ void SpawnBoy(int lvl)
if (count < 200) { if (count < 200) {
switch (pc) { switch (pc) {
case HeroClass::Warrior: case HeroClass::Warrior:
if (IsAnyOf(itemType, ITYPE_BOW, ITYPE_STAFF)) if (IsAnyOf(itemType, ItemType::Bow, ItemType::Staff))
ivalue = INT_MAX; ivalue = INT_MAX;
break; break;
case HeroClass::Rogue: case HeroClass::Rogue:
if (IsAnyOf(itemType, ITYPE_SWORD, ITYPE_STAFF, ITYPE_AXE, ITYPE_MACE, ITYPE_SHIELD)) if (IsAnyOf(itemType, ItemType::Sword, ItemType::Staff, ItemType::Axe, ItemType::Mace, ItemType::Shield))
ivalue = INT_MAX; ivalue = INT_MAX;
break; break;
case HeroClass::Sorcerer: case HeroClass::Sorcerer:
if (IsAnyOf(itemType, ITYPE_STAFF, ITYPE_AXE, ITYPE_BOW, ITYPE_MACE)) if (IsAnyOf(itemType, ItemType::Staff, ItemType::Axe, ItemType::Bow, ItemType::Mace))
ivalue = INT_MAX; ivalue = INT_MAX;
break; break;
case HeroClass::Monk: case HeroClass::Monk:
if (IsAnyOf(itemType, ITYPE_BOW, ITYPE_MARMOR, ITYPE_SHIELD, ITYPE_MACE)) if (IsAnyOf(itemType, ItemType::Bow, ItemType::MediumArmor, ItemType::Shield, ItemType::Mace))
ivalue = INT_MAX; ivalue = INT_MAX;
break; break;
case HeroClass::Bard: case HeroClass::Bard:
if (IsAnyOf(itemType, ITYPE_AXE, ITYPE_MACE, ITYPE_STAFF)) if (IsAnyOf(itemType, ItemType::Axe, ItemType::Mace, ItemType::Staff))
ivalue = INT_MAX; ivalue = INT_MAX;
break; break;
case HeroClass::Barbarian: case HeroClass::Barbarian:
if (IsAnyOf(itemType, ITYPE_BOW, ITYPE_STAFF)) if (IsAnyOf(itemType, ItemType::Bow, ItemType::Staff))
ivalue = INT_MAX; ivalue = INT_MAX;
break; break;
} }
@ -4739,7 +4739,7 @@ void SpawnHealer(int lvl)
healitem[i]._iStatFlag = StoreStatOk(healitem[i]); healitem[i]._iStatFlag = StoreStatOk(healitem[i]);
} }
for (int i = nsi; i < 20; i++) { for (int i = nsi; i < 20; i++) {
healitem[i]._itype = ITYPE_NONE; healitem[i]._itype = ItemType::None;
} }
SortVendor(healitem + PinnedItemCount); SortVendor(healitem + PinnedItemCount);
} }
@ -4773,7 +4773,7 @@ void CreateSpellBook(Point position, spell_id ispell, bool sendmsg, bool delta)
} }
} }
int idx = RndTypeItems(ITYPE_MISC, IMISC_BOOK, lvl); int idx = RndTypeItems(ItemType::Misc, IMISC_BOOK, lvl);
if (ActiveItemCount >= MAXITEMS) if (ActiveItemCount >= MAXITEMS)
return; return;
@ -4802,13 +4802,13 @@ void CreateMagicArmor(Point position, ItemType itemType, int icurs, bool sendmsg
void CreateAmulet(Point position, int lvl, bool sendmsg, bool delta) void CreateAmulet(Point position, int lvl, bool sendmsg, bool delta)
{ {
CreateMagicItem(position, lvl, ITYPE_AMULET, IMISC_AMULET, ICURS_AMULET, sendmsg, delta); CreateMagicItem(position, lvl, ItemType::Amulet, IMISC_AMULET, ICURS_AMULET, sendmsg, delta);
} }
void CreateMagicWeapon(Point position, ItemType itemType, int icurs, bool sendmsg, bool delta) void CreateMagicWeapon(Point position, ItemType itemType, int icurs, bool sendmsg, bool delta)
{ {
int imid = IMISC_NONE; int imid = IMISC_NONE;
if (itemType == ITYPE_STAFF) if (itemType == ItemType::Staff)
imid = IMISC_STAFF; imid = IMISC_STAFF;
int curlv = ItemsGetCurrlevel(); int curlv = ItemsGetCurrlevel();

26
Source/items.h

@ -248,7 +248,7 @@ struct Item {
*/ */
bool isEmpty() const bool isEmpty() const
{ {
return this->_itype == ITYPE_NONE; return this->_itype == ItemType::None;
} }
/** /**
@ -286,11 +286,11 @@ struct Item {
} }
switch (this->_itype) { switch (this->_itype) {
case ITYPE_AXE: case ItemType::Axe:
case ITYPE_BOW: case ItemType::Bow:
case ITYPE_MACE: case ItemType::Mace:
case ITYPE_STAFF: case ItemType::Staff:
case ITYPE_SWORD: case ItemType::Sword:
return true; return true;
default: default:
@ -309,9 +309,9 @@ struct Item {
} }
switch (this->_itype) { switch (this->_itype) {
case ITYPE_HARMOR: case ItemType::HeavyArmor:
case ITYPE_LARMOR: case ItemType::LightArmor:
case ITYPE_MARMOR: case ItemType::MediumArmor:
return true; return true;
default: default:
@ -325,7 +325,7 @@ struct Item {
*/ */
bool isHelm() const bool isHelm() const
{ {
return !this->isEmpty() && this->_itype == ITYPE_HELM; return !this->isEmpty() && this->_itype == ItemType::Helm;
} }
/** /**
@ -334,7 +334,7 @@ struct Item {
*/ */
bool isShield() const bool isShield() const
{ {
return !this->isEmpty() && this->_itype == ITYPE_SHIELD; return !this->isEmpty() && this->_itype == ItemType::Shield;
} }
/** /**
@ -348,8 +348,8 @@ struct Item {
} }
switch (this->_itype) { switch (this->_itype) {
case ITYPE_AMULET: case ItemType::Amulet:
case ITYPE_RING: case ItemType::Ring:
return true; return true;
default: default:

10
Source/loadsave.cpp

@ -880,16 +880,16 @@ void SaveItem(SaveHelper &file, const Item &item)
idx = RemapItemIdxToDiablo(idx); idx = RemapItemIdxToDiablo(idx);
if (gbIsSpawn) if (gbIsSpawn)
idx = RemapItemIdxToSpawn(idx); idx = RemapItemIdxToSpawn(idx);
int iType = item._itype; ItemType iType = item._itype;
if (idx == -1) { if (idx == -1) {
idx = _item_indexes::IDI_GOLD; idx = _item_indexes::IDI_GOLD;
iType = ITYPE_NONE; iType = ItemType::None;
} }
file.WriteLE<int32_t>(item._iSeed); file.WriteLE<int32_t>(item._iSeed);
file.WriteLE<int16_t>(item._iCreateInfo); file.WriteLE<int16_t>(item._iCreateInfo);
file.Skip(2); // Alignment file.Skip(2); // Alignment
file.WriteLE<int32_t>(iType); file.WriteLE<int32_t>(static_cast<int32_t>(iType));
file.WriteLE<int32_t>(item.position.x); file.WriteLE<int32_t>(item.position.x);
file.WriteLE<int32_t>(item.position.y); file.WriteLE<int32_t>(item.position.y);
file.WriteLE<uint32_t>(item._iAnimFlag ? 1 : 0); file.WriteLE<uint32_t>(item._iAnimFlag ? 1 : 0);
@ -1445,7 +1445,7 @@ void RemoveInvalidItem(Item &item)
bool isInvalid = !IsItemAvailable(item.IDidx) || !IsUniqueAvailable(item._iUid); bool isInvalid = !IsItemAvailable(item.IDidx) || !IsUniqueAvailable(item._iUid);
if (!gbIsHellfire) { if (!gbIsHellfire) {
isInvalid = isInvalid || (item._itype == ITYPE_STAFF && GetSpellStaffLevel(item._iSpell) == -1); isInvalid = isInvalid || (item._itype == ItemType::Staff && GetSpellStaffLevel(item._iSpell) == -1);
isInvalid = isInvalid || (item._iMiscId == IMISC_BOOK && GetSpellBookLevel(item._iSpell) == -1); isInvalid = isInvalid || (item._iMiscId == IMISC_BOOK && GetSpellBookLevel(item._iSpell) == -1);
isInvalid = isInvalid || item._iDamAcFlags != 0; isInvalid = isInvalid || item._iDamAcFlags != 0;
isInvalid = isInvalid || item._iPrePower > IDI_LASTDIABLO; isInvalid = isInvalid || item._iPrePower > IDI_LASTDIABLO;
@ -1453,7 +1453,7 @@ void RemoveInvalidItem(Item &item)
} }
if (isInvalid) { if (isInvalid) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
} }

2
Source/missiles.cpp

@ -1492,7 +1492,7 @@ void AddStealPotions(Missile &missile, Point /*dst*/, Direction /*midir*/)
bool hasPlayedSFX = false; bool hasPlayedSFX = false;
for (int si = 0; si < MAXBELTITEMS; si++) { for (int si = 0; si < MAXBELTITEMS; si++) {
int ii = -1; int ii = -1;
if (player.SpdList[si]._itype == ITYPE_MISC) { if (player.SpdList[si]._itype == ItemType::Misc) {
if (GenerateRnd(2) == 0) if (GenerateRnd(2) == 0)
continue; continue;
switch (player.SpdList[si]._iMiscId) { switch (player.SpdList[si]._iMiscId) {

10
Source/monster.cpp

@ -1083,7 +1083,7 @@ void DiabloDeath(Monster &diablo, bool sendmsg)
void SpawnLoot(Monster &monster, bool sendmsg) void SpawnLoot(Monster &monster, bool sendmsg)
{ {
if (Quests[Q_GARBUD].IsAvailable() && monster._uniqtype - 1 == UMT_GARBUD) { if (Quests[Q_GARBUD].IsAvailable() && monster._uniqtype - 1 == UMT_GARBUD) {
CreateTypeItem(monster.position.tile + Displacement { 1, 1 }, true, ITYPE_MACE, IMISC_NONE, true, false); CreateTypeItem(monster.position.tile + Displacement { 1, 1 }, true, ItemType::Mace, IMISC_NONE, true, false);
} else if (monster._uniqtype - 1 == UMT_DEFILER) { } else if (monster._uniqtype - 1 == UMT_DEFILER) {
if (effect_is_playing(USFX_DEFILER8)) if (effect_is_playing(USFX_DEFILER8))
stream_stop(); stream_stop();
@ -1104,9 +1104,9 @@ void SpawnLoot(Monster &monster, bool sendmsg)
stream_stop(); stream_stop();
Quests[Q_NAKRUL]._qlog = false; Quests[Q_NAKRUL]._qlog = false;
UberDiabloMonsterIndex = -2; UberDiabloMonsterIndex = -2;
CreateMagicWeapon(monster.position.tile, ITYPE_SWORD, ICURS_GREAT_SWORD, false, true); CreateMagicWeapon(monster.position.tile, ItemType::Sword, ICURS_GREAT_SWORD, false, true);
CreateMagicWeapon(monster.position.tile, ITYPE_STAFF, ICURS_WAR_STAFF, false, true); CreateMagicWeapon(monster.position.tile, ItemType::Staff, ICURS_WAR_STAFF, false, true);
CreateMagicWeapon(monster.position.tile, ITYPE_BOW, ICURS_LONG_WAR_BOW, false, true); CreateMagicWeapon(monster.position.tile, ItemType::Bow, ICURS_LONG_WAR_BOW, false, true);
CreateSpellBook(monster.position.tile, SPL_APOCA, false, true); CreateSpellBook(monster.position.tile, SPL_APOCA, false, true);
} else if (monster.MType->mtype != MT_GOLEM) { } else if (monster.MType->mtype != MT_GOLEM) {
SpawnItem(monster, monster.position.tile, sendmsg); SpawnItem(monster, monster.position.tile, sendmsg);
@ -1736,7 +1736,7 @@ bool MonsterTalk(Monster &monster)
&& (monster._mFlags & MFLAG_QUEST_COMPLETE) == 0) { && (monster._mFlags & MFLAG_QUEST_COMPLETE) == 0) {
Quests[Q_ZHAR]._qactive = QUEST_ACTIVE; Quests[Q_ZHAR]._qactive = QUEST_ACTIVE;
Quests[Q_ZHAR]._qlog = true; Quests[Q_ZHAR]._qlog = true;
CreateTypeItem(monster.position.tile + Displacement { 1, 1 }, false, ITYPE_MISC, IMISC_BOOK, true, false); CreateTypeItem(monster.position.tile + Displacement { 1, 1 }, false, ItemType::Misc, IMISC_BOOK, true, false);
monster._mFlags |= MFLAG_QUEST_COMPLETE; monster._mFlags |= MFLAG_QUEST_COMPLETE;
} }
if (monster._uniqtype - 1 == UMT_SNOTSPIL) { if (monster._uniqtype - 1 == UMT_SNOTSPIL) {

80
Source/objects.cpp

@ -2451,17 +2451,17 @@ void OperateSlainHero(int pnum, int i)
auto &player = Players[pnum]; auto &player = Players[pnum];
if (player._pClass == HeroClass::Warrior) { if (player._pClass == HeroClass::Warrior) {
CreateMagicArmor(Objects[i].position, ITYPE_HARMOR, ICURS_BREAST_PLATE, false, true); CreateMagicArmor(Objects[i].position, ItemType::HeavyArmor, ICURS_BREAST_PLATE, false, true);
} else if (player._pClass == HeroClass::Rogue) { } else if (player._pClass == HeroClass::Rogue) {
CreateMagicWeapon(Objects[i].position, ITYPE_BOW, ICURS_LONG_WAR_BOW, false, true); CreateMagicWeapon(Objects[i].position, ItemType::Bow, ICURS_LONG_WAR_BOW, false, true);
} else if (player._pClass == HeroClass::Sorcerer) { } else if (player._pClass == HeroClass::Sorcerer) {
CreateSpellBook(Objects[i].position, SPL_LIGHTNING, false, true); CreateSpellBook(Objects[i].position, SPL_LIGHTNING, false, true);
} else if (player._pClass == HeroClass::Monk) { } else if (player._pClass == HeroClass::Monk) {
CreateMagicWeapon(Objects[i].position, ITYPE_STAFF, ICURS_WAR_STAFF, false, true); CreateMagicWeapon(Objects[i].position, ItemType::Staff, ICURS_WAR_STAFF, false, true);
} else if (player._pClass == HeroClass::Bard) { } else if (player._pClass == HeroClass::Bard) {
CreateMagicWeapon(Objects[i].position, ITYPE_SWORD, ICURS_BASTARD_SWORD, false, true); CreateMagicWeapon(Objects[i].position, ItemType::Sword, ICURS_BASTARD_SWORD, false, true);
} else if (player._pClass == HeroClass::Barbarian) { } else if (player._pClass == HeroClass::Barbarian) {
CreateMagicWeapon(Objects[i].position, ITYPE_AXE, ICURS_BATTLE_AXE, false, true); CreateMagicWeapon(Objects[i].position, ItemType::Axe, ICURS_BATTLE_AXE, false, true);
} }
Players[MyPlayerId].Say(HeroSpeech::RestInPeaceMyFriend); Players[MyPlayerId].Say(HeroSpeech::RestInPeaceMyFriend);
if (pnum == MyPlayerId) if (pnum == MyPlayerId)
@ -2673,20 +2673,20 @@ bool OperateShrineGloomy(int pnum)
// Increment armor class by 2 and decrements max damage by 1. // Increment armor class by 2 and decrements max damage by 1.
for (Item &item : PlayerItemsRange(player)) { for (Item &item : PlayerItemsRange(player)) {
switch (item._itype) { switch (item._itype) {
case ITYPE_SWORD: case ItemType::Sword:
case ITYPE_AXE: case ItemType::Axe:
case ITYPE_BOW: case ItemType::Bow:
case ITYPE_MACE: case ItemType::Mace:
case ITYPE_STAFF: case ItemType::Staff:
item._iMaxDam--; item._iMaxDam--;
if (item._iMaxDam < item._iMinDam) if (item._iMaxDam < item._iMinDam)
item._iMaxDam = item._iMinDam; item._iMaxDam = item._iMinDam;
break; break;
case ITYPE_SHIELD: case ItemType::Shield:
case ITYPE_HELM: case ItemType::Helm:
case ITYPE_LARMOR: case ItemType::LightArmor:
case ITYPE_MARMOR: case ItemType::MediumArmor:
case ITYPE_HARMOR: case ItemType::HeavyArmor:
item._iAC += 2; item._iAC += 2;
break; break;
default: default:
@ -2708,18 +2708,18 @@ bool OperateShrineWeird(int pnum)
auto &player = Players[pnum]; auto &player = Players[pnum];
if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() && player.InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_SHIELD) if (!player.InvBody[INVLOC_HAND_LEFT].isEmpty() && player.InvBody[INVLOC_HAND_LEFT]._itype != ItemType::Shield)
player.InvBody[INVLOC_HAND_LEFT]._iMaxDam++; player.InvBody[INVLOC_HAND_LEFT]._iMaxDam++;
if (!player.InvBody[INVLOC_HAND_RIGHT].isEmpty() && player.InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_SHIELD) if (!player.InvBody[INVLOC_HAND_RIGHT].isEmpty() && player.InvBody[INVLOC_HAND_RIGHT]._itype != ItemType::Shield)
player.InvBody[INVLOC_HAND_RIGHT]._iMaxDam++; player.InvBody[INVLOC_HAND_RIGHT]._iMaxDam++;
for (int j = 0; j < player._pNumInv; j++) { for (int j = 0; j < player._pNumInv; j++) {
switch (player.InvList[j]._itype) { switch (player.InvList[j]._itype) {
case ITYPE_SWORD: case ItemType::Sword:
case ITYPE_AXE: case ItemType::Axe:
case ITYPE_BOW: case ItemType::Bow:
case ITYPE_MACE: case ItemType::Mace:
case ITYPE_STAFF: case ItemType::Staff:
player.InvList[j]._iMaxDam++; player.InvList[j]._iMaxDam++;
break; break;
default: default:
@ -2767,15 +2767,15 @@ bool OperateShrineStone(int pnum)
auto &player = Players[pnum]; auto &player = Players[pnum];
for (auto &item : player.InvBody) { for (auto &item : player.InvBody) {
if (item._itype == ITYPE_STAFF) if (item._itype == ItemType::Staff)
item._iCharges = item._iMaxCharges; item._iCharges = item._iMaxCharges;
} }
for (int j = 0; j < player._pNumInv; j++) { for (int j = 0; j < player._pNumInv; j++) {
if (player.InvList[j]._itype == ITYPE_STAFF) if (player.InvList[j]._itype == ItemType::Staff)
player.InvList[j]._iCharges = player.InvList[j]._iMaxCharges; player.InvList[j]._iCharges = player.InvList[j]._iMaxCharges;
} }
for (auto &item : player.SpdList) { for (auto &item : player.SpdList) {
if (item._itype == ITYPE_STAFF) if (item._itype == ItemType::Staff)
item._iCharges = item._iMaxCharges; // belt items don't have charges? item._iCharges = item._iMaxCharges; // belt items don't have charges?
} }
@ -2946,7 +2946,7 @@ bool OperateShrineEldritch(int pnum)
auto &player = Players[pnum]; auto &player = Players[pnum];
for (int j = 0; j < player._pNumInv; j++) { for (int j = 0; j < player._pNumInv; j++) {
if (player.InvList[j]._itype == ITYPE_MISC) { if (player.InvList[j]._itype == ItemType::Misc) {
if (player.InvList[j]._iMiscId == IMISC_HEAL if (player.InvList[j]._iMiscId == IMISC_HEAL
|| player.InvList[j]._iMiscId == IMISC_MANA) { || player.InvList[j]._iMiscId == IMISC_MANA) {
SetPlrHandItem(player.HoldItem, ItemMiscIdIdx(IMISC_REJUV)); SetPlrHandItem(player.HoldItem, ItemMiscIdIdx(IMISC_REJUV));
@ -2964,7 +2964,7 @@ bool OperateShrineEldritch(int pnum)
} }
} }
for (auto &item : player.SpdList) { for (auto &item : player.SpdList) {
if (item._itype == ITYPE_MISC) { if (item._itype == ItemType::Misc) {
if (item._iMiscId == IMISC_HEAL if (item._iMiscId == IMISC_HEAL
|| item._iMiscId == IMISC_MANA) { || item._iMiscId == IMISC_MANA) {
SetPlrHandItem(player.HoldItem, ItemMiscIdIdx(IMISC_REJUV)); SetPlrHandItem(player.HoldItem, ItemMiscIdIdx(IMISC_REJUV));
@ -3020,11 +3020,11 @@ bool OperateShrineDivine(int pnum, Point spawnPosition)
auto &player = Players[pnum]; auto &player = Players[pnum];
if (currlevel < 4) { if (currlevel < 4) {
CreateTypeItem(spawnPosition, false, ITYPE_MISC, IMISC_FULLMANA, false, true); CreateTypeItem(spawnPosition, false, ItemType::Misc, IMISC_FULLMANA, false, true);
CreateTypeItem(spawnPosition, false, ITYPE_MISC, IMISC_FULLHEAL, false, true); CreateTypeItem(spawnPosition, false, ItemType::Misc, IMISC_FULLHEAL, false, true);
} else { } else {
CreateTypeItem(spawnPosition, false, ITYPE_MISC, IMISC_FULLREJUV, false, true); CreateTypeItem(spawnPosition, false, ItemType::Misc, IMISC_FULLREJUV, false, true);
CreateTypeItem(spawnPosition, false, ITYPE_MISC, IMISC_FULLREJUV, false, true); CreateTypeItem(spawnPosition, false, ItemType::Misc, IMISC_FULLREJUV, false, true);
} }
player._pMana = player._pMaxMana; player._pMana = player._pMaxMana;
@ -3725,9 +3725,9 @@ void OperateSkelBook(int pnum, int i, bool sendmsg)
} }
SetRndSeed(Objects[i]._oRndSeed); SetRndSeed(Objects[i]._oRndSeed);
if (GenerateRnd(5) != 0) if (GenerateRnd(5) != 0)
CreateTypeItem(Objects[i].position, false, ITYPE_MISC, IMISC_SCROLL, sendmsg, false); CreateTypeItem(Objects[i].position, false, ItemType::Misc, IMISC_SCROLL, sendmsg, false);
else else
CreateTypeItem(Objects[i].position, false, ITYPE_MISC, IMISC_BOOK, sendmsg, false); CreateTypeItem(Objects[i].position, false, ItemType::Misc, IMISC_BOOK, sendmsg, false);
if (pnum == MyPlayerId) if (pnum == MyPlayerId)
NetSendCmdParam1(false, CMD_OPERATEOBJ, i); NetSendCmdParam1(false, CMD_OPERATEOBJ, i);
} }
@ -3746,7 +3746,7 @@ void OperateBookCase(int pnum, int i, bool sendmsg)
return; return;
} }
SetRndSeed(Objects[i]._oRndSeed); SetRndSeed(Objects[i]._oRndSeed);
CreateTypeItem(Objects[i].position, false, ITYPE_MISC, IMISC_BOOK, sendmsg, false); CreateTypeItem(Objects[i].position, false, ItemType::Misc, IMISC_BOOK, sendmsg, false);
if (Quests[Q_ZHAR].IsAvailable()) { if (Quests[Q_ZHAR].IsAvailable()) {
auto &zhar = Monsters[MAX_PLRS]; auto &zhar = Monsters[MAX_PLRS];
@ -3792,15 +3792,15 @@ void OperateArmorStand(int pnum, int i, bool sendmsg)
SetRndSeed(Objects[i]._oRndSeed); SetRndSeed(Objects[i]._oRndSeed);
bool uniqueRnd = (GenerateRnd(2) != 0); bool uniqueRnd = (GenerateRnd(2) != 0);
if (currlevel <= 5) { if (currlevel <= 5) {
CreateTypeItem(Objects[i].position, true, ITYPE_LARMOR, IMISC_NONE, sendmsg, false); CreateTypeItem(Objects[i].position, true, ItemType::LightArmor, IMISC_NONE, sendmsg, false);
} else if (currlevel >= 6 && currlevel <= 9) { } else if (currlevel >= 6 && currlevel <= 9) {
CreateTypeItem(Objects[i].position, uniqueRnd, ITYPE_MARMOR, IMISC_NONE, sendmsg, false); CreateTypeItem(Objects[i].position, uniqueRnd, ItemType::MediumArmor, IMISC_NONE, sendmsg, false);
} else if (currlevel >= 10 && currlevel <= 12) { } else if (currlevel >= 10 && currlevel <= 12) {
CreateTypeItem(Objects[i].position, false, ITYPE_HARMOR, IMISC_NONE, sendmsg, false); CreateTypeItem(Objects[i].position, false, ItemType::HeavyArmor, IMISC_NONE, sendmsg, false);
} else if (currlevel >= 13 && currlevel <= 16) { } else if (currlevel >= 13 && currlevel <= 16) {
CreateTypeItem(Objects[i].position, true, ITYPE_HARMOR, IMISC_NONE, sendmsg, false); CreateTypeItem(Objects[i].position, true, ItemType::HeavyArmor, IMISC_NONE, sendmsg, false);
} else if (currlevel >= 17) { } else if (currlevel >= 17) {
CreateTypeItem(Objects[i].position, true, ITYPE_HARMOR, IMISC_NONE, sendmsg, false); CreateTypeItem(Objects[i].position, true, ItemType::HeavyArmor, IMISC_NONE, sendmsg, false);
} }
if (pnum == MyPlayerId) if (pnum == MyPlayerId)
NetSendCmdParam1(false, CMD_OPERATEOBJ, i); NetSendCmdParam1(false, CMD_OPERATEOBJ, i);
@ -3970,7 +3970,7 @@ void OperateWeaponRack(int pnum, int i, bool sendmsg)
return; return;
SetRndSeed(Objects[i]._oRndSeed); SetRndSeed(Objects[i]._oRndSeed);
ItemType weaponType { PickRandomlyAmong({ ITYPE_SWORD, ITYPE_AXE, ITYPE_BOW, ITYPE_MACE }) }; ItemType weaponType { PickRandomlyAmong({ ItemType::Sword, ItemType::Axe, ItemType::Bow, ItemType::Mace }) };
Objects[i]._oSelFlag = 0; Objects[i]._oSelFlag = 0;
Objects[i]._oAnimFrame++; Objects[i]._oAnimFrame++;

6
Source/pack.cpp

@ -141,7 +141,7 @@ void UnPackItem(const ItemPack *is, Item *id, bool isHellfire)
auto &item = Items[MAXITEMS]; auto &item = Items[MAXITEMS];
auto idx = static_cast<_item_indexes>(SDL_SwapLE16(is->idx)); auto idx = static_cast<_item_indexes>(SDL_SwapLE16(is->idx));
if (idx == IDI_NONE) { if (idx == IDI_NONE) {
id->_itype = ITYPE_NONE; id->_itype = ItemType::None;
return; return;
} }
@ -153,7 +153,7 @@ void UnPackItem(const ItemPack *is, Item *id, bool isHellfire)
} }
if (!IsItemAvailable(idx)) { if (!IsItemAvailable(idx)) {
id->_itype = ITYPE_NONE; id->_itype = ItemType::None;
return; return;
} }
@ -253,7 +253,7 @@ void UnPackPlayer(const PlayerPack *pPack, Player &player, bool netSync)
if (&player == &Players[MyPlayerId]) { if (&player == &Players[MyPlayerId]) {
for (int i = 0; i < 20; i++) for (int i = 0; i < 20; i++)
witchitem[i]._itype = ITYPE_NONE; witchitem[i]._itype = ItemType::None;
} }
CalcPlrInv(player, false); CalcPlrInv(player, false);

4
Source/panels/charpanel.cpp

@ -85,7 +85,7 @@ UiFlags GetMaxHealthColor()
std::pair<int, int> GetDamage() std::pair<int, int> GetDamage()
{ {
int damageMod = MyPlayer->_pIBonusDamMod; int damageMod = MyPlayer->_pIBonusDamMod;
if (MyPlayer->InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_BOW && MyPlayer->_pClass != HeroClass::Rogue) { if (MyPlayer->InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Bow && MyPlayer->_pClass != HeroClass::Rogue) {
damageMod += MyPlayer->_pDamageMod / 2; damageMod += MyPlayer->_pDamageMod / 2;
} else { } else {
damageMod += MyPlayer->_pDamageMod; damageMod += MyPlayer->_pDamageMod;
@ -158,7 +158,7 @@ PanelEntry panelEntries[] = {
{ N_("Armor class"), { 253, 163 }, 57, 67, { N_("Armor class"), { 253, 163 }, 57, 67,
[]() { return StyledText { GetValueColor(MyPlayer->_pIBonusAC), fmt::format("{:d}", MyPlayer->GetArmor()) }; } }, []() { return StyledText { GetValueColor(MyPlayer->_pIBonusAC), fmt::format("{:d}", MyPlayer->GetArmor()) }; } },
{ N_("To hit"), { 253, 191 }, 57, 67, { N_("To hit"), { 253, 191 }, 57, 67,
[]() { return StyledText { GetValueColor(MyPlayer->_pIBonusToHit), fmt::format("{:d}%", (MyPlayer->InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_BOW ? MyPlayer->GetRangedToHit() : MyPlayer->GetMeleeToHit())) }; } }, []() { return StyledText { GetValueColor(MyPlayer->_pIBonusToHit), fmt::format("{:d}%", (MyPlayer->InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Bow ? MyPlayer->GetRangedToHit() : MyPlayer->GetMeleeToHit())) }; } },
{ N_("Damage"), { 253, 219 }, 57, 67, { N_("Damage"), { 253, 219 }, 57, 67,
[]() { []() {
std::pair<int, int> dmg = GetDamage(); std::pair<int, int> dmg = GetDamage();

70
Source/player.cpp

@ -581,7 +581,7 @@ void RespawnDeadItem(Item *itm, Point target)
Items[ii].position = target; Items[ii].position = target;
RespawnItem(&Items[ii], true); RespawnItem(&Items[ii], true);
itm->_itype = ITYPE_NONE; itm->_itype = ItemType::None;
} }
void DeadItem(Player &player, Item *itm, Displacement direction) void DeadItem(Player &player, Item *itm, Displacement direction)
@ -619,7 +619,7 @@ int DropGold(int pnum, int amount, bool skipFullStacks)
for (int i = 0; i < player._pNumInv && amount > 0; i++) { for (int i = 0; i < player._pNumInv && amount > 0; i++) {
auto &item = player.InvList[i]; auto &item = player.InvList[i];
if (item._itype != ITYPE_GOLD || (skipFullStacks && item._ivalue == MaxGold)) if (item._itype != ItemType::Gold || (skipFullStacks && item._ivalue == MaxGold))
continue; continue;
if (amount < item._ivalue) { if (amount < item._ivalue) {
@ -773,7 +773,7 @@ bool WeaponDecay(Player &player, int ii)
player.InvBody[ii]._iPLDam -= 5; player.InvBody[ii]._iPLDam -= 5;
if (player.InvBody[ii]._iPLDam <= -100) { if (player.InvBody[ii]._iPLDam <= -100) {
NetSendCmdDelItem(true, ii); NetSendCmdDelItem(true, ii);
player.InvBody[ii]._itype = ITYPE_NONE; player.InvBody[ii]._itype = ItemType::None;
CalcPlrInv(player, true); CalcPlrInv(player, true);
return true; return true;
} }
@ -810,7 +810,7 @@ bool DamageWeapon(int pnum, int durrnd)
player.InvBody[INVLOC_HAND_LEFT]._iDurability--; player.InvBody[INVLOC_HAND_LEFT]._iDurability--;
if (player.InvBody[INVLOC_HAND_LEFT]._iDurability <= 0) { if (player.InvBody[INVLOC_HAND_LEFT]._iDurability <= 0) {
NetSendCmdDelItem(true, INVLOC_HAND_LEFT); NetSendCmdDelItem(true, INVLOC_HAND_LEFT);
player.InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_LEFT]._itype = ItemType::None;
CalcPlrInv(player, true); CalcPlrInv(player, true);
return true; return true;
} }
@ -824,13 +824,13 @@ bool DamageWeapon(int pnum, int durrnd)
player.InvBody[INVLOC_HAND_RIGHT]._iDurability--; player.InvBody[INVLOC_HAND_RIGHT]._iDurability--;
if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability == 0) { if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability == 0) {
NetSendCmdDelItem(true, INVLOC_HAND_RIGHT); NetSendCmdDelItem(true, INVLOC_HAND_RIGHT);
player.InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_RIGHT]._itype = ItemType::None;
CalcPlrInv(player, true); CalcPlrInv(player, true);
return true; return true;
} }
} }
if (player.InvBody[INVLOC_HAND_LEFT].isEmpty() && player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) { if (player.InvBody[INVLOC_HAND_LEFT].isEmpty() && player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Shield) {
if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability == DUR_INDESTRUCTIBLE) { if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability == DUR_INDESTRUCTIBLE) {
return false; return false;
} }
@ -838,13 +838,13 @@ bool DamageWeapon(int pnum, int durrnd)
player.InvBody[INVLOC_HAND_RIGHT]._iDurability--; player.InvBody[INVLOC_HAND_RIGHT]._iDurability--;
if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability == 0) { if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability == 0) {
NetSendCmdDelItem(true, INVLOC_HAND_RIGHT); NetSendCmdDelItem(true, INVLOC_HAND_RIGHT);
player.InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_RIGHT]._itype = ItemType::None;
CalcPlrInv(player, true); CalcPlrInv(player, true);
return true; return true;
} }
} }
if (player.InvBody[INVLOC_HAND_RIGHT].isEmpty() && player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD) { if (player.InvBody[INVLOC_HAND_RIGHT].isEmpty() && player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Shield) {
if (player.InvBody[INVLOC_HAND_LEFT]._iDurability == DUR_INDESTRUCTIBLE) { if (player.InvBody[INVLOC_HAND_LEFT]._iDurability == DUR_INDESTRUCTIBLE) {
return false; return false;
} }
@ -852,7 +852,7 @@ bool DamageWeapon(int pnum, int durrnd)
player.InvBody[INVLOC_HAND_LEFT]._iDurability--; player.InvBody[INVLOC_HAND_LEFT]._iDurability--;
if (player.InvBody[INVLOC_HAND_LEFT]._iDurability == 0) { if (player.InvBody[INVLOC_HAND_LEFT]._iDurability == 0) {
NetSendCmdDelItem(true, INVLOC_HAND_LEFT); NetSendCmdDelItem(true, INVLOC_HAND_LEFT);
player.InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_LEFT]._itype = ItemType::None;
CalcPlrInv(player, true); CalcPlrInv(player, true);
return true; return true;
} }
@ -934,26 +934,26 @@ bool PlrHitMonst(int pnum, int m)
} }
} }
int phanditype = ITYPE_NONE; ItemType phanditype = ItemType::None;
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SWORD || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SWORD) { if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Sword || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Sword) {
phanditype = ITYPE_SWORD; phanditype = ItemType::Sword;
} }
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_MACE || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_MACE) { if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Mace || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Mace) {
phanditype = ITYPE_MACE; phanditype = ItemType::Mace;
} }
switch (monster.MData->mMonstClass) { switch (monster.MData->mMonstClass) {
case MonsterClass::Undead: case MonsterClass::Undead:
if (phanditype == ITYPE_SWORD) { if (phanditype == ItemType::Sword) {
dam -= dam / 2; dam -= dam / 2;
} else if (phanditype == ITYPE_MACE) { } else if (phanditype == ItemType::Mace) {
dam += dam / 2; dam += dam / 2;
} }
break; break;
case MonsterClass::Animal: case MonsterClass::Animal:
if (phanditype == ITYPE_MACE) { if (phanditype == ItemType::Mace) {
dam -= dam / 2; dam -= dam / 2;
} else if (phanditype == ITYPE_SWORD) { } else if (phanditype == ItemType::Sword) {
dam += dam / 2; dam += dam / 2;
} }
break; break;
@ -1223,16 +1223,16 @@ bool DoAttack(int pnum)
didhit = PlrHitObj(pnum, dx, dy); didhit = PlrHitObj(pnum, dx, dy);
} }
if ((player._pClass == HeroClass::Monk if ((player._pClass == HeroClass::Monk
&& (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_STAFF || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_STAFF)) && (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Staff || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Staff))
|| (player._pClass == HeroClass::Bard || (player._pClass == HeroClass::Bard
&& player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SWORD && player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SWORD) && player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Sword && player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Sword)
|| (player._pClass == HeroClass::Barbarian || (player._pClass == HeroClass::Barbarian
&& (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_AXE || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_AXE && (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Axe || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Axe
|| (((player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_MACE && player.InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND) || (((player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Mace && player.InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND)
|| (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_MACE && player.InvBody[INVLOC_HAND_RIGHT]._iLoc == ILOC_TWOHAND) || (player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Mace && player.InvBody[INVLOC_HAND_RIGHT]._iLoc == ILOC_TWOHAND)
|| (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SWORD && player.InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND) || (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Sword && player.InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND)
|| (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SWORD && player.InvBody[INVLOC_HAND_RIGHT]._iLoc == ILOC_TWOHAND)) || (player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Sword && player.InvBody[INVLOC_HAND_RIGHT]._iLoc == ILOC_TWOHAND))
&& !(player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD || player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD))))) { && !(player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Shield || player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Shield))))) {
position = player.position.tile + Right(player._pdir); position = player.position.tile + Right(player._pdir);
if (dMonster[position.x][position.y] != 0) { if (dMonster[position.x][position.y] != 0) {
int m = abs(dMonster[position.x][position.y]) - 1; int m = abs(dMonster[position.x][position.y]) - 1;
@ -1350,7 +1350,7 @@ void ShieldDur(int pnum)
} }
auto &player = Players[pnum]; auto &player = Players[pnum];
if (player.InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD) { if (player.InvBody[INVLOC_HAND_LEFT]._itype == ItemType::Shield) {
if (player.InvBody[INVLOC_HAND_LEFT]._iDurability == DUR_INDESTRUCTIBLE) { if (player.InvBody[INVLOC_HAND_LEFT]._iDurability == DUR_INDESTRUCTIBLE) {
return; return;
} }
@ -1358,17 +1358,17 @@ void ShieldDur(int pnum)
player.InvBody[INVLOC_HAND_LEFT]._iDurability--; player.InvBody[INVLOC_HAND_LEFT]._iDurability--;
if (player.InvBody[INVLOC_HAND_LEFT]._iDurability == 0) { if (player.InvBody[INVLOC_HAND_LEFT]._iDurability == 0) {
NetSendCmdDelItem(true, INVLOC_HAND_LEFT); NetSendCmdDelItem(true, INVLOC_HAND_LEFT);
player.InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_LEFT]._itype = ItemType::None;
CalcPlrInv(player, true); CalcPlrInv(player, true);
} }
} }
if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD) { if (player.InvBody[INVLOC_HAND_RIGHT]._itype == ItemType::Shield) {
if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability != DUR_INDESTRUCTIBLE) { if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability != DUR_INDESTRUCTIBLE) {
player.InvBody[INVLOC_HAND_RIGHT]._iDurability--; player.InvBody[INVLOC_HAND_RIGHT]._iDurability--;
if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability == 0) { if (player.InvBody[INVLOC_HAND_RIGHT]._iDurability == 0) {
NetSendCmdDelItem(true, INVLOC_HAND_RIGHT); NetSendCmdDelItem(true, INVLOC_HAND_RIGHT);
player.InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; player.InvBody[INVLOC_HAND_RIGHT]._itype = ItemType::None;
CalcPlrInv(player, true); CalcPlrInv(player, true);
} }
} }
@ -1440,7 +1440,7 @@ void DamageArmor(int pnum)
} else { } else {
NetSendCmdDelItem(true, INVLOC_HEAD); NetSendCmdDelItem(true, INVLOC_HEAD);
} }
pi->_itype = ITYPE_NONE; pi->_itype = ItemType::None;
CalcPlrInv(player, true); CalcPlrInv(player, true);
} }
@ -1904,7 +1904,7 @@ void ValidatePlayer()
int gt = 0; int gt = 0;
for (int i = 0; i < myPlayer._pNumInv; i++) { for (int i = 0; i < myPlayer._pNumInv; i++) {
if (myPlayer.InvList[i]._itype == ITYPE_GOLD) { if (myPlayer.InvList[i]._itype == ItemType::Gold) {
int maxGold = GOLD_MAX_LIMIT; int maxGold = GOLD_MAX_LIMIT;
if (gbIsHellfire) { if (gbIsHellfire) {
maxGold *= 2; maxGold *= 2;
@ -2048,7 +2048,7 @@ bool Player::TryRemoveInvItemById(int item)
void Player::RemoveSpdBarItem(int iv) void Player::RemoveSpdBarItem(int iv)
{ {
SpdList[iv]._itype = ITYPE_NONE; SpdList[iv]._itype = ItemType::None;
CalcScrolls(); CalcScrolls();
force_redraw = 255; force_redraw = 255;
@ -3036,7 +3036,7 @@ StartPlayerKill(int pnum, int earflag)
if (pnum != MyPlayerId && earflag == 0 && !diablolevel) { if (pnum != MyPlayerId && earflag == 0 && !diablolevel) {
for (auto &item : player.InvBody) { for (auto &item : player.InvBody) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
CalcPlrInv(player, false); CalcPlrInv(player, false);
} }
@ -3106,7 +3106,7 @@ void StripTopGold(Player &player)
Item tmpItem = player.HoldItem; Item tmpItem = player.HoldItem;
for (int i = 0; i < player._pNumInv; i++) { for (int i = 0; i < player._pNumInv; i++) {
if (player.InvList[i]._itype == ITYPE_GOLD) { if (player.InvList[i]._itype == ItemType::Gold) {
if (player.InvList[i]._ivalue > MaxGold) { if (player.InvList[i]._ivalue > MaxGold) {
int val = player.InvList[i]._ivalue - MaxGold; int val = player.InvList[i]._ivalue - MaxGold;
player.InvList[i]._ivalue = MaxGold; player.InvList[i]._ivalue = MaxGold;

2
Source/player.h

@ -549,7 +549,7 @@ struct Player {
void ReadySpellFromEquipment(inv_body_loc bodyLocation) void ReadySpellFromEquipment(inv_body_loc bodyLocation)
{ {
auto &item = InvBody[bodyLocation]; auto &item = InvBody[bodyLocation];
if (item._itype == ITYPE_STAFF && item._iSpell != SPL_NULL && item._iCharges > 0) { if (item._itype == ItemType::Staff && item._iSpell != SPL_NULL && item._iCharges > 0) {
_pRSpell = item._iSpell; _pRSpell = item._iSpell;
_pRSplType = RSPLTYPE_CHARGES; _pRSplType = RSPLTYPE_CHARGES;
force_redraw = 255; force_redraw = 255;

4
Source/qol/autopickup.cpp

@ -23,7 +23,7 @@ bool HasRoomForGold()
// Main item cell. Potentially a gold pile so check it. // Main item cell. Potentially a gold pile so check it.
auto item = Players[MyPlayerId].InvList[idx - 1]; auto item = Players[MyPlayerId].InvList[idx - 1];
if (item._itype == ITYPE_GOLD && item._ivalue < MaxGold) if (item._itype == ItemType::Gold && item._ivalue < MaxGold)
return true; return true;
} }
@ -49,7 +49,7 @@ void AutoGoldPickup(int pnum)
if (dItem[tile.x][tile.y] != 0) { if (dItem[tile.x][tile.y] != 0) {
int itemIndex = dItem[tile.x][tile.y] - 1; int itemIndex = dItem[tile.x][tile.y] - 1;
auto &item = Items[itemIndex]; auto &item = Items[itemIndex];
if (item._itype == ITYPE_GOLD) { if (item._itype == ItemType::Gold) {
NetSendCmdGItem(true, CMD_REQUESTAGITEM, pnum, pnum, itemIndex); NetSendCmdGItem(true, CMD_REQUESTAGITEM, pnum, pnum, itemIndex);
item._iRequest = true; item._iRequest = true;
PlaySFX(IS_IGRAB); PlaySFX(IS_IGRAB);

2
Source/qol/itemlabels.cpp

@ -66,7 +66,7 @@ void AddItemToLabelQueue(int id, int x, int y)
Item &item = Items[id]; Item &item = Items[id];
const char *textOnGround; const char *textOnGround;
if (item._itype == ITYPE_GOLD) { if (item._itype == ItemType::Gold) {
std::sprintf(tempstr, _("%i gold"), item._ivalue); std::sprintf(tempstr, _("%i gold"), item._ivalue);
textOnGround = tempstr; textOnGround = tempstr;
} else { } else {

56
Source/stores.cpp

@ -201,7 +201,7 @@ void PrintStoreItem(Item *x, int l, UiFlags flags)
} else { } else {
strcat(sstr, _("Indestructible, ")); strcat(sstr, _("Indestructible, "));
} }
if (x->_itype == ITYPE_MISC) if (x->_itype == ItemType::Misc)
sstr[0] = '\0'; sstr[0] = '\0';
int8_t str = x->_iMinStr; int8_t str = x->_iMinStr;
uint8_t mag = x->_iMinMag; uint8_t mag = x->_iMinMag;
@ -379,11 +379,11 @@ bool SmithSellOk(int i)
if (pI->_iMiscId > IMISC_OILFIRST && pI->_iMiscId < IMISC_OILLAST) if (pI->_iMiscId > IMISC_OILFIRST && pI->_iMiscId < IMISC_OILLAST)
return true; return true;
if (pI->_itype == ITYPE_MISC) if (pI->_itype == ItemType::Misc)
return false; return false;
if (pI->_itype == ITYPE_GOLD) if (pI->_itype == ItemType::Gold)
return false; return false;
if (pI->_itype == ITYPE_STAFF && (!gbIsHellfire || pI->_iSpell != SPL_NULL)) if (pI->_itype == ItemType::Staff && (!gbIsHellfire || pI->_iSpell != SPL_NULL))
return false; return false;
if (pI->_iClass == ICLASS_QUEST) if (pI->_iClass == ICLASS_QUEST)
return false; return false;
@ -428,7 +428,7 @@ void StartSmithSell()
storenumh = 0; storenumh = 0;
for (auto &item : storehold) { for (auto &item : storehold) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
const auto &myPlayer = Players[MyPlayerId]; const auto &myPlayer = Players[MyPlayerId];
@ -502,9 +502,9 @@ bool SmithRepairOk(int i)
if (myPlayer.InvList[i].isEmpty()) if (myPlayer.InvList[i].isEmpty())
return false; return false;
if (myPlayer.InvList[i]._itype == ITYPE_MISC) if (myPlayer.InvList[i]._itype == ItemType::Misc)
return false; return false;
if (myPlayer.InvList[i]._itype == ITYPE_GOLD) if (myPlayer.InvList[i]._itype == ItemType::Gold)
return false; return false;
if (myPlayer.InvList[i]._iDurability == myPlayer.InvList[i]._iMaxDur) if (myPlayer.InvList[i]._iDurability == myPlayer.InvList[i]._iMaxDur)
return false; return false;
@ -519,7 +519,7 @@ void StartSmithRepair()
storenumh = 0; storenumh = 0;
for (auto &item : storehold) { for (auto &item : storehold) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
auto &myPlayer = Players[MyPlayerId]; auto &myPlayer = Players[MyPlayerId];
@ -678,13 +678,13 @@ bool WitchSellOk(int i)
else else
pI = &Players[MyPlayerId].SpdList[-(i + 1)]; pI = &Players[MyPlayerId].SpdList[-(i + 1)];
if (pI->_itype == ITYPE_MISC) if (pI->_itype == ItemType::Misc)
rv = true; rv = true;
if (pI->_iMiscId > 29 && pI->_iMiscId < 41) if (pI->_iMiscId > 29 && pI->_iMiscId < 41)
rv = false; rv = false;
if (pI->_iClass == ICLASS_QUEST) if (pI->_iClass == ICLASS_QUEST)
rv = false; rv = false;
if (pI->_itype == ITYPE_STAFF && (!gbIsHellfire || pI->_iSpell != SPL_NULL)) if (pI->_itype == ItemType::Staff && (!gbIsHellfire || pI->_iSpell != SPL_NULL))
rv = true; rv = true;
if (pI->IDidx >= IDI_FIRSTQUEST && pI->IDidx <= IDI_LASTQUEST) if (pI->IDidx >= IDI_FIRSTQUEST && pI->IDidx <= IDI_LASTQUEST)
rv = false; rv = false;
@ -700,7 +700,7 @@ void StartWitchSell()
storenumh = 0; storenumh = 0;
for (auto &item : storehold) { for (auto &item : storehold) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
const auto &myPlayer = Players[MyPlayerId]; const auto &myPlayer = Players[MyPlayerId];
@ -772,7 +772,7 @@ bool WitchRechargeOk(int i)
{ {
const auto &item = Players[MyPlayerId].InvList[i]; const auto &item = Players[MyPlayerId].InvList[i];
if (item._itype == ITYPE_STAFF && item._iCharges != item._iMaxCharges) { if (item._itype == ItemType::Staff && item._iCharges != item._iMaxCharges) {
return true; return true;
} }
@ -800,13 +800,13 @@ void StartWitchRecharge()
storenumh = 0; storenumh = 0;
for (auto &item : storehold) { for (auto &item : storehold) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
const auto &myPlayer = Players[MyPlayerId]; const auto &myPlayer = Players[MyPlayerId];
const auto &leftHand = myPlayer.InvBody[INVLOC_HAND_LEFT]; const auto &leftHand = myPlayer.InvBody[INVLOC_HAND_LEFT];
if ((leftHand._itype == ITYPE_STAFF || leftHand._iMiscId == IMISC_UNIQUE) && leftHand._iCharges != leftHand._iMaxCharges) { if ((leftHand._itype == ItemType::Staff || leftHand._iMiscId == IMISC_UNIQUE) && leftHand._iCharges != leftHand._iMaxCharges) {
rechargeok = true; rechargeok = true;
AddStoreHoldRecharge(leftHand, -1); AddStoreHoldRecharge(leftHand, -1);
} }
@ -1085,7 +1085,7 @@ void StartStorytellerIdentify()
storenumh = 0; storenumh = 0;
for (auto &item : storehold) { for (auto &item : storehold) {
item._itype = ITYPE_NONE; item._itype = ItemType::None;
} }
auto &myPlayer = Players[MyPlayerId]; auto &myPlayer = Players[MyPlayerId];
@ -1312,12 +1312,12 @@ void SmithBuyItem()
StoreAutoPlace(); StoreAutoPlace();
int idx = stextvhold + ((stextlhold - stextup) / 4); int idx = stextvhold + ((stextlhold - stextup) / 4);
if (idx == SMITH_ITEMS - 1) { if (idx == SMITH_ITEMS - 1) {
smithitem[SMITH_ITEMS - 1]._itype = ITYPE_NONE; smithitem[SMITH_ITEMS - 1]._itype = ItemType::None;
} else { } else {
for (; !smithitem[idx + 1].isEmpty(); idx++) { for (; !smithitem[idx + 1].isEmpty(); idx++) {
smithitem[idx] = smithitem[idx + 1]; smithitem[idx] = smithitem[idx + 1];
} }
smithitem[idx]._itype = ITYPE_NONE; smithitem[idx]._itype = ItemType::None;
} }
CalcPlrInv(myPlayer, true); CalcPlrInv(myPlayer, true);
} }
@ -1377,7 +1377,7 @@ void SmithBuyPItem()
} }
} }
premiumitems[xx]._itype = ITYPE_NONE; premiumitems[xx]._itype = ItemType::None;
numpremium--; numpremium--;
SpawnPremium(MyPlayerId); SpawnPremium(MyPlayerId);
} }
@ -1445,7 +1445,7 @@ bool StoreGoldFit(int idx)
for (int i = 0; i < myPlayer._pNumInv; i++) { for (int i = 0; i < myPlayer._pNumInv; i++) {
const auto &item = myPlayer.InvList[i]; const auto &item = myPlayer.InvList[i];
if (item._itype == ITYPE_GOLD && item._ivalue != MaxGold) { if (item._itype == ItemType::Gold && item._ivalue != MaxGold) {
if (cost + item._ivalue <= MaxGold) if (cost + item._ivalue <= MaxGold)
cost = 0; cost = 0;
else else
@ -1507,7 +1507,7 @@ void StoreSellItem()
myPlayer._pGold += cost; myPlayer._pGold += cost;
for (int i = 0; i < myPlayer._pNumInv && cost > 0; i++) { for (int i = 0; i < myPlayer._pNumInv && cost > 0; i++) {
auto &item = myPlayer.InvList[i]; auto &item = myPlayer.InvList[i];
if (item._itype == ITYPE_GOLD && item._ivalue != MaxGold) { if (item._itype == ItemType::Gold && item._ivalue != MaxGold) {
if (cost + item._ivalue <= MaxGold) { if (cost + item._ivalue <= MaxGold) {
item._ivalue += cost; item._ivalue += cost;
cost = 0; cost = 0;
@ -1642,12 +1642,12 @@ void WitchBuyItem()
if (idx >= 3) { if (idx >= 3) {
if (idx == WITCH_ITEMS - 1) { if (idx == WITCH_ITEMS - 1) {
witchitem[WITCH_ITEMS - 1]._itype = ITYPE_NONE; witchitem[WITCH_ITEMS - 1]._itype = ItemType::None;
} else { } else {
for (; !witchitem[idx + 1].isEmpty(); idx++) { for (; !witchitem[idx + 1].isEmpty(); idx++) {
witchitem[idx] = witchitem[idx + 1]; witchitem[idx] = witchitem[idx + 1];
} }
witchitem[idx]._itype = ITYPE_NONE; witchitem[idx]._itype = ItemType::None;
} }
} }
@ -1783,7 +1783,7 @@ void BoyBuyItem()
auto &myPlayer = Players[MyPlayerId]; auto &myPlayer = Players[MyPlayerId];
TakePlrsMoney(myPlayer.HoldItem._iIvalue); TakePlrsMoney(myPlayer.HoldItem._iIvalue);
StoreAutoPlace(); StoreAutoPlace();
boyitem._itype = ITYPE_NONE; boyitem._itype = ItemType::None;
stextshold = STORE_BOY; stextshold = STORE_BOY;
CalcPlrInv(myPlayer, true); CalcPlrInv(myPlayer, true);
stextlhold = 12; stextlhold = 12;
@ -1820,12 +1820,12 @@ void HealerBuyItem()
} }
idx = stextvhold + ((stextlhold - stextup) / 4); idx = stextvhold + ((stextlhold - stextup) / 4);
if (idx == 19) { if (idx == 19) {
healitem[19]._itype = ITYPE_NONE; healitem[19]._itype = ItemType::None;
} else { } else {
for (; !healitem[idx + 1].isEmpty(); idx++) { for (; !healitem[idx + 1].isEmpty(); idx++) {
healitem[idx] = healitem[idx + 1]; healitem[idx] = healitem[idx + 1];
} }
healitem[idx]._itype = ITYPE_NONE; healitem[idx]._itype = ItemType::None;
} }
CalcPlrInv(myPlayer, true); CalcPlrInv(myPlayer, true);
} }
@ -2139,7 +2139,7 @@ int TakeGold(Player &player, int cost, bool skipMaxPiles)
{ {
for (int i = 0; i < player._pNumInv; i++) { for (int i = 0; i < player._pNumInv; i++) {
auto &item = player.InvList[i]; auto &item = player.InvList[i];
if (item._itype != ITYPE_GOLD || (skipMaxPiles && item._ivalue == MaxGold)) if (item._itype != ItemType::Gold || (skipMaxPiles && item._ivalue == MaxGold))
continue; continue;
if (cost < item._ivalue) { if (cost < item._ivalue) {
@ -2211,9 +2211,9 @@ void InitStores()
premiumlevel = 1; premiumlevel = 1;
for (auto &premiumitem : premiumitems) for (auto &premiumitem : premiumitems)
premiumitem._itype = ITYPE_NONE; premiumitem._itype = ItemType::None;
boyitem._itype = ITYPE_NONE; boyitem._itype = ItemType::None;
boylevel = 0; boylevel = 0;
} }

2
Source/themes.cpp

@ -666,7 +666,7 @@ void Theme_Treasure(int t)
int rv = GenerateRnd(treasrnd[leveltype - 1]); int rv = GenerateRnd(treasrnd[leveltype - 1]);
// BUGFIX: the `2*` in `2*GenerateRnd(treasrnd...) == 0` has no effect, should probably be `GenerateRnd(2*treasrnd...) == 0` // BUGFIX: the `2*` in `2*GenerateRnd(treasrnd...) == 0` has no effect, should probably be `GenerateRnd(2*treasrnd...) == 0`
if ((2 * GenerateRnd(treasrnd[leveltype - 1])) == 0) { if ((2 * GenerateRnd(treasrnd[leveltype - 1])) == 0) {
CreateTypeItem({ xp, yp }, false, ITYPE_GOLD, IMISC_NONE, false, true); CreateTypeItem({ xp, yp }, false, ItemType::Gold, IMISC_NONE, false, true);
ItemNoFlippy(); ItemNoFlippy();
} }
if (rv == 0) { if (rv == 0) {

42
test/inv_test.cpp

@ -12,7 +12,7 @@ void set_up_scroll(Item &item, spell_id spell)
pcurs = CURSOR_HAND; pcurs = CURSOR_HAND;
leveltype = DTYPE_CATACOMBS; leveltype = DTYPE_CATACOMBS;
Players[MyPlayerId]._pRSpell = static_cast<spell_id>(spell); Players[MyPlayerId]._pRSpell = static_cast<spell_id>(spell);
item._itype = ITYPE_MISC; item._itype = ItemType::Misc;
item._iMiscId = IMISC_SCROLL; item._iMiscId = IMISC_SCROLL;
item._iSpell = spell; item._iSpell = spell;
} }
@ -47,7 +47,7 @@ TEST(Inv, UseScroll_from_inventory_invalid_conditions)
{ {
// Empty the belt to prevent using a scroll from the belt // Empty the belt to prevent using a scroll from the belt
for (int i = 0; i < MAXBELTITEMS; i++) { for (int i = 0; i < MAXBELTITEMS; i++) {
Players[MyPlayerId].SpdList[i]._itype = ITYPE_NONE; Players[MyPlayerId].SpdList[i]._itype = ItemType::None;
} }
set_up_scroll(Players[MyPlayerId].InvList[2], SPL_FIREBOLT); set_up_scroll(Players[MyPlayerId].InvList[2], SPL_FIREBOLT);
@ -67,7 +67,7 @@ TEST(Inv, UseScroll_from_inventory_invalid_conditions)
EXPECT_FALSE(UseScroll()); EXPECT_FALSE(UseScroll());
set_up_scroll(Players[MyPlayerId].InvList[2], SPL_FIREBOLT); set_up_scroll(Players[MyPlayerId].InvList[2], SPL_FIREBOLT);
Players[MyPlayerId].InvList[2]._itype = ITYPE_NONE; Players[MyPlayerId].InvList[2]._itype = ItemType::None;
EXPECT_FALSE(UseScroll()); EXPECT_FALSE(UseScroll());
} }
@ -94,7 +94,7 @@ TEST(Inv, UseScroll_from_belt_invalid_conditions)
EXPECT_FALSE(UseScroll()); EXPECT_FALSE(UseScroll());
set_up_scroll(Players[MyPlayerId].SpdList[2], SPL_FIREBOLT); set_up_scroll(Players[MyPlayerId].SpdList[2], SPL_FIREBOLT);
Players[MyPlayerId].SpdList[2]._itype = ITYPE_NONE; Players[MyPlayerId].SpdList[2]._itype = ItemType::None;
EXPECT_FALSE(UseScroll()); EXPECT_FALSE(UseScroll());
} }
@ -103,10 +103,10 @@ TEST(Inv, CalculateGold)
{ {
Players[MyPlayerId]._pNumInv = 10; Players[MyPlayerId]._pNumInv = 10;
// Set up 4 slots of gold in the inventory // Set up 4 slots of gold in the inventory
Players[MyPlayerId].InvList[1]._itype = ITYPE_GOLD; Players[MyPlayerId].InvList[1]._itype = ItemType::Gold;
Players[MyPlayerId].InvList[5]._itype = ITYPE_GOLD; Players[MyPlayerId].InvList[5]._itype = ItemType::Gold;
Players[MyPlayerId].InvList[2]._itype = ITYPE_GOLD; Players[MyPlayerId].InvList[2]._itype = ItemType::Gold;
Players[MyPlayerId].InvList[3]._itype = ITYPE_GOLD; Players[MyPlayerId].InvList[3]._itype = ItemType::Gold;
// Set the gold amount to arbitrary values // Set the gold amount to arbitrary values
Players[MyPlayerId].InvList[1]._ivalue = 100; Players[MyPlayerId].InvList[1]._ivalue = 100;
Players[MyPlayerId].InvList[5]._ivalue = 200; Players[MyPlayerId].InvList[5]._ivalue = 200;
@ -124,11 +124,11 @@ TEST(Inv, GoldAutoPlace)
// Put gold into the inventory: // Put gold into the inventory:
// | 1000 | ... | ... // | 1000 | ... | ...
Players[MyPlayerId].InvList[0]._itype = ITYPE_GOLD; Players[MyPlayerId].InvList[0]._itype = ItemType::Gold;
Players[MyPlayerId].InvList[0]._ivalue = 1000; Players[MyPlayerId].InvList[0]._ivalue = 1000;
Players[MyPlayerId]._pNumInv = 1; Players[MyPlayerId]._pNumInv = 1;
// Put (max gold - 100) gold, which is 4900, into the player's hand // Put (max gold - 100) gold, which is 4900, into the player's hand
Players[MyPlayerId].HoldItem._itype = ITYPE_GOLD; Players[MyPlayerId].HoldItem._itype = ItemType::Gold;
Players[MyPlayerId].HoldItem._ivalue = GOLD_MAX_LIMIT - 100; Players[MyPlayerId].HoldItem._ivalue = GOLD_MAX_LIMIT - 100;
GoldAutoPlace(Players[MyPlayerId]); GoldAutoPlace(Players[MyPlayerId]);
@ -147,7 +147,7 @@ TEST(Inv, RemoveInvItem)
Players[MyPlayerId]._pNumInv = 1; Players[MyPlayerId]._pNumInv = 1;
Players[MyPlayerId].InvGrid[0] = 1; Players[MyPlayerId].InvGrid[0] = 1;
Players[MyPlayerId].InvGrid[1] = -1; Players[MyPlayerId].InvGrid[1] = -1;
Players[MyPlayerId].InvList[0]._itype = ITYPE_MISC; Players[MyPlayerId].InvList[0]._itype = ItemType::Misc;
Players[MyPlayerId].RemoveInvItem(0); Players[MyPlayerId].RemoveInvItem(0);
EXPECT_EQ(Players[MyPlayerId].InvGrid[0], 0); EXPECT_EQ(Players[MyPlayerId].InvGrid[0], 0);
@ -164,16 +164,16 @@ TEST(Inv, RemoveInvItem_other_item)
Players[MyPlayerId]._pNumInv = 2; Players[MyPlayerId]._pNumInv = 2;
Players[MyPlayerId].InvGrid[0] = 1; Players[MyPlayerId].InvGrid[0] = 1;
Players[MyPlayerId].InvGrid[1] = -1; Players[MyPlayerId].InvGrid[1] = -1;
Players[MyPlayerId].InvList[0]._itype = ITYPE_MISC; Players[MyPlayerId].InvList[0]._itype = ItemType::Misc;
Players[MyPlayerId].InvGrid[2] = 2; Players[MyPlayerId].InvGrid[2] = 2;
Players[MyPlayerId].InvList[1]._itype = ITYPE_RING; Players[MyPlayerId].InvList[1]._itype = ItemType::Ring;
Players[MyPlayerId].RemoveInvItem(0); Players[MyPlayerId].RemoveInvItem(0);
EXPECT_EQ(Players[MyPlayerId].InvGrid[0], 0); EXPECT_EQ(Players[MyPlayerId].InvGrid[0], 0);
EXPECT_EQ(Players[MyPlayerId].InvGrid[1], 0); EXPECT_EQ(Players[MyPlayerId].InvGrid[1], 0);
EXPECT_EQ(Players[MyPlayerId].InvGrid[2], 1); EXPECT_EQ(Players[MyPlayerId].InvGrid[2], 1);
EXPECT_EQ(Players[MyPlayerId].InvList[0]._itype, ITYPE_RING); EXPECT_EQ(Players[MyPlayerId].InvList[0]._itype, ItemType::Ring);
EXPECT_EQ(Players[MyPlayerId]._pNumInv, 1); EXPECT_EQ(Players[MyPlayerId]._pNumInv, 1);
} }
@ -182,13 +182,13 @@ TEST(Inv, RemoveSpdBarItem)
{ {
// Clear the belt // Clear the belt
for (int i = 0; i < MAXBELTITEMS; i++) { for (int i = 0; i < MAXBELTITEMS; i++) {
Players[MyPlayerId].SpdList[i]._itype = ITYPE_NONE; Players[MyPlayerId].SpdList[i]._itype = ItemType::None;
} }
// Put an item in the belt: | x | x | item | x | x | x | x | x | // Put an item in the belt: | x | x | item | x | x | x | x | x |
Players[MyPlayerId].SpdList[3]._itype = ITYPE_MISC; Players[MyPlayerId].SpdList[3]._itype = ItemType::Misc;
Players[MyPlayerId].RemoveSpdBarItem(3); Players[MyPlayerId].RemoveSpdBarItem(3);
EXPECT_EQ(Players[MyPlayerId].SpdList[3]._itype, ITYPE_NONE); EXPECT_EQ(Players[MyPlayerId].SpdList[3]._itype, ItemType::None);
} }
// Test removing a scroll from the inventory // Test removing a scroll from the inventory
@ -199,7 +199,7 @@ TEST(Inv, RemoveScroll_inventory)
// Put a firebolt scroll into the inventory // Put a firebolt scroll into the inventory
Players[MyPlayerId]._pNumInv = 1; Players[MyPlayerId]._pNumInv = 1;
Players[MyPlayerId]._pSpell = static_cast<spell_id>(SPL_FIREBOLT); Players[MyPlayerId]._pSpell = static_cast<spell_id>(SPL_FIREBOLT);
Players[MyPlayerId].InvList[0]._itype = ITYPE_MISC; Players[MyPlayerId].InvList[0]._itype = ItemType::Misc;
Players[MyPlayerId].InvList[0]._iMiscId = IMISC_SCROLL; Players[MyPlayerId].InvList[0]._iMiscId = IMISC_SCROLL;
Players[MyPlayerId].InvList[0]._iSpell = SPL_FIREBOLT; Players[MyPlayerId].InvList[0]._iSpell = SPL_FIREBOLT;
@ -213,14 +213,14 @@ TEST(Inv, RemoveScroll_belt)
{ {
// Clear the belt // Clear the belt
for (int i = 0; i < MAXBELTITEMS; i++) { for (int i = 0; i < MAXBELTITEMS; i++) {
Players[MyPlayerId].SpdList[i]._itype = ITYPE_NONE; Players[MyPlayerId].SpdList[i]._itype = ItemType::None;
} }
// Put a firebolt scroll into the belt // Put a firebolt scroll into the belt
Players[MyPlayerId]._pSpell = static_cast<spell_id>(SPL_FIREBOLT); Players[MyPlayerId]._pSpell = static_cast<spell_id>(SPL_FIREBOLT);
Players[MyPlayerId].SpdList[3]._itype = ITYPE_MISC; Players[MyPlayerId].SpdList[3]._itype = ItemType::Misc;
Players[MyPlayerId].SpdList[3]._iMiscId = IMISC_SCROLL; Players[MyPlayerId].SpdList[3]._iMiscId = IMISC_SCROLL;
Players[MyPlayerId].SpdList[3]._iSpell = SPL_FIREBOLT; Players[MyPlayerId].SpdList[3]._iSpell = SPL_FIREBOLT;
RemoveScroll(Players[MyPlayerId]); RemoveScroll(Players[MyPlayerId]);
EXPECT_EQ(Players[MyPlayerId].SpdList[3]._itype, ITYPE_NONE); EXPECT_EQ(Players[MyPlayerId].SpdList[3]._itype, ItemType::None);
} }

392
test/pack_test.cpp

@ -43,7 +43,7 @@ static void ComparePackedItems(const ItemPack *item1, const ItemPack *item2)
} }
typedef struct TestItemStruct { typedef struct TestItemStruct {
char _iIName[64]; char _iIName[64];
int _itype; ItemType _itype;
int _iClass; int _iClass;
int _iCurs; int _iCurs;
int _iIvalue; int _iIvalue;
@ -231,98 +231,98 @@ const ItemPack PackedDiabloItems[] = {
const TestItemStruct DiabloItems[] = { const TestItemStruct DiabloItems[] = {
// clang-format off // clang-format off
//_iIName, _itype, _iClass, _iCurs, _iIvalue, _iMinDam, _iMaxDam, _iAC, _iFlags, _iMiscId, _iSpell, _iCharges, _iMaxCharges, _iDurability, _iMaxDur, _iPLDam, _iPLToHit, _iPLAC, _iPLStr, _iPLMag, _iPLDex, _iPLVit, _iPLFR, _iPLLR, _iPLMR, _iPLMana, _iPLHP, _iPLDamMod, _iPLGetHit, _iPLLight, _iSplLvlAdd, _iUid, _iFMinDam, _iFMaxDam, _iLMinDam, _iLMaxDam, _iPrePower, _iSufPower, _iMinStr, _iMinMag, _iMinDex, IDidx ); //_iIName, _itype, _iClass, _iCurs, _iIvalue, _iMinDam, _iMaxDam, _iAC, _iFlags, _iMiscId, _iSpell, _iCharges, _iMaxCharges, _iDurability, _iMaxDur, _iPLDam, _iPLToHit, _iPLAC, _iPLStr, _iPLMag, _iPLDex, _iPLVit, _iPLFR, _iPLLR, _iPLMR, _iPLMana, _iPLHP, _iPLDamMod, _iPLGetHit, _iPLLight, _iSplLvlAdd, _iUid, _iFMinDam, _iFMaxDam, _iLMinDam, _iLMaxDam, _iPrePower, _iSufPower, _iMinStr, _iMinMag, _iMinDex, IDidx );
{ "Amber Great Helm of harmony", 7, 2, 98, 21100, 0, 0, 11, 8388608, 0, 0, 0, 0, 60, 60, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 59, 50, 0, 0, 53 }, { "Amber Great Helm of harmony", ItemType::Helm, 2, 98, 21100, 0, 0, 11, 8388608, 0, 0, 0, 0, 60, 60, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 59, 50, 0, 0, 53 },
{ "Cobalt Amulet of giants", 13, 3, 45, 26840, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 19, 0, 0, 0, 159 }, { "Cobalt Amulet of giants", ItemType::Amulet, 3, 45, 26840, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 19, 0, 0, 0, 159 },
{ "Brutal Long Sword of gore", 1, 1, 60, 13119, 2, 10, 0, 0, 0, 0, 0, 0, 38, 40, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 2, 61, 30, 0, 30, 125 }, { "Brutal Long Sword of gore", ItemType::Sword, 1, 60, 13119, 2, 10, 0, 0, 0, 0, 0, 0, 38, 40, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 2, 61, 30, 0, 30, 125 },
{ "Demonspike Coat", 9, 2, 151, 251175, 0, 0, 100, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 10, 0, 0, 0, 50, 0, 0, 0, 0, 0, -6, 0, 0, 78, 0, 0, 0, 0, -1, -1, 90, 0, 0, 70 }, { "Demonspike Coat", ItemType::HeavyArmor, 2, 151, 251175, 0, 0, 100, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 10, 0, 0, 0, 50, 0, 0, 0, 0, 0, -6, 0, 0, 78, 0, 0, 0, 0, -1, -1, 90, 0, 0, 70 },
{ "Steel Ring of the jaguar", 12, 3, 12, 10600, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 156 }, { "Steel Ring of the jaguar", ItemType::Ring, 3, 12, 10600, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 156 },
{ "Ring of the heavens", 12, 3, 12, 37552, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 27, 0, 0, 0, 156 }, { "Ring of the heavens", ItemType::Ring, 3, 12, 37552, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 27, 0, 0, 0, 156 },
{ "Ring of sorcery", 12, 3, 12, 10200, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 21, 0, 0, 0, 158 }, { "Ring of sorcery", ItemType::Ring, 3, 12, 10200, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 21, 0, 0, 0, 158 },
{ "Tower Shield of the ages", 5, 2, 132, 4850, 0, 0, 18, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 37, 60, 0, 0, 75 }, { "Tower Shield of the ages", ItemType::Shield, 2, 132, 4850, 0, 0, 18, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 37, 60, 0, 0, 75 },
{ "Sapphire Large Shield", 5, 2, 147, 21000, 0, 0, 7, 0, 0, 0, 0, 0, 12, 32, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, -1, 40, 0, 0, 73 }, { "Sapphire Large Shield", ItemType::Shield, 2, 147, 21000, 0, 0, 7, 0, 0, 0, 0, 0, 12, 32, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, -1, 40, 0, 0, 73 },
{ "Scroll of Town Portal", 0, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 27 }, { "Scroll of Town Portal", ItemType::Misc, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 27 },
{ "Potion of Mana", 0, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 }, { "Potion of Mana", ItemType::Misc, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 },
{ "Potion of Mana", 0, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 79 }, { "Potion of Mana", ItemType::Misc, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 79 },
{ "Potion of Full Mana", 0, 3, 0, 150, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 30 }, { "Potion of Full Mana", ItemType::Misc, 3, 0, 150, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 30 },
{ "Potion of Healing", 0, 3, 32, 50, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 24 }, { "Potion of Healing", ItemType::Misc, 3, 32, 50, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 24 },
{ "Potion of Full Healing", 0, 3, 35, 150, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 29 }, { "Potion of Full Healing", ItemType::Misc, 3, 35, 150, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 29 },
{ "Short Bow", 3, 1, 118, 100, 1, 4, 0, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 4 }, { "Short Bow", ItemType::Bow, 1, 118, 100, 1, 4, 0, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 4 },
{ "Jade Great Helm of the wolf", 7, 2, 98, 22310, 0, 0, 14, 0, 0, 0, 0, 0, 56, 60, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 0, 2112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 31, 50, 0, 0, 53 }, { "Jade Great Helm of the wolf", ItemType::Helm, 2, 98, 22310, 0, 0, 14, 0, 0, 0, 0, 0, 56, 60, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 0, 2112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 31, 50, 0, 0, 53 },
{ "Steel Ring of accuracy", 12, 3, 12, 13400, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 156 }, { "Steel Ring of accuracy", ItemType::Ring, 3, 12, 13400, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 156 },
{ "Blood Stone", 0, 5, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 21 }, { "Blood Stone", ItemType::Misc, 5, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 21 },
{ "Ring of power", 12, 3, 12, 6400, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 19, 0, 0, 0, 156 }, { "Ring of power", ItemType::Ring, 3, 12, 6400, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 19, 0, 0, 0, 156 },
{ "Gold Amulet of accuracy", 13, 3, 45, 20896, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 159 }, { "Gold Amulet of accuracy", ItemType::Amulet, 3, 45, 20896, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 159 },
{ "Bastard Sword of the bat", 1, 1, 57, 10500, 6, 15, 0, 8192, 0, 0, 0, 0, 25, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 55, 50, 0, 0, 127 }, { "Bastard Sword of the bat", ItemType::Sword, 1, 57, 10500, 6, 15, 0, 8192, 0, 0, 0, 0, 25, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 55, 50, 0, 0, 127 },
{ "Small Shield", 5, 2, 105, 90, 0, 0, 3, 0, 0, 0, 0, 0, 14, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 25, 0, 0, 72 }, { "Small Shield", ItemType::Shield, 2, 105, 90, 0, 0, 3, 0, 0, 0, 0, 0, 14, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 25, 0, 0, 72 },
{ "Breast Plate of giants", 9, 2, 153, 23250, 0, 0, 20, 0, 0, 0, 0, 0, 44, 80, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 19, 40, 0, 0, 65 }, { "Breast Plate of giants", ItemType::HeavyArmor, 2, 153, 23250, 0, 0, 20, 0, 0, 0, 0, 0, 44, 80, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 19, 40, 0, 0, 65 },
{ "Scroll of Healing", 0, 3, 1, 50, 0, 0, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 91 }, { "Scroll of Healing", ItemType::Misc, 3, 1, 50, 0, 0, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 91 },
{ "Potion of Rejuvenation", 0, 3, 37, 120, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 81 }, { "Potion of Rejuvenation", ItemType::Misc, 3, 37, 120, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 81 },
{ "Potion of Rejuvenation", 0, 3, 37, 120, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 81 }, { "Potion of Rejuvenation", ItemType::Misc, 3, 37, 120, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 81 },
{ "Potion of Full Rejuvenation", 0, 3, 33, 600, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 82 }, { "Potion of Full Rejuvenation", ItemType::Misc, 3, 33, 600, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 82 },
{ "Savage Composite Bow of perfection", 3, 1, 133, 23438, 3, 6, 0, 0, 0, 0, 0, 0, 45, 45, 117, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 23, 25, 0, 40, 146 }, { "Savage Composite Bow of perfection", ItemType::Bow, 1, 133, 23438, 3, 6, 0, 0, 0, 0, 0, 0, 45, 45, 117, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 23, 25, 0, 40, 146 },
{ "Falchion", 1, 1, 62, 250, 4, 8, 0, 0, 0, 0, 0, 0, 10, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 30, 0, 0, 120 }, { "Falchion", ItemType::Sword, 1, 62, 250, 4, 8, 0, 0, 0, 0, 0, 0, 10, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 30, 0, 0, 120 },
{ "Long Sword of vim", 1, 1, 60, 4400, 2, 10, 0, 0, 0, 0, 0, 0, 18, 40, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 25, 30, 0, 30, 125 }, { "Long Sword of vim", ItemType::Sword, 1, 60, 4400, 2, 10, 0, 0, 0, 0, 0, 0, 18, 40, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 25, 30, 0, 30, 125 },
{ "Frog's Staff of Holy Bolt", 10, 1, 109, 1, 2, 4, 0, 0, 23, 31, 60, 60, 10, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, -1, 0, 20, 0, 151 }, { "Frog's Staff of Holy Bolt", ItemType::Staff, 1, 109, 1, 2, 4, 0, 0, 23, 31, 60, 60, 10, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, -1, 0, 20, 0, 151 },
{ "Short Staff of Charged Bolt", 10, 1, 109, 520, 2, 4, 0, 0, 23, 30, 9, 40, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 20, 0, 166 }, { "Short Staff of Charged Bolt", ItemType::Staff, 1, 109, 520, 2, 4, 0, 0, 23, 30, 9, 40, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 20, 0, 166 },
{ "Staff of Charged Bolt", 10, 1, 109, 1, 2, 4, 0, 0, 23, 30, 50, 50, 18, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 25, 0, 151 }, { "Staff of Charged Bolt", ItemType::Staff, 1, 109, 1, 2, 4, 0, 0, 23, 30, 50, 50, 18, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 25, 0, 151 },
{ "Cap of the mind", 7, 2, 91, 1845, 0, 0, 2, 0, 0, 0, 0, 0, 12, 15, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 21, 0, 0, 0, 48 }, { "Cap of the mind", ItemType::Helm, 2, 91, 1845, 0, 0, 2, 0, 0, 0, 0, 0, 12, 15, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 21, 0, 0, 0, 48 },
{ "Quilted Armor of protection", 6, 2, 129, 1200, 0, 0, 7, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, -1, 30, 0, 0, 0, 58 }, { "Quilted Armor of protection", ItemType::LightArmor, 2, 129, 1200, 0, 0, 7, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, -1, 30, 0, 0, 0, 58 },
{ "Empyrean Band", 12, 3, 18, 8000, 0, 0, 0, 270532608, 27, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, -1, -1, 0, 0, 0, 8 }, { "Empyrean Band", ItemType::Ring, 3, 18, 8000, 0, 0, 0, 270532608, 27, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, -1, -1, 0, 0, 0, 8 },
{ "Optic Amulet", 13, 3, 44, 9750, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, -1, 2, 0, 3, 0, 0, 0, 0, -1, -1, 0, 0, 0, 10 }, { "Optic Amulet", ItemType::Amulet, 3, 44, 9750, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 20, 0, 0, 0, 0, -1, 2, 0, 3, 0, 0, 0, 0, -1, -1, 0, 0, 0, 10 },
{ "Ring of Truth", 12, 3, 10, 9100, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 640, 0, -1, 0, 0, 4, 0, 0, 0, 0, -1, -1, 0, 0, 0, 11 }, { "Ring of Truth", ItemType::Ring, 3, 10, 9100, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 640, 0, -1, 0, 0, 4, 0, 0, 0, 0, -1, -1, 0, 0, 0, 11 },
{ "Harlequin Crest", 7, 2, 81, 4000, 0, 0, -3, 0, 27, 0, 0, 0, 15, 15, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 448, 448, 0, -1, 0, 0, 5, 0, 0, 0, 0, -1, -1, 0, 0, 0, 13 }, { "Harlequin Crest", ItemType::Helm, 2, 81, 4000, 0, 0, -3, 0, 27, 0, 0, 0, 15, 15, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 448, 448, 0, -1, 0, 0, 5, 0, 0, 0, 0, -1, -1, 0, 0, 0, 13 },
{ "Veil of Steel", 7, 2, 85, 63800, 0, 0, 18, 0, 27, 0, 0, 0, 60, 60, 0, 0, 60, 15, 0, 0, 15, 50, 50, 50, -1920, 0, 0, 0, -2, 0, 6, 0, 0, 0, 0, -1, -1, 0, 0, 0, 14 }, { "Veil of Steel", ItemType::Helm, 2, 85, 63800, 0, 0, 18, 0, 27, 0, 0, 0, 60, 60, 0, 0, 60, 15, 0, 0, 15, 50, 50, 50, -1920, 0, 0, 0, -2, 0, 6, 0, 0, 0, 0, -1, -1, 0, 0, 0, 14 },
{ "Arkaine's Valor", 8, 2, 157, 42000, 0, 0, 25, 8388608, 27, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, -3, 0, 0, 7, 0, 0, 0, 0, -1, -1, 0, 0, 0, 28 }, { "Arkaine's Valor", ItemType::MediumArmor, 2, 157, 42000, 0, 0, 25, 8388608, 27, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, -3, 0, 0, 7, 0, 0, 0, 0, -1, -1, 0, 0, 0, 28 },
{ "Griswold's Edge", 1, 1, 61, 42000, 4, 12, 0, 264208, 27, 0, 0, 0, 42, 44, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1280, -1280, 0, 0, 0, 0, 8, 1, 10, 0, 0, -1, -1, 40, 0, 0, 31 }, { "Griswold's Edge", ItemType::Sword, 1, 61, 42000, 4, 12, 0, 264208, 27, 0, 0, 0, 42, 44, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1280, -1280, 0, 0, 0, 0, 8, 1, 10, 0, 0, -1, -1, 40, 0, 0, 31 },
{ "War Staff of haste", 10, 1, 124, 40000, 8, 16, 0, 1048576, 23, 0, 0, 0, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 58, 30, 0, 0, 155 }, { "War Staff of haste", ItemType::Staff, 1, 124, 40000, 8, 16, 0, 1048576, 23, 0, 0, 0, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 58, 30, 0, 0, 155 },
{ "White Staff of Lightning", 10, 1, 124, 7160, 8, 16, 0, 0, 23, 3, 56, 56, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, -1, 30, 20, 0, 155 }, { "White Staff of Lightning", ItemType::Staff, 1, 124, 7160, 8, 16, 0, 0, 23, 3, 56, 56, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, -1, 30, 20, 0, 155 },
{ "Lightning Maul", 4, 1, 122, 11800, 6, 20, 0, 32, 0, 0, 0, 0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20, 17, -1, 55, 0, 0, 142 }, { "Lightning Maul", ItemType::Mace, 1, 122, 11800, 6, 20, 0, 32, 0, 0, 0, 0, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20, 17, -1, 55, 0, 0, 142 },
{ "Ivory Great Axe of blood", 2, 1, 143, 31194, 12, 30, 0, 65536, 0, 0, 0, 0, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 56, 80, 0, 0, 135 }, { "Ivory Great Axe of blood", ItemType::Axe, 1, 143, 31194, 12, 30, 0, 65536, 0, 0, 0, 0, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 56, 80, 0, 0, 135 },
{ "Jade Crown of vim", 7, 2, 95, 19200, 0, 0, 10, 0, 0, 0, 0, 0, 18, 40, 0, 0, 0, 0, 0, 0, 14, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 25, 0, 0, 0, 52 }, { "Jade Crown of vim", ItemType::Helm, 2, 95, 19200, 0, 0, 10, 0, 0, 0, 0, 0, 18, 40, 0, 0, 0, 0, 0, 0, 14, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 25, 0, 0, 0, 52 },
{ "Short Bow of atrophy", 3, 1, 118, 1, 1, 4, 0, 0, 0, 0, 0, 0, 16, 30, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 24, 0, 0, 0, 143 }, { "Short Bow of atrophy", ItemType::Bow, 1, 118, 1, 1, 4, 0, 0, 0, 0, 0, 0, 16, 30, 0, 0, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 24, 0, 0, 0, 143 },
{ "Brass Dagger of weakness", 1, 1, 51, 1, 1, 4, 0, 0, 0, 0, 0, 0, 11, 16, 0, -1, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 0, 0, 0, 118 }, { "Brass Dagger of weakness", ItemType::Sword, 1, 51, 1, 1, 4, 0, 0, 0, 0, 0, 0, 11, 16, 0, -1, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20, 0, 0, 0, 118 },
{ "Clumsy Short Bow", 3, 1, 118, 1, 1, 4, 0, 0, 0, 0, 0, 0, 16, 30, -67, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, -1, 0, 0, 0, 143 }, { "Clumsy Short Bow", ItemType::Bow, 1, 118, 1, 1, 4, 0, 0, 0, 0, 0, 0, 16, 30, -67, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, -1, 0, 0, 0, 143 },
{ "Tin Short Sword of the fool", 1, 1, 64, 1, 2, 6, 0, 0, 0, 0, 0, 0, 17, 24, 0, -7, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 22, 18, 0, 0, 119 }, { "Tin Short Sword of the fool", ItemType::Sword, 1, 64, 1, 2, 6, 0, 0, 0, 0, 0, 0, 17, 24, 0, -7, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 22, 18, 0, 0, 119 },
{ "Club of paralysis", 4, 1, 66, 1, 1, 6, 0, 0, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 24, 0, 0, 0, 140 }, { "Club of paralysis", ItemType::Mace, 1, 66, 1, 1, 6, 0, 0, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 0, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 24, 0, 0, 0, 140 },
{ "Dull Staff of Lightning", 10, 1, 109, 1, 2, 4, 0, 0, 23, 3, 46, 46, 18, 25, -28, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, -1, 0, 20, 0, 151 }, { "Dull Staff of Lightning", ItemType::Staff, 1, 109, 1, 2, 4, 0, 0, 23, 3, 46, 46, 18, 25, -28, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, -1, 0, 20, 0, 151 },
{ "Falchion of speed", 1, 1, 62, 10000, 4, 8, 0, 524288, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 58, 30, 0, 0, 120 }, { "Falchion of speed", ItemType::Sword, 1, 62, 10000, 4, 8, 0, 524288, 0, 0, 0, 0, 6, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 58, 30, 0, 0, 120 },
{ "Bent Falchion", 1, 1, 62, 1, 4, 8, 0, 0, 0, 0, 0, 0, 14, 20, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 30, 0, 0, 120 }, { "Bent Falchion", ItemType::Sword, 1, 62, 1, 4, 8, 0, 0, 0, 0, 0, 0, 14, 20, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 30, 0, 0, 120 },
{ "Plentiful Staff of Firebolt", 10, 1, 109, 3040, 2, 4, 0, 0, 23, 1, 98, 98, 13, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, -1, 0, 15, 0, 151 }, { "Plentiful Staff of Firebolt", ItemType::Staff, 1, 109, 3040, 2, 4, 0, 0, 23, 1, 98, 98, 13, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, -1, 0, 15, 0, 151 },
{ "Dagger of illness", 1, 1, 51, 1, 1, 4, 0, 0, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 26, 0, 0, 0, 118 }, { "Dagger of illness", ItemType::Sword, 1, 51, 1, 1, 4, 0, 0, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 26, 0, 0, 0, 118 },
{ "Cape of corruption", 6, 2, 150, 1, 0, 0, 3, 134217728, 0, 0, 0, 0, 4, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 46, 0, 0, 0, 54 }, { "Cape of corruption", ItemType::LightArmor, 2, 150, 1, 0, 0, 3, 134217728, 0, 0, 0, 0, 4, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 46, 0, 0, 0, 54 },
{ "Sabre of trouble", 1, 1, 67, 1, 1, 8, 0, 0, 0, 0, 0, 0, 33, 45, 0, 0, 0, -6, -6, -6, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 28, 17, 0, 0, 124 }, { "Sabre of trouble", ItemType::Sword, 1, 67, 1, 1, 8, 0, 0, 0, 0, 0, 0, 33, 45, 0, 0, 0, -6, -6, -6, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 28, 17, 0, 0, 124 },
{ "Cap of tears", 7, 2, 91, 1, 0, 0, 2, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -1, 29, 0, 0, 0, 48 }, { "Cap of tears", ItemType::Helm, 2, 91, 1, 0, 0, 2, 0, 0, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -1, 29, 0, 0, 0, 48 },
{ "Tin Club", 4, 1, 66, 1, 1, 6, 0, 0, 0, 0, 0, 0, 14, 20, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 140 }, { "Tin Club", ItemType::Mace, 1, 66, 1, 1, 6, 0, 0, 0, 0, 0, 0, 14, 20, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 140 },
{ "Rusted Cape of dyslexia", 6, 2, 150, 1, 0, 0, 2, 0, 0, 0, 0, 0, 9, 12, 0, 0, -34, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 22, 0, 0, 0, 54 }, { "Rusted Cape of dyslexia", ItemType::LightArmor, 2, 150, 1, 0, 0, 2, 0, 0, 0, 0, 0, 9, 12, 0, 0, -34, 0, -4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 22, 0, 0, 0, 54 },
{ "Cap of pain", 7, 2, 91, 1, 0, 0, 2, 0, 0, 0, 0, 0, 10, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, -1, 29, 0, 0, 0, 48 }, { "Cap of pain", ItemType::Helm, 2, 91, 1, 0, 0, 2, 0, 0, 0, 0, 0, 10, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, -1, 29, 0, 0, 0, 48 },
{ "Clumsy Sabre of fragility", 1, 1, 67, 1, 1, 8, 0, 0, 0, 0, 0, 0, 1, 1, -75, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 36, 17, 0, 0, 124 }, { "Clumsy Sabre of fragility", ItemType::Sword, 1, 67, 1, 1, 8, 0, 0, 0, 0, 0, 0, 1, 1, -75, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 36, 17, 0, 0, 124 },
{ "Vulnerable Cap of health", 7, 2, 91, 185, 0, 0, 1, 0, 0, 0, 0, 0, 5, 15, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 7, 30, 0, 0, 0, 48 }, { "Vulnerable Cap of health", ItemType::Helm, 2, 91, 185, 0, 0, 1, 0, 0, 0, 0, 0, 5, 15, 0, 0, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 7, 30, 0, 0, 0, 48 },
{ "Useless Dagger", 1, 1, 51, 1, 1, 4, 0, 0, 0, 0, 0, 0, 5, 16, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 118 }, { "Useless Dagger", ItemType::Sword, 1, 51, 1, 1, 4, 0, 0, 0, 0, 0, 0, 5, 16, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 118 },
{ "Bountiful Staff of Fire Wall", 10, 1, 109, 5970, 2, 4, 0, 0, 23, 6, 36, 36, 17, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, -1, 0, 27, 0, 151 }, { "Bountiful Staff of Fire Wall", ItemType::Staff, 1, 109, 5970, 2, 4, 0, 0, 23, 6, 36, 36, 17, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, -1, 0, 27, 0, 151 },
{ "Mace of frailty", 4, 1, 59, 1, 1, 8, 0, 0, 0, 0, 0, 0, 22, 32, 0, 0, 0, -7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 20, 16, 0, 0, 136 }, { "Mace of frailty", ItemType::Mace, 1, 59, 1, 1, 8, 0, 0, 0, 0, 0, 0, 22, 32, 0, 0, 0, -7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 20, 16, 0, 0, 136 },
{ "Weak Short Bow", 3, 1, 118, 1, 1, 4, 0, 0, 0, 0, 0, 0, 20, 30, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 143 }, { "Weak Short Bow", ItemType::Bow, 1, 118, 1, 1, 4, 0, 0, 0, 0, 0, 0, 20, 30, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 0, 0, 0, 143 },
{ "Short Staff of readiness", 10, 1, 109, 2060, 2, 4, 0, 131072, 23, 0, 0, 0, 12, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 58, 0, 0, 0, 151 }, { "Short Staff of readiness", ItemType::Staff, 1, 109, 2060, 2, 4, 0, 131072, 23, 0, 0, 0, 12, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 58, 0, 0, 0, 151 },
{ "Potion of Healing", 0, 3, 32, 50, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 24 }, { "Potion of Healing", ItemType::Misc, 3, 32, 50, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 24 },
{ "Potion of Full Healing", 0, 3, 35, 150, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 29 }, { "Potion of Full Healing", ItemType::Misc, 3, 35, 150, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 29 },
{ "Potion of Mana", 0, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 }, { "Potion of Mana", ItemType::Misc, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 },
{ "Potion of Full Mana", 0, 3, 0, 150, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 30 }, { "Potion of Full Mana", ItemType::Misc, 3, 0, 150, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 30 },
{ "Scroll of Town Portal", 0, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 27 }, { "Scroll of Town Portal", ItemType::Misc, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 27 },
{ "The Rift Bow", 3, 1, 118, 1800, 1, 4, 0, 4, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 0, -1, -1, 0, 0, 0, 143 }, { "The Rift Bow", ItemType::Bow, 1, 118, 1800, 1, 4, 0, 4, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 0, -1, -1, 0, 0, 0, 143 },
{ "The Grandfather", 1, 1, 161, 119800, 10, 20, 0, 0, 0, 0, 0, 0, 100, 100, 70, 20, 0, 5, 5, 5, 5, 0, 0, 0, 0, 1280, 0, 0, 0, 0, 35, 0, 0, 0, 0, -1, -1, 75, 0, 0, 129 }, { "The Grandfather", ItemType::Sword, 1, 161, 119800, 10, 20, 0, 0, 0, 0, 0, 0, 100, 100, 70, 20, 0, 5, 5, 5, 5, 0, 0, 0, 0, 1280, 0, 0, 0, 0, 35, 0, 0, 0, 0, -1, -1, 75, 0, 0, 129 },
{ "Gothic Shield of thorns", 5, 2, 148, 5100, 0, 0, 18, 67108864, 0, 0, 0, 0, 17, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 45, 80, 0, 0, 76 }, { "Gothic Shield of thorns", ItemType::Shield, 2, 148, 5100, 0, 0, 18, 67108864, 0, 0, 0, 0, 17, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 45, 80, 0, 0, 76 },
{ "Naj's Light Plate", 9, 2, 159, 78700, 0, 0, 50, 0, 0, 0, 0, 0, 75, 75, 0, 0, 0, 0, 5, 0, 0, 20, 20, 20, 1280, 0, 0, 0, 0, 1, 77, 0, 0, 0, 0, -1, -1, 0, 0, 0, 67 }, { "Naj's Light Plate", ItemType::HeavyArmor, 2, 159, 78700, 0, 0, 50, 0, 0, 0, 0, 0, 75, 75, 0, 0, 0, 0, 5, 0, 0, 20, 20, 20, 1280, 0, 0, 0, 0, 1, 77, 0, 0, 0, 0, -1, -1, 0, 0, 0, 67 },
{ "Constricting Ring", 12, 3, 14, 62000, 0, 0, 0, 64, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, -1, -1, 0, 0, 0, 156 }, { "Constricting Ring", ItemType::Ring, 3, 14, 62000, 0, 0, 0, 64, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, -1, -1, 0, 0, 0, 156 },
{ "Gotterdamerung", 7, 2, 85, 54900, 0, 0, 60, 2147483648, 0, 0, 0, 0, 60, 60, 0, 0, 0, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, -4, -4, 0, 67, 0, 0, 0, 0, -1, -1, 50, 0, 0, 53 }, { "Gotterdamerung", ItemType::Helm, 2, 85, 54900, 0, 0, 60, 2147483648, 0, 0, 0, 0, 60, 60, 0, 0, 0, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, -4, -4, 0, 67, 0, 0, 0, 0, -1, -1, 50, 0, 0, 53 },
{ "King's Bastard Sword", 1, 1, 57, 69730, 6, 15, 0, 0, 0, 0, 0, 0, 32, 60, 168, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -1, 50, 0, 0, 127 }, { "King's Bastard Sword", ItemType::Sword, 1, 57, 69730, 6, 15, 0, 0, 0, 0, 0, 0, 32, 60, 168, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -1, 50, 0, 0, 127 },
{ "Champion's Club of gore", 4, 1, 66, 25576, 1, 6, 0, 0, 0, 0, 0, 0, 60, 60, 141, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 4, 61, 0, 0, 0, 140 }, { "Champion's Club of gore", ItemType::Mace, 1, 66, 25576, 1, 6, 0, 0, 0, 0, 0, 0, 60, 60, 141, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 4, 61, 0, 0, 0, 140 },
{ "Master's Flail", 4, 1, 131, 27340, 2, 12, 0, 0, 0, 0, 0, 0, 60, 60, 123, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -1, 30, 0, 0, 141 }, { "Master's Flail", ItemType::Mace, 1, 131, 27340, 2, 12, 0, 0, 0, 0, 0, 0, 60, 60, 123, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -1, 30, 0, 0, 141 },
{ "Knight's Broad Sword", 1, 1, 61, 27597, 4, 12, 0, 0, 0, 0, 0, 0, 60, 60, 108, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -1, 40, 0, 0, 126 }, { "Knight's Broad Sword", ItemType::Sword, 1, 61, 27597, 4, 12, 0, 0, 0, 0, 0, 0, 60, 60, 108, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -1, 40, 0, 0, 126 },
{ "Lord's Falchion of precision", 1, 1, 62, 17025, 4, 8, 0, 0, 0, 0, 0, 0, 13, 20, 88, 23, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 23, 30, 0, 0, 120 }, { "Lord's Falchion of precision", ItemType::Sword, 1, 62, 17025, 4, 8, 0, 0, 0, 0, 0, 0, 13, 20, 88, 23, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 23, 30, 0, 0, 120 },
{ "Soldier's Bastard Sword of vigor", 1, 1, 57, 31600, 6, 15, 0, 0, 0, 0, 0, 0, 60, 60, 66, 19, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 25, 50, 0, 0, 127 }, { "Soldier's Bastard Sword of vigor", ItemType::Sword, 1, 57, 31600, 6, 15, 0, 0, 0, 0, 0, 0, 60, 60, 66, 19, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 25, 50, 0, 0, 127 },
{ "Fine Long Bow of the pit", 3, 1, 102, 2152, 1, 6, 0, 0, 0, 0, 0, 0, 35, 35, 49, 10, 0, -2, -2, -2, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 28, 25, 0, 30, 145 }, { "Fine Long Bow of the pit", ItemType::Bow, 1, 102, 2152, 1, 6, 0, 0, 0, 0, 0, 0, 35, 35, 49, 10, 0, -2, -2, -2, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 28, 25, 0, 30, 145 },
{ "Sharp Long Sword of atrophy", 1, 1, 60, 1958, 2, 10, 0, 0, 0, 0, 0, 0, 24, 40, 34, 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 24, 30, 0, 30, 125 }, { "Sharp Long Sword of atrophy", ItemType::Sword, 1, 60, 1958, 2, 10, 0, 0, 0, 0, 0, 0, 24, 40, 34, 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 24, 30, 0, 30, 125 },
{ "Emerald Long War Bow of burning", 3, 1, 119, 107000, 1, 14, 0, 8, 0, 0, 0, 0, 60, 60, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 11, 42, 45, 0, 80, 150 }, { "Emerald Long War Bow of burning", ItemType::Bow, 1, 119, 107000, 1, 14, 0, 8, 0, 0, 0, 0, 60, 60, 0, 0, 0, 0, 0, 0, 0, 50, 50, 50, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 11, 42, 45, 0, 80, 150 },
// clang-format on // clang-format on
}; };
@ -359,7 +359,7 @@ TEST(pack, UnPackItem_diablo_unique_bug)
Item id; Item id;
UnPackItem(&pkItemBug, &id, false); UnPackItem(&pkItemBug, &id, false);
ASSERT_STREQ(id._iIName, "Veil of Steel"); ASSERT_STREQ(id._iIName, "Veil of Steel");
ASSERT_EQ(id._itype, ITYPE_HELM); ASSERT_EQ(id._itype, ItemType::Helm);
ASSERT_EQ(id._iClass, ICLASS_ARMOR); ASSERT_EQ(id._iClass, ICLASS_ARMOR);
ASSERT_EQ(id._iCurs, 85); ASSERT_EQ(id._iCurs, 85);
ASSERT_EQ(id._iIvalue, 63800); ASSERT_EQ(id._iIvalue, 63800);
@ -391,9 +391,9 @@ const ItemPack PackedSpawnItems[] = {
const TestItemStruct SpawnItems[] = { const TestItemStruct SpawnItems[] = {
// clang-format off // clang-format off
//_iIName, _itype, _iClass, _iCurs, _iIvalue, _iMinDam, _iMaxDam, _iAC, _iFlags, _iMiscId, _iSpell, _iCharges, _iMaxCharges, _iDurability, _iMaxDur, _iPLDam, _iPLToHit, _iPLAC, _iPLStr, _iPLMag, _iPLDex, _iPLVit, _iPLFR, _iPLLR, _iPLMR, _iPLMana, _iPLHP, _iPLDamMod, _iPLGetHit, _iPLLight, _iSplLvlAdd, _iUid, _iFMinDam, _iFMaxDam, _iLMinDam, _iLMaxDam, _iPrePower, _iSufPower, _iMinStr, _iMinMag, _iMinDex, IDidx ); //_iIName, _itype, _iClass, _iCurs, _iIvalue, _iMinDam, _iMaxDam, _iAC, _iFlags, _iMiscId, _iSpell, _iCharges, _iMaxCharges, _iDurability, _iMaxDur, _iPLDam, _iPLToHit, _iPLAC, _iPLStr, _iPLMag, _iPLDex, _iPLVit, _iPLFR, _iPLLR, _iPLMR, _iPLMana, _iPLHP, _iPLDamMod, _iPLGetHit, _iPLLight, _iSplLvlAdd, _iUid, _iFMinDam, _iFMaxDam, _iLMinDam, _iLMaxDam, _iPrePower, _iSufPower, _iMinStr, _iMinMag, _iMinDex, IDidx );
{ "Staff of Firebolt", 10, 1, 109, 1, 2, 4, 0, 0, 23, 1, 50, 50, 11, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 15, 0, 151 }, { "Staff of Firebolt", ItemType::Staff, 1, 109, 1, 2, 4, 0, 0, 23, 1, 50, 50, 11, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 15, 0, 151 },
{ "Book of Holy Bolt", 0, 3, 86, 1000, 0, 0, 0, 0, 24, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 20, 0, 114 }, { "Book of Holy Bolt", ItemType::Misc, 3, 86, 1000, 0, 0, 0, 0, 24, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 20, 0, 114 },
// clang-format on // clang-format on
}; };
@ -431,12 +431,12 @@ const ItemPack PackedDiabloMPItems[] = {
const TestItemStruct DiabloMPItems[] = { const TestItemStruct DiabloMPItems[] = {
// clang-format off // clang-format off
//_iIName, _itype, _iClass, _iCurs, _iIvalue, _iMinDam, _iMaxDam, _iAC, _iFlags, _iMiscId, _iSpell, _iCharges, _iMaxCharges, _iDurability, _iMaxDur, _iPLDam, _iPLToHit, _iPLAC, _iPLStr, _iPLMag, _iPLDex, _iPLVit, _iPLFR, _iPLLR, _iPLMR, _iPLMana, _iPLHP, _iPLDamMod, _iPLGetHit, _iPLLight, _iSplLvlAdd, _iUid, _iFMinDam, _iFMaxDam, _iLMinDam, _iLMaxDam, _iPrePower, _iSufPower, _iMinStr, _iMinMag, _iMinDex, IDidx ); //_iIName, _itype, _iClass, _iCurs, _iIvalue, _iMinDam, _iMaxDam, _iAC, _iFlags, _iMiscId, _iSpell, _iCharges, _iMaxCharges, _iDurability, _iMaxDur, _iPLDam, _iPLToHit, _iPLAC, _iPLStr, _iPLMag, _iPLDex, _iPLVit, _iPLFR, _iPLLR, _iPLMR, _iPLMana, _iPLHP, _iPLDamMod, _iPLGetHit, _iPLLight, _iSplLvlAdd, _iUid, _iFMinDam, _iFMaxDam, _iLMinDam, _iLMaxDam, _iPrePower, _iSufPower, _iMinStr, _iMinMag, _iMinDex, IDidx );
{ "Book of Firebolt", 0, 3, 87, 1000, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 15, 0, 114 }, { "Book of Firebolt", ItemType::Misc, 3, 87, 1000, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 15, 0, 114 },
{ "Scroll of Resurrect", 0, 3, 1, 250, 0, 0, 0, 0, 22, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 34 }, { "Scroll of Resurrect", ItemType::Misc, 3, 1, 250, 0, 0, 0, 0, 22, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 34 },
{ "Potion of Healing", 0, 3, 32, 50, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 24 }, { "Potion of Healing", ItemType::Misc, 3, 32, 50, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 24 },
{ "Scroll of Town Portal", 0, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 27 }, { "Scroll of Town Portal", ItemType::Misc, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 27 },
{ "Potion of Mana", 0, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 }, { "Potion of Mana", ItemType::Misc, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 },
// clang-format on // clang-format on
}; };
@ -558,95 +558,95 @@ const ItemPack PackedHellfireItems[] = {
const TestItemStruct HellfireItems[] = { const TestItemStruct HellfireItems[] = {
// clang-format off // clang-format off
//_iIName, _itype, _iClass, _iCurs, _iIvalue, _iMinDam, _iMaxDam, _iAC, _iFlags, _iMiscId, _iSpell, _iCharges, _iMaxCharges, _iDurability, _iMaxDur, _iPLDam, _iPLToHit, _iPLAC, _iPLStr, _iPLMag, _iPLDex, _iPLVit, _iPLFR, _iPLLR, _iPLMR, _iPLMana, _iPLHP, _iPLDamMod, _iPLGetHit, _iPLLight, _iSplLvlAdd, _iUid, _iFMinDam, _iFMaxDam, _iLMinDam, _iLMaxDam, _iPrePower, _iSufPower, _iMinStr, _iMinMag, _iMinDex, IDidx ); //_iIName, _itype, _iClass, _iCurs, _iIvalue, _iMinDam, _iMaxDam, _iAC, _iFlags, _iMiscId, _iSpell, _iCharges, _iMaxCharges, _iDurability, _iMaxDur, _iPLDam, _iPLToHit, _iPLAC, _iPLStr, _iPLMag, _iPLDex, _iPLVit, _iPLFR, _iPLLR, _iPLMR, _iPLMana, _iPLHP, _iPLDamMod, _iPLGetHit, _iPLLight, _iSplLvlAdd, _iUid, _iFMinDam, _iFMaxDam, _iLMinDam, _iLMaxDam, _iPrePower, _iSufPower, _iMinStr, _iMinMag, _iMinDex, IDidx );
{ "Ring of stability", 12, 3, 12, 8000, 0, 0, 0, 4194304, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 59, 0, 0, 0, 156 }, { "Ring of stability", ItemType::Ring, 3, 12, 8000, 0, 0, 0, 4194304, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 59, 0, 0, 0, 156 },
{ "Ring of precision", 12, 3, 12, 10200, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 23, 0, 0, 0, 157 }, { "Ring of precision", ItemType::Ring, 3, 12, 10200, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 23, 0, 0, 0, 157 },
{ "Obsidian Ring of wizardry", 12, 3, 12, 56928, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 21, 0, 0, 0, 157 }, { "Obsidian Ring of wizardry", ItemType::Ring, 3, 12, 56928, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 37, 37, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 21, 0, 0, 0, 157 },
{ "Ring of precision", 12, 3, 12, 10200, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 23, 0, 0, 0, 158 }, { "Ring of precision", ItemType::Ring, 3, 12, 10200, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 23, 0, 0, 0, 158 },
{ "Amulet of titans", 13, 3, 45, 20896, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 19, 0, 0, 0, 160 }, { "Amulet of titans", ItemType::Amulet, 3, 45, 20896, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 19, 0, 0, 0, 160 },
{ "Gold Amulet", 13, 3, 45, 13692, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 160 }, { "Gold Amulet", ItemType::Amulet, 3, 45, 13692, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 160 },
{ "Messerschmidt's Reaver", 2, 1, 163, 58000, 12, 30, 0, 16, 0, 0, 0, 0, 75, 75, 200, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, -3200, 15, 0, 0, 0, 44, 2, 12, 0, 0, -1, -1, 80, 0, 0, 135 }, { "Messerschmidt's Reaver", ItemType::Axe, 1, 163, 58000, 12, 30, 0, 16, 0, 0, 0, 0, 75, 75, 200, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, -3200, 15, 0, 0, 0, 44, 2, 12, 0, 0, -1, -1, 80, 0, 0, 135 },
{ "Vicious Maul of structure", 4, 1, 122, 10489, 6, 20, 0, 0, 0, 0, 0, 0, 127, 128, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 35, 55, 0, 0, 142 }, { "Vicious Maul of structure", ItemType::Mace, 1, 122, 10489, 6, 20, 0, 0, 0, 0, 0, 0, 127, 128, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 35, 55, 0, 0, 142 },
{ "Short Sword", 1, 1, 64, 120, 2, 6, 0, 0, 0, 0, 0, 0, 15, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 18, 0, 0, 119 }, { "Short Sword", ItemType::Sword, 1, 64, 120, 2, 6, 0, 0, 0, 0, 0, 0, 15, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 18, 0, 0, 119 },
{ "Long Battle Bow of shock", 3, 1, 119, 8000, 1, 10, 0, 33554432, 0, 0, 0, 0, 18, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, -1, 43, 30, 0, 60, 148 }, { "Long Battle Bow of shock", ItemType::Bow, 1, 119, 8000, 1, 10, 0, 33554432, 0, 0, 0, 0, 18, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, -1, 43, 30, 0, 60, 148 },
{ "Short Bow of magic", 3, 1, 118, 400, 1, 4, 0, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 21, 0, 0, 0, 143 }, { "Short Bow of magic", ItemType::Bow, 1, 118, 400, 1, 4, 0, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 21, 0, 0, 0, 143 },
{ "Red Staff of Healing", 10, 1, 123, 1360, 4, 8, 0, 0, 23, 2, 22, 33, 35, 35, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, -1, 0, 17, 0, 152 }, { "Red Staff of Healing", ItemType::Staff, 1, 123, 1360, 4, 8, 0, 0, 23, 2, 22, 33, 35, 35, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, -1, 0, 17, 0, 152 },
{ "Buckler", 5, 2, 83, 30, 0, 0, 5, 0, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 71 }, { "Buckler", ItemType::Shield, 2, 83, 30, 0, 0, 5, 0, 0, 0, 0, 0, 6, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 71 },
{ "Skull Cap", 7, 2, 90, 25, 0, 0, 3, 0, 0, 0, 0, 0, 15, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 49 }, { "Skull Cap", ItemType::Helm, 2, 90, 25, 0, 0, 3, 0, 0, 0, 0, 0, 15, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 49 },
{ "Rags", 6, 2, 128, 5, 0, 0, 4, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 55 }, { "Rags", ItemType::LightArmor, 2, 128, 5, 0, 0, 4, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 55 },
{ "Quilted Armor", 6, 2, 129, 200, 0, 0, 7, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 58 }, { "Quilted Armor", ItemType::LightArmor, 2, 129, 200, 0, 0, 7, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 58 },
{ "Quilted Armor of light", 6, 2, 129, 1150, 0, 0, 10, 0, 0, 0, 0, 0, 12, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, -1, 38, 0, 0, 0, 58 }, { "Quilted Armor of light", ItemType::LightArmor, 2, 129, 1150, 0, 0, 10, 0, 0, 0, 0, 0, 12, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, -1, 38, 0, 0, 0, 58 },
{ "Saintly Plate Mail of the stars", 9, 2, 103, 140729, 0, 0, 46, 0, 0, 0, 0, 0, 75, 75, 0, 0, 121, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 27, 60, 0, 0, 67 }, { "Saintly Plate Mail of the stars", ItemType::HeavyArmor, 2, 103, 140729, 0, 0, 46, 0, 0, 0, 0, 0, 75, 75, 0, 0, 121, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 27, 60, 0, 0, 67 },
{ "Plate Mail of the stars", 9, 2, 103, 77800, 0, 0, 49, 0, 0, 0, 0, 0, 63, 75, 0, 0, 0, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 27, 60, 0, 0, 67 }, { "Plate Mail of the stars", ItemType::HeavyArmor, 2, 103, 77800, 0, 0, 49, 0, 0, 0, 0, 0, 63, 75, 0, 0, 0, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 27, 60, 0, 0, 67 },
{ "Potion of Healing", 0, 3, 32, 50, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 24 }, { "Potion of Healing", ItemType::Misc, 3, 32, 50, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 24 },
{ "Potion of Full Healing", 0, 3, 35, 150, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 29 }, { "Potion of Full Healing", ItemType::Misc, 3, 35, 150, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 29 },
{ "Potion of Mana", 0, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 }, { "Potion of Mana", ItemType::Misc, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 },
{ "Scroll of Golem", 0, 3, 1, 1100, 0, 0, 0, 0, 22, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 51, 0, 110 }, { "Scroll of Golem", ItemType::Misc, 3, 1, 1100, 0, 0, 0, 0, 22, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 51, 0, 110 },
{ "Scroll of Search", 0, 3, 1, 50, 0, 0, 0, 0, 21, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 92 }, { "Scroll of Search", ItemType::Misc, 3, 1, 50, 0, 0, 0, 0, 21, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 92 },
{ "Scroll of Identify", 0, 3, 1, 100, 0, 0, 0, 0, 21, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 94 }, { "Scroll of Identify", ItemType::Misc, 3, 1, 100, 0, 0, 0, 0, 21, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 94 },
{ "Scroll of Town Portal", 0, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 98 }, { "Scroll of Town Portal", ItemType::Misc, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 98 },
{ "Scroll of Healing", 0, 3, 1, 50, 0, 0, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 91 }, { "Scroll of Healing", ItemType::Misc, 3, 1, 50, 0, 0, 0, 0, 21, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 91 },
{ "Rune of Fire", 0, 3, 193, 100, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 161 }, { "Rune of Fire", ItemType::Misc, 3, 193, 100, 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 161 },
{ "Gold", 11, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0 }, { "Gold", ItemType::Gold, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0 },
{ "The Undead Crown", 7, 2, 77, 16650, 0, 0, 8, 2, 27, 0, 0, 0, 45, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, -1, 0, 0, 0, 7 }, { "The Undead Crown", ItemType::Helm, 2, 77, 16650, 0, 0, 8, 2, 27, 0, 0, 0, 45, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, -1, 0, 0, 0, 7 },
{ "Empyrean Band", 12, 3, 18, 8000, 0, 0, 0, 270532608, 27, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, -1, -1, 0, 0, 0, 8 }, { "Empyrean Band", ItemType::Ring, 3, 18, 8000, 0, 0, 0, 270532608, 27, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, -1, -1, 0, 0, 0, 8 },
{ "Ring of Truth", 12, 3, 10, 9100, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 640, 0, -1, 0, 0, 4, 0, 0, 0, 0, -1, -1, 0, 0, 0, 11 }, { "Ring of Truth", ItemType::Ring, 3, 10, 9100, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 640, 0, -1, 0, 0, 4, 0, 0, 0, 0, -1, -1, 0, 0, 0, 11 },
{ "Griswold's Edge", 1, 1, 61, 42000, 4, 12, 0, 264208, 27, 0, 0, 0, 50, 50, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1280, -1280, 0, 0, 0, 0, 8, 1, 10, 0, 0, -1, -1, 40, 0, 0, 31 }, { "Griswold's Edge", ItemType::Sword, 1, 61, 42000, 4, 12, 0, 264208, 27, 0, 0, 0, 50, 50, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 1280, -1280, 0, 0, 0, 0, 8, 1, 10, 0, 0, -1, -1, 40, 0, 0, 31 },
{ "Bovine Plate", 9, 2, 226, 400, 0, 0, 150, 0, 27, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, -3200, 0, 0, 0, 5, -2, 9, 0, 0, 0, 0, -1, -1, 50, 0, 0, 32 }, { "Bovine Plate", ItemType::HeavyArmor, 2, 226, 400, 0, 0, 150, 0, 27, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 30, 30, 30, -3200, 0, 0, 0, 5, -2, 9, 0, 0, 0, 0, -1, -1, 50, 0, 0, 32 },
{ "Book of Healing", 0, 3, 86, 1000, 0, 0, 0, 0, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 17, 0, 114 }, { "Book of Healing", ItemType::Misc, 3, 86, 1000, 0, 0, 0, 0, 24, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 17, 0, 114 },
{ "Book of Charged Bolt", 0, 3, 88, 1000, 0, 0, 0, 0, 24, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 25, 0, 114 }, { "Book of Charged Bolt", ItemType::Misc, 3, 88, 1000, 0, 0, 0, 0, 24, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 25, 0, 114 },
{ "Book of Firebolt", 0, 3, 87, 1000, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 15, 0, 114 }, { "Book of Firebolt", ItemType::Misc, 3, 87, 1000, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 15, 0, 114 },
{ "Blacksmith Oil", 0, 3, 30, 100, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 83 }, { "Blacksmith Oil", ItemType::Misc, 3, 30, 100, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 83 },
{ "Oil of Accuracy", 0, 3, 30, 500, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 84 }, { "Oil of Accuracy", ItemType::Misc, 3, 30, 500, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 84 },
{ "Oil of Sharpness", 0, 3, 30, 500, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 85 }, { "Oil of Sharpness", ItemType::Misc, 3, 30, 500, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 85 },
{ "Oil of Permanence", 0, 3, 30, 15000, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 }, { "Oil of Permanence", ItemType::Misc, 3, 30, 15000, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 },
{ "Doppelganger's Axe", 2, 1, 144, 6640, 4, 12, 0, 0, 0, 0, 0, 0, 23, 32, 86, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, -1, 22, 0, 0, 131 }, { "Doppelganger's Axe", ItemType::Axe, 1, 144, 6640, 4, 12, 0, 0, 0, 0, 0, 0, 23, 32, 86, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, -1, 22, 0, 0, 131 },
{ "Flail of vampires", 4, 1, 131, 16500, 2, 12, 0, 16384, 0, 0, 0, 0, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 55, 30, 0, 0, 141 }, { "Flail of vampires", ItemType::Mace, 1, 131, 16500, 2, 12, 0, 16384, 0, 0, 0, 0, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 55, 30, 0, 0, 141 },
{ "Gladiator's Ring", 12, 3, 186, 10000, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3200, -3200, 0, 0, 0, 0, 109, 0, 0, 0, 0, -1, -1, 0, 0, 0, 157 }, { "Gladiator's Ring", ItemType::Ring, 3, 186, 10000, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3200, -3200, 0, 0, 0, 0, 109, 0, 0, 0, 0, -1, -1, 0, 0, 0, 157 },
{ "Warrior's War Staff of the moon", 10, 1, 124, 42332, 8, 16, 0, 0, 23, 0, 0, 0, 75, 75, 54, 15, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 27, 30, 0, 0, 155 }, { "Warrior's War Staff of the moon", ItemType::Staff, 1, 124, 42332, 8, 16, 0, 0, 23, 0, 0, 0, 75, 75, 54, 15, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 27, 30, 0, 0, 155 },
{ "Kite Shield of the ages", 5, 2, 113, 2600, 0, 0, 10, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 37, 50, 0, 0, 74 }, { "Kite Shield of the ages", ItemType::Shield, 2, 113, 2600, 0, 0, 10, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 37, 50, 0, 0, 74 },
{ "Heavy Spiked Club of puncturing", 4, 1, 70, 5239, 3, 6, 0, 0, 0, 0, 0, 0, 20, 20, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 57, 18, 0, 0, 139 }, { "Heavy Spiked Club of puncturing", ItemType::Mace, 1, 70, 5239, 3, 6, 0, 0, 0, 0, 0, 0, 20, 20, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 57, 18, 0, 0, 139 },
{ "Book of Lightning", 0, 3, 88, 3000, 0, 0, 0, 0, 24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 20, 0, 114 }, { "Book of Lightning", ItemType::Misc, 3, 88, 3000, 0, 0, 0, 0, 24, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 20, 0, 114 },
{ "Jester's Sabre", 1, 1, 67, 1710, 1, 8, 0, 0, 0, 0, 0, 0, 23, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, -1, 17, 0, 0, 124 }, { "Jester's Sabre", ItemType::Sword, 1, 67, 1710, 1, 8, 0, 0, 0, 0, 0, 0, 23, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, -1, 17, 0, 0, 124 },
{ "Small Shield of blocking", 5, 2, 105, 4360, 0, 0, 6, 16777216, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 60, 25, 0, 0, 72 }, { "Small Shield of blocking", ItemType::Shield, 2, 105, 4360, 0, 0, 6, 16777216, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 60, 25, 0, 0, 72 },
{ "The Butcher's Cleaver", 2, 1, 106, 3650, 4, 24, 0, 0, 27, 0, 0, 0, 10, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 6 }, { "The Butcher's Cleaver", ItemType::Axe, 1, 106, 3650, 4, 24, 0, 0, 27, 0, 0, 0, 10, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 6 },
{ "Scimitar of peril", 1, 1, 72, 700, 3, 7, 0, 0, 0, 0, 0, 0, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 86, 23, 0, 23, 121 }, { "Scimitar of peril", ItemType::Sword, 1, 72, 700, 3, 7, 0, 0, 0, 0, 0, 0, 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 86, 23, 0, 23, 121 },
{ "Crystalline Large Axe", 2, 1, 142, 5250, 6, 16, 0, 0, 0, 0, 0, 0, 12, 12, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, -1, 30, 0, 0, 132 }, { "Crystalline Large Axe", ItemType::Axe, 1, 142, 5250, 6, 16, 0, 0, 0, 0, 0, 0, 12, 12, 280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, -1, 30, 0, 0, 132 },
{ "Red Cloak", 6, 2, 149, 580, 0, 0, 3, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, -1, 0, 0, 0, 56 }, { "Red Cloak", ItemType::LightArmor, 2, 149, 580, 0, 0, 3, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, -1, 0, 0, 0, 56 },
{ "Mace of decay", 4, 1, 59, 600, 1, 8, 0, 0, 0, 0, 0, 0, 32, 32, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 85, 16, 0, 0, 136 }, { "Mace of decay", ItemType::Mace, 1, 59, 600, 1, 8, 0, 0, 0, 0, 0, 0, 32, 32, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 85, 16, 0, 0, 136 },
{ "Ring of Truth", 12, 3, 10, 9100, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 640, 0, -1, 0, 0, 4, 0, 0, 0, 0, -1, -1, 0, 0, 0, 11 }, { "Ring of Truth", ItemType::Ring, 3, 10, 9100, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 0, 640, 0, -1, 0, 0, 4, 0, 0, 0, 0, -1, -1, 0, 0, 0, 11 },
{ "Red Studded Leather Armor of paralysis", 6, 2, 107, 800, 0, 0, 17, 0, 0, 0, 0, 0, 18, 45, 0, 0, 0, 0, 0, -8, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 24, 20, 0, 0, 61 }, { "Red Studded Leather Armor of paralysis", ItemType::LightArmor, 2, 107, 800, 0, 0, 17, 0, 0, 0, 0, 0, 18, 45, 0, 0, 0, 0, 0, -8, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 24, 20, 0, 0, 61 },
{ "Bent Hunter's Bow", 3, 1, 102, 1, 2, 5, 0, 0, 0, 0, 0, 0, 26, 40, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 20, 0, 35, 144 }, { "Bent Hunter's Bow", ItemType::Bow, 1, 102, 1, 2, 5, 0, 0, 0, 0, 0, 0, 26, 40, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 20, 0, 35, 144 },
{ "Civerb's Cudgel", 4, 1, 59, 2000, 1, 8, 0, 1073741824, 0, 0, 0, 0, 32, 32, 0, 0, 0, 0, -2, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, -1, -1, 16, 0, 0, 136 }, { "Civerb's Cudgel", ItemType::Mace, 1, 59, 2000, 1, 8, 0, 1073741824, 0, 0, 0, 0, 32, 32, 0, 0, 0, 0, -2, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, 0, 0, -1, -1, 16, 0, 0, 136 },
{ "Deadly Spiked Club", 4, 1, 70, 1556, 3, 6, 0, 0, 0, 0, 0, 0, 8, 20, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -1, 18, 0, 0, 139 }, { "Deadly Spiked Club", ItemType::Mace, 1, 70, 1556, 3, 6, 0, 0, 0, 0, 0, 0, 8, 20, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, -1, 18, 0, 0, 139 },
{ "Gnat Sting", 3, 1, 210, 30000, 1, 2, 0, 131584, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, -1, -1, 20, 0, 35, 144 }, { "Gnat Sting", ItemType::Bow, 1, 210, 30000, 1, 2, 0, 131584, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, -1, -1, 20, 0, 35, 144 },
{ "Thunderclap", 4, 1, 205, 30000, 5, 9, 0, 48, 0, 0, 0, 0, 255, 255, 0, 0, 0, 20, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 102, 3, 6, 2, 0, -1, -1, 40, 0, 0, 138 }, { "Thunderclap", ItemType::Mace, 1, 205, 30000, 5, 9, 0, 48, 0, 0, 0, 0, 255, 255, 0, 0, 0, 20, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 2, 0, 102, 3, 6, 2, 0, -1, -1, 40, 0, 0, 138 },
{ "Rod of Onan", 10, 1, 124, 44167, 8, 16, 0, 0, 23, 21, 50, 50, 75, 75, 100, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, -1, -1, 30, 0, 0, 155 }, { "Rod of Onan", ItemType::Staff, 1, 124, 44167, 8, 16, 0, 0, 23, 21, 50, 50, 75, 75, 100, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, -1, -1, 30, 0, 0, 155 },
{ "Flambeau", 3, 1, 209, 30000, 0, 0, 0, 33554440, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 15, 20, 0, 0, -1, -1, 25, 0, 40, 146 }, { "Flambeau", ItemType::Bow, 1, 209, 30000, 0, 0, 0, 33554440, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 15, 20, 0, 0, -1, -1, 25, 0, 40, 146 },
{ "Ring of Thunder", 12, 3, 177, 8000, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, 60, -30, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, -1, -1, 0, 0, 0, 156 }, { "Ring of Thunder", ItemType::Ring, 3, 177, 8000, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, 60, -30, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, -1, -1, 0, 0, 0, 156 },
{ "Acolyte's Amulet", 13, 3, 183, 10000, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3968, 3968, 0, 0, 0, 0, 108, 0, 0, 0, 0, -1, -1, 0, 0, 0, 159 }, { "Acolyte's Amulet", ItemType::Amulet, 3, 183, 10000, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3968, 3968, 0, 0, 0, 0, 108, 0, 0, 0, 0, -1, -1, 0, 0, 0, 159 },
{ "The Protector", 10, 1, 162, 17240, 2, 4, 40, 67108864, 23, 2, 86, 86, 25, 25, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, -5, 0, 0, 59, 0, 0, 0, 0, -1, -1, 0, 0, 0, 151 }, { "The Protector", ItemType::Staff, 1, 162, 17240, 2, 4, 40, 67108864, 23, 2, 86, 86, 25, 25, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, -5, 0, 0, 59, 0, 0, 0, 0, -1, -1, 0, 0, 0, 151 },
{ "Bone Chain Armor", 8, 2, 204, 36000, 0, 0, 40, 0, 0, 0, 0, 0, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, -1, -1, 30, 0, 0, 63 }, { "Bone Chain Armor", ItemType::MediumArmor, 2, 204, 36000, 0, 0, 40, 0, 0, 0, 0, 0, 55, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, -1, -1, 30, 0, 0, 63 },
{ "Oil of Permanence", 0, 3, 30, 15000, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 }, { "Oil of Permanence", ItemType::Misc, 3, 30, 15000, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 },
{ "Demon Plate Armor", 9, 2, 225, 80000, 0, 0, 80, 0, 0, 0, 0, 0, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, -1, -1, 90, 0, 0, 70 }, { "Demon Plate Armor", ItemType::HeavyArmor, 2, 225, 80000, 0, 0, 80, 0, 0, 0, 0, 0, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, -1, -1, 90, 0, 0, 70 },
{ "Oil of Fortitude", 0, 3, 30, 2500, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 }, { "Oil of Fortitude", ItemType::Misc, 3, 30, 2500, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 },
{ "Ring of Regha", 12, 3, 11, 4175, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, -3, 10, -3, 0, 0, 0, 10, 0, 0, 0, 0, 1, 0, 86, 0, 0, 0, 0, -1, -1, 0, 0, 0, 157 }, { "Ring of Regha", ItemType::Ring, 3, 11, 4175, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, -3, 10, -3, 0, 0, 0, 10, 0, 0, 0, 0, 1, 0, 86, 0, 0, 0, 0, -1, -1, 0, 0, 0, 157 },
{ "Bronze Ring of dexterity", 12, 3, 12, 5200, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 156 }, { "Bronze Ring of dexterity", ItemType::Ring, 3, 12, 5200, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 156 },
{ "Oil of Accuracy", 0, 3, 30, 500, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 84 }, { "Oil of Accuracy", ItemType::Misc, 3, 30, 500, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 84 },
{ "Blacksmith Oil", 0, 3, 30, 100, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 35 }, { "Blacksmith Oil", ItemType::Misc, 3, 30, 100, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 35 },
{ "Spider's Short Staff of devastation", 10, 1, 109, 2050, 2, 4, 0, 0, 23, 0, 0, 0, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 84, 0, 0, 0, 151 }, { "Spider's Short Staff of devastation", ItemType::Staff, 1, 109, 2050, 2, 4, 0, 0, 23, 0, 0, 0, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 84, 0, 0, 0, 151 },
{ "Oil of Hardening", 0, 3, 30, 500, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 }, { "Oil of Hardening", ItemType::Misc, 3, 30, 500, 0, 0, 0, 0, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 },
{ "Oil of Skill", 0, 3, 30, 1500, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 }, { "Oil of Skill", ItemType::Misc, 3, 30, 1500, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 },
{ "Oil of Mastery", 0, 3, 30, 2500, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 }, { "Oil of Mastery", ItemType::Misc, 3, 30, 2500, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 },
{ "Blitzen", 3, 1, 219, 30000, 0, 0, 0, 33554440, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 10, 15, 1, 0, -1, -1, 25, 0, 40, 146 }, { "Blitzen", ItemType::Bow, 1, 219, 30000, 0, 0, 0, 33554440, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 10, 15, 1, 0, -1, -1, 25, 0, 40, 146 },
{ "Oil of Death", 0, 3, 30, 2500, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 }, { "Oil of Death", ItemType::Misc, 3, 30, 2500, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 86 },
{ "Oil of Sharpness", 0, 3, 30, 500, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 85 }, { "Oil of Sharpness", ItemType::Misc, 3, 30, 500, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 85 },
{ "Crystalline Short Sword of the leech", 1, 1, 64, 10020, 2, 6, 0, 32768, 0, 0, 0, 0, 13, 13, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 56, 18, 0, 0, 119 }, { "Crystalline Short Sword of the leech", ItemType::Sword, 1, 64, 10020, 2, 6, 0, 32768, 0, 0, 0, 0, 13, 13, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 56, 18, 0, 0, 119 },
{ "Plentiful Staff of Mana Shield", 10, 1, 166, 6360, 5, 10, 0, 0, 23, 11, 14, 14, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, -1, 0, 25, 0, 153 }, { "Plentiful Staff of Mana Shield", ItemType::Staff, 1, 166, 6360, 5, 10, 0, 0, 23, 11, 14, 14, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, -1, 0, 25, 0, 153 },
{ "King's War Staff", 10, 1, 124, 92000, 8, 16, 0, 0, 23, 0, 0, 0, 75, 75, 175, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -1, 30, 0, 0, 155 }, { "King's War Staff", ItemType::Staff, 1, 124, 92000, 8, 16, 0, 0, 23, 0, 0, 0, 75, 75, 175, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, -1, 30, 0, 0, 155 },
{ "Potion of Mana", 0, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 }, { "Potion of Mana", ItemType::Misc, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 },
{ "Scroll of Town Portal", 0, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 27 }, { "Scroll of Town Portal", ItemType::Misc, 3, 1, 200, 0, 0, 0, 0, 21, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 27 },
{ "Potion of Mana", 0, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 }, { "Potion of Mana", ItemType::Misc, 3, 39, 50, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 25 },
// clang-format on // clang-format on
}; };
@ -683,7 +683,7 @@ TEST(pack, UnPackItem_diablo_strip_hellfire_items)
UnPackItem(&is, &id, true); UnPackItem(&is, &id, true);
ASSERT_EQ(id._itype, ITYPE_NONE); ASSERT_EQ(id._itype, ItemType::None);
} }
TEST(pack, UnPackItem_empty) TEST(pack, UnPackItem_empty)
@ -693,7 +693,7 @@ TEST(pack, UnPackItem_empty)
UnPackItem(&is, &id, false); UnPackItem(&is, &id, false);
ASSERT_EQ(id._itype, ITYPE_NONE); ASSERT_EQ(id._itype, ItemType::None);
} }
TEST(pack, PackItem_empty) TEST(pack, PackItem_empty)
@ -701,7 +701,7 @@ TEST(pack, PackItem_empty)
ItemPack is; ItemPack is;
Item id; Item id;
id._itype = ITYPE_NONE; id._itype = ItemType::None;
PackItem(&is, &id); PackItem(&is, &id);
@ -715,7 +715,7 @@ static void compareGold(const ItemPack *is, int iCurs)
ASSERT_EQ(id._iCurs, iCurs); ASSERT_EQ(id._iCurs, iCurs);
ASSERT_EQ(id.IDidx, IDI_GOLD); ASSERT_EQ(id.IDidx, IDI_GOLD);
ASSERT_EQ(id._ivalue, is->wValue); ASSERT_EQ(id._ivalue, is->wValue);
ASSERT_EQ(id._itype, ITYPE_GOLD); ASSERT_EQ(id._itype, ItemType::Gold);
ASSERT_EQ(id._iClass, ICLASS_GOLD); ASSERT_EQ(id._iClass, ICLASS_GOLD);
ItemPack is2; ItemPack is2;

Loading…
Cancel
Save