From 4489d1ed66ec95fe121c8f58c5025b1c3b0bf6fc Mon Sep 17 00:00:00 2001 From: G4M3R L1F3 Date: Sat, 20 Dec 2025 00:09:55 -0400 Subject: [PATCH 1/2] 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/2] 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);