Change ItemTableID to be uint16_t so we can use ModIndex for it.

This commit is contained in:
Christopher Leggett 2022-08-04 22:50:55 -04:00
parent 95d439bb30
commit 63ace6a4cc
No known key found for this signature in database
GPG Key ID: 7093AE5FF7037D79
5 changed files with 25 additions and 30 deletions

View File

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

View File

@ -12,21 +12,21 @@
#include <unordered_map>
typedef std::unordered_map<uint8_t, GetItemEntry> ItemTable;
typedef std::unordered_map<uint16_t, GetItemEntry> 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<std::string, ItemTable> itemTables;
std::unordered_map<uint16_t, ItemTable> itemTables;
ItemTable* RetrieveItemTable(std::string tableID);
ItemTable* RetrieveItemTable(uint16_t tableID);
};

View File

@ -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

View File

@ -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]);
}
}

View File

@ -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);
}