Browse Source

♻️ Use '_item_indexes' instead of 'int' for 'ItemStruct.IDidx' field

pull/2163/head
Juliano Leal Goncalves 5 years ago committed by Anders Jenbo
parent
commit
d47fc924f3
  1. 4
      Source/items.cpp
  2. 2
      Source/items.h
  3. 170
      Source/loadsave.cpp
  4. 8
      Source/loadsave.h
  5. 4
      Source/pack.cpp

4
Source/items.cpp

@ -1087,7 +1087,7 @@ void SetPlrHandItem(ItemStruct *h, int idata)
h->_iPrePower = IPL_INVALID; h->_iPrePower = IPL_INVALID;
h->_iSufPower = IPL_INVALID; h->_iSufPower = IPL_INVALID;
h->_iMagical = ITEM_QUALITY_NORMAL; h->_iMagical = ITEM_QUALITY_NORMAL;
h->IDidx = idata; h->IDidx = static_cast<_item_indexes>(idata);
if (gbIsHellfire) if (gbIsHellfire)
h->dwBuff |= CF_HELLFIRE; h->dwBuff |= CF_HELLFIRE;
} }
@ -1643,7 +1643,7 @@ void GetItemAttrs(int i, int idata, int lvl)
items[i]._iMinStr = AllItemsList[idata].iMinStr; items[i]._iMinStr = AllItemsList[idata].iMinStr;
items[i]._iMinMag = AllItemsList[idata].iMinMag; items[i]._iMinMag = AllItemsList[idata].iMinMag;
items[i]._iMinDex = AllItemsList[idata].iMinDex; items[i]._iMinDex = AllItemsList[idata].iMinDex;
items[i].IDidx = idata; items[i].IDidx = static_cast<_item_indexes>(idata);
if (gbIsHellfire) if (gbIsHellfire)
items[i].dwBuff |= CF_HELLFIRE; items[i].dwBuff |= CF_HELLFIRE;
items[i]._iPrePower = IPL_INVALID; items[i]._iPrePower = IPL_INVALID;

2
Source/items.h

@ -234,7 +234,7 @@ struct ItemStruct {
uint8_t _iMinMag; uint8_t _iMinMag;
int8_t _iMinDex; int8_t _iMinDex;
bool _iStatFlag; bool _iStatFlag;
int IDidx; _item_indexes IDidx;
uint32_t dwBuff; uint32_t dwBuff;
uint32_t _iDamAcFlags; uint32_t _iDamAcFlags;

170
Source/loadsave.cpp

@ -280,7 +280,7 @@ static void LoadItemData(LoadHelper *file, ItemStruct *pItem)
pItem->_iMinDex = file->nextLE<int8_t>(); pItem->_iMinDex = file->nextLE<int8_t>();
file->skip(1); // Alignment file->skip(1); // Alignment
pItem->_iStatFlag = file->nextBool32(); pItem->_iStatFlag = file->nextBool32();
pItem->IDidx = file->nextLE<int32_t>(); pItem->IDidx = static_cast<_item_indexes>(file->nextLE<int32_t>());
if (gbIsSpawn) { if (gbIsSpawn) {
pItem->IDidx = RemapItemIdxFromSpawn(pItem->IDidx); pItem->IDidx = RemapItemIdxFromSpawn(pItem->IDidx);
} }
@ -796,94 +796,110 @@ static void LoadPortal(LoadHelper *file, int i)
pPortal->setlvl = file->nextBool32(); pPortal->setlvl = file->nextBool32();
} }
int RemapItemIdxFromDiablo(int i) _item_indexes RemapItemIdxFromDiablo(_item_indexes i)
{ {
if (i == IDI_SORCERER) { constexpr auto getItemIdValue = [](int i) -> int {
return 166; if (i == IDI_SORCERER) {
} return 166;
if (i >= 156) { }
i += 5; // Hellfire exclusive items if (i >= 156) {
} i += 5; // Hellfire exclusive items
if (i >= 88) { }
i += 1; // Scroll of Search if (i >= 88) {
} i += 1; // Scroll of Search
if (i >= 83) { }
i += 4; // Oils if (i >= 83) {
} i += 4; // Oils
}
return i;
};
return i; return static_cast<_item_indexes>(getItemIdValue(i));
} }
int RemapItemIdxToDiablo(int i) _item_indexes RemapItemIdxToDiablo(_item_indexes i)
{ {
if (i == 166) { constexpr auto getItemIdValue = [](int i) -> int {
return IDI_SORCERER; if (i == 166) {
} return IDI_SORCERER;
if ((i >= 83 && i <= 86) || i == 92 || i >= 161) { }
return -1; // Hellfire exclusive items if ((i >= 83 && i <= 86) || i == 92 || i >= 161) {
} return -1; // Hellfire exclusive items
if (i >= 93) { }
i -= 1; // Scroll of Search if (i >= 93) {
} i -= 1; // Scroll of Search
if (i >= 87) { }
i -= 4; // Oils if (i >= 87) {
} i -= 4; // Oils
}
return i;
};
return i; return static_cast<_item_indexes>(getItemIdValue(i));
} }
int RemapItemIdxFromSpawn(int i) _item_indexes RemapItemIdxFromSpawn(_item_indexes i)
{ {
if (i >= 62) { constexpr auto getItemIdValue = [](int i) {
i += 9; // Medium and heavy armors if (i >= 62) {
} i += 9; // Medium and heavy armors
if (i >= 96) { }
i += 1; // Scroll of Stone Curse if (i >= 96) {
} i += 1; // Scroll of Stone Curse
if (i >= 98) { }
i += 1; // Scroll of Guardian if (i >= 98) {
} i += 1; // Scroll of Guardian
if (i >= 99) { }
i += 1; // Scroll of ... if (i >= 99) {
} i += 1; // Scroll of ...
if (i >= 101) { }
i += 1; // Scroll of Golem if (i >= 101) {
} i += 1; // Scroll of Golem
if (i >= 102) { }
i += 1; // Scroll of None if (i >= 102) {
} i += 1; // Scroll of None
if (i >= 104) { }
i += 1; // Scroll of Apocalypse if (i >= 104) {
} i += 1; // Scroll of Apocalypse
}
return i;
};
return i; return static_cast<_item_indexes>(getItemIdValue(i));
} }
int RemapItemIdxToSpawn(int i) _item_indexes RemapItemIdxToSpawn(_item_indexes i)
{ {
if (i >= 104) { constexpr auto getItemIdValue = [](int i) {
i -= 1; // Scroll of Apocalypse if (i >= 104) {
} i -= 1; // Scroll of Apocalypse
if (i >= 102) { }
i -= 1; // Scroll of None if (i >= 102) {
} i -= 1; // Scroll of None
if (i >= 101) { }
i -= 1; // Scroll of Golem if (i >= 101) {
} i -= 1; // Scroll of Golem
if (i >= 99) { }
i -= 1; // Scroll of ... if (i >= 99) {
} i -= 1; // Scroll of ...
if (i >= 98) { }
i -= 1; // Scroll of Guardian if (i >= 98) {
} i -= 1; // Scroll of Guardian
if (i >= 96) { }
i -= 1; // Scroll of Stone Curse if (i >= 96) {
} i -= 1; // Scroll of Stone Curse
if (i >= 71) { }
i -= 9; // Medium and heavy armors if (i >= 71) {
} i -= 9; // Medium and heavy armors
}
return i;
};
return i; return static_cast<_item_indexes>(getItemIdValue(i));
} }
bool IsHeaderValid(uint32_t magicNumber) bool IsHeaderValid(uint32_t magicNumber)
@ -1242,14 +1258,14 @@ void LoadGame(bool firstflag)
static void SaveItem(SaveHelper *file, ItemStruct *pItem) static void SaveItem(SaveHelper *file, ItemStruct *pItem)
{ {
int idx = pItem->IDidx; auto idx = pItem->IDidx;
if (!gbIsHellfire) if (!gbIsHellfire)
idx = RemapItemIdxToDiablo(idx); idx = RemapItemIdxToDiablo(idx);
if (gbIsSpawn) if (gbIsSpawn)
idx = RemapItemIdxToSpawn(idx); idx = RemapItemIdxToSpawn(idx);
int iType = pItem->_itype; int iType = pItem->_itype;
if (idx == -1) { if (idx == -1) {
idx = 0; idx = _item_indexes::IDI_GOLD;
iType = ITYPE_NONE; iType = ITYPE_NONE;
} }

8
Source/loadsave.h

@ -13,10 +13,10 @@ extern bool gbIsHellfireSaveGame;
extern uint8_t giNumberOfLevels; extern uint8_t giNumberOfLevels;
void RemoveInvalidItem(ItemStruct *pItem); void RemoveInvalidItem(ItemStruct *pItem);
int RemapItemIdxFromDiablo(int i); _item_indexes RemapItemIdxFromDiablo(_item_indexes i);
int RemapItemIdxToDiablo(int i); _item_indexes RemapItemIdxToDiablo(_item_indexes i);
int RemapItemIdxFromSpawn(int i); _item_indexes RemapItemIdxFromSpawn(_item_indexes i);
int RemapItemIdxToSpawn(int i); _item_indexes RemapItemIdxToSpawn(_item_indexes i);
bool IsHeaderValid(uint32_t magicNumber); bool IsHeaderValid(uint32_t magicNumber);
void LoadHotkeys(); void LoadHotkeys();
void LoadHeroItems(PlayerStruct &pPlayer); void LoadHeroItems(PlayerStruct &pPlayer);

4
Source/pack.cpp

@ -17,7 +17,7 @@ void PackItem(PkItemStruct *id, const ItemStruct *is)
if (is->isEmpty()) { if (is->isEmpty()) {
id->idx = 0xFFFF; id->idx = 0xFFFF;
} else { } else {
int idx = is->IDidx; auto idx = is->IDidx;
if (!gbIsHellfire) { if (!gbIsHellfire) {
idx = RemapItemIdxToDiablo(idx); idx = RemapItemIdxToDiablo(idx);
} }
@ -123,7 +123,7 @@ void PackPlayer(PkPlayerStruct *pPack, const PlayerStruct &player, bool manashie
*/ */
void UnPackItem(const PkItemStruct *is, ItemStruct *id, bool isHellfire) void UnPackItem(const PkItemStruct *is, ItemStruct *id, bool isHellfire)
{ {
uint16_t idx = SDL_SwapLE16(is->idx); auto idx = static_cast<_item_indexes>(SDL_SwapLE16(is->idx));
if (idx == 0xFFFF) { if (idx == 0xFFFF) {
id->_itype = ITYPE_NONE; id->_itype = ITYPE_NONE;
return; return;

Loading…
Cancel
Save