diff --git a/Z3DR b/Z3DR index 56dd88d..4f10d4c 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 56dd88d97355cf468fe2b0ae30fb26babda291de +Subproject commit 4f10d4cb418a3c3339d984ffd39fb4b99f86e481 diff --git a/source/custom_messages.cpp b/source/custom_messages.cpp index 4f22e81..27ee151 100644 --- a/source/custom_messages.cpp +++ b/source/custom_messages.cpp @@ -254,7 +254,7 @@ void CreateBaselineCustomMessages() { // Woodfall CreateMessageFromTextObject(0x6137, 0x003E, 0x3FFFFFFF, 0xFF0000, GITextIntroMap + GITextDungeonWoodfall, - {QM_GREEN, QM_GREEN}, {}, {}, 0x0, false, false); + {QM_GREEN, QM_WHITE}, {}, {}, 0x0, false, false); // Snowhead CreateMessageFromTextObject(0x6138, 0x003E, 0x3FFFFFFF, 0xFF0000, @@ -345,6 +345,57 @@ void CreateBaselineCustomMessages() { }, {QM_BLUE, QM_RED}, {}, {}, 0x0, false, false); + //Bank Rewards + CreateMessage(0x045c, 0xFFFF, 0x3FFFFFFF, 0xFF0000, + {"What's this? You've already saved up #500 Rupees#!?! Well, little guy, here's your special gift. Take it!", + // French + "Vous avez déjà économisé #500 Rubis#?! Bon, petit, voici votre cadeau spécial. Prenez-le!", + }, + {QM_RED}, {}, {}, 0x0, false, false); + + CreateMessage(0x045d, 0xFFFF, 0x3FFFFFFF, 0xFF0000, + {"What's this? You've already saved up #1,000 Rupees#?! Well, little guy, I can't take any more deposits. Sorry, but this is all I can give you.", + // French + "Vous avez déjà économisé #1000 Rubis#?! Bon, petit, je ne peux plus accepter de dépôts. Désolé, mais c'est tout ce que je peux vous donner.", + }, + {QM_RED}, {}, {}, 0x0, false, false); + + //Stray Fairies + CreateMessage(0x06144, 0xFFFF, 0x3FFFFFFF, 0xFF0000, + {"You got the #Clock Town Stray Fairy#! Bring it to the Fairy Fountain in North Clock Town!", + // French + "Vous obtenez une #Fée Perdue de Clock Town#! Apporte-le à la Fontaine des Fées, dans le Quartier Nord de Bourg-Clocher!", + }, + {QM_RED}, {}, {}, 0x0, false, false); + + CreateMessage(0x06145, 0xFFFF, 0x3FFFFFFF, 0xFF0000, + {"You got a #Woodfall Stray Fairy#! &You have collected #=WFF#.", + // French + "Vous obtenez une #Fée Perdue de la forêt#!&Vous en avez désormais #=WFF#.", + }, + {QM_GREEN, QM_RED}, {}, {}, 0x0, false, false); + + CreateMessage(0x06146, 0xFFFF, 0x3FFFFFFF, 0xFF0000, + {"You got a #Snowhead Stray Fairy#! &You have collected #=SHF#.", + // French + "Vous obtenez une #Fée Perdue des neiges#!&Vous en avez désormais #=SHF#.", + }, + {QM_MAGENTA, QM_RED}, {}, {}, 0x0, false, false); + + CreateMessage(0x06147, 0xFFFF, 0x3FFFFFFF, 0xFF0000, + {"You got a #Great Bay Stray Fairy#! &You have collected #=GBF#.", + // French + "Vous obtenez une #Fée Perdue de la baie#!&Vous en avez désormais #=GBF#.", + }, + {QM_BLUE, QM_RED}, {}, {}, 0x0, false, false); + + CreateMessage(0x06148, 0xFFFF, 0x3FFFFFFF, 0xFF0000, + {"You got a #Stone Tower Stray Fairy#! &You have collected #=STF#.", + // French + "Vous obtenez une #Fée Perdue d'Ikana#!&Vous en avez désormais #=STF#.", + }, + {QM_YELLOW, QM_RED}, {}, {}, 0x0, false, false); + } u32 NumMessages() { diff --git a/source/dungeon.cpp b/source/dungeon.cpp index fce0ac5..59b2063 100644 --- a/source/dungeon.cpp +++ b/source/dungeon.cpp @@ -67,7 +67,7 @@ void DungeonInfo::PlaceVanillaBossKey() { auto bossKeyLocation = FilterFromPool(dungeonLocations, [](const LocationKey loc) { return Location(loc)->IsCategory(Category::cVanillaBossKey); })[0]; PlaceItemInLocation(bossKeyLocation, bossKey); } -/* + void DungeonInfo::PlaceVanillaSwampToken() { auto dungeonLocations = GetDungeonLocations(); auto tokenLocations = FilterFromPool(dungeonLocations, [](const LocationKey loc){return Location(loc)->IsCategory(Category::cSwampSkulltula);}); @@ -115,7 +115,7 @@ void DungeonInfo::PlaceVanillaSTStray() { PlaceItemInLocation(location, ST_STRAY_FAIRY); } } -*/ + void DungeonInfo::PlaceVanillaSmallKeys() { if (smallKey == NONE) { return; diff --git a/source/fill.cpp b/source/fill.cpp index f4d628e..e0a149f 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -642,17 +642,11 @@ static void RandomizeOwnDungeon(const Dungeon::DungeonInfo* dungeon) { std::vector dungeonLocations = dungeon->GetDungeonLocations(); std::vector dungeonItems; - //filter out locations that may be required to have songs placed at them - - dungeonLocations = FilterFromPool(dungeonLocations, [](const LocationKey loc) { - //if (ShuffleSongs.Is(rnd::SongShuffleSetting::SONGSHUFFLE_SONG_LOCATIONS)) { - return !(Location(loc)->IsCategory(Category::cSong)) && !(Location(loc)->IsCategory(Category::cDungeonReward)); - //} - //if (ShuffleSongs.Is(rnd::SongShuffleSetting::SONGSHUFFLE_DUNGEON_REWARDS)) { - // return !(Location(loc)->IsCategory(Category::cDungeonReward)); - //} - // true; - }); + if (ShuffleSongs.Value() == 1 /*Song Locations*/) { + std::vector songLocations = FilterFromPool(allLocations, [](const LocationKey loc) { return Location(loc)->IsCategory(Category::cSong);}); + std::vector songs = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) { return ItemTable(i).GetItemType() == ITEMTYPE_SONG;}); + AssumedFill(songs, songLocations, true); + } /* PlacementLog_Msg("\nAllowed Locations are: \n"); CitraPrint("Allowed Locations are:"); @@ -673,8 +667,30 @@ static void RandomizeOwnDungeon(const Dungeon::DungeonInfo* dungeon) { AddElementsToPool(dungeonItems, dungeonBossKey); } + if (StrayFairysanity.Value() == 2 /* Own Dungeon*/) + { + if (dungeon->GetName() == "Woodfall Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == WF_STRAY_FAIRY;}); + AddElementsToPool(dungeonItems, strayFairy); + } + else if (dungeon->GetName() == "Snowhead Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == SH_STRAY_FAIRY;}); + AddElementsToPool(dungeonItems, strayFairy); + } + else if (dungeon->GetName() == "Great Bay Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == GBT_STRAY_FAIRY;}); + AddElementsToPool(dungeonItems, strayFairy); + } + else if (dungeon->GetName() == "Stone Tower Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == ST_STRAY_FAIRY;}); + AddElementsToPool(dungeonItems, strayFairy); + } + + } //randomize boss key and small keys together for even distribution + NoRepeatOnTokens = true; AssumedFill(dungeonItems, dungeonLocations, true); + NoRepeatOnTokens = false; //randomize map and compass separately since they're not progressive if (MapsAndCompasses.Is((u8)MapsAndCompassesSetting::MAPSANDCOMPASSES_OWN_DUNGEON) && dungeon->GetMap() != NONE && dungeon->GetCompass() != NONE) { @@ -720,7 +736,42 @@ static void RandomizeDungeonItems() { auto bossKey = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == dungeon->GetBossKey();}); AddElementsToPool(overworldItems, bossKey); } - + if (StrayFairysanity.Value() == 3/*Any Dungeon*/) { + if (dungeon->GetName() == "Woodfall Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == WF_STRAY_FAIRY;}); + AddElementsToPool(anyDungeonItems, strayFairy); + } + else if (dungeon->GetName() == "Snowhead Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == SH_STRAY_FAIRY;}); + AddElementsToPool(anyDungeonItems, strayFairy); + } + else if (dungeon->GetName() == "Great Bay Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == GBT_STRAY_FAIRY;}); + AddElementsToPool(anyDungeonItems, strayFairy); + } + else if (dungeon->GetName() == "Stone Tower Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == ST_STRAY_FAIRY;}); + AddElementsToPool(anyDungeonItems, strayFairy); + } + } + else if (StrayFairysanity.Value() == 4/*Overworld*/) { + if (dungeon->GetName() == "Woodfall Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == WF_STRAY_FAIRY;}); + AddElementsToPool(overworldItems, strayFairy); + } + else if (dungeon->GetName() == "Snowhead Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == SH_STRAY_FAIRY;}); + AddElementsToPool(overworldItems, strayFairy); + } + else if (dungeon->GetName() == "Great Bay Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == GBT_STRAY_FAIRY;}); + AddElementsToPool(overworldItems, strayFairy); + } + else if (dungeon->GetName() == "Stone Tower Temple") { + auto strayFairy = FilterAndEraseFromPool(ItemPool, [dungeon](const ItemKey i) {return i == ST_STRAY_FAIRY;}); + AddElementsToPool(overworldItems, strayFairy); + } + } } const std::array dungeonRewards = { @@ -744,8 +795,10 @@ static void RandomizeDungeonItems() { } //Randomize Any Dungeon and Overworld pools + NoRepeatOnTokens = true; AssumedFill(anyDungeonItems, anyDungeonLocations, true); AssumedFill(overworldItems, overworldLocations, true); + NoRepeatOnTokens = false; //Randomize maps and compasses after since they're not advancement items for (auto dungeon : dungeonList) { @@ -818,40 +871,6 @@ int VanillaFill() { return 1; } -int NoLogicFill() { - // CitraPrint("StartingNoLogicFill\n"); - AreaTable_Init(); //Reset the world graph to intialize the proper locations - ItemReset(); //Reset shops incase of shopsanity random - GenerateLocationPool(); - GenerateItemPool(); - GenerateStartingInventory(); - RemoveStartingItemsFromPool(); - FillExcludedLocations(); - RandomizeDungeonRewards(); - std::vector remainingPool = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return true;}); - FastFill(remainingPool, GetAllEmptyLocations(), false); - GeneratePlaythrough(); - printf("Done"); - printf("\x1b[9;10HCalculating Playthrough... "); - PareDownPlaythrough(); - printf("Done"); - printf("\x1b[10;10HCalculating Way of the Hero..."); - CalculateWotH(); - printf("Done"); - // CitraPrint("Creating Item Overrides"); - CreateItemOverrides(); - // CreateEntranceOverrides(); - // CreateAlwaysIncludedMessages(); - if (GossipStoneHints.IsNot(rnd::GossipStoneHintsSetting::HINTS_NO_HINTS)) { - printf("\x1b[11;10HCreating Hints..."); - CreateAllHints(); - printf("Done"); - } - - return 1; -} - - int Fill() { CustomMessages::CreateBaselineCustomMessages(); @@ -871,6 +890,7 @@ int Fill() { GenerateStartingInventory(); RemoveStartingItemsFromPool(); FillExcludedLocations(); + PlaceItemInLocation(S_CLOCK_TOWN_CLOCK_TOWER_ENTRANCE, WOODFALL_TEMPLE_SMALL_KEY); showItemProgress = true; @@ -1035,11 +1055,7 @@ int Fill() { //Then Place those to expand the amount of checks available AssumedFill(mainadvancementItems, allLocations,true); - //Then Place Anju & Kafei Items in spots accessable on Day 1, this should prevent situations where you cant get an item in time for its use - std::vector day1Locations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsCategory(Category::cDayOne);}); - std::vector anjukafeiitems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_QUEST;}); - AssumedFill(anjukafeiitems, day1Locations,true); - + //Then place the rest of the repeatable items in locations marked as repeatable std::vector repeatableItemLocations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsRepeatable();}); std::vector remainingRepeatItemPool = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).IsReusable();}); AssumedFill(remainingRepeatItemPool, repeatableItemLocations, true); @@ -1049,24 +1065,6 @@ int Fill() { std::vector dekuTrades = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_TRADE;}); AssumedFill(dekuTrades, allLocations); } */ - - //Then Place songs if song shuffle is set to specific locations - /* - if (ShuffleSongs.IsNot(SongShuffleSetting::SONGSHUFFLE_ANYWHERE)) { - - //Get each song - std::vector songs = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) { return ItemTable(i).GetItemType() == ITEMTYPE_SONG;}); - - //Get each song location - std::vector songLocations; - if (ShuffleSongs.Is(SongShuffleSetting::SONGSHUFFLE_SONG_LOCATIONS)) { - songLocations = FilterFromPool(allLocations, [](const LocationKey loc) { return Location(loc)->IsCategory(Category::cSong);}); - } - else if (ShuffleSongs.Is(SongShuffleSetting::SONGSHUFFLE_ANYWHERE)) { - songLocations = allLocations; - } - AssumedFill(songs, songLocations, true); - }*/ //Then place Link's Pocket Item if it has to be an advancement item //Links Pocket is useless as there is no unobtainable check due to a certain time travel sword pedistal diff --git a/source/hints.cpp b/source/hints.cpp index dd64adc..8d8234e 100644 --- a/source/hints.cpp +++ b/source/hints.cpp @@ -485,6 +485,249 @@ void CreateTingleHintText() { {QM_GREEN, QM_RED, QM_GREEN, QM_RED, QM_GREEN}, {}, {}, 0x0, false, false); } } + +void CreateOtherHints() { + // Create other hints for various texts + + //Bank Reward 1 hint (Vanilla Wallet) + Text bankReward1Hint = Text{ + Text{ + /*NaEnglish*/"For example, if you deposit 200 Rupees, you'll get #", + /*NaFrench*/"Par exemple, si vous déposez 200 Rupees, vous obtiendrez #", + /*NaSpanish*/"Por ejemplo, si depositas 200 Rupees, obtendrás #", + /*EuEnglish*/"", + /*EuFrench*/"", + /*EuSpanish*/"", + } + +ItemTable(Location(S_CLOCK_TOWN_BANK_REWARD_1)->GetPlacedItemKey()).GetHint().GetText() + +Text{"#."} + }; + CustomMessages::CreateMessageFromTextObject(0x44d, 0xFFFF, 0x3FF0A014, 0xFF1001, + bankReward1Hint, {QM_RED}, {}, {}, 0x0, false, false); + + //Termina Field Deku Salesman Heart Piece + Text dekuSalesmanHint = Text{ + Text{ + /*NaEnglish*/" Please! I'll sell you a #", + /*NaFrench*/" S'il te plaît, je te vendrai un #", + /*NaSpanish*/" Por favor, te venderé un #", + /*EuEnglish*/" Please! I'll sell you a #", + /*EuFrench*/" S'il te plaît, je te vendrai un #", + /*EuSpanish*/" Por favor, te venderé un #", + } + +ItemTable(Location(TERMINA_FIELD_BUSINESS_SCRUB)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"# if you just keep this place a secret...", + /*NaFrench*/"# si tu gardes ce lieu secret...", + /*NaSpanish*/"# si guardas este lugar en secreto...", + /*EuEnglish*/"# if you just keep this place a secret...", + /*EuFrench*/"# si tu gardes ce lieu secret...", + /*EuSpanish*/"# si guardas este lugar en secreto...", + } + }; + CustomMessages::CreateMessageFromTextObject(0x1631, 0xFFFF, 0x3FF0A014, 0xFF1001, + dekuSalesmanHint,{QM_RED}, {}, {}, 0x0, false, false); + + //Beaver Hints + Text EmptyBottleHint = ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName(); + Text beaverHint1 = Text{ + Text{ + /*NaEnglish*/"You want a #", + /*NaFrench*/"Tu veux une #", + /*NaSpanish*/"¿Quieres una #", + /*EuEnglish*/"You want an #", + /*EuFrench*/"Tu veux une #", + /*EuSpanish*/"¿Quieres una #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"#, don't you? You never learn your lesson!", + /*NaFrench*/"#, n'est-ce pas? Tu n'apprends jamais ta leçon!", + /*NaSpanish*/"#, ¿verdad? No aprendes tu lección...", + /*EuEnglish*/"#, don't you? You never learn your lesson!", + /*EuFrench*/"#, n'est-ce pas? Tu n'apprends jamais ta leçon!", + /*EuSpanish*/"#, ¿verdad? No aprendes tu lección...", + } + }; + CustomMessages::CreateMessageFromTextObject(0x10cf, 0xFFFF, 0x3fffffff, 0xFF0000, + beaverHint1, {QM_RED}, {}, {}, 0x0, false, false); + + Text beaverHint2 = Text{ + Text{ + /*NaEnglish*/"Koo, koo, koo. If you want an #", + /*NaFrench*/"Koo, koo, koo. Si tu veux une #", + /*NaSpanish*/"Koo, koo, koo. Si quieres una #", + /*EuEnglish*/"Koo, koo, koo. If you want an #", + /*EuFrench*/"Koo, koo, koo. Si tu veux une #", + /*EuSpanish*/"Koo, koo, koo. Si quieres una #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"#, I can give you one... But only if you can swim through all the rings in the river in under two minutes.", + /*NaFrench*/"#, je peux te donner une... Mais seulement si tu peux nager à travers tous les anneaux de la rivière en moins de deux minutes.", + /*NaSpanish*/"#, puedo darte una... Pero solo si puedes nadar a través de todos los anillos del río en menos de dos minutos.", + /*EuEnglish*/"#, I can give you one... But only if you can swim through all the rings in the river in under two minutes.", + /*EuFrench*/"#, je peux te donner une... Mais seulement si tu peux nager à travers tous les anneaux de la rivière en moins de deux minutes.", + /*EuSpanish*/"#, puedo darte una... Pero solo si puedes nadar a través de todos los anillos del río en menos de dos minutos.", + } + }; + CustomMessages::CreateMessageFromTextObject(0x10d4, 0xFFFF, 0x3fffffff, 0xFF0000, + beaverHint2, {QM_RED}, {}, {}, 0x0, false, false); + + Text beaverHint3 = Text{ + Text{ + /*NaEnglish*/"What? A #", + /*NaFrench*/"Quoi? Une #", + /*NaSpanish*/"¿Qué? Una #", + /*EuEnglish*/"What? A #", + /*EuFrench*/"Quoi? Une #", + /*EuSpanish*/"¿Qué? Una #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"#?", + /*NaFrench*/"#?", + /*NaSpanish*/"#?", + /*EuEnglish*/"#?", + /*EuFrench*/"#?", + /*EuSpanish*/"#?", + } + }; + CustomMessages::CreateMessageFromTextObject(0x10e0, 0xFFFF, 0x3fffffff, 0xFF0000, + beaverHint3, {QM_RED}, {}, {}, 0x0, false, false); + + Text beaverHint4 = Text{ + Text{ + /*NaEnglish*/"Yeah... A #", + /*NaFrench*/"Oui... Une #", + /*NaSpanish*/"Sí... Una #", + /*EuEnglish*/"Yeah... A #", + /*EuFrench*/"Oui... Une #", + /*EuSpanish*/"Sí... Una #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"#.", + /*NaFrench*/"#.", + /*NaSpanish*/"#.", + /*EuEnglish*/"#.", + /*EuFrench*/"#.", + /*EuSpanish*/"#.", + } + }; + CustomMessages::CreateMessageFromTextObject(0x10e1, 0xFFFF, 0x3fffffff, 0xFF0000, + beaverHint4, {QM_RED}, {}, {}, 0x0, false, false); + + Text beaverHint5 = Text{ + Text{ + /*NaEnglish*/"To you, it's just an #", + /*NaFrench*/"Pour toi, c'est juste une #", + /*NaSpanish*/"Para ti, es solo una #", + /*EuEnglish*/"To you, it's just an #", + /*EuFrench*/"Pour toi, c'est juste une #", + /*EuSpanish*/"Para ti, es solo una #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"# but to us it's a precious treasure. I can't give you one just because you beat my little brother.", + /*NaFrench*/"# mais pour nous c'est un trésor précieux. Je ne peux pas te donner une seule parce que tu as battu mon petit frère.", + /*NaSpanish*/"# pero para nosotros es un tesoro precioso. No puedo darte una solo porque venciste a mi hermano menor.", + /*EuEnglish*/"# but to us it's a precious treasure. I can't give you one just because you beat my little brother.", + /*EuFrench*/"# mais pour nous c'est un trésor précieux. Je ne peux pas te donner une seule parce que tu as battu mon petit frère.", + /*EuSpanish*/"# pero para nosotros es un tesoro precioso. No puedo darte una solo porque venciste a mi hermano menor.", + } + }; + CustomMessages::CreateMessageFromTextObject(0x10e2, 0xFFFF, 0x3fffffff, 0xFF0000, + beaverHint5, {QM_RED}, {}, {}, 0x0, false, false); + + Text beaverHint6 = Text{ + Text{ + /*NaEnglish*/"But we don't have any more #", + /*NaFrench*/"Mais nous n'avons plus aucune #", + /*NaSpanish*/"Pero no tenemos más #", + /*EuEnglish*/"But we don't have any more #", + /*EuFrench*/"Mais nous n'avons plus aucune #", + /*EuSpanish*/"Pero no tenemos más #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"#s...do we, Little Brother?", + /*NaFrench*/"#s...n'est-ce pas, petit frère?", + /*NaSpanish*/"#s...¿verdad, hermano menor?", + /*EuEnglish*/"#s...do we, Little Brother?", + /*EuFrench*/"#s...n'est-ce pas, petit frère?", + /*EuSpanish*/"#s...¿verdad, hermano menor?", + } + }; + CustomMessages::CreateMessageFromTextObject(0x10f5, 0xFFFF, 0x3fffffff, 0xFF0000, + beaverHint6, {QM_RED}, {}, {}, 0x0, false, false); + + Text beaverHint7 = Text{ + Text{ + /*NaEnglish*/"I told you that the beavers above the waterfall on the Zora Hall coast have #", + /*NaFrench*/"Je t'ai dit que les castors au-dessus de la cascade sur la côte du Château des Zora ont #", + /*NaSpanish*/"Te dije que los zorros encima de la cascada en la orilla del Palacio de los Zora tienen #", + /*EuEnglish*/"I told you that the beavers above the waterfall on the Zora Hall coast have #", + /*EuFrench*/"Je t'ai dit que les castors au-dessus de la cascade sur la côte du Château des Zora ont #", + /*EuSpanish*/"Te dije que los zorros encima de la cascada en la orilla del Palacio de los Zora tienen #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"#s, right? If you could nab a #", + /*NaFrench*/"#s, n'est-ce pas? Si tu pouvais t'emparer d'un #", + /*NaSpanish*/"#s, ¿verdad? Si pudieras pillar un #", + /*EuEnglish*/"#s, right? If you could nab a #", + /*EuFrench*/"#s, n'est-ce pas? Si tu pouvais t'emparer d'un #", + /*EuSpanish*/"#s, ¿verdad? Si pudieras pillar un #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"# from them...Ah, but you'd have to climb pretty high up to get to where they live, way up on top of the waterfall.", + /*NaFrench*/"# de eux... Ah, mais il faudrait grimper très haut pour atteindre leur domicile, bien en haut sur la cascade.", + /*NaSpanish*/"# de ellos... Ah, pero tendrías que escalar bastante alto para llegar a donde viven, muy arriba sobre la cascada.", + /*EuEnglish*/"# from them...Ah, but you'd have to climb pretty high up to get to where they live, way up on top of the waterfall.", + /*EuFrench*/"# de eux... Ah, mais il faudrait grimper très haut pour atteindre leur domicile, bien en haut sur la cascade.", + /*EuSpanish*/"# de ellos... Ah, pero tendrías que escalar bastante alto para llegar a donde viven, muy arriba sobre la cascada.", + } + }; + CustomMessages::CreateMessageFromTextObject(0x1240, 0xFFFF, 0x3fffffff, 0xFF0000, + beaverHint7, {QM_RED, QM_RED}, {}, {}, 0x0, false, false); + + Text beaverHint8 = Text{ + Text{ + /*NaEnglish*/"I already told you the beavers above the waterfall have #", + /*NaFrench*/"Je t'ai déjà dit que les castors au-dessus de la cascade ont #", + /*NaSpanish*/"Te dije ya que los zorros encima de la cascada tienen #", + /*EuEnglish*/"I already told you the beavers above the waterfall have #", + /*EuFrench*/"Je t'ai déjà dit que les castors au-dessus de la cascade ont #", + /*EuSpanish*/"Te dije ya que los zorros encima de la cascada tienen #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"#s, didn't I? If you could nab a #", + /*NaFrench*/"#s, n'est-ce pas? Si tu pouvais t'emparer d'un #", + /*NaSpanish*/"#s, ¿verdad? Si pudieras pillar un #", + /*EuEnglish*/"#s, didn't I? If you could nab a #", + /*EuFrench*/"#s, n'est-ce pas? Si tu pouvais t'emparer d'un #", + /*EuSpanish*/"#s, ¿verdad? Si pudieras pillar un #", + } + +ItemTable(Location(ZORA_CAPE_BEAVER_RACE_1)->GetPlacedItemKey()).GetName() + +Text{ + /*NaEnglish*/"# from them... Ah, but you'd have to climb pretty high up to get to where they live, way up on top of the waterfall. The fisherman had an item that could latch on to trees and pull him toward them...but the pirates stole it. Isn't there anything you can do?", + /*NaFrench*/"# de eux... Ah, mais il faudrait grimper très haut pour atteindre leur domicile, bien en haut sur la cascade. Le pêcheur avait un objet qui pouvait s'agripper aux arbres et l'entraîner vers eux... mais les pirates l'ont volé. N'y a-t-il rien que tu puisses faire?", + /*NaSpanish*/"# de ellos... Ah, pero tendrías que escalar bastante alto para llegar a donde viven, muy arriba sobre la cascada. El pescador tenía un objeto que podía aferrarse a los árboles y jalarlo hacia ellos... pero los piratas lo robaron. ¿No hay nada que puedas hacer?", + /*EuEnglish*/"# from them... Ah, but you'd have to climb pretty high up to get to where they live, way up on top of the waterfall. The fisherman had an item that could latch on to trees and pull him toward them...but the pirates stole it. Isn't there anything you can do?", + /*EuFrench*/"# de eux... Ah, mais il faudrait grimper très haut pour atteindre leur domicile, bien en haut sur la cascade. Le pêcheur avait un objet qui pouvait s'agripper aux arbres et l'entraîner vers eux... mais les pirates l'ont volé. N'y a-t-il rien que tu puisses faire?", + /*EuSpanish*/"# de ellos... Ah, pero tendrías que escalar bastante alto para llegar a donde viven, muy arriba sobre la cascada. El pescador tenía un objeto que podía aferrarse a los árboles y jalarlo hacia ellos... pero los piratas lo robaron. ¿No hay nada que puedas hacer?", + } + }; + CustomMessages::CreateMessageFromTextObject(0x1242, 0xFFFF, 0x3fffffff, 0xFF0000, + beaverHint8, {QM_RED, QM_RED}, {}, {}, 0x0, false, false); + + + +} + //Find the location which has the given itemKey and create the generic altar text for the reward /*static Text BuildDungeonRewardText(ItemID itemID, const ItemKey itemKey) { @@ -511,6 +754,14 @@ void CreateClockTowerDoorHints() { /*EuFrench */"Dis, t'avais pas un &#instrument de musique# ?&Je parie que Skull Kid, l'a caché vers ", /*EuSpanish*/"" }+BuildDoorText(OCARINA_OF_TIME); + Text songTimeHint = Text{ + /*NaEnglish*/"How could you forget the #Song of Time#?&We'll need to relearn it in ", + /*NaFrench */"Comment as-tu pu oublier la #Chanson du Temps#?&On devra l'apprendre dans ", + /*NaSpanish*/"¿Cómo pudiste olvidar la #Song of Time#?&Vamos a necesitar aprenderla en ", + /*EuEnglish*/"How could you forget the #Song of Time#?&We'll need to relearn it in ", + /*EuFrench */"Comment as-tu pu oublier la #Chanson du Temps#?&On devra l'apprendre dans ", + /*EuSpanish*/"¿Cómo pudiste olvidar la #Song of Time#?&Vamos a necesitar aprenderla en " + }+BuildDoorText(SONG_OF_TIME); Text odolwaHint = Text{ /*English*/"There's one with a #crown# and #jewellery# said to be found at ", /*French */"Y'en a un avec une #couronne# et des #bijoux# situé vers ", @@ -595,7 +846,12 @@ void CreateClockTowerDoorHints() { break; } - CustomMessages::CreateMessage(0x0630, (StartingOcarina.Value() == 0) ? 0x8000 : 0x8002, 0x3FFFFFFF, 0x0FF0211, + // Determine which hint to display first + u16 clockDoorFirstHint = 0x8003; + if (StartingOcarina.Value() == 0) clockDoorFirstHint = 0x8000; + else if (ShuffleSongOfTime) clockDoorFirstHint = 0x8001; + + CustomMessages::CreateMessage(0x0630, clockDoorFirstHint, 0x3FFFFFFF, 0x0FF0211, {"Rooftop access strictly prohibited!&(Enforceable until #midnight# on the&#eve# of the carnival.)^" "#Notice of carnival activities:#&Musical Performance Contest&Unique Mask Contest&#Prizes available!#", // French @@ -612,24 +868,25 @@ void CreateClockTowerDoorHints() { // "**ITALIAN**", }, {QM_RED, QM_RED, QM_RED, QM_MAGENTA}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessageFromTextObject(0x8000, 0x8001, 0x3FFFFFFF, 0x1000000, ocarinaHint, {QM_BLUE, QM_RED}, {}, {}, 0x083E, false, false); - CustomMessages::CreateMessage(0x8001, 0x8003, 0x3FFFFFFF, 0x1FF0000, + CustomMessages::CreateMessageFromTextObject(0x8000, ShuffleSongOfTime ? 0x8001 : 0x8002, 0x3FFFFFFF, 0x1000000, ocarinaHint, {QM_BLUE, QM_RED}, {}, {}, 0x083E, false, false); + CustomMessages::CreateMessageFromTextObject(0x8001, 0x8002, 0x3FFFFFFF, 0x1000000, songTimeHint, {QM_BLUE, QM_RED}, {}, {}, (clockDoorFirstHint == 0x8001) ? 0x083E : 0x0, false, false); + CustomMessages::CreateMessage(0x8002, 0x8004, 0x3FFFFFFF, 0x1FF0000, {"Also, that #mask competition# sounds interesting! I've heard rumours of some pretty #rare masks# around here, truly one of a kind stuff!", // French "D'ailleurs, ce #concours de masques# me rappelle que j'ai entendu des rumeurs dans le coin sur des #masques très uniques#.", }, {QM_RED, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessage(0x8002, 0x8003, 0x3FFFFFFF, 0x1FF0000, + CustomMessages::CreateMessage(0x8003, 0x8004, 0x3FFFFFFF, 0x1FF0000, {"Hey, that #mask competition# sounds interesting! I've heard rumours of some pretty #rare masks# around here, truly one of a kind stuff!", // French "Dis, ce #concours de masques# me rappelle que j'ai entendu des rumeurs dans le coin sur des #masques très uniques#.", }, {QM_RED, QM_RED}, {}, {}, 0x083E, false, false); - CustomMessages::CreateMessageFromTextObject(0x8003, 0x8004, 0x3FFFFFFF, 0x15D0000, odolwaHint, {QM_GREEN, QM_GREEN, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessageFromTextObject(0x8004, 0x8005, 0x3FFFFFFF, 0x15E0000, gohtHint, {QM_MAGENTA, QM_MAGENTA, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessageFromTextObject(0x8005, 0x8006, 0x3FFFFFFF, 0x15F0000, gyorgHint, {QM_CYAN, QM_CYAN, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessageFromTextObject(0x8006, 0x8007, 0x3FFFFFFF, 0x1600000, twinmoldHint, {QM_YELLOW, QM_YELLOW, QM_RED}, {}, {}, 0x0, false, false); - CustomMessages::CreateMessageFromTextObject(0x8007, 0xFFFF, 0x3FFFFFFF, 0x0FF0000, remainsNeededHint, {QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8004, 0x8005, 0x3FFFFFFF, 0x15D0000, odolwaHint, {QM_GREEN, QM_GREEN, QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8005, 0x8006, 0x3FFFFFFF, 0x15E0000, gohtHint, {QM_MAGENTA, QM_MAGENTA, QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8006, 0x8007, 0x3FFFFFFF, 0x15F0000, gyorgHint, {QM_CYAN, QM_CYAN, QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8007, 0x8008, 0x3FFFFFFF, 0x1600000, twinmoldHint, {QM_YELLOW, QM_YELLOW, QM_RED}, {}, {}, 0x0, false, false); + CustomMessages::CreateMessageFromTextObject(0x8008, 0xFFFF, 0x3FFFFFFF, 0x0FF0000, remainsNeededHint, {QM_RED}, {}, {}, 0x0, false, false); } void CreateMoonChildHint() { diff --git a/source/include/hints.hpp b/source/include/hints.hpp index 6933142..193989b 100644 --- a/source/include/hints.hpp +++ b/source/include/hints.hpp @@ -167,4 +167,5 @@ class HintText { extern void CreateAllHints(); extern void CreateTingleHintText(); extern void CreateClockTowerDoorHints(); -extern void CreateMoonChildHint(); \ No newline at end of file +extern void CreateMoonChildHint(); +extern void CreateOtherHints(); \ No newline at end of file diff --git a/source/include/item_location.hpp b/source/include/item_location.hpp index 1b6a4f3..3733827 100644 --- a/source/include/item_location.hpp +++ b/source/include/item_location.hpp @@ -135,7 +135,7 @@ class ItemLocation { else if (type == ItemLocationType::TempleReward) {key.type = ItemOverride_Type::OVR_TEMPLE;} //else if (type == ItemLocationType::Misc) {key.type = game::act::Type::Misc;} //TO-DO - //else if (type == ItemLocationType::StrayFairy) {key.type = ItemOverride_Type::OVR_STRAY;} + else if (type == ItemLocationType::StrayFairy) {key.type = ItemOverride_Type::OVR_STRAY_FAIRY;} //else if (type == ItemLocationType::HintStone) {key.type = ItemOverride_Type::OVR_HINT;} //else if (type == ItemLocationType::OtherHint) {key.type = ItemOverride_Type::OVR_OTHER_HINT;} //key.type = type; //TODO make sure these match up @@ -174,6 +174,8 @@ class ItemLocation { else if (type == ItemLocationType::GrottoScrub) {ovrtype = ItemOverride_Type::OVR_GROTTO_SCRUB;} else if (type == ItemLocationType::Delayed) {ovrtype = ItemOverride_Type::OVR_DELAYED;} else if (type == ItemLocationType::TempleReward) {ovrtype = ItemOverride_Type::OVR_TEMPLE;} + else if (type == ItemLocationType::StrayFairy) {ovrtype = ItemOverride_Type::OVR_STRAY_FAIRY;} + return ovrtype; } diff --git a/source/include/keys.hpp b/source/include/keys.hpp index c815635..290f03f 100644 --- a/source/include/keys.hpp +++ b/source/include/keys.hpp @@ -330,6 +330,7 @@ typedef enum { LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO, LAUNDRY_POOL_GURU_GURU, LAUNDRY_POOL_SF, + E_CLOCK_TOWN_SF, LAUNDRY_POOL_POSTBOX, //Milk Road MILK_ROAD_GORMAN_RACE, diff --git a/source/include/setting_descriptions.hpp b/source/include/setting_descriptions.hpp index 601c7f8..c3fa332 100644 --- a/source/include/setting_descriptions.hpp +++ b/source/include/setting_descriptions.hpp @@ -47,6 +47,7 @@ extern string_view fairyOwnDungeon; extern string_view fairyAnyDungeon; extern string_view fairyOverworld; extern string_view fairyAnywhere; +extern string_view shuffleCTStrayDesc; extern string_view shuffleRewardsEndOfDungeon; extern string_view shuffleRewardsAnyDungeon; diff --git a/source/include/settings.hpp b/source/include/settings.hpp index 0b94337..a33d75d 100644 --- a/source/include/settings.hpp +++ b/source/include/settings.hpp @@ -418,6 +418,7 @@ namespace Settings { extern Option ShuffleHeartContainers; extern Option MoonRemainsRequired; extern Option MajoraRemainsRequired; + extern Option ShuffleCTStray; extern std::vector shuffleItemOptions; //ItemPool Settings diff --git a/source/item_list.cpp b/source/item_list.cpp index 9f689ee..fe14070 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -74,19 +74,19 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth //Stray Fairies// //Clock Town Fairies - itemTable[CT_STRAY_FAIRY] = Item(true, false, &ClockTownStrayFairy, Text{"Clock Town Stray Fairy", "Fée égarée de Cadranbourg", "Hada Extraviada de la Ciudad", "", "Fée égarée de Bourg-Clocher", "" }, CT_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[CT_STRAY_FAIRY] = Item(true, false, &ClockTownStrayFairy, Text{"Clock Town Stray Fairy", "Fée égarée de Cadranbourg", "Hada Extraviada de la Ciudad", "", "Fée égarée de Bourg-Clocher", "" }, CT_STRAY_FAIRY, 0xBB, ITEMTYPE_STRAYFAIRY); //Woodfall Stray Fairies - itemTable[WF_STRAY_FAIRY] = Item(true, false, &WoodfallStrayFairies, Text{"Woodfall Stray Fairy", "Fée égarée de Boisé-les-Cascades", "Hada Extraviada del Bosque Catarata", "", "Fée égarée de Bois-Cascade", "" }, WF_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[WF_STRAY_FAIRY] = Item(true, false, &WoodfallStrayFairies, Text{"Woodfall Stray Fairy", "Fée égarée de Boisé-les-Cascades", "Hada Extraviada del Bosque Catarata", "", "Fée égarée de Bois-Cascade", "" }, WF_STRAY_FAIRY, 0xBC, ITEMTYPE_STRAYFAIRY); //Snowhead Stray Fairies - itemTable[SH_STRAY_FAIRY] = Item(true, false, &SnowheadStrayFairies, Text{"Snowhead Stray Fairy", "Fée égarée du Pic des neiges", "Hada Extraviada del Pico Nevado", "", "Fée égarée du pic des Neiges", "" }, SH_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[SH_STRAY_FAIRY] = Item(true, false, &SnowheadStrayFairies, Text{"Snowhead Stray Fairy", "Fée égarée du Pic des neiges", "Hada Extraviada del Pico Nevado", "", "Fée égarée du pic des Neiges", "" }, SH_STRAY_FAIRY, 0xBD, ITEMTYPE_STRAYFAIRY); //Great Bay Stray Fairies - itemTable[GBT_STRAY_FAIRY] = Item(true, false, &GreatBayStrayFairies, Text{"Great Bay Stray Fairy", "Fée égarée de la Grande Baie", "Hada Extraviada de la Gran Bahía", }, GBT_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[GBT_STRAY_FAIRY] = Item(true, false, &GreatBayStrayFairies, Text{"Great Bay Stray Fairy", "Fée égarée de la Grande Baie", "Hada Extraviada de la Gran Bahía", }, GBT_STRAY_FAIRY, 0xBE, ITEMTYPE_STRAYFAIRY); //Stone Tower Stray Fairies - itemTable[ST_STRAY_FAIRY] = Item(true, false, &StoneTowerStrayFairies, Text{"Stone Tower Stray Fairy", "Fée égarée de la Forteresse de Pierre", "Hada Extraviada de la Torre de Piedra", }, ST_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); + itemTable[ST_STRAY_FAIRY] = Item(true, false, &StoneTowerStrayFairies, Text{"Stone Tower Stray Fairy", "Fée égarée de la Forteresse de Pierre", "Hada Extraviada de la Torre de Piedra", }, ST_STRAY_FAIRY, 0xBF, ITEMTYPE_STRAYFAIRY); //Bottles itemTable[EMPTY_BOTTLE1] = Item(true, false, &ArcheryBottle, Text{"Empty Bottle", "Flacon vide", "Botella vacía", }, EMPTY_BOTTLE1, (u32)GetItemID::GI_BOTTLE_EMPTY, ITEMTYPE_ITEM); diff --git a/source/item_location.cpp b/source/item_location.cpp index 6530801..552ae60 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -165,9 +165,9 @@ void LocationTable_Init() { locationTable[S_CLOCK_TOWN_CLOCK_TOWER_ENTRANCE] = ItemLocation::Collectable(0x6F, 0x00, false, "SCT Clock Tower Entrance", S_CLOCK_TOWN_CLOCK_TOWER_ENTRANCE, PIECE_OF_HEART, {Category::cSouthClockTown, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); locationTable[S_CLOCK_TOWN_STRAW_ROOF_CHEST] = ItemLocation::Chest (0x6F, 0x00, true, "SCT Straw Roof Chest", S_CLOCK_TOWN_STRAW_ROOF_CHEST, RED_RUPEE, {Category::cSouthClockTown,Category::cChest ,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); locationTable[S_CLOCK_TOWN_FINAL_DAY_CHEST] = ItemLocation::Chest (0x6F, 0x01, true, "SCT Final Day Chest", S_CLOCK_TOWN_FINAL_DAY_CHEST, PURPLE_RUPEE, {Category::cSouthClockTown,Category::cChest ,Category::cDayThree, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); - locationTable[S_CLOCK_TOWN_BANK_REWARD_1] = ItemLocation::Base (0x6F, 0x48, false, "SCT Bank Reward 1", S_CLOCK_TOWN_BANK_REWARD_1, PROGRESSIVE_WALLET, {Category::cSouthClockTown,Category::cDayOne, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); - locationTable[S_CLOCK_TOWN_BANK_REWARD_2] = ItemLocation::Base (0x6F, 0x03, false, "SCT Bank Reward 2", S_CLOCK_TOWN_BANK_REWARD_2, BLUE_RUPEE, {Category::cSouthClockTown,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); - locationTable[S_CLOCK_TOWN_BANK_REWARD_3] = ItemLocation::Base (0x6F, 0x0C, false, "SCT Bank Reward 3", S_CLOCK_TOWN_BANK_REWARD_3, PIECE_OF_HEART, {Category::cSouthClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); + locationTable[S_CLOCK_TOWN_BANK_REWARD_1] = ItemLocation::Base (0x6F, 0x48, false, "SCT Bank Reward 1 (200)", S_CLOCK_TOWN_BANK_REWARD_1, PROGRESSIVE_WALLET, {Category::cSouthClockTown,Category::cDayOne, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); + locationTable[S_CLOCK_TOWN_BANK_REWARD_2] = ItemLocation::Base (0x6F, 0x03, false, "SCT Bank Reward 2 (500)", S_CLOCK_TOWN_BANK_REWARD_2, BLUE_RUPEE, {Category::cSouthClockTown,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); + locationTable[S_CLOCK_TOWN_BANK_REWARD_3] = ItemLocation::Base (0x6F, 0x0C, false, "SCT Bank Reward 3 (1000)", S_CLOCK_TOWN_BANK_REWARD_3, PIECE_OF_HEART, {Category::cSouthClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); //Snowhead locationTable[SNOWHEAD_GREAT_FAIRY] = ItemLocation::Base (0x26, 0x2B, false, "SH Great Fairy", SNOWHEAD_GREAT_FAIRY, PROGRESSIVE_MAGIC_METER, {Category::cSnowhead, Category::cFairyFountain,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SNOWHEAD ); @@ -435,76 +435,76 @@ void LocationTable_Init() { -------------------------------*/ //Clock Town Stray Fairy - locationTable[LAUNDRY_POOL_SF] = ItemLocation::StrayFairy (0x70, 0x00, true, "Laundry Pool SF", CT_STRAY_FAIRY, CT_STRAY_FAIRY, {Category::cLaundryPool, Category::cVanillaStrayFairy, Category::cCTStray,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL); - + locationTable[LAUNDRY_POOL_SF] = ItemLocation::StrayFairy (0x70, 0xFF, true, "Laundry Pool SF", CT_STRAY_FAIRY, CT_STRAY_FAIRY, {Category::cLaundryPool, Category::cVanillaStrayFairy, Category::cCTStray,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL); + locationTable[E_CLOCK_TOWN_SF] = ItemLocation::StrayFairy (0x6C, 0xFF, true, "East Clock Town SF", CT_STRAY_FAIRY, CT_STRAY_FAIRY, {Category::cEastClockTown, Category::cVanillaStrayFairy, Category::cCTStray,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN); //Woodfall Stray Faries - locationTable[WF_SF_ENTRANCE_FAIRY] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Entrance", WF_SF_ENTRANCE_FAIRY, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_ENTRANCE_PLATFORM] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Entrance Platform", WF_SF_ENTRANCE_PLATFORM, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_MAIN_ROOM_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Main Room Bubble", WF_SF_MAIN_ROOM_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_MAIN_ROOM_SWITCH] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Main Room Switch", WF_SF_MAIN_ROOM_SWITCH, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_PRE_BOSS_LOWER_RIGHT_BUBBLE] = ItemLocation::StrayFairy (0xB1, 0x00, true, "Woodfall Temple SF Pre-Boss Lower Right Bubble", WF_SF_PRE_BOSS_LOWER_RIGHT_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_PRE_BOSS_UPPER_RIGHT_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Pre-Boss Upper Left Bubble", WF_SF_PRE_BOSS_UPPER_RIGHT_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_PRE_BOSS_UPPER_LEFT_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Pre-Boss Upper Right Bubble", WF_SF_PRE_BOSS_UPPER_LEFT_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_PRE_BOSS_PILLAR_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Pre-Boss Pillar Bubble", WF_SF_PRE_BOSS_PILLAR_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_DEKU_BABA] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Deku Baba", WF_SF_DEKU_BABA, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_DRAGONFLY_ROOM_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Dragonfly Room Bubble", WF_SF_DRAGONFLY_ROOM_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_SKULLTULA] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Skulltula", WF_SF_SKULLTULA, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_DARK_ROOM] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Dark Room", WF_SF_DARK_ROOM, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_JAR_FAIRY] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Jar Fairy", WF_SF_JAR_FAIRY, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_BRIDGE_ROOM_BEEHIVE] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Bridge Room Beehive", WF_SF_BRIDGE_ROOM_BEEHIVE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[WF_SF_PLATFORM_ROOM_BEEHIVE] = ItemLocation::StrayFairy (0x1B, 0x00, true, "Woodfall Temple SF Platform Room Beehive", WF_SF_PLATFORM_ROOM_BEEHIVE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_ENTRANCE_FAIRY] = ItemLocation::StrayFairy (0x1B, 0x2B, true, "Woodfall Temple SF Entrance", WF_SF_ENTRANCE_FAIRY, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_ENTRANCE_PLATFORM] = ItemLocation::StrayFairy (0x1B, 0x18, true, "Woodfall Temple SF Entrance Platform", WF_SF_ENTRANCE_PLATFORM, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_MAIN_ROOM_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x30, true, "Woodfall Temple SF Main Room Bubble", WF_SF_MAIN_ROOM_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_MAIN_ROOM_SWITCH] = ItemLocation::StrayFairy (0x1B, 0x17, true, "Woodfall Temple SF Main Room Switch", WF_SF_MAIN_ROOM_SWITCH, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_PRE_BOSS_LOWER_RIGHT_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x2A, true, "Woodfall Temple SF Pre-Boss Lower Right Bubble", WF_SF_PRE_BOSS_LOWER_RIGHT_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_PRE_BOSS_UPPER_RIGHT_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x32, true, "Woodfall Temple SF Pre-Boss Upper Left Bubble", WF_SF_PRE_BOSS_UPPER_RIGHT_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_PRE_BOSS_UPPER_LEFT_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x2C, true, "Woodfall Temple SF Pre-Boss Upper Right Bubble", WF_SF_PRE_BOSS_UPPER_LEFT_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_PRE_BOSS_PILLAR_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x2D, true, "Woodfall Temple SF Pre-Boss Pillar Bubble", WF_SF_PRE_BOSS_PILLAR_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_DEKU_BABA] = ItemLocation::StrayFairy (0x1B, 0x2E, true, "Woodfall Temple SF Deku Baba", WF_SF_DEKU_BABA, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_DRAGONFLY_ROOM_BUBBLE] = ItemLocation::StrayFairy (0x1B, 0x2F, true, "Woodfall Temple SF Dragonfly Room Bubble", WF_SF_DRAGONFLY_ROOM_BUBBLE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_SKULLTULA] = ItemLocation::StrayFairy (0x1B, 0x31, true, "Woodfall Temple SF Skulltula", WF_SF_SKULLTULA, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_DARK_ROOM] = ItemLocation::StrayFairy (0x1B, 0x19, true, "Woodfall Temple SF Dark Room", WF_SF_DARK_ROOM, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_JAR_FAIRY] = ItemLocation::StrayFairy (0x1B, 0x1C, true, "Woodfall Temple SF Jar Fairy", WF_SF_JAR_FAIRY, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_BRIDGE_ROOM_BEEHIVE] = ItemLocation::StrayFairy (0x1B, 0x1D, true, "Woodfall Temple SF Bridge Room Beehive", WF_SF_BRIDGE_ROOM_BEEHIVE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WF_SF_PLATFORM_ROOM_BEEHIVE] = ItemLocation::StrayFairy (0x1B, 0x1E, true, "Woodfall Temple SF Platform Room Beehive", WF_SF_PLATFORM_ROOM_BEEHIVE, WF_STRAY_FAIRY, {Category::cWoodfall, Category::cWoodfallTemple, Category::cWFStray, Category::cVanillaStrayFairy,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); //Snowhead Stray Faries - locationTable[SH_SF_SNOW_ROOM_BUBBLE] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Snow Room Bubble", SH_SF_SNOW_ROOM_BUBBLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_CEILING_BUBBLE] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Ceiling Bubble", SH_SF_CEILING_BUBBLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_DINOLFOS_1] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Dinolfos 1", SH_SF_DINOLFOS_1, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_DINOLFOS_2] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Dinolfos 2", SH_SF_DINOLFOS_2, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_BRIDGE_ROOM_LEDGE_BUBBLE] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Bridge Room Ledge Bubble", SH_SF_BRIDGE_ROOM_LEDGE_BUBBLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_BRIDGE_ROOM_PILLAR_BUBBLE] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Bridge Room Pillar Bubble", SH_SF_BRIDGE_ROOM_PILLAR_BUBBLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_MAP_ROOM_FAIRY] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Map Room Fairy", SH_SF_MAP_ROOM_FAIRY, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_MAP_ROOM_LEDGE] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Map Room Ledge", SH_SF_MAP_ROOM_LEDGE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_BASEMENT] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Basement", SH_SF_BASEMENT, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_TWIN_BLOCK] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Twin Block", SH_SF_TWIN_BLOCK, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_ICICLE_ROOM_WALL] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Icicle Room Wall", SH_SF_ICICLE_ROOM_WALL, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_MAIN_ROOM_WALL] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Main Room Wall", SH_SF_MAIN_ROOM_WALL, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_PILLAR_FREEZARDS] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Pillar Freezards", SH_SF_PILLAR_FREEZARDS, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_ICE_PUZZLE] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Ice Puzzle", SH_SF_ICE_PUZZLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[SH_SF_CRATE] = ItemLocation::StrayFairy (0x21, 0x00, true, "Snowhead Temple SF Crate", SH_SF_CRATE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_SNOW_ROOM_BUBBLE] = ItemLocation::StrayFairy (0x21, 0x2B, true, "Snowhead Temple SF Snow Room Bubble", SH_SF_SNOW_ROOM_BUBBLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_CEILING_BUBBLE] = ItemLocation::StrayFairy (0x21, 0x2C, true, "Snowhead Temple SF Ceiling Bubble", SH_SF_CEILING_BUBBLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_DINOLFOS_1] = ItemLocation::StrayFairy (0x21, 0x2D, true, "Snowhead Temple SF Dinolfos 1", SH_SF_DINOLFOS_1, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_DINOLFOS_2] = ItemLocation::StrayFairy (0x21, 0x31, true, "Snowhead Temple SF Dinolfos 2", SH_SF_DINOLFOS_2, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_BRIDGE_ROOM_LEDGE_BUBBLE] = ItemLocation::StrayFairy (0x21, 0x2F, true, "Snowhead Temple SF Bridge Room Ledge Bubble", SH_SF_BRIDGE_ROOM_LEDGE_BUBBLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_BRIDGE_ROOM_PILLAR_BUBBLE] = ItemLocation::StrayFairy (0x21, 0x30, true, "Snowhead Temple SF Bridge Room Pillar Bubble", SH_SF_BRIDGE_ROOM_PILLAR_BUBBLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_MAP_ROOM_FAIRY] = ItemLocation::StrayFairy (0x21, 0x32, true, "Snowhead Temple SF Map Room Fairy", SH_SF_MAP_ROOM_FAIRY, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_MAP_ROOM_LEDGE] = ItemLocation::StrayFairy (0x21, 0x13, true, "Snowhead Temple SF Map Room Ledge", SH_SF_MAP_ROOM_LEDGE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_BASEMENT] = ItemLocation::StrayFairy (0x21, 0x14, true, "Snowhead Temple SF Basement", SH_SF_BASEMENT, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_TWIN_BLOCK] = ItemLocation::StrayFairy (0x21, 0x15, true, "Snowhead Temple SF Twin Block", SH_SF_TWIN_BLOCK, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_ICICLE_ROOM_WALL] = ItemLocation::StrayFairy (0x21, 0x16, true, "Snowhead Temple SF Icicle Room Wall", SH_SF_ICICLE_ROOM_WALL, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_MAIN_ROOM_WALL] = ItemLocation::StrayFairy (0x21, 0x17, true, "Snowhead Temple SF Main Room Wall", SH_SF_MAIN_ROOM_WALL, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_PILLAR_FREEZARDS] = ItemLocation::StrayFairy (0x21, 0x18, true, "Snowhead Temple SF Pillar Freezards", SH_SF_PILLAR_FREEZARDS, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_ICE_PUZZLE] = ItemLocation::StrayFairy (0x21, 0x19, true, "Snowhead Temple SF Ice Puzzle", SH_SF_ICE_PUZZLE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SH_SF_CRATE] = ItemLocation::StrayFairy (0x21, 0x1E, true, "Snowhead Temple SF Crate", SH_SF_CRATE, SH_STRAY_FAIRY, {Category::cSnowheadTemple, Category::cVanillaStrayFairy,Category::cSHStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); //Great Bay Stray Fairies - locationTable[GBT_SF_SKULLTULA] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Skulltula", GBT_SF_SKULLTULA, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_WATER_CONTROL_UNDERWATER_BUBBLE] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Water Control Room Underwater Bubble", GBT_SF_WATER_CONTROL_UNDERWATER_BUBBLE, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_WATERWHEEL_ROOM_LOWER] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Waterwheel Room Lower", GBT_SF_WATERWHEEL_ROOM_LOWER, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_WATERWHEEL_ROOM_UPPER] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Waterwheel Room Upper", GBT_SF_WATERWHEEL_ROOM_UPPER, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_GREEN_VALVE] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Green Valve", GBT_SF_GREEN_VALVE, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_SEESAW_ROOM] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Seesaw Room", GBT_SF_SEESAW_ROOM, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_ENTRANCE_TORCHES] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Entrance Torches", GBT_SF_ENTRANCE_TORCHES, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_BIO_BABAS] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Bio Babas", GBT_SF_BIO_BABAS, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_UNDERWATER_BARREL] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Underwater Barrel", GBT_SF_UNDERWATER_BARREL, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_WHIRLPOOL_JAR] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Whirlpool Jar", GBT_SF_WHIRLPOOL_JAR, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_WHIRLPOOL_BARREL] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Whirlpool Barrel", GBT_SF_WHIRLPOOL_BARREL, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_DEXIHANDS_JAR] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Dexihands Jar", GBT_SF_DEXIHANDS_JAR, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_LEDGE_JAR] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Ledge Jar", GBT_SF_LEDGE_JAR, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_PRE_BOSS_ROOM_BUBBLE] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Pre-Boss Room Bubble", GBT_SF_PRE_BOSS_ROOM_BUBBLE, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[GBT_SF_PRE_BOSS_ROOM_UNDERWATER_BUBBLE] = ItemLocation::StrayFairy (0x49, 0x00, true, "Great Bay Temple SF Pre-Boss Room Underwater Bubble", GBT_SF_PRE_BOSS_ROOM_UNDERWATER_BUBBLE, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_SKULLTULA] = ItemLocation::StrayFairy (0x49, 0x32, true, "Great Bay Temple SF Skulltula", GBT_SF_SKULLTULA, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_WATER_CONTROL_UNDERWATER_BUBBLE] = ItemLocation::StrayFairy (0x49, 0x30, true, "Great Bay Temple SF Water Control Room Underwater Bubble", GBT_SF_WATER_CONTROL_UNDERWATER_BUBBLE, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_WATERWHEEL_ROOM_LOWER] = ItemLocation::StrayFairy (0x49, 0x17, true, "Great Bay Temple SF Waterwheel Room Lower", GBT_SF_WATERWHEEL_ROOM_LOWER, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_WATERWHEEL_ROOM_UPPER] = ItemLocation::StrayFairy (0x49, 0x14, true, "Great Bay Temple SF Waterwheel Room Upper", GBT_SF_WATERWHEEL_ROOM_UPPER, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_GREEN_VALVE] = ItemLocation::StrayFairy (0x49, 0x15, true, "Great Bay Temple SF Green Valve", GBT_SF_GREEN_VALVE, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_SEESAW_ROOM] = ItemLocation::StrayFairy (0x49, 0x16, true, "Great Bay Temple SF Seesaw Room", GBT_SF_SEESAW_ROOM, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_ENTRANCE_TORCHES] = ItemLocation::StrayFairy (0x49, 0x18, true, "Great Bay Temple SF Entrance Torches", GBT_SF_ENTRANCE_TORCHES, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_BIO_BABAS] = ItemLocation::StrayFairy (0x49, 0x19, true, "Great Bay Temple SF Bio Babas", GBT_SF_BIO_BABAS, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_UNDERWATER_BARREL] = ItemLocation::StrayFairy (0x49, 0x1A, true, "Great Bay Temple SF Underwater Barrel", GBT_SF_UNDERWATER_BARREL, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_WHIRLPOOL_JAR] = ItemLocation::StrayFairy (0x49, 0x1B, true, "Great Bay Temple SF Whirlpool Jar", GBT_SF_WHIRLPOOL_JAR, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_WHIRLPOOL_BARREL] = ItemLocation::StrayFairy (0x49, 0x1C, true, "Great Bay Temple SF Whirlpool Barrel", GBT_SF_WHIRLPOOL_BARREL, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_DEXIHANDS_JAR] = ItemLocation::StrayFairy (0x49, 0x1D, true, "Great Bay Temple SF Dexihands Jar", GBT_SF_DEXIHANDS_JAR, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_LEDGE_JAR] = ItemLocation::StrayFairy (0x49, 0x1E, true, "Great Bay Temple SF Ledge Jar", GBT_SF_LEDGE_JAR, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_PRE_BOSS_ROOM_BUBBLE] = ItemLocation::StrayFairy (0x49, 0x31, true, "Great Bay Temple SF Pre-Boss Room Bubble", GBT_SF_PRE_BOSS_ROOM_BUBBLE, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_SF_PRE_BOSS_ROOM_UNDERWATER_BUBBLE] = ItemLocation::StrayFairy (0x49, 0x2F, true, "Great Bay Temple SF Pre-Boss Room Underwater Bubble", GBT_SF_PRE_BOSS_ROOM_UNDERWATER_BUBBLE, GBT_STRAY_FAIRY, {Category::cGreatBayTemple, Category::cVanillaStrayFairy,Category::cGBTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); //Stone Tower Temple Stray Fairies - locationTable[ST_SF_MIRROR_SUN_BLOCK] = ItemLocation::StrayFairy (0x16, 0x00, true, "Stone Tower Temple SF Mirror Sun Block", ST_SF_MIRROR_SUN_BLOCK, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_LAVA_ROOM_LEDGE] = ItemLocation::StrayFairy (0x16, 0x00, true, "Stone Tower Temple SF Lava Room Ledge", ST_SF_LAVA_ROOM_LEDGE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_LAVA_ROOM_FIRE_RING] = ItemLocation::StrayFairy (0x16, 0x00, true, "Stone Tower Temple SF Lava Room Fire Ring", ST_SF_LAVA_ROOM_FIRE_RING, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_EYEGORE] = ItemLocation::StrayFairy (0x16, 0x00, true, "Stone Tower Temple SF Eyegore", ST_SF_EYEGORE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_UPDRAFT_FIRE_RING] = ItemLocation::StrayFairy (0x18, 0x00, true, "Stone Tower Temple SF Updraft Fire Ring", ST_SF_UPDRAFT_FIRE_RING, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_MIRROR_SUN_SWITCH] = ItemLocation::StrayFairy (0x16, 0x00, true, "Stone Tower Temple SF Mirror Sun Switch", ST_SF_MIRROR_SUN_SWITCH, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_BOSS_WARP] = ItemLocation::StrayFairy (0x18, 0x00, true, "Stone Tower Temple SF Boss Warp", ST_SF_BOSS_WARP, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_WIZZROBE] = ItemLocation::StrayFairy (0x18, 0x00, true, "Stone Tower Temple SF Wizzrobe", ST_SF_WIZZROBE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_DEATH_ARMOS] = ItemLocation::StrayFairy (0x18, 0x00, true, "Stone Tower Temple SF Death Armos", ST_SF_DEATH_ARMOS, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_UPDRAFT_FROZEN_EYE] = ItemLocation::StrayFairy (0x18, 0x00, true, "Stone Tower Temple SF Updraft Frozen Eye", ST_SF_UPDRAFT_FROZEN_EYE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_THIN_BRIDGE] = ItemLocation::StrayFairy (0x18, 0x00, true, "Stone Tower Temple SF Thin Bridge", ST_SF_THIN_BRIDGE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_BASEMENT_LEDGE] = ItemLocation::StrayFairy (0x16, 0x00, true, "Stone Tower Temple SF Basement Ledge", ST_SF_BASEMENT_LEDGE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_STATUE_EYE] = ItemLocation::StrayFairy (0x16, 0x00, true, "Stone Tower Temple SF Statue Eye", ST_SF_STATUE_EYE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_UNDERWATER] = ItemLocation::StrayFairy (0x18, 0x00, true, "Stone Tower Temple SF Underwater", ST_SF_UNDERWATER, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[ST_SF_BRIDGE_CRYSTAL] = ItemLocation::StrayFairy (0x18, 0x00, true, "Stone Tower Temple SF Bridge Crystal", ST_SF_BRIDGE_CRYSTAL, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_MIRROR_SUN_BLOCK] = ItemLocation::StrayFairy (0x16, 0x0B, true, "Stone Tower Temple SF Mirror Sun Block", ST_SF_MIRROR_SUN_BLOCK, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_LAVA_ROOM_LEDGE] = ItemLocation::StrayFairy (0x16, 0x19, true, "Stone Tower Temple SF Lava Room Ledge", ST_SF_LAVA_ROOM_LEDGE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_LAVA_ROOM_FIRE_RING] = ItemLocation::StrayFairy (0x16, 0x0D, true, "Stone Tower Temple SF Lava Room Fire Ring", ST_SF_LAVA_ROOM_FIRE_RING, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_EYEGORE] = ItemLocation::StrayFairy (0x16, 0x0C, true, "Stone Tower Temple SF Eyegore", ST_SF_EYEGORE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_UPDRAFT_FIRE_RING] = ItemLocation::StrayFairy (0x18, 0x0E, true, "Stone Tower Temple SF Updraft Fire Ring", ST_SF_UPDRAFT_FIRE_RING, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_MIRROR_SUN_SWITCH] = ItemLocation::StrayFairy (0x16, 0x0F, true, "Stone Tower Temple SF Mirror Sun Switch", ST_SF_MIRROR_SUN_SWITCH, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_BOSS_WARP] = ItemLocation::StrayFairy (0x18, 0x10, true, "Stone Tower Temple SF Boss Warp", ST_SF_BOSS_WARP, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_WIZZROBE] = ItemLocation::StrayFairy (0x18, 0x11, true, "Stone Tower Temple SF Wizzrobe", ST_SF_WIZZROBE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_DEATH_ARMOS] = ItemLocation::StrayFairy (0x16, 0x12, true, "Stone Tower Temple SF Death Armos", ST_SF_DEATH_ARMOS, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_UPDRAFT_FROZEN_EYE] = ItemLocation::StrayFairy (0x18, 0x13, true, "Stone Tower Temple SF Updraft Frozen Eye", ST_SF_UPDRAFT_FROZEN_EYE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_THIN_BRIDGE] = ItemLocation::StrayFairy (0x16, 0x14, true, "Stone Tower Temple SF Thin Bridge", ST_SF_THIN_BRIDGE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_BASEMENT_LEDGE] = ItemLocation::StrayFairy (0x16, 0x15, true, "Stone Tower Temple SF Basement Ledge", ST_SF_BASEMENT_LEDGE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_STATUE_EYE] = ItemLocation::StrayFairy (0x16, 0x16, true, "Stone Tower Temple SF Statue Eye", ST_SF_STATUE_EYE, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_UNDERWATER] = ItemLocation::StrayFairy (0x16, 0x17, true, "Stone Tower Temple SF Underwater", ST_SF_UNDERWATER, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ST_SF_BRIDGE_CRYSTAL] = ItemLocation::StrayFairy (0x16, 0x18, true, "Stone Tower Temple SF Bridge Crystal", ST_SF_BRIDGE_CRYSTAL, ST_STRAY_FAIRY, {Category::cStoneTowerTemple, Category::cVanillaStrayFairy,Category::cSTStray,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); /*------------------------------- ---HEART CONTAINERS --- @@ -824,6 +824,7 @@ std::vector overworldLocations = { //E_CLOCK_TOWN_TREASURE_CHEST_GAME_HUMAN, //E_CLOCK_TOWN_TREASURE_CHEST_GAME_ZORA, //E_CLOCK_TOWN_TREASURE_CHEST_GAME_DEKU, + E_CLOCK_TOWN_SF, //Goron Village GORON_VILLAGE_POWDER_KEG_CHALLENGE, GORON_VILLAGE_SCRUB_PURCHASE, @@ -1241,6 +1242,8 @@ void CreateItemOverrides() { //Curiosity Shop Big Bomb Bag is same as Bomb Shop Big Bomb Bag auto loc24 = Location(W_CLOCK_TOWN_BIG_BOMB_BAG_BUY); PlaceItemInLocation(W_CLOCK_TOWN_CURIOSITY_BOMB_BAG, loc24->GetPlacedItemKey()); + auto loc25 = Location(LAUNDRY_POOL_SF); + PlaceItemInLocation(E_CLOCK_TOWN_SF, loc25->GetPlacedItemKey()); for (LocationKey locKey : allLocations) { auto loc = Location(locKey); diff --git a/source/item_pool.cpp b/source/item_pool.cpp index 57d670c..63f586b 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -641,15 +641,15 @@ static void PlaceVanillaBossKeys() { }; static void PlaceVanillaStrayFairies() { - /*TO-DO::make simpler for (auto dungeon : dungeonList) { dungeon->PlaceVanillaWFStray(); dungeon->PlaceVanillaSHStray(); dungeon->PlaceVanillaGBTStray(); dungeon->PlaceVanillaSTStray(); - }*/ + } //Clock Town PlaceItemInLocation(LAUNDRY_POOL_SF, CT_STRAY_FAIRY); + /* //Woodfall Temple PlaceItemInLocation(WF_SF_ENTRANCE_FAIRY, WF_STRAY_FAIRY); PlaceItemInLocation(WF_SF_ENTRANCE_PLATFORM, WF_STRAY_FAIRY); @@ -714,14 +714,15 @@ static void PlaceVanillaStrayFairies() { PlaceItemInLocation(ST_SF_STATUE_EYE, ST_STRAY_FAIRY); PlaceItemInLocation(ST_SF_UNDERWATER, ST_STRAY_FAIRY); PlaceItemInLocation(ST_SF_BRIDGE_CRYSTAL, ST_STRAY_FAIRY); + */ }; static void PlaceVanillaSkulltulaTokens() { - /* TO-DO::make simpler for (auto dungeon : dungeonList) { dungeon->PlaceVanillaSwampToken(); dungeon->PlaceVanillaOceanToken(); - }*/ + } + /* //Swamp Skull Tokens PlaceItemInLocation(SSH_MAIN_ROOM_NEAR_CEILING, SWAMP_SKULLTULA_TOKEN); PlaceItemInLocation(SSH_MAIN_ROOM_WATER, SWAMP_SKULLTULA_TOKEN); @@ -784,6 +785,7 @@ static void PlaceVanillaSkulltulaTokens() { PlaceItemInLocation(OSH_COLORED_SKULLS_CHANDELIER_3, OCEANSIDE_SKULLTULA_TOKEN); PlaceItemInLocation(OSH_COLORED_SKULLS_BEHIND_PICTURE, OCEANSIDE_SKULLTULA_TOKEN); PlaceItemInLocation(OSH_COLORED_SKULLS_POT, OCEANSIDE_SKULLTULA_TOKEN); + */ }; static void PlaceVanillaCowMilk() { @@ -918,6 +920,7 @@ void GenerateItemPool() { PlaceItemInLocation(SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR, BLUE_RUPEE); PlaceItemInLocation(SWAMP_TOURIST_CENTER_ROOF_CLEAR, BLUE_RUPEE); PlaceItemInLocation(STONE_TOWER_TEMPLE_UPRIGHT_DEATH_ARMOS_ROOM_CHEST, BLUE_RUPEE); + PlaceItemInLocation(E_CLOCK_TOWN_SF, BLUE_RUPEE); //Check Non Dungeon Settings //OCARINA SHUFFLE @@ -1022,11 +1025,6 @@ void GenerateItemPool() { else { PlaceVanillaSongs(); } - //No Longer Needed since Song of Healing is now randomized and the check is always obtainable even when starting with SoH - // if (StartingSongOfHealing.Value() == u8(1)){//if starting with song of healing fill deku mask and notebook spots as they are unobtainable - // PlaceItemInLocation(HMS_DEKU_MASK, GREEN_RUPEE); - // PlaceItemInLocation(HMS_BOMBERS_NOTEBOOK, GREEN_RUPEE); - // } //GREAT FAIRY SHUFFLE if(ShuffleGFRewards.Is((u8)GreatFairyRewardShuffleSetting::GFREWARDSHUFFLE_VANILLA)){ @@ -1095,7 +1093,6 @@ void GenerateItemPool() { PlaceItemInLocation(THE_MOON_GARO_CHEST, ARROWS_30); PlaceItemInLocation(THE_MOON_IRON_KNUCKLE_CHEST, BOMBCHU_10); } - //TOKENSANITY if(Tokensanity){ @@ -1108,8 +1105,6 @@ void GenerateItemPool() { PlaceVanillaSkulltulaTokens(); } - - //DEKU MERCHANT TRADE QUEST if (ShuffleMerchants){//Merchants is Deku Scrub Trade Quest AddItemsToPool(ItemPool, scrubTradeItems); @@ -1126,14 +1121,8 @@ void GenerateItemPool() { if (ShuffleTradeItems){//TradeItems refers to Anju&Kafei Items AddItemsToPool(ItemPool, anjuKafeiTradeItems); } else { - //if(ShuffleMasks){ //-Kafei & Couples Mask part of A&K not masks - // AddItemToMainPool(KAFEIS_MASK); - // AddItemToMainPool(COUPLES_MASK); - //} - //else{ PlaceItemInLocation(E_CLOCK_TOWN_AROMA_IN_OFFICE, KAFEIS_MASK); PlaceItemInLocation(STOCKPOTINN_ANJU_AND_KAFEI, COUPLES_MASK); - //} PlaceItemInLocation(STOCKPOTINN_MIDNIGHT_MEETING, LETTER_KAFEI); PlaceItemInLocation(LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO, LETTER_MAMA); PlaceItemInLocation(STOCKPOTINN_RESERVATION, ROOM_KEY); @@ -1252,13 +1241,20 @@ void GenerateItemPool() { PlaceVanillaStrayFairies(); } else { - AddItemToMainPool(CT_STRAY_FAIRY, 1); //if no selection or error ?? AddItemToMainPool(WF_STRAY_FAIRY, 15); AddItemToMainPool(SH_STRAY_FAIRY, 15); AddItemToMainPool(GBT_STRAY_FAIRY, 15); AddItemToMainPool(ST_STRAY_FAIRY, 15); } + //CLOCK TOWN STRAY FAIRY (Separated because it's not in a dungeon) + if (!ShuffleCTStray) { + PlaceItemInLocation(CT_STRAY_FAIRY, LAUNDRY_POOL_SF); + } + else { + AddItemToMainPool(CT_STRAY_FAIRY, 1); + } + //DungeonRewards AddItemsToPool(ItemPool, dungeonRewards); diff --git a/source/playthrough.cpp b/source/playthrough.cpp index 06d628b..34f3bb9 100644 --- a/source/playthrough.cpp +++ b/source/playthrough.cpp @@ -80,6 +80,7 @@ namespace Playthrough { CreateTingleHintText(); CreateClockTowerDoorHints(); CreateMoonChildHint(); + CreateOtherHints(); playthroughLocations.clear(); wothLocations.clear(); diff --git a/source/setting_descriptions.cpp b/source/setting_descriptions.cpp index 524accb..940a0b7 100644 --- a/source/setting_descriptions.cpp +++ b/source/setting_descriptions.cpp @@ -182,24 +182,19 @@ string_view bossKeyAnywhere = "Boss Keys can appear anywhere in the wo /*------------------------------ // | STRAY FAIRIES | // ------------------------------*/ // -string_view fairyVanilla = "**OPTION CURRENTLY WIP**\n" // - "Stray Fairies will appear in their \n" // +string_view fairyVanilla = "Stray Fairies will appear in their \n" // "vanilla locations."; // -string_view fairyStartWith = "**OPTION CURRENTLY WIP**\n" // - "Stray Fairies are given to you from the start so \n" +string_view fairyStartWith = "Stray Fairies are given to you from the start so \n" "won't have to worry about collecting them.\n" // "An easier mode."; // -string_view fairyOwnDungeon = "**OPTION CURRENTLY WIP**\n" // - "Stray Fairies can only appear in their respective\n" +string_view fairyOwnDungeon = "Stray Fairies can only appear in their respective\n" "dungeon."; // -string_view fairyAnyDungeon = "**OPTION CURRENTLY WIP**\n" // - "Stray Fairies can only appear inside of any dungeon\n" +string_view fairyAnyDungeon = "Stray Fairies can only appear inside of any dungeon\n" "but won't necessarily be in the dungeon that they\n" "are supposed to be found in."; // -string_view fairyOverworld = "**OPTION CURRENTLY WIP**\n" // - "Stray Fairies can only appear outside of dungeons"; -string_view fairyAnywhere = "**OPTION CURRENTLY WIP**\n" // - "Stray Fairies can appear anywhere in the world."; // +string_view fairyOverworld = "Stray Fairies can only appear outside of dungeons"; +string_view fairyAnywhere = "Stray Fairies can appear anywhere in the world."; // +string_view shuffleCTStrayDesc = "Shuffle the Clock Town Stray Fairy"; // /*------------------------------ // | SHUFFLE DUNGEON REWARDS | // ------------------------------*/ // diff --git a/source/settings.cpp b/source/settings.cpp index 08be62e..79a1361 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -372,13 +372,15 @@ namespace Settings { Option ShuffleHeartContainers = Option::Bool("Heart Containers", { "Vanilla", "Random"}, { shuffleHeartContainersDesc }); Option MoonRemainsRequired = Option::U8("Moon Requirements", {"Vanilla", "3", "2", "1", "0"}, { MoonRemainsRequiredDesc }, OptionCategory::Setting); Option MajoraRemainsRequired = Option::U8("Majora Requirements",{"Vanilla", "3", "2", "1", "0"}, { MajoraRemainsRequiredDesc }, OptionCategory::Setting); + Option ShuffleCTStray = Option::Bool("Clock Town Stray Fairy", { "Vanilla", "Anywhere" }, { shuffleCTStrayDesc }); std::vectordungeonSettingsOptions = { &RandomizeDungeon, &MapsAndCompasses, &Keysanity, &BossKeysanity, - //&StrayFairysanity, + &StrayFairysanity, + &ShuffleCTStray, &ShuffleRewards, &ShuffleHeartContainers, &MoonRemainsRequired, @@ -1475,6 +1477,12 @@ namespace Settings { else { Unhide(strayFairies); } + if (!ShuffleCTStray) { + IncludeAndHide( {LAUNDRY_POOL_SF} ); + } + else { + Unhide( {LAUNDRY_POOL_SF} ); + } } @@ -1769,6 +1777,7 @@ namespace Settings { MapsAndCompasses.SetSelectedIndex(0); BossKeysanity.SetSelectedIndex(0); StrayFairysanity.SetSelectedIndex(0); + ShuffleCTStray.SetSelectedIndex(0); ShuffleRewards.SetSelectedIndex(0); ShuffleHeartContainers.SetSelectedIndex(0); ShuffleMainInventory.SetSelectedIndex(0); diff --git a/source/spoiler_log.cpp b/source/spoiler_log.cpp index 0a89e1a..acea6e1 100644 --- a/source/spoiler_log.cpp +++ b/source/spoiler_log.cpp @@ -259,13 +259,6 @@ static void WriteIngameSpoilerLog() { if (!Settings::ShuffleTingleMaps && Location(key)->IsCategory(Category::cTingleMap)) { continue; } - // If Starting with Song of Healing hide Deku Mask and Bombers Notebook as they're unobtainable and junk - if (key == HMS_DEKU_MASK && (Settings::StartingSongOfHealing.Value() == u8(1) || !Settings::ShuffleTransformation)) { - continue; - } - if (key == HMS_BOMBERS_NOTEBOOK && (Settings::StartingSongOfHealing.Value() == u8(1) || !Settings::ShuffleBombersNotebook)) { - continue; - } // Always hide unreachable checks if (key == CLOCK_TOWER_OCARINA_OF_TIME && (Settings::StartingOcarina.Value() == u8(1))) { continue; diff --git a/source/starting_inventory.cpp b/source/starting_inventory.cpp index a663728..3fb6fe5 100644 --- a/source/starting_inventory.cpp +++ b/source/starting_inventory.cpp @@ -52,6 +52,14 @@ void GenerateStartingInventory() { AddItemToInventory(GBT_BOSS_KEY); AddItemToInventory(STONE_TOWER_TEMPLE_BOSS_KEY); } + + if (StrayFairysanity.Value() == 1/*Start With*/) { + AddItemToInventory(CT_STRAY_FAIRY, 1); + AddItemToInventory(WF_STRAY_FAIRY, 15); + AddItemToInventory(SH_STRAY_FAIRY, 15); + AddItemToInventory(GBT_STRAY_FAIRY, 15); + AddItemToInventory(ST_STRAY_FAIRY, 15); + } //Starting Inventory Menu //Values are associated so that the count of items matches the index of