diff --git a/soh/include/macros.h b/soh/include/macros.h index 5157315ac..93f7e17c6 100644 --- a/soh/include/macros.h +++ b/soh/include/macros.h @@ -292,11 +292,6 @@ extern GraphicsContext* __gfxCtx; #define SEG_ADDR(seg, addr) (addr | (seg << 24) | 1) // #endregion -// #region SOH [Enhancements] -#define CHECK_EQUIPMENT_AGE(i, j) (CVarGetInteger("gTimelessEquipment", 0) || (gEquipAgeReqs[i][j] == 9) || (gEquipAgeReqs[i][j] == ((void)0, gSaveContext.linkAge))) -#define CHECK_SLOT_AGE(slotIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gSlotAgeReqs[slotIndex] == 9) || gSlotAgeReqs[slotIndex] == ((void)0, gSaveContext.linkAge)) -#define CHECK_ITEM_AGE(itemIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gItemAgeReqs[itemIndex] == 9) || (gItemAgeReqs[itemIndex] == gSaveContext.linkAge)) - #define DPAD_ITEM(button) ((gSaveContext.buttonStatus[(button) + 5] != BTN_DISABLED) \ ? gSaveContext.equips.buttonItems[(button) + 4] \ : ITEM_NONE) diff --git a/soh/src/code/z_play.c b/soh/src/code/z_play.c index 3181b741c..817c90ecf 100644 --- a/soh/src/code/z_play.c +++ b/soh/src/code/z_play.c @@ -9,6 +9,7 @@ #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/randomizer/randomizer_entrance.h" #include +#include #include "soh/Enhancements/enhancementTypes.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" @@ -654,12 +655,12 @@ void Play_Init(GameState* thisx) { Fault_AddClient(&D_801614B8, ZeldaArena_Display, NULL, NULL); // In order to keep bunny hood equipped on first load, we need to pre-set the age reqs for the item and slot if ((CVarGetInteger("gMMBunnyHood", BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA && CVarGetInteger("gAdultBunnyHood", 0)) || CVarGetInteger("gTimelessEquipment", 0)) { - gItemAgeReqs[ITEM_MASK_BUNNY] = 9; + gItemAgeReqs[ITEM_MASK_BUNNY] = AGE_REQ_NONE; if(INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_MASK_BUNNY) - gSlotAgeReqs[SLOT_TRADE_CHILD] = 9; + gSlotAgeReqs[SLOT_TRADE_CHILD] = AGE_REQ_NONE; } else { - gItemAgeReqs[ITEM_MASK_BUNNY] = gSlotAgeReqs[SLOT_TRADE_CHILD] = 1; + gItemAgeReqs[ITEM_MASK_BUNNY] = gSlotAgeReqs[SLOT_TRADE_CHILD] = AGE_REQ_CHILD; } func_800304DC(play, &play->actorCtx, play->linkActorEntry); diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 5f799227b..f4f465204 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -17,6 +17,7 @@ #include "overlays/actors/ovl_En_Fish/z_en_fish.h" #include "overlays/actors/ovl_En_Horse/z_en_horse.h" #include "overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h" +#include "overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h" #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_link_child/object_link_child.h" #include "textures/icon_item_24_static/icon_item_24_static.h" @@ -12715,8 +12716,7 @@ s32 func_8084DFF4(PlayState* play, Player* this) { equipItem = giEntry.itemId; equipNow = CVarGetInteger("gAskToEquip", 0) && giEntry.modIndex == MOD_NONE && equipItem >= ITEM_SWORD_KOKIRI && equipItem <= ITEM_TUNIC_ZORA && - ((gItemAgeReqs[equipItem] == 9 || gItemAgeReqs[equipItem] == gSaveContext.linkAge) || - CVarGetInteger("gTimelessEquipment", 0)); + CHECK_AGE_REQ_ITEM(equipItem); Message_StartTextbox(play, giEntry.textId, &this->actor); // RANDOTODO: Macro this boolean check. diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c index dd6ea6a16..23c531f15 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c @@ -476,7 +476,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { osSyncPrintf("kscope->select_name[Display_Equipment] = %d\n", pauseCtx->cursorItem[PAUSE_EQUIP]); - if (!(CHECK_EQUIPMENT_AGE(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]))) { + if (!(CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]))) { pauseCtx->nameColorSet = 1; } @@ -511,7 +511,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { (pauseCtx->unk_1E4 == 0) && CHECK_BTN_ANY(input->press.button, buttonsToCheck) && (pauseCtx->cursorX[PAUSE_EQUIP] != 0)) { - if (CHECK_EQUIPMENT_AGE(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) { + if (CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) { if (CHECK_BTN_ALL(input->press.button, BTN_A)) { // Allow Link to remove his equipment from the equipment subscreen by toggling on/off @@ -643,7 +643,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { for (k = 0, temp = rowStart + 1, bit = rowStart, j = point; k < 3; k++, bit++, j += 4, temp++) { if ((gBitFlags[bit] & gSaveContext.inventory.equipment) && (pauseCtx->cursorSpecialPos == 0)) { - if (CHECK_EQUIPMENT_AGE(i, k + 1)) { + if (CHECK_AGE_REQ_EQUIP(i, k + 1)) { if (temp == cursorSlot) { pauseCtx->equipVtx[j].v.ob[0] = pauseCtx->equipVtx[j + 2].v.ob[0] = pauseCtx->equipVtx[j].v.ob[0] - 2; @@ -702,7 +702,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { for (k = 0, bit = rowStart, point = 4; k < 3; k++, point += 4, temp++, bit++) { int itemId = ITEM_SWORD_KOKIRI + temp; - bool age_restricted = !CHECK_ITEM_AGE(itemId); + bool age_restricted = !CHECK_AGE_REQ_ITEM(itemId); if (age_restricted) { gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255); gSPGrayscale(POLY_KAL_DISP++, true); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c index 2fe8fddb7..744606910 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c @@ -33,7 +33,7 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, gDPPipeSync(POLY_KAL_DISP++); - if (!CHECK_SLOT_AGE(SLOT(item))) { + if (!CHECK_AGE_REQ_SLOT(SLOT(item))) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 100, 100, pauseCtx->alpha); } else { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -490,7 +490,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { pauseCtx->cursorItem[PAUSE_ITEM] = cursorItem; pauseCtx->cursorSlot[PAUSE_ITEM] = cursorSlot; - if (!CHECK_SLOT_AGE(cursorSlot)) { + if (!CHECK_AGE_REQ_SLOT(cursorSlot)) { pauseCtx->nameColorSet = 1; } @@ -540,8 +540,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { gSlotAgeReqs[SLOT_TRADE_CHILD] = gItemAgeReqs[ITEM_MASK_BUNNY] = ((((CVarGetInteger("gMMBunnyHood", BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA) && CVarGetInteger("gAdultBunnyHood", 0)) || CVarGetInteger("gTimelessEquipment", 0)) && INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_MASK_BUNNY) - ? 9 - : 1; + ? AGE_REQ_NONE + : AGE_REQ_CHILD; } if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_ADULT_TRADE) && cursorSlot == SLOT_TRADE_ADULT && CHECK_BTN_ALL(input->press.button, BTN_A)) { @@ -566,7 +566,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT; } if (CHECK_BTN_ANY(input->press.button, buttonsToCheck)) { - if (CHECK_SLOT_AGE(cursorSlot) && + if (CHECK_AGE_REQ_SLOT(cursorSlot) && (cursorItem != ITEM_SOLD_OUT) && (cursorItem != ITEM_NONE)) { KaleidoScope_SetupItemEquip(play, cursorItem, cursorSlot, pauseCtx->itemVtx[index].v.ob[0] * 10, @@ -618,7 +618,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { if (gSaveContext.inventory.items[i] != ITEM_NONE) { if ((pauseCtx->unk_1E4 == 0) && (pauseCtx->pageIndex == PAUSE_ITEM) && (pauseCtx->cursorSpecialPos == 0)) { - if (CHECK_SLOT_AGE(i)) { + if (CHECK_AGE_REQ_SLOT(i)) { if ((sEquipState == 2) && (i == 3)) { gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, magicArrowEffectsR[pauseCtx->equipTargetItem - 0xBF], magicArrowEffectsG[pauseCtx->equipTargetItem - 0xBF], @@ -653,7 +653,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[j + 0], 4, 0); int itemId = gSaveContext.inventory.items[i]; - bool not_acquired = !CHECK_ITEM_AGE(itemId); + bool not_acquired = !CHECK_AGE_REQ_ITEM(itemId); if (not_acquired) { gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255); gSPGrayscale(POLY_KAL_DISP++, true); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h index a3c97d9b2..6f4ed7ad2 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h @@ -8,9 +8,19 @@ extern u8 gAmmoItems[]; extern s16 D_8082AAEC[]; extern s16 D_8082AB2C[]; extern u8 gEquipAgeReqs[][4]; +extern u8 gSlotAgeReqs[]; +extern u8 gItemAgeReqs[]; extern u8 gAreaGsFlags[]; extern bool gSelectingMask; +#define AGE_REQ_ADULT LINK_AGE_ADULT +#define AGE_REQ_CHILD LINK_AGE_CHILD +#define AGE_REQ_NONE 9 + +#define CHECK_AGE_REQ_EQUIP(i, j) (CVarGetInteger("gTimelessEquipment", 0) || (gEquipAgeReqs[i][j] == AGE_REQ_NONE) || (gEquipAgeReqs[i][j] == ((void)0, gSaveContext.linkAge))) +#define CHECK_AGE_REQ_SLOT(slotIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gSlotAgeReqs[slotIndex] == AGE_REQ_NONE) || gSlotAgeReqs[slotIndex] == ((void)0, gSaveContext.linkAge)) +#define CHECK_AGE_REQ_ITEM(itemIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gItemAgeReqs[itemIndex] == AGE_REQ_NONE) || (gItemAgeReqs[itemIndex] == gSaveContext.linkAge)) + void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx); s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s32 point); void KaleidoScope_DrawDebugEditor(PlayState* play); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c index 6651f9316..1229da3c3 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c @@ -734,20 +734,147 @@ static u16 D_8082ABEC[] = { }; u8 gSlotAgeReqs[] = { - 1, 9, 9, 0, 0, 9, 1, 9, 9, 0, 0, 9, 1, 9, 1, 0, 0, 9, 9, 9, 9, 9, 0, 1, + AGE_REQ_CHILD, // SLOT_DEKU_STICK + AGE_REQ_NONE, // SLOT_DEKU_NUT + AGE_REQ_NONE, // SLOT_BOMB + AGE_REQ_ADULT, // SLOT_BOW + AGE_REQ_ADULT, // SLOT_ARROW_FIRE + AGE_REQ_NONE, // SLOT_DINS_FIRE + AGE_REQ_CHILD, // SLOT_SLINGSHOT + AGE_REQ_NONE, // SLOT_OCARINA + AGE_REQ_NONE, // SLOT_BOMBCHU + AGE_REQ_ADULT, // SLOT_HOOKSHOT + AGE_REQ_ADULT, // SLOT_ARROW_ICE + AGE_REQ_NONE, // SLOT_FARORES_WIND + AGE_REQ_CHILD, // SLOT_BOOMERANG + AGE_REQ_NONE, // SLOT_LENS_OF_TRUTH + AGE_REQ_CHILD, // SLOT_MAGIC_BEAN + AGE_REQ_ADULT, // SLOT_HAMMER + AGE_REQ_ADULT, // SLOT_ARROW_LIGHT + AGE_REQ_NONE, // SLOT_NAYRUS_LOVE + AGE_REQ_NONE, // SLOT_BOTTLE_1 + AGE_REQ_NONE, // SLOT_BOTTLE_2 + AGE_REQ_NONE, // SLOT_BOTTLE_3 + AGE_REQ_NONE, // SLOT_BOTTLE_4 + AGE_REQ_ADULT, // SLOT_TRADE_ADULT + AGE_REQ_CHILD, // SLOT_TRADE_CHILD }; u8 gEquipAgeReqs[][4] = { - { 0, 1, 0, 0 }, - { 9, 1, 9, 0 }, - { 0, 9, 0, 0 }, - { 9, 9, 0, 0 }, + { + AGE_REQ_ADULT, // 0 UPG_QUIVER + AGE_REQ_CHILD, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_KOKIRI + AGE_REQ_ADULT, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_MASTER + AGE_REQ_ADULT // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_BIGGORON + }, + { + AGE_REQ_NONE, // 0 UPG_BOMB_BAG + AGE_REQ_CHILD, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_DEKU + AGE_REQ_NONE, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_HYLIAN + AGE_REQ_ADULT // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_MIRROR + }, + { + AGE_REQ_ADULT, // 0 UPG_STRENGTH + AGE_REQ_NONE, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_KOKIRI + AGE_REQ_ADULT, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_GORON + AGE_REQ_ADULT // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_ZORA + }, + { + AGE_REQ_NONE, // 0 UPG_SCALE + AGE_REQ_NONE, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_KOKIRI + AGE_REQ_ADULT, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_IRON + AGE_REQ_ADULT // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_HOVER + }, + }; u8 gItemAgeReqs[] = { - 1, 9, 9, 0, 0, 9, 1, 9, 9, 9, 0, 0, 0, 9, 1, 9, 1, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 1, 9, 0, 9, 0, 0, 9, 0, 0, 1, 1, 1, 0, 0, 0, 9, 9, 9, 1, 0, 0, 9, 9, 0, + AGE_REQ_CHILD, // ITEM_DEKU_STICK + AGE_REQ_NONE, // ITEM_DEKU_NUT + AGE_REQ_NONE, // ITEM_BOMB + AGE_REQ_ADULT, // ITEM_BOW + AGE_REQ_ADULT, // ITEM_ARROW_FIRE + AGE_REQ_NONE, // ITEM_DINS_FIRE + AGE_REQ_CHILD, // ITEM_SLINGSHOT + AGE_REQ_NONE, // ITEM_OCARINA_FAIRY + AGE_REQ_NONE, // ITEM_OCARINA_OF_TIME + AGE_REQ_NONE, // ITEM_BOMBCHU + AGE_REQ_ADULT, // ITEM_HOOKSHOT + AGE_REQ_ADULT, // ITEM_LONGSHOT + AGE_REQ_ADULT, // ITEM_ARROW_ICE + AGE_REQ_NONE, // ITEM_FARORES_WIND + AGE_REQ_CHILD, // ITEM_BOOMERANG + AGE_REQ_NONE, // ITEM_LENS_OF_TRUTH + AGE_REQ_CHILD, // ITEM_MAGIC_BEAN + AGE_REQ_ADULT, // ITEM_HAMMER + AGE_REQ_ADULT, // ITEM_ARROW_LIGHT + AGE_REQ_NONE, // ITEM_NAYRUS_LOVE + AGE_REQ_NONE, // ITEM_BOTTLE_EMPTY + AGE_REQ_NONE, // ITEM_BOTTLE_POTION_RED + AGE_REQ_NONE, // ITEM_BOTTLE_POTION_GREEN + AGE_REQ_NONE, // ITEM_BOTTLE_POTION_BLUE + AGE_REQ_NONE, // ITEM_BOTTLE_FAIRY + AGE_REQ_NONE, // ITEM_BOTTLE_FISH + AGE_REQ_NONE, // ITEM_BOTTLE_MILK_FULL + AGE_REQ_NONE, // ITEM_BOTTLE_RUTOS_LETTER + AGE_REQ_NONE, // ITEM_BOTTLE_BLUE_FIRE + AGE_REQ_NONE, // ITEM_BOTTLE_BUG + AGE_REQ_NONE, // ITEM_BOTTLE_BIG_POE + AGE_REQ_NONE, // ITEM_BOTTLE_MILK_HALF + AGE_REQ_NONE, // ITEM_BOTTLE_POE + AGE_REQ_CHILD, // ITEM_WEIRD_EGG + AGE_REQ_CHILD, // ITEM_CHICKEN + AGE_REQ_CHILD, // ITEM_ZELDAS_LETTER + AGE_REQ_CHILD, // ITEM_MASK_KEATON + AGE_REQ_CHILD, // ITEM_MASK_SKULL + AGE_REQ_CHILD, // ITEM_MASK_SPOOKY + AGE_REQ_CHILD, // ITEM_MASK_BUNNY_HOOD + AGE_REQ_CHILD, // ITEM_MASK_GORON + AGE_REQ_CHILD, // ITEM_MASK_ZORA + AGE_REQ_CHILD, // ITEM_MASK_GERUDO + AGE_REQ_CHILD, // ITEM_MASK_TRUTH + AGE_REQ_CHILD, // ITEM_SOLD_OUT + AGE_REQ_ADULT, // ITEM_POCKET_EGG + AGE_REQ_ADULT, // ITEM_POCKET_CUCCO + AGE_REQ_ADULT, // ITEM_COJIRO + AGE_REQ_ADULT, // ITEM_ODD_MUSHROOM + AGE_REQ_ADULT, // ITEM_ODD_POTION + AGE_REQ_ADULT, // ITEM_POACHERS_SAW + AGE_REQ_ADULT, // ITEM_BROKEN_GORONS_SWORD + AGE_REQ_ADULT, // ITEM_PRESCRIPTION + AGE_REQ_ADULT, // ITEM_EYEBALL_FROG + AGE_REQ_ADULT, // ITEM_EYE_DROPS + AGE_REQ_ADULT, // ITEM_CLAIM_CHECK + AGE_REQ_ADULT, // ITEM_BOW_FIRE + AGE_REQ_ADULT, // ITEM_BOW_ICE + AGE_REQ_ADULT, // ITEM_BOW_LIGHT + AGE_REQ_CHILD, // ITEM_SWORD_KOKIRI + AGE_REQ_ADULT, // ITEM_SWORD_MASTER + AGE_REQ_ADULT, // ITEM_SWORD_BIGGORON + AGE_REQ_CHILD, // ITEM_SHIELD_DEKU + AGE_REQ_NONE, // ITEM_SHIELD_HYLIAN + AGE_REQ_ADULT, // ITEM_SHIELD_MIRROR + AGE_REQ_NONE, // ITEM_TUNIC_KOKIRI + AGE_REQ_ADULT, // ITEM_TUNIC_GORON + AGE_REQ_ADULT, // ITEM_TUNIC_ZORA + AGE_REQ_NONE, // ITEM_BOOTS_KOKIRI + AGE_REQ_ADULT, // ITEM_BOOTS_IRON + AGE_REQ_ADULT, // ITEM_BOOTS_HOVER + AGE_REQ_CHILD, // ITEM_BULLET_BAG_30 + AGE_REQ_CHILD, // ITEM_BULLET_BAG_40 + AGE_REQ_CHILD, // ITEM_BULLET_BAG_50 + AGE_REQ_ADULT, // ITEM_QUIVER_30 + AGE_REQ_ADULT, // ITEM_QUIVER_40 + AGE_REQ_ADULT, // ITEM_QUIVER_50 + AGE_REQ_NONE, // ITEM_BOMB_BAG_20 + AGE_REQ_NONE, // ITEM_BOMB_BAG_30 + AGE_REQ_NONE, // ITEM_BOMB_BAG_40 + AGE_REQ_CHILD, // ITEM_STRENGTH_GORONS_BRACELET + AGE_REQ_ADULT, // ITEM_STRENGTH_SILVER_GAUNTLETS + AGE_REQ_ADULT, // ITEM_STRENGTH_GOLD_GAUNTLETS + AGE_REQ_NONE, // ITEM_SCALE_SILVER + AGE_REQ_NONE, // ITEM_SCALE_GOLDEN + AGE_REQ_ADULT, // ITEM_GIANTS_KNIFE }; u8 gAreaGsFlags[] = {