diff --git a/.gitmodules b/.gitmodules index a0bdeab..12a5f3b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "Z3DR"] path = Z3DR url = https://github.com/Z3DR/mm3dr.git - branch = dev \ No newline at end of file + branch = dev diff --git a/Z3DR b/Z3DR index 4f59bf8..f8f617f 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 4f59bf82b0d539fbcea820142fb342d32c6f9b2a +Subproject commit f8f617feb4c55d6838579fdd0429266db7ec36c1 diff --git a/source/fill.cpp b/source/fill.cpp index 0dbba12..4c783ee 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -873,6 +873,20 @@ int Fill() { //Then place dungeon items that are assigned to restrictive location pools RandomizeDungeonItems(); + CitraPrint("Trying to place songs"); + + //Place Songs before inventory to prevent song locations from being used + //get Songs in pool + std::vector songs = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_SONG;}); + //If Shuffled in Song Locations restrict location pool to only song locations + //If Song of Time is shuffled do that first with a restricted location pool to prevent softlocks + if (ShuffleSongOfTime) { + std::vector ocarinaLocations = FilterFromPool(allLocations, []( const LocationKey loc) {return Location(loc)->IsCategory(Category::cNoOcarinaStart);}); + std::vector SoTItem = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) { return ItemTable(i).GetHintKey() == SONG_OF_TIME; }); + NoRepeatOnTokens = true; + AssumedFill(SoTItem, ocarinaLocations, true); + NoRepeatOnTokens = false; + } //If Ocarina is shuffled place that first if (StartingOcarina.Value() == 0) { //Get acceptable Ocarina Locations @@ -883,6 +897,19 @@ int Fill() { AssumedFill(ocarinaItem, ocarinaLocations, true); NoRepeatOnTokens = false; } + //If Songs are at song locations get all song locations and place them there + if (ShuffleSongs.Value() == u8(1)){ + std::vector songLocations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsCategory(Category::cSong);}); + NoRepeatOnTokens = true; + AssumedFill(songs, songLocations,true); + NoRepeatOnTokens = false; + } + //else just place them anywhere + else { + NoRepeatOnTokens = true; + AssumedFill(songs, allLocations,true); + NoRepeatOnTokens = false; + } if (ShuffleGFRewards.Is((u8)GreatFairyRewardShuffleSetting::GFREWARDSHUFFLE_ALL_GREAT_FARIES)){ //get GF locations @@ -922,7 +949,7 @@ int Fill() { //std::vector remainingRepeatItems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).IsReusable();}); //CitraPrint("Starting Fill of remaining Repeat Items"); //AssumedFill(remainingRepeatItems, allLocations,true); - } + } //Place Main Inventory First //So first get all items in the pool + DekuMask, diff --git a/source/hint_list.cpp b/source/hint_list.cpp index bd179e7..73884ba 100644 --- a/source/hint_list.cpp +++ b/source/hint_list.cpp @@ -674,7 +674,13 @@ void HintTable_Init() { hintTable[MAGIC_POWER] = HintText::Item({Text{"magic power", "**FRENCH**", "**SPANISH**"}}); hintTable[EXTENDED_MAGIC_POWER] = HintText::Item({Text{"magic power", "**FRENCH**", "**SPANISH**"}}); //SONGS - //hintTable[SONG_OF_TIME] = HintText::Item({Text{"song of time", "**FRENCH**", "**SPANISH**"}}); + hintTable[SONG_OF_TIME] = HintText::Item({ + //obscure + Text{"song of time", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Song of Time", "**FRENCH**", "**SPANISH**"} + ); hintTable[SONG_OF_STORMS] = HintText::Item({ //obscure Text{"stormy weather", "**FRENCH**", "**SPANISH**"} @@ -1148,6 +1154,8 @@ void HintTable_Init() { // Clock Tower hintTable[CLOCK_TOWER_OCARINA_OF_TIME] = HintText::Sometimes({ Text{"A Musical Instrument", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWER_SONG_OF_TIME] = HintText::Sometimes({ + Text{"A Timeless Song", "**FRENCH**", "**SPANISH**"}}); hintTable[HMS_DEKU_MASK] = HintText::Sometimes({ Text{"a forest curse removed rewards", "**FRENCH**", "**SPANISH**"}}); hintTable[HMS_SONG_OF_HEALING] = HintText::Sometimes({ @@ -1431,6 +1439,8 @@ void HintTable_Init() { hintTable[SNOWHEAD_GREAT_FAIRY] = HintText::Sometimes({ Text{"the fairy of power rewards", "**FRENCH**", "**SPANISH**"}}); //Southern Swamp + hintTable[SOUTHERN_SWAMP_MUSIC_STATUE] = HintText::Exclude({ + Text{"a guiding owl teaches", "**FRENCH**", "**SPANISH**"}}); hintTable[SOUTHERN_SWAMP_KOUME] = HintText::Sometimes({ Text{"a witch rewards", "**FRENCH**", "**SPANISH**"}}); hintTable[SOUTHERN_SWAMP_KOTAKE] = HintText::Sometimes({ @@ -1675,6 +1685,8 @@ void HintTable_Init() { Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); hintTable[ODOLWA_HEART_CONTAINER] = HintText::Exclude({ Text{"a masked evil contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GIANTS_OATH_TO_ORDER] = HintText::Exclude({ + Text{"a gentile giant teaches", "**FRENCH**", "**SPANISH**"}}); //Snowhead Temple hintTable[SNOWHEAD_TEMPLE_FIRE_ARROW_CHEST] = HintText::Exclude({ Text{"an icy temple contains", "**FRENCH**", "**SPANISH**"}}); diff --git a/source/include/keys.hpp b/source/include/keys.hpp index 94bdc90..b6bab7b 100644 --- a/source/include/keys.hpp +++ b/source/include/keys.hpp @@ -246,6 +246,7 @@ typedef enum { //// Overworld // Clock Tower CLOCK_TOWER_OCARINA_OF_TIME, + CLOCK_TOWER_SONG_OF_TIME, HMS_DEKU_MASK, HMS_BOMBERS_NOTEBOOK, HMS_STARTING_SWORD, diff --git a/source/include/logic.hpp b/source/include/logic.hpp index 4d1d9b9..33ff078 100644 --- a/source/include/logic.hpp +++ b/source/include/logic.hpp @@ -111,6 +111,7 @@ namespace Logic { extern bool LetterMamaAccess; extern bool MoonsTearAccess; //Songs + extern bool SongOfTime; extern bool ScarecrowSong; extern bool SongOfStorms; extern bool SongOfHealing; diff --git a/source/include/setting_descriptions.hpp b/source/include/setting_descriptions.hpp index fa2ec30..0c4df3d 100644 --- a/source/include/setting_descriptions.hpp +++ b/source/include/setting_descriptions.hpp @@ -60,8 +60,11 @@ extern string_view kokiriSwordDesc; extern string_view songsSongLocations; extern string_view songsDungeonRewards; extern string_view songsAllLocations; +extern string_view songsVanilla; extern string_view shuffleSoaringVanilla; extern string_view shuffleSoaringRandom; +extern string_view songTimeVanilla; +extern string_view songTimeRandom; extern string_view gossipStonesHintsDesc; diff --git a/source/include/settings.hpp b/source/include/settings.hpp index 65d5acc..bd8e477 100644 --- a/source/include/settings.hpp +++ b/source/include/settings.hpp @@ -327,6 +327,8 @@ namespace Settings { extern Option StartingElegyOfEmptiness; extern Option StartingSongOfHealing; extern Option StartingSongOfSoaring; + extern Option StartingSongOfTime; + extern Option StartingGoronIntro; extern Option StartingUpgradesToggle; extern Option StartingKokiriSword; extern Option StartingGreatFairySword; @@ -398,6 +400,7 @@ namespace Settings { extern Option ShuffleMerchants; extern Option ShuffleSongs; extern Option ShuffleSoaring; + extern Option ShuffleSongOfTime; extern Option ShuffleStartingShield; extern Option ShuffleBombersNotebook; extern Option ShuffleTradeItems; diff --git a/source/include/version.hpp b/source/include/version.hpp index a4fc544..fae44c5 100644 --- a/source/include/version.hpp +++ b/source/include/version.hpp @@ -1,4 +1,4 @@ #pragma once -#define RANDOMIZER_VERSION "v1.4.4" +#define RANDOMIZER_VERSION "v1.5.0" #define COMMIT_NUMBER "develop" diff --git a/source/item_list.cpp b/source/item_list.cpp index c553c44..80fa294 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -128,19 +128,19 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[EXTENDED_MAGIC_POWER] = Item(true, false, &ExtendedMagicPower, Text{"Extended Magic Power", "Extended Magic Power", "Extended Magic Power",}, EXTENDED_MAGIC_POWER, (u32)GetItemID::GI_NONE, ITEMTYPE_ITEM); //Songs - //itemTable[SONG_OF_TIME] = Item(Text{"Song of Time", "Chant du temps", "Canción del tiempo"}, ITEMTYPE_SONG, 0xC5, true, &SongOfTime, SONG_OF_TIME, false,); - itemTable[SONG_OF_STORMS] = Item(true, false, &SongOfStorms, Text{"Song of Storms", "Chant des tempêtes", "Canción de la tormenta"}, SONG_OF_STORMS, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG); - itemTable[SONATA_OF_AWAKENING] = Item(true, false, &SonataOfAwakening, Text{"Sonata of Awakening", "Sonate de i'Eveil", "Sonata del Despertar"}, SONATA_OF_AWAKENING, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); - itemTable[LULLABY_INTRO] = Item(true, false, &LullabyIntro, Text{"Goron's Lullaby Intro", "Goron's Lullaby Intro", "Goron's Lullaby Intro"}, LULLABY_INTRO, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); - itemTable[GORONS_LULLABY] = Item(true, false, &GoronsLullaby, Text{"Goron's Lullaby", "Berceuse des Gorons", "Nana Goron"}, GORONS_LULLABY, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG); - itemTable[NEW_WAVE_BOSSA_NOVA] = Item(true, false, &NewWaveBossaNova, Text{"New Wave Bossa Nova", "Bossa Nova des Flots", "Nueva Bossanova"}, NEW_WAVE_BOSSA_NOVA, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); - itemTable[ELEGY_OF_EMPTINESS] = Item(true, false, &ElegyOfEmptiness, Text{"Elegy of Emptiness", "Hymne du Vida", "Elegia al Vacio"}, ELEGY_OF_EMPTINESS, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); - itemTable[OATH_TO_ORDER] = Item(true, false, &OathToOrder, Text{"Oath to Order", "Ode lAppel", "Oda al Order"}, OATH_TO_ORDER, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); - itemTable[EPONAS_SONG] = Item(true, false, &EponasSong, Text{"Epona's Song", "Chant d'Épona", "Canción de Epona"}, EPONAS_SONG, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); + itemTable[SONG_OF_TIME] = Item(true, false, &SongOfTime, Text{"Song of Time", "Chant du temps", "Canción del tiempo"}, SONG_OF_TIME, (u32)0x53, ITEMTYPE_SONG); + itemTable[SONG_OF_STORMS] = Item(true, false, &SongOfStorms, Text{"Song of Storms", "Chant des tempêtes", "Canción de la tormenta"}, SONG_OF_STORMS, (u32)0x73, ITEMTYPE_SONG); + itemTable[SONATA_OF_AWAKENING] = Item(true, false, &SonataOfAwakening, Text{"Sonata of Awakening", "Sonate de i'Eveil", "Sonata del Despertar"}, SONATA_OF_AWAKENING, (u32)0x4B, ITEMTYPE_SONG ); + itemTable[LULLABY_INTRO] = Item(true, false, &LullabyIntro, Text{"Goron's Lullaby Intro", "Goron's Lullaby Intro", "Goron's Lullaby Intro"}, LULLABY_INTRO, (u32)0x74, ITEMTYPE_SONG ); + itemTable[GORONS_LULLABY] = Item(true, false, &GoronsLullaby, Text{"Goron's Lullaby", "Berceuse des Gorons", "Nana Goron"}, GORONS_LULLABY, (u32)0x4D, ITEMTYPE_SONG); + itemTable[NEW_WAVE_BOSSA_NOVA] = Item(true, false, &NewWaveBossaNova, Text{"New Wave Bossa Nova", "Bossa Nova des Flots", "Nueva Bossanova"}, NEW_WAVE_BOSSA_NOVA, (u32)0x4E, ITEMTYPE_SONG ); + itemTable[ELEGY_OF_EMPTINESS] = Item(true, false, &ElegyOfEmptiness, Text{"Elegy of Emptiness", "Hymne du Vida", "Elegia al Vacio"}, ELEGY_OF_EMPTINESS, (u32)0x4F, ITEMTYPE_SONG ); + itemTable[OATH_TO_ORDER] = Item(true, false, &OathToOrder, Text{"Oath to Order", "Ode lAppel", "Oda al Order"}, OATH_TO_ORDER, (u32)0x51, ITEMTYPE_SONG ); + itemTable[EPONAS_SONG] = Item(true, false, &EponasSong, Text{"Epona's Song", "Chant d'Épona", "Canción de Epona"}, EPONAS_SONG, (u32)0x6C, ITEMTYPE_SONG ); //itemTable[INVERTED_SONG_OF_TIME] = Item(true,0, 0, Text{"Inverted Song of Time", "Chant du Temps Inverse", "Canción del Tiempo Invertida"}, ITEMTYPE_SONG, 0xC2, true, &InvertedSongOfTime, INVERTED_SONG_OF_TIME, false,); //itemTable[SONG_OF_DOUBLE_TIME] = Item(true,0, 0, Text{"Song of Double Time", "Chant du Temps Accelere", "Canción del Doble Tiempo"}, ITEMTYPE_SONG, 0xC3, true, &SongOfDoubleTime, SONG_OF_DOUBLE_TIME, false,); - itemTable[SONG_OF_HEALING] = Item(true, false, &SongOfHealing, Text{"Song of Healing", "Chant de l'Apaisement", "Sonata de Curacion"}, SONG_OF_HEALING, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); - itemTable[SONG_OF_SOARING] = Item(true, false, &SongOfSoaring, Text{"Song of Soaring", "Chant de l'Envol", "Canción de Vuelo"}, SONG_OF_SOARING, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); + itemTable[SONG_OF_HEALING] = Item(true, false, &SongOfHealing, Text{"Song of Healing", "Chant de l'Apaisement", "Sonata de Curacion"}, SONG_OF_HEALING, (u32)0x54, ITEMTYPE_SONG ); + itemTable[SONG_OF_SOARING] = Item(true, false, &SongOfSoaring, Text{"Song of Soaring", "Chant de l'Envol", "Canción de Vuelo"}, SONG_OF_SOARING, (u32)0x72, ITEMTYPE_SONG ); //Maps and Compasses itemTable[WOODFALL_TEMPLE_MAP] = Item(false, false, &noVariable, Text{"Woodfall Temple Map", "Carte de Temple de Bois-Cascade", "Mapa del Templo del Bosque Catarata"}, WOODFALL_TEMPLE_MAP, (u32)0xAE, ITEMTYPE_MAP ); diff --git a/source/item_location.cpp b/source/item_location.cpp index f826673..1068074 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -1,4 +1,4 @@ - #include "item_location.hpp" +#include "item_location.hpp" #include "dungeon.hpp" #include "settings.hpp" @@ -17,8 +17,9 @@ void LocationTable_Init() { //LocationTable itemlocation::type scene, flag, Repeatable, name hint key (hint_list.cpp) vanilla item categories collection check 376 Collection Check Group //Happy Mask Salesman - Starting Items - locationTable[HMS_SONG_OF_HEALING] = ItemLocation::Base (0x63, 0x54, false, "Song of Healing", HMS_SONG_OF_HEALING, SONG_OF_HEALING, {Category::cClockTower, Category::cDayOne, Category::cSong, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_INSIDE_CLOCKTOWER); - locationTable[CLOCK_TOWER_OCARINA_OF_TIME] = ItemLocation::Base (0x19, 0x4C, false, "Ocarina of Time", CLOCK_TOWER_OCARINA_OF_TIME, OCARINA_OF_TIME, {Category::cClockTower, Category::cDayThree, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_INSIDE_CLOCKTOWER ); + locationTable[HMS_SONG_OF_HEALING] = ItemLocation::Base (0x63, 0x54, false, "Song of Healing", HMS_SONG_OF_HEALING, SONG_OF_HEALING, {Category::cClockTower, Category::cDayOne, Category::cSong, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_INSIDE_CLOCKTOWER ); + locationTable[CLOCK_TOWER_OCARINA_OF_TIME] = ItemLocation::Base (0x19, 0x4C, false, "Ocarina of Time", CLOCK_TOWER_OCARINA_OF_TIME, OCARINA_OF_TIME, {Category::cClockTower, Category::cDayThree, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_INSIDE_CLOCKTOWER ); + locationTable[CLOCK_TOWER_SONG_OF_TIME] = ItemLocation::Base (0x19, 0x53, false, "Song of Time", CLOCK_TOWER_SONG_OF_TIME, SONG_OF_TIME, {Category::cClockTower, Category::cDayThree, Category::cSong, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_INSIDE_CLOCKTOWER ); locationTable[HMS_DEKU_MASK] = ItemLocation::Base (0x63, 0x78, false, "Deku Mask", HMS_DEKU_MASK, DEKU_MASK, {Category::cClockTower, Category::cTransformMask, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_INSIDE_CLOCKTOWER ); locationTable[HMS_BOMBERS_NOTEBOOK] = ItemLocation::Base (0x63, 0x50, false, "Bombers Notebook", HMS_BOMBERS_NOTEBOOK, BOMBERS_NOTEBOOK, {Category::cClockTower, Category::cDayOne, Category::cNotebook, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_INSIDE_CLOCKTOWER ); locationTable[HMS_STARTING_SWORD] = ItemLocation::Base (0x00, 0x37, false, "Starting Sword", HMS_STARTING_SWORD, PROGRESSIVE_SWORD, {Category::cClockTower, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP ); @@ -32,15 +33,15 @@ void LocationTable_Init() { locationTable[DEKU_PALACE_BEAN_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x05, true, "DP Bean Grotto Chest", DEKU_PALACE_BEAN_GROTTO_CHEST, RED_RUPEE, {Category::cDekuPalace,Category::cGrotto,Category::cWoodfall,Category::cChest,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_DEKU_PALACE); //East Clock Town - locationTable[E_CLOCK_TOWN_AROMA_IN_BAR] = ItemLocation::Base (0x15, 0x6F, false, "ECT Milk Bar Madame Aroma", E_CLOCK_TOWN_AROMA_IN_BAR, CHATEAU_ROMANI, {Category::cEastClockTown, Category::cDayThree, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_ARCHERY_1] = ItemLocation::Base (0x20, 0x47, false, "ECT Archery #1", E_CLOCK_TOWN_ARCHERY_1, PROGRESSIVE_BOW, {Category::cEastClockTown, Category::cMinigame,Category::cDayOne, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_AROMA_IN_BAR] = ItemLocation::Base (0x15, 0x6F, false, "ECT Milk Bar Madame Aroma", E_CLOCK_TOWN_AROMA_IN_BAR, CHATEAU_ROMANI, {Category::cEastClockTown, Category::cDayThree, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_ARCHERY_1] = ItemLocation::Base (0x20, 0x47, false, "ECT Archery #1", E_CLOCK_TOWN_ARCHERY_1, PROGRESSIVE_BOW, {Category::cEastClockTown, Category::cMinigame,Category::cDayOne, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); locationTable[E_CLOCK_TOWN_MAYOR] = ItemLocation::Base (0x12, 0x0C, false, "ECT Mayor Reward", E_CLOCK_TOWN_MAYOR, PIECE_OF_HEART, {Category::cEastClockTown, Category::cVanillaHeartPiece ,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_ARCHERY_2] = ItemLocation::Base (0x20, 0x0C, false, "ECT Archery #2", E_CLOCK_TOWN_ARCHERY_2, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_HONEY_DARLING_3DAYS] = ItemLocation::Base (0x11, 0x0C, false, "ECT Honey and Darling 3 Days", E_CLOCK_TOWN_HONEY_DARLING_3DAYS, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayThree, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_ARCHERY_2] = ItemLocation::Base (0x20, 0x0C, false, "ECT Archery #2", E_CLOCK_TOWN_ARCHERY_2, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_HONEY_DARLING_3DAYS] = ItemLocation::Base (0x11, 0x0C, false, "ECT Honey and Darling 3 Days", E_CLOCK_TOWN_HONEY_DARLING_3DAYS, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayThree, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); locationTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_GORON] = ItemLocation::Chest (0x17, 0x00, true, "ECT Treasure Chest Game (Goron)", E_CLOCK_TOWN_TREASURE_CHEST_GAME_GORON, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_POSTMAN_FREEDOM] = ItemLocation::Base (0x6C, 0x84, false, "ECT Postman's Freedom", E_CLOCK_TOWN_POSTMAN_FREEDOM, POSTMANS_HAT, {Category::cEastClockTown, Category::cVanillaMask,Category::cDayThree, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_GORMAN] = ItemLocation::Base (0x15, 0x83, false, "ECT Milk Bar Gorman", E_CLOCK_TOWN_GORMAN, CIRCUS_LEADERS_MASK, {Category::cEastClockTown, Category::cVanillaMask,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_AROMA_IN_OFFICE] = ItemLocation::Base (0x12, 0x8F, false, "ECT Mayor's Office Madame Aroma", E_CLOCK_TOWN_AROMA_IN_OFFICE, KAFEIS_MASK, {Category::cEastClockTown, Category::cDayOne, Category::cAnjuAndKafei, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_POSTMAN_FREEDOM] = ItemLocation::Base (0x6C, 0x84, false, "ECT Postman's Freedom", E_CLOCK_TOWN_POSTMAN_FREEDOM, POSTMANS_HAT, {Category::cEastClockTown, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_GORMAN] = ItemLocation::Base (0x15, 0x83, false, "ECT Milk Bar Gorman", E_CLOCK_TOWN_GORMAN, CIRCUS_LEADERS_MASK, {Category::cEastClockTown, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_AROMA_IN_OFFICE] = ItemLocation::Base (0x12, 0x8F, false, "ECT Mayor's Office Madame Aroma", E_CLOCK_TOWN_AROMA_IN_OFFICE, KAFEIS_MASK, {Category::cEastClockTown, Category::cDayOne, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); locationTable[BOMBERS_HIDEOUT_CHEST] = ItemLocation::Chest (0x29, 0x00, true, "Bombers' Hideout Chest", BOMBERS_HIDEOUT_CHEST, SILVER_RUPEE, {Category::cEastClockTown, Category::cChest,Category::cDayOne, Category::cNoOcarinaStart }, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); locationTable[E_CLOCK_TOWN_CHEST] = ItemLocation::Chest (0x6C, 0x0A, true, "ECT Chest", E_CLOCK_TOWN_CHEST, SILVER_RUPEE, {Category::cEastClockTown, Category::cChest ,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); //locationTable[E_CLOCK_TOWN_MILK_BAR_CHATEAU] = ItemLocation::Base (0x12, 0x00, true, "Milk Bar Chateau Buy", E_CLOCK_TOWN_MILK_BAR_CHATEAU, CHATEAU_ROMANI, {Category::cEastClockTown}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); @@ -53,7 +54,7 @@ void LocationTable_Init() { //Goron Village locationTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE] = ItemLocation::Base (0x4D, 0x34, false, "GV Powder Keg Challenge", GORON_VILLAGE_POWDER_KEG_CHALLENGE, POWDER_KEG, {Category::cGoronVillage, Category::cDayOne, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_SCRUB_PURCHASE] = ItemLocation::Base (0x4D, 0x1D, false, "GV Scrub Purchase", GORON_VILLAGE_SCRUB_PURCHASE, PROGRESSIVE_BOMB_BAG, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne, Category::cShop, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_SCRUB_PURCHASE] = ItemLocation::Base (0x4D, 0x1D, false, "GV Scrub Purchase", GORON_VILLAGE_SCRUB_PURCHASE, PROGRESSIVE_BOMB_BAG, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne, Category::cShop, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[GORON_VILLAGE_LENS_OF_TRUTH_CHEST] = ItemLocation::Chest (0x07, 0x01, true, "GV Lens of Truth Chest", GORON_VILLAGE_LENS_OF_TRUTH_CHEST, LENS_OF_TRUTH, {Category::cGoronVillage, Category::cChest, Category::cDayOne, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[GORON_VILLAGE_SCRUB_TRADE] = ItemLocation::Base (0x4D, 0x99, true, "GV Deku Scrub Merchant Trade", GORON_VILLAGE_SCRUB_TRADE, MOUNTAIN_TITLE, {Category::cGoronVillage, Category::cDekuScrub, Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[GORON_VILLAGE_LEDGE] = ItemLocation::Collectable(0x4D, 0x00, false, "GV Piece of Heart", GORON_VILLAGE_LEDGE, PIECE_OF_HEART, {Category::cGoronVillage, Category::cVanillaHeartPiece, Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); @@ -96,10 +97,10 @@ void LocationTable_Init() { locationTable[IKANA_GRAVEYARD_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x18, true, "IG Grotto", IKANA_GRAVEYARD_GROTTO_CHEST, BOMBCHU_5, {Category::cIkanaGraveyard, Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); //Laundry Pool - locationTable[LAUNDRY_POOL_KAFEI] = ItemLocation::Base (0x0D, 0xAB, true, "LP Kafei's Pendant", LAUNDRY_POOL_KAFEI, PENDANT_MEMORIES, {Category::cLaundryPool,Category::cDayOne, Category::cAnjuAndKafei, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); - locationTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE] = ItemLocation::Base (0x0D, 0x80, false, "LP Curiosity Shop Man 1", LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE, KEATON_MASK, {Category::cLaundryPool, Category::cVanillaMask,Category::cDayThree, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); - locationTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO] = ItemLocation::Base (0x0D, 0xA1, true, "LP Curiosity Shop Man 2", LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO, LETTER_MAMA, {Category::cLaundryPool,Category::cDayThree, Category::cAnjuAndKafei, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); - locationTable[LAUNDRY_POOL_GURU_GURU] = ItemLocation::Base (0x70, 0x8C, false, "LP Guru Guru", LAUNDRY_POOL_GURU_GURU, BREMEN_MASK, {Category::cLaundryPool, Category::cVanillaMask,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); + locationTable[LAUNDRY_POOL_KAFEI] = ItemLocation::Base (0x0D, 0xAB, true, "LP Kafei's Pendant", LAUNDRY_POOL_KAFEI, PENDANT_MEMORIES, {Category::cLaundryPool,Category::cDayOne, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); + locationTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE] = ItemLocation::Base (0x0D, 0x80, false, "LP Keaton Mask", LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE, KEATON_MASK, {Category::cLaundryPool, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); + locationTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO] = ItemLocation::Base (0x0D, 0xA1, true, "LP Letter to Mama", LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO, LETTER_MAMA, {Category::cLaundryPool,Category::cDayThree, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); + locationTable[LAUNDRY_POOL_GURU_GURU] = ItemLocation::Base (0x70, 0x8C, false, "LP Bremen Mask", LAUNDRY_POOL_GURU_GURU, BREMEN_MASK, {Category::cLaundryPool, Category::cVanillaMask,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); //Milk Road locationTable[MILK_ROAD_GORMAN_RACE] = ItemLocation::Base (0x6A, 0x81, false, "MR Gorman Track Race", MILK_ROAD_GORMAN_RACE, GAROS_MASK, {Category::cMilkRoad, Category::cMinigame, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD ); @@ -151,8 +152,8 @@ void LocationTable_Init() { locationTable[ROAD_TO_SWAMP_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x1E, true, "Road to Southern Swamp Grotto", ROAD_TO_SWAMP_GROTTO_CHEST, RED_RUPEE, {Category::cRoadToSouthernSwamp,Category::cGrotto, Category::cChest,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); //Romani Ranch - locationTable[ROMANI_RANCH_ALIEN_DEFENSE] = ItemLocation::Base (0x35, 0x60, false, "RR Alien Defense", ROMANI_RANCH_ALIEN_DEFENSE, BOTTLE_WITH_MILK, {Category::cRomaniRanch, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); - locationTable[ROMANI_RANCH_DOG_RACE] = ItemLocation::Base (0x41, 0x0C, false, "RR Dog Race", ROMANI_RANCH_DOG_RACE, PIECE_OF_HEART, {Category::cRomaniRanch,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); + locationTable[ROMANI_RANCH_ALIEN_DEFENSE] = ItemLocation::Base (0x35, 0x60, false, "RR Alien Defense", ROMANI_RANCH_ALIEN_DEFENSE, BOTTLE_WITH_MILK, {Category::cRomaniRanch}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); + locationTable[ROMANI_RANCH_DOG_RACE] = ItemLocation::Base (0x41, 0x0C, false, "RR Dog Race", ROMANI_RANCH_DOG_RACE, PIECE_OF_HEART, {Category::cRomaniRanch,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); locationTable[ROMANI_RANCH_GROG] = ItemLocation::Base (0x42, 0x7F, false, "RR Grog", ROMANI_RANCH_GROG, BUNNY_HOOD, {Category::cRomaniRanch, Category::cVanillaMask,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); locationTable[ROMANI_RANCH_CREMIA_ESCORT] = ItemLocation::Base (0x2D, 0x82, true, "RR Cremia Escort", ROMANI_RANCH_CREMIA_ESCORT, ROMANIS_MASK, {Category::cRomaniRanch, Category::cVanillaMask,Category::cDayTwo}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); locationTable[ROMANI_RANCH_ROMANIS_GAME] = ItemLocation::Base (0x35, 0x6C, false, "RR Romani's Game", ROMANI_RANCH_ROMANIS_GAME, EPONAS_SONG, {Category::cRomaniRanch,Category::cSong,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); @@ -173,8 +174,8 @@ void LocationTable_Init() { //Southern Swamp locationTable[SOUTHERN_SWAMP_KOUME] = ItemLocation::Base (0x57, 0x43, false, "SS Koume", SOUTHERN_SWAMP_KOUME, PICTOGRAPH_BOX, {Category::cSouthernSwamp,Category::cDayOne, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[SOUTHERN_SWAMP_KOTAKE] = ItemLocation::Base (0x0A, 0x59, false, "SS Kotake", SOUTHERN_SWAMP_KOTAKE, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[SOUTHERN_SWAMP_KOTAKE_IN_WOODS] = ItemLocation::Base (0x64, 0x59, false, "SS Mystery Woods Kotake", SOUTHERN_SWAMP_KOTAKE_IN_WOODS, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp, Category::cAlternateCheck, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_KOTAKE] = ItemLocation::Base (0x0A, 0x59, false, "SS Kotake", SOUTHERN_SWAMP_KOTAKE, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_KOTAKE_IN_WOODS] = ItemLocation::Base (0x64, 0x59, false, "SS Mystery Woods Kotake", SOUTHERN_SWAMP_KOTAKE_IN_WOODS, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp, Category::cAlternateCheck, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[SOUTHERN_SWAMP_SCRUB_TRADE] = ItemLocation::Base (0x45, 0x98, true, "SS Deku Scrub Merchant Trade", SOUTHERN_SWAMP_SCRUB_TRADE, SWAMP_TITLE, {Category::cSouthernSwamp, Category::cDekuScrub,Category::cDayOne, Category::cTradeItem, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[SOUTHERN_SWAMP_PICTOGRAPH_WINNER] = ItemLocation::Base (0x57, 0xBA, false, "SS Pictograph Contest Winner", SOUTHERN_SWAMP_PICTOGRAPH_WINNER, PIECE_OF_HEART, {Category::cSouthernSwamp, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[SOUTHERN_SWAMP_BOAT_ARCHERY] = ItemLocation::Base (0x57, 0x5A, false, "SS Boat Archery", SOUTHERN_SWAMP_BOAT_ARCHERY, EMPTY_BOTTLE1, {Category::cSouthernSwamp, Category::cMinigame, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); @@ -192,13 +193,13 @@ void LocationTable_Init() { locationTable[SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR] = ItemLocation::Base (0x00, 0x98, true, "SS Deku Scrub Merchant Trade (Cleared)", SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR, SWAMP_TITLE, {Category::cSouthernSwamp, Category::cDekuScrub,Category::cDayOne,Category::cTradeItem, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); //Stock Pot Inn - locationTable[STOCKPOTINN_RESERVATION] = ItemLocation::Base (0x61, 0xA0, true, "SPI Reservation", STOCKPOTINN_RESERVATION, ROOM_KEY, {Category::cStockPotInn,Category::cDayOne, Category::cAnjuAndKafei, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_MIDNIGHT_MEETING] = ItemLocation::Base (0x61, 0xAA, true, "SPI Midnight Meeting", STOCKPOTINN_MIDNIGHT_MEETING, LETTER_KAFEI, {Category::cStockPotInn,Category::cDayOne, Category::cAnjuAndKafei, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); + locationTable[STOCKPOTINN_RESERVATION] = ItemLocation::Base (0x61, 0xA0, true, "SPI Reservation", STOCKPOTINN_RESERVATION, ROOM_KEY, {Category::cStockPotInn,Category::cDayOne, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); + locationTable[STOCKPOTINN_MIDNIGHT_MEETING] = ItemLocation::Base (0x61, 0xAA, true, "SPI Midnight Meeting", STOCKPOTINN_MIDNIGHT_MEETING, LETTER_KAFEI, {Category::cStockPotInn,Category::cDayOne, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); locationTable[STOCKPOTINN_TOILET_HAND] = ItemLocation::Base (0x61, 0x01, false, "SPI Toilet Hand", STOCKPOTINN_TOILET_HAND, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); locationTable[STOCKPOTINN_GRANDMA_SHORT_STORY] = ItemLocation::Base (0x61, 0x0C, false, "SPI Grandma Short Story", STOCKPOTINN_GRANDMA_SHORT_STORY, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); locationTable[STOCKPOTINN_GRANDMA_LONG_STORY] = ItemLocation::Base (0x61, 0xBA, false, "SPI Grandma Long Story", STOCKPOTINN_GRANDMA_LONG_STORY, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); locationTable[STOCKPOTINN_ANJU_AND_KAFEI] = ItemLocation::Base (0x61, 0x85, false, "SPI Anju And Kafei", STOCKPOTINN_ANJU_AND_KAFEI, COUPLES_MASK, {Category::cStockPotInn, Category::cDayThree, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_STAFF_ROOM_CHEST] = ItemLocation::Chest (0x61, 0x01, true, "SPI Staff Room Chest", STOCKPOTINN_STAFF_ROOM_CHEST, SILVER_RUPEE, {Category::cStockPotInn,Category::cChest ,Category::cDayThree, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); + locationTable[STOCKPOTINN_STAFF_ROOM_CHEST] = ItemLocation::Chest (0x61, 0x01, true, "SPI Staff Room Chest", STOCKPOTINN_STAFF_ROOM_CHEST, SILVER_RUPEE, {Category::cStockPotInn,Category::cChest ,Category::cDayThree}, SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); locationTable[STOCKPOTINN_GUEST_ROOM_CHEST] = ItemLocation::Chest (0x61, 0x00, true, "SPI Guest Room Chest", STOCKPOTINN_GUEST_ROOM_CHEST, SILVER_RUPEE, {Category::cStockPotInn,Category::cChest ,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); //Stone Tower @@ -209,7 +210,7 @@ void LocationTable_Init() { //Termina Field locationTable[TERMINA_FIELD_MOONS_TEAR] = ItemLocation::Base (0x2D, 0x96, true, "TF Moon's Tear", TERMINA_FIELD_MOONS_TEAR, MOONS_TEAR, {Category::cTerminaField,Category::cDayOne, Category::cTradeItem, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); locationTable[TERMINA_FIELD_GOSSIP_STONES] = ItemLocation::Base (0x07, 0x0C, false, "TF Gossip Stones", TERMINA_FIELD_GOSSIP_STONES, PIECE_OF_HEART, {Category::cTerminaField,Category::cGrotto, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); - locationTable[TERMINA_FIELD_BUSINESS_SCRUB] = ItemLocation::Base (0x07, 0x01, false, "TF Business Scrub", TERMINA_FIELD_BUSINESS_SCRUB, PIECE_OF_HEART, {Category::cTerminaField,Category::cGrotto,Category::cDekuScrub, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); + locationTable[TERMINA_FIELD_BUSINESS_SCRUB] = ItemLocation::Base (0x07, 0x01, false, "TF Business Scrub", TERMINA_FIELD_BUSINESS_SCRUB, PIECE_OF_HEART, {Category::cTerminaField,Category::cGrotto,Category::cDekuScrub, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); locationTable[TERMINA_FIELD_PEAHAT_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x04, true, "TF Peahat Grotto Chest", TERMINA_FIELD_PEAHAT_GROTTO_CHEST, PIECE_OF_HEART, {Category::cTerminaField,Category::cGrotto, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); locationTable[TERMINA_FIELD_DODONGO_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x00, true, "TF Dodongo Grotto Chest", TERMINA_FIELD_DODONGO_GROTTO_CHEST, PIECE_OF_HEART, {Category::cTerminaField,Category::cGrotto, Category::cVanillaHeartPiece, Category::cChest, Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); locationTable[TERMINA_FIELD_BIO_BABA_GROTTO_BEEHIVE] = ItemLocation::Collectable(0x07, 0x00, false, "TF Bio Baba Grotto HP", TERMINA_FIELD_BIO_BABA_GROTTO_BEEHIVE, PIECE_OF_HEART, {Category::cTerminaField,Category::cGrotto, Category::cVanillaHeartPiece, Category::cChest, Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); @@ -226,14 +227,14 @@ void LocationTable_Init() { locationTable[TWIN_ISLANDS_GORON_RACETRACK_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x19, true, "TI Goron Racetrack Grotto", TWIN_ISLANDS_GORON_RACETRACK_GROTTO_CHEST, BOMBCHU_5, {Category::cTwinIslands, Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); locationTable[TWIN_ISLANDS_UNDERWATER_RAMP_CHEST] = ItemLocation::Chest (0x5E, 0x06, true, "TI Underwater Ramp Chest", TWIN_ISLANDS_UNDERWATER_RAMP_CHEST, PIECE_OF_HEART, {Category::cTwinIslands, Category::cVanillaHeartPiece, Category::cChest, Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); locationTable[TWIN_ISLANDS_CAVE_CHEST] = ItemLocation::Chest (0x5E, 0x00, true, "TI Cave Chest", TWIN_ISLANDS_CAVE_CHEST, RED_RUPEE, {Category::cTwinIslands,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); - locationTable[TWIN_ISLANDS_LULLABY_INTRO] = ItemLocation::Base (0x5D, 0x00, false, "TI Lullaby Intro", TWIN_ISLANDS_LULLABY_INTRO, LULLABY_INTRO, {Category::cTwinIslands, Category::cSong, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); + locationTable[TWIN_ISLANDS_LULLABY_INTRO] = ItemLocation::Base (0x5D, 0x74, false, "TI Lullaby Intro", TWIN_ISLANDS_LULLABY_INTRO, LULLABY_INTRO, {Category::cTwinIslands, Category::cSong, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); //W Clock Town locationTable[W_CLOCK_TOWN_BOMB_BAG_BUY] = ItemLocation::Base (0x0D, 0x1B, false, "WCT Bomb Bag Purchase", W_CLOCK_TOWN_BOMB_BAG_BUY, PROGRESSIVE_BOMB_BAG, {Category::cWestClockTown,Category::cDayOne, Category::cShop, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); locationTable[W_CLOCK_TOWN_BIG_BOMB_BAG_BUY] = ItemLocation::Base (0x0D, 0x1C, false, "WCT Big Bomb Bag Purchase", W_CLOCK_TOWN_BIG_BOMB_BAG_BUY, PROGRESSIVE_BOMB_BAG, {Category::cWestClockTown,Category::cDayTwo, Category::cShop, Category::cMainInventory, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_POSTMANS_GAME] = ItemLocation::Base (0x2E, 0x0C, false, "WCT Postman's Game", W_CLOCK_TOWN_POSTMANS_GAME, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_ROSA_SISTERS] = ItemLocation::Base (0x6D, 0x0C, false, "WCT Rosa Sisters", W_CLOCK_TOWN_ROSA_SISTERS, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_SWORDSMANS_SCHOOL] = ItemLocation::Base (0x54, 0x0C, false, "WCT Swordsman's School", W_CLOCK_TOWN_SWORDSMANS_SCHOOL, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY] = ItemLocation::Base (0x0D, 0x7E, false, "WCT All-Night Mask Purchase", W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY, ALL_NIGHT_MASK, {Category::cWestClockTown, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_POSTMANS_GAME] = ItemLocation::Base (0x2E, 0x0C, false, "WCT Postman's Game", W_CLOCK_TOWN_POSTMANS_GAME, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_ROSA_SISTERS] = ItemLocation::Base (0x6D, 0x0C, false, "WCT Rosa Sisters", W_CLOCK_TOWN_ROSA_SISTERS, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_SWORDSMANS_SCHOOL] = ItemLocation::Base (0x54, 0x0C, false, "WCT Swordsman's School", W_CLOCK_TOWN_SWORDSMANS_SCHOOL, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY] = ItemLocation::Base (0x0D, 0x7E, false, "WCT All-Night Mask Purchase", W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY, ALL_NIGHT_MASK, {Category::cWestClockTown, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); //locationTable[W_CLOCK_TOWN_LOTTERY] = ItemLocation::Base (0x39, 0x00, true, "WCT Lottery", W_CLOCK_TOWN_LOTTERY, PURPLE_RUPEE, {Category::cWestClockTown}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); locationTable[W_CLOCK_TOWN_BOMB_SHOP_GORON] = ItemLocation::Base (0x0D, 0x34, true, "WCT Bomb Shop Goron", W_CLOCK_TOWN_BOMB_SHOP_GORON, POWDER_KEG, {Category::cWestClockTown, Category::cMerchant,Category::cDayOne, Category::cShop, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); locationTable[W_CLOCK_TOWN_CURIOSITY_BOMB_BAG] = ItemLocation::Base (0x0D, 0x00, true, "WCT Curiosity Shop Bomb Bag", W_CLOCK_TOWN_CURIOSITY_BOMB_BAG, PROGRESSIVE_BOMB_BAG, {Category::cWestClockTown, Category::cDayTwo, Category::cShop, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); @@ -245,8 +246,8 @@ void LocationTable_Init() { //Zora Cape locationTable[ZORA_CAPE_GREAT_FAIRY] = ItemLocation::Base (0x26, 0xB2, false, "ZC Great Fairy", ZORA_CAPE_GREAT_FAIRY, DOUBLE_DEFENSE, {Category::cZoraCape,Category::cFairyFountain,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); - locationTable[ZORA_CAPE_BEAVER_RACE_1] = ItemLocation::Base (0x4A, 0x5A, false, "ZC Beaver Race 1", ZORA_CAPE_BEAVER_RACE_1, EMPTY_BOTTLE2, {Category::cZoraCape,Category::cMinigame, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); - locationTable[ZORA_CAPE_BEAVER_RACE_2] = ItemLocation::Base (0x4A, 0x0C, false, "ZC Beaver Race 2", ZORA_CAPE_BEAVER_RACE_2, PIECE_OF_HEART, {Category::cZoraCape,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); + locationTable[ZORA_CAPE_BEAVER_RACE_1] = ItemLocation::Base (0x4A, 0x5A, false, "ZC Beaver Race 1", ZORA_CAPE_BEAVER_RACE_1, EMPTY_BOTTLE2, {Category::cZoraCape,Category::cMinigame, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); + locationTable[ZORA_CAPE_BEAVER_RACE_2] = ItemLocation::Base (0x4A, 0x0C, false, "ZC Beaver Race 2", ZORA_CAPE_BEAVER_RACE_2, PIECE_OF_HEART, {Category::cZoraCape,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); locationTable[ZORA_CAPE_LIKE_LIKE] = ItemLocation::Collectable(0x38, 0x00, false, "ZC Like Like HP", ZORA_CAPE_LIKE_LIKE, PIECE_OF_HEART, {Category::cZoraCape, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); locationTable[ZORA_CAPE_LEDGE_NO_TREE] = ItemLocation::Chest (0x38, 0x01, true, "ZC Ledge Without Tree Chest", ZORA_CAPE_LEDGE_NO_TREE, RED_RUPEE, {Category::cZoraCape,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); locationTable[ZORA_CAPE_LEDGE_WITH_TREE] = ItemLocation::Chest (0x38, 0x02, true, "ZC Ledge With Tree Chest", ZORA_CAPE_LEDGE_WITH_TREE, RED_RUPEE, {Category::cZoraCape,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); @@ -365,68 +366,68 @@ void LocationTable_Init() { -------------------------------*/ //Southern Swamp Skulltla House - locationTable[SSH_MAIN_ROOM_NEAR_CEILING] = ItemLocation::SGSToken (0x27, 0x03, false, "SSH Main Room Near Ceiling", SSH_MAIN_ROOM_NEAR_CEILING, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MAIN_ROOM_WATER] = ItemLocation::SGSToken (0x27, 0x23, false, "SSH Main Room Water", SSH_MAIN_ROOM_WATER, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MAIN_ROOM_LOWER_LEFT_SOIL] = ItemLocation::SGSToken (0x27, 0x25, false, "SSH Main Room Lower Left Soil", SSH_MAIN_ROOM_LOWER_LEFT_SOIL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MAIN_ROOM_LOWER_RIGHT_SOIL] = ItemLocation::SGSToken (0x27, 0x31, false, "SSH Main Room Lower Right Soil", SSH_MAIN_ROOM_LOWER_RIGHT_SOIL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MAIN_ROOM_UPPER_SOIL] = ItemLocation::SGSToken (0x27, 0x2D, false, "SSH Main Room Upper Soil", SSH_MAIN_ROOM_UPPER_SOIL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MAIN_ROOM_PILLAR] = ItemLocation::SGSToken (0x27, 0x3F, false, "SSH Main Room Pillar", SSH_MAIN_ROOM_PILLAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MAIN_ROOM_UPPER_PILLAR] = ItemLocation::SGSToken (0x27, 0x4F, false, "SSH Main Room Upper Pillar", SSH_MAIN_ROOM_UPPER_PILLAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MAIN_ROOM_JAR] = ItemLocation::SGSToken (0x27, 0x79, false, "SSH Main Room Jar", SSH_MAIN_ROOM_JAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MONUMENT_ROOM_CRATE_1] = ItemLocation::SGSToken (0x27, 0x29, false, "SSH Monument Room Crate 1", SSH_MONUMENT_ROOM_CRATE_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MONUMENT_ROOM_CRATE_2] = ItemLocation::SGSToken (0x27, 0x6D, false, "SSH Monument Room Crate 2", SSH_MONUMENT_ROOM_CRATE_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MONUMENT_ROOM_TORCH] = ItemLocation::SGSToken (0x27, 0x0B, false, "SSH Monument Room Torch", SSH_MONUMENT_ROOM_TORCH, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MONUMENT_ROOM_ON_MONUMENT] = ItemLocation::SGSToken (0x27, 0x3B, false, "SSH Monument Room On Monument", SSH_MONUMENT_ROOM_ON_MONUMENT, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_MONUMENT_ROOM_LOWER_WALL] = ItemLocation::SGSToken (0x27, 0x37, false, "SSH Monument Room Lower Wall", SSH_MONUMENT_ROOM_LOWER_WALL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_GOLD_ROOM_NEAR_CEILING] = ItemLocation::SGSToken (0x27, 0x07, false, "SSH Gold Room Near Ceiling", SSH_GOLD_ROOM_NEAR_CEILING, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_GOLD_ROOM_PILLAR] = ItemLocation::SGSToken (0x27, 0x13, false, "SSH Gold Room Pillar", SSH_GOLD_ROOM_PILLAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_GOLD_ROOM_BEEHIVE] = ItemLocation::SGSToken (0x27, 0x49, false, "SSH Gold Room Beehive", SSH_GOLD_ROOM_BEEHIVE, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_GOLD_ROOM_WALL] = ItemLocation::SGSToken (0x27, 0x67, false, "SSH Gold Room Wall", SSH_GOLD_ROOM_WALL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_POT_ROOM_JAR] = ItemLocation::SGSToken (0x27, 0x15, false, "SSH Pot Room Jar", SSH_POT_ROOM_JAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_POT_ROOM_POT_1] = ItemLocation::SGSToken (0x27, 0x41, false, "SSH Pot Room Pot 1", SSH_POT_ROOM_POT_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_POT_ROOM_POT_2] = ItemLocation::SGSToken (0x27, 0x45, false, "SSH Pot Room Pot 2", SSH_POT_ROOM_POT_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_POT_ROOM_BEHIND_VINES] = ItemLocation::SGSToken (0x27, 0x53, false, "SSH Pot Room Behind Vines", SSH_POT_ROOM_BEHIND_VINES, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_POT_ROOM_WALL] = ItemLocation::SGSToken (0x27, 0x5B, false, "SSH Pot Room Wall", SSH_POT_ROOM_WALL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_POT_ROOM_BEEHIVE_1] = ItemLocation::SGSToken (0x27, 0x5D, false, "SSH Pot Room Beehive 1", SSH_POT_ROOM_BEEHIVE_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_POT_ROOM_BEEHIVE_2] = ItemLocation::SGSToken (0x27, 0x71, false, "SSH Pot Room Beehive 2", SSH_POT_ROOM_BEEHIVE_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_TREE_ROOM_TREE_1] = ItemLocation::SGSToken (0x27, 0x76, false, "SSH Tree Room Tree 1", SSH_TREE_ROOM_TREE_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_TREE_ROOM_TREE_2] = ItemLocation::SGSToken (0x27, 0x62, false, "SSH Tree Room Tree 2", SSH_TREE_ROOM_TREE_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_TREE_ROOM_TREE_3] = ItemLocation::SGSToken (0x27, 0x56, false, "SSH Tree Room Tree 3", SSH_TREE_ROOM_TREE_3, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_TREE_ROOM_GRASS_1] = ItemLocation::SGSToken (0x27, 0x1F, false, "SSH Tree Room Grass 1", SSH_TREE_ROOM_GRASS_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_TREE_ROOM_GRASS_2] = ItemLocation::SGSToken (0x27, 0x1B, false, "SSH Tree Room Grass 2", SSH_TREE_ROOM_GRASS_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); - locationTable[SSH_TREE_ROOM_BEEHIVE] = ItemLocation::SGSToken (0x27, 0x69, false, "SSH Tree Room Beehive", SSH_TREE_ROOM_BEEHIVE, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MAIN_ROOM_NEAR_CEILING] = ItemLocation::SGSToken (0x27, 0x03, false, "SSH Main Room Near Ceiling", SSH_MAIN_ROOM_NEAR_CEILING, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MAIN_ROOM_WATER] = ItemLocation::SGSToken (0x27, 0x23, false, "SSH Main Room Water", SSH_MAIN_ROOM_WATER, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MAIN_ROOM_LOWER_LEFT_SOIL] = ItemLocation::SGSToken (0x27, 0x25, false, "SSH Main Room Lower Left Soil", SSH_MAIN_ROOM_LOWER_LEFT_SOIL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MAIN_ROOM_LOWER_RIGHT_SOIL] = ItemLocation::SGSToken (0x27, 0x31, false, "SSH Main Room Lower Right Soil", SSH_MAIN_ROOM_LOWER_RIGHT_SOIL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MAIN_ROOM_UPPER_SOIL] = ItemLocation::SGSToken (0x27, 0x2D, false, "SSH Main Room Upper Soil", SSH_MAIN_ROOM_UPPER_SOIL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MAIN_ROOM_PILLAR] = ItemLocation::SGSToken (0x27, 0x3F, false, "SSH Main Room Pillar", SSH_MAIN_ROOM_PILLAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MAIN_ROOM_UPPER_PILLAR] = ItemLocation::SGSToken (0x27, 0x4F, false, "SSH Main Room Upper Pillar", SSH_MAIN_ROOM_UPPER_PILLAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MAIN_ROOM_JAR] = ItemLocation::SGSToken (0x27, 0x79, false, "SSH Main Room Jar", SSH_MAIN_ROOM_JAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MONUMENT_ROOM_CRATE_1] = ItemLocation::SGSToken (0x27, 0x29, false, "SSH Monument Room Crate 1", SSH_MONUMENT_ROOM_CRATE_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MONUMENT_ROOM_CRATE_2] = ItemLocation::SGSToken (0x27, 0x6D, false, "SSH Monument Room Crate 2", SSH_MONUMENT_ROOM_CRATE_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MONUMENT_ROOM_TORCH] = ItemLocation::SGSToken (0x27, 0x0B, false, "SSH Monument Room Torch", SSH_MONUMENT_ROOM_TORCH, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MONUMENT_ROOM_ON_MONUMENT] = ItemLocation::SGSToken (0x27, 0x3B, false, "SSH Monument Room On Monument", SSH_MONUMENT_ROOM_ON_MONUMENT, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_MONUMENT_ROOM_LOWER_WALL] = ItemLocation::SGSToken (0x27, 0x37, false, "SSH Monument Room Lower Wall", SSH_MONUMENT_ROOM_LOWER_WALL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_GOLD_ROOM_NEAR_CEILING] = ItemLocation::SGSToken (0x27, 0x07, false, "SSH Gold Room Near Ceiling", SSH_GOLD_ROOM_NEAR_CEILING, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_GOLD_ROOM_PILLAR] = ItemLocation::SGSToken (0x27, 0x13, false, "SSH Gold Room Pillar", SSH_GOLD_ROOM_PILLAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_GOLD_ROOM_BEEHIVE] = ItemLocation::SGSToken (0x27, 0x49, false, "SSH Gold Room Beehive", SSH_GOLD_ROOM_BEEHIVE, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_GOLD_ROOM_WALL] = ItemLocation::SGSToken (0x27, 0x67, false, "SSH Gold Room Wall", SSH_GOLD_ROOM_WALL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_POT_ROOM_JAR] = ItemLocation::SGSToken (0x27, 0x15, false, "SSH Pot Room Jar", SSH_POT_ROOM_JAR, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_POT_ROOM_POT_1] = ItemLocation::SGSToken (0x27, 0x41, false, "SSH Pot Room Pot 1", SSH_POT_ROOM_POT_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_POT_ROOM_POT_2] = ItemLocation::SGSToken (0x27, 0x45, false, "SSH Pot Room Pot 2", SSH_POT_ROOM_POT_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_POT_ROOM_BEHIND_VINES] = ItemLocation::SGSToken (0x27, 0x53, false, "SSH Pot Room Behind Vines", SSH_POT_ROOM_BEHIND_VINES, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_POT_ROOM_WALL] = ItemLocation::SGSToken (0x27, 0x5B, false, "SSH Pot Room Wall", SSH_POT_ROOM_WALL, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_POT_ROOM_BEEHIVE_1] = ItemLocation::SGSToken (0x27, 0x5D, false, "SSH Pot Room Beehive 1", SSH_POT_ROOM_BEEHIVE_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_POT_ROOM_BEEHIVE_2] = ItemLocation::SGSToken (0x27, 0x71, false, "SSH Pot Room Beehive 2", SSH_POT_ROOM_BEEHIVE_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_TREE_ROOM_TREE_1] = ItemLocation::SGSToken (0x27, 0x76, false, "SSH Tree Room Tree 1", SSH_TREE_ROOM_TREE_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_TREE_ROOM_TREE_2] = ItemLocation::SGSToken (0x27, 0x62, false, "SSH Tree Room Tree 2", SSH_TREE_ROOM_TREE_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_TREE_ROOM_TREE_3] = ItemLocation::SGSToken (0x27, 0x56, false, "SSH Tree Room Tree 3", SSH_TREE_ROOM_TREE_3, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_TREE_ROOM_GRASS_1] = ItemLocation::SGSToken (0x27, 0x1F, false, "SSH Tree Room Grass 1", SSH_TREE_ROOM_GRASS_1, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_TREE_ROOM_GRASS_2] = ItemLocation::SGSToken (0x27, 0x1B, false, "SSH Tree Room Grass 2", SSH_TREE_ROOM_GRASS_2, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); + locationTable[SSH_TREE_ROOM_BEEHIVE] = ItemLocation::SGSToken (0x27, 0x69, false, "SSH Tree Room Beehive", SSH_TREE_ROOM_BEEHIVE, SWAMP_SKULLTULA_TOKEN, {Category::cSouthernSwamp, Category::cSwampSkulltula,Category::cDayOne, Category::cNoOcarinaStart}, SpoilerCollectionCheckGroup::GROUP_SWAMP_SKULLTULA_HOUSE); //Oceanside Spider House - locationTable[OSH_ENTRANCE_LEFT_WALL] = ItemLocation::OGSToken (0x28, 0x37, false, "OSH Entrance Left Wall", OSH_ENTRANCE_LEFT_WALL, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_ENTRANCE_RIGHT_WALL] = ItemLocation::OGSToken (0x28, 0x33, false, "OSH Entrance Right Wall", OSH_ENTRANCE_RIGHT_WALL, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_ENTRANCE_WEB] = ItemLocation::OGSToken (0x28, 0x3F, false, "OSH Entrance Web", OSH_ENTRANCE_WEB, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_LIBRARY_HOLE_BEHIND_PICTURE] = ItemLocation::OGSToken (0x28, 0x0B, false, "OSH Library Hole Behind Picture", OSH_LIBRARY_HOLE_BEHIND_PICTURE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_LIBRARY_HOLE_BEHIND_CABINET] = ItemLocation::OGSToken (0x28, 0x0F, false, "OSH Library Hole Behind Cabinet", OSH_LIBRARY_HOLE_BEHIND_CABINET, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_LIBRARY_ON_CORNER_BOOKSHELF] = ItemLocation::OGSToken (0x28, 0x13, false, "OSH Library On Corner Bookshelf", OSH_LIBRARY_ON_CORNER_BOOKSHELF, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_LIBRARY_CEILING_EDGE] = ItemLocation::OGSToken (0x28, 0x23, false, "OSH Library Ceiling Edge", OSH_LIBRARY_CEILING_EDGE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_LIBRARY_BEHIND_BOOKCASE_1] = ItemLocation::OGSToken (0x28, 0x73, false, "OSH Library Behind Bookcase 1", OSH_LIBRARY_BEHIND_BOOKCASE_1, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_LIBRARY_BEHIND_BOOKCASE_2] = ItemLocation::OGSToken (0x28, 0x57, false, "OSH Library Behind Bookacse 2", OSH_LIBRARY_BEHIND_BOOKCASE_2, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_LIBRARY_BEHIND_PICTURE] = ItemLocation::OGSToken (0x28, 0x53, false, "OSH Library Behind Picture", OSH_LIBRARY_BEHIND_PICTURE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_SECOND_ROOM_CEILING_EDGE] = ItemLocation::OGSToken (0x28, 0x17, false, "OSH Second Room Ceiling Edge", OSH_SECOND_ROOM_CEILING_EDGE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_SECOND_ROOM_CEILING_PLANK] = ItemLocation::OGSToken (0x28, 0x1B, false, "OSH Second Room Ceiling Plank", OSH_SECOND_ROOM_CEILING_PLANK, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_SECOND_ROOM_JAR] = ItemLocation::OGSToken (0x28, 0x2D, false, "OSH Second Room Jar", OSH_SECOND_ROOM_JAR, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_SECOND_ROOM_WEBBED_HOLE] = ItemLocation::OGSToken (0x28, 0x3B, false, "OSH Second Room Webbed Hole", OSH_SECOND_ROOM_WEBBED_HOLE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_SECOND_ROOM_WEBBED_POT] = ItemLocation::OGSToken (0x28, 0x5D, false, "OSH Second Room Webbed Pot", OSH_SECOND_ROOM_WEBBED_POT, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_SECOND_ROOM_UPPER_POT] = ItemLocation::OGSToken (0x28, 0x61, false, "OSH Second Room Upper Pot", OSH_SECOND_ROOM_UPPER_POT, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_SECOND_ROOM_BEHIND_SKULL_1] = ItemLocation::OGSToken (0x28, 0x77, false, "OSH Second Room Behind Skull 1", OSH_SECOND_ROOM_BEHIND_SKULL_1, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_SECOND_ROOM_BEHIND_SKULL_2] = ItemLocation::OGSToken (0x28, 0x7B, false, "OSH Second Room Behind Skull 2", OSH_SECOND_ROOM_BEHIND_SKULL_2, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_SECOND_ROOM_LOWER_POT] = ItemLocation::OGSToken (0x28, 0x6D, false, "OSH Second Room Lower Pot", OSH_SECOND_ROOM_LOWER_POT, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_STORAGE_ROOM_CEILING_WEB] = ItemLocation::OGSToken (0x28, 0x27, false, "OSH Storage Room Ceiling Web", OSH_STORAGE_ROOM_CEILING_WEB, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_STORAGE_ROOM_BEHIND_CRATE] = ItemLocation::OGSToken (0x28, 0x2B, false, "OSH Storage Room Behind Crate", OSH_STORAGE_ROOM_BEHIND_CRATE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_STORAGE_ROOM_WALL] = ItemLocation::OGSToken (0x28, 0x07, false, "OSH Storage Room Wall", OSH_STORAGE_ROOM_WALL, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_STORAGE_ROOM_CRATE] = ItemLocation::OGSToken (0x28, 0x59, false, "OSH Storage Room Crate", OSH_STORAGE_ROOM_CRATE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_STORAGE_ROOM_BARREL] = ItemLocation::OGSToken (0x28, 0x69, false, "OSH Storage Room Barrel", OSH_STORAGE_ROOM_BARREL, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_COLORED_SKULLS_CEILING_EDGE] = ItemLocation::OGSToken (0x28, 0x1F, false, "OSH Colored Skulls Ceiling Edge", OSH_COLORED_SKULLS_CEILING_EDGE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_COLORED_SKULLS_CHANDELIER_1] = ItemLocation::OGSToken (0x28, 0x46, false, "OSH Colored Skulls Chandelier 1", OSH_COLORED_SKULLS_CHANDELIER_1, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_COLORED_SKULLS_CHANDELIER_2] = ItemLocation::OGSToken (0x28, 0x42, false, "OSH Colored Skulls Chandelier 2", OSH_COLORED_SKULLS_CHANDELIER_2, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_COLORED_SKULLS_CHANDELIER_3] = ItemLocation::OGSToken (0x28, 0x4A, false, "OSH Colored Skulls Chandelier 3", OSH_COLORED_SKULLS_CHANDELIER_3, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_COLORED_SKULLS_BEHIND_PICTURE] = ItemLocation::OGSToken (0x28, 0x4F, false, "OSH Colored Skulls Behind Picture", OSH_COLORED_SKULLS_BEHIND_PICTURE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); - locationTable[OSH_COLORED_SKULLS_POT] = ItemLocation::OGSToken (0x28, 0x65, false, "OSH Colored Skulls Pot", OSH_COLORED_SKULLS_POT, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_ENTRANCE_LEFT_WALL] = ItemLocation::OGSToken (0x28, 0x37, false, "OSH Entrance Left Wall", OSH_ENTRANCE_LEFT_WALL, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_ENTRANCE_RIGHT_WALL] = ItemLocation::OGSToken (0x28, 0x33, false, "OSH Entrance Right Wall", OSH_ENTRANCE_RIGHT_WALL, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_ENTRANCE_WEB] = ItemLocation::OGSToken (0x28, 0x3F, false, "OSH Entrance Web", OSH_ENTRANCE_WEB, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_LIBRARY_HOLE_BEHIND_PICTURE] = ItemLocation::OGSToken (0x28, 0x0B, false, "OSH Library Hole Behind Picture", OSH_LIBRARY_HOLE_BEHIND_PICTURE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_LIBRARY_HOLE_BEHIND_CABINET] = ItemLocation::OGSToken (0x28, 0x0F, false, "OSH Library Hole Behind Cabinet", OSH_LIBRARY_HOLE_BEHIND_CABINET, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_LIBRARY_ON_CORNER_BOOKSHELF] = ItemLocation::OGSToken (0x28, 0x13, false, "OSH Library On Corner Bookshelf", OSH_LIBRARY_ON_CORNER_BOOKSHELF, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_LIBRARY_CEILING_EDGE] = ItemLocation::OGSToken (0x28, 0x23, false, "OSH Library Ceiling Edge", OSH_LIBRARY_CEILING_EDGE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_LIBRARY_BEHIND_BOOKCASE_1] = ItemLocation::OGSToken (0x28, 0x73, false, "OSH Library Behind Bookcase 1", OSH_LIBRARY_BEHIND_BOOKCASE_1, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_LIBRARY_BEHIND_BOOKCASE_2] = ItemLocation::OGSToken (0x28, 0x57, false, "OSH Library Behind Bookacse 2", OSH_LIBRARY_BEHIND_BOOKCASE_2, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_LIBRARY_BEHIND_PICTURE] = ItemLocation::OGSToken (0x28, 0x53, false, "OSH Library Behind Picture", OSH_LIBRARY_BEHIND_PICTURE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_SECOND_ROOM_CEILING_EDGE] = ItemLocation::OGSToken (0x28, 0x17, false, "OSH Second Room Ceiling Edge", OSH_SECOND_ROOM_CEILING_EDGE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_SECOND_ROOM_CEILING_PLANK] = ItemLocation::OGSToken (0x28, 0x1B, false, "OSH Second Room Ceiling Plank", OSH_SECOND_ROOM_CEILING_PLANK, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_SECOND_ROOM_JAR] = ItemLocation::OGSToken (0x28, 0x2D, false, "OSH Second Room Jar", OSH_SECOND_ROOM_JAR, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_SECOND_ROOM_WEBBED_HOLE] = ItemLocation::OGSToken (0x28, 0x3B, false, "OSH Second Room Webbed Hole", OSH_SECOND_ROOM_WEBBED_HOLE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_SECOND_ROOM_WEBBED_POT] = ItemLocation::OGSToken (0x28, 0x5D, false, "OSH Second Room Webbed Pot", OSH_SECOND_ROOM_WEBBED_POT, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_SECOND_ROOM_UPPER_POT] = ItemLocation::OGSToken (0x28, 0x61, false, "OSH Second Room Upper Pot", OSH_SECOND_ROOM_UPPER_POT, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_SECOND_ROOM_BEHIND_SKULL_1] = ItemLocation::OGSToken (0x28, 0x77, false, "OSH Second Room Behind Skull 1", OSH_SECOND_ROOM_BEHIND_SKULL_1, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_SECOND_ROOM_BEHIND_SKULL_2] = ItemLocation::OGSToken (0x28, 0x7B, false, "OSH Second Room Behind Skull 2", OSH_SECOND_ROOM_BEHIND_SKULL_2, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_SECOND_ROOM_LOWER_POT] = ItemLocation::OGSToken (0x28, 0x6D, false, "OSH Second Room Lower Pot", OSH_SECOND_ROOM_LOWER_POT, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_STORAGE_ROOM_CEILING_WEB] = ItemLocation::OGSToken (0x28, 0x27, false, "OSH Storage Room Ceiling Web", OSH_STORAGE_ROOM_CEILING_WEB, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_STORAGE_ROOM_BEHIND_CRATE] = ItemLocation::OGSToken (0x28, 0x2B, false, "OSH Storage Room Behind Crate", OSH_STORAGE_ROOM_BEHIND_CRATE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_STORAGE_ROOM_WALL] = ItemLocation::OGSToken (0x28, 0x07, false, "OSH Storage Room Wall", OSH_STORAGE_ROOM_WALL, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_STORAGE_ROOM_CRATE] = ItemLocation::OGSToken (0x28, 0x59, false, "OSH Storage Room Crate", OSH_STORAGE_ROOM_CRATE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_STORAGE_ROOM_BARREL] = ItemLocation::OGSToken (0x28, 0x69, false, "OSH Storage Room Barrel", OSH_STORAGE_ROOM_BARREL, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_COLORED_SKULLS_CEILING_EDGE] = ItemLocation::OGSToken (0x28, 0x1F, false, "OSH Colored Skulls Ceiling Edge", OSH_COLORED_SKULLS_CEILING_EDGE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_COLORED_SKULLS_CHANDELIER_1] = ItemLocation::OGSToken (0x28, 0x46, false, "OSH Colored Skulls Chandelier 1", OSH_COLORED_SKULLS_CHANDELIER_1, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_COLORED_SKULLS_CHANDELIER_2] = ItemLocation::OGSToken (0x28, 0x42, false, "OSH Colored Skulls Chandelier 2", OSH_COLORED_SKULLS_CHANDELIER_2, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_COLORED_SKULLS_CHANDELIER_3] = ItemLocation::OGSToken (0x28, 0x4A, false, "OSH Colored Skulls Chandelier 3", OSH_COLORED_SKULLS_CHANDELIER_3, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_COLORED_SKULLS_BEHIND_PICTURE] = ItemLocation::OGSToken (0x28, 0x4F, false, "OSH Colored Skulls Behind Picture", OSH_COLORED_SKULLS_BEHIND_PICTURE, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); + locationTable[OSH_COLORED_SKULLS_POT] = ItemLocation::OGSToken (0x28, 0x65, false, "OSH Colored Skulls Pot", OSH_COLORED_SKULLS_POT, OCEANSIDE_SKULLTULA_TOKEN, {Category::cGreatBayCoast, Category::cOceanSkulltula,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_OCEAN_SKULLTULA_HOUSE); /*-------------------------------- --Stray Fairies--- @@ -789,6 +790,7 @@ std::vector dungeonRewardLocations = { std::vector overworldLocations = { // Clock Tower CLOCK_TOWER_OCARINA_OF_TIME, + CLOCK_TOWER_SONG_OF_TIME, HMS_DEKU_MASK, HMS_SONG_OF_HEALING, HMS_BOMBERS_NOTEBOOK, @@ -945,6 +947,7 @@ std::vector overworldLocations = { //Snowhead SNOWHEAD_GREAT_FAIRY, //Southern Swamp + SOUTHERN_SWAMP_MUSIC_STATUE, SOUTHERN_SWAMP_KOUME, SOUTHERN_SWAMP_KOTAKE, SOUTHERN_SWAMP_KOTAKE_IN_WOODS, @@ -1030,6 +1033,7 @@ std::vector overworldLocations = { WOODFALL_BEHIND_OWL_CHEST, ENTRANCE_TO_WOODFALL_CHEST, WOODFALL_GREAT_FAIRY, + GIANTS_OATH_TO_ORDER, //Zora Cape ZORA_CAPE_GREAT_FAIRY, ZORA_CAPE_BEAVER_RACE_1, diff --git a/source/item_pool.cpp b/source/item_pool.cpp index ac38356..7643815 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -257,7 +257,7 @@ const std::array chestItems = { MIRROR_SHIELD, }; -const std::array songList = { +const std::array songList = { //SONG_OF_TIME, //SONG_OF_DOUBLE_TIME, //INVERTED_SONG_OF_TIME, //SoT not included yet @@ -283,6 +283,8 @@ static void PlaceVanillaSongs() { PlaceItemInLocation(IKANA_CASTLE_IKANA_KING, ELEGY_OF_EMPTINESS); PlaceItemInLocation(IKANA_GRAVEYARD_DAY_ONE_GRAVE_TABLET, SONG_OF_STORMS); PlaceItemInLocation(GIANTS_OATH_TO_ORDER, OATH_TO_ORDER); + PlaceItemInLocation(CLOCK_TOWER_SONG_OF_TIME, SONG_OF_TIME); + PlaceItemInLocation(SOUTHERN_SWAMP_MUSIC_STATUE, SONG_OF_SOARING); }; // TODO: Change back to 18 when the override value is correct. @@ -867,7 +869,7 @@ void GenerateItemPool() { }; //Check song shuffle and dungeon reward shuffle just for ice traps /* - if (ShuffleSongs.Is(rnd::SongShuffleSetting::SONGSHUFFLE_ANYWHERE)) { + if (ShuffleSongs.Value() != 0) { //Push item ids for songs IceTrapModels.push_back(0x4B); IceTrapModels.push_back(0x4C); @@ -876,10 +878,10 @@ void GenerateItemPool() { IceTrapModels.push_back(0x4F); IceTrapModels.push_back(0x51); IceTrapModels.push_back(0x54); - //IceTrapModels.push_back(0x53); // should be song of time but not included yet + IceTrapModels.push_back(0x53); // should be song of time but not included yet //IceTrapModels.push_back(0xC6); }*/ - if (ShuffleRewards.Is(rnd::RewardShuffleSetting::REWARDSHUFFLE_ANYWHERE)) { + if (ShuffleRewards.Value() != 0) { //Push item ids for dungeon rewards IceTrapModels.push_back(0x55); IceTrapModels.push_back(0x56); @@ -943,8 +945,6 @@ void GenerateItemPool() { } else {PlaceItemInLocation(HMS_BOMBERS_NOTEBOOK, BOMBERS_NOTEBOOK);} - //ShuffleOcarina - //COWSANITY //if (ShuffleCows) { //8 total cows -- rather have junk than 8 extra milk refills @@ -995,29 +995,32 @@ void GenerateItemPool() { } //SONG SHUFFLE - //add extra songs only if song shuffle is anywhere - //if (ShuffleSongs.Is(SongShuffleSetting::SONGSHUFFLE_ANYWHERE)){ - // AddItemsToPool(ItemPool, songList); - //} - //else if (ShuffleSongs.Is(SongShuffleSetting::SONGSHUFFLE_ANYWHERE) && ItemPoolValue.Is(ItemPoolSetting::ITEMPOOL_PLENTIFUL)) { - // AddItemsToPool(PendingJunkPool, songList); - //} - //else { + //Add songs to pool if they're shuffled + if (ShuffleSongs.Value() != u8(0)) { + AddItemsToPool(ItemPool, songList); + //If Song of Time is shuffled add it to the pool + if (ShuffleSongOfTime) { + AddItemToMainPool(SONG_OF_TIME); + } + else { + PlaceItemInLocation(CLOCK_TOWER_SONG_OF_TIME, SONG_OF_TIME); + } + //If Soaring is shuffled add it to the pool + if (ShuffleSoaring) { + AddItemToMainPool(SONG_OF_SOARING); + } + else { + PlaceItemInLocation(SOUTHERN_SWAMP_MUSIC_STATUE, SONG_OF_SOARING); + } + } + else { PlaceVanillaSongs(); - //} + } + 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); } - - //if (ShuffleSoaring) - //{ - // AddItemToPool(ItemPool, SONG_OF_SOARING); - //} - //else { - PlaceItemInLocation(SOUTHERN_SWAMP_MUSIC_STATUE, SONG_OF_SOARING); - // } - //GREAT FAIRY SHUFFLE if(ShuffleGFRewards.Is((u8)GreatFairyRewardShuffleSetting::GFREWARDSHUFFLE_VANILLA)){ diff --git a/source/location_access.cpp b/source/location_access.cpp index e866fa4..edce9dd 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -591,7 +591,8 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(CLOCK_TOWER_OCARINA_OF_TIME, {[]{return true;}}), + LocationAccess(CLOCK_TOWER_OCARINA_OF_TIME, {[]{return CanUseProjectile;}}), + LocationAccess(CLOCK_TOWER_SONG_OF_TIME, {[]{return CanUseProjectile;}}), }, { //Exits @@ -2582,7 +2583,6 @@ void AreaTable_Init() { //Locations LocationAccess(GOHT, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), LocationAccess(GOHT_HEART_CONTAINER, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), - LocationAccess(GIANTS_OATH_TO_ORDER, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), }, { //Exits @@ -2824,7 +2824,6 @@ void AreaTable_Init() { //Locations LocationAccess(GYORG, {[]{return ZoraMask && MagicMeter && CanUseProjectile;}}), LocationAccess(GYORG_HEART_CONTAINER, {[]{return ZoraMask && MagicMeter && CanUseProjectile;}}), - LocationAccess(GIANTS_OATH_TO_ORDER, {[]{return ZoraMask && MagicMeter && CanUseProjectile;}}), }, { //Exits @@ -3149,7 +3148,6 @@ void AreaTable_Init() { LocationAccess(STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST, {[]{return CanUse(LIGHT_ARROWS) || CanUse(GIANTS_MASK);}}), LocationAccess(TWINMOLD, {[]{return CanUse(LIGHT_ARROWS) && CanUse(GIANTS_MASK);}}), LocationAccess(TWINMOLD_HEART_CONTAINER, {[]{return CanUse(LIGHT_ARROWS) && CanUse(GIANTS_MASK);}}), - LocationAccess(GIANTS_OATH_TO_ORDER, {[]{return CanUse(LIGHT_ARROWS) && CanUse(GIANTS_MASK);}}), }, { //Exits diff --git a/source/logic.cpp b/source/logic.cpp index b9cc420..1faf094 100644 --- a/source/logic.cpp +++ b/source/logic.cpp @@ -119,6 +119,7 @@ namespace Logic { bool LetterMamaAccess = false; bool MoonsTearAccess = false; //Songs + bool SongOfTime = false; bool ScarecrowSong = false; bool SongOfStorms = false; bool SonataOfAwakening = false; diff --git a/source/setting_descriptions.cpp b/source/setting_descriptions.cpp index 2cecb53..c1143e2 100644 --- a/source/setting_descriptions.cpp +++ b/source/setting_descriptions.cpp @@ -279,19 +279,17 @@ string_view startingSpinDesc = "**OPTION CURRENTLY WIP**\n" /*------------------------------ // | SONG SHUFFLE | // ------------------------------*/ // -string_view songsSongLocations = "**OPTION CURRENTLY WIP**\n" // - "Songs will only appear at locations that normally\n" +string_view songsSongLocations = "Songs will only appear at locations that normally\n" "teach songs."; // -string_view songsDungeonRewards = "**OPTION CURRENTLY WIP**\n" // - "Songs appear at the end of dungeons. For major\n" // +string_view songsDungeonRewards = "Songs appear at the end of dungeons. For major\n" // "dungeons, they will be at the boss heart container" "location. "; // -string_view songsAllLocations = "**OPTION CURRENTLY WIP**\n" // - "Songs can appear in any location."; // - // +string_view songsAllLocations = "Songs can appear in any location."; // +string_view songsVanilla = "Songs will not be randomized"; // string_view shuffleSoaringVanilla = "Sets Song of Soaring to its Vanilla Location"; // -string_view shuffleSoaringRandom = "**OPTION CURRENTLY WIP**\n" // - "Randomizes Song of Soaring"; // +string_view shuffleSoaringRandom = "Randomizes Song of Soaring"; // +string_view songTimeVanilla = "Sets Song of Time to its Vanilla Location"; // +string_view songTimeRandom = "Randomizes Song of Time"; // /*------------------------------ // | GOSSIP STONE HINTS | // ------------------------------*/ // diff --git a/source/settings.cpp b/source/settings.cpp index 72b1ff4..a217fa8 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -140,6 +140,8 @@ namespace Settings { Option StartingElegyOfEmptiness = Option::U8("Elegy of Emptiness", { "None", "Elegy of Emptiness" }, { "" }); Option StartingSongOfHealing = Option::U8("Song of Healing", { "None", "Song of Healing" }, { "" }, OptionCategory::Setting); Option StartingSongOfSoaring = Option::U8("Song of Soaring", { "None", "Song of Soaring" }, { "" }); + Option StartingSongOfTime = Option::U8("Song of Time", { "None", "Song of Time" }, { "" }); + Option StartingGoronIntro = Option::U8("Goron Lullaby Intro", { "None", "Lullaby Intro" }, { "" }); Option StartingUpgradesToggle = Option::U8("Equipment & Upgrades", { "All Off", "All On", "Choose" }, { "" }); Option StartingKokiriSword = Option::U8("Sword", { "Kokiri Sword", "Razor Sword", "Gilded Sword", "None" }, { "" }, OptionCategory::Setting, (u8)StartingSwordSetting::STARTINGSWORD_KOKIRI);//1U = StartingSwordSetting::STARTINGSWORD_KOKIRI Option StartingGreatFairySword = Option::U8("Great Fairy Sword", { "None", "G. F. S." }, { "" }); @@ -248,10 +250,12 @@ namespace Settings { }; std::vector startingInventorySongs = { + &StartingSongOfTime, &StartingOathToOrder, &StartingEponasSong, &StartingSongOfStorms, &StartingSonataOfAwakening, + &StartingGoronIntro, &StartingGoronsLullaby, &StartingNewWaveBossaNova, &StartingElegyOfEmptiness, @@ -290,8 +294,9 @@ namespace Settings { Option ShuffleMasks = Option::Bool("Shuffle Masks", {"Off", "On"}, {shuffleMasksVanilla, shuffleMasksRandom}, OptionCategory::Toggle, 1); Option ShuffleTransformation = Option::Bool("Shuffle Transformation",{"Off", "On"}, {shuffleTransformationDesc}); Option ShufflePiecesOfHeart = Option::Bool("Shuffle Piece of Heart",{"Off", "On"}, {shufflePiecesOfHeartDesc }, OptionCategory::Toggle, 1); - Option ShuffleSongs = Option::U8 ("Shuffle Songs", {"Off", "Dungeon Rewards", "Anywhere"}, {songsSongLocations, songsDungeonRewards, songsAllLocations}, OptionCategory::Setting, (u8)SongShuffleSetting::SONGSHUFFLE_SONG_LOCATIONS); - Option ShuffleSoaring = Option::Bool("Shuffle SoS", {"Off", "On"}, {shuffleSoaringVanilla, shuffleSoaringRandom}); + Option ShuffleSongs = Option::U8 ("Shuffle Songs", {"Off", "Song Locations", "Anywhere"}, {songsVanilla, songsSongLocations, songsAllLocations}, OptionCategory::Setting, 0); + Option ShuffleSoaring = Option::Bool("Shuffle Song of Soaring",{"Off", "On"}, {shuffleSoaringVanilla, shuffleSoaringRandom}, OptionCategory::Setting, 0); + Option ShuffleSongOfTime = Option::Bool("Shuffle Song of Time", {"Off", "On"}, {songTimeVanilla, songTimeRandom}, OptionCategory::Setting, 0); Option Shopsanity = Option::U8 ("Shopsanity", {"Off", "0", "1", "2", "3", "4", "Random"}, {shopsOff, shopsZero, shopsOne, shopsTwo, shopsThree, shopsFour, shopsRandom}); Option Tokensanity = Option::Bool("Tokensanity", {"Off", "On"}, {tokensOff, tokensAllTokens}); Option Scrubsanity = Option::U8 ("Shuffle Scrub Wares", {"Off", "Affordable", "Expensive", "Random Prices"}, {scrubsOff, scrubsAffordable, scrubsExpensive, scrubsRandomPrices}); @@ -312,8 +317,9 @@ namespace Settings { &ShuffleMasks, &ShuffleTransformation, &ShufflePiecesOfHeart, - //&ShuffleSongs, - //&ShuffleSoaring, + &ShuffleSongs, + &ShuffleSoaring, + &ShuffleSongOfTime, //&Shopsanity, &Tokensanity, &ShuffleMerchants, @@ -777,6 +783,8 @@ namespace Settings { ctx.startingElegyOfEmptiness = StartingElegyOfEmptiness.Value(); ctx.startingSongOfSoaring = StartingSongOfSoaring.Value(); ctx.startingSongOfHealing = StartingSongOfHealing.Value(); + ctx.startingSongOfTime = StartingSongOfTime.Value(); + ctx.startingGoronIntro = StartingGoronIntro.Value(); //Upgrades ctx.startingKokiriSword = StartingKokiriSword.Value(); ctx.startingShield = StartingShield.Value(); @@ -1162,15 +1170,18 @@ namespace Settings { //Force include song locations std::vector songLocations = GetLocations(everyPossibleLocation, Category::cSong); //Unhide all song locations, then lock necessary ones - //Unhide(songLocations); - - //if (ShuffleSongs.Is((u8)SongShuffleSetting::SONGSHUFFLE_SONG_LOCATIONS)) { - // IncludeAndHide(songLocations); - // } - //else if (ShuffleSongs.Is((u8)SongShuffleSetting::SONGSHUFFLE_DUNGEON_REWARDS)) { + if (ShuffleSongs.Value() == 0) { IncludeAndHide(songLocations); - //} - + } + else { + Unhide(songLocations); + } + if (!ShuffleSoaring) { + IncludeAndHide({SOUTHERN_SWAMP_MUSIC_STATUE}); + } + if (!ShuffleSongOfTime) { + IncludeAndHide({CLOCK_TOWER_SONG_OF_TIME}); + } //Force Include Dungeon Rewards std::vector DungeonRewards = GetLocations(everyPossibleLocation, Category::cDungeonReward); if (ShuffleRewards.Is((u8)RewardShuffleSetting::REWARDSHUFFLE_END_OF_DUNGEON)) { @@ -1569,6 +1580,29 @@ namespace Settings { LanguageSelect.Hide(); LanguageSelect.SetSelectedIndex(LANGUAGE_NONE); } + + //Show or Hide Shuffle Song of Soaring / Song of Time if Song Shuffle is on / off + if (ShuffleSongs.Value() == u8(0)) { + ShuffleSoaring.Hide(); + ShuffleSongOfTime.Hide(); + } + else { + ShuffleSoaring.Unhide(); + ShuffleSoaring.Unlock(); + ShuffleSongOfTime.Unhide(); + ShuffleSongOfTime.Unlock(); + } + //if starting with Song of Soaring or Song of Time set settings to Vanilla and hide and lock + if (StartingSongOfSoaring.Value() == u8(1)) { + ShuffleSoaring.SetSelectedIndex(0); + ShuffleSoaring.Hide(); + ShuffleSoaring.Lock(); + } + if (StartingSongOfTime.Value() == u8(1)) { + ShuffleSongOfTime.SetSelectedIndex(0); + ShuffleSongOfTime.Hide(); + ShuffleSongOfTime.Lock(); + } ResolveExcludedLocationConflicts(); } @@ -1686,7 +1720,6 @@ namespace Settings { //If vanilla logic, we want to set all settings which unnecessarily modify vanilla behavior to off if (Logic.Is((u8)LogicSetting::LOGIC_VANILLA)) { ShuffleSongs.SetSelectedIndex(0); - ShuffleSoaring.SetSelectedIndex(0); Shopsanity.SetSelectedIndex(0); Tokensanity.SetSelectedIndex(0); ShuffleCows.SetSelectedIndex(0); diff --git a/source/spoiler_log.cpp b/source/spoiler_log.cpp index 31825bf..68f9f74 100644 --- a/source/spoiler_log.cpp +++ b/source/spoiler_log.cpp @@ -213,9 +213,15 @@ static void WriteIngameSpoilerLog() { continue; } // Songs - if ((Settings::ShuffleSongs.Is(SongShuffleSetting::SONGSHUFFLE_SONG_LOCATIONS)) && Location(key)->IsCategory(Category::cSong)) { + if ((Settings::ShuffleSongs.Value() == u8(0)) && Location(key)->IsCategory(Category::cSong)) { continue; } + //if ((!Settings::ShuffleSongOfTime) && Location(key)->IsCategory(Category::cSong)) { + // continue; + //} + //if ((!Settings::ShuffleSoaring) && Location(key)->IsCategory(Category::cSong)) { + // continue; + //} // Tingle Maps if (!Settings::ShuffleTingleMaps && Location(key)->IsCategory(Category::cTingleMap)) { continue;