From 94c7e8f41a2ff80c1d845f03dc713649e76cefaf Mon Sep 17 00:00:00 2001 From: Nessy Date: Thu, 25 Jan 2024 22:56:39 +0000 Subject: [PATCH 1/4] Fix logic (#29) * Create locale.txt when generating for console * Logic fixes --- source/dungeon.cpp | 4 ++++ source/fill.cpp | 11 ++++++----- source/item_location.cpp | 7 ++++++- source/item_pool.cpp | 1 + source/location_access.cpp | 38 +++++++++++++++++++------------------- source/logic.cpp | 2 +- 6 files changed, 37 insertions(+), 26 deletions(-) diff --git a/source/dungeon.cpp b/source/dungeon.cpp index 001e593..dcf09e7 100644 --- a/source/dungeon.cpp +++ b/source/dungeon.cpp @@ -352,6 +352,10 @@ std::vector DungeonInfo::GetEveryLocation() const { PF_INT_UPPER_CHEST, PF_INT_TANK_CHEST, PF_INT_INVISIBLE_SOLDIER, + PF_INT_HOOKSHOT_ROOM_ZORA_EGG, + PF_INT_GUARD_ROOM_ZORA_EGG, + PF_INT_BARREL_MAZE_ZORA_EGG, + PF_INT_LAVA_ROOM_ZORA_EGG, },{} ); DungeonInfo BeneathTheWell = DungeonInfo("Beneath The Well", NONE, NONE, NONE, NONE, 0, { diff --git a/source/fill.cpp b/source/fill.cpp index b50b254..5fcc221 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -132,7 +132,7 @@ std::vector GetAccessibleLocations(const std::vector& //if the exit is accessable and hasn't been added yet, add it to pool Area* exitArea = exit.GetConnectedRegion(); - if (!exitArea->addedToPool && exit.ConditionsMet()) { + if (!exitArea->addedToPool && exit.GetConditionsMet()) { exitArea->addedToPool = true; areaPool.push_back(exit.GetAreaKey()); //PlacementLog_Msg("Added :" + exitArea->regionName + " to the pool \n"); @@ -156,7 +156,7 @@ std::vector GetAccessibleLocations(const std::vector& LocationKey loc = locPair.GetLocation(); ItemLocation* location = Location(loc); - if ((!location->IsAddedToPool()) && (locPair.ConditionsMet())) { + if ((!location->IsAddedToPool()) && (locPair.GetConditionsMet())) { location->AddToPool(); @@ -195,7 +195,7 @@ std::vector GetAccessibleLocations(const std::vector& } } //MAJORA'S_MASK has been found, seed is beatable, nothing else in this or future spheres matters - else if (location->GetPlacedItemKey() == MAJORAS_MASK) { + if (location->GetPlacedItemKey() == MAJORAS_MASK) { CitraPrint("Majoras Mask has been found!"); itemSphere.clear(); itemSphere.push_back(loc); @@ -878,7 +878,7 @@ int Fill() { GeneratePlaythrough(); //TODO::FIX PLAYTHROUGH //Successful placement, produced beatable result - if (!placementFailure ) {//&& playthroughBeatable + if (!placementFailure && playthroughBeatable ) { printf("Done"); printf("\x1b[9;10HCalculating Playthrough..."); PareDownPlaythrough(); @@ -902,7 +902,8 @@ int Fill() { } //Unsuccessful placement if (retries < 4) { - GetAccessibleLocations(allLocations, SearchMode::AllLocationsReachable); + //LogicReset(); + //GetAccessibleLocations(allLocations, SearchMode::AllLocationsReachable); printf("\x1b[9;10HFailed. Retrying... %d", retries + 2); CitraPrint("Failed. Retrying..."); Areas::ResetAllLocations(); diff --git a/source/item_location.cpp b/source/item_location.cpp index 95ba12e..2b3f3c7 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -1111,7 +1111,7 @@ std::vector GetLocations(const std::vector& locationPo } void LocationReset() { - for (LocationKey il : allLocations) { +/*for (LocationKey il : allLocations) { Location(il)->RemoveFromPool(); } @@ -1121,6 +1121,11 @@ void LocationReset() { for (LocationKey il : gossipStoneLocations) { Location(il)->RemoveFromPool(); + }*/ + + // Something's still missing from allLocations, IDK what though and this fixes it + for (LocationKey il = LINKS_POCKET; il <= OSH_COLORED_SKULLS_POT; il++) { + Location(il)->RemoveFromPool(); } //Location(GANONDORF_HINT)->RemoveFromPool(); diff --git a/source/item_pool.cpp b/source/item_pool.cpp index 755b863..9091a42 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -491,6 +491,7 @@ std::array zoraEggs = { ZORA_EGG, ZORA_EGG, ZORA_EGG, + ZORA_EGG, }; std::array tingleMaps = { diff --git a/source/location_access.cpp b/source/location_access.cpp index 495fa0e..0f2d023 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -166,7 +166,7 @@ bool Area::CheckAllAccess(const AreaKey exitKey) { for(Entrance& exit: exits) { if(exit.GetAreaKey() == exitKey) { - exit.ConditionsMet(); + exit.GetConditionsMet(); } } return false; @@ -229,8 +229,8 @@ void AreaTable_Init() { LocationAccess(N_CLOCK_TOWN_KEATON_QUIZ, {[] {return KeatonMask;}}), LocationAccess(N_CLOCK_TOWN_TREE, {[] {return true;}}), LocationAccess(N_CLOCK_TOWN_OLD_LADY, {[] {return Fighting || Bow;}}), - LocationAccess(TINGLE_N_CLOCK_TOWN_CT, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), - LocationAccess(TINGLE_N_CLOCK_TOWN_WF, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), + LocationAccess(TINGLE_N_CLOCK_TOWN_CT, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_N_CLOCK_TOWN_WF, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), LocationAccess(N_CLOCK_TOWN_POSTBOX, {[]{return PostmansHat;}}), }, @@ -328,7 +328,7 @@ void AreaTable_Init() { { //Locations LocationAccess(STOCKPOTINN_MIDNIGHT_MEETING, {[] {return KafeisMask && (DekuMask || RoomKey);}}), - LocationAccess(STOCKPOTINN_ANJU_AND_KAFEI, {[] {return KafeisMask && LetterKafei && PendantOfMemories && SunMask;}}), + LocationAccess(STOCKPOTINN_ANJU_AND_KAFEI, {[] {return KafeisMask && LetterKafei && PendantAccess && SunMask;}}), LocationAccess(STOCKPOTINN_STAFF_ROOM_CHEST, {[] {return true;}}),//Day 3? }, { @@ -769,8 +769,8 @@ void AreaTable_Init() { { //Locations LocationAccess(ROAD_TO_SS_TREE, {[] {return DekuMask && (MagicMeter || Bow || Hookshot || ZoraMask);}}),//something to kill the dragonfly - LocationAccess(TINGLE_ROAD_TO_SS_WF, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), - LocationAccess(TINGLE_ROAD_TO_SS_SH, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), + LocationAccess(TINGLE_ROAD_TO_SS_WF, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_ROAD_TO_SS_SH, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), //Gossip Stones LocationAccess(ROAD_TO_SS_GOSSIP, {[] {return true;}}), }, @@ -1086,10 +1086,10 @@ void AreaTable_Init() { //Locations LocationAccess(TWIN_ISLANDS_UNDERWATER_RAMP_CHEST, {[] {return SnowheadClear && ZoraMask;}}), LocationAccess(TWIN_ISLANDS_CAVE_CHEST, {[] {return SnowheadClear && ZoraMask;}}), - LocationAccess(TINGLE_TWIN_ISLANDS_SH, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), - LocationAccess(TINGLE_TWIN_ISLANDS_RR, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), - LocationAccess(TINGLE_TWIN_ISLANDS_SH_SPRING, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), - LocationAccess(TINGLE_TWIN_ISLANDS_RR_SPRING, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), + LocationAccess(TINGLE_TWIN_ISLANDS_SH, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_TWIN_ISLANDS_RR, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_TWIN_ISLANDS_SH_SPRING, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_TWIN_ISLANDS_RR_SPRING, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), }, { //Exits @@ -1257,8 +1257,8 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(TINGLE_MILK_ROAD_RR, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), - LocationAccess(TINGLE_MILK_ROAD_GB, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), + LocationAccess(TINGLE_MILK_ROAD_RR, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_MILK_ROAD_GB, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), LocationAccess(MILK_ROAD_KEATON_QUIZ, {[] {return KeatonMask;}}), //Gossip Stones LocationAccess(MR_GOSSIP, {[] {return true;}}), @@ -1369,8 +1369,8 @@ void AreaTable_Init() { LocationAccess(GBC_FISHERMAN_GAME, {[] {return GreatBayClear && Hookshot;}}), LocationAccess(GBC_LEDGE, {[] {return Hookshot && MagicBean && AnyBottle;}}), LocationAccess(GBC_MIKAU, {[] {return CanPlay(SongOfHealing);}}), - LocationAccess(TINGLE_GBC_GB, {[]{ return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), - LocationAccess(TINGLE_GBC_ST, {[]{ return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), + LocationAccess(TINGLE_GBC_GB, {[]{ return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_GBC_ST, {[]{ return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), //Gossip Stones LocationAccess(GBC_BENEATH_COW_GROTTO_GOSSIP, {[] {return true;}}), LocationAccess(GBC_OUTSIDE_FORTRESS_GOSSIP, {[] {return true;}}), @@ -1758,7 +1758,7 @@ void AreaTable_Init() { areaTable[IKANA_CANYON] = Area("Lower Ikana Canyon", "Lower Ikana Canyon", IKANA_CANYON, { //Events - EventAccess(&EnterSakonHideout, {[]{return LetterKafei && PendantOfMemories && KafeisMask;}}),//probably missing a req + EventAccess(&EnterSakonHideout, {[]{return LetterKafei && PendantAccess && KafeisMask;}}),//probably missing a req }, { //Locations @@ -1773,7 +1773,7 @@ void AreaTable_Init() { //Exits Entrance(ROAD_TO_IKANA, {[]{return true;}}), Entrance(SAKONS_HIDEOUT, {[]{return EnterSakonHideout;}}), - Entrance(SECRET_SHRINE, {[]{return true;}}), //slow swim but don't NEED zora mask + Entrance(SECRET_SHRINE_ENTRANCE, {[]{return true;}}), //slow swim but don't NEED zora mask Entrance(IKANA_CANYON_SECRET_SHRINE_GROTTO, {[]{return true;}}), Entrance(SOUTHERN_SWAMP, {[]{return true;}}),//end of river Entrance(IKANA_CANYON_UPPER, {[]{return IceArrows && MagicMeter && Bow && Hookshot;}}), @@ -1784,8 +1784,8 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(TINGLE_IKANA_CANYON_ST, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), - LocationAccess(TINGLE_IKANA_CANYON_CT, {[]{return (ProgressiveMagic = 0) || ( (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask );}}), + LocationAccess(TINGLE_IKANA_CANYON_ST, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_IKANA_CANYON_CT, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), //Gossip Stones LocationAccess(IC_SPIRIT_HOUSE_GOSSIP, {[] {return true;}}), }, @@ -2628,7 +2628,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(GBT_SF_WATERWHEEL_ROOM_LOWER, {[] {return Hookshot && ZoraMask && GBTReverseWaterDirection;}}), + LocationAccess(GBT_SF_WATERWHEEL_ROOM_LOWER, {[] {return Hookshot && ZoraMask && ReverseWaterFlow;}}), LocationAccess(GBT_SF_WATERWHEEL_ROOM_UPPER, {[] {return ZoraMask && Hookshot && Bow && MagicMeter && IceArrows;}}), }, { diff --git a/source/logic.cpp b/source/logic.cpp index bec57e3..f86f36e 100644 --- a/source/logic.cpp +++ b/source/logic.cpp @@ -428,7 +428,7 @@ namespace Logic { } bool TotalHeartContainers(u8 requiredAmount) { - return (HeartContainers + (PiecesOfHeart/4) >= requiredAmount); + return (HeartContainers + (PiecesOfHeart/4) + 3 >= requiredAmount); } u8 TotalMaskCount() { From d5f44ddc0ad52d98e020d7cad94fc5d2de0d32f9 Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Thu, 25 Jan 2024 17:00:39 -0600 Subject: [PATCH 2/4] Update subrepo to include all basepatch changes. (#27) Update unistore to include new icons. --- .github/workflows/create-build.yml | 2 +- Z3DR | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/create-build.yml b/.github/workflows/create-build.yml index f623c96..cf698a9 100644 --- a/.github/workflows/create-build.yml +++ b/.github/workflows/create-build.yml @@ -385,7 +385,7 @@ jobs: "url": "https://phlexplexi.co/unistore", "file": "MM3DR.unistore", "sheetURL": "https://phlexplexi.co/icon.t3x", - "sheet": "MM3DR.t3x", + "sheet": "icon.t3x", "bg_index": 1, "bg_sheet": 0, "revision": , diff --git a/Z3DR b/Z3DR index 3999ba0..5901797 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 3999ba08be9fd83ef05333cdf34fefb35c953f94 +Subproject commit 590179745d35a2c7962357f4ff4055a2bd0dcfa9 From d2e113e20a5ad385747cf015affe822676bbc8dc Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Fri, 26 Jan 2024 07:30:21 -0600 Subject: [PATCH 3/4] Logic Fixes (#30) * Logic Fixes -Removes West Clock Town Postbox as it doesnt exist lol - Adds/Adjusts Goron Village checks to account for checks in Spring time - Adjusts several locations' repeatable variable to prevent softlocks - Adjusts Gilded Sword flag value to fix override - Adjusts Great Bay Lab Fish HP flag value to fix override - Adjusts Cremia Escort's Scene to fix override - Adjusts SPI Guest Room requirements from GoronMask to RoomKey as it should be - Adjusts Bomb Shop Goron to require PowderKeg as he wont sell until you obtain the first one - Adjusts Dog Race to require MaskOfTruth to prevent RNG annoyance - Adjusts description of SkipBombersMinigame to reflect new value of 12345 instead of 11111 - Adjusts description of Vanilla Logic to remove erronious leftover text from OOT3DR - Adds hint locations to new Goron Village Spring locations so it doesnt break if the randomzier decides to hint those locations * Update custom_messages.cpp ow * Remove empty ZAR generation. Bump version to 1.1 --------- Co-authored-by: Phlex --- source/custom_messages.cpp | 2 +- source/hint_list.cpp | 5 ++- source/include/keys.hpp | 5 ++- source/include/version.hpp | 2 +- source/item_location.cpp | 65 ++++++++++++++++++++------------- source/item_pool.cpp | 7 +++- source/location_access.cpp | 12 +++--- source/patch.cpp | 4 +- source/setting_descriptions.cpp | 8 ++-- 9 files changed, 69 insertions(+), 41 deletions(-) diff --git a/source/custom_messages.cpp b/source/custom_messages.cpp index 7bda899..01d9936 100644 --- a/source/custom_messages.cpp +++ b/source/custom_messages.cpp @@ -133,7 +133,7 @@ void CreateBaselineCustomMessages() { // Great Bay CreateMessage(0x6141, 0xFFFF, 0x3FFFFFFF, 0xFF0000, - "You got the #boss key# for the #Great Bay Temple#! ow you can enter the chamber where the boss lurks!", + "You got the #boss key# for the #Great Bay Temple#! Now you can enter the chamber where the boss lurks!", {QM_GREEN, QM_RED}, {}, {}, 0x0, false, false); // Stone Tower diff --git a/source/hint_list.cpp b/source/hint_list.cpp index 59bde4d..f94def9 100644 --- a/source/hint_list.cpp +++ b/source/hint_list.cpp @@ -272,6 +272,10 @@ void HintTable_Init() { hintTable[GORON_VILLAGE_LENS_OF_TRUTH_CHEST] = HintText::Sometimes({ Text{"a lonely peak contains", "", ""}}); hintTable[GORON_VILLAGE_SCRUB_TRADE] = HintText::Sometimes({ Text{"a northern merchant trades", "", ""}}); hintTable[GORON_VILLAGE_LEDGE] = HintText::Sometimes({ Text{"a cold ledge contains", "", ""}}); + hintTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING] = HintText::Sometimes({ Text{"a large goron rewards", "", ""}}); + hintTable[GORON_VILLAGE_SCRUB_PURCHASE_SPRING] = HintText::Sometimes({ Text{"a northern merchant sells", "", ""}}); + hintTable[GORON_VILLAGE_SCRUB_TRADE_SPRING] = HintText::Sometimes({ Text{"a northern merchant trades", "", ""}}); + hintTable[GORON_VILLAGE_LEDGE_SPRING] = HintText::Sometimes({ Text{"a cold ledge contains", "", ""}}); hintTable[GORON_VILLAGE_GORON_LULLABY] = HintText::Sometimes({ Text{"a lonely child teaches", "", ""}}); hintTable[LENS_CAVE_RED_RUPEE] = HintText::Sometimes({ Text{"a lonely peak contains", "", ""}}); hintTable[LENS_CAVE_PURPLE_RUPEE] = HintText::Sometimes({ Text{"a lonely peak contains", "", ""}}); @@ -448,7 +452,6 @@ void HintTable_Init() { hintTable[W_CLOCK_TOWN_SWORDSMANS_SCHOOL] = HintText::Sometimes({Text{"a town game rewards", "", ""}}); hintTable[W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY] = HintText::Sometimes({Text{"a shady town merchant sells", "", ""}}); hintTable[W_CLOCK_TOWN_BOMB_SHOP_GORON] = HintText::Sometimes({Text{"a town goron merchant sells", "", ""}}); - hintTable[W_CLOCK_TOWN_POSTBOX] = HintText::Sometimes({Text{"a correspondence box contains", "", ""}}); //hintTable[W_CLOCK_TOWN_LOTTERY] = HintText::Sometimes({Text{"", "", ""}}); hintTable[TRADING_POST_ITEM_1] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); hintTable[TRADING_POST_ITEM_2] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); diff --git a/source/include/keys.hpp b/source/include/keys.hpp index 5339e28..157bbb3 100644 --- a/source/include/keys.hpp +++ b/source/include/keys.hpp @@ -281,6 +281,10 @@ typedef enum { GORON_VILLAGE_LEDGE, LENS_CAVE_RED_RUPEE, LENS_CAVE_PURPLE_RUPEE, + GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, + GORON_VILLAGE_SCRUB_PURCHASE_SPRING, + GORON_VILLAGE_SCRUB_TRADE_SPRING, + GORON_VILLAGE_LEDGE_SPRING, GORON_SHOP_ITEM_1, GORON_SHOP_ITEM_2, GORON_SHOP_ITEM_3, @@ -455,7 +459,6 @@ typedef enum { W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY, W_CLOCK_TOWN_LOTTERY, W_CLOCK_TOWN_BOMB_SHOP_GORON, - W_CLOCK_TOWN_POSTBOX, TRADING_POST_ITEM_1, TRADING_POST_ITEM_2, TRADING_POST_ITEM_3, diff --git a/source/include/version.hpp b/source/include/version.hpp index c5c51ac..ffc6bb4 100644 --- a/source/include/version.hpp +++ b/source/include/version.hpp @@ -1,4 +1,4 @@ #pragma once -#define RANDOMIZER_VERSION "v1.0.1" +#define RANDOMIZER_VERSION "v1.1" #define COMMIT_NUMBER "develop" diff --git a/source/item_location.cpp b/source/item_location.cpp index 2b3f3c7..cb61ec3 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -35,8 +35,8 @@ void LocationTable_Init() { 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}, 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 }, 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}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_ARCHERY_2] = ItemLocation::Base (0x20, 0x0C, true, "ECT Archery #2", E_CLOCK_TOWN_ARCHERY_2, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_HONEY_DARLING_3DAYS] = ItemLocation::Base (0x11, 0x0C, true, "ECT Honey and Darling 3 Days", E_CLOCK_TOWN_HONEY_DARLING_3DAYS, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayThree}, 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}, 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}, 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}, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); locationTable[E_CLOCK_TOWN_POSTMAN_FREEDOM] = ItemLocation::Base (0x6C, 0x84, true, "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 ); @@ -52,27 +52,31 @@ void LocationTable_Init() { locationTable[E_CLOCK_TOWN_POSTBOX] = ItemLocation::Base (0x6C, 0xBA, false, "ECT Postbox", E_CLOCK_TOWN_POSTBOX, PIECE_OF_HEART, {Category::cEastClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); //Goron Village - locationTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE] = ItemLocation::Base (0x48, 0x34, true, "GV Powder Keg Challenge", GORON_VILLAGE_POWDER_KEG_CHALLENGE, POWDER_KEG, {Category::cGoronVillage,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_SCRUB_PURCHASE] = ItemLocation::Base (0x3D, 0x1D, false, "GV Scrub Purchase", GORON_VILLAGE_SCRUB_PURCHASE, PROGRESSIVE_BOMB_BAG, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_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}, 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}, 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 }, 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}, 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}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[GORON_VILLAGE_GORON_LULLABY] = ItemLocation::Base (0x32, 0x4D, false, "GV Goron Lullaby", GORON_VILLAGE_GORON_LULLABY, GORONS_LULLABY, {Category::cGoronVillage, Category::cSong,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[LENS_CAVE_RED_RUPEE] = ItemLocation::Chest (0x07, 0x03, true, "GV Lens Cave Invisible Chest", LENS_CAVE_RED_RUPEE, RED_RUPEE, {Category::cGoronVillage,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); locationTable[LENS_CAVE_PURPLE_RUPEE] = ItemLocation::Chest (0x07, 0x06, true, "GV Lens Cave Rock Chest", LENS_CAVE_PURPLE_RUPEE, PURPLE_RUPEE, {Category::cGoronVillage,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - + locationTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING] = ItemLocation::Base (0x48, 0x34, false, "GV Powder Keg Challenge (Spring)", GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, POWDER_KEG, {Category::cGoronVillage,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_SCRUB_PURCHASE_SPRING] = ItemLocation::Base (0x48, 0x1D, false, "GV Scrub Purchase (Spring)", GORON_VILLAGE_SCRUB_PURCHASE_SPRING, PROGRESSIVE_BOMB_BAG, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_SCRUB_TRADE_SPRING] = ItemLocation::Base (0x48, 0x99, true, "GV Deku Scrub Merchant Trade (Spring)", GORON_VILLAGE_SCRUB_TRADE_SPRING, MOUNTAIN_TITLE, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_LEDGE_SPRING] = ItemLocation::Collectable(0x48, 0x00, false, "GV Piece of Heart (Spring)", GORON_VILLAGE_LEDGE_SPRING, PIECE_OF_HEART, {Category::cGoronVillage, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + //Great Bay Coast locationTable[GBC_OCEAN_SPIDER_DAY1] = ItemLocation::Base (0x28, 0x48, false, "OSH Day 1 Reward", GBC_OCEAN_SPIDER_DAY1, PROGRESSIVE_WALLET, {Category::cGreatBayCoast ,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); //locationTable[GBC_OCEAN_SPIDER_DAY2] = ItemLocation::Base (0x28, 0x00, true, "OSH Day 2 Reward", GBC_OCEAN_SPIDER_DAY2, PURPLE_RUPEE, {Category::cGreatBayCoast ,Category::cDayTwo}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); //locationTable[GBC_OCEAN_SPIDER_DAY3] = ItemLocation::Base (0x28, 0x00, true, "OSH Day 3 Reward", GBC_OCEAN_SPIDER_DAY3, RED_RUPEE, {Category::cGreatBayCoast,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); locationTable[GBC_FISHERMAN_GAME] = ItemLocation::Base (0x37, 0x06, false, "GBC Fisherman's Game", GBC_FISHERMAN_GAME, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); locationTable[GBC_OCEAN_SPIDER_CHEST] = ItemLocation::Chest (0x28, 0x00, false, "OSH Chest", GBC_OCEAN_SPIDER_CHEST, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece ,Category::cDayOne,Category::cChest}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); - locationTable[GBC_LAB_FISH] = ItemLocation::Collectable(0x2F, 0x00, false, "GBC Marine Lab Fish HP", GBC_LAB_FISH, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); + locationTable[GBC_LAB_FISH] = ItemLocation::Collectable(0x2F, 0x0A, false, "GBC Marine Lab Fish HP", GBC_LAB_FISH, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); locationTable[GBC_LEDGE] = ItemLocation::Collectable(0x37, 0x00, false, "GBC Ledge", GBC_LEDGE, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); locationTable[GBC_MIKAU] = ItemLocation::Base (0x37, 0x7A, false, "GBC Mikau", GBC_MIKAU, ZORA_MASK, {Category::cGreatBayCoast, Category::cTransformMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); locationTable[GBC_BABY_ZORAS] = ItemLocation::Base (0x2F, 0x4E, false, "GBC Marine Lab Baby Zoras", GBC_BABY_ZORAS, NEW_WAVE_BOSSA_NOVA, {Category::cGreatBayCoast, Category::cSong,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); locationTable[GBC_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x17, true, "GBC Grotto Chest", GREAT_BAY_COAST_GROTTO, RED_RUPEE, {Category::cGreatBayCoast,Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); - locationTable[GBC_FISHERMAN_PHOTO] = ItemLocation::Base (0x3C, 0x95, true, "GBC Fisherman Photo", GBC_FISHERMAN_PHOTO, SEAHORSE, {Category::cGreatBayCoast,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); + locationTable[GBC_FISHERMAN_PHOTO] = ItemLocation::Base (0x3C, 0x95, false, "GBC Fisherman Photo", GBC_FISHERMAN_PHOTO, SEAHORSE, {Category::cGreatBayCoast,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); //Ikana Canyon locationTable[IKANA_CANYON_GREAT_FAIRY] = ItemLocation::Base (0x26, 0x3B, false, "IC Great Fairy", IKANA_CANYON_GREAT_FAIRY, GREAT_FAIRYS_SWORD, {Category::cIkanaCanyon,Category::cDayOne, Category::cFairyFountain}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); @@ -105,7 +109,7 @@ void LocationTable_Init() { //Mountain Village locationTable[MOUNTAIN_VILLAGE_SMITH_DAY_ONE] = ItemLocation::Base (0x2C, 0x4A, false, "MV Smith Day 1", MOUNTAIN_VILLAGE_SMITH_DAY_ONE, RAZOR_SWORD, {Category::cMountainVillage,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); - locationTable[MOUNTAIN_VILLAGE_SMITH_DAY_TWO] = ItemLocation::Base (0x2C, 0x4A, false, "MV Smith Day 2", MOUNTAIN_VILLAGE_SMITH_DAY_TWO, GILDED_SWORD, {Category::cMountainVillage,Category::cDayTwo}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); + locationTable[MOUNTAIN_VILLAGE_SMITH_DAY_TWO] = ItemLocation::Base (0x2C, 0x39, false, "MV Smith Day 2", MOUNTAIN_VILLAGE_SMITH_DAY_TWO, GILDED_SWORD, {Category::cMountainVillage,Category::cDayTwo}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); locationTable[MOUNTAIN_VILLAGE_FROG_CHOIR] = ItemLocation::Base (0x5A, 0x0C, false, "MV Frog Choir", MOUNTAIN_VILLAGE_FROG_CHOIR, PIECE_OF_HEART, {Category::cMountainVillage, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); locationTable[MOUNTAIN_VILLAGE_DARMANI] = ItemLocation::Base (0x4E, 0x79, false, "MV Graveyard Darmani", MOUNTAIN_VILLAGE_DARMANI, GORON_MASK, {Category::cMountainVillage, Category::cTransformMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); locationTable[MOUNTAIN_VILLAGE_HUNGRY_GORON] = ItemLocation::Base (0x50, 0x88, false, "MV Hungry Goron", MOUNTAIN_VILLAGE_HUNGRY_GORON, DON_GEROS_MASK, {Category::cMountainVillage, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); @@ -141,7 +145,7 @@ void LocationTable_Init() { //Road to Southern Swamp locationTable[ROAD_TO_SS_ARCHERY_1] = ItemLocation::Base (0x24, 0x47, false, "Road to Southern Swamp Archery 1", ROAD_TO_SS_ARCHERY_1, PROGRESSIVE_BOW, {Category::cRoadToSouthernSwamp,Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[ROAD_TO_SS_ARCHERY_2] = ItemLocation::Base (0x24, 0x0C, true, "Road to Southern Swamp Archery 2", ROAD_TO_SS_ARCHERY_2, PIECE_OF_HEART, {Category::cRoadToSouthernSwamp,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[ROAD_TO_SS_ARCHERY_2] = ItemLocation::Base (0x24, 0x0C, false, "Road to Southern Swamp Archery 2", ROAD_TO_SS_ARCHERY_2, PIECE_OF_HEART, {Category::cRoadToSouthernSwamp,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[ROAD_TO_SS_TREE] = ItemLocation::Collectable(0x40, 0x00, false, "Road to Southern Swamp Tree", ROAD_TO_SS_TREE, PIECE_OF_HEART, {Category::cRoadToSouthernSwamp, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); 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}, SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); @@ -149,7 +153,7 @@ void LocationTable_Init() { locationTable[ROMANI_RANCH_ALIEN_DEFENSE] = ItemLocation::Base (0x35, 0x60, true, "RR Alien Defense", ROMANI_RANCH_ALIEN_DEFENSE, BOTTLE_WITH_MILK, {Category::cRomaniRanch,Category::cDayOne}, 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}, 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}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); - locationTable[ROMANI_RANCH_CREMIA_ESCORT] = ItemLocation::Base (0x35, 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_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 ); locationTable[DOGGY_RACETRACK_ROOF_CHEST] = ItemLocation::Chest (0x41, 0x00, true, "RR Doggy Racetrack Roof Chest", DOGGY_RACETRACK_ROOF_CHEST, PURPLE_RUPEE, {Category::cRomaniRanch,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); @@ -168,8 +172,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}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[SOUTHERN_SWAMP_KOTAKE] = ItemLocation::Base (0x0A, 0x59, true, "SS Kotake", SOUTHERN_SWAMP_KOTAKE, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[SOUTHERN_SWAMP_KOTAKE_IN_WOODS] = ItemLocation::Base (0x64, 0x59, true, "SS Mystery Woods Kotake", SOUTHERN_SWAMP_KOTAKE_IN_WOODS, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp,Category::cDayOne}, 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::cDayOne}, 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::cDayOne}, 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}, 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}, 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_BOTTLE2, {Category::cSouthernSwamp, Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); @@ -186,10 +190,10 @@ void LocationTable_Init() { //Stock Pot Inn locationTable[STOCKPOTINN_RESERVATION] = ItemLocation::Base (0x61, 0xA0, true, "SPI Reservation", STOCKPOTINN_RESERVATION, ROOM_KEY, {Category::cStockPotInn,Category::cDayOne}, 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}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_TOILET_HAND] = ItemLocation::Base (0x61, 0x01, true, "SPI Toilet Hand", STOCKPOTINN_TOILET_HAND, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_GRANDMA_SHORT_STORY] = ItemLocation::Base (0x61, 0x0C, true, "SPI Grandma Short Story", STOCKPOTINN_GRANDMA_SHORT_STORY, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_GRANDMA_LONG_STORY] = ItemLocation::Base (0x61, 0xBA, true, "SPI Grandma Long Story", STOCKPOTINN_GRANDMA_LONG_STORY, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_ANJU_AND_KAFEI] = ItemLocation::Base (0x61, 0x85, true, "SPI Anju And Kafei", STOCKPOTINN_ANJU_AND_KAFEI, COUPLES_MASK, {Category::cStockPotInn, Category::cVanillaMask,Category::cDayThree}, 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}, 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}, 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}, 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::cVanillaMask,Category::cDayThree}, 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}, 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}, SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); @@ -222,13 +226,12 @@ void LocationTable_Init() { //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}, 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}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_POSTMANS_GAME] = ItemLocation::Base (0x2E, 0x0C, true, "WCT Postman's Game", W_CLOCK_TOWN_POSTMANS_GAME, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_ROSA_SISTERS] = ItemLocation::Base (0x6D, 0x0C, true, "WCT Rosa Sisters", W_CLOCK_TOWN_ROSA_SISTERS, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, 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}, 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}, 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}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY] = ItemLocation::Base (0x0D, 0x7E, true, "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_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}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_POSTBOX] = ItemLocation::Base (0x6D, 0xBA, false, "WCT Postbox", W_CLOCK_TOWN_POSTBOX, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); //Woodfall locationTable[WOODFALL_BRIDGE_CHEST] = ItemLocation::Chest (0x46, 0x01, true, "WF Bridge Chest", WOODFALL_BRIDGE_CHEST, PIECE_OF_HEART, {Category::cWoodfall, Category::cVanillaHeartPiece, Category::cChest, Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_WOODFALL ); @@ -238,8 +241,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, true, "ZC Beaver Race 1", ZORA_CAPE_BEAVER_RACE_1, EMPTY_BOTTLE1, {Category::cZoraCape,Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); - locationTable[ZORA_CAPE_BEAVER_RACE_2] = ItemLocation::Base (0x4A, 0x0C, true, "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_BOTTLE1, {Category::cZoraCape,Category::cMinigame,Category::cDayOne}, 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 ); @@ -295,7 +298,7 @@ void LocationTable_Init() { locationTable[STONE_TOWER_TEMPLE_UPDRAFT_ROOM_CHEST] = ItemLocation::Chest (0x18, 0x04, true, "Stone Tower Temple Updraft Room Chest", STONE_TOWER_TEMPLE_UPDRAFT_ROOM_CHEST, STONE_TOWER_TEMPLE_SMALL_KEY, {Category::cStoneTowerTemple, Category::cVanillaSmallKey,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); locationTable[STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM_CHEST] = ItemLocation::Chest (0x18, 0x05, true, "Stone Tower Temple Death Armos Room Chest", STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM_CHEST, STONE_TOWER_TEMPLE_SMALL_KEY, {Category::cStoneTowerTemple, Category::cVanillaSmallKey,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); locationTable[STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST] = ItemLocation::Chest (0x16, 0x1B, true, "Stone Tower Temple Light Arrow Chest", STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST, LIGHT_ARROWS, {Category::cStoneTowerTemple,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST] = ItemLocation::Chest (0x36, 0x7D, true, "Stone Tower Temple Giant's Mask Chest", STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST, GIANTS_MASK, {Category::cStoneTowerTemple,Category::cChest, Category::cVanillaMask ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST] = ItemLocation::Chest (0x36, 0x7D, false, "Stone Tower Temple Giant's Mask Chest", STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST, GIANTS_MASK, {Category::cStoneTowerTemple,Category::cChest, Category::cVanillaMask ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); //Pirate Fortress locationTable[PF_INTERIOR_HOOKSHOT_CHEST] = ItemLocation::Chest (0x23, 0x02, true, "Pirate's Fortress Int Hookshot Chest", PF_INTERIOR_HOOKSHOT_CHEST, HOOKSHOT, {Category::cPiratesFortressInterior,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); @@ -819,6 +822,10 @@ std::vector overworldLocations = { GORON_VILLAGE_GORON_LULLABY, LENS_CAVE_RED_RUPEE, LENS_CAVE_PURPLE_RUPEE, + GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, + GORON_VILLAGE_SCRUB_PURCHASE_SPRING, + GORON_VILLAGE_SCRUB_TRADE_SPRING, + GORON_VILLAGE_LEDGE_SPRING, GORON_SHOP_ITEM_1, GORON_SHOP_ITEM_2, GORON_SHOP_ITEM_3, @@ -992,7 +999,6 @@ std::vector overworldLocations = { W_CLOCK_TOWN_SWORDSMANS_SCHOOL, W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY, W_CLOCK_TOWN_BOMB_SHOP_GORON, - W_CLOCK_TOWN_POSTBOX, //W_CLOCK_TOWN_LOTTERY, TRADING_POST_ITEM_1, TRADING_POST_ITEM_2, @@ -1173,7 +1179,6 @@ void CreateItemOverrides() { auto loc7 = Location(S_CLOCK_TOWN_POSTBOX); PlaceItemInLocation(N_CLOCK_TOWN_POSTBOX, loc7->GetPlacedItemKey()); PlaceItemInLocation(E_CLOCK_TOWN_POSTBOX, loc7->GetPlacedItemKey()); - PlaceItemInLocation(W_CLOCK_TOWN_POSTBOX, loc7->GetPlacedItemKey()); //Duplicate Tingle Maps so each map buy is the same in both locaations auto loc8 = Location(TINGLE_N_CLOCK_TOWN_CT); //get clocktown map item auto loc9 = Location(TINGLE_ROAD_TO_SS_WF); //get swamp map item @@ -1189,8 +1194,18 @@ void CreateItemOverrides() { PlaceItemInLocation(TINGLE_MILK_ROAD_GB, loc12->GetPlacedItemKey());//copy great bay map into ranch PlaceItemInLocation(TINGLE_GBC_ST, loc13->GetPlacedItemKey());//copy stone tower map into great bay PlaceItemInLocation(TINGLE_IKANA_CANYON_CT, loc8->GetPlacedItemKey()); //copy clocktown into stone tower + //Keaton Quiz auto loc14 = Location(N_CLOCK_TOWN_KEATON_QUIZ); PlaceItemInLocation(MILK_ROAD_KEATON_QUIZ, loc14->GetPlacedItemKey());//copy NCT keaton quiz item to milk road + //Spring time Goron Village + auto loc15 = Location(GORON_VILLAGE_POWDER_KEG_CHALLENGE); + auto loc16 = Location(GORON_VILLAGE_SCRUB_PURCHASE); + auto loc17 = Location(GORON_VILLAGE_SCRUB_TRADE); + auto loc18 = Location(GORON_VILLAGE_LEDGE); + PlaceItemInLocation(GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, loc15->GetPlacedItemKey()); + PlaceItemInLocation(GORON_VILLAGE_SCRUB_PURCHASE_SPRING, loc16->GetPlacedItemKey()); + PlaceItemInLocation(GORON_VILLAGE_SCRUB_TRADE_SPRING, loc17->GetPlacedItemKey()); + PlaceItemInLocation(GORON_VILLAGE_LEDGE_SPRING, loc18->GetPlacedItemKey()); for (LocationKey locKey : allLocations) { auto loc = Location(locKey); diff --git a/source/item_pool.cpp b/source/item_pool.cpp index 9091a42..bb7c6e5 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -353,6 +353,7 @@ static void PlaceVanillaMainInventory() { PlaceItemInLocation(STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST, LIGHT_ARROWS); //PlaceItemInLocation(DEKU_PALACE_BEAN_DADDY, MAGIC_BEAN);//Shopsanity PlaceItemInLocation(GORON_VILLAGE_POWDER_KEG_CHALLENGE, POWDER_KEG); + PlaceItemInLocation(GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, POWDER_KEG); PlaceItemInLocation(SOUTHERN_SWAMP_KOTAKE, PICTOGRAPH_BOX); PlaceItemInLocation(PF_INTERIOR_HOOKSHOT_CHEST, HOOKSHOT); PlaceItemInLocation(GORON_VILLAGE_LENS_OF_TRUTH_CHEST, LENS_OF_TRUTH); @@ -809,6 +810,7 @@ static void PlaceVanillaShopItems() { PlaceItemInLocation(ZORA_SHOP_ITEM_2, BUY_ARROWS_10); PlaceItemInLocation(ZORA_SHOP_ITEM_3, BUY_RED_POTION); PlaceItemInLocation(GORON_VILLAGE_SCRUB_PURCHASE, PROGRESSIVE_BOMB_BAG); + PlaceItemInLocation(GORON_VILLAGE_SCRUB_PURCHASE_SPRING, PROGRESSIVE_BOMB_BAG); PlaceItemInLocation(IKANA_CANYON_SCRUB_PURCHASE, BLUE_POTION_REFILL); PlaceItemInLocation(ZORA_HALL_SCRUB_PURCHASE, GREEN_POTION_REFILL); PlaceItemInLocation(MILK_ROAD_GORMAN_MILK_BUY, MILK); @@ -894,8 +896,11 @@ void GenerateItemPool() { PlaceItemInLocation(SOUTHERN_SWAMP_KOTAKE_IN_WOODS, BLUE_RUPEE); PlaceItemInLocation(N_CLOCK_TOWN_POSTBOX, BLUE_RUPEE); PlaceItemInLocation(E_CLOCK_TOWN_POSTBOX, BLUE_RUPEE); - PlaceItemInLocation(W_CLOCK_TOWN_POSTBOX, BLUE_RUPEE); PlaceItemInLocation(MILK_ROAD_KEATON_QUIZ, BLUE_RUPEE); + PlaceItemInLocation(GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, BLUE_RUPEE); + PlaceItemInLocation(GORON_VILLAGE_SCRUB_PURCHASE_SPRING, BLUE_RUPEE); + PlaceItemInLocation(GORON_VILLAGE_SCRUB_TRADE_SPRING, BLUE_RUPEE); + PlaceItemInLocation(GORON_VILLAGE_LEDGE_SPRING, BLUE_RUPEE); //Check Non Dungeon Settings diff --git a/source/location_access.cpp b/source/location_access.cpp index 0f2d023..a12796b 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -303,7 +303,7 @@ void AreaTable_Init() { }, { //Exits - Entrance(STOCKPOTINN_GUEST_ROOM, {[]{return GoronMask;}}), + Entrance(STOCKPOTINN_GUEST_ROOM, {[]{return RoomKey;}}), Entrance(STOCKPOTINN_STAFF_ROOM, {[]{return true;}}), Entrance(STOCKPOTINN_GRANDMA_ROOM, {[]{return true;}}), Entrance(E_CLOCK_TOWN, {[]{return true;}}), @@ -433,8 +433,6 @@ void AreaTable_Init() { { //Locations LocationAccess(W_CLOCK_TOWN_ROSA_SISTERS, {[] {return KamarosMask;}}), - LocationAccess(W_CLOCK_TOWN_POSTBOX, {[]{return PostmansHat;}}), - }, { //Exits @@ -495,7 +493,7 @@ void AreaTable_Init() { LocationAccess(BOMB_SHOP_ITEM_2, {[]{return true;}}), LocationAccess(W_CLOCK_TOWN_BOMB_BAG_BUY, {[] {return true;}}), LocationAccess(W_CLOCK_TOWN_BIG_BOMB_BAG_BUY, {[] {return OldLadySaved;}}), - LocationAccess(W_CLOCK_TOWN_BOMB_SHOP_GORON, {[] {return GoronMask;}}), + LocationAccess(W_CLOCK_TOWN_BOMB_SHOP_GORON, {[] {return GoronMask && PowderKeg;}}), }, { //Exits @@ -1147,6 +1145,10 @@ void AreaTable_Init() { LocationAccess(GORON_VILLAGE_SCRUB_PURCHASE, {[] {return AnyWallet && GoronMask;}}), LocationAccess(GORON_VILLAGE_SCRUB_TRADE, {[] {return DekuMask && SwampTitle;}}), LocationAccess(GORON_VILLAGE_LEDGE, {[] {return DekuMask && SwampTitle;}}), + LocationAccess(GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, {[] {return GoronMask && (SnowheadClear || (Bow && FireArrows && MagicMeter));}}), + LocationAccess(GORON_VILLAGE_SCRUB_PURCHASE_SPRING, {[] {return AnyWallet && GoronMask;}}), + LocationAccess(GORON_VILLAGE_SCRUB_TRADE_SPRING, {[] {return DekuMask && SwampTitle;}}), + LocationAccess(GORON_VILLAGE_LEDGE_SPRING, {[] {return DekuMask && SwampTitle;}}), }, { //Exits @@ -1312,7 +1314,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(ROMANI_RANCH_DOG_RACE, {[] {return true;}}), + LocationAccess(ROMANI_RANCH_DOG_RACE, {[] {return MaskOfTruth;}}), LocationAccess(DOGGY_RACETRACK_ROOF_CHEST, {[] {return Hookshot || (WaterForBeans && MagicBean);}}), //Gossip Stones LocationAccess(DOGGY_RACETRACK_GOSSIP, {[] {return true;}}), diff --git a/source/patch.cpp b/source/patch.cpp index a9cbf6c..cf0ac4e 100644 --- a/source/patch.cpp +++ b/source/patch.cpp @@ -356,7 +356,7 @@ bool WriteAllPatches() { // Delete assets if it exists - Handle assetsOut; + /*Handle assetsOut; const char* assetsOutPath = "/luma/titles/0004000000125500/romfs/actor/zelda_gi_melody.zar"; const char* assetsInPath = "romfs:/zelda_gi_melody.zar"; FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, assetsOutPath)); @@ -390,7 +390,7 @@ bool WriteAllPatches() { } FSFILE_Close(assetsOut); - //FSUSER_CloseArchive(sdmcArchive); + //FSUSER_CloseArchive(sdmcArchive);*/ /*------------------- | TITLESCREEN LZS | diff --git a/source/setting_descriptions.cpp b/source/setting_descriptions.cpp index 4964213..38a6d08 100644 --- a/source/setting_descriptions.cpp +++ b/source/setting_descriptions.cpp @@ -18,9 +18,9 @@ string_view logicVanilla = "For those who want to play the game nor "locations will contain their vanilla items. This\n" "supercedes all item shuffle, logic, hint, and\n" // "item pool settings. You can still use non-vanilla\n" - "world settings such as adult start or entrance\n" // - "shuffle, but the game may require glitches to\n" // - "complete if you do."; // + "world settings such as entrance shuffle, \n" // + "but the game may require glitches to complete\n" // + "if you do."; // /*------------------------------ // | ALL LOCATIONS REACHABLE | // ------------------------------*/ // @@ -639,7 +639,7 @@ string_view ingameSpoilersButtonDesc = "Change the button to open the ingame Spo | BOMBERS MINIGAME SKIP | // -------------------------------*/ // string_view skipBombersMinigameDesc = "Skip Bomber's Minigame to get the code.\n" // - "Sets the code to 11111."; // + "Sets the code to 12345."; // /*------------------------------ // | GLITCHES | // From a064cb1dfee6049d5a82de4bf4f301dda723044d Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Fri, 26 Jan 2024 22:16:43 -0600 Subject: [PATCH 4/4] Fix item issues with pictograph, powder keg, and Zora mask. (#31) * Fix item issues with pictograph, powder keg, and Zora mask. * Temp Fix seahorse to not get in repeatable locations. * Version bump --- Z3DR | 2 +- source/include/version.hpp | 2 +- source/item_list.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Z3DR b/Z3DR index 5901797..37d1a54 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 590179745d35a2c7962357f4ff4055a2bd0dcfa9 +Subproject commit 37d1a5497763f9d899be8bf60ed4fb89b59d6d6e diff --git a/source/include/version.hpp b/source/include/version.hpp index ffc6bb4..cf766e1 100644 --- a/source/include/version.hpp +++ b/source/include/version.hpp @@ -1,4 +1,4 @@ #pragma once -#define RANDOMIZER_VERSION "v1.1" +#define RANDOMIZER_VERSION "v1.1.1" #define COMMIT_NUMBER "develop" diff --git a/source/item_list.cpp b/source/item_list.cpp index 260442b..eed7e25 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -111,7 +111,7 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[BOTTLE_WITH_ZORA_EGG] = Item(false, true, &HasBottle, Text{"Bottle with Zora Egg", "Bottle with Zora Egg", "Bottle with Zora Egg",}, BOTTLE_WITH_ZORA_EGG, (u32)GetItemID::GI_BOTTLE_ZORA_EGG, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_MUSHROOM] = Item(false, true, &HasBottle, Text{"Bottle with Mushroom", "Bottle with Mushroom", "Bottle with Mushroom",}, BOTTLE_WITH_MUSHROOM, (u32)GetItemID::GI_BOTTLE_MAGIC_MUSHROOM, ITEMTYPE_ITEM); itemTable[ZORA_EGG] = Item(false, true, &ZoraEgg, Text{"Zora Egg", "Oeuf de Zora", "Huevo de Zora"}, ZORA_EGG, (u32)GetItemID::GI_BOTTLE_ZORA_EGG, ITEMTYPE_ITEM); - itemTable[SEAHORSE] = Item(false, true, &Seahorse, Text{"Seahorse", "Hippocampe", "Caballo de mar"}, SEAHORSE, (u32)GetItemID::GI_BOTTLE_SEAHORSE, ITEMTYPE_ITEM); + itemTable[SEAHORSE] = Item(true, true, &Seahorse, Text{"Seahorse", "Hippocampe", "Caballo de mar"}, SEAHORSE, (u32)GetItemID::GI_BOTTLE_SEAHORSE, ITEMTYPE_ITEM); //Upgrades itemTable[RAZOR_SWORD] = Item(true, false, &RazorSword, Text{"Razor Sword", "Lame Rasoir", "Espada Afilada" }, RAZOR_SWORD, (u32)GetItemID::GI_RAZOR_SWORD, ITEMTYPE_ITEM );