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] 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 | //