summaryrefslogtreecommitdiff
path: root/soh/src/code
diff options
context:
space:
mode:
authorGarrett Cox <garrettjcox@gmail.com>2023-12-04 13:26:55 +0000
committerGitHub <noreply@github.com>2023-12-04 07:26:55 -0600
commit1fea642f337ef1424d2aa1068d485c01ab31af10 (patch)
treeb10349e78da101dfa1094b010695f25727cb7c59 /soh/src/code
parent19cede44c39fc3de60f1c04166db3e7a80135237 (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.c32
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));