From 4489d1ed66ec95fe121c8f58c5025b1c3b0bf6fc Mon Sep 17 00:00:00 2001 From: G4M3R L1F3 Date: Sat, 20 Dec 2025 00:09:55 -0400 Subject: [PATCH 1/6] Added the option to disable Great Fairy rewards --- include/apcommon.h | 1 + include/yaml_generation.h | 6 ++++++ mod.toml | 1 + src/great_fairy_hooks.c | 5 +++++ src/yaml_generation_menu.c | 8 +++++++- 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/include/apcommon.h b/include/apcommon.h index 2cfe957..819aad8 100644 --- a/include/apcommon.h +++ b/include/apcommon.h @@ -128,6 +128,7 @@ RECOMP_IMPORT(".", u32 rando_get_majora_remains_required()); RECOMP_IMPORT(".", u32 rando_get_random_seed()); RECOMP_IMPORT(".", bool rando_is_magic_trap()); RECOMP_IMPORT(".", bool rando_skulltulas_enabled()); +RECOMP_IMPORT(".", bool rando_great_fairy_rewards_disabled()); RECOMP_IMPORT(".", bool rando_shopsanity_enabled()); RECOMP_IMPORT(".", bool rando_advanced_shops_enabled()); RECOMP_IMPORT(".", bool rando_get_curiostity_shop_trades()); diff --git a/include/yaml_generation.h b/include/yaml_generation.h index 7755bde..c88f453 100644 --- a/include/yaml_generation.h +++ b/include/yaml_generation.h @@ -85,6 +85,12 @@ typedef enum { RANDO_SKULLSANITY_MAX = 0xFFFFFFFF } RandoSkullSanity; +typedef enum { + RANDO_SHUFFLE_GREAT_FAIRY_REWARDS_VANILLA = 0, + RANDO_SHUFFLE_GREAT_FAIRY_REWARDS_ENABLED = 1, + RANDO_SHUFFLE_GREAT_FAIRY_REWARDS_ADVANCED = 2 +} RandoShuffleGreatFairyRewards; + typedef enum { RANDO_SHOP_PRICES_VANILLA = 0, RANDO_SHOP_PRICES_FREE = 1, diff --git a/mod.toml b/mod.toml index 3f98682..ef2e073 100644 --- a/mod.toml +++ b/mod.toml @@ -63,6 +63,7 @@ native_libraries = [ "rando_get_tunic_color", "rando_get_shop_price", "rando_skulltulas_enabled", + "rando_great_fairy_rewards_disabled", "rando_shopsanity_enabled", "rando_advanced_shops_enabled", "rando_scrubs_enabled", diff --git a/src/great_fairy_hooks.c b/src/great_fairy_hooks.c index f99f566..0d77abe 100644 --- a/src/great_fairy_hooks.c +++ b/src/great_fairy_hooks.c @@ -168,6 +168,11 @@ RECOMP_PATCH void EnElfgrp_Init(Actor* thisx, PlayState* play) { void EnElfgrp_OfferLoop(EnElfgrp* this, PlayState* play) { s32 type = ENELFGRP_GET_TYPE(&this->actor); + if (rando_great_fairy_rewards_disabled()) + { + return; + } + bool hasFairies = type == ENELFGRP_TYPE_MAGIC ? rando_has_item(0x01007F) : rando_has_item(0x010000 | (type - 1)) >= rando_get_slotdata_u32("required_stray_fairies"); if (hasFairies && !rando_location_is_checked(LOCATION_GREAT_FAIRY)) { diff --git a/src/yaml_generation_menu.c b/src/yaml_generation_menu.c index 44de643..452df37 100644 --- a/src/yaml_generation_menu.c +++ b/src/yaml_generation_menu.c @@ -389,6 +389,12 @@ static EnumOptionValue rando_skullsanity_options[] = { { "ignore", NULL }, }; +static EnumOptionValue rando_shuffle_great_fairy_rewards_options[] ={ + { "vanilla", NULL }, + { "anything", NULL }, + { "ignore", NULL}, +}; + static EnumOptionValue rando_shopsanity_options[] = { { "vanilla", NULL }, { "enabled", NULL }, @@ -498,7 +504,7 @@ void randoCreateYamlConfigMenu() { randoCreateBoolPropOption(&yaml_config_menu, "shuffle_spiderhouse_reward", "Shuffle Spiderhouse Rewards:", false); randoCreateIntSliderOption(&yaml_config_menu, "required_skull_tokens", "Required Skulltula Tokens:", 0, 30, 1, 30); randoCreateRadioOption(&yaml_config_menu, "skullsanity", "Skull-Sanity Mode:", rando_skullsanity_options, ARRAY_COUNT(rando_skullsanity_options), RANDO_SKULLSANITY_VANILLA); - randoCreateBoolPropOption(&yaml_config_menu, "shuffle_great_fairy_rewards", "Shuffle Great Fairy Rewards:", false); + randoCreateRadioOption(&yaml_config_menu, "shuffle_great_fairy_rewards", "Shuffle Great Fairy Rewards:", rando_shuffle_great_fairy_rewards_options, ARRAY_COUNT(rando_shuffle_great_fairy_rewards_options), RANDO_SHUFFLE_GREAT_FAIRY_REWARDS_VANILLA); randoCreateIntSliderOption(&yaml_config_menu, "required_stray_fairies", "Required Stray Fairies:", 0, 15, 1, 15); randoCreateBoolPropOption(&yaml_config_menu, "fairysanity", "Fairy-Sanity:", false); randoCreateRadioOption(&yaml_config_menu, "shop_prices", "Shop Prices:", shop_prices_options, ARRAY_COUNT(shop_prices_options), RANDO_SHOP_PRICES_VANILLA); From 2d624d1e05817dd724dc910666e37cf9a710542e Mon Sep 17 00:00:00 2001 From: G4M3R L1F3 Date: Mon, 12 Jan 2026 19:59:01 -0400 Subject: [PATCH 2/6] Mod checks slot data for Shuffle Great Fairy Rewards setting instead of glue Also lowered Moon/Majora Remains Required minimum to 0 (was set to 1 for solo non-multiworld seeds) --- include/apcommon.h | 1 - include/yaml_generation.h | 6 ------ mod.toml | 1 - src/great_fairy_hooks.c | 2 +- src/yaml_generation_menu.c | 10 +++++----- 5 files changed, 6 insertions(+), 14 deletions(-) diff --git a/include/apcommon.h b/include/apcommon.h index 819aad8..2cfe957 100644 --- a/include/apcommon.h +++ b/include/apcommon.h @@ -128,7 +128,6 @@ RECOMP_IMPORT(".", u32 rando_get_majora_remains_required()); RECOMP_IMPORT(".", u32 rando_get_random_seed()); RECOMP_IMPORT(".", bool rando_is_magic_trap()); RECOMP_IMPORT(".", bool rando_skulltulas_enabled()); -RECOMP_IMPORT(".", bool rando_great_fairy_rewards_disabled()); RECOMP_IMPORT(".", bool rando_shopsanity_enabled()); RECOMP_IMPORT(".", bool rando_advanced_shops_enabled()); RECOMP_IMPORT(".", bool rando_get_curiostity_shop_trades()); diff --git a/include/yaml_generation.h b/include/yaml_generation.h index c88f453..7755bde 100644 --- a/include/yaml_generation.h +++ b/include/yaml_generation.h @@ -85,12 +85,6 @@ typedef enum { RANDO_SKULLSANITY_MAX = 0xFFFFFFFF } RandoSkullSanity; -typedef enum { - RANDO_SHUFFLE_GREAT_FAIRY_REWARDS_VANILLA = 0, - RANDO_SHUFFLE_GREAT_FAIRY_REWARDS_ENABLED = 1, - RANDO_SHUFFLE_GREAT_FAIRY_REWARDS_ADVANCED = 2 -} RandoShuffleGreatFairyRewards; - typedef enum { RANDO_SHOP_PRICES_VANILLA = 0, RANDO_SHOP_PRICES_FREE = 1, diff --git a/mod.toml b/mod.toml index ef2e073..3f98682 100644 --- a/mod.toml +++ b/mod.toml @@ -63,7 +63,6 @@ native_libraries = [ "rando_get_tunic_color", "rando_get_shop_price", "rando_skulltulas_enabled", - "rando_great_fairy_rewards_disabled", "rando_shopsanity_enabled", "rando_advanced_shops_enabled", "rando_scrubs_enabled", diff --git a/src/great_fairy_hooks.c b/src/great_fairy_hooks.c index 0d77abe..c92a250 100644 --- a/src/great_fairy_hooks.c +++ b/src/great_fairy_hooks.c @@ -168,7 +168,7 @@ RECOMP_PATCH void EnElfgrp_Init(Actor* thisx, PlayState* play) { void EnElfgrp_OfferLoop(EnElfgrp* this, PlayState* play) { s32 type = ENELFGRP_GET_TYPE(&this->actor); - if (rando_great_fairy_rewards_disabled()) + if (rando_get_slotdata_u32("shuffle_great_fairy_rewards") == 0) { return; } diff --git a/src/yaml_generation_menu.c b/src/yaml_generation_menu.c index 452df37..c22f944 100644 --- a/src/yaml_generation_menu.c +++ b/src/yaml_generation_menu.c @@ -390,9 +390,9 @@ static EnumOptionValue rando_skullsanity_options[] = { }; static EnumOptionValue rando_shuffle_great_fairy_rewards_options[] ={ + { "disabled", NULL }, { "vanilla", NULL }, - { "anything", NULL }, - { "ignore", NULL}, + { "enabled", NULL}, }; static EnumOptionValue rando_shopsanity_options[] = { @@ -491,8 +491,8 @@ void randoCreateYamlConfigMenu() { yaml_config_menu.num_options = 0; randoCreateRadioOption(&yaml_config_menu, "accessibility", "Accessibility:", rando_accessibility_options, ARRAY_COUNT(rando_accessibility_options), RANDO_ACCESSABILITY_FULL); randoCreateRadioOption(&yaml_config_menu, "logic_difficulty", "Logic Difficulty:", rando_logic_difficulty_options, ARRAY_COUNT(rando_logic_difficulty_options), RANDO_LOGIC_DIFFICULTY_NORMAL); - randoCreateIntSliderOption(&yaml_config_menu, "moon_remains_required", "Moon Boss Remains Required:", 1, 4, 1, 4); - randoCreateIntSliderOption(&yaml_config_menu, "majora_remains_required", "Majora Boss Remains Required:", 1, 4, 1, 4); + randoCreateIntSliderOption(&yaml_config_menu, "moon_remains_required", "Moon Boss Remains Required:", 0, 4, 1, 4); + randoCreateIntSliderOption(&yaml_config_menu, "majora_remains_required", "Majora Boss Remains Required:", 0, 4, 1, 4); randoCreateBoolPropOption(&yaml_config_menu, "camc", "Chests Match Contents:", true); randoCreateBoolPropOption(&yaml_config_menu, "swordless", "Start Swordless:", false); randoCreateBoolPropOption(&yaml_config_menu, "shieldless", "Start Shieldless:", false); @@ -504,7 +504,7 @@ void randoCreateYamlConfigMenu() { randoCreateBoolPropOption(&yaml_config_menu, "shuffle_spiderhouse_reward", "Shuffle Spiderhouse Rewards:", false); randoCreateIntSliderOption(&yaml_config_menu, "required_skull_tokens", "Required Skulltula Tokens:", 0, 30, 1, 30); randoCreateRadioOption(&yaml_config_menu, "skullsanity", "Skull-Sanity Mode:", rando_skullsanity_options, ARRAY_COUNT(rando_skullsanity_options), RANDO_SKULLSANITY_VANILLA); - randoCreateRadioOption(&yaml_config_menu, "shuffle_great_fairy_rewards", "Shuffle Great Fairy Rewards:", rando_shuffle_great_fairy_rewards_options, ARRAY_COUNT(rando_shuffle_great_fairy_rewards_options), RANDO_SHUFFLE_GREAT_FAIRY_REWARDS_VANILLA); + randoCreateRadioOption(&yaml_config_menu, "shuffle_great_fairy_rewards", "Shuffle Great Fairy Rewards:", rando_shuffle_great_fairy_rewards_options, ARRAY_COUNT(rando_shuffle_great_fairy_rewards_options), 0); randoCreateIntSliderOption(&yaml_config_menu, "required_stray_fairies", "Required Stray Fairies:", 0, 15, 1, 15); randoCreateBoolPropOption(&yaml_config_menu, "fairysanity", "Fairy-Sanity:", false); randoCreateRadioOption(&yaml_config_menu, "shop_prices", "Shop Prices:", shop_prices_options, ARRAY_COUNT(shop_prices_options), RANDO_SHOP_PRICES_VANILLA); From 94ea2b8de78ec3fa2e2566aa21e51edc8d000797 Mon Sep 17 00:00:00 2001 From: G4M3R L1F3 Date: Wed, 21 Jan 2026 21:52:19 -0400 Subject: [PATCH 3/6] Added the option to disable ShuffleSpiderhouseReward I made sure that the guy in the swamp house doesn't give anything. I also changed his dialog in both forms to indicate that he's not gonna give an item. I also made sure that the guy in the ocean house gives a silver rupee instead of a grey AP item. --- src/item_text.c | 25 +++++++++++++++++++++++++ src/spiderhouse_man_hooks.c | 7 ++++++- src/yaml_generation_menu.c | 8 +++++++- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/item_text.c b/src/item_text.c index 67958ae..8d7a416 100644 --- a/src/item_text.c +++ b/src/item_text.c @@ -102,6 +102,11 @@ static unsigned char p_pirate_bad_msg[128] = "Keep this\x01 bad picture of a pir static unsigned char slow_dog_msg[128] = "Hoo-whine.\x11How can any of us win against...\x10.\x0a.\x0a." "\x03" "blue dog" "\x00" "?\xbf"; static unsigned char fast_dog_msg[128] = "\x0a\x0a\x0a\x0a\x0a\x0a.\x0a.\x0a.\x0a\x0a\x0a\x0a\xbf"; +static unsigned char cursed_spider_msg_1[128] = "I have nothing to give you.\x11Go away.\xbf"; +static unsigned char cursed_spider_msg_2[128] = "Do not bother lifting the curse.\x11The mask is mine!\xbf"; +static unsigned char ssh_guy_msg_1[128] = "Thanks for saving me, I guess.\x11Unfortunately, the mask I had vanished.\x10It was making me infinitely rich! Now, I'll need\x11to go back at waving my arms somewhere...\xbf"; +static unsigned char ssh_guy_msg_2[128] = "I told you to NOT save me! That\x11mask was giving me infinite riches.\x11It's gone now.\x10\x0a\x0a\x0aNow what?\xbf"; + static unsigned char fool_msg[128] = "You are a\x01 FOOL!\xbf"; static unsigned char shop_msg[128]; @@ -343,6 +348,26 @@ RECOMP_PATCH void Message_OpenText(PlayState* play, u16 textId) { case 0x74: msg = fool_msg; break; + case 0x910: // Cursed Spider first dialog + if ((s16) rando_get_slotdata_u32("shuffle_spiderhouse_reward") == 0) { + msg = cursed_spider_msg_1; + } + break; + case 0x914: // Cursed Spider recurring dialogs + if ((s16) rando_get_slotdata_u32("shuffle_spiderhouse_reward") == 0) { + msg = cursed_spider_msg_2; + } + break; + case 0x91B: // Cured Spider first dialog + if ((s16) rando_get_slotdata_u32("shuffle_spiderhouse_reward") == 0) { + msg = ssh_guy_msg_1; + } + break; + case 0x918: // Cured Spider recurring dialog + if ((s16) rando_get_slotdata_u32("shuffle_spiderhouse_reward") == 0) { + msg = ssh_guy_msg_2; + } + break; default: break; } diff --git a/src/spiderhouse_man_hooks.c b/src/spiderhouse_man_hooks.c index 3d30349..4a1749b 100644 --- a/src/spiderhouse_man_hooks.c +++ b/src/spiderhouse_man_hooks.c @@ -65,6 +65,11 @@ void OnEnSth_Init(Actor* thisx, PlayState* play) { // fake skull token count for lower requirements Inventory_FakeSkullTokenCount(play->sceneId); + + // If ShuffleSpiderhouseReward is disabled, set the flag that prevent giving the SSH reward + if ((s16) rando_get_slotdata_u32("shuffle_spiderhouse_reward") == 0) { + SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_MASK_OF_TRUTH); + } } RECOMP_HOOK_RETURN("EnSth_Init") @@ -125,7 +130,7 @@ RECOMP_PATCH void EnSth_GiveOceansideSpiderHouseReward(EnSth* this, PlayState* p } else { // this could all be moved into a hook? // handle all 3 day checks here as well - if (rando_location_is_checked(GI_WALLET_GIANT)) { + if (rando_location_is_checked(GI_WALLET_GIANT) || (s16) rando_get_slotdata_u32("shuffle_spiderhouse_reward") == 0) { STH_GI_ID(&this->actor) = GI_RUPEE_SILVER; } else { STH_GI_ID(&this->actor) = GI_WALLET_GIANT; diff --git a/src/yaml_generation_menu.c b/src/yaml_generation_menu.c index c22f944..30620c2 100644 --- a/src/yaml_generation_menu.c +++ b/src/yaml_generation_menu.c @@ -383,6 +383,12 @@ static EnumOptionValue shop_prices_options[] = { { "offensive", NULL }, }; +static EnumOptionValue rando_shuffle_spiderhouse_reward_options[] ={ + { "disabled", NULL }, + { "vanilla", NULL }, + { "enabled", NULL}, +}; + static EnumOptionValue rando_skullsanity_options[] = { { "vanilla", NULL }, { "anything", NULL }, @@ -501,7 +507,7 @@ void randoCreateYamlConfigMenu() { randoCreateRadioOption(&yaml_config_menu, "starting_hearts_are_containers_or_pieces", "Unused Starting Hearts are Distributed as:", rando_starting_hearts_type_options, ARRAY_COUNT(rando_starting_hearts_type_options), RANDO_STARTING_HEARTS_ARE_CONTAINERS); randoCreateRadioOption(&yaml_config_menu, "shuffle_regional_maps", "Shuffle Regional Maps:", rando_shuffle_regional_maps_options, ARRAY_COUNT(rando_shuffle_regional_maps_options), RANDO_SHUFFLE_REGIONAL_MAPS_VANILLA); randoCreateRadioOption(&yaml_config_menu, "shuffle_boss_remains", "Shuffle Boss Remains:", rando_shuffle_boss_remains_options, ARRAY_COUNT(rando_shuffle_boss_remains_options), RANDO_SHUFFLE_BOSS_REMAINS_VANILLA); - randoCreateBoolPropOption(&yaml_config_menu, "shuffle_spiderhouse_reward", "Shuffle Spiderhouse Rewards:", false); + randoCreateRadioOption(&yaml_config_menu, "shuffle_spiderhouse_reward", "Shuffle Spiderhouse Rewards:", rando_shuffle_spiderhouse_reward_options, ARRAY_COUNT(rando_shuffle_spiderhouse_reward_options), 0); randoCreateIntSliderOption(&yaml_config_menu, "required_skull_tokens", "Required Skulltula Tokens:", 0, 30, 1, 30); randoCreateRadioOption(&yaml_config_menu, "skullsanity", "Skull-Sanity Mode:", rando_skullsanity_options, ARRAY_COUNT(rando_skullsanity_options), RANDO_SKULLSANITY_VANILLA); randoCreateRadioOption(&yaml_config_menu, "shuffle_great_fairy_rewards", "Shuffle Great Fairy Rewards:", rando_shuffle_great_fairy_rewards_options, ARRAY_COUNT(rando_shuffle_great_fairy_rewards_options), 0); From c88945aaa6ff22f2ae87e37b89b6e0dcf8b9ed9d Mon Sep 17 00:00:00 2001 From: G4M3R L1F3 Date: Wed, 21 Jan 2026 22:15:26 -0400 Subject: [PATCH 4/6] Fixed crash when speaking with SSH guy for the first time after being cured The text I wrote was too long, so I shortened it and changed both messages to accomodate. --- src/item_text.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/item_text.c b/src/item_text.c index 8d7a416..815b2a3 100644 --- a/src/item_text.c +++ b/src/item_text.c @@ -104,8 +104,8 @@ static unsigned char fast_dog_msg[128] = "\x0a\x0a\x0a\x0a\x0a\x0a.\x0a.\x0a.\x0 static unsigned char cursed_spider_msg_1[128] = "I have nothing to give you.\x11Go away.\xbf"; static unsigned char cursed_spider_msg_2[128] = "Do not bother lifting the curse.\x11The mask is mine!\xbf"; -static unsigned char ssh_guy_msg_1[128] = "Thanks for saving me, I guess.\x11Unfortunately, the mask I had vanished.\x10It was making me infinitely rich! Now, I'll need\x11to go back at waving my arms somewhere...\xbf"; -static unsigned char ssh_guy_msg_2[128] = "I told you to NOT save me! That\x11mask was giving me infinite riches.\x11It's gone now.\x10\x0a\x0a\x0aNow what?\xbf"; +static unsigned char ssh_guy_msg_1[128] = "I am not giving you my mask.\x11It's mine and mine only!\xbf"; +static unsigned char ssh_guy_msg_2[128] = "Great, now my mask is gone. That\x11mask was giving me infinite riches.\x10Now what?\xbf"; static unsigned char fool_msg[128] = "You are a\x01 FOOL!\xbf"; From 5d928411d094d6af2531e21d2689f7c4398960cc Mon Sep 17 00:00:00 2001 From: G4M3R L1F3 Date: Wed, 21 Jan 2026 22:47:51 -0400 Subject: [PATCH 5/6] Changed text box type to the one most NPCs use --- src/item_text.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/item_text.c b/src/item_text.c index 815b2a3..a2e29b9 100644 --- a/src/item_text.c +++ b/src/item_text.c @@ -388,6 +388,10 @@ RECOMP_PATCH void Message_OpenText(PlayState* play, u16 textId) { font->msgBuf.schar[0] = 0x06; font->msgBuf.schar[1] = 0x71; } + if (textId == 0x910 || textId == 0x914 || textId == 0x91B || textId == 0x918) { + font->msgBuf.schar[0] = 0x00; + } + if ((textId & 0xFF00) == 0x3600 || (textId & 0xFF00) == 0x3700 || (textId == 0x0880 && rando_shopsanity_enabled() && !rando_location_is_checked_async(0x090002))) { msg = shop_msg; font->msgBuf.schar[0] = 0x06; From 9aa444b3d5a268a9fd1e0c7359667dc19aa4ceb2 Mon Sep 17 00:00:00 2001 From: G4M3R L1F3 Date: Fri, 23 Jan 2026 00:02:16 -0400 Subject: [PATCH 6/6] Added ShuffleTreasureGameChests option Added new text to hint towards the checks being disabled as well as a way to prevent players from playing the game if the corresponding chests are not shuffled. --- src/item_text.c | 73 +++++++++++++++++++++++++++++++++++++- src/yaml_generation_menu.c | 7 ++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/src/item_text.c b/src/item_text.c index a2e29b9..ecbf58a 100644 --- a/src/item_text.c +++ b/src/item_text.c @@ -106,6 +106,12 @@ static unsigned char cursed_spider_msg_1[128] = "I have nothing to give you.\x11 static unsigned char cursed_spider_msg_2[128] = "Do not bother lifting the curse.\x11The mask is mine!\xbf"; static unsigned char ssh_guy_msg_1[128] = "I am not giving you my mask.\x11It's mine and mine only!\xbf"; static unsigned char ssh_guy_msg_2[128] = "Great, now my mask is gone. That\x11mask was giving me infinite riches.\x10Now what?\xbf"; +static unsigned char chest_game_not_goron_1[128] = "Sorry, but we only accept\x11\x01strong and burly\x00 individuals.\xbf"; +static unsigned char chest_game_human[128] = "Looks like you're collecting \x01masks\x00!\x11There's \x01one I like\x00, but I don't\x11know if you have it...\xbf"; +static unsigned char chest_game_deku[128] = "Which is unfortunate because\x11you are so cute!!!\xbf"; +static unsigned char chest_game_zora[128] = "It's too bad... You look like my type...\xbf"; +static unsigned char chest_game_disabled_1[128] = "Oh! A customer! Unfortunately,\x11we are under construction.\xbf"; +static unsigned char chest_game_disabled_2[128] = "We'll be opening\x01 after the carnival\x00.\x11It will be the best celebration!\xbf"; static unsigned char fool_msg[128] = "You are a\x01 FOOL!\xbf"; @@ -368,6 +374,69 @@ RECOMP_PATCH void Message_OpenText(PlayState* play, u16 textId) { msg = ssh_guy_msg_2; } break; + case 0x76D: // Speaking to Treasure Game lady as human + if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 1) { + msg = chest_game_not_goron_1; + } + else if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 0) + { + msg = chest_game_disabled_1; + } + break; + case 0x76C: // Speaking to Treasure Game lady as Deku + if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 1) { + msg = chest_game_not_goron_1; + } + else if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 0) + { + msg = chest_game_disabled_1; + } + break; + case 0x76E: // Speaking to Treasure Game lady as Goron + if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 0) { + msg = chest_game_disabled_1; + } + break; + case 0x76F: // Speaking to Treasure Game lady as Zora + if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 1) { + msg = chest_game_not_goron_1; + } + else if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 0) + { + msg = chest_game_disabled_1; + } + break; + case 0x771: // Accepting or refusing to pay for Treasure Game lady as human + if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 1) { + msg = chest_game_human; + } + else if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 0) + { + msg = chest_game_disabled_2; + } + break; + case 0x770: // Accepting or refusing to pay for Treasure Game lady as Deku + if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 1) { + msg = chest_game_deku; + } + else if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 0) { + msg = chest_game_disabled_2; + } + break; + case 0x772: // Accepting or refusing to pay for Treasure Game lady as Goron + if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 0) { + msg = chest_game_disabled_2; + } + break; + case 0x773: // Accepting or refusing to pay for Treasure Game lady as Zora + if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 1) { + msg = chest_game_zora; + } + else if ((s16) rando_get_slotdata_u32("shuffle_treasure_chest_game") == 0) + { + msg = chest_game_disabled_2; + } + break; default: break; } @@ -388,7 +457,9 @@ RECOMP_PATCH void Message_OpenText(PlayState* play, u16 textId) { font->msgBuf.schar[0] = 0x06; font->msgBuf.schar[1] = 0x71; } - if (textId == 0x910 || textId == 0x914 || textId == 0x91B || textId == 0x918) { + if (textId == 0x910 || textId == 0x914 || textId == 0x91B || textId == 0x918 || + textId == 0x76D || textId == 0x76C || textId == 0x76E || textId == 0x76F || // Speaking to Treasure Game lady + textId == 0x770 || textId == 0x771 || textId == 0x772 || textId == 0x773) { // Choosing to pay for Treasure Game font->msgBuf.schar[0] = 0x00; } diff --git a/src/yaml_generation_menu.c b/src/yaml_generation_menu.c index 30620c2..ac42cf0 100644 --- a/src/yaml_generation_menu.c +++ b/src/yaml_generation_menu.c @@ -407,6 +407,12 @@ static EnumOptionValue rando_shopsanity_options[] = { { "advanced", NULL }, }; +static EnumOptionValue treasure_chest_game_shuffle_options[] = { + { "disabled", NULL }, + { "goron_only", NULL }, + { "everything", NULL }, +}; + static EnumOptionValue rando_damage_multiplier_options[] = { { "half", NULL }, { "normal", NULL }, @@ -521,6 +527,7 @@ void randoCreateYamlConfigMenu() { randoCreateBoolPropOption(&yaml_config_menu, "bosskeysanity", "Boss-Key-Sanity:", false); randoCreateBoolPropOption(&yaml_config_menu, "curiostity_shop_trades", "Curiosity Shop Trades:", false); randoCreateBoolPropOption(&yaml_config_menu, "intro_checks", "Intro Checks:", false); + randoCreateRadioOption(&yaml_config_menu, "shuffle_treasure_chest_game", "Treasure Chest Game Shuffle:", treasure_chest_game_shuffle_options, ARRAY_COUNT(treasure_chest_game_shuffle_options), 1); randoCreateBoolPropOption(&yaml_config_menu, "start_with_consumables", "Start With Consumables:", true); randoCreateBoolPropOption(&yaml_config_menu, "permanent_chateau_romani", "Permanent Chateau Romani:", true); randoCreateBoolPropOption(&yaml_config_menu, "start_with_inverted_time", "Start With Inverted Time:", true);