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);