From 9f47099232a810d30e39360f9ad08d2b23d18912 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Fri, 26 Aug 2022 21:17:12 -0400 Subject: [PATCH] Properly handles starting link with adult trade items. --- soh/src/code/z_sram.c | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/soh/src/code/z_sram.c b/soh/src/code/z_sram.c index 92dd215c4..d53055c93 100644 --- a/soh/src/code/z_sram.c +++ b/soh/src/code/z_sram.c @@ -4,6 +4,7 @@ #include #include #include +#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #define NUM_DUNGEONS 8 #define NUM_TRIALS 6 @@ -513,6 +514,53 @@ void GiveLinkDungeonItem(GetItemID getItemId) { } } +void GiveLinkAdultTradeItem(GetItemID giid) { + ItemID item; + switch (giid) { + case GI_POCKET_EGG: + item = ITEM_POCKET_EGG; + break; + case GI_POCKET_CUCCO: + item = ITEM_POCKET_CUCCO; + break; + case GI_COJIRO: + item = ITEM_COJIRO; + break; + case GI_ODD_MUSHROOM: + item = ITEM_ODD_MUSHROOM; + break; + case GI_ODD_POTION: + item = ITEM_ODD_POTION; + break; + case GI_SAW: + item = ITEM_SAW; + break; + case GI_SWORD_BROKEN: + item = ITEM_SWORD_BROKEN; + break; + case GI_PRESCRIPTION: + item = ITEM_PRESCRIPTION; + break; + case GI_FROG: + item = ITEM_FROG; + break; + case GI_EYEDROPS: + item = ITEM_EYEDROPS; + break; + case GI_CLAIM_CHECK: + item = ITEM_CLAIM_CHECK; + break; + } + if ((item == ITEM_SAW) && CVar_GetS32("gDekuNutUpgradeFix", 0) == 0) { + gSaveContext.itemGetInf[1] |= 0x8000; + } + + if (item >= ITEM_POCKET_EGG) { + gSaveContext.adultTradeItems |= ADULT_TRADE_FLAG(item); + } + INV_CONTENT(item) = item; +} + void GiveLinksPocketMedallion() { GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_LINKS_POCKET, RG_NONE); @@ -856,6 +904,8 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) { GiveLinkDekuNutUpgrade(giid); } else if (giid == GI_SKULL_TOKEN) { GiveLinkSkullToken(); + } else if (giid >= GI_POCKET_EGG && giid <= GI_CLAIM_CHECK) { + GiveLinkAdultTradeItem(giid); } else { s32 iid = getItem.itemId; if (iid != -1) INV_CONTENT(iid) = iid;