diff --git a/soh/soh/Enhancements/item-tables/ItemTableManager.cpp b/soh/soh/Enhancements/item-tables/ItemTableManager.cpp index e583c92edf..9992a470a5 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableManager.cpp +++ b/soh/soh/Enhancements/item-tables/ItemTableManager.cpp @@ -7,12 +7,12 @@ ItemTableManager::~ItemTableManager() { this->itemTables.clear(); } -bool ItemTableManager::AddItemTable(std::string tableID) { +bool ItemTableManager::AddItemTable(uint16_t tableID) { ItemTable newItemTable; return itemTables.emplace(tableID, newItemTable).second; } -bool ItemTableManager::AddItemEntry(std::string tableID, uint8_t getItemID, uint8_t itemID, uint16_t objectID, int8_t drawID, uint8_t textID, uint8_t field, bool chestAnim) { +bool ItemTableManager::AddItemEntry(uint16_t tableID, uint16_t getItemID, uint16_t itemID, uint16_t objectID, int16_t drawID, uint16_t textID, uint16_t field, bool chestAnim) { ItemTable* itemTable = RetrieveItemTable(tableID); if (itemTable == NULL) { return false; @@ -21,7 +21,7 @@ bool ItemTableManager::AddItemEntry(std::string tableID, uint8_t getItemID, uint return itemTable->emplace(getItemID, getItemEntry).second; } -bool ItemTableManager::AddItemEntry(std::string tableID, uint8_t getItemID, GetItemEntry getItemEntry) { +bool ItemTableManager::AddItemEntry(uint16_t tableID, uint16_t getItemID, GetItemEntry getItemEntry) { ItemTable* itemTable = RetrieveItemTable(tableID); if (itemTable == NULL) { return false; @@ -29,7 +29,7 @@ bool ItemTableManager::AddItemEntry(std::string tableID, uint8_t getItemID, GetI return itemTable->emplace(getItemID, getItemEntry).second; } -GetItemEntry ItemTableManager::RetrieveItemEntry(std::string tableID, uint8_t itemID) { +GetItemEntry ItemTableManager::RetrieveItemEntry(uint16_t tableID, uint16_t itemID) { ItemTable* itemTable = RetrieveItemTable(tableID); if (itemTable != NULL) { auto foundItemEntry = itemTable->find(itemID); @@ -40,7 +40,7 @@ GetItemEntry ItemTableManager::RetrieveItemEntry(std::string tableID, uint8_t it return GET_ITEM_NONE; } -bool ItemTableManager::ClearItemTable(std::string tableID) { +bool ItemTableManager::ClearItemTable(uint16_t tableID) { ItemTable* itemTable = RetrieveItemTable(tableID); if (itemTable != NULL) { itemTable->clear(); @@ -49,7 +49,7 @@ bool ItemTableManager::ClearItemTable(std::string tableID) { return false; } -ItemTable* ItemTableManager::RetrieveItemTable(std::string tableID) { +ItemTable* ItemTableManager::RetrieveItemTable(uint16_t tableID) { auto foundItemTable = itemTables.find(tableID); if (foundItemTable == itemTables.end()) { return nullptr; diff --git a/soh/soh/Enhancements/item-tables/ItemTableManager.h b/soh/soh/Enhancements/item-tables/ItemTableManager.h index fd827c3fa6..abc41418bd 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableManager.h +++ b/soh/soh/Enhancements/item-tables/ItemTableManager.h @@ -12,21 +12,21 @@ #include -typedef std::unordered_map ItemTable; +typedef std::unordered_map ItemTable; class ItemTableManager { public: static ItemTableManager* Instance; ItemTableManager(); ~ItemTableManager(); - bool AddItemTable(std::string tableID); - bool AddItemEntry(std::string tableID, uint8_t getItemID, uint8_t itemID, uint16_t objectID, int8_t drawID, uint8_t textID, uint8_t field, bool chestAnim); - bool AddItemEntry(std::string tableID, uint8_t getItemID, GetItemEntry getItemEntry); - GetItemEntry RetrieveItemEntry(std::string tableID, uint8_t itemID); - bool ClearItemTable(std::string tableID); + bool AddItemTable(uint16_t tableID); + bool AddItemEntry(uint16_t tableID, uint16_t getItemID, uint16_t itemID, uint16_t objectID, int16_t drawID, uint16_t textID, uint16_t field, bool chestAnim); + bool AddItemEntry(uint16_t tableID, uint16_t getItemID, GetItemEntry getItemEntry); + GetItemEntry RetrieveItemEntry(uint16_t tableID, uint16_t itemID); + bool ClearItemTable(uint16_t tableID); private: - std::unordered_map itemTables; + std::unordered_map itemTables; - ItemTable* RetrieveItemTable(std::string tableID); + ItemTable* RetrieveItemTable(uint16_t tableID); }; diff --git a/soh/soh/Enhancements/item-tables/ItemTableTypes.h b/soh/soh/Enhancements/item-tables/ItemTableTypes.h index ed71bfabed..9711a76a88 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableTypes.h +++ b/soh/soh/Enhancements/item-tables/ItemTableTypes.h @@ -4,10 +4,10 @@ #endif typedef struct { - /* 0x00 */ uint8_t itemId; - /* 0x01 */ uint8_t field; // various bit-packed data - /* 0x02 */ int8_t gi; // defines the draw id and chest opening animation - /* 0x03 */ uint8_t textId; + /* 0x00 */ uint16_t itemId; + /* 0x01 */ uint16_t field; // various bit-packed data + /* 0x02 */ int16_t gi; // defines the draw id and chest opening animation + /* 0x03 */ uint16_t textId; /* 0x04 */ uint16_t objectId; /* 0x06 */ uint16_t modIndex; // 0 = Vanilla, 1 = Randomizer, future mods will increment up? } GetItemEntry; // size = 0x06 diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 46023f5072..9cea0c0a7d 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -4823,7 +4823,7 @@ void InitRandoItemTable() { GET_ITEM(RG_BOTTLE_WITH_POE, OBJECT_GI_GHOST, GID_POE, 0x97, 0x80, CHEST_ANIM_LONG), GET_ITEM(RG_BOTTLE_WITH_BIG_POE, OBJECT_GI_GHOST, GID_BIG_POE, 0xF9, 0x80, CHEST_ANIM_LONG), }; - ItemTableManager::Instance->AddItemTable("Randomizer"); + ItemTableManager::Instance->AddItemTable(MOD_RANDOMIZER); for (int i = 0; i < ARRAY_SIZE(getItemTable); i++) { if (i < 21) { // We want to use vanilla Give_Item code for indices 0-20 since @@ -4903,7 +4903,7 @@ void InitRandoItemTable() { getItemID = getItemTable[i].itemId; break; } - ItemTableManager::Instance->AddItemEntry("Randomizer", getItemID, getItemTable[i]); + ItemTableManager::Instance->AddItemEntry(MOD_RANDOMIZER, getItemID, getItemTable[i]); } } diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index c12febe55c..30a82ee30a 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -220,10 +220,10 @@ extern "C" void VanillaItemTable_Init() { GET_ITEM_NONE, GET_ITEM_NONE, }; - ItemTableManager::Instance->AddItemTable("Vanilla"); + ItemTableManager::Instance->AddItemTable(MOD_VANILLA); for (uint8_t i = 0; i < ARRAY_SIZE(getItemTable); i++) { getItemTable[i].modIndex = MOD_VANILLA; - ItemTableManager::Instance->AddItemEntry("Vanilla", i, getItemTable[i]); + ItemTableManager::Instance->AddItemEntry(MOD_VANILLA, i, getItemTable[i]); } } @@ -1669,15 +1669,10 @@ extern "C" bool Randomizer_ItemIsIceTrap(RandomizerCheck randomizerCheck, GetIte return gSaveContext.n64ddFlag && Randomizer_GetItemIdFromKnownCheck(randomizerCheck, ogId) == GI_ICE_TRAP; } -extern "C" GetItemEntry ItemTable_Retrieve(int16_t getItemID) { - std::string itemTableID; - - if (OTRGlobals::Instance->getItemModIndex == MOD_VANILLA) { - itemTableID = "Vanilla"; - } else { - itemTableID = "Randomizer"; +extern "C" GetItemEntry ItemTable_Retrieve(int16_t getItemID) { + if (OTRGlobals::Instance->getItemModIndex != MOD_VANILLA) { getItemID++; // counteracts the - 1 offset used for vanilla table } - return ItemTableManager::Instance->RetrieveItemEntry(itemTableID, getItemID); + return ItemTableManager::Instance->RetrieveItemEntry(OTRGlobals::Instance->getItemModIndex, getItemID); } \ No newline at end of file