From 97c686c2a623f940c3dfcbdc5ab4f4f555f7d3eb Mon Sep 17 00:00:00 2001
From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com>
Date: Sat, 25 Jan 2025 18:35:20 -0500
Subject: [PATCH] Fix fairy shuffle in LW Scrub Grotto and Royal Family Tomb
 (#4934)

* add missing fairy locations+hint text

* match rft chest name
---
 .../3drando/hint_list/hint_list_exclude_overworld.cpp      | 4 ++++
 .../randomizer/location_access/overworld/graveyard.cpp     | 5 +++--
 .../randomizer/location_access/overworld/lost_woods.cpp    | 7 ++++---
 soh/soh/Enhancements/randomizer/location_list.cpp          | 2 ++
 soh/soh/Enhancements/randomizer/randomizerTypes.h          | 4 ++++
 soh/soh/Enhancements/randomizer/randomizer_inf.h           | 2 ++
 6 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp
index 056e1d4e5..a6c6b99f3 100644
--- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp
+++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp
@@ -1950,5 +1950,9 @@ void StaticData::HintTable_Init_Exclude_Overworld() {
 
     hintTextTable[RHT_GF_KITCHEN_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a guarded kitchen# exposes #[[1]]#.", {QM_RED, QM_GREEN}));
 
+    hintTextTable[RHT_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun for scrubs in the Lost Woods# reveals #[[1]]#.", { QM_RED, QM_GREEN }));
+
+    hintTextTable[RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a royal tomb# reveals #[[1]]#.", { QM_RED, QM_GREEN }));
+
 }
 }
diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp
index eb906d227..727431b1f 100644
--- a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp
+++ b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp
@@ -63,8 +63,9 @@ void RegionTable_Init_Graveyard() {
 
     areaTable[RR_GRAVEYARD_COMPOSERS_GRAVE] = Region("Graveyard Composers Grave", "Graveyard Composers Grave", {}, NO_DAY_NIGHT_CYCLE, {}, {
         //Locations
-        LOCATION(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST, logic->HasFireSource()),
-        LOCATION(RC_SONG_FROM_ROYAL_FAMILYS_TOMB,       logic->CanUseProjectile() || logic->CanJumpslash()),
+        LOCATION(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST,     logic->HasFireSource()),
+        LOCATION(RC_SONG_FROM_ROYAL_FAMILYS_TOMB,           logic->CanUseProjectile() || logic->CanJumpslash()), 
+        LOCATION(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
     }, {
         //Exits
         Entrance(RR_THE_GRAVEYARD, []{return true;}),
diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp
index 6d38b05bd..17aaff639 100644
--- a/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp
+++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp
@@ -105,9 +105,10 @@ void RegionTable_Init_LostWoods() {
 
     areaTable[RR_LW_SCRUBS_GROTTO] = Region("LW Scrubs Grotto", "LW Scrubs Grotto", {}, NO_DAY_NIGHT_CYCLE, {}, {
         //Locations
-        LOCATION(RC_LW_DEKU_SCRUB_GROTTO_REAR,    logic->CanStunDeku()),
-        LOCATION(RC_LW_DEKU_SCRUB_GROTTO_FRONT,   logic->CanStunDeku()),
-        LOCATION(RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
+        LOCATION(RC_LW_DEKU_SCRUB_GROTTO_REAR,      logic->CanStunDeku()),
+        LOCATION(RC_LW_DEKU_SCRUB_GROTTO_FRONT,     logic->CanStunDeku()),
+        LOCATION(RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE,   logic->CanBreakUpperBeehives()), 
+        LOCATION(RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
     }, {
         //Exits
         Entrance(RR_LW_BEYOND_MIDO, []{return true;}),
diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp
index 4141bcce4..54c1d8f81 100644
--- a/soh/soh/Enhancements/randomizer/location_list.cpp
+++ b/soh/soh/Enhancements/randomizer/location_list.cpp
@@ -1803,6 +1803,8 @@ void Rando::StaticData::InitLocationTable() { //
     locationTable[RC_DMT_COW_GROTTO_STORMS_FAIRY] =                     Location::Fairy(RC_DMT_COW_GROTTO_STORMS_FAIRY,                     RCQUEST_BOTH,   RCAREA_DEATH_MOUNTAIN_TRAIL,  SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(0x1000, -311),  "Cow Grotto Song of Storms Fairy",                    "Cow Grotto Song of Storms Fairy",                    RHT_DMT_COW_GROTTO_STORMS_FAIRY,                     SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_STORMS_FAIRY));
     locationTable[RC_LW_SHORTCUT_STORMS_FAIRY] =                        Location::Fairy(RC_LW_SHORTCUT_STORMS_FAIRY,                        RCQUEST_BOTH,   RCAREA_LOST_WOODS,            SCENE_LOST_WOODS,                   TWO_ACTOR_PARAMS(0x1000, -795),  "Shortcuts Song of Storms Fairy",                     "Shortcuts Song of Storms Fairy",                     RHT_LW_SHORTCUT_STORMS_FAIRY,                        SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_STORMS_FAIRY));
     locationTable[RC_GF_KITCHEN_SUN_FAIRY] =                            Location::Fairy(RC_GF_KITCHEN_SUN_FAIRY,                            RCQUEST_BOTH,   RCAREA_GERUDO_FORTRESS,       SCENE_THIEVES_HIDEOUT,              TWO_ACTOR_PARAMS(0x1000, -621),  "Kitchen Sun's Song Fairy",                           "Kitchen Sun's Song Fairy",                           RHT_GF_KITCHEN_SUN_FAIRY,                            SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_SUN_FAIRY));
+    locationTable[RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY] =                  Location::Fairy(RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY,                  RCQUEST_BOTH,   RCAREA_LOST_WOODS,            SCENE_GROTTOS,                      TWO_ACTOR_PARAMS(0x1000, 741),   "Scrub Grotto Sun's Song Fairy",                      "Scrub Grotto Sun's Song Fairy",                      RHT_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY,                  SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY));
+    locationTable[RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] =          Location::Fairy(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY,          RCQUEST_BOTH,   RCAREA_GRAVEYARD,             SCENE_ROYAL_FAMILYS_TOMB,           TWO_ACTOR_PARAMS(0x1000, 1476),  "Composer's Grave Sun's Song Fairy",                  "Composer's Grave Sun's Song Fairy",                  RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY,          SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY));
 
     locationTable[RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY] =            Location::Fairy(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY,            RCQUEST_VANILLA,RCAREA_SPIRIT_TEMPLE,         SCENE_SPIRIT_TEMPLE,                TWO_ACTOR_PARAMS(0x1000, -1896), "After Boulder Room Sun's Song Fairy",                "After Boulder Room Sun's Song Fairy",                RHT_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY,            SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY));
     locationTable[RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY] =              Location::Fairy(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY,              RCQUEST_VANILLA,RCAREA_SPIRIT_TEMPLE,         SCENE_SPIRIT_TEMPLE,                TWO_ACTOR_PARAMS(0x1000, -220),  "Four Armos Room Sun's Song Fairy",                   "Four Armos Room Sun's Song Fairy",                   RHT_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY,              SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY));
diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h
index 34f89c240..66128d50f 100644
--- a/soh/soh/Enhancements/randomizer/randomizerTypes.h
+++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h
@@ -2826,6 +2826,8 @@ typedef enum {
     RC_DMT_COW_GROTTO_STORMS_FAIRY,
     RC_LW_SHORTCUT_STORMS_FAIRY,
     RC_GF_KITCHEN_SUN_FAIRY,
+    RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY,
+    RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY,
     RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY,
     RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY,
     RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY,
@@ -4908,6 +4910,8 @@ typedef enum {
     RHT_DMT_COW_GROTTO_STORMS_FAIRY,
     RHT_LW_SHORTCUT_STORMS_FAIRY,
     RHT_GF_KITCHEN_SUN_FAIRY,
+    RHT_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY,
+    RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY,
     RHT_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY,
     RHT_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY,
     RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY,
diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h
index 9daae088d..e43acf57c 100644
--- a/soh/soh/Enhancements/randomizer/randomizer_inf.h
+++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h
@@ -1253,6 +1253,8 @@ typedef enum {
     RAND_INF_HF_FENCE_GROTTO_STORMS_FAIRY,
     RAND_INF_LW_SHORTCUT_STORMS_FAIRY,
     RAND_INF_GF_KITCHEN_SUN_FAIRY,
+    RAND_INF_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY,
+    RAND_INF_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY,
     RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY,
     RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY,
     RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY,