diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index adfb3e080..8847f61f1 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -74,6 +74,7 @@ const std::vector enhancementsCvars = { "gNoForcedNavi", "gSkulltulaFreeze", "gMMBunnyHood", + "gAdultBunnyHood", "gFastChests", "gChestSizeAndTextureMatchesContents", "gFastDrops", @@ -545,6 +546,8 @@ const std::vector enhancedPresetEntries = { PRESET_ENTRY_S32("gSkulltulaFreeze", 1), // MM Bunny Hood PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST_AND_JUMP), + // Adult Bunny Hood + PRESET_ENTRY_S32("gAdultBunnyHood", 1), // Fast Chests PRESET_ENTRY_S32("gFastChests", 1), // Fast Drops @@ -665,6 +668,8 @@ const std::vector randomizerPresetEntries = { PRESET_ENTRY_S32("gSkulltulaFreeze", 1), // MM Bunny Hood PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST_AND_JUMP), + // Adult Bunny Hood + PRESET_ENTRY_S32("gAdultBunnyHood", 1), // Fast Chests PRESET_ENTRY_S32("gFastChests", 1), // Fast Drops @@ -763,6 +768,7 @@ const std::vector spockRacePresetEntries = { PRESET_ENTRY_S32("gInstantPutaway", 1), PRESET_ENTRY_S32("gFastBoomerang", 1), PRESET_ENTRY_S32("gDpadNoDropOcarinaInput", 1), + PRESET_ENTRY_S32("gAdultBunnyHood", 1), PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST), PRESET_ENTRY_S32("gSeparateArrows", 1), PRESET_ENTRY_S32("gAssignableTunicsAndBoots", 1), @@ -835,6 +841,7 @@ const std::vector spockRacePresetEntries = { }; const std::vector spockRaceNoLogicPresetEntries = { + PRESET_ENTRY_S32("gAdultBunnyHood", 1), PRESET_ENTRY_S32("gAdultMinimumWeightFish", 6), PRESET_ENTRY_S32("gAssignableTunicsAndBoots", 1), PRESET_ENTRY_S32("gCheatEasyPauseBufferEnabled", 1), @@ -945,6 +952,7 @@ const std::vector s6PresetEntries = { PRESET_ENTRY_S32("gChestSizeAndTextureMatchesContents", CSMC_BOTH), PRESET_ENTRY_S32("gFastChests", 1), PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST), + PRESET_ENTRY_S32("gAdultBunnyHood", 1), PRESET_ENTRY_S32("gRandomizeBigPoeTargetCount", 1), PRESET_ENTRY_S32("gRandomizeCuccosToReturn", 4), PRESET_ENTRY_S32("gRandomizeDoorOfTime", RO_DOOROFTIME_OPEN), @@ -978,6 +986,7 @@ const std::vector hellModePresetEntries = { PRESET_ENTRY_S32("gChestSizeAndTextureMatchesContents", CSMC_BOTH), PRESET_ENTRY_S32("gFastChests", 1), PRESET_ENTRY_S32("gMMBunnyHood", BUNNY_HOOD_FAST), + PRESET_ENTRY_S32("gAdultBunnyHood", 1), PRESET_ENTRY_S32("gRandomizeBigPoeTargetCount", 1), PRESET_ENTRY_S32("gRandomizeBlueFireArrows", 1), PRESET_ENTRY_S32("gRandomizeBossKeysanity", RO_DUNGEON_ITEM_LOC_ANYWHERE), diff --git a/soh/soh/SohMenuBar.cpp b/soh/soh/SohMenuBar.cpp index aac6b6b7b..d8cbefd0b 100644 --- a/soh/soh/SohMenuBar.cpp +++ b/soh/soh/SohMenuBar.cpp @@ -586,6 +586,8 @@ void DrawEnhancementsMenu() { "Wearing the Bunny Hood grants a speed increase like in Majora's Mask. The longer jump option is not accounted for in randomizer logic.\n\n" "Also disables NPC's reactions to wearing the Bunny Hood." ); + UIWidgets::PaddedEnhancementCheckbox("Bunny Hood Equippable as Adult", "gAdultBunnyHood", true, false, (CVarGetInteger("gMMBunnyHood", BUNNY_HOOD_VANILLA) == BUNNY_HOOD_VANILLA), "Only available with increased bunny hood speed", UIWidgets::CheckboxGraphics::Cross, false); + UIWidgets::Tooltip("Allows the bunny hood to be equipped normally from the pause menu as adult."); UIWidgets::PaddedEnhancementCheckbox("Mask Select in Inventory", "gMaskSelect", true, false); UIWidgets::Tooltip("After completing the mask trading sub-quest, press A and any direction on the mask slot to change masks"); UIWidgets::PaddedEnhancementCheckbox("Nuts explode bombs", "gNutsExplodeBombs", true, false); diff --git a/soh/src/code/z_play.c b/soh/src/code/z_play.c index dfafbb7ff..fb4628834 100644 --- a/soh/src/code/z_play.c +++ b/soh/src/code/z_play.c @@ -653,7 +653,7 @@ 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("gTimelessEquipment", 0)) { + if ((CVarGetInteger("gMMBunnyHood", BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA && CVarGetInteger("gAdultBunnyHood", 0)) || CVarGetInteger("gTimelessEquipment", 0)) { gItemAgeReqs[ITEM_MASK_BUNNY] = 9; if(INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_MASK_BUNNY) gSlotAgeReqs[SLOT_TRADE_CHILD] = 9; 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 54b0abab3..2fe8fddb7 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 @@ -538,7 +538,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { gSelectingMask = cursorSlot == SLOT_TRADE_CHILD; gSlotAgeReqs[SLOT_TRADE_CHILD] = gItemAgeReqs[ITEM_MASK_BUNNY] = - ((CVarGetInteger("gMMBunnyHood", BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA || CVarGetInteger("gTimelessEquipment", 0)) && + ((((CVarGetInteger("gMMBunnyHood", BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA) && CVarGetInteger("gAdultBunnyHood", 0)) || CVarGetInteger("gTimelessEquipment", 0)) && INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_MASK_BUNNY) ? 9 : 1;