From 741974d982eafbf26f604e39ce1a3a69109d3a09 Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Sun, 26 Nov 2023 19:21:03 -0600 Subject: [PATCH 01/87] Update zelda2_mag.gar.lzs --- romfs/zelda2_mag.gar.lzs | Bin 317152 -> 138954 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/romfs/zelda2_mag.gar.lzs b/romfs/zelda2_mag.gar.lzs index 889ee30ead9007d46a9422274506e2a8963fa9f6..b711e03a35e0d8f9eebad0ebac3c29b9730df288 100644 GIT binary patch literal 138954 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�o*M_@*OE1Mg)$ZIN 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 literal 317152 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

cAM|k6qcW`^fPY4pff9( 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%0DWlI*U>bSwT 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℞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%0DaV;gj+W&q8 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 Date: Mon, 11 Dec 2023 17:58:42 -0600 Subject: [PATCH 02/87] Logic Fix Fixes logic error which was causing errors in item placement as well as causing the Own Dungeon and Any Dungeon item placements --- source/fill.cpp | 78 ++++++++++++++++++++++--------------- source/include/entrance.hpp | 4 +- source/location_access.cpp | 8 +++- 3 files changed, 55 insertions(+), 35 deletions(-) diff --git a/source/fill.cpp b/source/fill.cpp index 288fe7a..8b42294 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -50,22 +50,23 @@ static void RemoveStartingItemsFromPool() { //This function propigates time of day access through entrances +/* static bool UpdateToDAccess(Entrance* entrance) { bool ageTimePropigated = false; - //Area* parent = entrance->GetParentRegion(); + Area* parent = entrance->GetParentRegion(); //PlacementLog_Msg("\nparent = "); //PlacementLog_Msg(parent->regionName+"\n"); Area* connection = entrance->GetConnectedRegion(); //PlacementLog_Msg("\nconnection = "); //PlacementLog_Msg(connection->regionName+"\n"); - if (!connection){ + if (!connection && parent->HereCheck() && entrance->ConditionsMet()){ ageTimePropigated = true; } return ageTimePropigated; -} +}*/ std::vector GetAllEmptyLocations() { return FilterFromPool(allLocations, [](const LocationKey loc) { return Location(loc)->GetPlacedItemKey() == NONE;}); @@ -76,7 +77,11 @@ std::vector GetAllEmptyLocations() { //specifies the pool of locations that we're trying to search for an accessible location in std::vector GetAccessibleLocations(const std::vector& allowedLocations, SearchMode mode) { std::vector accessibleLocations; - + //PlacementLog_Msg("Allowed Locations passed to AcceessibleLocations Function:\n"); + //for (LocationKey loc : allowedLocations) + //{ + // PlacementLog_Msg(Location(loc)->GetName() + "\n"); + //} //Reset all access to begin a new search ApplyStartingInventory(); @@ -92,13 +97,13 @@ std::vector GetAccessibleLocations(const std::vector& //Variables for search std::vector newItemLocations; bool updatedEvents = false; - bool ageTimePropigated = false; + //bool ageTimePropigated = false; bool firstIteration = true; //If no new items are found and no events are updated, then the next iteration won't provide any new location - while (newItemLocations.size() > 0 || ageTimePropigated || firstIteration || updatedEvents) { // - events not included in mm3dr yet + while (newItemLocations.size() > 0 || firstIteration || updatedEvents) { // || ageTimePropigated firstIteration = false; - ageTimePropigated = false; + //ageTimePropigated = false; updatedEvents = false; for (ItemLocation* location : newItemLocations) { @@ -121,9 +126,9 @@ std::vector GetAccessibleLocations(const std::vector& for (auto& exit : area->exits) { //Update Time of Day Access for the exit - if (UpdateToDAccess(&exit)){ - ageTimePropigated=true; - } + //if (UpdateToDAccess(&exit)){ + // ageTimePropigated=true; + // } //if the exit is accessable and hasn't been added yet, add it to pool Area* exitArea = exit.GetConnectedRegion(); @@ -392,11 +397,16 @@ static void AssumedFill(const std::vector& items, const std::vector itemsToPlace = items; //copy all not yet placed advancement items so that we can apply their effects for the fill algorithm - std::vector itemsToNotPlace = FilterFromPool(ItemPool, [](const ItemKey i) { + //std::vector itemsToNotPlace = FilterFromPool(ItemPool, [](const ItemKey i) { //CitraPrint("Added item to itemsToNotPlace: "); //CitraPrint(ItemTable(i).GetName().GetEnglish()); - return ItemTable(i).IsAdvancement();}); - + // return ItemTable(i).IsAdvancement();}); + std::vector itemsToNotPlace = ItemPool; + //PlacementLog_Msg("ItemsNotToPlace:\n"); + //for (ItemKey items : itemsToNotPlace) + //{ + // PlacementLog_Msg(" " + ItemTable(items).GetName().GetEnglish() + "," ); + //} //shuffle the order of items to place Shuffle(itemsToPlace); @@ -407,33 +417,37 @@ static void AssumedFill(const std::vector& items, const std::vectorGetName()); - PlacementLog_Msg("\n"); - CitraPrint(Location(loc)->GetName()); - }*/ + //PlacementLog_Msg("\nAllowed Locations are: \n"); + //CitraPrint("Allowed Locations are:"); + //for (LocationKey loc : allowedLocations) + // { + // PlacementLog_Msg(Location(loc)->GetName()); + // PlacementLog_Msg("\n"); + // CitraPrint(Location(loc)->GetName()); + // } //get all accessible locations that are allowed //CitraPrint("Accessible Locations: "); const std::vector accessibleLocations = GetAccessibleLocations(allowedLocations); //print accessable locations to see what's accessable - /*CitraPrint("Accessable Locations are:"); - PlacementLog_Msg("\nAccessable Locations are: \n"); - for (LocationKey loc : accessibleLocations) - { - PlacementLog_Msg(Location(loc)->GetName()); - PlacementLog_Msg("\n"); - CitraPrint(Location(loc)->GetName()); - }*/ + //CitraPrint("Accessable Locations are:"); + //PlacementLog_Msg("\nAccessable Locations are: \n"); + //for (LocationKey loc : accessibleLocations) + // { + // PlacementLog_Msg(Location(loc)->GetName()); + // PlacementLog_Msg("\n"); + // //CitraPrint(Location(loc)->GetName()); + // } //retry if there are no more locations to place items if (accessibleLocations.empty()) { @@ -469,6 +483,7 @@ static void AssumedFill(const std::vector& items, const std::vectorGetName()); //CitraPrint("Placed " + ItemTable(item).GetName().GetEnglish() + " at " + Location(selectedLocation)->GetName()); attemptedLocations.push_back(selectedLocation); @@ -779,6 +794,9 @@ int Fill() { FillExcludedLocations(); showItemProgress = true; + + //Place dungeon rewards - always vanilla for now + RandomizeDungeonRewards(); //Place dungeon items restricted to their Own Dungeon @@ -804,10 +822,6 @@ int Fill() { std::vector dekuTrades = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_TRADE;}); AssumedFill(dekuTrades, allLocations); } - - //Place dungeon rewards - always vanilla for now - RandomizeDungeonRewards(); - //Then Place songs if song shuffle is set to specific locations /* diff --git a/source/include/entrance.hpp b/source/include/entrance.hpp index 92feedb..027607e 100644 --- a/source/include/entrance.hpp +++ b/source/include/entrance.hpp @@ -68,13 +68,15 @@ class Entrance { bool ConditionsMet() const { Area* parent = AreaTable(parentRegion); + int conditionsMet = 0; //PlacementLog_Msg("\nConditions Met parent = "); //PlacementLog_Msg(parent->regionName+"\n"); if (!parent->AllAccess()){ return false; } + conditionsMet = (parent->HasAccess()); Logic::UpdateHelpers(); - return GetConditionsMet(); + return conditionsMet; } AreaKey GetAreaKey() const { diff --git a/source/location_access.cpp b/source/location_access.cpp index 61b6aa9..9271156 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -16,8 +16,12 @@ using namespace Settings; bool LocationAccess::ConditionsMet() const { - //Area* parentRegion = AreaTable(Location(location)->GetParentRegionKey()); - bool conditionsMet = true; + Area* parentRegion = AreaTable(Location(location)->GetParentRegionKey()); + bool conditionsMet = false; + + if (parentRegion->HasAccess()) { + conditionsMet= true; + } return conditionsMet;// && CanBuy(); } From 44d8f438e92ca67c7eb1563c3ec517f032a54932 Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Thu, 14 Dec 2023 00:06:58 -0600 Subject: [PATCH 03/87] Update item_location.cpp Fixes Captain Keeta Chest & Dampe Digging Reward Chest as they were not overriding correctly --- source/item_location.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/item_location.cpp b/source/item_location.cpp index 79d40c7..d3e7786 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -84,9 +84,9 @@ void LocationTable_Init() { locationTable[IKANA_CANYON_SCRUB_PURCHASE] = ItemLocation::Base (0x13, 0x5D, true, "IC Deku Scrub Merchant Purchase", IKANA_CANYON_SCRUB_PURCHASE, BLUE_POTION_REFILL, {Category::cIkanaCanyon, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); //Ikana Graveyard - locationTable[IKANA_GRAVEYARD_DAMPE_DIGGING] = ItemLocation::Chest (0x30, 0x00, false, "IG Dampe Digging", IKANA_GRAVEYARD_DAMPE_DIGGING, PIECE_OF_HEART, {Category::cIkanaGraveyard, Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); + locationTable[IKANA_GRAVEYARD_DAMPE_DIGGING] = ItemLocation::Chest (0x30, 0x10, false, "IG Dampe Digging", IKANA_GRAVEYARD_DAMPE_DIGGING, PIECE_OF_HEART, {Category::cIkanaGraveyard, Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); locationTable[IKANA_GRAVEYARD_IRON_KNUCKLE_CHEST] = ItemLocation::Chest (0x0C, 0x04, false, "IG Iron Knuckle Chest", IKANA_GRAVEYARD_IRON_KNUCKLE_CHEST, PIECE_OF_HEART, {Category::cIkanaGraveyard, Category::cVanillaHeartPiece, Category::cChest, Category::cDayTwo}, SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); - locationTable[IKANA_GRAVEYARD_CAPTAIN_KEETA_CHEST] = ItemLocation::Chest (0x0C, 0x7C, false, "IG Captain Keeta's Chest", IKANA_GRAVEYARD_CAPTAIN_KEETA_CHEST, CAPTAINS_HAT, {Category::cIkanaGraveyard, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); + locationTable[IKANA_GRAVEYARD_CAPTAIN_KEETA_CHEST] = ItemLocation::Chest (0x43, 0x00, false, "IG Captain Keeta's Chest", IKANA_GRAVEYARD_CAPTAIN_KEETA_CHEST, CAPTAINS_HAT, {Category::cIkanaGraveyard, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); locationTable[IKANA_GRAVEYARD_DAY_ONE_GRAVE_TABLET] = ItemLocation::Base (0x0C, 0x73, false, "IG Day 1 Grave Tablet", IKANA_GRAVEYARD_DAY_ONE_GRAVE_TABLET, SONG_OF_STORMS, {Category::cIkanaGraveyard, Category::cSong,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); locationTable[IKANA_GRAVEYARD_DAY_ONE_GRAVE_BATS] = ItemLocation::Chest (0x0C, 0x03, true, "IG Day 1 Grave Bats", IKANA_GRAVEYARD_DAY_ONE_GRAVE_BATS, PURPLE_RUPEE, {Category::cIkanaGraveyard,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); locationTable[IKANA_GRAVEYARD_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x18, true, "IG Grotto", IKANA_GRAVEYARD_GROTTO_CHEST, BOMBCHU_5, {Category::cIkanaGraveyard, Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); From 026f25ba66f0fd9c2945709140023edbef1e7775 Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Mon, 18 Dec 2023 19:02:31 -0600 Subject: [PATCH 04/87] Update Z3DR --- Z3DR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Z3DR b/Z3DR index c209686..ea7b3ae 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit c209686c39896eaada00ee9c4d507867ebd7598b +Subproject commit ea7b3aedccbe4e1bc20d0b936962d70f41956a86 From e39fc3fe6df689dbdfb21e798bde857026e0b6c3 Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Tue, 19 Dec 2023 21:25:59 -0600 Subject: [PATCH 05/87] Update Z3DR + Settings Updates Z3DR subrepo and fixes erroneous Longshot option in starting inventory --- Z3DR | 2 +- source/settings.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Z3DR b/Z3DR index ea7b3ae..9251a4b 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit ea7b3aedccbe4e1bc20d0b936962d70f41956a86 +Subproject commit 9251a4bb447b4e9ce5ed3af19171d88f1aac012e diff --git a/source/settings.cpp b/source/settings.cpp index ace36a0..cef127b 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -99,7 +99,7 @@ namespace Settings { Option StartingOcarina = Option::U8(" Ocarina", { "Ocarina of Time", "Ocarina of Time" }, { "" }, OptionCategory::Toggle, 1); Option StartingBombBag = Option::U8(" Bomb Bag", { "None", "Bomb Bag 20", "Bomb Bag 30", "Bomb Bag 40" }, { "" }); Option StartingBombchus = Option::U8(" Bombchus", { "None", "Bombchus" }, { "" }); - Option StartingHookshot = Option::U8(" Hookshot", { "None", "Hookshot", "Longshot" }, { "" }); + Option StartingHookshot = Option::U8(" Hookshot", { "None", "Hookshot" }, { "" }); Option StartingBow = Option::U8(" Bow", { "None", "Bow + Quiver 30", "Bow + Quiver 40", "Bow + Quiver 50" }, { "" }); Option StartingFireArrows = Option::U8(" Fire Arrow", { "None", "Fire Arrow" }, { "" }); Option StartingIceArrows = Option::U8(" Ice Arrow", { "None", "Ice Arrow" }, { "" }); From 3c4fb454030cc314d1ac89335a6314bdf7b6674a Mon Sep 17 00:00:00 2001 From: Phlex Date: Wed, 20 Dec 2023 12:13:53 -0600 Subject: [PATCH 06/87] Update Z3DR subrepo. --- Z3DR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Z3DR b/Z3DR index 9251a4b..f685da7 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 9251a4bb447b4e9ce5ed3af19171d88f1aac012e +Subproject commit f685da7adbe7e1a259108903e05813ac7b81e9b9 From d0ce0c9c263bec3f4fc0c2a41c4b7a1ccbd72ce3 Mon Sep 17 00:00:00 2001 From: Phlex Date: Thu, 21 Dec 2023 09:58:56 -0600 Subject: [PATCH 07/87] Update submodule --- Z3DR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Z3DR b/Z3DR index f685da7..66cbef9 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit f685da7adbe7e1a259108903e05813ac7b81e9b9 +Subproject commit 66cbef9dc836a9460b867d3b7cadc282be16d48e From 242ceb553ef12c5c28764d69d1b9eeab984d1160 Mon Sep 17 00:00:00 2001 From: Phlex Date: Thu, 21 Dec 2023 12:01:51 -0600 Subject: [PATCH 08/87] Update repo once more for bug fixes. --- Z3DR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Z3DR b/Z3DR index 66cbef9..fe8f469 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 66cbef9dc836a9460b867d3b7cadc282be16d48e +Subproject commit fe8f469578987d5d505495aff52ae0a318f4abed From c0125f63446963dd9ce8b4ee73ceb450fa63037c Mon Sep 17 00:00:00 2001 From: Phlex Date: Fri, 22 Dec 2023 11:59:05 -0600 Subject: [PATCH 09/87] Update patch code. This fixes swamp archery not giving the correct items and small keys not giving the first key. --- Z3DR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Z3DR b/Z3DR index fe8f469..14f9150 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit fe8f469578987d5d505495aff52ae0a318f4abed +Subproject commit 14f9150599d454f2ee90936b19eed347de4afca8 From 6d4be600a55ee3ce64f121adb73a2517dbe3bf6e Mon Sep 17 00:00:00 2001 From: Phlex Date: Fri, 22 Dec 2023 12:14:21 -0600 Subject: [PATCH 10/87] Greay -> Great --- Z3DR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Z3DR b/Z3DR index 14f9150..a32713e 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 14f9150599d454f2ee90936b19eed347de4afca8 +Subproject commit a32713e03f03daf9e1531085b035db2601152915 From 75e9edd68ab3e341ac7074922d9261d429002de1 Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Sat, 23 Dec 2023 14:15:23 -0600 Subject: [PATCH 11/87] Update repeatable bottles to use refills instead. --- source/item_list.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/item_list.cpp b/source/item_list.cpp index bb07440..bd0b6ac 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -94,9 +94,9 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[EMPTY_BOTTLE] = Item(true, false, &HasBottle, Text{"Empty Bottle", "Flacon vide", "Botella vacía" }, EMPTY_BOTTLE, (u32)GetItemID::GI_BOTTLE_EMPTY, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_MILK] = Item(true, false, &AlienBottle, Text{"Bottle with Milk", "Flacon de lait", "Botella de leche Lon Lon"}, BOTTLE_WITH_MILK, (u32)GetItemID::GI_BOTTLE_MILK, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_RED_POTION] = Item(true, false, &WitchBottle, Text{"Bottle with Red Potion", "Flacon de potion rouge", "Botella de poción roja"}, BOTTLE_WITH_RED_POTION, (u32)GetItemID::GI_BOTTLE_POTION_RED, ITEMTYPE_ITEM); - itemTable[GOLD_DUST] = Item(true, true, &GoronRaceBottle, Text{"Gold Dust", "Poudre d'Or", "Polvo de Oro" }, GOLD_DUST, (u32)GetItemID::GI_BOTTLE_GOLD_DUST, ITEMTYPE_ITEM); - itemTable[CHATEAU_ROMANI] = Item(true, false, &ChateauBottle, Text{"Chateau Romani", "Chateau Romani", "Reserva Romani" }, CHATEAU_ROMANI, (u32)GetItemID::GI_BOTTLE_CHATEAU_ROMANI, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_MYSTERY_MILK] = Item(true, true, &MysteryMilkBottle, Text{"Bottle with Mystery Milk", "Bottle with Mystery Milk", "Bottle with Mystery Milk"}, BOTTLE_WITH_MYSTERY_MILK, (u32)GetItemID::GI_BOTTLE_MYSTERY_MILK, ITEMTYPE_ITEM); + itemTable[GOLD_DUST] = Item(true, true, &GoronRaceBottle, Text{"Gold Dust", "Poudre d'Or", "Polvo de Oro" }, GOLD_DUST, (u32)GetItemID::GI_BOTTLE_GOLD_DUST_TWO, ITEMTYPE_ITEM); + itemTable[CHATEAU_ROMANI] = Item(true, false, &ChateauBottle, Text{"Chateau Romani", "Chateau Romani", "Reserva Romani" }, CHATEAU_ROMANI, (u32)GetItemID::GI_BOTTLE_CHATEAU_ROMANI_TWO, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_MYSTERY_MILK] = Item(true, true, &MysteryMilkBottle, Text{"Bottle with Mystery Milk", "Bottle with Mystery Milk", "Bottle with Mystery Milk"}, BOTTLE_WITH_MYSTERY_MILK, (u32)GetItemID::GI_BOTTLE_MYSTERY_MILK_TWO, ITEMTYPE_ITEM); //Other bottle items itemTable[DEKU_PRINCESS] = Item(true, true, &DekuPrincess, Text{"Deku Princess", "Princesse Mojo", "Princesa Deku"}, DEKU_PRINCESS, (u32)GetItemID::GI_DEKU_PRINCESS_FAIRY, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_FAIRY] = Item(false, true, &HasBottle, Text{"Bottle with Fairy", "Bottle with Fairy", "Bottle with Fairy",}, BOTTLE_WITH_FAIRY, (u32)GetItemID::GI_FAIRY, ITEMTYPE_ITEM); @@ -108,7 +108,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(false, true, &Seahorse, Text{"Seahorse", "Hippocampe", "Caballo de mar"}, SEAHORSE, (u32)GetItemID::GI_BOTTLE_SEAHORSE_TWO, 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 ); From 129e0bb6f5e7a3f4d4a6f9047968c2e284b1bc1a Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Sun, 24 Dec 2023 19:14:10 -0600 Subject: [PATCH 12/87] Various Fixes -Fixes Great Fairy Reward self shuffle so it now properly only places Great Fairy Rewards at Great Fairy locations. - Adds new ITEMTYPE_GFAIRY and applies it to items given by Great Fairies to help filter those items for the Great Fairy Reward : Great Fairies option. - Fixes Generation Menus so that the cursor on the version select screen defaults to 1.0 instead of staying on whichever index was selected on the previous screen (IE. if Citra was selected as the play mode then the cursor would stay on the second postition and be on 1.1) - Hopefully fixes Starting Bottles so Bottle 1 doesnt duplicate across all 7 bottles if only 1 bottle was selected. - Update Z3DR --- Z3DR | 2 +- source/fill.cpp | 16 +++++++++------- source/include/item.hpp | 1 + source/item_list.cpp | 8 ++++---- source/item_location.cpp | 2 +- source/item_pool.cpp | 17 +++++++++-------- source/menu.cpp | 5 ++++- source/settings.cpp | 4 ++-- 8 files changed, 31 insertions(+), 24 deletions(-) diff --git a/Z3DR b/Z3DR index 9251a4b..60f3b61 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 9251a4bb447b4e9ce5ed3af19171d88f1aac012e +Subproject commit 60f3b61bae09047108f72ba9210fa8dad2ce2e0e diff --git a/source/fill.cpp b/source/fill.cpp index 8b42294..5dd27cc 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -804,6 +804,14 @@ int Fill() { RandomizeOwnDungeon(dungeon); } + if (ShuffleGFRewards.Is((u8)GreatFairyRewardShuffleSetting::GFREWARDSHUFFLE_ALL_GREAT_FARIES)){ + //get GF locations + std::vector gfLocations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsCategory(Category::cFairyFountain);}); + std::vector gfItems = FilterAndEraseFromPool(ItemPool, [gfLocations](const ItemKey i) { return ItemTable(i).GetItemType() == ITEMTYPE_GFAIRY;}); + + AssumedFill(gfItems, gfLocations, true); + } + //Place Main Inventory First //So first get all items in the pool + DekuMask, std::vector mainadvancementItems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).IsAdvancement();});//&& ItemTable(i).GetItemType() == ITEMTYPE_ITEM @@ -841,13 +849,7 @@ int Fill() { AssumedFill(songs, songLocations, true); }*/ - /*if (ShuffleGFRewards.Is(GreatFairyRewardShuffleSetting::GFREWARDSHUFFLE_ALL_GREAT_FARIES)){ - //get GF locations - std::vector gfLocations = FilterFromPool(allLocations, [](const LocationKey loc) {return Location(loc)->IsCategory(Category::cFairyFountain);}); - std::vector gfItems = FilterAndEraseFromPool(ItemPool, [gfLocations](const ItemKey i) { return i == Location(gfLocations)->GetVanillaItem();}); - - - }*/ + //Then place dungeon items that are assigned to restrictive location pools RandomizeDungeonItems(); diff --git a/source/include/item.hpp b/source/include/item.hpp index fc0890b..cfd519b 100644 --- a/source/include/item.hpp +++ b/source/include/item.hpp @@ -33,6 +33,7 @@ enum ItemType { ITEMTYPE_STRAYFAIRY, ITEMTYPE_QUEST, ITEMTYPE_TRADE, + ITEMTYPE_GFAIRY, }; class Item { diff --git a/source/item_list.cpp b/source/item_list.cpp index bb07440..379516c 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -13,7 +13,7 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[TEST] = Item(); itemTable[NONE] = Item(false, false, &noVariable, Text{"No Item", "Rien", "Sin Objeto" }, NONE, (u32)GetItemID::GI_NONE, ITEMTYPE_EVENT); itemTable[KOKIRI_SWORD] = Item(true , false, &KokiriSword, Text{"Kokiri Sword", "Épée Kokiri", "Espada Kokiri" }, KOKIRI_SWORD, (u32)GetItemID::GI_KOKIRI_SWORD, ITEMTYPE_ITEM ); - itemTable[GREAT_FAIRYS_SWORD] = Item(true , false, &GreatFairySword, Text{"Great Fairys Sword", "Grande Épée de Fees", "Espada de la Gran Hada"}, GREAT_FAIRYS_SWORD, (u32)GetItemID::GI_GREAT_FAIRY_SWORD, ITEMTYPE_ITEM ); + itemTable[GREAT_FAIRYS_SWORD] = Item(true , false, &GreatFairySword, Text{"Great Fairys Sword", "Grande Épée de Fees", "Espada de la Gran Hada"}, GREAT_FAIRYS_SWORD, (u32)GetItemID::GI_GREAT_FAIRY_SWORD, ITEMTYPE_GFAIRY ); itemTable[HEROS_SHIELD] = Item(false, true, &HerosShield, Text{"Heros Shield", "Bouclier du Heros", "Escudo del Heroe"}, HEROS_SHIELD, (u32)GetItemID::GI_SHIELD_HERO, ITEMTYPE_ITEM ); itemTable[DEKU_STICK] = Item(true , true, &DekuStick, Text{"Deku Stick", "Bâton Mojo", "palos deku" }, DEKU_STICK, (u32)GetItemID::GI_STICKS_1, ITEMTYPE_ITEM ); itemTable[LAND_TITLE] = Item(true, true, &LandTitle, Text{"Land Title Deed", "Titre de propriete fonciere", "Escritura de propiedad de la Tierra" }, LAND_TITLE, (u32)GetItemID::GI_TOWN_TITLE_DEED, ITEMTYPE_TRADE ); @@ -26,7 +26,7 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[PENDANT_MEMORIES] = Item(true, true, &PendantAccess, Text{"Pendant of Memories", "Pendentif de Souvenirs", "Colgante de recuerdos" }, PENDANT_MEMORIES, (u32)GetItemID::GI_PENDANT_OF_MEMORIES, ITEMTYPE_QUEST ); itemTable[LETTER_MAMA] = Item(true, true, &LetterMama, Text{"Special Delivery to Mama", "Livraison speciale a maman", "Entrega especial a mama" }, LETTER_MAMA, (u32)GetItemID::GI_LETTER_TO_MAMA, ITEMTYPE_QUEST ); itemTable[MOONS_TEAR] = Item(true, true, &MoonsTear, Text{"Moon's Tear", "Larme de lune", "Lagrima de luna" }, MOONS_TEAR, (u32)GetItemID::GI_MOONS_TEAR, ITEMTYPE_TRADE ); - itemTable[SPIN_ATTACK] = Item(true, false, &SpinAttack, Text{"Spin Attack", "attaque de rotation", "ataque giratorio" }, SPIN_ATTACK, 0x2C, ITEMTYPE_ITEM ); + itemTable[SPIN_ATTACK] = Item(true, false, &SpinAttack, Text{"Spin Attack", "attaque de rotation", "ataque giratorio" }, SPIN_ATTACK, 0x2C, ITEMTYPE_GFAIRY ); itemTable[LENS_OF_TRUTH] = Item(true, false, &LensOfTruth, Text{"Lens of Truth", "Loupe de vérité", "Lupa de la Verdad"}, LENS_OF_TRUTH, (u32)GetItemID::GI_LENS_OF_TRUTH, ITEMTYPE_ITEM ); itemTable[HEROS_BOW] = Item(true, false, &HerosBow, Text{"Hero's Bow", "Hero's Bow", "Hero's Bow"}, HEROS_BOW, (u32)GetItemID::GI_HEROS_BOW, ITEMTYPE_ITEM ); itemTable[FIRE_ARROWS] = Item(true, false, &FireArrows, Text{"Fire Arrow", "Flèche de feu", "Flecha de fuego"}, FIRE_ARROWS, (u32)GetItemID::GI_FIRE_ARROW, ITEMTYPE_ITEM ); @@ -35,7 +35,7 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[HOOKSHOT] = Item(true, false, &Hookshot, Text{"Hookshot", "Grappin", "Gancho" }, HOOKSHOT, (u32)GetItemID::GI_HOOKSHOT, ITEMTYPE_ITEM ); itemTable[MAGIC_BEAN] = Item(true, true, &MagicBean, Text{"Magic Bean", "Haricot magique", "Habichuelas mágicas"}, MAGIC_BEAN, (u32)GetItemID::GI_MAGIC_BEAN, ITEMTYPE_ITEM ); itemTable[MAGIC_BEAN_PACK] = Item(true, true, &MagicBeanPack, Text{"Magic Bean Pack", "Paquet de haricots magiques", "Lote de habichuelas mágicas"}, MAGIC_BEAN_PACK, (u32)GetItemID::GI_MAGIC_BEAN, ITEMTYPE_ITEM ); - itemTable[DOUBLE_DEFENSE] = Item(true, false, &noVariable, Text{"Double Defense", "Double défence", "Doble poder defensivo"}, DOUBLE_DEFENSE, 0xB2, ITEMTYPE_ITEM ); + itemTable[DOUBLE_DEFENSE] = Item(true, false, &noVariable, Text{"Double Defense", "Double défence", "Doble poder defensivo"}, DOUBLE_DEFENSE, 0xB2, ITEMTYPE_GFAIRY ); itemTable[OCARINA_OF_TIME] = Item(true, false, &Ocarina, Text{"Ocarina of Time", "Ocarina du temps", "Ocarina del Tiempo"}, OCARINA_OF_TIME, (u32)GetItemID::GI_OCARINA_OF_TIME, ITEMTYPE_ITEM ); itemTable[PICTOGRAPH_BOX] = Item(true, false, &Pictobox, Text{"Pictograph Box", "Boite a Images", "Camara Pictografica"}, PICTOGRAPH_BOX, (u32)GetItemID::GI_PICTOGRAPH_BOX, ITEMTYPE_ITEM ); itemTable[POWDER_KEG] = Item(true, true, &PowderKeg, Text{"Powder Keg", "Baril de Poudre", "Barril de Polovora"}, POWDER_KEG, (u32)GetItemID::GI_POWDER_KEG, ITEMTYPE_ITEM ); @@ -229,7 +229,7 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[PROGRESSIVE_BOMB_BAG] = Item(true, false, &ProgressiveBombBag, Text{"Progressive Bomb Bag", "Sac de bombes (prog.)", "Saco de bombas progresivo" }, PROGRESSIVE_BOMB_BAG, 0x46, ITEMTYPE_ITEM); itemTable[PROGRESSIVE_BOW] = Item(true, false, &ProgressiveBow, Text{"Progressive Bow", "Arc (prog.)", "Arco progresivo" }, PROGRESSIVE_BOW, 0x47, ITEMTYPE_ITEM); itemTable[PROGRESSIVE_WALLET] = Item(true, false, &ProgressiveWallet, Text{"Progressive Wallet", "Bourse (prog.)", "Bolsa de rupias progresiva" }, PROGRESSIVE_WALLET, 0x48, ITEMTYPE_ITEM); - itemTable[PROGRESSIVE_MAGIC_METER] = Item(true, false, &ProgressiveMagic, Text{"Progressive Magic Meter", "Jauge de magie (prog.)", "Poder mágico progresivo" }, PROGRESSIVE_MAGIC_METER, 0x49, ITEMTYPE_ITEM); + itemTable[PROGRESSIVE_MAGIC_METER] = Item(true, false, &ProgressiveMagic, Text{"Progressive Magic Meter", "Jauge de magie (prog.)", "Poder mágico progresivo" }, PROGRESSIVE_MAGIC_METER, 0x49, ITEMTYPE_GFAIRY); //itemTable[PROGRESSIVE_BOMBCHUS] = Item(Text{ "Progressive Bombchu", "Bombchus (prog.)", "Bombchus progresivos" }, ITEMTYPE_ITEM, 0x89, true, &Bombchus, PROGRESSIVE_BOMBCHUS, false, ); // itemTable[PROGRESSIVE_NUT_UPGRADE] = Item(Text{"Progressive Nut Capacity", "Capacité de noix (prog.)", "Capacidad de nueces deku progresiva"}, ITEMTYPE_ITEM, 0x87, false, &noVariable, PROGRESSIVE_NUT_UPGRADE, false,); diff --git a/source/item_location.cpp b/source/item_location.cpp index d3e7786..97f6cb1 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -75,7 +75,7 @@ void LocationTable_Init() { 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 ); //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}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_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 ); locationTable[IKANA_CANYON_POE_HUT_HP] = ItemLocation::Base (0x51, 0x06, false, "IC Poe Hut", IKANA_CANYON_POE_HUT_HP, PIECE_OF_HEART, {Category::cIkanaCanyon, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); locationTable[IKANA_CANYON_LEDGE] = ItemLocation::Collectable(0x13, 0x00, false, "IC Ledge", IKANA_CANYON_LEDGE, PIECE_OF_HEART, {Category::cIkanaCanyon, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); locationTable[IKANA_CANYON_PAMELAS_FATHER] = ItemLocation::Base (0x55, 0x87, false, "IC Pamela's Father", IKANA_CANYON_PAMELAS_FATHER, GIBDOS_MASK, {Category::cIkanaCanyon, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); diff --git a/source/item_pool.cpp b/source/item_pool.cpp index cb64191..05ff813 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -978,20 +978,21 @@ void GenerateItemPool() { //GREAT FAIRY SHUFFLE - if(ShuffleGFRewards.Is(GreatFairyRewardShuffleSetting::GFREWARDSHUFFLE_ANYWHERE)){ - AddItemToMainPool(PROGRESSIVE_MAGIC_METER); - AddItemToMainPool(PROGRESSIVE_MAGIC_METER); - AddItemToMainPool(SPIN_ATTACK); - if(ShuffleMainInventory){AddItemToMainPool(GREAT_FAIRYS_SWORD);} - if(!RemoveDoubleDefense){AddItemToMainPool(DOUBLE_DEFENSE);} - } - else{ + if(ShuffleGFRewards.Is((u8)GreatFairyRewardShuffleSetting::GFREWARDSHUFFLE_VANILLA)){ PlaceItemInLocation(N_CLOCK_TOWN_GREAT_FAIRY_DEKU, PROGRESSIVE_MAGIC_METER); PlaceItemInLocation(WOODFALL_GREAT_FAIRY, SPIN_ATTACK); PlaceItemInLocation(SNOWHEAD_GREAT_FAIRY, PROGRESSIVE_MAGIC_METER); if(!ShuffleMainInventory){PlaceItemInLocation(IKANA_CANYON_GREAT_FAIRY, GREAT_FAIRYS_SWORD);} if(!RemoveDoubleDefense){PlaceItemInLocation(ZORA_CAPE_GREAT_FAIRY, DOUBLE_DEFENSE);} } + else{ + + AddItemToMainPool(PROGRESSIVE_MAGIC_METER); + AddItemToMainPool(PROGRESSIVE_MAGIC_METER); + AddItemToMainPool(SPIN_ATTACK); + if(ShuffleMainInventory){AddItemToMainPool(GREAT_FAIRYS_SWORD);} + if(!RemoveDoubleDefense){AddItemToMainPool(DOUBLE_DEFENSE);} + } //REMOVE DD MAYBE? if (RemoveDoubleDefense) { //Prob not needed since its not added unless this is off diff --git a/source/menu.cpp b/source/menu.cpp index 9c2ef16..559b6d2 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -320,7 +320,7 @@ void UpdateResetToDefaultsMenu(u32 kDown) { printf("\x1b[24;5HSettings have been reset to defaults."); } } - +u16 menuIdx2; void UpdateGenerateMenu(u32 kDown) { if (!choosePlayOption) { if ((kDown & KEY_A) != 0) { @@ -328,6 +328,8 @@ void UpdateGenerateMenu(u32 kDown) { consoleSelect(&bottomScreen); consoleClear(); choosePlayOption = true; + menuIdx2 = currentMenu->menuIdx; + currentMenu->menuIdx = 0; } } else { @@ -335,6 +337,7 @@ void UpdateGenerateMenu(u32 kDown) { consoleSelect(&bottomScreen); consoleClear(); choosePlayOption = false; + currentMenu->menuIdx = menuIdx2; } else if ((kDown & KEY_A) !=0) { Settings::Version = currentMenu->menuIdx; diff --git a/source/settings.cpp b/source/settings.cpp index cef127b..8eec3ca 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -814,8 +814,9 @@ namespace Settings { return ctx; } - u8 startingBottleValue; u8 StartingBottleConvert(u8 startingBottle) { + u8 startingBottleValue = 0; + if (startingBottle == u8(1)) { startingBottleValue = 0x12;//Empty Bottle } @@ -877,7 +878,6 @@ namespace Settings { startingBottleValue = 0x27;//Spoiled Mystery Milk } - return startingBottleValue; } From c63c3dc83661b8854c656ed91220f0909c3eefa3 Mon Sep 17 00:00:00 2001 From: Phlex Date: Mon, 25 Dec 2023 10:20:04 -0600 Subject: [PATCH 13/87] Update submodule. Update map names. --- Z3DR | 2 +- source/item_list.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Z3DR b/Z3DR index a32713e..60f3b61 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit a32713e03f03daf9e1531085b035db2601152915 +Subproject commit 60f3b61bae09047108f72ba9210fa8dad2ce2e0e diff --git a/source/item_list.cpp b/source/item_list.cpp index bd0b6ac..cb9c67f 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -146,9 +146,9 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[CLOCK_TOWN_MAP] = Item(false, false, &noVariable, Text{"Clock Town Map", "Carte de Bourg-Clocher", "Mapa de la Cuidad Reloj"}, CLOCK_TOWN_MAP, (u32)GetItemID::GI_MAP_OF_CLOCK_TOWN, ITEMTYPE_MAP); itemTable[WOODFALL_MAP] = Item(false, false, &noVariable, Text{"Woodfall Map", "Carte du Bois-Cascade", "Mapa del Bosque Catarata"}, WOODFALL_MAP, (u32)GetItemID::GI_MAP_OF_WOODFALL, ITEMTYPE_MAP); itemTable[SNOWHEAD_MAP] = Item(false, false, &noVariable, Text{"Snowhead Map", "Carte du Pic Des Neiges", "Mapa del Pico Nevado"}, SNOWHEAD_MAP, (u32)GetItemID::GI_MAP_OF_SNOWHEAD, ITEMTYPE_MAP); - itemTable[GREAT_BAY_MAP] = Item(false, false, &noVariable, Text{"Great Bay Map", "Carte du Plage de la Grande Baie", "Mapa del Costa de la Gran Bahia"}, ROMANI_RANCH_MAP, (u32)GetItemID::GI_MAP_OF_ROMANI_RANCH, ITEMTYPE_MAP); - itemTable[STONE_TOWER_MAP] = Item(false, false, &noVariable, Text{"Stone Tower Map", "Carte du Forteresse de Pierre", "Mapa del Torre de Piedra"}, GREAT_BAY_MAP, (u32)GetItemID::GI_MAP_OF_GREAT_BAY, ITEMTYPE_MAP); - itemTable[ROMANI_RANCH_MAP] = Item(false, false, &noVariable, Text{"Romani Ranch Map", "Carte de Ranch Romani", "Mapa de Rancho Romani"}, STONE_TOWER_MAP, (u32)GetItemID::GI_MAP_OF_STONE_TOWER, ITEMTYPE_MAP); + itemTable[GREAT_BAY_MAP] = Item(false, false, &noVariable, Text{"Romani Ranch Map", "Carte de Ranch Romani", "Mapa de Rancho Romani"}, ROMANI_RANCH_MAP, (u32)GetItemID::GI_MAP_OF_ROMANI_RANCH, ITEMTYPE_MAP); + itemTable[STONE_TOWER_MAP] = Item(false, false, &noVariable, Text{"Great Bay Map", "Carte du Plage de la Grande Baie", "Mapa del Costa de la Gran Bahia"}, GREAT_BAY_MAP, (u32)GetItemID::GI_MAP_OF_GREAT_BAY, ITEMTYPE_MAP); + itemTable[ROMANI_RANCH_MAP] = Item(false, false, &noVariable, Text{"Stone Tower Map", "Carte du Forteresse de Pierre", "Mapa del Torre de Piedra"}, STONE_TOWER_MAP, (u32)GetItemID::GI_MAP_OF_STONE_TOWER, ITEMTYPE_MAP); itemTable[WOODFALL_TEMPLE_COMPASS] = Item(false, false, &noVariable, Text{"Woodfall Temple Compass", "Boussole de Temple de Bois-Cascade", "Brújula del Templo del Bosque Catarata"}, WOODFALL_TEMPLE_COMPASS, (u32)0xA7, ITEMTYPE_COMPASS ); itemTable[SNOWHEAD_TEMPLE_COMPASS] = Item(false, false, &noVariable, Text{"Snowhead Temple Compass", "Boussole de Temple du Pic des Neiges", "Brújula del Templo del Pico Nevado"}, SNOWHEAD_TEMPLE_COMPASS, (u32)0xA8, ITEMTYPE_COMPASS ); From e477bfc28dd04b1bdefcae24c61468b20f6c0ef5 Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Mon, 25 Dec 2023 14:38:52 -0600 Subject: [PATCH 14/87] Various Fixes 2 -Adjust fill algorithm to not place deku merchant items separate, fixes a potential softlock issue with item placement. - Fixes Great Bay, Stone Tower, and Romani Ranch Maps not giving the correct map. - Adds Romani's game into location pool because it was missing for some reason. - Adds initial Scarce and Minimal Item Pool settings, will likely need to be adjusted later. - Adjusts logic for entering the Clock Town Observatory from East Clock Town, Now requires BombersNotebook or the new Skip Bombers Minigame option, this is done as Jim will not allow you to repeat the game to get the code again even if you do not currently own the notebook. - Adds SkipBombersMinigame option, this will both set the code to 11111 and move the bomber NPC so you can just walk in. --- source/fill.cpp | 4 +-- source/include/setting_descriptions.hpp | 3 +- source/include/settings.hpp | 1 + source/item_list.cpp | 6 ++-- source/item_location.cpp | 1 + source/item_pool.cpp | 37 +++++++++++++++++-------- source/location_access.cpp | 2 +- source/setting_descriptions.cpp | 5 ++++ source/settings.cpp | 5 +++- 9 files changed, 44 insertions(+), 20 deletions(-) diff --git a/source/fill.cpp b/source/fill.cpp index 5dd27cc..658f262 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -826,10 +826,10 @@ int Fill() { } //Then Place Deku Merchant Items - if(ShuffleMerchants) { + /* if(ShuffleMerchants) { std::vector dekuTrades = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_TRADE;}); AssumedFill(dekuTrades, allLocations); - } + } */ //Then Place songs if song shuffle is set to specific locations /* diff --git a/source/include/setting_descriptions.hpp b/source/include/setting_descriptions.hpp index a6c8b27..e3083d2 100644 --- a/source/include/setting_descriptions.hpp +++ b/source/include/setting_descriptions.hpp @@ -223,4 +223,5 @@ extern string_view ingameSpoilersButtonDesc; extern string_view compassShowWotHDesc; extern string_view skipHMSCutsceneDesc; extern string_view skipDarmaniCutsceneDesc; -extern string_view skipMikauCutsceneDesc; \ No newline at end of file +extern string_view skipMikauCutsceneDesc; +extern string_view skipBombersMinigameDesc; \ No newline at end of file diff --git a/source/include/settings.hpp b/source/include/settings.hpp index 4e251b4..3075003 100644 --- a/source/include/settings.hpp +++ b/source/include/settings.hpp @@ -421,6 +421,7 @@ namespace Settings { extern Option IngameSpoilers; extern Option MenuOpeningButton; extern Option RsDurability; + extern Option SkipBombersMinigame; extern std::vectorotherSettingsOptions; //Comfort diff --git a/source/item_list.cpp b/source/item_list.cpp index 379516c..e56c001 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -146,9 +146,9 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[CLOCK_TOWN_MAP] = Item(false, false, &noVariable, Text{"Clock Town Map", "Carte de Bourg-Clocher", "Mapa de la Cuidad Reloj"}, CLOCK_TOWN_MAP, (u32)GetItemID::GI_MAP_OF_CLOCK_TOWN, ITEMTYPE_MAP); itemTable[WOODFALL_MAP] = Item(false, false, &noVariable, Text{"Woodfall Map", "Carte du Bois-Cascade", "Mapa del Bosque Catarata"}, WOODFALL_MAP, (u32)GetItemID::GI_MAP_OF_WOODFALL, ITEMTYPE_MAP); itemTable[SNOWHEAD_MAP] = Item(false, false, &noVariable, Text{"Snowhead Map", "Carte du Pic Des Neiges", "Mapa del Pico Nevado"}, SNOWHEAD_MAP, (u32)GetItemID::GI_MAP_OF_SNOWHEAD, ITEMTYPE_MAP); - itemTable[GREAT_BAY_MAP] = Item(false, false, &noVariable, Text{"Great Bay Map", "Carte du Plage de la Grande Baie", "Mapa del Costa de la Gran Bahia"}, ROMANI_RANCH_MAP, (u32)GetItemID::GI_MAP_OF_ROMANI_RANCH, ITEMTYPE_MAP); - itemTable[STONE_TOWER_MAP] = Item(false, false, &noVariable, Text{"Stone Tower Map", "Carte du Forteresse de Pierre", "Mapa del Torre de Piedra"}, GREAT_BAY_MAP, (u32)GetItemID::GI_MAP_OF_GREAT_BAY, ITEMTYPE_MAP); - itemTable[ROMANI_RANCH_MAP] = Item(false, false, &noVariable, Text{"Romani Ranch Map", "Carte de Ranch Romani", "Mapa de Rancho Romani"}, STONE_TOWER_MAP, (u32)GetItemID::GI_MAP_OF_STONE_TOWER, ITEMTYPE_MAP); + itemTable[GREAT_BAY_MAP] = Item(false, false, &noVariable, Text{"Great Bay Map", "Carte du Plage de la Grande Baie", "Mapa del Costa de la Gran Bahia"}, GREAT_BAY_MAP, (u32)GetItemID::GI_MAP_OF_GREAT_BAY, ITEMTYPE_MAP); + itemTable[STONE_TOWER_MAP] = Item(false, false, &noVariable, Text{"Stone Tower Map", "Carte du Forteresse de Pierre", "Mapa del Torre de Piedra"}, STONE_TOWER_MAP, (u32)GetItemID::GI_MAP_OF_STONE_TOWER, ITEMTYPE_MAP); + itemTable[ROMANI_RANCH_MAP] = Item(false, false, &noVariable, Text{"Romani Ranch Map", "Carte de Ranch Romani", "Mapa de Rancho Romani"}, ROMANI_RANCH_MAP, (u32)GetItemID::GI_MAP_OF_ROMANI_RANCH, ITEMTYPE_MAP); itemTable[WOODFALL_TEMPLE_COMPASS] = Item(false, false, &noVariable, Text{"Woodfall Temple Compass", "Boussole de Temple de Bois-Cascade", "Brújula del Templo del Bosque Catarata"}, WOODFALL_TEMPLE_COMPASS, (u32)0xA7, ITEMTYPE_COMPASS ); itemTable[SNOWHEAD_TEMPLE_COMPASS] = Item(false, false, &noVariable, Text{"Snowhead Temple Compass", "Boussole de Temple du Pic des Neiges", "Brújula del Templo del Pico Nevado"}, SNOWHEAD_TEMPLE_COMPASS, (u32)0xA8, ITEMTYPE_COMPASS ); diff --git a/source/item_location.cpp b/source/item_location.cpp index 97f6cb1..65450cb 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -912,6 +912,7 @@ std::vector overworldLocations = { ROMANI_RANCH_DOG_RACE, ROMANI_RANCH_GROG, ROMANI_RANCH_CREMIA_ESCORT, + ROMANI_RANCH_ROMANIS_GAME, ROMANI_RANCH_COW_1, ROMANI_RANCH_COW_2, ROMANI_RANCH_COW_3, diff --git a/source/item_pool.cpp b/source/item_pool.cpp index 05ff813..4d5d92c 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -813,13 +813,27 @@ static void PlaceVanillaShopItems() { PlaceItemInLocation(MILK_ROAD_GORMAN_MILK_BUY, MILK); //other 2 scrub sales handled in beans and main inventory }; -/* + static void SetScarceItemPool() { - //todo + ReplaceMaxItem(BOMBCHU_5, 1); + ReplaceMaxItem(BOMBCHU_10, 3); + ReplaceMaxItem(PROGRESSIVE_MAGIC_METER, 1); + ReplaceMaxItem(DOUBLE_DEFENSE, 0); + ReplaceMaxItem(PROGRESSIVE_BOW, 2); + ReplaceMaxItem(PROGRESSIVE_BOMB_BAG, 2); + ReplaceMaxItem(HEART_CONTAINER, 0); + }; static void SetMinimalItemPool(){ - //todo -};*/ + ReplaceMaxItem(BOMBCHU_5, 1); + ReplaceMaxItem(BOMBCHU_10, 0); + ReplaceMaxItem(BOMBCHU_20,0); + ReplaceMaxItem(PROGRESSIVE_MAGIC_METER, 1); + ReplaceMaxItem(PROGRESSIVE_BOW,1); + ReplaceMaxItem(PROGRESSIVE_BOMB_BAG, 1); + ReplaceMaxItem(PIECE_OF_HEART,0); + //ReplaceMaxItem(HEART_CONTAINER, 2); +}; void GenerateItemPool() { @@ -1207,18 +1221,18 @@ void GenerateItemPool() { // TO-DO ItemPool for extra items & Scarce and Minimal pools - /*if (ItemPoolValue.Is(ITEMPOOL_PLENTIFUL)) { + //if (ItemPoolValue.Is(ITEMPOOL_PLENTIFUL)) { //AddItemsToPool(ItemPool, easyItems); - } - else { + //} + //else { //AddItemsToPool(ItemPool, normalItems); - } - if (ItemPoolValue.Is(ITEMPOOL_SCARCE)) {//TO DO + //} + if (ItemPoolValue.Is(ItemPoolSetting::ITEMPOOL_SCARCE)) {//TO DO SetScarceItemPool(); } - else if (ItemPoolValue.Is(ITEMPOOL_MINIMAL)) { + else if (ItemPoolValue.Is(ItemPoolSetting::ITEMPOOL_MINIMAL)) { SetMinimalItemPool(); - }*/ + } if (ItemPoolValue.Is(ItemPoolSetting::ITEMPOOL_PLENTIFUL)) { @@ -1242,7 +1256,6 @@ void GenerateItemPool() { AddItemToPool(PendingJunkPool, STONE_TOWER_TEMPLE_BOSS_KEY); } - } //Replace ice traps with junk from the pending junk pool if necessary diff --git a/source/location_access.cpp b/source/location_access.cpp index 9271156..d50027b 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -282,7 +282,7 @@ void AreaTable_Init() { //Exits Entrance(N_CLOCK_TOWN, {[]{return true;}}), Entrance(TERMINA_FIELD, {[]{return true;}}), - Entrance(CLOCK_TOWN_OBSERVATORY, {[]{return true;}}), + Entrance(CLOCK_TOWN_OBSERVATORY, {[]{return BombersNotebook || SkipBombersMinigame;}}), Entrance(STOCKPOTINN, {[]{return true;}}),//to-Do StockPotInn Night Access Entrance(CLOCK_TOWN_BAR, {[]{return RomanisMask;}}), Entrance(CLOCK_TOWN_HONEY_DARLING, {[]{return true;}}), diff --git a/source/setting_descriptions.cpp b/source/setting_descriptions.cpp index 742567a..5953d54 100644 --- a/source/setting_descriptions.cpp +++ b/source/setting_descriptions.cpp @@ -659,6 +659,11 @@ string_view customNotebookDesc = "Change the button to open the Bomber's N "Default is Start"; // string_view ingameSpoilersButtonDesc = "Change the button to open the ingame Spoiler Log\n"// "Default is Select"; // +/*------------------------------- // +| BOMBERS MINIGAME SKIP | // +-------------------------------*/ // +string_view skipBombersMinigameDesc = "Skip Bomber's Minigame to get the code.\n" // + "Sets the code to 11111."; // /*------------------------------ // | GLITCHES | // diff --git a/source/settings.cpp b/source/settings.cpp index 8eec3ca..d59ef1b 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -339,9 +339,11 @@ namespace Settings { Option RsDurability = Option::U8("Razor Sword Durability", { "Vanilla", "Infinite" }, { rsDurabilityVanilla, rsDurabilityInf}); Option IceTrapValue = Option::U8("Ice Traps", { "Off", "Normal", "Extra", "Mayhem", "Onslaught" }, { iceTrapsOff, iceTrapsNormal, iceTrapsExtra, iceTrapsMayhem, iceTrapsOnslaught }, OptionCategory::Setting, (u8)IceTrapSetting::ICETRAPS_NORMAL); Option CompassShowWoTH = Option::Bool("Compasses Show WotH", {"Off", "On"}, { compassShowWotHDesc}); + Option SkipBombersMinigame = Option::Bool("Skip Bombers' Minigame", {"Off", "On"}, { skipBombersMinigameDesc}); std::vectorotherSettingsOptions = { &IceTrapValue, + &SkipBombersMinigame, //&RandomTrapDmg, &GossipStoneHints, //&ClearerHints, @@ -673,6 +675,7 @@ namespace Settings { //ctx.shuffleMagicBeans = (ShuffleMagicBeans) ? 1 : 0; ctx.compassesShowWotH = (CompassShowWoTH) ? 1 : 0; + ctx.skipBombersMinigame = (SkipBombersMinigame) ? 1 : 0; ctx.generateSpoilerLog = (GenerateSpoilerLog) ? 1 : 0; @@ -816,7 +819,7 @@ namespace Settings { u8 StartingBottleConvert(u8 startingBottle) { u8 startingBottleValue = 0; - + if (startingBottle == u8(1)) { startingBottleValue = 0x12;//Empty Bottle } From fc0bd5317cef2281609024a5702957ce9090e846 Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Wed, 27 Dec 2023 19:54:32 -0600 Subject: [PATCH 15/87] Logic & Spoiler Log Updates - Removes extra Bomb Bag from Pool - Exchanges the static 30 Arrows & 10 Bombchu items from the list of items for the Shuffle Moon Items options for junk items - Fixes ConditionsMet function so it actually checks for conditions - Removes WIP tag from many settings descriptions as they are now no longer WIP, Also removes iceTrapsNormal description as it is redundant with iceTrapsOff and adjusted iceTrapsOff description to indicate that the base game also has 0 ice traps. - Removes Normal Ice Traps option from settings - Adds additional checks in the spoiler log generation to always reveal starting items that are given before game start and cannot be obtained otherwise. Also adds checks to always reveal Stray Fairies, Skulltula Token, and Song locations temporarily until they are added as checks. --- source/include/location_access.hpp | 6 +++ source/item_pool.cpp | 10 +++-- source/location_access.cpp | 5 ++- source/setting_descriptions.cpp | 71 +++++++++++------------------- source/settings.cpp | 2 +- source/spoiler_log.cpp | 70 ++++++++++++++++++++++++++++- 6 files changed, 111 insertions(+), 53 deletions(-) diff --git a/source/include/location_access.hpp b/source/include/location_access.hpp index e59044e..8b0dbcb 100644 --- a/source/include/location_access.hpp +++ b/source/include/location_access.hpp @@ -156,8 +156,14 @@ class Area { void ResetVariables(); + }; + /*extern std::array areaTable; + extern std::vector grottoEvents; + bool Here(const AreaKey area, ConditionFn condition); + bool HasAccessTo(const AreaKey area);*/ + namespace Areas { extern void AccessReset(); diff --git a/source/item_pool.cpp b/source/item_pool.cpp index 05ff813..696092e 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -371,7 +371,7 @@ const std::array progressiveItemsList = { PROGRESSIVE_BOW, PROGRESSIVE_BOW, PROGRESSIVE_BOW, //1 Bow + 2 Quiver Upgrades - PROGRESSIVE_BOMB_BAG, + //PROGRESSIVE_BOMB_BAG, //PROGRESSIVE_BOMB_BAG, //PROGRESSIVE_BOMB_BAG, //3 Bomb Bags - 2 are in Bomb Shop - part of Shopsanity //PROGRESSIVE_MAGIC_METER, @@ -459,8 +459,8 @@ const std::array scrubPurchaseItems = { const std::array moonItemList = { //2Chests and 4 trial rewards, FDM separate - ARROWS_30, - BOMBCHU_10, + //ARROWS_30, -just replace with junk + //BOMBCHU_10, PIECE_OF_HEART, PIECE_OF_HEART, PIECE_OF_HEART, @@ -954,7 +954,9 @@ void GenerateItemPool() { if (ShuffleMasks) { AddItemsToPool(ItemPool, maskList); } - else {PlaceVanillaMasks();} + else { + PlaceVanillaMasks(); + } //SONG SHUFFLE //add extra songs only if song shuffle is anywhere diff --git a/source/location_access.cpp b/source/location_access.cpp index 9271156..2eeb2df 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -16,10 +16,11 @@ using namespace Settings; bool LocationAccess::ConditionsMet() const { - Area* parentRegion = AreaTable(Location(location)->GetParentRegionKey()); + bool conditionsMet = false; - if (parentRegion->HasAccess()) { + UpdateHelpers(); + if (GetConditionsMet()) { conditionsMet= true; } diff --git a/source/setting_descriptions.cpp b/source/setting_descriptions.cpp index 742567a..c50f84c 100644 --- a/source/setting_descriptions.cpp +++ b/source/setting_descriptions.cpp @@ -122,76 +122,61 @@ string_view shuffleMainInventoryDesc = "Shuffle Main Inventory Items\n" string_view shuffleTransformationDesc = "Shuffles Deku, Goron, and Zora Masks"; // string_view shuffleFierceDietyDesc = "Shuffles Fierce Diety Mask"; // string_view shuffleMoonItemsDesc = "Shuffles Items from the Moon into the pool\n" // - "Includes 4 Pieces of Heart, 10 Bombchu & 30 Arrows"; + "Includes 4 Pieces of Heart, and 2 junk items"; // /*------------------------------ // | MAPS AND COMPASSES | // ------------------------------*/ // -string_view mapCompassStartWith = "**OPTION CURRENTLY WIP**\n" // - "Maps and Compasses are given to you from the\n" // +string_view mapCompassStartWith = "Maps and Compasses are given to you from the\n" // "start. This will add a small amount of money and\n" "refill items to the pool."; // string_view mapCompassVanilla = "Maps and Compasses will appear in their vanilla\n"// "locations."; // -string_view mapCompassOwnDungeon = "**OPTION CURRENTLY WIP**\n" // - "Maps and Compasses can only appear in their\n" // +string_view mapCompassOwnDungeon = "Maps and Compasses can only appear in their\n" // "respective dungeon."; // -string_view mapCompassAnyDungeon = "**OPTION CURRENTLY WIP**\n" // - "Maps and Compasses can only appear in a dungeon,\n"// +string_view mapCompassAnyDungeon = "Maps and Compasses can only appear in a dungeon,\n"// "but not necessarily the dungeon they are for."; // -string_view mapCompassOverworld = "**OPTION CURRENTLY WIP**\n" // - "Maps and Compasses can only appear outside of\n" // +string_view mapCompassOverworld = "Maps and Compasses can only appear outside of\n" // "dungeons."; // -string_view mapCompassAnywhere = "**OPTION CURRENTLY WIP**\n" // - "Maps and Compasses can appear anywhere in the\n" // +string_view mapCompassAnywhere = "Maps and Compasses can appear anywhere in the\n" // "world."; // /*------------------------------ // | SMALL KEYS | // ------------------------------*/ // -string_view smallKeyStartWith = "**OPTION CURRENTLY WIP**\n" // - "Small Keys are given to you from the start so you\n" +string_view smallKeyStartWith = "Small Keys are given to you from the start so you\n" "won't have to worry about locked doors. An easier\n" "mode."; // -string_view smallKeyVanilla = "Small Keys will appear in their vanilla locations.";// -string_view smallKeyOwnDungeon = "**OPTION CURRENTLY WIP**\n" // - "Small Keys can only appear in their respective\n" // +string_view smallKeyVanilla = "Small Keys will appear in their vanilla locations.";// +string_view smallKeyOwnDungeon = "Small Keys can only appear in their respective\n" // "dungeon. "; // -string_view smallKeyAnyDungeon = "**OPTION CURRENTLY WIP**\n" // - "Small Keys can only appear inside of any dungeon,\n" +string_view smallKeyAnyDungeon = "Small Keys can only appear inside of any dungeon,\n" "but won't necessarily be in the dungeon that the\n" "key is for. A difficult mode since it is more\n" // "likely to need to enter a dungeon multiple times."; -string_view smallKeyOverworld = "**OPTION CURRENTLY WIP**\n" // - "Small Keys can only appear outside of dungeons.\n"// +string_view smallKeyOverworld = "Small Keys can only appear outside of dungeons.\n"// "You may need to enter a dungeon multiple times to\n" "gain items to access the overworld locations with\n" "the keys required to finish a dungeon."; // -string_view smallKeyAnywhere = "**OPTION CURRENTLY WIP**\n" // - "Small Keys can appear anywhere in the world. A\n" // +string_view smallKeyAnywhere = "Small Keys can appear anywhere in the world. A\n" // "difficult mode since it is more likely to need to\n" "enter a dungeon multiple times."; // /*------------------------------ // | BOSS KEYS | // ------------------------------*/ // -string_view bossKeyStartWith = "**OPTION CURRENTLY WIP**\n" // - "Boss Keys are given to you from the start so you\n" +string_view bossKeyStartWith = "Boss Keys are given to you from the start so you\n" "won't have to worry about boss doors. An easier\n"// "mode."; // string_view bossKeyVanilla = "Boss Keys will appear in their vanilla locations.";// -string_view bossKeyOwnDungeon = "**OPTION CURRENTLY WIP**\n" // - "Boss Keys can only appear in their respective\n" // +string_view bossKeyOwnDungeon = "Boss Keys can only appear in their respective\n" // "dungeon."; // -string_view bossKeyAnyDungeon = "**OPTION CURRENTLY WIP**\n" // - "Boss Keys can only appear inside of any dungeon,\n" +string_view bossKeyAnyDungeon = "Boss Keys can only appear inside of any dungeon,\n" "but won't necessarily be in the dungeon that the\n" "key is for. A difficult mode since it is more\n" // "likely to need to enter a dungeon multiple times."; -string_view bossKeyOverworld = "**OPTION CURRENTLY WIP**\n" // - "Boss Keys can only appear outside of dungeons.\n" // +string_view bossKeyOverworld = "Boss Keys can only appear outside of dungeons.\n" // "You may need to enter a dungeon without the boss\n" "key to get items required to find the key in the\n" "overworld."; // -string_view bossKeyAnywhere = "**OPTION CURRENTLY WIP**\n" // - "Boss Keys can appear anywhere in the world. A\n" // +string_view bossKeyAnywhere = "Boss Keys can appear anywhere in the world. A\n" // "difficult mode since it is more likely to need to\n" "enter a dungeon multiple times."; // /*------------------------------ // @@ -254,8 +239,7 @@ string_view shuffleStartShield = "**OPTION CURRENTLY WIP**\n" | SHUFFLE GREAT FAIRY REWARDS | // ------------------------------*/ // string_view shuffleGFVanilla = "Great Fairy Rewards will be Vanilla"; // -string_view shuffleGFSelf = "**OPTION CURRENTLY WIP**\n" // - "Great Fairy Rewards will be shuffled among \n" // +string_view shuffleGFSelf = "Great Fairy Rewards will be shuffled among \n" // "other Great Fairy Locations"; // string_view shuffleGFAnywhere = "Great Fairy Rewards can be anywhere"; // /*------------------------------ // @@ -309,8 +293,7 @@ string_view songsDungeonRewards = "**OPTION CURRENTLY WIP**\n" string_view songsAllLocations = "**OPTION CURRENTLY WIP**\n" // "Songs can appear in any location."; // // -string_view shuffleSoaringVanilla = "**OPTION CURRENTLY WIP**\n" // - "Sets Song of Soaring to its Vanilla Location"; // +string_view shuffleSoaringVanilla = "Sets Song of Soaring to its Vanilla Location"; // string_view shuffleSoaringRandom = "**OPTION CURRENTLY WIP**\n" // "Randomizes Song of Soaring"; // /*------------------------------ // @@ -389,21 +372,19 @@ string_view advancedTrapDmgDesc = "**OPTION CURRENTLY WIP**\n" /*------------------------------ // | ITEM POOL | // ------------------------------*/ // -string_view itemPoolPlentiful = "**OPTION CURRENTLY WIP**\n" // - "Extra major items are added to the pool."; // +string_view itemPoolPlentiful = "Extra major items are added to the pool."; // string_view itemPoolBalanced = "Original item pool."; // -string_view itemPoolScarce = "**OPTION CURRENTLY WIP**\n" // - "Some excess items are removed, including health\n"// +string_view itemPoolScarce = "Some excess items are removed, including health\n"// "upgrades."; // -string_view itemPoolMinimal = "**OPTION CURRENTLY WIP**\n" // - "Most excess items are removed."; // +string_view itemPoolMinimal = "Most excess items are removed."; // // /*------------------------------ // | ICE TRAPS | // ------------------------------*/ // -string_view iceTrapsOff = "All Ice Traps are removed."; // -string_view iceTrapsNormal = "Only Ice Traps from the base item pool are placed."; -string_view iceTrapsExtra = "Chance to add extra Ice Traps when junk items are\n" +string_view iceTrapsOff = "All Ice Traps are removed.\n" // + "This is the same as Vanilla as the base game\n" // + "Does not have any Ice Traps."; // +string_view iceTrapsExtra = "Chance to add Ice Traps when junk items are\n" "added to the itempool."; // string_view iceTrapsMayhem = "All added junk items will be Ice Traps."; // string_view iceTrapsOnslaught = "All junk items will be replaced by Ice Traps, even" diff --git a/source/settings.cpp b/source/settings.cpp index 8eec3ca..d755677 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -337,7 +337,7 @@ namespace Settings { //Option MenuOpeningButton = Option::U8("Open Info Menu with", { "Select","Start","D-Pad Up","D-Pad Down","D-Pad Right","D-Pad Left", }, { menuButtonDesc }); Option RandomTrapDmg = Option::U8("Random Trap Damage", { "Off", "Basic", "Advanced" }, { randomTrapDmgDesc, basicTrapDmgDesc, advancedTrapDmgDesc }); Option RsDurability = Option::U8("Razor Sword Durability", { "Vanilla", "Infinite" }, { rsDurabilityVanilla, rsDurabilityInf}); - Option IceTrapValue = Option::U8("Ice Traps", { "Off", "Normal", "Extra", "Mayhem", "Onslaught" }, { iceTrapsOff, iceTrapsNormal, iceTrapsExtra, iceTrapsMayhem, iceTrapsOnslaught }, OptionCategory::Setting, (u8)IceTrapSetting::ICETRAPS_NORMAL); + Option IceTrapValue = Option::U8("Ice Traps", { "Off", "Extra", "Mayhem", "Onslaught" }, { iceTrapsOff, iceTrapsExtra, iceTrapsMayhem, iceTrapsOnslaught }, OptionCategory::Setting, (u8)IceTrapSetting::ICETRAPS_OFF); Option CompassShowWoTH = Option::Bool("Compasses Show WotH", {"Off", "On"}, { compassShowWotHDesc}); std::vectorotherSettingsOptions = { diff --git a/source/spoiler_log.cpp b/source/spoiler_log.cpp index 07cf4bd..fe7856e 100644 --- a/source/spoiler_log.cpp +++ b/source/spoiler_log.cpp @@ -212,7 +212,75 @@ static void WriteIngameSpoilerLog() { spoilerData.ItemLocations[spoilerItemIndex].OverrideType = loc->GetOverrideType(); spoilerData.ItemLocations[spoilerItemIndex].LocationScene = loc->GetCollectionCheck().scene; spoilerData.ItemLocations[spoilerItemIndex].LocationFlag = loc->GetCollectionCheck().flag; - + //Always Reveal unreachable checks + if (key == CLOCK_TOWER_OCARINA_OF_TIME) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + if (key == HMS_STARTING_SWORD) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + if (key == HMS_STARTING_SHIELD) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + //Reveal Stray Fairies and Skulltula Tokens as they're not randomized yet + if (Location(key)->GetPlacedItemKey() == CT_STRAY_FAIRY) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + if (Location(key)->GetPlacedItemKey() == WF_STRAY_FAIRY) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + if (Location(key)->GetPlacedItemKey() == SH_STRAY_FAIRY) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + if (Location(key)->GetPlacedItemKey() == GBT_STRAY_FAIRY) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + if (Location(key)->GetPlacedItemKey() == ST_STRAY_FAIRY) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + if (Location(key)->GetPlacedItemKey() == OCEANSIDE_SKULLTULA_TOKEN) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + if (Location(key)->GetPlacedItemKey() == SWAMP_SKULLTULA_TOKEN) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } + //Reveal Songs as they're not randomized yet + if (Location(key)->IsCategory(Category::cSong)) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_NEVER; + spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; + spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; + } auto checkGroup = loc->GetCollectionCheckGroup(); spoilerData.ItemLocations[spoilerItemIndex].Group = checkGroup; From 1999ce07c327627d405d2c345eb108029b27c504 Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Wed, 27 Dec 2023 19:55:52 -0600 Subject: [PATCH 16/87] Update Z3DR --- Z3DR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Z3DR b/Z3DR index 60f3b61..a435f8a 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 60f3b61bae09047108f72ba9210fa8dad2ce2e0e +Subproject commit a435f8ae7ff2aabf5c7bfbb92ff05a149dbcc6b7 From 2377526d03e0d703abbfcb7e2f693f4a38802adb Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Sun, 31 Dec 2023 16:59:47 -0600 Subject: [PATCH 17/87] Logic-Update-3 Adjust SpoilerLog Data to pass correct Scene & Flag value --- source/fill.cpp | 4 +-- source/include/setting_descriptions.hpp | 3 +- source/include/settings.hpp | 1 + source/item_list.cpp | 14 +++++----- source/item_location.cpp | 5 ++-- source/item_pool.cpp | 37 +++++++++++++++++-------- source/location_access.cpp | 2 +- source/setting_descriptions.cpp | 5 ++++ source/settings.cpp | 5 +++- source/spoiler_log.cpp | 6 ++-- 10 files changed, 54 insertions(+), 28 deletions(-) diff --git a/source/fill.cpp b/source/fill.cpp index 5dd27cc..658f262 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -826,10 +826,10 @@ int Fill() { } //Then Place Deku Merchant Items - if(ShuffleMerchants) { + /* if(ShuffleMerchants) { std::vector dekuTrades = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).GetItemType() == ITEMTYPE_TRADE;}); AssumedFill(dekuTrades, allLocations); - } + } */ //Then Place songs if song shuffle is set to specific locations /* diff --git a/source/include/setting_descriptions.hpp b/source/include/setting_descriptions.hpp index a6c8b27..e3083d2 100644 --- a/source/include/setting_descriptions.hpp +++ b/source/include/setting_descriptions.hpp @@ -223,4 +223,5 @@ extern string_view ingameSpoilersButtonDesc; extern string_view compassShowWotHDesc; extern string_view skipHMSCutsceneDesc; extern string_view skipDarmaniCutsceneDesc; -extern string_view skipMikauCutsceneDesc; \ No newline at end of file +extern string_view skipMikauCutsceneDesc; +extern string_view skipBombersMinigameDesc; \ No newline at end of file diff --git a/source/include/settings.hpp b/source/include/settings.hpp index 4e251b4..3075003 100644 --- a/source/include/settings.hpp +++ b/source/include/settings.hpp @@ -421,6 +421,7 @@ namespace Settings { extern Option IngameSpoilers; extern Option MenuOpeningButton; extern Option RsDurability; + extern Option SkipBombersMinigame; extern std::vectorotherSettingsOptions; //Comfort diff --git a/source/item_list.cpp b/source/item_list.cpp index 5ee05df..e56c001 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -94,9 +94,9 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[EMPTY_BOTTLE] = Item(true, false, &HasBottle, Text{"Empty Bottle", "Flacon vide", "Botella vacía" }, EMPTY_BOTTLE, (u32)GetItemID::GI_BOTTLE_EMPTY, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_MILK] = Item(true, false, &AlienBottle, Text{"Bottle with Milk", "Flacon de lait", "Botella de leche Lon Lon"}, BOTTLE_WITH_MILK, (u32)GetItemID::GI_BOTTLE_MILK, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_RED_POTION] = Item(true, false, &WitchBottle, Text{"Bottle with Red Potion", "Flacon de potion rouge", "Botella de poción roja"}, BOTTLE_WITH_RED_POTION, (u32)GetItemID::GI_BOTTLE_POTION_RED, ITEMTYPE_ITEM); - itemTable[GOLD_DUST] = Item(true, true, &GoronRaceBottle, Text{"Gold Dust", "Poudre d'Or", "Polvo de Oro" }, GOLD_DUST, (u32)GetItemID::GI_BOTTLE_GOLD_DUST_TWO, ITEMTYPE_ITEM); - itemTable[CHATEAU_ROMANI] = Item(true, false, &ChateauBottle, Text{"Chateau Romani", "Chateau Romani", "Reserva Romani" }, CHATEAU_ROMANI, (u32)GetItemID::GI_BOTTLE_CHATEAU_ROMANI_TWO, ITEMTYPE_ITEM); - itemTable[BOTTLE_WITH_MYSTERY_MILK] = Item(true, true, &MysteryMilkBottle, Text{"Bottle with Mystery Milk", "Bottle with Mystery Milk", "Bottle with Mystery Milk"}, BOTTLE_WITH_MYSTERY_MILK, (u32)GetItemID::GI_BOTTLE_MYSTERY_MILK_TWO, ITEMTYPE_ITEM); + itemTable[GOLD_DUST] = Item(true, true, &GoronRaceBottle, Text{"Gold Dust", "Poudre d'Or", "Polvo de Oro" }, GOLD_DUST, (u32)GetItemID::GI_BOTTLE_GOLD_DUST, ITEMTYPE_ITEM); + itemTable[CHATEAU_ROMANI] = Item(true, false, &ChateauBottle, Text{"Chateau Romani", "Chateau Romani", "Reserva Romani" }, CHATEAU_ROMANI, (u32)GetItemID::GI_BOTTLE_CHATEAU_ROMANI, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_MYSTERY_MILK] = Item(true, true, &MysteryMilkBottle, Text{"Bottle with Mystery Milk", "Bottle with Mystery Milk", "Bottle with Mystery Milk"}, BOTTLE_WITH_MYSTERY_MILK, (u32)GetItemID::GI_BOTTLE_MYSTERY_MILK, ITEMTYPE_ITEM); //Other bottle items itemTable[DEKU_PRINCESS] = Item(true, true, &DekuPrincess, Text{"Deku Princess", "Princesse Mojo", "Princesa Deku"}, DEKU_PRINCESS, (u32)GetItemID::GI_DEKU_PRINCESS_FAIRY, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_FAIRY] = Item(false, true, &HasBottle, Text{"Bottle with Fairy", "Bottle with Fairy", "Bottle with Fairy",}, BOTTLE_WITH_FAIRY, (u32)GetItemID::GI_FAIRY, ITEMTYPE_ITEM); @@ -108,7 +108,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_TWO, ITEMTYPE_ITEM); + itemTable[SEAHORSE] = Item(false, 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 ); @@ -146,9 +146,9 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[CLOCK_TOWN_MAP] = Item(false, false, &noVariable, Text{"Clock Town Map", "Carte de Bourg-Clocher", "Mapa de la Cuidad Reloj"}, CLOCK_TOWN_MAP, (u32)GetItemID::GI_MAP_OF_CLOCK_TOWN, ITEMTYPE_MAP); itemTable[WOODFALL_MAP] = Item(false, false, &noVariable, Text{"Woodfall Map", "Carte du Bois-Cascade", "Mapa del Bosque Catarata"}, WOODFALL_MAP, (u32)GetItemID::GI_MAP_OF_WOODFALL, ITEMTYPE_MAP); itemTable[SNOWHEAD_MAP] = Item(false, false, &noVariable, Text{"Snowhead Map", "Carte du Pic Des Neiges", "Mapa del Pico Nevado"}, SNOWHEAD_MAP, (u32)GetItemID::GI_MAP_OF_SNOWHEAD, ITEMTYPE_MAP); - itemTable[GREAT_BAY_MAP] = Item(false, false, &noVariable, Text{"Romani Ranch Map", "Carte de Ranch Romani", "Mapa de Rancho Romani"}, ROMANI_RANCH_MAP, (u32)GetItemID::GI_MAP_OF_ROMANI_RANCH, ITEMTYPE_MAP); - itemTable[STONE_TOWER_MAP] = Item(false, false, &noVariable, Text{"Great Bay Map", "Carte du Plage de la Grande Baie", "Mapa del Costa de la Gran Bahia"}, GREAT_BAY_MAP, (u32)GetItemID::GI_MAP_OF_GREAT_BAY, ITEMTYPE_MAP); - itemTable[ROMANI_RANCH_MAP] = Item(false, false, &noVariable, Text{"Stone Tower Map", "Carte du Forteresse de Pierre", "Mapa del Torre de Piedra"}, STONE_TOWER_MAP, (u32)GetItemID::GI_MAP_OF_STONE_TOWER, ITEMTYPE_MAP); + itemTable[GREAT_BAY_MAP] = Item(false, false, &noVariable, Text{"Great Bay Map", "Carte du Plage de la Grande Baie", "Mapa del Costa de la Gran Bahia"}, GREAT_BAY_MAP, (u32)GetItemID::GI_MAP_OF_GREAT_BAY, ITEMTYPE_MAP); + itemTable[STONE_TOWER_MAP] = Item(false, false, &noVariable, Text{"Stone Tower Map", "Carte du Forteresse de Pierre", "Mapa del Torre de Piedra"}, STONE_TOWER_MAP, (u32)GetItemID::GI_MAP_OF_STONE_TOWER, ITEMTYPE_MAP); + itemTable[ROMANI_RANCH_MAP] = Item(false, false, &noVariable, Text{"Romani Ranch Map", "Carte de Ranch Romani", "Mapa de Rancho Romani"}, ROMANI_RANCH_MAP, (u32)GetItemID::GI_MAP_OF_ROMANI_RANCH, ITEMTYPE_MAP); itemTable[WOODFALL_TEMPLE_COMPASS] = Item(false, false, &noVariable, Text{"Woodfall Temple Compass", "Boussole de Temple de Bois-Cascade", "Brújula del Templo del Bosque Catarata"}, WOODFALL_TEMPLE_COMPASS, (u32)0xA7, ITEMTYPE_COMPASS ); itemTable[SNOWHEAD_TEMPLE_COMPASS] = Item(false, false, &noVariable, Text{"Snowhead Temple Compass", "Boussole de Temple du Pic des Neiges", "Brújula del Templo del Pico Nevado"}, SNOWHEAD_TEMPLE_COMPASS, (u32)0xA8, ITEMTYPE_COMPASS ); diff --git a/source/item_location.cpp b/source/item_location.cpp index 97f6cb1..a5ab9dc 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -912,6 +912,7 @@ std::vector overworldLocations = { ROMANI_RANCH_DOG_RACE, ROMANI_RANCH_GROG, ROMANI_RANCH_CREMIA_ESCORT, + ROMANI_RANCH_ROMANIS_GAME, ROMANI_RANCH_COW_1, ROMANI_RANCH_COW_2, ROMANI_RANCH_COW_3, @@ -1201,8 +1202,8 @@ void CreateItemOverrides() { //PlacementLog_Msg(std::to_string(loc->GetScene())); PlacementLog_Msg("\tScene: "); PlacementLog_Msg(std::to_string(loc->Key().scene)); - //PlacementLog_Msg("\tType: "); - //PlacementLog_Msg(std::to_string(loc->Key().type)); + PlacementLog_Msg("\tType: "); + PlacementLog_Msg(std::to_string((u8)loc->Key().type)); //PlacementLog_Msg("\tLoc's Flag: "); //PlacementLog_Msg(std::to_string(loc->GetFlag())); PlacementLog_Msg("\tFlag: "); diff --git a/source/item_pool.cpp b/source/item_pool.cpp index 696092e..76e6439 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -813,13 +813,27 @@ static void PlaceVanillaShopItems() { PlaceItemInLocation(MILK_ROAD_GORMAN_MILK_BUY, MILK); //other 2 scrub sales handled in beans and main inventory }; -/* + static void SetScarceItemPool() { - //todo + ReplaceMaxItem(BOMBCHU_5, 1); + ReplaceMaxItem(BOMBCHU_10, 3); + ReplaceMaxItem(PROGRESSIVE_MAGIC_METER, 1); + ReplaceMaxItem(DOUBLE_DEFENSE, 0); + ReplaceMaxItem(PROGRESSIVE_BOW, 2); + ReplaceMaxItem(PROGRESSIVE_BOMB_BAG, 2); + ReplaceMaxItem(HEART_CONTAINER, 0); + }; static void SetMinimalItemPool(){ - //todo -};*/ + ReplaceMaxItem(BOMBCHU_5, 1); + ReplaceMaxItem(BOMBCHU_10, 0); + ReplaceMaxItem(BOMBCHU_20,0); + ReplaceMaxItem(PROGRESSIVE_MAGIC_METER, 1); + ReplaceMaxItem(PROGRESSIVE_BOW,1); + ReplaceMaxItem(PROGRESSIVE_BOMB_BAG, 1); + ReplaceMaxItem(PIECE_OF_HEART,0); + //ReplaceMaxItem(HEART_CONTAINER, 2); +}; void GenerateItemPool() { @@ -1209,18 +1223,18 @@ void GenerateItemPool() { // TO-DO ItemPool for extra items & Scarce and Minimal pools - /*if (ItemPoolValue.Is(ITEMPOOL_PLENTIFUL)) { + //if (ItemPoolValue.Is(ITEMPOOL_PLENTIFUL)) { //AddItemsToPool(ItemPool, easyItems); - } - else { + //} + //else { //AddItemsToPool(ItemPool, normalItems); - } - if (ItemPoolValue.Is(ITEMPOOL_SCARCE)) {//TO DO + //} + if (ItemPoolValue.Is(ItemPoolSetting::ITEMPOOL_SCARCE)) {//TO DO SetScarceItemPool(); } - else if (ItemPoolValue.Is(ITEMPOOL_MINIMAL)) { + else if (ItemPoolValue.Is(ItemPoolSetting::ITEMPOOL_MINIMAL)) { SetMinimalItemPool(); - }*/ + } if (ItemPoolValue.Is(ItemPoolSetting::ITEMPOOL_PLENTIFUL)) { @@ -1244,7 +1258,6 @@ void GenerateItemPool() { AddItemToPool(PendingJunkPool, STONE_TOWER_TEMPLE_BOSS_KEY); } - } //Replace ice traps with junk from the pending junk pool if necessary diff --git a/source/location_access.cpp b/source/location_access.cpp index 2eeb2df..a0a3cd3 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -283,7 +283,7 @@ void AreaTable_Init() { //Exits Entrance(N_CLOCK_TOWN, {[]{return true;}}), Entrance(TERMINA_FIELD, {[]{return true;}}), - Entrance(CLOCK_TOWN_OBSERVATORY, {[]{return true;}}), + Entrance(CLOCK_TOWN_OBSERVATORY, {[]{return BombersNotebook || SkipBombersMinigame;}}), Entrance(STOCKPOTINN, {[]{return true;}}),//to-Do StockPotInn Night Access Entrance(CLOCK_TOWN_BAR, {[]{return RomanisMask;}}), Entrance(CLOCK_TOWN_HONEY_DARLING, {[]{return true;}}), diff --git a/source/setting_descriptions.cpp b/source/setting_descriptions.cpp index c50f84c..d2b719d 100644 --- a/source/setting_descriptions.cpp +++ b/source/setting_descriptions.cpp @@ -640,6 +640,11 @@ string_view customNotebookDesc = "Change the button to open the Bomber's N "Default is Start"; // string_view ingameSpoilersButtonDesc = "Change the button to open the ingame Spoiler Log\n"// "Default is Select"; // +/*------------------------------- // +| BOMBERS MINIGAME SKIP | // +-------------------------------*/ // +string_view skipBombersMinigameDesc = "Skip Bomber's Minigame to get the code.\n" // + "Sets the code to 11111."; // /*------------------------------ // | GLITCHES | // diff --git a/source/settings.cpp b/source/settings.cpp index d755677..bbfd36d 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -339,9 +339,11 @@ namespace Settings { Option RsDurability = Option::U8("Razor Sword Durability", { "Vanilla", "Infinite" }, { rsDurabilityVanilla, rsDurabilityInf}); Option IceTrapValue = Option::U8("Ice Traps", { "Off", "Extra", "Mayhem", "Onslaught" }, { iceTrapsOff, iceTrapsExtra, iceTrapsMayhem, iceTrapsOnslaught }, OptionCategory::Setting, (u8)IceTrapSetting::ICETRAPS_OFF); Option CompassShowWoTH = Option::Bool("Compasses Show WotH", {"Off", "On"}, { compassShowWotHDesc}); + Option SkipBombersMinigame = Option::Bool("Skip Bombers' Minigame", {"Off", "On"}, { skipBombersMinigameDesc}); std::vectorotherSettingsOptions = { &IceTrapValue, + &SkipBombersMinigame, //&RandomTrapDmg, &GossipStoneHints, //&ClearerHints, @@ -673,6 +675,7 @@ namespace Settings { //ctx.shuffleMagicBeans = (ShuffleMagicBeans) ? 1 : 0; ctx.compassesShowWotH = (CompassShowWoTH) ? 1 : 0; + ctx.skipBombersMinigame = (SkipBombersMinigame) ? 1 : 0; ctx.generateSpoilerLog = (GenerateSpoilerLog) ? 1 : 0; @@ -816,7 +819,7 @@ namespace Settings { u8 StartingBottleConvert(u8 startingBottle) { u8 startingBottleValue = 0; - + if (startingBottle == u8(1)) { startingBottleValue = 0x12;//Empty Bottle } diff --git a/source/spoiler_log.cpp b/source/spoiler_log.cpp index fe7856e..607158a 100644 --- a/source/spoiler_log.cpp +++ b/source/spoiler_log.cpp @@ -210,8 +210,10 @@ static void WriteIngameSpoilerLog() { spoilerData.ItemLocations[spoilerItemIndex].ItemStrOffset = stringOffsetMap[locItem]; spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = loc->GetCollectionCheck().type; spoilerData.ItemLocations[spoilerItemIndex].OverrideType = loc->GetOverrideType(); - spoilerData.ItemLocations[spoilerItemIndex].LocationScene = loc->GetCollectionCheck().scene; - spoilerData.ItemLocations[spoilerItemIndex].LocationFlag = loc->GetCollectionCheck().flag; + //spoilerData.ItemLocations[spoilerItemIndex].LocationScene = loc->GetCollectionCheck().scene; + //spoilerData.ItemLocations[spoilerItemIndex].LocationFlag = loc->GetCollectionCheck().flag; + spoilerData.ItemLocations[spoilerItemIndex].LocationScene = loc->GetScene(); + spoilerData.ItemLocations[spoilerItemIndex].LocationFlag = loc->GetFlag(); //Always Reveal unreachable checks if (key == CLOCK_TOWER_OCARINA_OF_TIME) { From d9d618b8b39765a9f3c9b768b41e0ac1e428443e Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Sun, 31 Dec 2023 17:16:10 -0600 Subject: [PATCH 18/87] Update Z3DR --- Z3DR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Z3DR b/Z3DR index a435f8a..96ae2b0 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit a435f8ae7ff2aabf5c7bfbb92ff05a149dbcc6b7 +Subproject commit 96ae2b08207ff8c58b50eae0c41dfa6a2c3631d0 From 737e55019a5515da671aa0d2f3f37c84ef2eab29 Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Sun, 31 Dec 2023 17:38:42 -0600 Subject: [PATCH 19/87] Update item_location.cpp Fix a goof where Song of Healing didn't have the cSong category --- source/item_location.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/item_location.cpp b/source/item_location.cpp index a5ab9dc..95ba12e 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -17,7 +17,7 @@ void LocationTable_Init() { //LocationTable itemlocation::type scene, flag, Repeatable, name hint key (hint_list.cpp) vanilla item categories collection check 376 Collection Check Group //Happy Mask Salesman - Starting Items - locationTable[HMS_SONG_OF_HEALING] = ItemLocation::Base (0x63, 0x54, false, "Song of Healing", HMS_SONG_OF_HEALING, SONG_OF_HEALING, {Category::cClockTower, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP); + locationTable[HMS_SONG_OF_HEALING] = ItemLocation::Base (0x63, 0x54, false, "Song of Healing", HMS_SONG_OF_HEALING, SONG_OF_HEALING, {Category::cClockTower, Category::cDayOne, Category::cSong}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP); locationTable[CLOCK_TOWER_OCARINA_OF_TIME] = ItemLocation::Base (0x19, 0x4C, false, "Ocarina of Time", CLOCK_TOWER_OCARINA_OF_TIME, OCARINA_OF_TIME, {Category::cClockTower, Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP ); locationTable[HMS_DEKU_MASK] = ItemLocation::Base (0x63, 0x78, false, "Deku Mask", HMS_DEKU_MASK, DEKU_MASK, {Category::cClockTower, Category::cTransformMask}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP ); locationTable[HMS_BOMBERS_NOTEBOOK] = ItemLocation::Base (0x63, 0x50, false, "Bombers Notebook", HMS_BOMBERS_NOTEBOOK, BOMBERS_NOTEBOOK, {Category::cClockTower, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP ); From f62d6d20c97aed8ef37273ac52934b94ee19b1f9 Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Wed, 3 Jan 2024 21:02:53 -0600 Subject: [PATCH 20/87] Update spoiler_log.cpp add extra check to make locations repeatable --- source/spoiler_log.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/spoiler_log.cpp b/source/spoiler_log.cpp index 607158a..e0679e9 100644 --- a/source/spoiler_log.cpp +++ b/source/spoiler_log.cpp @@ -283,6 +283,10 @@ static void WriteIngameSpoilerLog() { spoilerData.ItemLocations[spoilerItemIndex].RevealType = REVEALTYPE_ALWAYS; spoilerData.ItemLocations[spoilerItemIndex].CollectionCheckType = SPOILER_CHK_ALWAYS_COLLECTED; } + if (Location(key)->IsRepeatable()) + { + spoilerData.ItemLocations[spoilerItemIndex].CollectType = COLLECTTYPE_REPEATABLE; + } auto checkGroup = loc->GetCollectionCheckGroup(); spoilerData.ItemLocations[spoilerItemIndex].Group = checkGroup; From dc33cee6ecc1a7f3bd6bc3de98d7774b8636d14c Mon Sep 17 00:00:00 2001 From: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> Date: Wed, 3 Jan 2024 21:11:08 -0600 Subject: [PATCH 21/87] Update Z3DR --- Z3DR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Z3DR b/Z3DR index 96ae2b0..b31a90f 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 96ae2b08207ff8c58b50eae0c41dfa6a2c3631d0 +Subproject commit b31a90f2c4af62cb9083275ed7c2f9d6b376ab7c From 2c19004fc32008603ef62fe446f601f44c6bbe36 Mon Sep 17 00:00:00 2001 From: Phlex Date: Fri, 5 Jan 2024 11:44:42 -0600 Subject: [PATCH 22/87] Fix ice trap custom message. --- source/custom_messages.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/custom_messages.cpp b/source/custom_messages.cpp index f6cdfe2..7bda899 100644 --- a/source/custom_messages.cpp +++ b/source/custom_messages.cpp @@ -145,6 +145,11 @@ void CreateBaselineCustomMessages() { CreateMessage(0x0037, 0xFFFF, 0x3FFFFFFF, 0xFF0000, "You got the #kokiri sword!# The trusty sword you're familiar with. A treasure from Kokiri Forest.", {QM_GREEN, QM_RED}, {}, {}, 0x0, false, false); + + // Ice Trap + CreateMessage(0x0012, 0xFFFF, 0x3FFFFFFF, 0xFF0000, + " #FOOL!#", + {QM_RED}, {}, {}, 0x0, false, false); } u32 NumMessages() { From 4df687feddff7c28824fd54c34662e725376e097 Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Tue, 16 Jan 2024 10:17:06 -0600 Subject: [PATCH 23/87] Bring in new build check and deploy from OoT3DR. (#20) * Bring in new build check and deploy from OoT3DR. * Finally fix builds. * Update gitmodules to point to new repo. Update makefile to ensure everything builds as intended. * Adjust builds to remove specific keys that are no longer needed. --- .github/workflows/build-check.yml | 36 +++ .github/workflows/create-build.yml | 442 +++++++++++++++++++++++++++++ .gitmodules | 2 +- Makefile | 15 +- Z3DR | 2 +- 5 files changed, 488 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/build-check.yml create mode 100644 .github/workflows/create-build.yml diff --git a/.github/workflows/build-check.yml b/.github/workflows/build-check.yml new file mode 100644 index 0000000..3410344 --- /dev/null +++ b/.github/workflows/build-check.yml @@ -0,0 +1,36 @@ +name: MM3DR Build Check + +on: + pull_request: + +jobs: + format: + name: Verify Formatting + runs-on: ubuntu-latest + + steps: + - name: Checkout Project + uses: actions/checkout@v3 + +# - name: Format Project +# uses: DoozyX/clang-format-lint-action@v0.15 +# with: +# source: "./code ./source" +# extensions: 'c,h,cpp,hpp' +# clangFormatVersion: 14 + + build: + name: Confirm Compilable + runs-on: ubuntu-latest + container: + image: ghcr.io/z3dr/randotools:latest + + steps: + - name: Checkout Project + uses: actions/checkout@v3 + with: + submodules: true + + - name: Compile Project + run: | + make -j \ No newline at end of file diff --git a/.github/workflows/create-build.yml b/.github/workflows/create-build.yml new file mode 100644 index 0000000..6eefa46 --- /dev/null +++ b/.github/workflows/create-build.yml @@ -0,0 +1,442 @@ +name: MM3DR Build Script + +on: + workflow_dispatch: + inputs: + build_type: + description: 'Build type:' + required: true + type: choice + options: + - Nightly + - Release + version: + description: 'Release version: (For example: 3.2)' + required: false + +jobs: + get-changelog: + name: Retrieve Changelog + runs-on: ubuntu-latest + steps: + - name: Checkout Project + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Get Last Nightly Commit and Private Key + id: nightly-version + run: | + echo "last_nightly=$(git describe --tags $(git rev-list --tags --max-count=1))" >> $GITHUB_ENV + - name: Generate changelog + id: changelog + uses: metcalfc/changelog-generator@v4.0.1 + with: + myToken: ${{ secrets.GITHUB_TOKEN }} + base-ref: ${{ env.last_nightly }} + outputs: + changelog: ${{ steps.changelog.outputs.changelog }} + last-nightly: ${{ env.last_nightly }} + + build-cia-3dsx: + needs: get-changelog + name: Build CIA and 3DSX Files + runs-on: ubuntu-latest + container: + image: ghcr.io/z3dr/randotools:latest + + steps: + - name: Checkout Project + uses: actions/checkout@v3 + with: + submodules: true + + - name: Run Build Script + run: | + chmod +x linux_build_rando.sh + ./linux_build_rando.sh + + - name: Get shorthand commit. + id: vars + run: echo "sha_short=$(echo ${{ github.sha }} | cut -c1-6)" >> $GITHUB_ENV + + - if: ${{ github.event.inputs.build_type == 'Nightly' }} + name: Create Pre-release + uses: ncipollo/release-action@v1.12.0 + with: + token: "${{ secrets.GITHUB_TOKEN }}" + artifacts: "MM3D_Randomizer.cia,MM3D_Randomizer.3dsx,cia.png,3dsx.png" + prerelease: true + commit: "${{ github.sha }}" + tag: "Nightly-${{ env.sha_short }}" + name: "Nightly-${{ env.sha_short }}" + body: | + Please note that these are DEVELOPMENT builds and may not be entirely stable. + When reporting issues, please mention the six character commit listed in the randomizer menu. + You can use the FBI homebrew application to install the randomizer using either of these QR codes. + CIA QR Code: + ![CIA Download](https://github.com/${{ github.repository }}/releases/download/Nightly-${{ env.sha_short }}/cia.png) + 3DSX QR Code: + ![CIA Download](https://github.com/${{ github.repository }}/releases/download/Nightly-${{ env.sha_short }}/3dsx.png) + + Changes Since [${{ needs.get-changelog.outputs.last-nightly }}](https://github.com/${{ github.repository }}/releases/tag/${{ needs.get-changelog.outputs.last-nightly }}) 🛠: + ${{ needs.get-changelog.outputs.changelog }} + + + - if: ${{ github.event.inputs.build_type == 'Release' }} + name: Create Release + uses: ncipollo/release-action@v1.12.0 + with: + token: "${{ secrets.GITHUB_TOKEN }}" + artifacts: "MM3D_Randomizer.cia,MM3D_Randomizer.3dsx,cia.png,3dsx.png" + prerelease: false + commit: "${{ github.sha }}" + tag: "v${{ github.event.inputs.version }}" + name: "v${{ github.event.inputs.version }}" + body: | + ${{ github.event.inputs.version }} Changes: + - Please check back later for a full list of changes. + + When reporting issues, please mention the six character commit listed in the randomizer menu. + You can use the FBI homebrew application to install the randomizer using either of these QR codes. + CIA QR Code: + ![CIA Download](https://github.com/${{ github.repository }}/releases/download/Nightly-${{ env.sha_short }}/cia.png) + 3DSX QR Code: + ![CIA Download](https://github.com/${{ github.repository }}/releases/download/Nightly-${{ env.sha_short }}/3dsx.png) + + deploy-gist: + needs: build-cia-3dsx + runs-on: ubuntu-latest + steps: + - name: Create basic JSON struct. + + run: | + cat >> ./MM3DR.unistore<< EOF + { + "storeContent": [ + { + "info": { + "title": "MM3D Randomizer ", + "author": "Z3DR Team", + "description": "A randomizer patch for MM3D to be used with Luma for Nintendo 3DS", + "category": [ + "game patch" + ], + "console": [ + "3DS" + ], + "icon_index": 2, + "sheet_index": 0, + "last_updated": " at (UTC)", + "license": "MIT", + "version": "" + }, + "Download MM3D_Randomizer.3dsx": [ + { + "file": "https://github.com/Z3DR/MM3D_Randomizer/releases/latest/download/MM3D_Randomizer.3dsx", + "message": "Downloading MM3D_Randomizer_.3dsx...", + "output": "%3DSX%/MM3D_Randomizer_.3dsx", + "type": "downloadFile" + } + ], + "Download MM3D_Randomizer.cia": [ + { + "file": "https://github.com/Z3DR/MM3D_randomizer/releases/latest/download/MM3D_Randomizer.cia", + "message": "Downloading MM3D_Randomizer_.cia...", + "output": "sdmc:/MM3D_Randomizer_.cia", + "type": "downloadFile" + }, + { + "file": "/MM3D_Randomizer_.cia", + "message": "Installing MM3D_Randomizer_.cia...", + "type": "installCia" + }, + { + "file": "sdmc:/MM3D_Randomizer_.cia", + "message": "Deleting MM3D_Randomizer_.cia.", + "type": "deleteFile" + } + ] + }, + { + "info": { + "title": "MM3D Randomizer Nightly ", + "author": "MM3DR Team", + "description": "A randomizer patch for MM3D to be used with Luma for Nintendo 3DS", + "category": [ + "game patch" + ], + "console": [ + "3DS" + ], + "icon_index": 1, + "sheet_index": 0, + "last_updated": " at (UTC)", + "license": "MIT", + "version": "" + }, + "Download MM3D_Randomizer.3dsx": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.3dsx...", + "output": "%3DSX%/MM3D_Randomizer_.3dsx", + "type": "downloadFile" + } + ], + "Download MM3D_Randomizer.cia": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.cia...", + "output": "sdmc:/MM3D_Randomizer_.cia", + "type": "downloadFile" + }, + { + "file": "/MM3D_Randomizer_.cia", + "message": "Installing MM3D_Randomizer_.cia...", + "type": "installCia" + }, + { + "file": "sdmc:/MM3D_Randomizer_.cia", + "message": "Deleting MM3D_Randomizer_.cia.", + "type": "deleteFile" + } + ] + }, + { + "info": { + "title": "MM3D Randomizer Nightly ", + "author": "MM3DR Team", + "description": "A randomizer patch for MM3D to be used with Luma for Nintendo 3DS", + "category": [ + "game patch" + ], + "console": [ + "3DS" + ], + "icon_index": 1, + "sheet_index": 0, + "last_updated": " at (UTC)", + "license": "MIT", + "version": "" + }, + "Download MM3D_Randomizer.3dsx": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.3dsx...", + "output": "%3DSX%/MM3D_Randomizer_.3dsx", + "type": "downloadFile" + } + ], + "Download MM3D_Randomizer.cia": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.cia...", + "output": "sdmc:/MM3D_Randomizer_.cia", + "type": "downloadFile" + }, + { + "file": "/MM3D_Randomizer_.cia", + "message": "Installing MM3D_Randomizer_.cia...", + "type": "installCia" + }, + { + "file": "sdmc:/MM3D_Randomizer_.cia", + "message": "Deleting MM3D_Randomizer_.cia.", + "type": "deleteFile" + } + ] + }, + { + "info": { + "title": "MM3D Randomizer Nightly ", + "author": "MM3DR Team", + "description": "A randomizer patch for MM3D to be used with Luma for Nintendo 3DS", + "category": [ + "game patch" + ], + "console": [ + "3DS" + ], + "icon_index": 1, + "sheet_index": 0, + "last_updated": " at (UTC)", + "license": "MIT", + "version": "" + }, + "Download MM3D_Randomizer.3dsx": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.3dsx...", + "output": "%3DSX%/MM3D_Randomizer_.3dsx", + "type": "downloadFile" + } + ], + "Download MM3D_Randomizer.cia": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.cia...", + "output": "sdmc:/MM3D_Randomizer_.cia", + "type": "downloadFile" + }, + { + "file": "/MM3D_Randomizer_.cia", + "message": "Installing MM3D_Randomizer_.cia...", + "type": "installCia" + }, + { + "file": "sdmc:/MM3D_Randomizer_.cia", + "message": "Deleting MM3D_Randomizer_.cia.", + "type": "deleteFile" + } + ] + }, + { + "info": { + "title": "MM3D Randomizer Nightly ", + "author": "MM3DR Team", + "description": "A randomizer patch for MM3D to be used with Luma for Nintendo 3DS", + "category": [ + "game patch" + ], + "console": [ + "3DS" + ], + "icon_index": 1, + "sheet_index": 0, + "last_updated": " at (UTC)", + "license": "MIT", + "version": "" + }, + "Download MM3D_Randomizer.3dsx": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.3dsx...", + "output": "%3DSX%/MM3D_Randomizer_.3dsx", + "type": "downloadFile" + } + ], + "Download MM3D_Randomizer.cia": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.cia...", + "output": "sdmc:/MM3D_Randomizer_.cia", + "type": "downloadFile" + }, + { + "file": "/MM3D_Randomizer_.cia", + "message": "Installing MM3D_Randomizer_.cia...", + "type": "installCia" + }, + { + "file": "sdmc:/MM3D_Randomizer_.cia", + "message": "Deleting MM3D_Randomizer_.cia.", + "type": "deleteFile" + } + ] + }, + { + "info": { + "title": "MM3D Randomizer Nightly ", + "author": "MM3DR Team", + "description": "A randomizer patch for MM3D to be used with Luma for Nintendo 3DS", + "category": [ + "game patch" + ], + "console": [ + "3DS" + ], + "icon_index": 1, + "sheet_index": 0, + "last_updated": " at (UTC)", + "license": "MIT", + "version": "" + }, + "Download MM3D_Randomizer.3dsx": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.3dsx...", + "output": "%3DSX%/MM3D_Randomizer_.3dsx", + "type": "downloadFile" + } + ], + "Download MM3D_Randomizer.cia": [ + { + "file": "", + "message": "Downloading MM3D_Randomizer_.cia...", + "output": "sdmc:/MM3D_Randomizer_.cia", + "type": "downloadFile" + }, + { + "file": "/MM3D_Randomizer_.cia", + "message": "Installing MM3D_Randomizer_.cia...", + "type": "installCia" + }, + { + "file": "sdmc:/MM3D_Randomizer_.cia", + "message": "Deleting MM3D_Randomizer_.cia.", + "type": "deleteFile" + } + ] + } + ], + "storeInfo": { + "title": "MM3D Randomizer", + "author": "MM3DR Team", + "description": "MM3D Randomizer - An online database of the most recent versions of the random experience for MM3D", + "url": "https://phlexplexi.co/unistore", + "file": "MM3DR.unistore", + "sheetURL": "https://dl.dropboxusercontent.com/s/5qv4ngozhgmyyen/OOT3DR.t3x?dl=1", + "sheet": "MM3DR.t3x", + "bg_index": 1, + "bg_sheet": 0, + "revision": , + "version": 3 + } + } + EOF + echo "Forgive me for this." + curl -sb -H "https://api.github.com/repos/Z3DR/MM3D_Randomizer/releases" | jq '.[0:8] | .[].assets | .[3] | (.browser_download_url + " " +.created_at)' | grep "Nightly" | head -n 5 >> ciaDownloads.txt + curl -sb -H "https://api.github.com/repos/Z3DR/MM3D_Randomizer/releases" | jq '.[0:8] | .[].assets | .[2] | (.browser_download_url + " " +.created_at)' | grep "Nightly" | head -n 5 >> 3dsxDownloads.txt + STABLEVERSION=`curl -sb -H "https://api.github.com/repos/Z3DR/MM3D_Randomizer/releases/latest" | jq '.name'` + STABLEMODIFIED=`curl -sb -H "https://api.github.com/repos/Z3DR/MM3D_Randomizer/releases/latest" | jq '.published_at'` + STABLEVERSION=`sed -e 's/^"//' -e 's/"$//' <<<"$STABLEVERSION"` + STABLEMODIFIED=`sed -e 's/^"//' -e 's/"$//' <<<"$STABLEMODIFIED"` + REVISION=`curl -Is -k "https://api.github.com/repos/Z3DR/MM3D_Randomizer/commits?per_page=1" | sed -n '/^[Ll]ink:/ s/.*"next".*page=\([0-9]*\).*"last".*/\1/p'` + MODIFIED=$(echo ${STABLEMODIFIED} | cut -c1-10) + MODIFIED_DATE=$(echo ${STABLEMODIFIED} | cut -c12-19) + sed -i "s##${STABLEVERSION}#g" MM3DR.unistore + sed -i "s##$MODIFIED#g" MM3DR.unistore + sed -i "s##$MODIFIED_DATE#g" MM3DR.unistore + sed -i "s##$REVISION#g" MM3DR.unistore + LINES=$(cat ciaDownloads.txt) + LINENUM=1 + IFS=$'\n' + for LINE in $LINES + do + LINE=`sed -e 's/^"//' -e 's/"$//' <<<"$LINE"` + ARRLINE=($(echo $LINE | tr " " "\n")) + sed -i "s##${ARRLINE[0]}#g" MM3DR.unistore + VERSION=$(echo ${ARRLINE[0]} | cut -c75-80) + MODIFIED=$(echo ${ARRLINE[1]} | cut -c1-10) + MODIFIED_DATE=$(echo ${ARRLINE[1]} | cut -c12-19) + sed -i "s##$VERSION#g" MM3DR.unistore + sed -i "s##$MODIFIED#g" MM3DR.unistore + sed -i "s##$MODIFIED_DATE#g" MM3DR.unistore + LINENUM=`expr $LINENUM + 1` + done + LINES=$(cat 3dsxDownloads.txt) + LINENUM=1 + for LINE in $LINES + do + LINE=`sed -e 's/^"//' -e 's/"$//' <<<"$LINE"` + ARRLINE=($(echo $LINE | tr " " "\n")) + sed -i "s##${ARRLINE[0]}#g" MM3DR.unistore + LINENUM=`expr $LINENUM + 1` + done + + - name: Deploy to Gist + uses: exuanbo/actions-deploy-gist@v1.1.4 + with: + token: ${{ secrets.TOKEN }} + gist_id: a0bb911772800a7071eddf6298ff6e9f + gist_file_name: MM3DR.unistore + file_path: ./MM3DR.unistore \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 359d65c..57e4475 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "Z3DR"] path = Z3DR - url = https://github.com/Z3DR/Z3DR.git + url = https://github.com/Z3DR/mm3dr.git diff --git a/Makefile b/Makefile index ac12e42..d54d025 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ TARGET := $(notdir $(CURDIR)) BUILD := build SOURCES := source DATA := data -INCLUDES := source/include Z3DR/patch_code/mm3d/include +INCLUDES := source/include Z3DR/code/include GRAPHICS := gfx GFXBUILD := $(BUILD) ROMFS := romfs @@ -175,10 +175,10 @@ all: $(BUILD) $(GFXBUILD) $(DEPSDIR) $(ROMFS_T3XFILES) $(T3XHFILES) $(BUILD): @git submodule update --init - $(MAKE) -C Z3DR/patch_code/mm3d/ - @mv Z3DR/patch_code/mm3d/basecode.ips $(ROMFS)/basecode.ips - @mv Z3DR/patch_code/mm3d/basecode1.1.ips $(ROMFS)/basecode1.1.ips - @mv Z3DR/patch_code/mm3d/patch_symbols.hpp $(CURDIR)/source/include/ + $(MAKE) -C Z3DR/code/ + @mv Z3DR/code/basecode.ips $(ROMFS)/basecode.ips + @mv Z3DR/code/basecode1.1.ips $(ROMFS)/basecode1.1.ips + @mv Z3DR/source/patch_symbols.hpp $(CURDIR)/source/include/ @mkdir -p $@ ifneq ($(GFXBUILD),$(BUILD)) @@ -195,8 +195,9 @@ endif clean: @echo Cleaning app and basecode ... @rm -fr $(BUILD) $(TARGET).3dsx $(TARGET).cia $(OUTPUT).smdh $(TARGET).elf $(GFXBUILD) $(ROMFS)/basecode.ips source/include/patch_symbols.hpp - $(MAKE) clean -f Z3DR/patch_code/mm3d/Makefile - @rm -rf Z3DR/patch_code/mm3d/build + $(MAKE) clean -f Z3DR/code/Makefile + @rm -rf Z3DR/code/build + @rm -rf Z3DR/code/basecode.ips Z3DR/code/basecode1.1.ips Z3DR/code/code.elf Z3DR/source/patch_symbols.hpp #--------------------------------------------------------------------------------- $(GFXBUILD)/%.t3x $(BUILD)/%.h : %.t3s #--------------------------------------------------------------------------------- diff --git a/Z3DR b/Z3DR index b31a90f..61d66de 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit b31a90f2c4af62cb9083275ed7c2f9d6b376ab7c +Subproject commit 61d66de8a848c92e67d1472c9816cd5067d8c062 From 71eafc291bca9e9b4582bdf44cc1052e917e1a70 Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Thu, 18 Jan 2024 14:31:43 -0600 Subject: [PATCH 24/87] Hint Stone Implementation (#21) * Add in new hints. Update z3dr. * Begin attempting to insert hints. * Partially working hints again. Need to fix crashes on hint generation. May need to start from scratch. * Hint List Update -Adds in the key list into Hint_List.cpp so that they can be converted into hintTable entries. -Adds the NewItem function to Item_list.cpp -Adds gossip stones into Location_Access.cpp for availability * Include boss hint and dungeon hint text. * Sometimes Hints1 Adds location hints from clocktower to GBC * Update hint_list.cpp change location Keys into preformed empty hintTable entries so only text needs to be entered instead of changing the whole line * Update hint_list.cpp align hintTable entries to start on column 5 * Update hint_list.cpp Add missing Dungeon Locations Also filled out Ikana Canyon, Ikana Graveyard, Laundry Pool, and all Great Fairy Locations * Update hint_list.cpp completed overworld locations * Update hint_list.cpp dungeon locations added * Update hint_list.cpp everything except junk * update hint_list.cpp add extra spaces for text to be copied into as it errors with only one option * Remove some debug statements. Include new items in hint table to prevent crashing. * Finalize hints, there is still more issues with locations I believe now. * Missed dungeon items. * Hint List Updates - Adds more missing item hint table entries. - Changes dungeon HintText type to Exclude instead of Sometimes to better match OOT3DR - Adds a few missing items from Item Table - Adjusts array sizes on progressiveItemsList and moonItemList to match contents so no more "No Items" get placed - uncomments Hint Distriubution and ClearerHints settings * Adjust hint text box to match gossip stones. Add more debug statements to look for potential blank areas and no hint areas. * Adjust debug prints. * Fix broken build. * Hints Fix -Adjusts GossipStoneHintsSetting in fill.cpp to account for No Hints setting - Adjusts a hint key for some areatable declarations to fix No Hint issues - Adjusts print lines for generation text to look nicer - removes WIP text from gossip stones - removes ClearerHints option as it doesnt work yet - Uncomments hint writing to spoiler log as they work now * Add in new hints. Update z3dr. * Begin attempting to insert hints. * Partially working hints again. Need to fix crashes on hint generation. May need to start from scratch. * Hint List Update -Adds in the key list into Hint_List.cpp so that they can be converted into hintTable entries. -Adds the NewItem function to Item_list.cpp -Adds gossip stones into Location_Access.cpp for availability * Include boss hint and dungeon hint text. * Sometimes Hints1 Adds location hints from clocktower to GBC * Update hint_list.cpp change location Keys into preformed empty hintTable entries so only text needs to be entered instead of changing the whole line * Update hint_list.cpp align hintTable entries to start on column 5 * Update hint_list.cpp Add missing Dungeon Locations Also filled out Ikana Canyon, Ikana Graveyard, Laundry Pool, and all Great Fairy Locations * Update hint_list.cpp completed overworld locations * Update hint_list.cpp dungeon locations added * Update hint_list.cpp everything except junk * update hint_list.cpp add extra spaces for text to be copied into as it errors with only one option * Remove some debug statements. Include new items in hint table to prevent crashing. * Finalize hints, there is still more issues with locations I believe now. * Missed dungeon items. * Hint List Updates - Adds more missing item hint table entries. - Changes dungeon HintText type to Exclude instead of Sometimes to better match OOT3DR - Adds a few missing items from Item Table - Adjusts array sizes on progressiveItemsList and moonItemList to match contents so no more "No Items" get placed - uncomments Hint Distriubution and ClearerHints settings * Adjust hint text box to match gossip stones. Add more debug statements to look for potential blank areas and no hint areas. * Adjust debug prints. * Fix broken build. * Hints Fix -Adjusts GossipStoneHintsSetting in fill.cpp to account for No Hints setting - Adjusts a hint key for some areatable declarations to fix No Hint issues - Adjusts print lines for generation text to look nicer - removes WIP text from gossip stones - removes ClearerHints option as it doesnt work yet - Uncomments hint writing to spoiler log as they work now * Include more hints. Include a hack fix for including the B button in junk hints. * Update subrepo once more. * Update hint_list.cpp Adds more junk hints and fixes phrasing on location text * Reset subrepo. * Add in a few more hints. * Moar hints. * Finish the junk hints. * Jumk --------- Co-authored-by: Tacoman369 <90735287+Tacoman369@users.noreply.github.com> --- .gitmodules | 1 + source/fill.cpp | 8 +- source/hint_list.cpp | 955 +++++++++++++++++++++++++------ source/hints.cpp | 69 ++- source/include/hints.hpp | 1 + source/include/item_location.hpp | 4 + source/include/keys.hpp | 2 +- source/include/version.hpp | 2 +- source/item_list.cpp | 22 +- source/item_pool.cpp | 4 +- source/location_access.cpp | 133 +++-- source/menu.cpp | 14 +- source/playthrough.cpp | 8 +- source/setting_descriptions.cpp | 15 +- source/settings.cpp | 2 +- source/spoiler_log.cpp | 6 +- 16 files changed, 969 insertions(+), 277 deletions(-) diff --git a/.gitmodules b/.gitmodules index 57e4475..a0bdeab 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "Z3DR"] path = Z3DR url = https://github.com/Z3DR/mm3dr.git + branch = dev \ No newline at end of file diff --git a/source/fill.cpp b/source/fill.cpp index 658f262..b50b254 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -890,12 +890,12 @@ int Fill() { CreateItemOverrides(); // CreateEntranceOverrides(); // CreateAlwaysIncludedMessages(); - /*if (GossipStoneHints.IsNot(HINTS_NO_HINTS)) { - printf("\x1b[10;10HCreating Hints..."); + if (GossipStoneHints.IsNot(rnd::GossipStoneHintsSetting::HINTS_NO_HINTS)) { + printf("\x1b[11;10HCreating Hints..."); CreateAllHints(); printf("Done"); - } - if (ShuffleMerchants.Is(SHUFFLEMERCHANTS_HINTS)) { + } + /*if (ShuffleMerchants.Is(SHUFFLEMERCHANTS_HINTS)) { CreateMerchantsHints(); }*/ return 1; diff --git a/source/hint_list.cpp b/source/hint_list.cpp index 3671039..59bde4d 100644 --- a/source/hint_list.cpp +++ b/source/hint_list.cpp @@ -22,7 +22,10 @@ void HintTable_Init() { //hintTable[ITEM] = HintText::Item({ Text{"English","French","Spanish"} }); - //Item Hint Text + /*------------------------- + | ITEM HINTS | + --------------------------*/ + hintTable[KOKIRI_SWORD] = HintText::Item({ Text{"a forest blade", "a forest blade", "a forest blade"} }); hintTable[RAZOR_SWORD] = HintText::Item({ Text{"a sharp blade", "a sharp blade", "a sharp blade"} }); hintTable[GILDED_SWORD] = HintText::Item({ Text{"a very sharp blade", "a very sharp blade", "a very sharp blade"} }); @@ -42,12 +45,13 @@ void HintTable_Init() { hintTable[MOONS_TEAR] = HintText::Item({ Text{"a lunar teardrop", "a lunar teardrop", "a lunar teardrop"} }); hintTable[SPIN_ATTACK] = HintText::Item({ Text{"a magic attack", "a magic attack", "a magic attack"} }); hintTable[LENS_OF_TRUTH] = HintText::Item({ Text{"a lie detector","a lie detector", "a lie detector"} }); - hintTable[FIRE_ARROWS] = HintText::Item({ Text{"the power of fire", "the power of fire", "the power of fire"} }); + hintTable[HEROS_BOW] = HintText::Item({Text{"a bow", "a bow", "a bow"}}); + hintTable[FIRE_ARROWS] = HintText::Item({ Text{"the power of fire", "the power of fire", "the power of fire"} }); hintTable[ICE_ARROWS] = HintText::Item({ Text{"the power of ice", "the power of ice", "the power of ice"} }); hintTable[LIGHT_ARROWS] = HintText::Item({ Text{"the power of light", "the power of light", "the power of light"} }); hintTable[HOOKSHOT] = HintText::Item({ Text{"a chain and grapple", "a chain and grapple", "a chain and grapple"} }); hintTable[MAGIC_BEAN] = HintText::Item({ Text{"a plant seed", "a plant seed", "a plant seed"} }); - // MAGIC_BEAN_PACK, + hintTable[MAGIC_BEAN_PACK] = HintText::Item({ Text{"multiple plant seeds", "multiple plant seeds", "multiple plant seeds"} }); hintTable[DOUBLE_DEFENSE] = HintText::Item({ Text{"magical defence", "magical defence", "magical defence"} }); // OCARINA_OF_TIME, hintTable[PICTOGRAPH_BOX] = HintText::Item({ Text{"a capture device", "a capture device", "a capture device"} }); @@ -76,155 +80,29 @@ void HintTable_Init() { hintTable[GIANTS_MASK] = HintText::Item({ Text{"a growth spurt", "a growth spurt", "a growth spurt"}}); hintTable[FIERCE_DIETY_MASK] = HintText::Item({ Text{"the wrath of a god", "the wrath of a god", "the wrath of a god"}}); hintTable[MASK_OF_TRUTH] = HintText::Item({ Text{"a piercing gaze", "a piercing gaze", "a piercing gaze"}}); - //SKULLTULA TOKENS + hintTable[FISHING_PASS] = HintText::Item({Text{"a fishing pass", "a fishing passs", "a fishing pass"}}); + hintTable[ICE_TRAP] = HintText::Item({Text{"a frosty surprise", "a frosty surprise", "a frosty surprise"}}); + hintTable[ZORA_EGG] = HintText::Item({Text{"a zora egg", "a zora egg", "a zora egg"}}); + //SKULLTULA TOKENS hintTable[SWAMP_SKULLTULA_TOKEN] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - /* - hintTable[SWAMP_SKULLTULA_TOKEN1] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN2] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN3] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN4] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN5] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN6] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN7] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN8] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN9] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN10] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN12] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN13] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN14] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN15] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN16] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN17] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN18] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN19] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN20] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN21] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN22] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN23] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN24] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN25] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN26] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN27] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN28] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN29] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[SWAMP_SKULLTULA_TOKEN30] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - */ hintTable[OCEANSIDE_SKULLTULA_TOKEN] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - /* - hintTable[OCEANSIDE_SKULLTULA_TOKEN1] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN2] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN3] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN4] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN5] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN6] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN7] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN8] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN9] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN10] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN11] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN12] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN13] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN14] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN15] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN16] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN17] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN18] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN19] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN20] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN21] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN22] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN23] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN24] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN25] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN26] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN27] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN28] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN29] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - hintTable[OCEANSIDE_SKULLTULA_TOKEN30] = HintText::Item({ Text{"a golden token", "a golden token", "a golden token"} }); - */ + //Stray Fairies hintTable[CT_STRAY_FAIRY] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); hintTable[WF_STRAY_FAIRY] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - /* - hintTable[WF_STRAY_FAIRY1] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY2] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY3] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY4] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY5] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY6] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY7] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY8] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY9] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY10] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY11] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY12] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY13] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY14] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - hintTable[WF_STRAY_FAIRY15] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost faiy"} }); - */ hintTable[SH_STRAY_FAIRY] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - /* - hintTable[SH_STRAY_FAIRY1] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY2] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY3] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY4] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY5] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY6] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY7] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY8] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY9] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY10] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY11] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY12] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY13] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY14] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[SH_STRAY_FAIRY15] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - */ hintTable[GBT_STRAY_FAIRY] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - /* - hintTable[GBT_STRAY_FAIRY1] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY2] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY3] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY4] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY5] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY6] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY7] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY8] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY9] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY10] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY11] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY12] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY13] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY14] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[GBT_STRAY_FAIRY15] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - */ hintTable[ST_STRAY_FAIRY] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - /* - hintTable[ST_STRAY_FAIRY1] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY2] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY3] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY4] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY5] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY6] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY7] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY8] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY9] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY10] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY11] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY12] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY13] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY14] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - hintTable[ST_STRAY_FAIRY15] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); - */ //PROGRESSIVE ITEMS (unused currently) - // PROGRESSIVE_SWORD, - // PROGRESSIVE_BOMB_BAG, - // PROGRESSIVE_BOW, - // PROGRESSIVE_WALLET, - // PROGRESSIVE_MAGIC_METER, + hintTable[PROGRESSIVE_SWORD] = HintText::Item({ Text{"a progressive sword", "", ""} }); + hintTable[PROGRESSIVE_BOMB_BAG] = HintText::Item({ Text{"a progressive bomb bag", "", ""} }); + hintTable[PROGRESSIVE_BOW] = HintText::Item({ Text{"a progressive bow", "", ""} }); + hintTable[PROGRESSIVE_WALLET] = HintText::Item({ Text{"a progressive wallet", "", ""} }); + hintTable[PROGRESSIVE_MAGIC_METER] = HintText::Item({ Text{"progressive magic meter", "", ""} }); // PROGRESSIVE_BOMBCHUS, - //BOTTLE ITEMS + //BOTTLE ITEMS + hintTable[EMPTY_BOTTLE] = HintText::Item({ Text{"a glass container", "a glass container", "a glass container"} }); hintTable[EMPTY_BOTTLE1] = HintText::Item({ Text{"a glass container", "a glass container", "a glass container"} }); hintTable[EMPTY_BOTTLE2] = HintText::Item({ Text{"a glass container", "a glass container", "a glass container"} }); hintTable[BOTTLE_WITH_MILK] = HintText::Item({ Text{"a dairy product", "a dairy product", "a dairy product"}}); @@ -244,6 +122,7 @@ void HintTable_Init() { hintTable[BOTTLE_WITH_ZORA_EGG] = HintText::Item({ Text{"a lost child", "a lost child", "a lost child"}}); hintTable[SEAHORSE] = HintText::Item({ Text{"a sea creature", "a sea creatre", "a sea creature"}}); hintTable[BOTTLE_WITH_MUSHROOM] = HintText::Item({ Text{"a strange fungus", "a strange fungus", "a strange fungus"}}); + hintTable[BOTTLE_WITH_MYSTERY_MILK] = HintText::Item({ Text{"a strange drink", "a strange drink", "a strange drink"}}); //UPGRADABLE ITEMS hintTable[LARGE_QUIVER] = HintText::Item({ Text{"a ranged weapon", "a ranged weapon", "a ranged weapon"}}); hintTable[LARGEST_QUIVER] = HintText::Item({ Text{"a ranged weapon", "a ranged weapon", "a ranged weapon"}}); @@ -269,39 +148,7 @@ void HintTable_Init() { hintTable[OATH_TO_ORDER] = HintText::Item({ Text{"a song of giants", "a song of giants", "a song of giants"}}); //PIECES OF HEART hintTable[PIECE_OF_HEART] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - /* - hintTable[PIECE_OF_HEART1] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART2] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART3] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART4] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART5] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART6] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART7] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART8] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART9] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART10] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART11] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART12] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART13] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART14] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART15] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART16] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART17] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART18] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART19] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART20] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART21] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART22] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART23] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART24] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART25] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART26] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART27] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART28] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART29] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART30] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - hintTable[PIECE_OF_HEART31] = HintText::Item({ Text{"a segment of health", "a segment of health", "a segment of health"} }); - */ + hintTable[HEART_CONTAINER] = HintText::Item({Text{"a new heart","a new heart", "a new heart"}}); //MAPS hintTable[MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"}}); hintTable[WOODFALL_TEMPLE_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); @@ -328,18 +175,758 @@ void HintTable_Init() { hintTable[STONE_TOWER_TEMPLE_BOSS_KEY] = HintText::Item({ Text{"an important key", "an important key", "an important key"} }); //SMALLKEYS hintTable[SMALL_KEY] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - hintTable[WOODFALL_TEMPLE_SMALL_KEY] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - //hintTable[SNOWHEAD_TEMPLE_SMALL_KEY1] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - //hintTable[SNOWHEAD_TEMPLE_SMALL_KEY2] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - //hintTable[SNOWHEAD_TEMPLE_SMALL_KEY3] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - hintTable[GBT_SMALL_KEY] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - //hintTable[STONE_TOWER_TEMPLE_SMALL_KEY1] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - //hintTable[STONE_TOWER_TEMPLE_SMALL_KEY2] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - //hintTable[STONE_TOWER_TEMPLE_SMALL_KEY3] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - //hintTable[STONE_TOWER_TEMPLE_SMALL_KEY4] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - //DUNGEON REWARDS + hintTable[WOODFALL_TEMPLE_SMALL_KEY] = HintText::Item({Text{"swampy small key", "", ""}}); + hintTable[SNOWHEAD_TEMPLE_SMALL_KEY] = HintText::Item({Text{"icy small key", "", ""}}); + hintTable[GBT_SMALL_KEY] = HintText::Item({Text{"ocean small key", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_SMALL_KEY] = HintText::Item({Text{"rocky small key", "", ""}}); + //DUNGEON REWARDS hintTable[ODOLWAS_REMAINS] = HintText::Item({ Text{"a boss's remains", "a boss's remains", "a boss's remains"} }); hintTable[GOHTS_REMAINS] = HintText::Item({ Text{"a boss's remains", "a boss's remains", "a boss's remains"} }); hintTable[GYORGS_REMAINS] = HintText::Item({ Text{"a boss's remains", "a boss's remains", "a boss's remains"} }); hintTable[TWINMOLDS_REMAINS] = HintText::Item({ Text{"a boss's remains", "a boss's remains", "a boss's remains"} }); + + /*----------------------- + | REFILL ITEMS | + -----------------------*/ + hintTable[RECOVERY_HEART] = HintText::Item({Text{"Recovery Heart","",""}}); + hintTable[GREEN_RUPEE] = HintText::Item({Text{"Green rupee", "", ""}}); + hintTable[BLUE_RUPEE] = HintText::Item({Text{"Blue rupee", "", ""}}); + hintTable[RED_RUPEE] = HintText::Item({Text{"Red rupee", "", ""}}); + hintTable[PURPLE_RUPEE] = HintText::Item({Text{"Purple rupee", "", ""}}); + hintTable[SILVER_RUPEE] = HintText::Item({Text{"Silver rupee", "", ""}}); + hintTable[HUGE_RUPEE] = HintText::Item({Text{"Huge rupee", "", ""}}); + hintTable[DEKU_NUTS_5] = HintText::Item({Text{"5 nuts", "", ""}}); + hintTable[DEKU_NUTS_10] = HintText::Item({Text{"10 nuts", "", ""}}); + hintTable[BOMBS_5] = HintText::Item({Text{"5 explosive orbs", "", ""}}); + hintTable[BOMBS_10] = HintText::Item({Text{"10 explosive orbs", "", ""}}); + hintTable[BOMBS_20] = HintText::Item({Text{"20 explosive orbs", "", ""}}); + hintTable[BOMBCHU_5] = HintText::Item({Text{"5 explosive mice", "", ""}}); + hintTable[BOMBCHU_10] = HintText::Item({Text{"10 explosive mice", "", ""}}); + hintTable[BOMBCHU_20] = HintText::Item({Text{"20 explosive mice", "", ""}}); + hintTable[ARROWS_10] = HintText::Item({Text{"10 projectile sticks", "", ""}}); + hintTable[ARROWS_30] = HintText::Item({Text{"30 projectile sticks", "", ""}}); + hintTable[ARROWS_40] = HintText::Item({Text{"40 projectile sticks", "", ""}}); + hintTable[ARROWS_50] = HintText::Item({Text{"50 projectile sticks", "", ""}}); + hintTable[BLUE_POTION_REFILL] = HintText::Item({Text{"Blue Potion Refill", "", ""}}); + hintTable[GREEN_POTION_REFILL] = HintText::Item({Text{"Green Potion Refill", "", ""}}); + hintTable[RED_POTION_REFILL] = HintText::Item({Text{"Red Potion Refill", "", ""}}); + hintTable[BOMBCHU_DROP] = HintText::Item({Text{"explosive mice", "", ""}}); + hintTable[DEKU_STICK_1] = HintText::Item({Text{"1 stick", "",""}}); + + /*---------------- + | SHOP ITEMS | + ----------------*/ + hintTable[BUY_ARROWS_10] = HintText::Item({Text{"Buy 10 Arrows","",""}}); + hintTable[BUY_ARROWS_30] = HintText::Item({Text{"Buy 30 Arrows","",""}}); + hintTable[BUY_BLUE_POTION] = HintText::Item({Text{"Buy Blue Potion","",""}}); + hintTable[BUY_BOMBCHU_10] = HintText::Item({Text{"Buy 10 Bombchu","",""}}); + hintTable[BUY_BOMBS_10] = HintText::Item({Text{"Buy 10 Bombs","",""}}); + hintTable[BUY_DEKU_NUT_10] = HintText::Item({Text{"Buy 10 Deku Nuts","",""}}); + hintTable[BUY_DEKU_STICK_1] = HintText::Item({Text{"Buy 1 Deku Stick","",""}}); + hintTable[BUY_FAIRYS_SPIRIT] = HintText::Item({Text{"Buy Fairy","",""}}); + hintTable[BUY_GREEN_POTION] = HintText::Item({Text{"Buy Green Potion","",""}}); + hintTable[BUY_HEROS_SHIELD] = HintText::Item({Text{"Buy Hero Shield","",""}}); + hintTable[BUY_MAGIC_BEAN] = HintText::Item({Text{"Buy Magic Bean","",""}}); + hintTable[BUY_RED_POTION] = HintText::Item({Text{"Buy Red Potion","",""}}); + + /*----------------------- + | SOMETIMES HINT TEXT | + -----------------------*/ + // Clock Tower + hintTable[CLOCK_TOWER_OCARINA_OF_TIME] = HintText::Sometimes({ Text{"A Musical Instrument","A Musical Instrument","A Musical Instrument"}}); + hintTable[HMS_DEKU_MASK] = HintText::Sometimes({ Text{"a forest curse removed rewards","a cursed removed","a cursed removed"}}); + hintTable[HMS_SONG_OF_HEALING] = HintText::Sometimes({ Text{"a masked man's melody teaches","a masked man's melody","a masked man's melody"}}); + hintTable[HMS_BOMBERS_NOTEBOOK] = HintText::Sometimes({ Text{"a masked man's gift rewards","a masked man's gift","a masked man's gift"}}); + hintTable[HMS_STARTING_SWORD] = HintText::Sometimes({ Text{"a new file yields","a new file","a new file"}}); + hintTable[HMS_STARTING_SHIELD] = HintText::Sometimes({ Text{"a new file yields","a new file","a new file"}}); + //PRE_CLOCK_TOWN_CHEST, +//Deku Palace + hintTable[DEKU_PALACE_BEAN_SELLER] = HintText::Sometimes({ Text{"a gorging merchant sells", "", ""}}); + hintTable[DEKU_PALACE_WEST_GARDEN] = HintText::Sometimes({ Text{"the home of scrubs contains", "", ""}}); + hintTable[DEKU_PALACE_BUTLER_RACE] = HintText::Sometimes({ Text{"the royal servant rewards", "", ""}}); + hintTable[DEKU_PALACE_BEAN_GROTTO_CHEST] = HintText::Sometimes({ Text{"a merchant's cave contains", "", ""}}); + hintTable[DEKU_PALACE_IMPRISONED_MONKEY] = HintText::Sometimes({ Text{"a false imprisonment teaches", "", ""}}); +//East Clock Town + hintTable[E_CLOCK_TOWN_AROMA_IN_BAR] = HintText::Sometimes({ Text{"an important lady rewards", "", ""}}); + hintTable[E_CLOCK_TOWN_ARCHERY_1] = HintText::Sometimes({ Text{"a town activity rewards", "", ""}}); + hintTable[E_CLOCK_TOWN_ARCHERY_2] = HintText::Sometimes({ Text{"a town activity rewards", "", ""}}); + hintTable[E_CLOCK_TOWN_MAYOR] = HintText::Sometimes({ Text{"a town leader rewards", "", ""}}); + hintTable[E_CLOCK_TOWN_HONEY_DARLING_3DAYS] = HintText::Sometimes({ Text{"a lovers game rewards", "", ""}}); + hintTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_GORON] = HintText::Sometimes({ Text{"a treasure game rewards", "", ""}}); + hintTable[E_CLOCK_TOWN_POSTMAN_FREEDOM] = HintText::Sometimes({ Text{"a delivery person rewards", "", ""}}); + hintTable[E_CLOCK_TOWN_GORMAN] = HintText::Sometimes({ Text{"a miserable leader rewards", "", ""}}); + hintTable[E_CLOCK_TOWN_AROMA_IN_OFFICE] = HintText::Sometimes({ Text{"an important lady rewards", "", ""}}); + hintTable[BOMBERS_HIDEOUT_CHEST] = HintText::Sometimes({ Text{"a secret hideout contains", "", ""}}); + hintTable[E_CLOCK_TOWN_CHEST] = HintText::Sometimes({ Text{"a shop roof contains", "", ""}}); + hintTable[E_CLOCK_TOWN_POSTBOX] = HintText::Sometimes({ Text{"a correspondence box contains", "", ""}}); + //hintTable[E_CLOCK_TOWN_MILK_BAR_CHATEAU] = HintText::Sometimes({ Text{"", "", ""}}); + //hintTable[E_CLOCK_TOWN_MILK_BAR_MILK] = HintText::Sometimes({ Text{"", "", ""}}); + hintTable[GORMAN_TRACK_MYSTERY_MILK_QUEST] = HintText::Sometimes({ Text{"an upset stomach cure rewards", "", ""}}); + //hintTable[E_CLOCK_TOWN_HONEY_DARLING_ANY_DAY] = HintText::Sometimes({ Text{"", "", ""}}); + //hintTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_HUMAN] = HintText::Sometimes({ Text{"", "", ""}}); + //hintTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_ZORA] = HintText::Sometimes({ Text{"", "", ""}}); + //hintTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_DEKU] = HintText::Sometimes({ Text{"", "", ""}}); +//Goron Village + hintTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE] = HintText::Sometimes({ Text{"a large goron rewards", "", ""}}); + hintTable[GORON_VILLAGE_SCRUB_PURCHASE] = HintText::Sometimes({ Text{"a northern merchant sells", "", ""}}); + 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_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", "", ""}}); + hintTable[GORON_SHOP_ITEM_1] = HintText::Sometimes({ Text{"a goron shop sells", "", ""}}); + hintTable[GORON_SHOP_ITEM_2] = HintText::Sometimes({ Text{"a goron shop sells", "", ""}}); + hintTable[GORON_SHOP_ITEM_3] = HintText::Sometimes({ Text{"a goron shop sells", "", ""}}); +//Great Bay Coast + hintTable[GBC_OCEAN_SPIDER_DAY1] = HintText::Sometimes({ Text{"a new ocean home owner rewards", "", ""}}); + //hintTable[GBC_OCEAN_SPIDER_DAY2] = HintText::Sometimes({ Text{"", "", ""}}); + //hintTable[GBC_OCEAN_SPIDER_DAY3] = HintText::Sometimes({ Text{"", "", ""}}); + hintTable[GBC_FISHERMAN_GAME] = HintText::Sometimes({ Text{"an ocean game rewards", "", ""}}); + hintTable[GBC_OCEAN_SPIDER_CHEST] = HintText::Sometimes({ Text{"the colored masks contains", "", ""}}); + hintTable[GBC_LAB_FISH] = HintText::Sometimes({ Text{"feeding the fish rewards", "", ""}}); + hintTable[GBC_LEDGE] = HintText::Sometimes({ Text{"an ocean ledge contains", "", ""}}); + hintTable[GBC_MIKAU] = HintText::Sometimes({ Text{"a healed spirit rewards", "", ""}}); + hintTable[GBC_BABY_ZORAS] = HintText::Sometimes({ Text{"the pirates' loot teaches", "", ""}}); + hintTable[GBC_GROTTO_CHEST] = HintText::Sometimes({ Text{"an ocean cave contains", "", ""}}); + hintTable[GBC_GROTTO_COW1] = HintText::Sometimes({ Text{"a lost creature gives", "", ""}}); + hintTable[GBC_GROTTO_COW2] = HintText::Sometimes({ Text{"a lost creature gives", "", ""}}); + hintTable[GBC_FISHERMAN_PHOTO] = HintText::Sometimes({ Text{"a fisherman rewards", "", ""}}); + hintTable[TINGLE_GBC_GB] = HintText::Sometimes({ Text{"a map maker sells", "", ""}}); + hintTable[TINGLE_GBC_ST] = HintText::Sometimes({ Text{"a map maker sells", "", ""}}); +//Ikana Canyon + hintTable[IKANA_CANYON_GREAT_FAIRY] = HintText::Sometimes({Text{"the fairy of kindness rewards", "", ""}}); + hintTable[IKANA_CANYON_POE_HUT_HP] = HintText::Sometimes({Text{"a game of ghosts rewards", "", ""}}); + hintTable[IKANA_CANYON_LEDGE] = HintText::Sometimes({Text{"a canyon ledge contains", "", ""}}); + hintTable[IKANA_CANYON_PAMELAS_FATHER] = HintText::Sometimes({Text{"a lost father rewards", "", ""}}); + hintTable[IKANA_CANYON_SECRET_SHRINE_GROTTO_CHEST] = HintText::Sometimes({Text{"a waterfall cave contains", "", ""}}); + hintTable[IKANA_CANYON_SCRUB_TRADE] = HintText::Sometimes({Text{"an eastern merchant trades", "", ""}}); + hintTable[IKANA_CANYON_SCRUB_PURCHASE] = HintText::Sometimes({Text{"an eastern merchant sells", "", ""}}); + hintTable[TINGLE_IKANA_CANYON_ST] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); + hintTable[TINGLE_IKANA_CANYON_CT] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); +//Ikana Graveyard + hintTable[IKANA_GRAVEYARD_DAMPE_DIGGING] = HintText::Sometimes({Text{"a fearful basement contains", "", ""}}); + hintTable[IKANA_GRAVEYARD_IRON_KNUCKLE_CHEST] = HintText::Sometimes({Text{"a hollow ground contains", "", ""}}); + hintTable[IKANA_GRAVEYARD_CAPTAIN_KEETA_CHEST] = HintText::Sometimes({Text{"a skeletal leader rewards", "", ""}}); + hintTable[IKANA_GRAVEYARD_DAY_ONE_GRAVE_TABLET] = HintText::Sometimes({Text{"a hollow ground teaches", "", ""}}); + hintTable[IKANA_GRAVEYARD_DAY_ONE_GRAVE_BATS] = HintText::Sometimes({Text{"a cloud of bats contains", "", ""}}); + hintTable[IKANA_GRAVEYARD_GROTTO_CHEST] = HintText::Sometimes({Text{"a circled cave contains", "", ""}}); +//Laundry Pool + hintTable[LAUNDRY_POOL_KAFEI] = HintText::Sometimes({Text{"a posted letter rewards", "", ""}}); + hintTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE] = HintText::Sometimes({Text{"a shady dealer rewards", "", ""}}); + hintTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO] = HintText::Sometimes({Text{"a shady dealer rewards", "", ""}}); + hintTable[LAUNDRY_POOL_GURU_GURU] = HintText::Sometimes({Text{"a musician gives", "", ""}}); + hintTable[LAUNDRY_POOL_SF] = HintText::Sometimes({Text{"a lost fairy is", "", ""}}); +//Milk Road + hintTable[MILK_ROAD_GORMAN_RACE] = HintText::Sometimes({Text{"a sporting event rewards", "", ""}}); + hintTable[MILK_ROAD_GORMAN_MILK_BUY] = HintText::Sometimes({Text{"a dodgy seller sells", "", ""}}); + hintTable[MILK_ROAD_KEATON_QUIZ] = HintText::Sometimes({Text{"a mysterious fox rewards", "", ""}}); + hintTable[TINGLE_MILK_ROAD_RR] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); + hintTable[TINGLE_MILK_ROAD_GB] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); +//Mountain Village + hintTable[MOUNTAIN_VILLAGE_SMITH_DAY_ONE] = HintText::Sometimes({Text{"a moutain smith crafts", "", ""}}); + hintTable[MOUNTAIN_VILLAGE_SMITH_DAY_TWO] = HintText::Sometimes({Text{"a mountain smith crafts", "", ""}}); + hintTable[MOUNTAIN_VILLAGE_FROG_CHOIR] = HintText::Sometimes({Text{"a frog choir rewards", "", ""}}); + hintTable[MOUNTAIN_VILLAGE_DARMANI] = HintText::Sometimes({Text{"a mountain spirit rewards", "", ""}}); + hintTable[MOUNTAIN_VILLAGE_HUNGRY_GORON] = HintText::Sometimes({Text{"a hungry goron rewards", "", ""}}); + hintTable[MOUNTAIN_WATERFALL_CHEST] = HintText::Sometimes({Text{"a springtime waterfall contains", "", ""}}); + hintTable[MOUNTAIN_VILLAGE_SPRING_WATER_GROTTO_CHEST] = HintText::Sometimes({Text{"a springtime cave contains", "", ""}}); +//N Clock Town + hintTable[N_CLOCK_TOWN_GREAT_FAIRY_DEKU] = HintText::Sometimes({Text{"the fairy of magic rewards", "", ""}}); + //hintTable[N_CLOCK_TOWN_BOMBERS_HIDE_SEEK] = HintText::Sometimes({Text{"", "", ""}}); doesn't give an item in 3d + hintTable[N_CLOCK_TOWN_KEATON_QUIZ] = HintText::Sometimes({Text{"a mysterious fox rewards", "", ""}}); + hintTable[N_CLOCK_TOWN_DEKU_PLAYGROUND_3DAYS] = HintText::Sometimes({Text{"a game for scrubs rewards", "", ""}}); + hintTable[N_CLOCK_TOWN_TREE] = HintText::Sometimes({Text{"a town playground contains", "", ""}}); + hintTable[N_CLOCK_TOWN_OLD_LADY] = HintText::Sometimes({Text{"an old lady's struggle rewards", "", ""}}); + hintTable[N_CLOCK_TOWN_GREAT_FAIRY_HUMAN] = HintText::Sometimes({Text{"the fairy of magi rewardsc", "", ""}}); + hintTable[TINGLE_N_CLOCK_TOWN_CT] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); + hintTable[TINGLE_N_CLOCK_TOWN_WF] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); + hintTable[N_CLOCK_TOWN_POSTBOX] = HintText::Sometimes({Text{"a correspondence box contains", "", ""}}); + //hintTable[N_CLOCK_TOWN_DEKU_PLAYGROUND_ADAY] = HintText::Sometimes({Text{"a game for scrubs", "", ""}}); +//Road to Snowhead + hintTable[ROAD_TO_SNOWHEAD_PILLAR] = HintText::Sometimes({Text{"a cold platform contains", "", ""}}); + hintTable[ROAD_TO_SNOWHEAD_GROTTO_CHEST] = HintText::Sometimes({Text{"a snowy cave contains", "", ""}}); +//Pinnacle Rock + hintTable[PINNACLE_ROCK_SEAHORSES] = HintText::Sometimes({Text{"a fishy reunion rewards", "", ""}}); + hintTable[PINNACLE_ROCK_UPPER_CHEST] = HintText::Sometimes({Text{"a marine trench contains", "", ""}}); + hintTable[PINNACLE_ROCK_LOWER_CHEST] = HintText::Sometimes({Text{"a marine trench contains", "", ""}}); + hintTable[PINNACLE_ROCK_ZORA_EGG1] = HintText::Sometimes({Text{"in a marine trench rests", "", ""}}); + hintTable[PINNACLE_ROCK_ZORA_EGG2] = HintText::Sometimes({Text{"in a marine trench rests", "", ""}}); + hintTable[PINNACLE_ROCK_ZORA_EGG3] = HintText::Sometimes({Text{"in a marine trench rests", "", ""}}); +//Road to Ikana + hintTable[ROAD_TO_IKANA_PILLAR_CHEST] = HintText::Sometimes({Text{"a high chest contains", "", ""}}); + hintTable[ROAD_TO_IKANA_GROTTO_CHEST] = HintText::Sometimes({Text{"a blocked cave contains", "", ""}}); +//Road to Southern Swamp + hintTable[ROAD_TO_SS_ARCHERY_1] = HintText::Sometimes({Text{"a swamp game rewards", "", ""}}); + hintTable[ROAD_TO_SS_ARCHERY_2] = HintText::Sometimes({Text{"a swamp game rewards", "", ""}}); + hintTable[ROAD_TO_SS_TREE] = HintText::Sometimes({Text{"a batty tree contains", "", ""}}); + hintTable[ROAD_TO_SWAMP_GROTTO_CHEST] = HintText::Sometimes({Text{"a southern cave contains", "", ""}}); + hintTable[TINGLE_ROAD_TO_SS_WF] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); + hintTable[TINGLE_ROAD_TO_SS_SH] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); +//Romani Ranch + hintTable[ROMANI_RANCH_ALIEN_DEFENSE] = HintText::Sometimes({Text{"a ranch invasion rewards", "", ""}}); + hintTable[ROMANI_RANCH_DOG_RACE] = HintText::Sometimes({Text{"a sporting event rewards", "", ""}}); + hintTable[ROMANI_RANCH_GROG] = HintText::Sometimes({Text{"a chicken lover rewards", "", ""}}); + hintTable[ROMANI_RANCH_CREMIA_ESCORT] = HintText::Sometimes({Text{"an older sister rewards", "", ""}}); + hintTable[ROMANI_RANCH_ROMANIS_GAME] = HintText::Sometimes({Text{"an equine reunion teaches", "", ""}}); + hintTable[ROMANI_RANCH_COW_1] = HintText::Sometimes({Text{"a lost creature gives", "", ""}}); + hintTable[ROMANI_RANCH_COW_2] = HintText::Sometimes({Text{"a lost creature gives", "", ""}}); + hintTable[ROMANI_RANCH_COW_3] = HintText::Sometimes({Text{"a lost creature gives", "", ""}}); + hintTable[DOGGY_RACETRACK_ROOF_CHEST] = HintText::Sometimes({Text{"a day at the races contains", "", ""}}); +//S Clock Town + hintTable[S_CLOCK_TOWN_SCRUB_TRADE] = HintText::Sometimes({Text{"a town merchant trades", "", ""}}); + hintTable[S_CLOCK_TOWN_POSTBOX] = HintText::Sometimes({Text{"a correspondence box contains", "", ""}}); + hintTable[S_CLOCK_TOWN_CLOCK_TOWER_ENTRANCE] = HintText::Sometimes({Text{"the tower doors contains", "", ""}}); + hintTable[S_CLOCK_TOWN_STRAW_ROOF_CHEST] = HintText::Sometimes({Text{"a straw roof contains", "", ""}}); + hintTable[S_CLOCK_TOWN_FINAL_DAY_CHEST] = HintText::Sometimes({Text{"a carnival tower contains", "", ""}}); + hintTable[S_CLOCK_TOWN_BANK_REWARD_1] = HintText::Sometimes({Text{"a keeper of wealth rewards", "", ""}}); + hintTable[S_CLOCK_TOWN_BANK_REWARD_2] = HintText::Sometimes({Text{"interest rewards", "", ""}}); + hintTable[S_CLOCK_TOWN_BANK_REWARD_3] = HintText::Sometimes({Text{"being rich rewards", "", ""}}); +//Snowhead + hintTable[SNOWHEAD_GREAT_FAIRY] = HintText::Sometimes({Text{"the fairy of power rewards", "", ""}}); +//Southern Swamp + hintTable[SOUTHERN_SWAMP_KOUME] = HintText::Sometimes({Text{"a witch rewards", "", ""}}); + hintTable[SOUTHERN_SWAMP_KOTAKE] = HintText::Sometimes({Text{"a sleeping witch rewards", "", ""}}); + hintTable[SOUTHERN_SWAMP_KOTAKE_IN_WOODS] = HintText::Sometimes({Text{"a witch rewards", "", ""}}); + hintTable[SOUTHERN_SWAMP_SCRUB_TRADE] = HintText::Sometimes({Text{"a southern merchant trades", "", ""}}); + hintTable[SOUTHERN_SWAMP_PICTOGRAPH_WINNER] = HintText::Sometimes({Text{"a swamp game rewards", "", ""}}); + hintTable[SOUTHERN_SWAMP_BOAT_ARCHERY] = HintText::Sometimes({Text{"a swamp game rewards", "", ""}}); + hintTable[SWAMP_TOURIST_CENTER_ROOF] = HintText::Sometimes({Text{"a tourist center contains", "", ""}}); + hintTable[SOUTHERN_SWAMP_NEAR_SPIDER_HOUSE_GROTTO_CHEST] = HintText::Sometimes({Text{"a swampy cave contains", "", ""}}); + hintTable[SOUTHERN_SWAMP_SPIDER_HOUSE_REWARD] = HintText::Sometimes({Text{"a swamp spider man rewards", "", ""}}); + hintTable[SOUTHERN_SWAMP_MYSTERY_WOODS_GROTTO_CHEST] = HintText::Sometimes({Text{"a mystery cave contains", "", ""}}); + hintTable[SOUTHERN_SWAMP_KOTAKE_MUSHROOM_SALE] = HintText::Sometimes({Text{"a sleeping witch rewards", "", ""}}); + //hintTable[SOUTHERN_SWAMP_PICTOGRAPH_STANDARD] = HintText::Sometimes({Text{"", "", ""}}); + //hintTable[SOUTHERN_SWAMP_PICTOGRAPH_GOOD] = HintText::Sometimes({Text{"", "", ""}}); + hintTable[SOUTHERN_SWAMP_SCRUB_PURCHASE] = HintText::Sometimes({Text{"a southern merchant sells", "", ""}}); + hintTable[POTION_SHOP_ITEM_1] = HintText::Sometimes({Text{"a potion maker sells", "", ""}}); + hintTable[POTION_SHOP_ITEM_2] = HintText::Sometimes({Text{"a potion maker sells", "", ""}}); + hintTable[POTION_SHOP_ITEM_3] = HintText::Sometimes({Text{"a potion maker sells", "", ""}}); +//StockPotInn + hintTable[STOCKPOTINN_RESERVATION] = HintText::Sometimes({Text{"checking-in rewards", "", ""}}); + hintTable[STOCKPOTINN_MIDNIGHT_MEETING] = HintText::Sometimes({Text{"a late meeting rewards", "", ""}}); + hintTable[STOCKPOTINN_TOILET_HAND] = HintText::Sometimes({Text{"a strange palm rewards", "", ""}}); + hintTable[STOCKPOTINN_GRANDMA_SHORT_STORY] = HintText::Sometimes({Text{"an old lady rewards", "", ""}}); + hintTable[STOCKPOTINN_GRANDMA_LONG_STORY] = HintText::Sometimes({Text{"an old lady rewards", "", ""}}); + hintTable[STOCKPOTINN_ANJU_AND_KAFEI] = HintText::Sometimes({Text{"a lovers' reunion rewards", "", ""}}); + hintTable[STOCKPOTINN_STAFF_ROOM_CHEST] = HintText::Sometimes({Text{"an employee room contains", "", ""}}); + hintTable[STOCKPOTINN_GUEST_ROOM_CHEST] = HintText::Sometimes({Text{"a guest bedroom contains", "", ""}}); +//Stone Tower + hintTable[STONE_TOWER_INVERTED_RIGHT_CHEST] = HintText::Sometimes({Text{"a sky below contains", "", ""}}); + hintTable[STONE_TOWER_INVERTED_CENTER_CHEST] = HintText::Sometimes({Text{"a sky below contains", "", ""}}); + hintTable[STONE_TOWER_INVERTED_LEFT_CHEST] = HintText::Sometimes({Text{"a sky below contains", "", ""}}); +//Termina Field + hintTable[TERMINA_FIELD_MOONS_TEAR] = HintText::Sometimes({Text{"a falling star contains", "", ""}}); + hintTable[TERMINA_FIELD_GOSSIP_STONES] = HintText::Sometimes({Text{"mysterious stones reward", "", ""}}); + hintTable[TERMINA_FIELD_BUSINESS_SCRUB] = HintText::Sometimes({Text{"a hidden merchant sells", "", ""}}); + hintTable[TERMINA_FIELD_PEAHAT_GROTTO_CHEST] = HintText::Sometimes({Text{"a hollow ground contains", "", ""}}); + hintTable[TERMINA_FIELD_DODONGO_GROTTO_CHEST] = HintText::Sometimes({Text{"a hollow ground contains", "", ""}}); + hintTable[TERMINA_FIELD_BIO_BABA_GROTTO_BEEHIVE] = HintText::Sometimes({Text{"a beehive contains", "", ""}}); + hintTable[TERMINA_FIELD_KAMARO] = HintText::Sometimes({Text{"a dancer rewards", "", ""}}); + hintTable[TERMINA_FIELD_PILLAR_GROTTO_CHEST] = HintText::Sometimes({Text{"a hollow pillar contains", "", ""}}); + hintTable[TERMINA_FIELD_GRASS_GROTTO_CHEST] = HintText::Sometimes({Text{"a grassy cave contains", "", ""}}); + hintTable[TERMINA_FIELD_UNDERWATER_CHEST] = HintText::Sometimes({Text{"a sunken chest contains", "", ""}}); + hintTable[TERMINA_FIELD_GRASS_CHEST] = HintText::Sometimes({Text{"a grassy chest contains", "", ""}}); + hintTable[TERMINA_FIELD_STUMP_CHEST] = HintText::Sometimes({Text{"a tree chest contains", "", ""}}); + hintTable[TERMINA_FIELD_GROTTO_COW1] = HintText::Sometimes({Text{"a lost creature gives", "", ""}}); + hintTable[TERMINA_FIELD_GROTTO_COW2] = HintText::Sometimes({Text{"a lost creature gibes", "", ""}}); +//Twin Islands + hintTable[HOT_SPRING_WATER_GROTTO_CHEST] = HintText::Sometimes({Text{"a steamy grotto contains", "", ""}}); + hintTable[TWIN_ISLANDS_GORON_RACE] = HintText::Sometimes({Text{"a sporting event rewards", "", ""}}); + hintTable[TWIN_ISLANDS_GORON_RACETRACK_GROTTO_CHEST] = HintText::Sometimes({Text{"a hidden cave contains", "", ""}}); + hintTable[TWIN_ISLANDS_UNDERWATER_RAMP_CHEST] = HintText::Sometimes({Text{"a spring treasure contains", "", ""}}); + hintTable[TWIN_ISLANDS_CAVE_CHEST] = HintText::Sometimes({Text{"a sunken springtime treasure contains", "", ""}}); + hintTable[TINGLE_TWIN_ISLANDS_SH] = HintText::Sometimes({Text{"a map maker sells ", "", ""}}); + hintTable[TINGLE_TWIN_ISLANDS_RR] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); + hintTable[TINGLE_TWIN_ISLANDS_SH_SPRING] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); + hintTable[TINGLE_TWIN_ISLANDS_RR_SPRING] = HintText::Sometimes({Text{"a map maker sells", "", ""}}); +//W Clock Town + hintTable[W_CLOCK_TOWN_BOMB_BAG_BUY] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + hintTable[W_CLOCK_TOWN_BIG_BOMB_BAG_BUY] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + hintTable[W_CLOCK_TOWN_POSTMANS_GAME] = HintText::Sometimes({Text{"a delivery person rewards", "", ""}}); + hintTable[W_CLOCK_TOWN_ROSA_SISTERS] = HintText::Sometimes({Text{"traveling sisters reward", "", ""}}); + 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", "", ""}}); + hintTable[TRADING_POST_ITEM_3] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + hintTable[TRADING_POST_ITEM_4] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + hintTable[TRADING_POST_ITEM_5] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + hintTable[TRADING_POST_ITEM_6] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + hintTable[TRADING_POST_ITEM_7] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + hintTable[TRADING_POST_ITEM_8] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + hintTable[BOMB_SHOP_ITEM_1] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + hintTable[BOMB_SHOP_ITEM_2] = HintText::Sometimes({Text{"a town merchant sells", "", ""}}); + //hintTable[BOMB_SHOP_ITEM_3] = HintText::Sometimes({Text{"a town merchant", "", ""}}); +//Woodfall + hintTable[WOODFALL_BRIDGE_CHEST] = HintText::Sometimes({Text{"a swamp chest contains", "", ""}}); + hintTable[WOODFALL_BEHIND_OWL_CHEST] = HintText::Sometimes({Text{"a swamp chest contains", "", ""}}); + hintTable[ENTRANCE_TO_WOODFALL_CHEST] = HintText::Sometimes({Text{"a swamp chest contains", "", ""}}); + hintTable[WOODFALL_GREAT_FAIRY] = HintText::Sometimes({Text{"the fairy of wisdom rewards", "", ""}}); +//Zora Cape + hintTable[ZORA_CAPE_GREAT_FAIRY] = HintText::Sometimes({Text{"the fairy of courage rewards", "", ""}}); + hintTable[ZORA_CAPE_BEAVER_RACE_1] = HintText::Sometimes({Text{"a river dweller rewards", "", ""}}); + hintTable[ZORA_CAPE_BEAVER_RACE_2] = HintText::Sometimes({Text{"a river dweller rewards", "", ""}}); + hintTable[ZORA_CAPE_LIKE_LIKE] = HintText::Sometimes({Text{"a shield eater contains", "", ""}}); + hintTable[ZORA_CAPE_LEDGE_NO_TREE] = HintText::Sometimes({Text{"a high place contains", "", ""}}); + hintTable[ZORA_CAPE_LEDGE_WITH_TREE] = HintText::Sometimes({Text{"a high place contains", "", ""}}); + hintTable[ZORA_CAPE_GROTTO_CHEST] = HintText::Sometimes({Text{"a beach cave contains", "", ""}}); + hintTable[ZORA_CAPE_UNDERWATER_CHEST] = HintText::Sometimes({Text{"a sunken chest contains ", "", ""}}); +//Zora Hall + hintTable[ZORA_HALL_SCRUB_TRADE] = HintText::Sometimes({Text{"a western merchant trades", "", ""}}); + hintTable[ZORA_HALL_EVAN] = HintText::Sometimes({Text{"a musician rewards", "", ""}}); + hintTable[ZORA_HALL_LULU_ROOM_LEDGE] = HintText::Sometimes({Text{"the singer's room contains", "", ""}}); + hintTable[ZORA_HALL_SCRUB_PURCHASE] = HintText::Sometimes({Text{"a western merchant sells", "", ""}}); + //hintTable[ZORA_HALL_STAGE_LIGHTS] = HintText::Sometimes({Text{"a fan", "", ""}}); + //hintTable[ZORA_HALL_BAD_PHOTO_LULU] = HintText::Sometimes({Text{"a fan", "", ""}}); + //hintTable[ZORA_HALL_GOOD_PHOTO_LULU] = HintText::Sometimes({Text{"a fan", "", ""}}); + hintTable[ZORA_SHOP_ITEM_1] = HintText::Sometimes({Text{"a zora merchant sells", "", ""}}); + hintTable[ZORA_SHOP_ITEM_2] = HintText::Sometimes({Text{"a zora merchant sells", "", ""}}); + hintTable[ZORA_SHOP_ITEM_3] = HintText::Sometimes({Text{"a zora merchant sells", "", ""}}); + + /*------------------------- + | DUNGEON LOCATION TEXT | + -------------------------*/ + + hintTable[WOODFALL_TEMPLE_HEROS_BOW_CHEST] = HintText::Exclude({Text{"the sleeping temple contains", "", ""}}); + hintTable[WOODFALL_TEMPLE_MAP_CHEST] = HintText::Exclude({Text{"the sleeping temple contains", "", ""}}); + hintTable[WOODFALL_TEMPLE_COMPASS_CHEST] = HintText::Exclude({Text{"the sleeping temple contains", "", ""}}); + hintTable[WOODFALL_TEMPLE_BOSS_KEY_CHEST] = HintText::Exclude({Text{"the sleeping temple contains", "", ""}}); + hintTable[WOODFALL_TEMPLE_SMALL_KEY_CHEST] = HintText::Exclude({Text{"the sleeping temple contains", "", ""}}); + hintTable[WOODFALL_TEMPLE_DEKU_PRINCESS] = HintText::Exclude({Text{"the sleeping temple rewards", "", ""}}); + hintTable[WF_SF_ENTRANCE_FAIRY] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_ENTRANCE_PLATFORM] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_MAIN_ROOM_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_MAIN_ROOM_SWITCH] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_PRE_BOSS_LOWER_RIGHT_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_PRE_BOSS_UPPER_RIGHT_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_PRE_BOSS_UPPER_LEFT_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_PRE_BOSS_PILLAR_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_DEKU_BABA] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_DRAGONFLY_ROOM_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_SKULLTULA] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_DARK_ROOM] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_JAR_FAIRY] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_BRIDGE_ROOM_BEEHIVE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[WF_SF_PLATFORM_ROOM_BEEHIVE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ODOLWA_HEART_CONTAINER] = HintText::Exclude({Text{"a masked evil contains", "", ""}}); +//Snowhead Temple + hintTable[SNOWHEAD_TEMPLE_FIRE_ARROW_CHEST] = HintText::Exclude({Text{"an icy temple contains", "", ""}}); + hintTable[SNOWHEAD_TEMPLE_MAP_CHEST] = HintText::Exclude({Text{"an icy temple contains", "", ""}}); + hintTable[SNOWHEAD_TEMPLE_COMPASS_CHEST] = HintText::Exclude({Text{"an icy temple contains", "", ""}}); + hintTable[SNOWHEAD_TEMPLE_BOSS_KEY_CHEST] = HintText::Exclude({Text{"an icy temple contains", "", ""}}); + hintTable[SNOWHEAD_TEMPLE_BLOCK_ROOM_CHEST] = HintText::Exclude({Text{"an icy temple contains", "", ""}}); + hintTable[SNOWHEAD_TEMPLE_ICICLE_ROOM_CHEST] = HintText::Exclude({Text{"an icy temple contains", "", ""}}); + hintTable[SNOWHEAD_TEMPLE_BRIDGE_ROOM_CHEST] = HintText::Exclude({Text{"an icy temple contains", "", ""}}); + hintTable[SH_SF_SNOW_ROOM_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_CEILING_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_DINOLFOS_1] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_DINOLFOS_2] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_BRIDGE_ROOM_LEDGE_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_BRIDGE_ROOM_PILLAR_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_MAP_ROOM_FAIRY] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_MAP_ROOM_LEDGE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_BASEMENT] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_TWIN_BLOCK] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_ICICLE_ROOM_WALL] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_MAIN_ROOM_WALL] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_PILLAR_FREEZARDS] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_ICE_PUZZLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[SH_SF_CRATE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GOHT_HEART_CONTAINER] = HintText::Exclude({Text{"a masked evil contains", "", ""}}); +//Great bay Temple + hintTable[GBT_ICE_ARROW_CHEST] = HintText::Exclude({Text{"the murky watered temple contains", "", ""}}); + hintTable[GBT_MAP_CHEST] = HintText::Exclude({Text{"the murky watered temple contains", "", ""}}); + hintTable[GBT_COMPASS_CHEST] = HintText::Exclude({Text{"the murky watered temple contains", "", ""}}); + hintTable[GBT_BOSS_KEY_CHEST] = HintText::Exclude({Text{"the murky watered temple contains", "", ""}}); + hintTable[GBT_SMALL_KEY_CHEST] = HintText::Exclude({Text{"the murky watered temple contains", "", ""}}); + hintTable[GBT_SF_SKULLTULA] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_WATER_CONTROL_UNDERWATER_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_WATERWHEEL_ROOM_LOWER] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_WATERWHEEL_ROOM_UPPER] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_GREEN_VALVE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_SEESAW_ROOM] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_ENTRANCE_TORCHES] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_BIO_BABAS] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_UNDERWATER_BARREL] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_WHIRLPOOL_BARREL] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_WHIRLPOOL_JAR] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_DEXIHANDS_JAR] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_LEDGE_JAR] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_PRE_BOSS_ROOM_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GBT_SF_PRE_BOSS_ROOM_UNDERWATER_BUBBLE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[GYORG_HEART_CONTAINER] = HintText::Exclude({Text{"a masked evil contains", "", ""}}); +//Stone Tower Temple + hintTable[STONE_TOWER_TEMPLE_MAP_CHEST] = HintText::Exclude({Text{"a rocky temple contains", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_COMPASS_CHEST] = HintText::Exclude({Text{"a rocky temple contains", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_BOSS_KEY_CHEST] = HintText::Exclude({Text{"a rocky temple contains", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_ARMOS_ROOM_CHEST] = HintText::Exclude({Text{"a rocky temple contains", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_BRIDGE_SWITCH_CHEST] = HintText::Exclude({Text{"a rocky temple contains", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_UPDRAFT_ROOM_CHEST] = HintText::Exclude({Text{"a rocky temple contains", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM_CHEST] = HintText::Exclude({Text{"a rocky temple contains", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST] = HintText::Exclude({Text{"a rocky temple contains", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST] = HintText::Exclude({Text{"a rocky temple contains", "", ""}}); + hintTable[ST_SF_MIRROR_SUN_BLOCK] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_LAVA_ROOM_LEDGE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_LAVA_ROOM_FIRE_RING] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_EYEGORE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_UPDRAFT_FIRE_RING] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_MIRROR_SUN_SWITCH] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_BOSS_WARP] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_WIZZROBE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_DEATH_ARMOS] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_UPDRAFT_FROZEN_EYE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_THIN_BRIDGE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_BASEMENT_LEDGE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_STATUE_EYE] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_UNDERWATER] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[ST_SF_BRIDGE_CRYSTAL] = HintText::Exclude({Text{"a lost fairy is", "", ""}}); + hintTable[TWINMOLD_HEART_CONTAINER] = HintText::Exclude({Text{"a masked evil contains", "", ""}}); +//Pirate Fortress + hintTable[PF_INTERIOR_HOOKSHOT_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_INT_LOWER_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_INT_UPPER_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_INT_TANK_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_INT_GUARD_ROOM_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_CAGE_ROOM_SHALLOW_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_CAGE_ROOM_DEEP_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_MAZE_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_SEWER_CAGE] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_EXTERIOR_LOG_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_EXTERIOR_SAND_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_EXTERIOR_CORNER_CHEST] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_INT_INVISIBLE_SOLDIER] = HintText::Exclude({Text{"the home of pirates contains", "", ""}}); + hintTable[PF_INT_HOOKSHOT_ROOM_ZORA_EGG] = HintText::Exclude({Text{"in the home of pirates rests", "", ""}}); + hintTable[PF_INT_GUARD_ROOM_ZORA_EGG] = HintText::Exclude({Text{"in the home of pirates rests", "", ""}}); + hintTable[PF_INT_BARREL_MAZE_ZORA_EGG] = HintText::Exclude({Text{"in the home of pirates rests", "", ""}}); + hintTable[PF_INT_LAVA_ROOM_ZORA_EGG] = HintText::Exclude({Text{"in the home of pirates rests", "", ""}}); +//Beneath the Well + hintTable[BENEATH_THE_WELL_MIRROR_SHIELD_CHEST] = HintText::Exclude({Text{"a frightful exchange contains", "", ""}}); + hintTable[WELL_LEFT_PATH_CHEST] = HintText::Exclude({Text{"a frightful exchange contains", "", ""}}); + hintTable[WELL_RIGHT_PATH_CHEST] = HintText::Exclude({Text{"a frightful exchange contains", "", ""}}); + hintTable[BENEATH_THE_WELL_COW] = HintText::Exclude({Text{"a lost creature contains", "", ""}}); +//Ikana Castle + hintTable[IKANA_CASTLE_PILLAR] = HintText::Exclude({Text{"a fiery pilar contains", "", ""}}); + hintTable[IKANA_CASTLE_IKANA_KING] = HintText::Exclude({Text{"a fallen king teaches", "", ""}}); +//Secret Shrine + hintTable[SECRET_SHRINE_DINOLFOS_CHEST] = HintText::Exclude({Text{"a secret place contains", "", ""}}); + hintTable[SECRET_SHRINE_WIZZROBE_CHEST] = HintText::Exclude({Text{"a secret place contains", "", ""}}); + hintTable[SECRET_SHRINE_WART_CHEST] = HintText::Exclude({Text{"a secret place contains", "", ""}}); + hintTable[SECRET_SHRINE_GARO_CHEST] = HintText::Exclude({Text{"a secret place contains", "", ""}}); + hintTable[SECRET_SHRINE_FINAL_CHEST] = HintText::Exclude({Text{"a secret place contains", "", ""}}); +//The Moon + hintTable[THE_MOON_DEKU_TRIAL_BONUS] = HintText::Exclude({Text{"a masked child's game contains", "", ""}}); + hintTable[THE_MOON_GORON_TRIAL_BONUS] = HintText::Exclude({Text{"a masked child's game contains", "", ""}}); + hintTable[THE_MOON_ZORA_TRIAL_BONUS] = HintText::Exclude({Text{"a masked child's game contains", "", ""}}); + hintTable[THE_MOON_LINK_TRIAL_BONUS] = HintText::Exclude({Text{"a masked child's game contains", "", ""}}); + hintTable[THE_MOON_GARO_CHEST] = HintText::Exclude({Text{"a masked child's game contains", "", ""}}); + hintTable[THE_MOON_IRON_KNUCKLE_CHEST] = HintText::Exclude({Text{"a masked child's game contains", "", ""}}); + hintTable[THE_MOON_MAJORA_CHILD] = HintText::Exclude({Text{"the lonely child rewards", "", ""}}); +//Southern Swamp Skulltula House + hintTable[SSH_MAIN_ROOM_NEAR_CEILING] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MAIN_ROOM_WATER] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MAIN_ROOM_LOWER_LEFT_SOIL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MAIN_ROOM_LOWER_RIGHT_SOIL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MAIN_ROOM_UPPER_SOIL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MAIN_ROOM_PILLAR] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MAIN_ROOM_UPPER_PILLAR] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MAIN_ROOM_JAR] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MONUMENT_ROOM_CRATE_1] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MONUMENT_ROOM_CRATE_2] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MONUMENT_ROOM_TORCH] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MONUMENT_ROOM_ON_MONUMENT] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_MONUMENT_ROOM_LOWER_WALL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_GOLD_ROOM_NEAR_CEILING] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_GOLD_ROOM_PILLAR] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_GOLD_ROOM_BEEHIVE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_GOLD_ROOM_WALL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_POT_ROOM_JAR] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_POT_ROOM_POT_1] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_POT_ROOM_POT_2] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_POT_ROOM_BEHIND_VINES] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_POT_ROOM_WALL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_POT_ROOM_BEEHIVE_1] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_POT_ROOM_BEEHIVE_2] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_TREE_ROOM_TREE_1] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_TREE_ROOM_TREE_2] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_TREE_ROOM_TREE_3] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_TREE_ROOM_GRASS_1] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_TREE_ROOM_GRASS_2] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[SSH_TREE_ROOM_BEEHIVE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); +//Oceanside spider House + hintTable[OSH_ENTRANCE_LEFT_WALL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_ENTRANCE_RIGHT_WALL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_ENTRANCE_WEB] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_LIBRARY_HOLE_BEHIND_PICTURE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_LIBRARY_HOLE_BEHIND_CABINET] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_LIBRARY_ON_CORNER_BOOKSHELF] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_LIBRARY_CEILING_EDGE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_LIBRARY_BEHIND_BOOKCASE_1] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_LIBRARY_BEHIND_BOOKCASE_2] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_LIBRARY_BEHIND_PICTURE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_SECOND_ROOM_CEILING_EDGE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_SECOND_ROOM_CEILING_PLANK] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_SECOND_ROOM_JAR] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_SECOND_ROOM_WEBBED_HOLE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_SECOND_ROOM_WEBBED_POT] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_SECOND_ROOM_UPPER_POT] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_SECOND_ROOM_BEHIND_SKULL_1] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_SECOND_ROOM_BEHIND_SKULL_2] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_SECOND_ROOM_LOWER_POT] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_STORAGE_ROOM_CEILING_WEB] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_STORAGE_ROOM_BEHIND_CRATE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_STORAGE_ROOM_WALL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_STORAGE_ROOM_CRATE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_STORAGE_ROOM_BARREL] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_COLORED_SKULLS_CEILING_EDGE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_COLORED_SKULLS_CHANDELIER_1] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_COLORED_SKULLS_CHANDELIER_2] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_COLORED_SKULLS_CHANDELIER_3] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_COLORED_SKULLS_BEHIND_PICTURE] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + hintTable[OSH_COLORED_SKULLS_POT] = HintText::Exclude({Text{"a gold spider is", "", ""}}); + + + /*---------------------- + | REGTION HINT TEXT | + ----------------------*/ + hintTable[N_CLOCK_TOWN] = HintText::Region({ Text{"N Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_FAIRY_FOUNTAIN] = HintText::Region({Text{"Clock Town Fairy Fountain", "", ""}}); + hintTable[CLOCK_TOWN_DEKU_PLAYGROUND] = HintText::Region({Text{"Deku Playground", "", ""}}); + hintTable[E_CLOCK_TOWN] = HintText::Region({Text{"E Clock Town", "", ""}}); + hintTable[STOCKPOTINN] = HintText::Region({Text{"StockPotInn", "", ""}}); + hintTable[STOCKPOTINN_GUEST_ROOM] = HintText::Region({Text{"StockPotInn", "", ""}}); + hintTable[STOCKPOTINN_STAFF_ROOM] = HintText::Region({Text{"StockPotInn", "", ""}}); + hintTable[STOCKPOTINN_GRANDMA_ROOM] = HintText::Region({Text{"StockPotInn", "", ""}}); + hintTable[CLOCK_TOWN_OBSERVATORY] = HintText::Region({Text{"Observatory", "", ""}}); + hintTable[CLOCK_TOWN_BAR] = HintText::Region({Text{"Milk Bar", "", ""}}); + hintTable[CLOCK_TOWN_HONEY_DARLING] = HintText::Region({Text{"E Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_TREASURE_CHEST_GAME] = HintText::Region({Text{"E Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_ARCHERY] = HintText::Region({Text{"E Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_MAYOR_HOUSE] = HintText::Region({Text{"E Clock Town", "", ""}}); + hintTable[W_CLOCK_TOWN] = HintText::Region({Text{"W Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_SWORDSMANS_SCHOOL] = HintText::Region({Text{"W Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_POSTMAN_HOUSE] = HintText::Region({Text{"W Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_LOTTERY] = HintText::Region({Text{"W Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_BOMB_SHOP] = HintText::Region({Text{"W Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_TRADING_POST] = HintText::Region({Text{"W Clock Town", "", ""}}); + hintTable[CLOCK_TOWN_CURIOSITY_SHOP] = HintText::Region({Text{"W Clock Town", "", ""}}); + hintTable[S_CLOCK_TOWN] = HintText::Region({Text{"S Clock Town", "", ""}}); + hintTable[CLOCK_TOWER] = HintText::Region({Text{"Clock Tower", "", ""}}); + hintTable[CLOCK_TOWER_ROOF] = HintText::Region({Text{"Clock Tower Roof", "", ""}}); + hintTable[LAUNDRY_POOL] = HintText::Region({Text{"Laundry Pool", "", ""}}); + hintTable[LAUNDRY_POOL_KAFEI_HIDEOUT] = HintText::Region({Text{"Laundry Pool", "", ""}}); + hintTable[TERMINA_FIELD] = HintText::Region({Text{"Termina Field", "", ""}}); + hintTable[TERMINA_FIELD_PEAHAT_GROTTO] = HintText::Region({Text{"Termina Field", "", ""}}); + hintTable[TERMINA_FIELD_DODONGO_GROTTO] = HintText::Region({Text{"Termina Field", "", ""}}); + hintTable[TERMINA_FIELD_BIO_BABA_GROTTO] = HintText::Region({Text{"Termina Field", "", ""}}); + hintTable[TERMINA_FIELD_PILLAR_GROTTO] = HintText::Region({Text{"Termina Field", "", ""}}); + hintTable[TERMINA_FIELD_GRASS_GROTTO] = HintText::Region({Text{"Termina Field", "", ""}}); + hintTable[TERMINA_FIELD_BUSINESS_SCRUB_GROTTO] = HintText::Region({Text{"Termina Field", "", ""}}); + hintTable[TERMINA_FIELD_COW_GROTTO] = HintText::Region({Text{"Termina Field", "", ""}}); + hintTable[TERMINA_FIELD_GOSSIP_STONES_GROTTO] = HintText::Region({Text{"Termina Field", "", ""}}); + hintTable[ROAD_TO_SOUTHERN_SWAMP] = HintText::Region({Text{"Road to Southern Swamp", "", ""}}); + hintTable[ROAD_TO_SOUTHERN_SWAMP_ARCHERY] = HintText::Region({Text{"Road to Southern Swamp", "", ""}}); + hintTable[ROAD_TO_SWAMP_GROTTO] = HintText::Region({Text{"Road to Southern Swamp", "", ""}}); + hintTable[SOUTHERN_SWAMP] = HintText::Region({Text{"Southern Swamp", "", ""}}); + hintTable[SWAMP_TOURIST_CENTER] = HintText::Region({Text{"Southern Swamp", "", ""}}); + hintTable[SOUTHERN_SWAMP_HAGS_POTION_SHOP] = HintText::Region({Text{"Southern Swamp", "", ""}}); + hintTable[MYSTERY_WOODS] = HintText::Region({Text{"Mystery Woods", "", ""}}); + hintTable[SOUTHERN_SWAMP_MYSTERY_WOODS_GROTTO] = HintText::Region({Text{"Mystery Woods", "", ""}}); + hintTable[SOUTHERN_SWAMP_NEAR_SPIDER_HOUSE_GROTTO] = HintText::Region({Text{"Southern Swamp", "", ""}}); + hintTable[SOUTHERN_SWAMP_TOP] = HintText::Region({Text{"Southern Swamp", "", ""}}); + hintTable[DEKU_PALACE] = HintText::Region({Text{"Deku Palace", "", ""}}); + hintTable[DEKU_PALACE_INTERIOR] = HintText::Region({Text{"Deku Palace", "", ""}}); + hintTable[DEKU_PALACE_BEAN_GROTTO] = HintText::Region({Text{"Deku Palace", "", ""}}); + hintTable[DEKU_SHRINE] = HintText::Region({Text{"Deku Palace", "", ""}}); + hintTable[WOODFALL] = HintText::Region({Text{"Woodfall", "", ""}}); + hintTable[WOODFALL_FAIRY_FOUNTAIN] = HintText::Region({Text{"Woodfall Fairy Foutain", "", ""}}); + hintTable[PATH_TO_MOUNTAIN_VILLAGE] = HintText::Region({Text{"Path to Mountain Vilage", "", ""}}); + hintTable[MOUNTAIN_VILLAGE] = HintText::Region({Text{"Mountain Village", "", ""}}); + hintTable[GORON_GRAVEYARD] = HintText::Region({Text{"Goron Graveyard", "", ""}}); + hintTable[MOUNTAIN_SMITHY] = HintText::Region({Text{"Mountain Village", "", ""}}); + hintTable[MOUNTAIN_VILLAGE_SPRING_WATER_GROTTO] = HintText::Region({Text{"Mountain Village", "", ""}}); + hintTable[TWIN_ISLANDS] = HintText::Region({Text{"Twin Islands", "", ""}}); + hintTable[GORON_RACETRACK] = HintText::Region({Text{"Goron Racetrack", "", ""}}); + hintTable[TWIN_ISLANDS_GORON_RACETRACK_GROTTO] = HintText::Region({Text{"Twin Islands", "", ""}}); + hintTable[TWIN_ISLANDS_SPRING_WATER_GROTTO] = HintText::Region({Text{"Twin Islands", "", ""}}); + hintTable[GORON_VILLAGE] = HintText::Region({Text{"Goron Village", "", ""}}); + hintTable[GORON_VILLAGE_LENS_CAVE] = HintText::Region({Text{"Goron Village", "", ""}}); + hintTable[GORON_VILLAGE_INTERIOR] = HintText::Region({Text{"Goron Village", "", ""}}); + hintTable[GORON_VILLAGE_SHOP] = HintText::Region({Text{"Goron Village", "", ""}}); + hintTable[ROAD_TO_SNOWHEAD] = HintText::Region({Text{"Road to Snowhead", "", ""}}); + hintTable[ROAD_TO_SNOWHEAD_GROTTO] = HintText::Region({Text{"Road to Snowhead", "", ""}}); + hintTable[SNOWHEAD] = HintText::Region({Text{"Snowhead", "", ""}}); + hintTable[SNOWHEAD_FAIRY_FOUNTAIN] = HintText::Region({Text{"Snowhead Fairy Fountain", "", ""}}); + hintTable[MILK_ROAD] = HintText::Region({Text{"Milk Road", "", ""}}); + hintTable[GORMAN_TRACK] = HintText::Region({Text{"Gorman Track", "", ""}}); + hintTable[ROMANI_RANCH] = HintText::Region({Text{"Romani Ranch", "", ""}}); + hintTable[DOGGY_RACETRACK] = HintText::Region({Text{"Romani Ranch", "", ""}}); + hintTable[CUCCO_SHACK] = HintText::Region({Text{"Romani Ranch", "", ""}}); + hintTable[ROMANI_RANCH_HOUSE] = HintText::Region({Text{"Romani Ranch", "", ""}}); + hintTable[ROMANI_RANCH_BARN] = HintText::Region({Text{"Romani Ranch", "", ""}}); + hintTable[GREAT_BAY_COAST] = HintText::Region({Text{"Great Bay Coast", "", ""}}); + hintTable[GREAT_BAY_COAST_MARINE_LAB] = HintText::Region({Text{"Great Bay Coast", "", ""}}); + hintTable[GREAT_BAY_COAST_GROTTO] = HintText::Region({Text{"Great Bay Coast", "", ""}}); + hintTable[GREAT_BAY_COAST_COW_GROTTO] = HintText::Region({Text{"Great Bay Coast", "", ""}}); + hintTable[FISHERMAN_HUT] = HintText::Region({Text{"Great Bay Coast", "", ""}}); + hintTable[PINNACLE_ROCK] = HintText::Region({Text{"Pinnacle Rock", "", ""}}); + hintTable[ZORA_CAPE] = HintText::Region({Text{"Zora Cape", "", ""}}); + hintTable[WATERFALL_RAPIDS] = HintText::Region({Text{"Zora Cape", "", ""}}); + hintTable[GREAT_BAY_FAIRY_FOUNTAIN] = HintText::Region({Text{"Zora Cape Fairy Fountain", "", ""}}); + hintTable[ZORA_CAPE_GROTTO] = HintText::Region({Text{"Zora Cape", "", ""}}); + hintTable[ZORA_HALL] = HintText::Region({Text{"Zora Hall", "", ""}}); + hintTable[ZORA_HALL_EVANS_ROOM] = HintText::Region({Text{"Zora Hall", "", ""}}); + hintTable[ZORA_HALL_LULUS_ROOM] = HintText::Region({Text{"Zora Hall", "", ""}}); + hintTable[ZORA_HALL_JAPAS_ROOM] = HintText::Region({Text{"Zora Hall", "", ""}}); + hintTable[ZORA_HALL_TIJOS_ROOM] = HintText::Region({Text{"Zora Hall", "", ""}}); + hintTable[ZORA_HALL_SHOP] = HintText::Region({Text{"Zora Hall", "", ""}}); + hintTable[ZORA_HALL_BACK_ENTRANCE] = HintText::Region({Text{"Zora Hall", "", ""}}); + hintTable[ROAD_TO_IKANA] = HintText::Region({Text{"Road to Ikana", "", ""}}); + hintTable[ROAD_TO_IKANA_GROTTO] = HintText::Region({Text{"Road to Ikana", "", ""}}); + hintTable[IKANA_GRAVEYARD] = HintText::Region({Text{"Ikana Graveyard", "", ""}}); + hintTable[IKANA_GRAVEYARD_GROTTO] = HintText::Region({Text{"Ikana Graveyard", "", ""}}); + hintTable[IKANA_GRAVEYARD_BELOW_GRAVE1] = HintText::Region({Text{"Ikana Graveyard", "", ""}}); + hintTable[IKANA_GRAVEYARD_BATS_ROOM] = HintText::Region({Text{"Ikana Graveyard", "", ""}}); + hintTable[IKANA_GRAVEYARD_TABLET_ROOM] = HintText::Region({Text{"Ikana Graveyard", "", ""}}); + hintTable[IKANA_GRAVEYARD_BELOW_GRAVE2] = HintText::Region({Text{"Ikana Graveyard", "", ""}}); + hintTable[IKANA_GRAVEYARD_IRON_KNUCKLE_ROOM] = HintText::Region({Text{"Ikana Graveyard", "", ""}}); + hintTable[IKANA_GRAVEYARD_BELOW_GRAVE3] = HintText::Region({Text{"Ikana Graveyard", "", ""}}); + hintTable[DAMPES_HUT] = HintText::Region({Text{"Ikana Graveyard", "", ""}}); + hintTable[IKANA_CANYON] = HintText::Region({Text{"Ikana Canyon", "", ""}}); + hintTable[IKANA_CANYON_UPPER] = HintText::Region({Text{"Ikana Canyon", "", ""}}); + hintTable[IKANA_CANYON_CAVE] = HintText::Region({Text{"Ikana Canyon", "", ""}}); + hintTable[SAKONS_HIDEOUT] = HintText::Region({Text{"Ikana Canyon", "", ""}}); + hintTable[MUSIC_BOX_HOUSE] = HintText::Region({Text{"Ikana Canyon", "", ""}}); + hintTable[IKANA_CANYON_POE_HUT] = HintText::Region({Text{"Ikana Canyon", "", ""}}); + hintTable[IKANA_CANYON_GREAT_FAIRY_FOUNTAIN] = HintText::Region({Text{"Ikana Canyon Fairy Foutain", "", ""}}); + hintTable[IKANA_CANYON_SECRET_SHRINE_GROTTO] = HintText::Region({Text{"Ikana Canyon", "", ""}}); + hintTable[STONE_TOWER] = HintText::Region({Text{"Stone Tower", "", ""}}); + hintTable[INVERTED_STONE_TOWER] = HintText::Region({Text{"Stone Tower", "", ""}}); + + /*--------------------- + | JUNK HINT TEXT | + ---------------------*/ + hintTable[JUNK01] = HintText::Junk({Text{"", "", ""}}); + hintTable[JUNK02] = HintText::Junk({Text{"The moon is haunted.", "", ""}}); + hintTable[JUNK03] = HintText::Junk({Text{"Majora has sick dance moves.", "", ""}}); + hintTable[JUNK04] = HintText::Junk({Text{"Making hints is hard.", "", ""}}); + hintTable[JUNK05] = HintText::Junk({Text{"May the way of the Hero lead to the Triforce.", "", ""}}); + hintTable[JUNK06] = HintText::Junk({Text{"They say that the final item you're looking for can be found somewhere in Termina.", "", ""}}); + hintTable[JUNK07] = HintText::Junk({Text{"They say that 85 percent of statistics are made up", "", ""}}); + hintTable[JUNK08] = HintText::Junk({Text{"They say the golden dog is picked as the winner most often", "", ""}}); + hintTable[JUNK09] = HintText::Junk({Text{"Be patient young grasshopper", "", ""}}); + hintTable[JUNK10] = HintText::Junk({Text{"The Ikana King used to be quite handsome", "", ""}}); + hintTable[JUNK11] = HintText::Junk({Text{"If the Goron Elder is frozen how does he move each day", "", ""}}); + hintTable[JUNK12] = HintText::Junk({Text{"The Owl's feathers lead the way", "", ""}}); + hintTable[JUNK13] = HintText::Junk({Text{"The Happy Mask Salesman doesn't sleep", "", ""}}); + hintTable[JUNK14] = HintText::Junk({Text{"why do they call it oven when you of in the cold food of out hot eat the food", "", ""}}); + hintTable[JUNK15] = HintText::Junk({Text{"It seems Link has difficulties remembering music without the help of a fairy.", "", ""}}); + hintTable[JUNK16] = HintText::Junk({Text{"Pickle.", "", ""}}); + hintTable[JUNK17] = HintText::Junk({Text{"Why is it called The Legend of Zelda Majora's Mask when Zelda isn't here?", "", ""}}); + hintTable[JUNK18] = HintText::Junk({Text{"They say you can find the Star Fox cast in your mask inventory screen.", "", ""}}); + hintTable[JUNK19] = HintText::Junk({Text{"They say #L# is Real 2401.", "", ""}}); + hintTable[JUNK20] = HintText::Junk({Text{"They say #The Moon# blinks if you stare long enough", "", ""}}); + hintTable[JUNK21] = HintText::Junk({Text{"They say bunnies have a really good sense of time.", "", ""}}); + hintTable[JUNK22] = HintText::Junk({Text{"They say this game has a method of infinitely jumping.", "", ""}}); + hintTable[JUNK23] = HintText::Junk({Text{"According to all known laws of aviation there is no way a Zora should be able to fly.", "", ""}}); + hintTable[JUNK24] = HintText::Junk({Text{"Why is Zelda green?", "", ""}}); + hintTable[JUNK25] = HintText::Junk({Text{"Did you know for the first time in 23 years, in 2023 Waluigi didn't star in a game?", "", ""}}); + hintTable[JUNK26] = HintText::Junk({Text{"Here's a hint, @. Don't be bad.", "", ""}}); + hintTable[JUNK27] = HintText::Junk({Text{"They say this randomizer actually took longer to develop than the original Majora's Mask.", "", ""}}); + hintTable[JUNK28] = HintText::Junk({Text{"They say pirates are allergic to #bees#.", "", ""}}); + hintTable[JUNK29] = HintText::Junk({Text{"Ocean man, take me by the hand.", "", ""}}); + hintTable[JUNK30] = HintText::Junk({Text{"Special shoutouts to ennopp who plays piano during this cutscene", "", ""}}); + hintTable[JUNK31] = HintText::Junk({Text{"Did you know it's actually surprisingly easy to mod a 3DS?", "", ""}}); + hintTable[JUNK32] = HintText::Junk({Text{"Zora eggs are quite delicious.", "", ""}}); + hintTable[JUNK33] = HintText::Junk({Text{"Zabora and Gabora have gotten better at making swords that stay sharp.", "", ""}}); + hintTable[JUNK34] = HintText::Junk({Text{"They say Tacoman369 has never defeated Majora.", "", ""}}); + hintTable[JUNK35] = HintText::Junk({Text{"L2P @.", "", ""}}); + hintTable[JUNK36] = HintText::Junk({Text{"They say the #Majora's Mask 3D Randomizer# developers are cool people.", "", ""}}); + hintTable[JUNK37] = HintText::Junk({Text{"Also try #Ocarina of Time 3D Randomizer#!", "", ""}}); + hintTable[JUNK38] = HintText::Junk({Text{"The single rupee is a unique item.", "", ""}}); + hintTable[JUNK39] = HintText::Junk({Text{"Hey, listen!", "", ""}}); + hintTable[JUNK40] = HintText::Junk({Text{"They say even the Hero of Time can't help everyone.", "", ""}}); + hintTable[JUNK41] = HintText::Junk({Text{"The dirt around here tastes really good.", "", ""}}); + hintTable[JUNK42] = HintText::Junk({Text{"Talk to me again for the best hint.", "", ""}}); + hintTable[JUNK43] = HintText::Junk({Text{"They say Gorons discovered a method of space travel.", "", ""}}); + hintTable[JUNK44] = HintText::Junk({Text{"I AM ERROR", "", ""}}); + hintTable[JUNK45] = HintText::Junk({Text{"Real 3DS ZELDA players use motion controls.", "", ""}}); + hintTable[JUNK46] = HintText::Junk({Text{"Real ZELDA players use HOLD targeting.", "", ""}}); + hintTable[JUNK47] = HintText::Junk({Text{"They say items are random...", "", ""}}); + hintTable[JUNK48] = HintText::Junk({Text{"Dear Mario, please come to the castle. I've baked a cake for you. Yours truly, Princess Toadstool, Peach", "", ""}}); + hintTable[JUNK49] = HintText::Junk({Text{"They say the key to victory is beating the game...", "", ""}}); + hintTable[JUNK50] = HintText::Junk({Text{"They say the gold dog cheats.", "", ""}}); + hintTable[JUNK51] = HintText::Junk({Text{"They say @ drowned.", "", ""}}); + hintTable[JUNK52] = HintText::Junk({Text{"Goodbye then.", "", ""}}); + hintTable[JUNK53] = HintText::Junk({Text{"You've met with a terrible hint, haven't you?", "", ""}}); + hintTable[JUNK54] = HintText::Junk({Text{"I'm stoned. Get it?", "", ""}}); + hintTable[JUNK55] = HintText::Junk({Text{"One who doesn't have all the masks will not get a #special reward#", "", ""}}); + hintTable[JUNK56] = HintText::Junk({Text{"They say the #blue dog# will win a race some day...", "", ""}}); + hintTable[JUNK57] = HintText::Junk({Text{"Remember to check your 3DS battery level and save often.", "", ""}}); + hintTable[JUNK58] = HintText::Junk({Text{"Just be a rock.", "", ""}}); + hintTable[JUNK59] = HintText::Junk({Text{"I can't feel my legs!", "", ""}}); + hintTable[JUNK60] = HintText::Junk({Text{"What are you staring at?", "", ""}}); + hintTable[JUNK61] = HintText::Junk({Text{"Glitches are a pathway to many abilities some consider to be... Unnatural.", "", ""}}); + hintTable[JUNK62] = HintText::Junk({Text{"You ever just feel like smashing that $ button?", "", ""}}); + hintTable[JUNK63] = HintText::Junk({Text{"I think the Mask of Truth has it's uses!", "", ""}}); + hintTable[JUNK64] = HintText::Junk({Text{"There's a lot of eyes here, isn't there?", "", ""}}); + hintTable[JUNK65] = HintText::Junk({Text{"I think that #large object in the sky# hasn't moved in a few days.", "", ""}}); + hintTable[JUNK66] = HintText::Junk({Text{"Watch out for that #large object in the sky!#", "", ""}}); + hintTable[JUNK67] = HintText::Junk({Text{"#Tingle Tingle Kooloo Limpah!#", "", ""}}); + hintTable[JUNK68] = HintText::Junk({Text{"They say if you have three specific items, you can zoom across Termina.", "", ""}}); + hintTable[JUNK69] = HintText::Junk({Text{"They say the powder keg can remain fairly elusive.", "", ""}}); + hintTable[JUNK70] = HintText::Junk({Text{"It's pretty cold here, would you mind warming me up, @?", "", ""}}); + hintTable[JUNK71] = HintText::Junk({Text{"These hints can be quite useful. This is an exception.", "", ""}}); + hintTable[JUNK72] = HintText::Junk({Text{"Turns are more effective when you tilt the whole console.", "", ""}}); + hintTable[JUNK73] = HintText::Junk({Text{"You ever been in a cockpit before?", "", ""}}); + hintTable[JUNK74] = HintText::Junk({Text{"Smash 10 pots in 12 seconds.", "", ""}}); + hintTable[JUNK75] = HintText::Junk({Text{"You found me!", "", ""}}); + hintTable[JUNK76] = HintText::Junk({Text{"I have it on my post-it note somewhere.", "", ""}}); + hintTable[JUNK77] = HintText::Junk({Text{"Follow the rainbow.", "", ""}}); + + /*------------------------ + | DUNGEON HINT TEXT | + ------------------------*/ + + hintTable[WOODFALL_TEMPLE] = HintText::DungeonName({Text{"the sleeping temple", "the sleeping temple", "the sleeping temple"}}), + hintTable[SNOWHEAD_TEMPLE] = HintText::DungeonName({Text{"an icy temple", "an icy temple", "an icy temple"}}); + hintTable[GREAT_BAY_TEMPLE] = HintText::DungeonName({Text{"the murky watered temple", "the murky watered temple", "the murky watered temple"}}); + hintTable[STONE_TOWER_TEMPLE] = HintText::DungeonName({Text{"a rocky temple", "a rocky temple", "a rocky temple"}}); + hintTable[PIRATE_FORTRESS] = HintText::DungeonName({Text{"the home of pirates", "the home of pirates", "the home of pirates"}}); + hintTable[BENEATH_THE_WELL] = HintText::DungeonName({Text{"an empty watering hole", "an empty watering hole", "an empty watering hole"}}); + hintTable[IKANA_CASTLE] = HintText::DungeonName({Text{"a fallen castle", "a fallen castle", "a fallen castle"}}); + hintTable[SECRET_SHRINE] = HintText::DungeonName({Text{"a mini boss run area", "a mini boss run area", "a mini boss run area"}}); + hintTable[SSH] = HintText::DungeonName({Text{"a home to muddy spiders", "a home to muddy spiders", "a home to muddy spiders"}}); + hintTable[OSH] = HintText::DungeonName({Text{"a home To swimming spiders", "a home To swimming spiders", "a home To swimming spiders"}}); + hintTable[THE_MOON] = HintText::DungeonName({Text{"a dungeon out of this world", "a dungeon out of this world", "a dungeon out of this world"}}); + + /*----------------------- + | BOSS HINT TEXT | + -----------------------*/ + hintTable[ODOLWA] = HintText::Boss({Text{"A Tattooed Warrior", "A Tattooed Warrior", "A Tattooed Warrior"}}); + hintTable[GOHT] = HintText::Boss({Text{"A Mechanical Bull","A Mechanical Bull", "A Mechanical Bull"}}); + hintTable[GYORG] = HintText::Boss({Text{"A Poisonous Fish", "A Poisonous Fish", "A Poisonous Fish"}}); + hintTable[TWINMOLD] = HintText::Boss({Text{"A Giant Centipede Duo", "A Giant Centipede Duo", "A Giant Centipede Duo"}}), + hintTable[MAJORA] = HintText::Boss({Text{"A Cursed Mask", "A Cursed Mask", "A Cursed Mask"}}); + + +} + +const HintText& Hint(const HintKey hintKey) { + return hintTable[hintKey]; +} + +std::vector GetHintCategory(HintCategory category) { + + std::vector hintsInCategory = {}; + + for (const auto& hint : hintTable) { + if (hint.GetType() == category) { + hintsInCategory.push_back(hint); + } + } + return hintsInCategory; } \ No newline at end of file diff --git a/source/hints.cpp b/source/hints.cpp index d64c8ce..fd4a304 100644 --- a/source/hints.cpp +++ b/source/hints.cpp @@ -9,6 +9,7 @@ #include "spoiler_log.hpp" #include "fill.hpp" #include "hint_list.hpp" +#include "custom_messages.hpp" //#include "trial.hpp" //#include "entrance.hpp" @@ -122,8 +123,8 @@ static Area* GetHintRegion(const AreaKey area) { } //add unchecked exits to spot queue - //bool checked = false; - /* + bool checked = false; + for (auto& exit : AreaTable(region)->exits) { for (AreaKey checkedExit : alreadyChecked) { if (exit.GetAreaKey() == checkedExit) { @@ -135,9 +136,8 @@ static Area* GetHintRegion(const AreaKey area) { if (!checked) { spotQueue.insert(spotQueue.begin(), exit.GetAreaKey()); } - }*/ + } } - return AreaTable(NONE); } @@ -155,17 +155,23 @@ static std::vector GetAccessibleGossipStones(const LocationKey hint return accessibleGossipStones; } -/*static void AddHint(Text hint, const LocationKey gossipStone, const std::vector& colors = {}) { +static void AddHint(Text hint, const LocationKey gossipStone, const std::vector& colors = {}) { //save hints as dummy items for writing to the spoiler log - //NewItem(gossipStone, Item{hint, ITEMTYPE_EVENT, GI_RUPEE_BLUE_LOSE, false, &noVariable, NONE}); + NewItem(gossipStone, Item{ false, true, &noVariable, hint, NONE, (u32)GetItemID::GI_RUPEE_BLUE, ITEMTYPE_EVENT, (u16)0}); Location(gossipStone)->SetPlacedItem(gossipStone); //create the in game message - //u32 messageId = 0x400 + Location(gossipStone)->GetFlag(); + u16 messageId = Location(gossipStone)->GetTextID(); + std::vector icons = {}; //u32 sariaMessageId = 0xA00 + Location(gossipStone)->GetFlag(); + CitraPrint("Our hint text is " + hint.GetEnglish()); + if (hint.GetEnglish().find("$")) { + icons.push_back(B_BUTTON); + } + CustomMessages::CreateMessage(messageId, 0xFFFF, 0x3FFFFFFF, 0xFF0020, hint.GetEnglish().c_str(), colors, icons, {}, 0x0, false, false); //CreateMessageFromTextObject(messageId, 0, 2, 3, AddColorsAndFormat(hint, colors)); //CreateMessageFromTextObject(sariaMessageId, 0, 2, 3, AddColorsAndFormat(hint + EVENT_TRIGGER(), colors)); -}*/ +} static void CreateLocationHint(const std::vector& possibleHintLocations) { //return if there aren't any hintable locations or gossip stones available @@ -190,7 +196,7 @@ static void CreateLocationHint(const std::vector& possibleHintLocat return; } - //LocationKey gossipStone = RandomElement(accessibleGossipStones); + LocationKey gossipStone = RandomElement(accessibleGossipStones); Location(hintedLocation)->SetAsHinted(); //make hint text @@ -203,7 +209,7 @@ static void CreateLocationHint(const std::vector& possibleHintLocat PlacementLog_Msg(finalHint.english); PlacementLog_Msg("\n\n"); - //AddHint(finalHint, gossipStone, {QM_GREEN, QM_RED}); + AddHint(finalHint, gossipStone, {QM_GREEN, QM_RED}); } static void CreateWothHint(u8* remainingDungeonWothHints) { @@ -240,24 +246,26 @@ static void CreateWothHint(u8* remainingDungeonWothHints) { return; } Location(hintedLocation)->SetAsHinted(); - //LocationKey gossipStone = RandomElement(gossipStoneLocations); + LocationKey gossipStone = RandomElement(gossipStoneLocations); //form hint text Text locationText; if (Location(hintedLocation)->IsDungeon()) { *remainingDungeonWothHints -= 1; AreaKey parentRegion = Location(hintedLocation)->GetParentRegionKey(); + CitraPrint("WoTH Hint: Getting " + Location(hintedLocation)->GetName() + "'s parent region which is " + Location(parentRegion)->GetName()); locationText = AreaTable(parentRegion)->GetHint().GetText(); } else { AreaKey parentRegion = Location(hintedLocation)->GetParentRegionKey(); + CitraPrint("WoTH Hint: Getting " + Location(hintedLocation)->GetName() + "'s parent region which is " + Location(parentRegion)->GetName()); locationText = GetHintRegion(parentRegion)->GetHint().GetText(); } Text finalWothHint = Hint(PREFIX).GetText()+"#"+locationText+"#"+Hint(WAY_OF_THE_HERO).GetText(); PlacementLog_Msg("\tMessage: "); PlacementLog_Msg(finalWothHint.english); PlacementLog_Msg("\n\n"); - //AddHint(finalWothHint, gossipStone, {QM_LBLUE}); + AddHint(finalWothHint, gossipStone, {QM_BLUE}); } static void CreateBarrenHint(u8* remainingDungeonBarrenHints, std::vector& barrenLocations) { @@ -287,23 +295,25 @@ static void CreateBarrenHint(u8* remainingDungeonBarrenHints, std::vectorSetAsHinted(); - //LocationKey gossipStone = RandomElement(gossipStoneLocations); + LocationKey gossipStone = RandomElement(gossipStoneLocations); //form hint text Text locationText; if (Location(hintedLocation)->IsDungeon()) { *remainingDungeonBarrenHints -= 1; AreaKey parentRegion = Location(hintedLocation)->GetParentRegionKey(); + CitraPrint("Barrent Hint: Getting " + Location(hintedLocation)->GetName() + "'s parent region which is " + Location(parentRegion)->GetName()); locationText = Hint(AreaTable(parentRegion)->hintKey).GetText(); } else { AreaKey parentRegion = Location(hintedLocation)->GetParentRegionKey(); + CitraPrint("Barrent Hint: Getting " + Location(hintedLocation)->GetName() + "'s parent region which is " + Location(parentRegion)->GetName()); locationText = Hint(GetHintRegion(parentRegion)->hintKey).GetText(); } Text finalBarrenHint = Hint(PREFIX).GetText()+Hint(PLUNDERING).GetText()+"#"+locationText+"#"+Hint(FOOLISH).GetText(); PlacementLog_Msg("\tMessage: "); PlacementLog_Msg(finalBarrenHint.english); PlacementLog_Msg("\n\n"); - //AddHint(finalBarrenHint, gossipStone, {QM_PINK}); + AddHint(finalBarrenHint, gossipStone, {QM_RED}); //get rid of all other locations in this same barren region barrenLocations = FilterFromPool(barrenLocations, [hintedLocation](LocationKey loc){ @@ -338,25 +348,34 @@ static void CreateRandomLocationHint(const bool goodItem = false) { return; } Location(hintedLocation)->SetAsHinted(); - //LocationKey gossipStone = RandomElement(gossipStoneLocations); + LocationKey gossipStone = RandomElement(gossipStoneLocations); //form hint text + /* CitraPrint("Checking location " + Location(hintedLocation)->GetName() + \ + "'s item which is " + Location(hintedLocation)->GetPlacedItemName().GetEnglish() + \ + " and GetItemID of " + Location(hintedLocation)->GetPlacedItem().GetItemId() + "\n"); + DebugPrint("Checking location %s's item which is %s and GetItemID of %#04x and hint text is %s\n", Location(hintedLocation)->GetName().c_str(), \ + Location(hintedLocation)->GetPlacedItemName().GetEnglish().c_str(), \ + Location(hintedLocation)->GetPlacedItem().GetItemId(), \ + Location(hintedLocation)->GetPlacedItem().GetHint().GetText().GetEnglish().c_str()); */ Text itemText = Location(hintedLocation)->GetPlacedItem().GetHint().GetText(); if (Location(hintedLocation)->IsDungeon()) { AreaKey parentRegion = Location(hintedLocation)->GetParentRegionKey(); Text locationText = AreaTable(parentRegion)->GetHint().GetText(); + CitraPrint("Random Loc Hint: Getting " + Location(hintedLocation)->GetName() + "'s parent region which is " + Location(parentRegion)->GetName()); Text finalHint = Hint(PREFIX).GetText()+"#"+locationText+"# "+Hint(HOARDS).GetText()+" #"+itemText+"#."; PlacementLog_Msg("\tMessage: "); PlacementLog_Msg(finalHint.english); PlacementLog_Msg("\n\n"); - //AddHint(finalHint, gossipStone, {QM_GREEN, QM_RED}); + AddHint(finalHint, gossipStone, {QM_GREEN, QM_RED}); } else { + CitraPrint("Random Loc Hint: Getting " + Location(hintedLocation)->GetName() + "'s parent region which is " + Location(Location(hintedLocation)->GetParentRegionKey())->GetName()); Text locationText = GetHintRegion(Location(hintedLocation)->GetParentRegionKey())->GetHint().GetText(); Text finalHint = Hint(PREFIX).GetText()+"#"+itemText+"# "+Hint(CAN_BE_FOUND_AT).GetText()+" #"+locationText+"#."; PlacementLog_Msg("\tMessage: "); PlacementLog_Msg(finalHint.english); PlacementLog_Msg("\n\n"); - //AddHint(finalHint, gossipStone, {QM_RED, QM_GREEN}); + AddHint(finalHint, gossipStone, {QM_RED, QM_GREEN}); } } @@ -367,20 +386,25 @@ static void CreateGoodItemHint() { static void CreateJunkHint() { //duplicate junk hints are possible for now const HintText junkHint = RandomElement(GetHintCategory(HintCategory::Junk)); + LogicReset(); const std::vector gossipStones = GetAccessibleLocations(gossipStoneLocations); if (gossipStones.empty()) { PlacementLog_Msg("\tNO GOSSIP STONES TO PLACE HINT\n\n"); return; } - //LocationKey gossipStone = RandomElement(gossipStones); + LocationKey gossipStone = RandomElement(gossipStones); Text hint = junkHint.GetText(); PlacementLog_Msg("\tMessage: "); PlacementLog_Msg(hint.english); + PlacementLog_Msg("\n"); + + PlacementLog_Msg("\tLocation: "); + PlacementLog_Msg(Location(gossipStone)->GetName()); PlacementLog_Msg("\n\n"); - //AddHint(hint, gossipStone, {QM_PINK}); + AddHint(hint, gossipStone, {QM_RED}); } static std::vector CalculateBarrenRegions() { @@ -479,7 +503,6 @@ void CreateAllHints() { //get a random hint type from the remaining hints HintType type = RandomElement(remainingHintTypes, true); - PlacementLog_Msg("Attempting to make hint of type: "); PlacementLog_Msg(std::to_string(static_cast(type))); PlacementLog_Msg("\n"); @@ -519,10 +542,10 @@ void CreateAllHints() { } //If any gossip stones failed to have a hint placed on them for some reason, place a junk hint as a failsafe. - /*for (LocationKey gossipStone : FilterFromPool(gossipStoneLocations, [](const LocationKey loc){return Location(loc)->GetPlacedItemKey() == NONE;})) { + for (LocationKey gossipStone : FilterFromPool(gossipStoneLocations, [](const LocationKey loc){return Location(loc)->GetPlacedItemKey() == NONE;})) { const HintText junkHint = RandomElement(GetHintCategory(HintCategory::Junk)); - //AddHint(junkHint.GetText(), gossipStone, {QM_PINK}); - }*/ + AddHint(junkHint.GetText(), gossipStone, {QM_RED}); + } //Getting gossip stone locations temporarily sets one location to not be reachable. //Call the function one last time to get rid of false positives on locations not diff --git a/source/include/hints.hpp b/source/include/hints.hpp index 8cf5d41..b789a7a 100644 --- a/source/include/hints.hpp +++ b/source/include/hints.hpp @@ -5,6 +5,7 @@ #include #include +#include "keys.hpp" #include "text.hpp" #include "random.hpp" #include "settings.hpp" diff --git a/source/include/item_location.hpp b/source/include/item_location.hpp index 9b072ba..5934633 100644 --- a/source/include/item_location.hpp +++ b/source/include/item_location.hpp @@ -156,6 +156,10 @@ class ItemLocation { return scene; } + u16 GetTextID() const { + return textID; + } + u8 GetFlag() const { return flag; } diff --git a/source/include/keys.hpp b/source/include/keys.hpp index 6db9284..5339e28 100644 --- a/source/include/keys.hpp +++ b/source/include/keys.hpp @@ -1116,7 +1116,7 @@ typedef enum { JUNK68, JUNK69, JUNK70, - JUMK71, + JUNK71, JUNK72, JUNK73, JUNK74, diff --git a/source/include/version.hpp b/source/include/version.hpp index c3cbce1..24e886a 100644 --- a/source/include/version.hpp +++ b/source/include/version.hpp @@ -1,4 +1,4 @@ #pragma once -#define RANDOMIZER_VERSION "v1.0Beta" +#define RANDOMIZER_VERSION "v1.0" #define COMMIT_NUMBER "develop" diff --git a/source/item_list.cpp b/source/item_list.cpp index e56c001..260442b 100644 --- a/source/item_list.cpp +++ b/source/item_list.cpp @@ -99,8 +99,11 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[BOTTLE_WITH_MYSTERY_MILK] = Item(true, true, &MysteryMilkBottle, Text{"Bottle with Mystery Milk", "Bottle with Mystery Milk", "Bottle with Mystery Milk"}, BOTTLE_WITH_MYSTERY_MILK, (u32)GetItemID::GI_BOTTLE_MYSTERY_MILK, ITEMTYPE_ITEM); //Other bottle items itemTable[DEKU_PRINCESS] = Item(true, true, &DekuPrincess, Text{"Deku Princess", "Princesse Mojo", "Princesa Deku"}, DEKU_PRINCESS, (u32)GetItemID::GI_DEKU_PRINCESS_FAIRY, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_GREEN_POTION] = Item(false, false, &HasBottle, Text{"Bottle with Green Potion", "Flacon de potion verde", "Botella de poción verte"}, BOTTLE_WITH_GREEN_POTION, (u32)GetItemID::GI_POTION_GREEN, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_BLUE_POTION] = Item(false, false, &HasBottle, Text{"Bottle with Blue Potion", "Flacon de potion azul", "Botella de poción bleu"}, BOTTLE_WITH_BLUE_POTION, (u32)GetItemID::GI_POTION_BLUE, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_FAIRY] = Item(false, true, &HasBottle, Text{"Bottle with Fairy", "Bottle with Fairy", "Bottle with Fairy",}, BOTTLE_WITH_FAIRY, (u32)GetItemID::GI_FAIRY, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_BUGS] = Item(false, true, &HasBottle, Text{"Bottle with Bugs", "Bottle with Bugs", "Bottle with Bugs",}, BOTTLE_WITH_BUGS, (u32)GetItemID::GI_BOTTLE_BUG, ITEMTYPE_ITEM); + itemTable[BOTTLE_WITH_FISH] = Item(false, true, &HasBottle, Text{"Bottle with Fish", "Bottle with Fish", "Bottle with Fish"}, BOTTLE_WITH_FISH, (u32)GetItemID::GI_BOTTLE_FISH, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_POE] = Item(false, true, &HasBottle, Text{"Bottle with Poe", "Bottle with Poe", "Bottle with Poe",}, BOTTLE_WITH_POE, (u32)GetItemID::GI_BOTTLE_POE_TEXT, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_BIG_POE] = Item(false, true, &HasBottle, Text{"Bottle with Big Poe", "Bottle with Big Poe", "Bottle with Big Poe",}, BOTTLE_WITH_BIG_POE, (u32)GetItemID::GI_BOTTLE_BIG_POE, ITEMTYPE_ITEM); itemTable[BOTTLE_WITH_SPRING_WATER] = Item(false, true, &HasBottle, Text{"Bottle with Spring Water", "Bottle with Spring Water", "Bottle with Spring Water",}, BOTTLE_WITH_SPRING_WATER, (u32)GetItemID::GI_BOTTLE_SPRING_WATER, ITEMTYPE_ITEM); @@ -206,10 +209,6 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[RED_POTION_REFILL] = Item(false, true, &noVariable, Text{"Red Potion Refill", "Potion rouge", "Recarga de poción roja" }, RED_POTION_REFILL, (u32)GetItemID::GI_POTION_RED, ITEMTYPE_REFILL); itemTable[GREEN_POTION_REFILL] = Item(false, true, &noVariable, Text{"Green Potion Refill", "Potion verte", "Recarga de poción verde" }, GREEN_POTION_REFILL, (u32)GetItemID::GI_POTION_GREEN, ITEMTYPE_REFILL); itemTable[BLUE_POTION_REFILL] = Item(false, true, &noVariable, Text{"Blue Potion Refill", "Potion bleue", "Recarga de poción azul" }, BLUE_POTION_REFILL, (u32)GetItemID::GI_POTION_BLUE, ITEMTYPE_REFILL); - - itemTable[MAJORAS_MASK] = Item(true, false, &noVariable, Text{"Majora's Mask", "Majora's Mask", "Majora's Mask" }, MAJORAS_MASK, (u32)GetItemID::GI_ERROR_NOTHING_40, ITEMTYPE_EVENT); - itemTable[HINT] = Item(true, true, &noVariable, Text{"Hint", "Indice", "Pista" }, HINT, (u32)GetItemID::GI_ERROR_NOTHING_40, ITEMTYPE_EVENT); - //Shop Items Repeatable price itemTable[BUY_ARROWS_10] = Item(false, true, &noVariable, Text{"Buy Arrows (10)", "Acheter: Flèches (10)", "Comprar flechas (10)"}, BUY_ARROWS_10, (u32)GetItemID::GI_ARROWS_MEDIUM, ITEMTYPE_SHOP); itemTable[BUY_ARROWS_30] = Item(false, true, &noVariable, Text{"Buy Arrows (30)", "Acheter: Flèches (30)", "Comprar flechas (30)"}, BUY_ARROWS_30, (u32)GetItemID::GI_ARROWS_LARGE, ITEMTYPE_SHOP); @@ -231,6 +230,9 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[PROGRESSIVE_WALLET] = Item(true, false, &ProgressiveWallet, Text{"Progressive Wallet", "Bourse (prog.)", "Bolsa de rupias progresiva" }, PROGRESSIVE_WALLET, 0x48, ITEMTYPE_ITEM); itemTable[PROGRESSIVE_MAGIC_METER] = Item(true, false, &ProgressiveMagic, Text{"Progressive Magic Meter", "Jauge de magie (prog.)", "Poder mágico progresivo" }, PROGRESSIVE_MAGIC_METER, 0x49, ITEMTYPE_GFAIRY); + itemTable[MAJORAS_MASK] = Item(true, false, &noVariable, Text{"Majora's Mask", "Majora's Mask", "Majora's Mask" }, MAJORAS_MASK, (u32)GetItemID::GI_ERROR_NOTHING_40, ITEMTYPE_EVENT); + itemTable[HINT] = Item(true, true, &noVariable, Text{"Hint", "Indice", "Pista" }, HINT, (u32)GetItemID::GI_ERROR_NOTHING_40, ITEMTYPE_EVENT); + //itemTable[PROGRESSIVE_BOMBCHUS] = Item(Text{ "Progressive Bombchu", "Bombchus (prog.)", "Bombchus progresivos" }, ITEMTYPE_ITEM, 0x89, true, &Bombchus, PROGRESSIVE_BOMBCHUS, false, ); // itemTable[PROGRESSIVE_NUT_UPGRADE] = Item(Text{"Progressive Nut Capacity", "Capacité de noix (prog.)", "Capacidad de nueces deku progresiva"}, ITEMTYPE_ITEM, 0x87, false, &noVariable, PROGRESSIVE_NUT_UPGRADE, false,); // itemTable[PROGRESSIVE_STICK_UPGRADE] = Item(Text{"Progressive Stick Capacity", "Capacité de bâtons (prog.)", "Capacidad de palos deku progresiva"}, ITEMTYPE_ITEM, 0x88, false, &noVariable, PROGRESSIVE_STICK_UPGRADE, false,); @@ -240,4 +242,14 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth Item& ItemTable(const ItemKey itemKey) { return itemTable[itemKey]; -}; \ No newline at end of file +}; + +//This function should only be used to place items containing hint text +//at gossip stone locations +void NewItem(const ItemKey itemKey, const Item item) { + if (itemKey <= PROGRESSIVE_MAGIC_METER) { + printf("\x1b[25;0HWARNING: ATTEMPTED TO OVERWRITE ITEM %lu\n", itemKey); + return; + } + itemTable[itemKey] = item; +} \ No newline at end of file diff --git a/source/item_pool.cpp b/source/item_pool.cpp index 76e6439..755b863 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -367,7 +367,7 @@ static void PlaceVanillaMainInventory() { PlaceItemInLocation(GBC_FISHERMAN_PHOTO, SEAHORSE); }; -const std::array progressiveItemsList = { +const std::array progressiveItemsList = { PROGRESSIVE_BOW, PROGRESSIVE_BOW, PROGRESSIVE_BOW, //1 Bow + 2 Quiver Upgrades @@ -457,7 +457,7 @@ const std::array scrubPurchaseItems = { BLUE_POTION_REFILL, }; -const std::array moonItemList = { +const std::array moonItemList = { //2Chests and 4 trial rewards, FDM separate //ARROWS_30, -just replace with junk //BOMBCHU_10, diff --git a/source/location_access.cpp b/source/location_access.cpp index a0a3cd3..495fa0e 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -630,7 +630,19 @@ void AreaTable_Init() { LocationAccess(TERMINA_FIELD_UNDERWATER_CHEST, {[] {return ZoraMask;}}), LocationAccess(TERMINA_FIELD_GRASS_CHEST, {[] {return true;}}), LocationAccess(TERMINA_FIELD_STUMP_CHEST, {[] {return Hookshot || (MagicBean && WaterForBeans);}}), - + LocationAccess(TF_TOP_SNOWHEAD_GOSSIP, { [] { return true; } }), + LocationAccess(TF_MILK_ROAD_TREE_GOSSIP, { [] { return true; } }), + LocationAccess(TF_IKANA_SNOWHEAD_GOSSIP, { [] { return true; } }), + LocationAccess(TF_OBSERVATORY_GOSSIP, { [] { return true; } }), + LocationAccess(TF_LOWER_SNOWHEAD_GOSSIP, { [] { return true; } }), + LocationAccess(TF_NEAR_GRASS_CHEST_GOSSIP, { [] { return true; } }), + //Gossip Stones + LocationAccess(TF_MILK_ROAD_TREE_GOSSIP, {[] {return true;}}), + LocationAccess(TF_IKANA_SNOWHEAD_GOSSIP, {[] {return true;}}), + LocationAccess(TF_OBSERVATORY_GOSSIP, {[] {return true;}}), + LocationAccess(TF_TOP_SNOWHEAD_GOSSIP, {[] {return true;}}), + LocationAccess(TF_LOWER_SNOWHEAD_GOSSIP, {[] {return true;}}), + LocationAccess(TF_NEAR_GRASS_CHEST_GOSSIP, {[] {return true;}}), }, { //Exits @@ -653,7 +665,7 @@ void AreaTable_Init() { Entrance(ROAD_TO_IKANA, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_PEAHAT_GROTTO] = Area("Termina Field Peahat Grotto","Termina Field Peahat Grotto", NONE,{ + areaTable[TERMINA_FIELD_PEAHAT_GROTTO] = Area("Termina Field Peahat Grotto","Termina Field Peahat Grotto", TERMINA_FIELD_PEAHAT_GROTTO,{ //Events }, { @@ -665,7 +677,7 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_DODONGO_GROTTO] = Area("Termina Field Dodongo Grotto","Termina Field Dodongo Grotto", NONE,{ + areaTable[TERMINA_FIELD_DODONGO_GROTTO] = Area("Termina Field Dodongo Grotto","Termina Field Dodongo Grotto", TERMINA_FIELD_DODONGO_GROTTO,{ //Events }, { @@ -677,7 +689,7 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_BIO_BABA_GROTTO] = Area("Termina Field Bio Baba Grotto","Termina Field Bio Baba Grotto", NONE,{ + areaTable[TERMINA_FIELD_BIO_BABA_GROTTO] = Area("Termina Field Bio Baba Grotto","Termina Field Bio Baba Grotto", TERMINA_FIELD_BIO_BABA_GROTTO,{ //Events }, { @@ -688,7 +700,7 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_PILLAR_GROTTO] = Area("Termina Field Pillar Grotto","Termina Field Pillar Grotto", NONE,{ + areaTable[TERMINA_FIELD_PILLAR_GROTTO] = Area("Termina Field Pillar Grotto","Termina Field Pillar Grotto", TERMINA_FIELD_PILLAR_GROTTO,{ //Events }, { @@ -699,7 +711,7 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_GRASS_GROTTO] = Area("Termina Field Grass Grotto","Termina Field Grass Grotto", NONE,{ + areaTable[TERMINA_FIELD_GRASS_GROTTO] = Area("Termina Field Grass Grotto","Termina Field Grass Grotto", TERMINA_FIELD_GRASS_GROTTO,{ //Events }, { @@ -710,7 +722,7 @@ void AreaTable_Init() { { //Exits }); - areaTable[TERMINA_FIELD_BUSINESS_SCRUB_GROTTO] = Area("Termina Field Business Scrub Grotto","Termina Field Business Scrub Grotto", NONE,{ + areaTable[TERMINA_FIELD_BUSINESS_SCRUB_GROTTO] = Area("Termina Field Business Scrub Grotto","Termina Field Business Scrub Grotto", TERMINA_FIELD_BUSINESS_SCRUB_GROTTO,{ //Events }, { @@ -721,7 +733,7 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_COW_GROTTO] = Area("Termina Field Cow Grotto","Termina Field Cow Grotto", NONE,{ + areaTable[TERMINA_FIELD_COW_GROTTO] = Area("Termina Field Cow Grotto","Termina Field Cow Grotto", TERMINA_FIELD_COW_GROTTO,{ //Events }, { @@ -733,7 +745,7 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_GOSSIP_STONES_GROTTO] = Area("Termina Field Gossip Stones Grotto","Termina Field Gossip Stones Grotto", NONE,{ + areaTable[TERMINA_FIELD_GOSSIP_STONES_GROTTO] = Area("Termina Field Gossip Stones Grotto","Termina Field Gossip Stones Grotto", TERMINA_FIELD_GOSSIP_STONES_GROTTO,{ //Events }, { @@ -741,7 +753,10 @@ void AreaTable_Init() { LocationAccess(TERMINA_FIELD_GOSSIP_STONES, {[] {return (GoronMask && CanPlay(GoronsLullaby)) || (DekuMask && CanPlay(SonataOfAwakening)) || (ZoraMask && CanPlay(NewWaveBossaNova));}}), - + LocationAccess(TF_FOUR_STONE_GROTTO_1, {[] {return true;}}), + LocationAccess(TF_FOUR_STONE_GROTTO_2, {[] {return true;}}), + LocationAccess(TF_FOUR_STONE_GROTTO_3, {[] {return true;}}), + LocationAccess(TF_FOUR_STONE_GROTTO_4, {[] {return true;}}), }, { //Exits @@ -756,6 +771,8 @@ void AreaTable_Init() { 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 );}}), + //Gossip Stones + LocationAccess(ROAD_TO_SS_GOSSIP, {[] {return true;}}), }, { //Exits @@ -803,6 +820,8 @@ void AreaTable_Init() { LocationAccess(SOUTHERN_SWAMP_SCRUB_PURCHASE, {[]{return DekuMask;}}), LocationAccess(SOUTHERN_SWAMP_MUSIC_STATUE, {[] {return true;}}), LocationAccess(SWAMP_TOURIST_CENTER_ROOF, {[] {return DekuMask && LandTitle;}}), + //Gossip Stones + LocationAccess(SS_GOSSIP, {[] {return true;}}), }, { //Exits @@ -991,6 +1010,8 @@ void AreaTable_Init() { { //Locations //Path Grotto - requires Bombs & (maybe)Mask of Truth? - has no items just freestanding money + //Gossip Stones + LocationAccess(PATH_TO_MV_GOSSIP, {[] {return true;}}), }, { //Exits @@ -1006,7 +1027,9 @@ void AreaTable_Init() { LocationAccess(MOUNTAIN_VILLAGE_FROG_CHOIR, {[] {return SnowheadClear && LaundryFrog && SwampFrog && WoodfallFrog && GreatBayFrog && DonGerosMask;}}), LocationAccess(MOUNTAIN_VILLAGE_HUNGRY_GORON, {[] {return GoronMask && MagicMeter;}}), LocationAccess(MOUNTAIN_WATERFALL_CHEST, {[] {return SnowheadClear;}}), - + //Gossip Stones + LocationAccess(MV_NEAR_FROGS_GOSSIP, {[] {return true;}}), + LocationAccess(MV_NEAR_GROTTO_GOSSIP, {[] {return true;}}), }, { //Exits @@ -1237,6 +1260,8 @@ void AreaTable_Init() { 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(MILK_ROAD_KEATON_QUIZ, {[] {return KeatonMask;}}), + //Gossip Stones + LocationAccess(MR_GOSSIP, {[] {return true;}}), }, { //Exits @@ -1268,6 +1293,10 @@ void AreaTable_Init() { LocationAccess(ROMANI_RANCH_ALIEN_DEFENSE, {[] {return GoronMask && PowderKeg && Bow;}}),//Day1 Night LocationAccess(ROMANI_RANCH_CREMIA_ESCORT, {[] {return GoronMask && PowderKeg && Bow;}}),//Day2 LocationAccess(ROMANI_RANCH_ROMANIS_GAME, {[] {return GoronMask && PowderKeg && Bow;}}),//Day1 + //Gossip Stones + LocationAccess(RR_ENTRANCE_GOSSIP, {[] {return true;}}), + LocationAccess(RR_BARN_GOSSIP, {[] {return true;}}), + LocationAccess(RR_FIELD_GOSSIP, {[] {return true;}}), }, { //Exits @@ -1285,6 +1314,8 @@ void AreaTable_Init() { //Locations LocationAccess(ROMANI_RANCH_DOG_RACE, {[] {return true;}}), LocationAccess(DOGGY_RACETRACK_ROOF_CHEST, {[] {return Hookshot || (WaterForBeans && MagicBean);}}), + //Gossip Stones + LocationAccess(DOGGY_RACETRACK_GOSSIP, {[] {return true;}}), }, { //Exits @@ -1297,6 +1328,8 @@ void AreaTable_Init() { { //Locations LocationAccess(ROMANI_RANCH_GROG, {[] {return BremenMask;}}), + //Gossip Stones + LocationAccess(CUCCO_SHACK_GOSSIP, {[] {return true;}}), }, { //Exits @@ -1338,6 +1371,9 @@ void AreaTable_Init() { 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 );}}), + //Gossip Stones + LocationAccess(GBC_BENEATH_COW_GROTTO_GOSSIP, {[] {return true;}}), + LocationAccess(GBC_OUTSIDE_FORTRESS_GOSSIP, {[] {return true;}}), }, { //Exits @@ -1430,7 +1466,8 @@ void AreaTable_Init() { LocationAccess(ZORA_CAPE_LEDGE_NO_TREE, {[] {return Hookshot;}}), LocationAccess(ZORA_CAPE_LEDGE_WITH_TREE, {[] {return Hookshot;}}), LocationAccess(ZORA_CAPE_UNDERWATER_CHEST, {[] {return ZoraMask;}}), - + //Gossip Stones + LocationAccess(ZC_GOSSIP, {[] {return true;}}), }, { //Exits @@ -1728,6 +1765,9 @@ void AreaTable_Init() { LocationAccess(IKANA_CANYON_LEDGE, {[] {return ZoraMask && OceanTitle && DekuMask;}}), LocationAccess(IKANA_CANYON_SCRUB_TRADE, {[] {return ZoraMask && OceanTitle;}}), LocationAccess(IKANA_CANYON_SCRUB_PURCHASE, {[]{return AnyWallet && AnyBottle;}}), + //Gossip Stones + LocationAccess(IC_DOCK_GOSSIP, {[] {return true;}}), + LocationAccess(IC_SAKON_GOSSIP, {[] {return true;}}), }, { //Exits @@ -1746,6 +1786,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 );}}), + //Gossip Stones + LocationAccess(IC_SPIRIT_HOUSE_GOSSIP, {[] {return true;}}), }, { //Exits @@ -3415,7 +3457,7 @@ void AreaTable_Init() { }); - areaTable[SECRET_SHRINE_ENTRANCE] = Area("Secret Shrine Entrance", "Secret Shrine Entrance", SECRET_SHRINE_ENTRANCE, { + areaTable[SECRET_SHRINE_ENTRANCE] = Area("Secret Shrine Entrance", "Secret Shrine Entrance", SECRET_SHRINE, { //Events }, { @@ -3427,7 +3469,7 @@ void AreaTable_Init() { Entrance(SECRET_SHRINE_CENTER_ROOM, {[]{return LightArrows && Bow && MagicMeter;}}), }); - areaTable[SECRET_SHRINE_CENTER_ROOM] = Area("Secret Shrine Center Room", "Secret Shrine Center Room", SECRET_SHRINE_CENTER_ROOM, { + areaTable[SECRET_SHRINE_CENTER_ROOM] = Area("Secret Shrine Center Room", "Secret Shrine Center Room", SECRET_SHRINE, { //Events }, { @@ -3443,7 +3485,7 @@ void AreaTable_Init() { Entrance(SECRET_SHRINE_GARO_ROOM, {[]{return true;}}), }); - areaTable[SECRET_SHRINE_DINOLFOS_ROOM] = Area("Secret Shrine Dinolfos Room", "Secret Shrine Dinolfos Room", SECRET_SHRINE_DINOLFOS_ROOM, { + areaTable[SECRET_SHRINE_DINOLFOS_ROOM] = Area("Secret Shrine Dinolfos Room", "Secret Shrine Dinolfos Room", SECRET_SHRINE, { //Events }, { @@ -3455,7 +3497,7 @@ void AreaTable_Init() { Entrance(SECRET_SHRINE_CENTER_ROOM, {[]{return true;}}), }); - areaTable[SECRET_SHRINE_WIZZROBE_ROOM] = Area("Secret Shrine Wizzrobe Room", "Secret Shrine Wizzrobe Room", SECRET_SHRINE_WIZZROBE_ROOM, { + areaTable[SECRET_SHRINE_WIZZROBE_ROOM] = Area("Secret Shrine Wizzrobe Room", "Secret Shrine Wizzrobe Room", SECRET_SHRINE, { //Events }, { @@ -3467,7 +3509,7 @@ void AreaTable_Init() { Entrance(SECRET_SHRINE_CENTER_ROOM, {[]{return true;}}), }); - areaTable[SECRET_SHRINE_WART_ROOM] = Area("Secret Shrine Wart Room", "Secret Shrine Wart Room", SECRET_SHRINE_WART_ROOM, { + areaTable[SECRET_SHRINE_WART_ROOM] = Area("Secret Shrine Wart Room", "Secret Shrine Wart Room", SECRET_SHRINE, { //Events }, { @@ -3479,7 +3521,7 @@ void AreaTable_Init() { Entrance(SECRET_SHRINE_CENTER_ROOM, {[]{return true;}}), }); - areaTable[SECRET_SHRINE_GARO_ROOM] = Area("Secret Shrine Garo Room", "Secret Shrine Garo Room", SECRET_SHRINE_GARO_ROOM, { + areaTable[SECRET_SHRINE_GARO_ROOM] = Area("Secret Shrine Garo Room", "Secret Shrine Garo Room", SECRET_SHRINE, { //Events }, { @@ -3508,12 +3550,18 @@ void AreaTable_Init() { Entrance(THE_MOON_LINK_TRIAL_ENTRANCE, {[]{return (TotalMaskCount() >= 4);}}), }); - areaTable[THE_MOON_DEKU_TRIAL] = Area("The Moon Deku Trial", "The Moon Deku Trial", THE_MOON_DEKU_TRIAL, { + areaTable[THE_MOON_DEKU_TRIAL] = Area("The Moon Deku Trial", "The Moon Deku Trial", THE_MOON, { //Events }, { //Locations LocationAccess(THE_MOON_DEKU_TRIAL_BONUS, {[] {return DekuMask;}}), + //Gossip Stones + LocationAccess(MOON_DEKU_GOSSIP_1, {[] {return DekuMask;}}), + LocationAccess(MOON_DEKU_GOSSIP_2, {[] {return DekuMask;}}), + LocationAccess(MOON_DEKU_GOSSIP_3, {[] {return DekuMask;}}), + LocationAccess(MOON_DEKU_GOSSIP_4, {[] {return DekuMask;}}), + LocationAccess(MOON_DEKU_GOSSIP_5, {[] {return DekuMask;}}), }, { //Exits @@ -3521,7 +3569,7 @@ void AreaTable_Init() { Entrance(THE_MOON_DEKU_TRIAL_KID_ROOM, {[]{return DekuMask;}}), }); - areaTable[THE_MOON_DEKU_TRIAL_KID_ROOM] = Area("The Moon Deku Trial Kid Room", "The Moon Deku Trial Kid Room", THE_MOON_DEKU_TRIAL_KID_ROOM, { + areaTable[THE_MOON_DEKU_TRIAL_KID_ROOM] = Area("The Moon Deku Trial Kid Room", "The Moon Deku Trial Kid Room", THE_MOON, { //Events }, { @@ -3533,12 +3581,18 @@ void AreaTable_Init() { Entrance(THE_MOON_DEKU_TRIAL, {[]{return true;}}), }); - areaTable[THE_MOON_GORON_TRIAL] = Area("The Moon Goron Trial", "The Moon Goron Trial", THE_MOON_GORON_TRIAL, { + areaTable[THE_MOON_GORON_TRIAL] = Area("The Moon Goron Trial", "The Moon Goron Trial", THE_MOON, { //Events }, { //Locations LocationAccess(THE_MOON_GORON_TRIAL_BONUS, {[] {return GoronMask && MagicMeter;}}), + //Gossip Stones + LocationAccess(MOON_GORON_GOSSIP_1, {[] {return GoronMask;}}), + LocationAccess(MOON_GORON_GOSSIP_2, {[] {return GoronMask;}}), + LocationAccess(MOON_GORON_GOSSIP_3, {[] {return GoronMask;}}), + LocationAccess(MOON_GORON_GOSSIP_4, {[] {return GoronMask;}}), + LocationAccess(MOON_GORON_GOSSIP_5, {[] {return GoronMask;}}), }, { //Exits @@ -3546,7 +3600,7 @@ void AreaTable_Init() { Entrance(THE_MOON_GORON_TRIAL_KID_ROOM, {[]{return GoronMask;}}), }); - areaTable[THE_MOON_GORON_TRIAL_KID_ROOM] = Area("The Moon Goron Trial Kid Room", "The Moon Goron Trial Kid Room", THE_MOON_GORON_TRIAL_KID_ROOM, { + areaTable[THE_MOON_GORON_TRIAL_KID_ROOM] = Area("The Moon Goron Trial Kid Room", "The Moon Goron Trial Kid Room", THE_MOON, { //Events }, { @@ -3558,12 +3612,18 @@ void AreaTable_Init() { Entrance(THE_MOON_GORON_TRIAL, {[]{return GoronMask;}}), }); - areaTable[THE_MOON_ZORA_TRIAL] = Area("The Moon Zora Trial", "The Moon Zora Trial", THE_MOON_ZORA_TRIAL, { + areaTable[THE_MOON_ZORA_TRIAL] = Area("The Moon Zora Trial", "The Moon Zora Trial", THE_MOON, { //Events }, { //Locations LocationAccess(THE_MOON_ZORA_TRIAL_BONUS, {[] {return ZoraMask && MagicMeter;}}), + //Gossip Stones + LocationAccess(MOON_ZORA_GOSSIP_1, {[] {return ZoraMask;}}), + LocationAccess(MOON_ZORA_GOSSIP_2, {[] {return ZoraMask;}}), + LocationAccess(MOON_ZORA_GOSSIP_3, {[] {return ZoraMask;}}), + LocationAccess(MOON_ZORA_GOSSIP_4, {[] {return ZoraMask;}}), + LocationAccess(MOON_ZORA_GOSSIP_5, {[] {return ZoraMask;}}), }, { //Exits @@ -3571,7 +3631,7 @@ void AreaTable_Init() { Entrance(THE_MOON_ZORA_TRIAL_KID_ROOM, {[]{return ZoraMask && MagicMeter;}}), }); - areaTable[THE_MOON_ZORA_TRIAL_KID_ROOM] = Area("The Moon Zora Trial Kid Room", "The Moon Zora Trial Kid Room", THE_MOON_ZORA_TRIAL_KID_ROOM, { + areaTable[THE_MOON_ZORA_TRIAL_KID_ROOM] = Area("The Moon Zora Trial Kid Room", "The Moon Zora Trial Kid Room", THE_MOON, { //Events }, { @@ -3583,7 +3643,7 @@ void AreaTable_Init() { Entrance(THE_MOON_ZORA_TRIAL, {[]{return true;}}), }); - areaTable[THE_MOON_LINK_TRIAL_ENTRANCE] = Area("The Moon Link Trial Entrance", "The Moon Link Trial Entrance", THE_MOON_LINK_TRIAL_ENTRANCE, { + areaTable[THE_MOON_LINK_TRIAL_ENTRANCE] = Area("The Moon Link Trial Entrance", "The Moon Link Trial Entrance", THE_MOON, { //Events }, { @@ -3595,7 +3655,7 @@ void AreaTable_Init() { Entrance(THE_MOON_LINK_TRIAL_DINOLFOS_ROOM, {[]{return true;}}), }); - areaTable[THE_MOON_LINK_TRIAL_DINOLFOS_ROOM] = Area("The Moon Link Trial Dinolfos Room", "The Moon Link Trial Dinolfos Room", THE_MOON_LINK_TRIAL_DINOLFOS_ROOM, { + areaTable[THE_MOON_LINK_TRIAL_DINOLFOS_ROOM] = Area("The Moon Link Trial Dinolfos Room", "The Moon Link Trial Dinolfos Room", THE_MOON, { //Events }, { @@ -3607,11 +3667,13 @@ void AreaTable_Init() { Entrance(THE_MOON_LINK_TRIAL_GOSSIP_ROOM_1, {[]{return Fighting;}}), }); - areaTable[THE_MOON_LINK_TRIAL_GOSSIP_ROOM_1] = Area("The Moon Link Trial Gossip Room 1", "The Moon Link Trial Gossip Room 1", THE_MOON_LINK_TRIAL_GOSSIP_ROOM_1, { + areaTable[THE_MOON_LINK_TRIAL_GOSSIP_ROOM_1] = Area("The Moon Link Trial Gossip Room 1", "The Moon Link Trial Gossip Room 1", THE_MOON, { //Events }, { //Locations + //Gossip Stones + LocationAccess(MOON_LINK_GOSSIP_1, {[] {return true;}}), }, { //Exits @@ -3619,7 +3681,7 @@ void AreaTable_Init() { Entrance(THE_MOON_LINK_TRIAL_GARO_ROOM, {[]{return true;}}), }); - areaTable[THE_MOON_LINK_TRIAL_GARO_ROOM] = Area("The Moon Link Trial Garo Room", "The Moon Link Trial Garo Room", THE_MOON_LINK_TRIAL_GARO_ROOM, { + areaTable[THE_MOON_LINK_TRIAL_GARO_ROOM] = Area("The Moon Link Trial Garo Room", "The Moon Link Trial Garo Room", THE_MOON, { //Events }, { @@ -3632,11 +3694,13 @@ void AreaTable_Init() { Entrance(THE_MOON_LINK_TRIAL_GOSSIP_ROOM_2, {[]{return Fighting && Hookshot;}}), }); - areaTable[THE_MOON_LINK_TRIAL_GOSSIP_ROOM_2] = Area("The Moon Link Trial Gossip Room 2", "The Moon Link Trial Gossip Room 2", THE_MOON_LINK_TRIAL_GOSSIP_ROOM_2, { + areaTable[THE_MOON_LINK_TRIAL_GOSSIP_ROOM_2] = Area("The Moon Link Trial Gossip Room 2", "The Moon Link Trial Gossip Room 2", THE_MOON, { //Events }, { //Locations + //Gossip Stones + LocationAccess(MOON_LINK_GOSSIP_2, {[] {return true;}}), }, { //Exits @@ -3644,12 +3708,15 @@ void AreaTable_Init() { Entrance(THE_MOON_LINK_TRIAL_IRON_KNUCKLE_ROOM, {[]{return true;}}), }); - areaTable[THE_MOON_LINK_TRIAL_IRON_KNUCKLE_ROOM] = Area("The Moon Link Trial Iron Knuckle Room", "The Moon Link Trial Iron Knuckle Room", THE_MOON_LINK_TRIAL_IRON_KNUCKLE_ROOM, { + areaTable[THE_MOON_LINK_TRIAL_IRON_KNUCKLE_ROOM] = Area("The Moon Link Trial Iron Knuckle Room", "The Moon Link Trial Iron Knuckle Room", THE_MOON, { //Events }, { //Locations LocationAccess(THE_MOON_IRON_KNUCKLE_CHEST, {[] {return Fighting;}}), + //Gossip Stones + LocationAccess(MOON_LINK_GOSSIP_3, {[] {return true;}}), + LocationAccess(MOON_LINK_GOSSIP_4, {[] {return true;}}), }, { //Exits @@ -3657,12 +3724,14 @@ void AreaTable_Init() { Entrance(THE_MOON_LINK_TRIAL_PIECE_OF_HEART_ROOM, {[]{return Fighting && AnyBombBag && Bow;}}), }); - areaTable[THE_MOON_LINK_TRIAL_PIECE_OF_HEART_ROOM] = Area("The Moon Link Trial Piece of Heart Room", "The Moon Link Trial Piece of Heart Room", THE_MOON_LINK_TRIAL_PIECE_OF_HEART_ROOM, { + areaTable[THE_MOON_LINK_TRIAL_PIECE_OF_HEART_ROOM] = Area("The Moon Link Trial Piece of Heart Room", "The Moon Link Trial Piece of Heart Room", THE_MOON, { //Events }, { //Locations LocationAccess(THE_MOON_LINK_TRIAL_BONUS, {[] {return true;}}), + //Gossip Stones + LocationAccess(MOON_LINK_GOSSIP_5, {[] {return true;}}), }, { //Exits @@ -3670,7 +3739,7 @@ void AreaTable_Init() { Entrance(THE_MOON_LINK_TRIAL_KID_ROOM, {[]{return (AnyBombBag && FireArrows && Bow && MagicMeter) || CanPlay(SongOfStorms);}}), }); - areaTable[THE_MOON_LINK_TRIAL_KID_ROOM] = Area("The Moon Link Trial Kid Room", "The Moon Link Trial Kid Room", THE_MOON_LINK_TRIAL_KID_ROOM, { + areaTable[THE_MOON_LINK_TRIAL_KID_ROOM] = Area("The Moon Link Trial Kid Room", "The Moon Link Trial Kid Room", THE_MOON, { //Events }, { diff --git a/source/menu.cpp b/source/menu.cpp index 559b6d2..166114f 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -587,23 +587,23 @@ void GenerateRandomizer() { return; } } - printf("\x1b[12;10HWriting Patch..."); + printf("\x1b[13;10HWriting Patch..."); if (WriteAllPatches()) { printf("Done"); if (Settings::PlayOption == PATCH_CONSOLE) { - printf("\x1b[14;10HQuit out using the home menu. Then\n"); - printf("\x1b[15;10Henable game patching and launch MM3D!\n"); + printf("\x1b[15;10HQuit out using the home menu. Then\n"); + printf("\x1b[16;10Henable game patching and launch MM3D!\n"); } else if (Settings::PlayOption == PATCH_CITRA) { - printf("\x1b[14;10HCopy code.ips, exheader.bin and romfs to\n"); - printf("\x1b[15;10Hthe MM3D mods folder, then launch MM3D!\n"); + printf("\x1b[15;10HCopy code.ips, exheader.bin and romfs to\n"); + printf("\x1b[16;10Hthe MM3D mods folder, then launch MM3D!\n"); } const auto& randomizerHash = GetRandomizerHash(); - printf("\x1b[17;10HHash:"); + printf("\x1b[18;10HHash:"); for (size_t i = 0; i < randomizerHash.size(); i++) { - printf("\x1b[%zu;11H- %s", i + 18, randomizerHash[i].c_str()); + printf("\x1b[%zu;11H- %s", i + 19, randomizerHash[i].c_str()); } } else { diff --git a/source/playthrough.cpp b/source/playthrough.cpp index 0e2ac09..7bd171b 100644 --- a/source/playthrough.cpp +++ b/source/playthrough.cpp @@ -19,10 +19,10 @@ namespace Playthrough { //resolved to something random Random_Init(seed); - //overrides.clear(); + overrides.clear(); //CustomMessages::ClearMessages(); ItemReset(); - //HintReset(); + HintReset(); Areas::AccessReset(); Settings::UpdateSettings(); @@ -109,14 +109,14 @@ namespace Playthrough { if (Settings::GenerateSpoilerLog) { //write logs - printf("\x1b[11;10HWriting Spoiler Log..."); + printf("\x1b[12;10HWriting Spoiler Log..."); if (SpoilerLog_Write()) { printf("Done"); } else { printf("Failed"); } #ifdef ENABLE_DEBUG - printf("\x1b[11;10HWriting Placement Log..."); + printf("\x1b[12;10HWriting Placement Log..."); if (PlacementLog_Write()) { printf("Done\n"); } else { diff --git a/source/setting_descriptions.cpp b/source/setting_descriptions.cpp index d2b719d..4964213 100644 --- a/source/setting_descriptions.cpp +++ b/source/setting_descriptions.cpp @@ -312,20 +312,15 @@ string_view gossipStonesHintsDesc = "Gossip Stones can be made to give hints /*------------------------------ // | CLEARER HINTS | // ------------------------------*/ // -string_view clearerHintsDesc = "**OPTION CURRENTLY WIP**\n" // - "The hints provided by Gossip Stones will be very\n" +string_view clearerHintsDesc = "The hints provided by Gossip Stones will be very\n" "direct if this option is enabled."; // /*------------------------------ // | HINT DISTRIBUTION | // ------------------------------*/ // -string_view uselessHintsDesc = "**OPTION CURRENTLY WIP**\n" // - "Only junk hints."; // -string_view balancedHintsDesc = "**OPTION CURRENTLY WIP**\n" // - "Recommended hint spread."; // -string_view strongHintsDesc = "**OPTION CURRENTLY WIP**\n" // - "More useful hints."; // -string_view veryStrongHintsDesc = "**OPTION CURRENTLY WIP**\n" // - "Many powerful hints."; // +string_view uselessHintsDesc = "Only junk hints."; // +string_view balancedHintsDesc = "Recommended hint spread."; // +string_view strongHintsDesc = "More useful hints."; // +string_view veryStrongHintsDesc = "Many powerful hints."; // // /*------------------------------ // | CHANGE OVERWORLD SPIRTES | // diff --git a/source/settings.cpp b/source/settings.cpp index bbfd36d..19a7015 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -347,7 +347,7 @@ namespace Settings { //&RandomTrapDmg, &GossipStoneHints, //&ClearerHints, - //&HintDistribution, + &HintDistribution, &CompassShowWoTH, //&DamageMultiplier, //&ChestAnimations, diff --git a/source/spoiler_log.cpp b/source/spoiler_log.cpp index e0679e9..be487c5 100644 --- a/source/spoiler_log.cpp +++ b/source/spoiler_log.cpp @@ -529,7 +529,7 @@ static void WriteWayOfTheHeroLocation(tinyxml2::XMLDocument& spoilerLog) { } // Writes the hints to the spoiler log, if they are enabled. -/*static void WriteHints(tinyxml2::XMLDocument& spoilerLog) { +static void WriteHints(tinyxml2::XMLDocument& spoilerLog) { if (Settings::GossipStoneHints.Is((u8)GossipStoneHintsSetting::HINTS_NO_HINTS)) { return; } @@ -549,7 +549,7 @@ static void WriteWayOfTheHeroLocation(tinyxml2::XMLDocument& spoilerLog) { } spoilerLog.RootElement()->InsertEndChild(parentNode); -}*/ +} static void WriteAllLocations(tinyxml2::XMLDocument& spoilerLog) { auto parentNode = spoilerLog.NewElement("all-locations"); @@ -585,7 +585,7 @@ bool SpoilerLog_Write() { playthroughBeatable = false; wothLocations.clear(); - //WriteHints(spoilerLog); + WriteHints(spoilerLog); // WriteShuffledEntrances(spoilerLog); WriteAllLocations(spoilerLog); From c41fa8b48fab3b346ccd1dc7170ef54c3cfb8944 Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Fri, 19 Jan 2024 11:27:41 -0600 Subject: [PATCH 25/87] Update README.md Change discord links. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f01f015..ee69adf 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ As a service to the player in this very long game, various tedious elements of t Please be sure to explore the many customizable settings which are available when using the app! There are many options which can alter the length or difficulty of each playthrough. -Want to discuss the randomizer with others? Join our [Discord server](https://discord.gg/EVvzb6varj)! +Want to discuss the randomizer with others? Join our [Discord server](https://discord.gg/73ZNdjbfFp)! ## Installation @@ -58,7 +58,7 @@ Right now, save files are shared between any playthroughs you create and the bas ### Getting Stuck With a game the size of _Majora's Mask 3D_, it's quite easy for players to get stuck in certain situations with no apparent path to progressing. -Before reporting an issue, please make sure to check out the [Discord server](https://discord.gg/EVvzb6varj) to see if that issue has been reported already. +Before reporting an issue, please make sure to check out the [Discord server](https://discord.gg/73ZNdjbfFp) to see if that issue has been reported already. You may also find a map tracker helpful, as these allow you to see all checks which are available with your current items, and check which ones you've gotten already although keep in mind these were designed for the original Majora's Mask Randomizer so there may be some slight discrepancies. From e6edd2b7a4ea686befcb16ca27b3a75a09a150bf Mon Sep 17 00:00:00 2001 From: Phlex Date: Fri, 19 Jan 2024 23:33:01 -0600 Subject: [PATCH 26/87] Fix 1.1 code generation. Update subrepo to fix razor sword HP. --- Z3DR | 2 +- source/patch.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Z3DR b/Z3DR index 61d66de..09c1d33 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 61d66de8a848c92e67d1472c9816cd5067d8c062 +Subproject commit 09c1d3326efc6b6a35857449313d0b830f642674 diff --git a/source/patch.cpp b/source/patch.cpp index e8b956e..bec1269 100644 --- a/source/patch.cpp +++ b/source/patch.cpp @@ -141,7 +141,7 @@ bool WriteAllPatches() { } // Copy basecode to code - const char* basecodeFile = Settings::Version == 0 ? "romfs:/basecode.ips" : "romfs/basecode1.1.ips"; + const char* basecodeFile = Settings::Version == 0 ? "romfs:/basecode.ips" : "romfs:/basecode1.1.ips"; if (auto basecode = FILEPtr{std::fopen(basecodeFile, "r"), std::fclose}) { // obtain basecode.ips file size fseek(basecode.get(), 0, SEEK_END); From 8cb27452a32ef255d2fe4052549fcde0362da185 Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Fri, 19 Jan 2024 23:39:15 -0600 Subject: [PATCH 27/87] Fix 1.1 code generation. (#23) Update subrepo to fix razor sword HP. Bump version. --- source/include/version.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/include/version.hpp b/source/include/version.hpp index 24e886a..c5c51ac 100644 --- a/source/include/version.hpp +++ b/source/include/version.hpp @@ -1,4 +1,4 @@ #pragma once -#define RANDOMIZER_VERSION "v1.0" +#define RANDOMIZER_VERSION "v1.0.1" #define COMMIT_NUMBER "develop" From 8c5532eb64ce0f1fdc871ee030eaa0f77d172e36 Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Sat, 20 Jan 2024 11:42:03 -0600 Subject: [PATCH 28/87] Update create-build.yml (#24) Update t3x file. --- .github/workflows/create-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/create-build.yml b/.github/workflows/create-build.yml index 6eefa46..f623c96 100644 --- a/.github/workflows/create-build.yml +++ b/.github/workflows/create-build.yml @@ -384,7 +384,7 @@ jobs: "description": "MM3D Randomizer - An online database of the most recent versions of the random experience for MM3D", "url": "https://phlexplexi.co/unistore", "file": "MM3DR.unistore", - "sheetURL": "https://dl.dropboxusercontent.com/s/5qv4ngozhgmyyen/OOT3DR.t3x?dl=1", + "sheetURL": "https://phlexplexi.co/icon.t3x", "sheet": "MM3DR.t3x", "bg_index": 1, "bg_sheet": 0, @@ -439,4 +439,4 @@ jobs: token: ${{ secrets.TOKEN }} gist_id: a0bb911772800a7071eddf6298ff6e9f gist_file_name: MM3DR.unistore - file_path: ./MM3DR.unistore \ No newline at end of file + file_path: ./MM3DR.unistore From 2e1b71467bb18698cecdcfc956e6a7ce523d8894 Mon Sep 17 00:00:00 2001 From: PhlexPlexico Date: Sun, 21 Jan 2024 16:00:12 -0600 Subject: [PATCH 29/87] Fix Jim Softlocking the game. (#25) Fix swords not coming back after time reset if it was stolen. Fix swords not respectively going to the right form upon collection. Spoler -> Spoiler in menus. --- Z3DR | 2 +- source/settings.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Z3DR b/Z3DR index 09c1d33..3999ba0 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 09c1d3326efc6b6a35857449313d0b830f642674 +Subproject commit 3999ba08be9fd83ef05333cdf34fefb35c953f94 diff --git a/source/settings.cpp b/source/settings.cpp index 19a7015..c198451 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -53,7 +53,7 @@ namespace Settings { Option CustomItemsButton = Option::U8("Items", { buttonOptions }, { customItemsButtonDesc }, OptionCategory::Setting, 0); Option CustomMasksButton = Option::U8("Masks", { buttonOptions }, { customMasksButtonDesc }, OptionCategory::Setting, 0); Option CustomNotebookButton = Option::U8("Bombers Notebook", { buttonOptions }, { customNotebookDesc }, OptionCategory::Setting, 1); - Option IngameSpoilersButton = Option::U8("Ingame Spoler Log",{ buttonOptions }, { ingameSpoilersButtonDesc }, OptionCategory::Setting, 2); + Option IngameSpoilersButton = Option::U8("Ingame Spoiler Log",{ buttonOptions }, { ingameSpoilersButtonDesc }, OptionCategory::Setting, 2); std::vector

detailLogicSettings = { //&logicSettings, @@ -561,6 +570,7 @@ namespace Settings { //adding a menu with no options crashes, might fix later std::vector mainMenu = { &logicSettings, + &gameSettings, &shuffleItems, &shuffleDungeon, &itemPool, @@ -581,8 +591,8 @@ namespace Settings { std::array rDungeonRewardOverrides{}; //declared here, set in menu.cpp - u8 PlayOption; - u8 Version; + //u8 PlayOption; + //u8 Version; //Fills and returns a SettingsContext struct. //This struct is written to the code.ips patch and allows the game @@ -595,7 +605,7 @@ namespace Settings { ctx.hashIndexes[3] = hashIconIndexes[3]; ctx.hashIndexes[4] = hashIconIndexes[4]; - ctx.playOption = PlayOption; + ctx.playOption = PlayOption.Value(); ///things commented out below here need to be added or match up to SettingsContext in \mm3dr\code\include\rnd\settings.h ctx.logic = Logic.Value();