diff options
| author | Garrett Cox <garrettjcox@gmail.com> | 2023-12-04 13:26:55 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-04 07:26:55 -0600 |
| commit | 1fea642f337ef1424d2aa1068d485c01ab31af10 (patch) | |
| tree | b10349e78da101dfa1094b010695f25727cb7c59 /soh/src/code | |
| parent | 19cede44c39fc3de60f1c04166db3e7a80135237 (diff) | |
Fix OnItemReceive hook for items in the extendedVanillaGetItem table (#3063)
Diffstat (limited to 'soh/src/code')
| -rw-r--r-- | soh/src/code/z_parameter.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index d7675fd90..552d28e73 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -1804,12 +1804,22 @@ u8 Return_Item(u8 itemID, ModIndex modId, ItemID returnItem) { GetItemEntry gie = { ITEM_SOLD_OUT, 0, 0, 0, 0, 0, 0, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_LESSER, NULL }; return Return_Item_Entry(gie, returnItem); } - int32_t get = GetGIID(itemID); - if (get == -1) { - modId = MOD_RANDOMIZER; - get = itemID; + + GetItemID getItemID = RetrieveGetItemIDFromItemID(itemID); + if (getItemID != GI_MAX) { + // Vanilla ItemID with an associated GetItemID + return Return_Item_Entry(ItemTable_RetrieveEntry(modId, getItemID), returnItem); + } + + RandomizerGet randomizerGet = RetrieveRandomizerGetFromItemID(itemID); + if (randomizerGet != RG_MAX) { + // Vanilla ItemID with an associated RandomizerGet (These are items in extendedVanillaGetItemTable) + return Return_Item_Entry(ItemTable_RetrieveEntry(MOD_RANDOMIZER, randomizerGet), returnItem); } - return Return_Item_Entry(ItemTable_RetrieveEntry(modId, get), returnItem); + + // All randomizer items should go through Randomizer_Item_Give, so this should never be reached + // but leaving this here just in case, as it was in the original behavior + return Return_Item_Entry(ItemTable_RetrieveEntry(MOD_RANDOMIZER, itemID), returnItem); } /** @@ -6556,11 +6566,15 @@ void Interface_Update(PlayState* play) { gSaveContext.pendingSale = ITEM_NONE; gSaveContext.pendingSaleMod = MOD_NONE; if (tempSaleMod == MOD_NONE) { - s16 giid = GetGIID(tempSaleItem); - if (giid == -1) { - tempSaleMod = MOD_RANDOMIZER; + GetItemID getItemID = RetrieveGetItemIDFromItemID(tempSaleItem); + RandomizerGet randomizerGet = RetrieveRandomizerGetFromItemID(tempSaleItem); + if (getItemID != GI_MAX) { + tempSaleItem = getItemID; } else { - tempSaleItem = giid; + if (randomizerGet != RG_MAX) { + tempSaleItem = randomizerGet; + } + tempSaleMod = MOD_RANDOMIZER; } } GameInteractor_ExecuteOnSaleEndHooks(ItemTable_RetrieveEntry(tempSaleMod, tempSaleItem)); |
