diff --git a/.github/workflows/create-build.yml b/.github/workflows/create-build.yml index cf698a9..170d6cb 100644 --- a/.github/workflows/create-build.yml +++ b/.github/workflows/create-build.yml @@ -20,16 +20,21 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Project - uses: actions/checkout@v3 + uses: actions/checkout@v4 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 + if [[ ${{ github.event.inputs.build_type == 'Nightly' }} == true ]]; then + echo "last_nightly=$(git describe --tags $(git rev-list --tags --max-count=1))" >> $GITHUB_ENV + else + echo "last_nightly=$(git describe --tags --match="v[0-9]*" HEAD --abbrev=0)" >> $GITHUB_ENV + fi + - name: Generate changelog id: changelog - uses: metcalfc/changelog-generator@v4.0.1 + uses: metcalfc/changelog-generator@v4.3.0 with: myToken: ${{ secrets.GITHUB_TOKEN }} base-ref: ${{ env.last_nightly }} @@ -46,11 +51,20 @@ jobs: steps: - name: Checkout Project - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - - name: Run Build Script + - if: ${{ github.event.inputs.build_type == 'Nightly' }} + name: Run Build Script Nightly + run: | + chmod +x linux_build_rando.sh + ./linux_build_rando.sh + + - if: ${{ github.event.inputs.build_type == 'Release' }} + name: Run Build Script Release + env: + url_tag: v${{ github.event.inputs.version }} run: | chmod +x linux_build_rando.sh ./linux_build_rando.sh @@ -61,7 +75,7 @@ jobs: - if: ${{ github.event.inputs.build_type == 'Nightly' }} name: Create Pre-release - uses: ncipollo/release-action@v1.12.0 + uses: ncipollo/release-action@v1.14.0 with: token: "${{ secrets.GITHUB_TOKEN }}" artifacts: "MM3D_Randomizer.cia,MM3D_Randomizer.3dsx,cia.png,3dsx.png" @@ -84,7 +98,7 @@ jobs: - if: ${{ github.event.inputs.build_type == 'Release' }} name: Create Release - uses: ncipollo/release-action@v1.12.0 + uses: ncipollo/release-action@v1.14.0 with: token: "${{ secrets.GITHUB_TOKEN }}" artifacts: "MM3D_Randomizer.cia,MM3D_Randomizer.3dsx,cia.png,3dsx.png" @@ -93,15 +107,15 @@ jobs: 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. + ${{ github.event.inputs.version }} Changes 🛠: + ${{ needs.get-changelog.outputs.changelog }} 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) + ![CIA Download](https://github.com/${{ github.repository }}/releases/download/v${{ github.event.inputs.version }}/cia.png) 3DSX QR Code: - ![CIA Download](https://github.com/${{ github.repository }}/releases/download/Nightly-${{ env.sha_short }}/3dsx.png) + ![CIA Download](https://github.com/${{ github.repository }}/releases/download/v${{ github.event.inputs.version }}/3dsx.png) deploy-gist: needs: build-cia-3dsx diff --git a/Z3DR b/Z3DR index 37d1a54..8a402b8 160000 --- a/Z3DR +++ b/Z3DR @@ -1 +1 @@ -Subproject commit 37d1a5497763f9d899be8bf60ed4fb89b59d6d6e +Subproject commit 8a402b8912e41a8cff8149eb3f1d5f9be36b3136 diff --git a/linux_build_rando.sh b/linux_build_rando.sh index a3ac65b..7a3e3fc 100755 --- a/linux_build_rando.sh +++ b/linux_build_rando.sh @@ -5,8 +5,8 @@ compile() { APP_NAME=$(basename "$PWD") BANNERTOOLAPP=bannertool IS_GH_ACTIONS=true - if [ -n "$var" ]; then - echo "Building on Github Actions.." + if [ -n "$GITHUB_SHA" ]; then + echo "Building on Github Actions..." else echo "GITHUB_SHA is empty, building locally." IS_GH_ACTIONS=false @@ -36,15 +36,20 @@ compile() { export commitHashShort=$(echo ${GITHUB_SHA::6}) sed -i "s/develop/${commitHashShort:-develop}/" ./source/include/version.hpp - make -j debug_app=1 + make -j sed -i "s/${commitHashShort}/develop/" ./source/include/version.hpp $BANNERTOOLAPP makebanner -i ./banner.png -a ./audio.wav -o ./banner.bnr $BANNERTOOLAPP makesmdh -s "Majora's Mask 3D Randomizer" -l "A Randomized Majoras Mask Experience" -p "Z3DR Team" -i icon.png -o ./icon.icn 3dstool -cvtf romfs ./romfs.bin --romfs-dir ./romfs makerom -f cia -o ${APP_NAME}.cia -DAPP_ENCRYPTED=false -target t -exefslogo -elf ./${APP_NAME}.elf -icon ./icon.icn -banner ./banner.bnr -rsf ./mmrando.rsf -romfs ./romfs.bin -major 1 -minor 0 -micro 0 if $IS_GH_ACTIONS; then - qrencode -ocia.png https://github.com/$GITHUB_REPOSITORY/releases/download/Nightly-$commitHashShort/${APP_NAME}.cia - qrencode -o3dsx.png https://github.com/$GITHUB_REPOSITORY/releases/download/Nightly-$commitHashShort/${APP_NAME}.3dsx + if [[ ${url_tag+x} ]]; then + qrencode -ocia.png https://github.com/$GITHUB_REPOSITORY/releases/download/$url_tag/${APP_NAME}.cia + qrencode -o3dsx.png https://github.com/$GITHUB_REPOSITORY/releases/download/$url_tag/${APP_NAME}.3dsx + else + qrencode -ocia.png https://github.com/$GITHUB_REPOSITORY/releases/download/Nightly-$commitHashShort/${APP_NAME}.cia + qrencode -o3dsx.png https://github.com/$GITHUB_REPOSITORY/releases/download/Nightly-$commitHashShort/${APP_NAME}.3dsx + fi fi } diff --git a/source/custom_messages.cpp b/source/custom_messages.cpp index 01d9936..b18af23 100644 --- a/source/custom_messages.cpp +++ b/source/custom_messages.cpp @@ -143,7 +143,7 @@ void CreateBaselineCustomMessages() { // Kokiri Sword CreateMessage(0x0037, 0xFFFF, 0x3FFFFFFF, 0xFF0000, - "You got the #kokiri sword!# The trusty sword you're familiar with. A treasure from Kokiri Forest.", + "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 diff --git a/source/dungeon.cpp b/source/dungeon.cpp index dcf09e7..802a188 100644 --- a/source/dungeon.cpp +++ b/source/dungeon.cpp @@ -147,9 +147,9 @@ std::vector DungeonInfo::GetEveryLocation() const { WOODFALL_TEMPLE_MAP_CHEST, WOODFALL_TEMPLE_COMPASS_CHEST, WOODFALL_TEMPLE_SMALL_KEY_CHEST, - ODOLWA_HEART_CONTAINER, WOODFALL_TEMPLE_HEROS_BOW_CHEST, WOODFALL_TEMPLE_BOSS_KEY_CHEST, + ODOLWA_HEART_CONTAINER, ODOLWA, WOODFALL_TEMPLE_DEKU_PRINCESS, },{ @@ -209,8 +209,8 @@ std::vector DungeonInfo::GetEveryLocation() const { GBT_SMALL_KEY_CHEST, GBT_ICE_ARROW_CHEST, GBT_BOSS_KEY_CHEST, - GYORG, GYORG_HEART_CONTAINER, + GYORG, },{ //STRAY FAIRY LOCATIONS GBT_SF_SKULLTULA, @@ -241,8 +241,8 @@ std::vector DungeonInfo::GetEveryLocation() const { STONE_TOWER_TEMPLE_UPDRAFT_ROOM_CHEST, STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST, STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST, - TWINMOLD, TWINMOLD_HEART_CONTAINER, + TWINMOLD, },{ //STRAY FAIRY LOCATIONS ST_SF_MIRROR_SUN_BLOCK, diff --git a/source/fill.cpp b/source/fill.cpp index 5fcc221..a8c23b8 100644 --- a/source/fill.cpp +++ b/source/fill.cpp @@ -238,7 +238,7 @@ std::vector GetAccessibleLocations(const std::vector& } return {}; } - + erase_if(accessibleLocations, [&allowedLocations](LocationKey loc) { for (LocationKey allowedLocation : allowedLocations) { if (loc == allowedLocation || Location(loc)->GetPlacedItemKey() != NONE) { @@ -247,6 +247,7 @@ std::vector GetAccessibleLocations(const std::vector& } return true; }); + return accessibleLocations; } @@ -344,9 +345,18 @@ static void FastFill(std::vector items, std::vector locati //Loop until locations are empty, or also end if items are empty and the parameters specify to end then while (!locations.empty() && (!endOnItemsEmpty || !items.empty())) { LocationKey loc = RandomElement(locations, true); + ItemKey item = RandomElement(items, true); + /*if ( (Location(loc)->IsRepeatable() == false) && (ItemTable(item).IsReusable() == true) ){ + //unsuccessfulPlacement = true; + CitraPrint("Attemting to place repeatable item in nonrepeatable spot in FastFill"); + PlacementLog_Msg("\n Attempted to place " + ItemTable(item).GetName().GetEnglish() + " at " + Location(loc)->GetName()); + items.push_back(item); + locations.push_back(loc); + } + else {*/ Location(loc)->SetAsHintable(); - PlaceItemInLocation(loc, RandomElement(items, true)); - + PlaceItemInLocation(loc, item); + if (items.empty() && !endOnItemsEmpty) { items.push_back(GetJunkItem()); } @@ -477,7 +487,7 @@ static void AssumedFill(const std::vector& items, const std::vectorIsRepeatable()) && ItemTable(item).IsReusable() ){ //unsuccessfulPlacement = true; - CitraPrint("Attemting to place things where they shouldnt be"); + CitraPrint("Attemting to place repeatable item in non repeatable spot in AssumedFill"); PlacementLog_Msg("\n Attempted to place " + ItemTable(item).GetName().GetEnglish() + " at " + Location(selectedLocation)->GetName()); itemsToPlace.push_back(item); } @@ -722,11 +732,14 @@ static void RandomizeLinksPocket() { int VanillaFill() { //Perform minimum needed initialization - AreaTable_Init(); + CitraPrint("Starting VanillaFill\n"); + AreaTable_Init(); //Reset the world graph to intialize the proper locations + ItemReset(); //Reset shops incase of shopsanity random GenerateLocationPool(); GenerateItemPool(); GenerateStartingInventory(); - //Place vanilla item in each location + RemoveStartingItemsFromPool(); + FillExcludedLocations(); RandomizeDungeonRewards(); for (LocationKey loc : allLocations) { Location(loc)->PlaceVanillaItem(); @@ -738,42 +751,58 @@ int VanillaFill() { // printf("\x1b[7;32HDone"); //} //Finish up + GeneratePlaythrough(); + printf("Done"); + printf("\x1b[9;10HCalculating Playthrough..."); + PareDownPlaythrough(); + printf("Done"); + printf("\x1b[10;10HCalculating Way of the Hero..."); + CalculateWotH(); + printf("Done"); + CitraPrint("Creating Item Overrides"); CreateItemOverrides(); - //CreateEntranceOverrides(); - //CreateAlwaysIncludedMessages(); + // CreateEntranceOverrides(); + // CreateAlwaysIncludedMessages(); + if (GossipStoneHints.IsNot(rnd::GossipStoneHintsSetting::HINTS_NO_HINTS)) { + printf("\x1b[11;10HCreating Hints..."); + CreateAllHints(); + printf("Done"); + } + return 1; } int NoLogicFill() { + CitraPrint("StartingNoLogicFill\n"); AreaTable_Init(); //Reset the world graph to intialize the proper locations ItemReset(); //Reset shops incase of shopsanity random GenerateLocationPool(); GenerateItemPool(); GenerateStartingInventory(); + RemoveStartingItemsFromPool(); + FillExcludedLocations(); RandomizeDungeonRewards(); std::vector remainingPool = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return true;}); FastFill(remainingPool, GetAllEmptyLocations(), false); GeneratePlaythrough(); - //Successful placement, produced beatable result - //if (playthroughBeatable && !placementFailure) { - // printf("Done"); - // printf("\x1b[9;10HCalculating Playthrough..."); - // PareDownPlaythrough(); - // CalculateWotH(); - // printf("Done"); - CreateItemOverrides(); - // CreateEntranceOverrides(); - // CreateAlwaysIncludedMessages(); - /*if (GossipStoneHints.IsNot(HINTS_NO_HINTS)) { - printf("\x1b[10;10HCreating Hints..."); - CreateAllHints(); - printf("Done"); - } - if (ShuffleMerchants.Is(SHUFFLEMERCHANTS_HINTS)) { - CreateMerchantsHints(); - }*/ - //} - return 1; + printf("Done"); + printf("\x1b[9;10HCalculating Playthrough..."); + PareDownPlaythrough(); + printf("Done"); + printf("\x1b[10;10HCalculating Way of the Hero..."); + CalculateWotH(); + printf("Done"); + CitraPrint("Creating Item Overrides"); + CreateItemOverrides(); + // CreateEntranceOverrides(); + // CreateAlwaysIncludedMessages(); + if (GossipStoneHints.IsNot(rnd::GossipStoneHintsSetting::HINTS_NO_HINTS)) { + printf("\x1b[11;10HCreating Hints..."); + CreateAllHints(); + printf("Done"); + } + + return 1; } @@ -814,7 +843,7 @@ int Fill() { //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 + std::vector mainadvancementItems = FilterAndEraseFromPool(ItemPool, [](const ItemKey i) {return ItemTable(i).IsAdvancement() && ItemTable(i).GetItemType() != ITEMTYPE_QUEST;});//(ItemTable(i).GetItemType() == ITEMTYPE_ITEM || ItemTable(i).GetItemType() == ITEMTYPE_MASK || ItemTable(i).GetItemType() == ITEMTYPE_TRADE || ItemTable(i).GetItemType() == ITEMTYPE_GFAIRY) //Then Place those to expand the amount of checks available AssumedFill(mainadvancementItems, allLocations,true); diff --git a/source/hint_list.cpp b/source/hint_list.cpp index f94def9..dbd11e1 100644 --- a/source/hint_list.cpp +++ b/source/hint_list.cpp @@ -12,908 +12,2291 @@ void HintTable_Init() { | GENERAL TEXT | ---------------------------*/ - hintTable[NONE] = HintText::Exclude({Text{"No Hint","",""}}); - hintTable[PREFIX] = HintText::Exclude({Text{"They say that ", /*french*/"Selon moi, ", /*spanish*/"Según dicen, "}}); - hintTable[WAY_OF_THE_HERO] = HintText::Exclude({Text{" is on the way of the hero.", /*french*/" est sur le chemin du héros.", /*spanish*/" conduce a la senda del héroe."}}); - hintTable[PLUNDERING] = HintText::Exclude({Text{"plundering ", /*french*/"explorer ", /*spanish*/"inspeccionar "}}); - hintTable[FOOLISH] = HintText::Exclude({Text{" is a foolish choice.", /*french*/" est futile.", /*spanish*/" no es una sabia decisión."}}); - hintTable[CAN_BE_FOUND_AT] = HintText::Exclude({Text{"can be found at", /*french*/"se trouve dans", /*spanish*/"aguarda en"}}); - hintTable[HOARDS] = HintText::Exclude({Text{"hoards", /*french*/"recèle", /*spanish*/"acapara"}}); + hintTable[NONE] = HintText::Exclude({Text{"No Hint", "**FRENCH**", "**SPANISH**"}}); + hintTable[PREFIX] = HintText::Exclude({Text{"They say that ", "Selon moi, ", "Según dicen, "}}); + hintTable[WAY_OF_THE_HERO] = HintText::Exclude({Text{" is on the way of the hero.", " est sur le chemin du héros.", " conduce a la senda del héroe."}}); + hintTable[PLUNDERING] = HintText::Exclude({Text{"plundering ", "explorer ", "inspeccionar "}}); + hintTable[FOOLISH] = HintText::Exclude({Text{" is a foolish choice.", " est futile.", " no es una sabia decisión."}}); + hintTable[CAN_BE_FOUND_AT] = HintText::Exclude({Text{"can be found at", "se trouve dans", "aguarda en"}}); + hintTable[HOARDS] = HintText::Exclude({Text{"hoards", "recèle", "acapara"}}); - //hintTable[ITEM] = HintText::Item({ Text{"English","French","Spanish"} }); + //hintTable[ITEM] = HintText::Item({Text{"English", "French", "Spanish"}}); /*------------------------- | 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"} }); - hintTable[GREAT_FAIRYS_SWORD] = HintText::Item({ Text{"A powerful fairy blade", "a powerful fairy blade", "a powerful fairy blade"} }); - hintTable[HEROS_SHIELD] = HintText::Item({ Text{"a basic shield", "a basic shield", "a basic shield"} }); - hintTable[MIRROR_SHIELD] = HintText::Item({ Text{"a reflective shield", "a reflective shield", "a reflective shield"} }); - hintTable[DEKU_STICK] = HintText::Item({ Text{"a flammable weapon", "a flammable weapon", "a flammable weapon"} }); - hintTable[LAND_TITLE] = HintText::Item({ Text{"a property deal", "a property deal", "a property deal"} }); - hintTable[SWAMP_TITLE] = HintText::Item({ Text{"a property deal", "a property deal", "a property deal"} }); - hintTable[MOUNTAIN_TITLE] = HintText::Item({ Text{"a property deal", "a property deal", "a property deal"} }); - hintTable[OCEAN_TITLE] = HintText::Item({ Text{"a property deal", "a property deal", "a property deal"} }); - hintTable[BOMBERS_NOTEBOOK] = HintText::Item({ Text{"a handy notepad", "a handy notepad", "a handy notepad"} }); - hintTable[ROOM_KEY] = HintText::Item({ Text{"a hotel door opener", "a hotel door opener", "a hotel door opener"} }); - hintTable[LETTER_KAFEI] = HintText::Item({ Text{"a lover's letter", "a lover's letter", "a lover's letter"} }); - hintTable[PENDANT_MEMORIES] = HintText::Item({ Text{"a cherished necklace","a cherished necklace","a cherished necklace"} }); - hintTable[LETTER_MAMA] = HintText::Item({ Text{"A special delivery", "a special delivery", "a special delivery"}}); - 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[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"} }); - 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"} }); + hintTable[KOKIRI_SWORD] = HintText::Item({ + //obscure + Text{"a forest blade", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Kokiri Sword", "**FRENCH**", "**SPANISH**"} + ); + hintTable[RAZOR_SWORD] = HintText::Item({ + //obscure + Text{"a sharp blade", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Razor Sword", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GILDED_SWORD] = HintText::Item({ + //obscure + Text{"a very sharp blade", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Gilded Sword", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GREAT_FAIRYS_SWORD] = HintText::Item({ + //obscure + Text{"A powerful fairy blade", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Great Fairy's Sword", "**FRENCH**", "**SPANISH**"} + ); + hintTable[HEROS_SHIELD] = HintText::Item({ + //obscure + Text{"a basic shield", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Hero's Shield", "**FRENCH**", "**SPANISH**"} + ); + hintTable[MIRROR_SHIELD] = HintText::Item({ + //obscure + Text{"a reflective shield", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Mirror Shield", "**FRENCH**", "**SPANISH**"} + ); + hintTable[DEKU_STICK] = HintText::Item({ + //obscure + Text{"a flammable weapon", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Deku Stick", "**FRENCH**", "**SPANISH**"} + ); + hintTable[LAND_TITLE] = HintText::Item({ + //obscure + Text{"a property deal", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Land Title Deed", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SWAMP_TITLE] = HintText::Item({ + //obscure + Text{"a property deal", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Swamp Title Deed", "**FRENCH**", "**SPANISH**"} + ); + hintTable[MOUNTAIN_TITLE] = HintText::Item({ + //obscure + Text{"a property deal", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Mountain Title Deed", "**FRENCH**", "**SPANISH**"} + ); + hintTable[OCEAN_TITLE] = HintText::Item({ + //obscure + Text{"a property deal", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"an Ocean Title Deed", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOMBERS_NOTEBOOK] = HintText::Item({ + //obscure + Text{"a handy notepad", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Bombers' Notebook", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ROOM_KEY] = HintText::Item({ + //obscure + Text{"a hotel door opener", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Room Key", "**FRENCH**", "**SPANISH**"} + ); + hintTable[LETTER_KAFEI] = HintText::Item({ + //obscure + Text{"a lover's letter", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Letter to Kafei", "**FRENCH**", "**SPANISH**"} + ); + hintTable[PENDANT_MEMORIES] = HintText::Item({ + //obscure + Text{"a cherished necklace", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Pendant of Memories", "**FRENCH**", "**SPANISH**"} + ); + hintTable[LETTER_MAMA] = HintText::Item({ + //obscure + Text{"A special delivery", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Letter to Mama", "**FRENCH**", "**SPANISH**"} + ); + hintTable[MOONS_TEAR] = HintText::Item({ + //obscure + Text{"a lunar teardrop", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Moon's Tear", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SPIN_ATTACK] = HintText::Item({ + //obscure + Text{"a magic attack", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the mastered Spin Attack", "**FRENCH**", "**SPANISH**"} + ); + hintTable[LENS_OF_TRUTH] = HintText::Item({ + //obscure + Text{"a lie detector", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Lens of Truth", "**FRENCH**", "**SPANISH**"} + ); + hintTable[HEROS_BOW] = HintText::Item({ + //obscure + Text{"a bow", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Hero's Bow", "**FRENCH**", "**SPANISH**"} + ); + hintTable[FIRE_ARROWS] = HintText::Item({ + //obscure + Text{"the power of fire", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Fire Arrow", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ICE_ARROWS] = HintText::Item({ + //obscure + Text{"the power of ice", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Ice Arrow", "**FRENCH**", "**SPANISH**"} + ); + hintTable[LIGHT_ARROWS] = HintText::Item({ + //obscure + Text{"the power of light", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Light Arrow", "**FRENCH**", "**SPANISH**"} + ); + hintTable[HOOKSHOT] = HintText::Item({ + //obscure + Text{"a chain and grapple", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Hookshot", "**FRENCH**", "**SPANISH**"} + ); + hintTable[MAGIC_BEAN] = HintText::Item({ + //obscure + Text{"a plant seed", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Magic Bean", "**FRENCH**", "**SPANISH**"} + ); + hintTable[MAGIC_BEAN_PACK] = HintText::Item({ + //obscure + Text{"multiple plant seeds", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a pack of Magic Beans", "**FRENCH**", "**SPANISH**"} + ); + hintTable[DOUBLE_DEFENSE] = HintText::Item({ + //obscure + Text{"magical defence", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Double Defense", "**FRENCH**", "**SPANISH**"} + ); // OCARINA_OF_TIME, - hintTable[PICTOGRAPH_BOX] = HintText::Item({ Text{"a capture device", "a capture device", "a capture device"} }); - hintTable[POWDER_KEG] = HintText::Item({ Text{"an explosive barrel", "an explosive barrel", "an explosive barrel"}}); - hintTable[KEATON_MASK] = HintText::Item({ Text{"a popular mask", "a popular mask", "a popular mask"} }); - hintTable[BUNNY_HOOD] = HintText::Item({ Text{"the ears of the wild", "the ears of the wild", "the ears of the wild"}}); - hintTable[GORON_MASK] = HintText::Item({ Text{"a mountain spirit", "a mountain spirit", "a mountain spirit"}}); - hintTable[ZORA_MASK] = HintText::Item({ Text{"an ocean spirit", "an ocean spirit", "an ocean spirit"}}); - hintTable[DEKU_MASK] = HintText::Item({ Text{"a forest spirit", "a forest spirit", "a forest spirit"}}); - hintTable[POSTMANS_HAT] = HintText::Item({ Text{"a hard worker's hat", "a hard worker's hat", "a hard worker's hat"}}); - hintTable[ALL_NIGHT_MASK] = HintText::Item({ Text{"insomnia","insomnia","insomnia"}}); - hintTable[BLAST_MASK] = HintText::Item({ Text{"a dangerous mask", "a dangerous mask", "a dangerous mask"}}); - hintTable[STONE_MASK] = HintText::Item({ Text{"inconspicousness", "inconspicousness", "inconspicousness"}}); - hintTable[GREAT_FAIRYS_MASK] = HintText::Item({ Text{"a friend of fairies", "a friend of fairies", "a friend of fairies"}}); - hintTable[BREMEN_MASK] = HintText::Item({ Text{"a bird's mask", "a bird's mask", "a bird's mask"}}); - hintTable[DON_GEROS_MASK] = HintText::Item({ Text{"a conductor's mask", "a conductor's mask", "a conductor's mask"}}); - hintTable[MASK_OF_SCENTS] = HintText::Item({ Text{"a pig's mask", "a pig's mask", "a pig's mask"}}); - hintTable[ROMANIS_MASK] = HintText::Item({ Text{"a cow's mask", "a cow's mask", "a cow's mask"}}); - hintTable[CIRCUS_LEADERS_MASK] = HintText::Item({ Text{"a mask of sadness", "a mask of sadness", "a mask of sadness"}}); - hintTable[KAFEIS_MASK] = HintText::Item({ Text{"the mask of a missing one", "the mask of a missing one", "the mask of a missing one"}}); - hintTable[COUPLES_MASK] = HintText::Item({ Text{"the mark of a couple", "the mark of a couple", "the mark of a couple"}}); - hintTable[KAMAROS_MASK] = HintText::Item({ Text{"dance moves", "dance moves", "dance moves"}}); - hintTable[GIBDOS_MASK] = HintText::Item({ Text{"a mask of monsters", "a mask of monsters", "a mask of monsters"}}); - hintTable[GAROS_MASK] = HintText::Item({ Text{"the mask of spies", "the mask of spies", "the mask of spies"}}); - hintTable[CAPTAINS_HAT] = HintText::Item({ Text{"a commanding presence", "a commanding presence", "a commanding presence"}}); - 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"}}); - 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"}}); + hintTable[PICTOGRAPH_BOX] = HintText::Item({ + //obscure + Text{"a capture device", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Picto Box", "**FRENCH**", "**SPANISH**"} + ); + hintTable[POWDER_KEG] = HintText::Item({ + //obscure + Text{"an explosive barrel", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Powder Keg", "**FRENCH**", "**SPANISH**"} + ); + hintTable[KEATON_MASK] = HintText::Item({ + //obscure + Text{"a popular mask", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Keaton Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BUNNY_HOOD] = HintText::Item({ + //obscure + Text{"the ears of the wild", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Bunny Hood", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GORON_MASK] = HintText::Item({ + //obscure + Text{"a mountain spirit", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Goron Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ZORA_MASK] = HintText::Item({ + //obscure + Text{"an ocean spirit", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Zora Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[DEKU_MASK] = HintText::Item({ + //obscure + Text{"a forest spirit", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Deku Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[POSTMANS_HAT] = HintText::Item({ + //obscure + Text{"a hard worker's hat", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Postman's Hat", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ALL_NIGHT_MASK] = HintText::Item({ + //obscure + Text{"insomnia", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the All-Night Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BLAST_MASK] = HintText::Item({ + //obscure + Text{"a dangerous mask", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Blast Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[STONE_MASK] = HintText::Item({ + //obscure + Text{"inconspicousness", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Stone Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GREAT_FAIRYS_MASK] = HintText::Item({ + //obscure + Text{"a friend of fairies", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Great Fairy's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BREMEN_MASK] = HintText::Item({ + //obscure + Text{"a bird's mask", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Bremen Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[DON_GEROS_MASK] = HintText::Item({ + //obscure + Text{"a conductor's mask", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Don Gero's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[MASK_OF_SCENTS] = HintText::Item({ + //obscure + Text{"a pig's mask", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Mask of Scents", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ROMANIS_MASK] = HintText::Item({ + //obscure + Text{"a cow's mask", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Romani's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[CIRCUS_LEADERS_MASK] = HintText::Item({ + //obscure + Text{"a mask of sadness", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Troupe Leader's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[KAFEIS_MASK] = HintText::Item({ + //obscure + Text{"the mask of a missing one", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Kafei's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[COUPLES_MASK] = HintText::Item({ + //obscure + Text{"the mark of a couple", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Couple's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[KAMAROS_MASK] = HintText::Item({ + //obscure + Text{"dance moves", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Kamaro's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GIBDOS_MASK] = HintText::Item({ + //obscure + Text{"a mask of monsters", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Gibdo Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GAROS_MASK] = HintText::Item({ + //obscure + Text{"the mask of spies", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Garo's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[CAPTAINS_HAT] = HintText::Item({ + //obscure + Text{"a commanding presence", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Captain's Hat", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GIANTS_MASK] = HintText::Item({ + //obscure + Text{"a growth spur", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Giant's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[FIERCE_DEITY_MASK] = HintText::Item({ + //obscure + Text{"the wrath of a god", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Fierce Deity's Mask", "**FRENCH**", "**SPANISH**"} + ); + hintTable[MASK_OF_TRUTH] = HintText::Item({ + //obscure + Text{"a piercing gaze", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Mask of Truth", "**FRENCH**", "**SPANISH**"} + ); + hintTable[FISHING_PASS] = HintText::Item({ + //obscure + Text{"a fishing pass", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Fishing Pass", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ICE_TRAP] = HintText::Item({ + //obscure + Text{"a frosty surprise", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"an Ice Trap", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ZORA_EGG] = HintText::Item({ + //obscure + Text{"a zora egg", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Zora Egg", "**FRENCH**", "**SPANISH**"} + ); //SKULLTULA TOKENS - hintTable[SWAMP_SKULLTULA_TOKEN] = 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[SWAMP_SKULLTULA_TOKEN] = HintText::Item({ + //obscure + Text{"a golden token", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Swamp Skulltula Token", "**FRENCH**", "**SPANISH**"} + ); + hintTable[OCEANSIDE_SKULLTULA_TOKEN] = HintText::Item({ + //obscure + Text{"a golden token", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"an Oceanside Skulltula Token", "**FRENCH**", "**SPANISH**"} + ); //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[SH_STRAY_FAIRY] = 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[ST_STRAY_FAIRY] = HintText::Item({ Text{"a lost fairy", "a lost fairy", "a lost fairy"} }); + hintTable[CT_STRAY_FAIRY] = HintText::Item({ + //obscure + Text{"a lost fairy", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Clock Town Stray Fairy", "**FRENCH**", "**SPANISH**"} + ); + hintTable[WF_STRAY_FAIRY] = HintText::Item({ + //obscure + Text{"a lost fairy", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Woodfall Stray Fairy", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SH_STRAY_FAIRY] = HintText::Item({ + //obscure + Text{"a lost fairy", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Snowhead Stray Fairy", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GBT_STRAY_FAIRY] = HintText::Item({ + //obscure + Text{"a lost fairy", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Great Bay Stray Fairy", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ST_STRAY_FAIRY] = HintText::Item({ + //obscure + Text{"a lost fairy", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Stone Tower Stray Fairy", "**FRENCH**", "**SPANISH**"} + ); //PROGRESSIVE ITEMS (unused currently) - 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", "", ""} }); + hintTable[PROGRESSIVE_SWORD] = HintText::Item({ + //obscure + Text{"a progressive sword", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a progressive sword", "**FRENCH**", "**SPANISH**"} + ); + hintTable[PROGRESSIVE_BOMB_BAG] = HintText::Item({ + //obscure + Text{"a progressive bomb bag", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a progressive bomb bag", "**FRENCH**", "**SPANISH**"} + ); + hintTable[PROGRESSIVE_BOW] = HintText::Item({ + //obscure + Text{"a progressive bow", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a progressive quiver", "**FRENCH**", "**SPANISH**"} + ); + hintTable[PROGRESSIVE_WALLET] = HintText::Item({ + //obscure + Text{"a progressive wallet", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a progressive wallet", "**FRENCH**", "**SPANISH**"} + ); + hintTable[PROGRESSIVE_MAGIC_METER] = HintText::Item({ + //obscure + Text{"progressive magic meter", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a progressive magic power", "**FRENCH**", "**SPANISH**"} + ); // PROGRESSIVE_BOMBCHUS, //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"}}); - hintTable[BOTTLE_WITH_RED_POTION] = HintText::Item({ Text{"a vessel of health", "a vessel of health", "a vessel of health"}}); - hintTable[BOTTLE_WITH_GREEN_POTION] = HintText::Item({ Text{"a magic potion", "a magic potion", "a magic potion"}}); - hintTable[BOTTLE_WITH_BLUE_POTION] = HintText::Item({ Text{"a blue drink", "a blue drink","a blue drink"}}); - hintTable[BOTTLE_WITH_FAIRY] = HintText::Item({ Text{"a fairy", "a fairy", "a fairy"}}); - hintTable[BOTTLE_WITH_FISH] = HintText::Item({ Text{"something fresh", "something fresh", "something fresh"}}); - hintTable[CHATEAU_ROMANI] = HintText::Item({ Text{"an adult beverage", "an adult beverage", "an adult beverage"}}); - hintTable[BOTTLE_WITH_BUGS] = HintText::Item({ Text{"an insect", "an insect", "an insect"}}); - hintTable[BOTTLE_WITH_POE] = HintText::Item({ Text{"a captured spirit", "a captured spirit", "a captred spirit"}}); - hintTable[BOTTLE_WITH_BIG_POE] = HintText::Item({ Text{"a large captured spirit", "a large captured spirit", "a large captured spirit"}}); - hintTable[BOTTLE_WITH_HOT_SPRING_WATER] = HintText::Item({ Text{"a hot liquid", "a hot liquid", "a hot liquid"}}); - hintTable[BOTTLE_WITH_SPRING_WATER] = HintText::Item({ Text{"a fresh drink", "a fresh drink", "a fresh drink"}}); - hintTable[DEKU_PRINCESS] = HintText::Item({ Text{"a princes", "a princess","a princess"}}); - hintTable[GOLD_DUST] = HintText::Item({ Text{"a gleaming powder", "a gleaming powder", "a gleaning powder"}}); - 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"}}); + hintTable[EMPTY_BOTTLE] = HintText::Item({ + //obscure + Text{"a glass container", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"an Empty Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[EMPTY_BOTTLE1] = HintText::Item({ + //obscure + Text{"a glass container", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"an Empty Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[EMPTY_BOTTLE2] = HintText::Item({ + //obscure + Text{"a glass container", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"an Empty Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_MILK] = HintText::Item({ + //obscure + Text{"a dairy product", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Milk Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_RED_POTION] = HintText::Item({ + //obscure + Text{"a vessel of health", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Red Potion Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_GREEN_POTION] = HintText::Item({ + //obscure + Text{"a magic potion", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Green Potion Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_BLUE_POTION] = HintText::Item({ + //obscure + Text{"a blue drink", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Blue Potion Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_FAIRY] = HintText::Item({ + //obscure + Text{"a fairy", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Fairy Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_FISH] = HintText::Item({ + //obscure + Text{"something fresh", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Fish Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[CHATEAU_ROMANI] = HintText::Item({ + //obscure + Text{"an adult beverage", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Chateau Romani Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_BUGS] = HintText::Item({ + //obscure + Text{"an insect", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Bug Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_POE] = HintText::Item({ + //obscure + Text{"a captured spirit", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Poe Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_BIG_POE] = HintText::Item({ + //obscure + Text{"a large captured spirit", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Big Poe Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_HOT_SPRING_WATER] = HintText::Item({ + //obscure + Text{"a hot liquid", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Hot Spring Water Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_SPRING_WATER] = HintText::Item({ + //obscure + Text{"a fresh drink", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Spring Water Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[DEKU_PRINCESS] = HintText::Item({ + //obscure + Text{"a princess", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Deku Princess Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GOLD_DUST] = HintText::Item({ + //obscure + Text{"a gleaming powder", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Gold Dust Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_ZORA_EGG] = HintText::Item({ + //obscure + Text{"a lost child", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Zora Egg Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SEAHORSE] = HintText::Item({ + //obscure + Text{"a sea creature", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Seahorse Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_MUSHROOM] = HintText::Item({ + //obscure + Text{"a strange fungus", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Magic Mushroom Bottle", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOTTLE_WITH_MYSTERY_MILK] = HintText::Item({ + //obscure + Text{"a strange drink", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Mystery Milk Bottle", "**FRENCH**", "**SPANISH**"} + ); //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"}}); - hintTable[BOMB_BAG] = HintText::Item({ Text{"a vessel of explosives", "a vessel of explosives", "a vessel of explosives"}}); - hintTable[BIG_BOMB_BAG] = HintText::Item({ Text{"a vessel of explosives", "a vessel of explosives", "a vessel of explosives"}}); - hintTable[BIGGEST_BOMB_BAG] = HintText::Item({ Text{"a vessel of explosives", "a vessel of explosives", "a vessel of explosives"}}); - hintTable[ADULT_WALLET] = HintText::Item({ Text{"a coin purse", "a coin purse", "a coin purse"}}); - hintTable[GIANT_WALLET] = HintText::Item({ Text{"a coin purse", "a coin purse", "a coin purse"}}); - hintTable[MAGIC_POWER] = HintText::Item({ Text{"magic power", "magic power", "magic power"}}); - hintTable[EXTENDED_MAGIC_POWER] = HintText::Item({ Text{"magic power", "magic power", "magic power"}}); + hintTable[LARGE_QUIVER] = HintText::Item({Text{"a ranged weapon", "**FRENCH**", "**SPANISH**"}}); + hintTable[LARGEST_QUIVER] = HintText::Item({Text{"a ranged weapon", "**FRENCH**", "**SPANISH**"}}); + hintTable[BOMB_BAG] = HintText::Item({Text{"a vessel of explosives", "**FRENCH**", "**SPANISH**"}}); + hintTable[BIG_BOMB_BAG] = HintText::Item({Text{"a vessel of explosives", "**FRENCH**", "**SPANISH**"}}); + hintTable[BIGGEST_BOMB_BAG] = HintText::Item({Text{"a vessel of explosives", "**FRENCH**", "**SPANISH**"}}); + hintTable[ADULT_WALLET] = HintText::Item({Text{"a coin purse", "**FRENCH**", "**SPANISH**"}}); + hintTable[GIANT_WALLET] = HintText::Item({Text{"a coin purse", "**FRENCH**", "**SPANISH**"}}); + hintTable[MAGIC_POWER] = HintText::Item({Text{"magic power", "**FRENCH**", "**SPANISH**"}}); + hintTable[EXTENDED_MAGIC_POWER] = HintText::Item({Text{"magic power", "**FRENCH**", "**SPANISH**"}}); //SONGS - //hintTable[SONG_OF_TIME] = HintText::Item({ Text{"song of time", "song of time", "song of time"}}); - hintTable[SONG_OF_STORMS] = HintText::Item({ Text{"stormy weather", "stormy weather", "stormy weather"}}); - hintTable[SONG_OF_HEALING] = HintText::Item({ Text{"a soothing melody", "a soothing melody", "a soothing melody"}}); - hintTable[SONG_OF_SOARING] = HintText::Item({ Text{"white wings", "white wings", "white wings"}}); - //hintTable[SONG_OF_DOUBLE_TIME] = HintText::Item({ Text{"double time", "double time", "double time"}}); - //hintTable[INVERTED_SONG_OF_TIME] = HintText::Item({ Text{"slowed time", "slowed time", "slowed time"}}); - hintTable[EPONAS_SONG] = HintText::Item({ Text{"a horses song", "a horses song", "a horses song"}}); - hintTable[SONATA_OF_AWAKENING] = HintText::Item({ Text{"a royal song", "a royal song", "a royal song"}}); - hintTable[GORONS_LULLABY] = HintText::Item({ Text{"a sleepy melody", "a sleepy melody", "a sleepy melody"}}); - hintTable[NEW_WAVE_BOSSA_NOVA] = HintText::Item({ Text{"a song of newborns", "a song of newborns", "a song of newborns"}}); - hintTable[ELEGY_OF_EMPTINESS] = HintText::Item({ Text{"empty shells", "empty shells", "empty shells"}}); - hintTable[OATH_TO_ORDER] = HintText::Item({ Text{"a song of giants", "a song of giants", "a song of giants"}}); + //hintTable[SONG_OF_TIME] = HintText::Item({Text{"song of time", "**FRENCH**", "**SPANISH**"}}); + hintTable[SONG_OF_STORMS] = HintText::Item({ + //obscure + Text{"stormy weather", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Song of Storms", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SONG_OF_HEALING] = HintText::Item({ + //obscure + Text{"a soothing melody", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Song of Healing", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SONG_OF_SOARING] = HintText::Item({ + //obscure + Text{"white wings", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Song of Soaring", "**FRENCH**", "**SPANISH**"} + ); + //hintTable[SONG_OF_DOUBLE_TIME] = HintText::Item({Text{"double time", "**FRENCH**", "**SPANISH**"}}); + //hintTable[INVERTED_SONG_OF_TIME] = HintText::Item({Text{"slowed time", "**FRENCH**", "**SPANISH**"}}); + hintTable[EPONAS_SONG] = HintText::Item({ + //obscure + Text{"a horses song", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Epona's Song", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SONATA_OF_AWAKENING] = HintText::Item({ + //obscure + Text{"a royal song", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Sonata of Awakening", "**FRENCH**", "**SPANISH**"} + ); + hintTable[LULLABY_INTRO] = HintText::Item({ + //obscure + Text{"a sleepy melody intro", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Lullaby Intro", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GORONS_LULLABY] = HintText::Item({ + //obscure + Text{"a sleepy melody", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Goron's Lullaby", "**FRENCH**", "**SPANISH**"} + ); + hintTable[NEW_WAVE_BOSSA_NOVA] = HintText::Item({ + //obscure + Text{"a song of newborns", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the New Wave Bossa Nova", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ELEGY_OF_EMPTINESS] = HintText::Item({ + //obscure + Text{"empty shells", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Elegy of Emptiness", "**FRENCH**", "**SPANISH**"} + ); + hintTable[OATH_TO_ORDER] = HintText::Item({ + //obscure + Text{"a song of giants", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Oath to Order", "**FRENCH**", "**SPANISH**"} + ); //PIECES OF HEART - hintTable[PIECE_OF_HEART] = 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"}}); + hintTable[PIECE_OF_HEART] = HintText::Item({ + //obscure + Text{"a segment of health", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Piece of Heart", "**FRENCH**", "**SPANISH**"} + ); + hintTable[HEART_CONTAINER] = HintText::Item({ + //obscure + Text{"a new heart", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Heart Container", "**FRENCH**", "**SPANISH**"} + ); //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"} }); - hintTable[SNOWHEAD_TEMPLE_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); - hintTable[GBT_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); - hintTable[STONE_TOWER_TEMPLE_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); - hintTable[CLOCK_TOWN_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); - hintTable[WOODFALL_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); - hintTable[SNOWHEAD_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); - hintTable[GREAT_BAY_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); - hintTable[STONE_TOWER_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); - hintTable[ROMANI_RANCH_MAP] = HintText::Item({ Text{"a paper guide", "a paper guide", "a paper guide"} }); + //hintTable[MAP] = HintText::Item({Text{"a paper guide", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_TEMPLE_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Woodfall Temple Map", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SNOWHEAD_TEMPLE_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Snowhead Temple Map", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GBT_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Great Bay Temple Map", "**FRENCH**", "**SPANISH**"} + ); + hintTable[STONE_TOWER_TEMPLE_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Stone Tower Temple Map", "**FRENCH**", "**SPANISH**"} + ); + hintTable[CLOCK_TOWN_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Clock Town Map", "**FRENCH**", "**SPANISH**"} + ); + hintTable[WOODFALL_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Woodfall Map", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SNOWHEAD_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Snowhead Map", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GREAT_BAY_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Great Bay Map", "**FRENCH**", "**SPANISH**"} + ); + hintTable[STONE_TOWER_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Stone Tower Map", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ROMANI_RANCH_MAP] = HintText::Item({ + //obscure + Text{"a paper guide", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Romani Ranch Map", "**FRENCH**", "**SPANISH**"} + ); //COMPASSES - hintTable[COMPASS] = HintText::Item({ Text{"a magnetic needle", "a magnetic needle", "a magnetic needle"} }); - hintTable[WOODFALL_TEMPLE_COMPASS] = HintText::Item({ Text{"a magnetic needle", "a magnetic needle", "a magnetic needle"} }); - hintTable[SNOWHEAD_TEMPLE_COMPASS] = HintText::Item({ Text{"a magnetic needle", "a magnetic needle", "a magnetic needle"} }); - hintTable[GBT_COMPASS] = HintText::Item({ Text{"a magnetic needle", "a magnetic needle", "a magnetic needle"} }); - hintTable[STONE_TOWER_TEMPLE_COMPASS] = HintText::Item({ Text{"a magnetic needle", "a magnetic needle", "a magnetic needle"} }); + //hintTable[COMPASS] = HintText::Item({Text{"a magnetic needle", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_TEMPLE_COMPASS] = HintText::Item({ + //obscure + Text{"a magnetic needle", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Woodfall Temple Compass", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SNOWHEAD_TEMPLE_COMPASS] = HintText::Item({ + //obscure + Text{"a magnetic needle", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Snowhead Temple Compass", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GBT_COMPASS] = HintText::Item({ + //obscure + Text{"a magnetic needle", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Great Bay Temple Compass", "**FRENCH**", "**SPANISH**"} + ); + hintTable[STONE_TOWER_TEMPLE_COMPASS] = HintText::Item({ + //obscure + Text{"a magnetic needle", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Stone Tower Temple Compass", "**FRENCH**", "**SPANISH**"} + ); //BOSSKEYS - hintTable[BOSS_KEY] = HintText::Item({ Text{"an important key", "an important key", "an important key"} }); - hintTable[WOODFALL_TEMPLE_BOSS_KEY] = HintText::Item({ Text{"an important key", "an important key", "an important key"} }); - hintTable[SNOWHEAD_TEMPLE_BOSS_KEY] = HintText::Item({ Text{"an important key", "an important key", "an important key"} }); - hintTable[GBT_BOSS_KEY] = HintText::Item({ Text{"an important key", "an important key", "an important key"} }); - hintTable[STONE_TOWER_TEMPLE_BOSS_KEY] = HintText::Item({ Text{"an important key", "an important key", "an important key"} }); + //hintTable[BOSS_KEY] = HintText::Item({Text{"an important key", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_TEMPLE_BOSS_KEY] = HintText::Item({ + //obscure + Text{"an important key", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Woodfall Temple Boss Key", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SNOWHEAD_TEMPLE_BOSS_KEY] = HintText::Item({ + //obscure + Text{"an important key", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Snowhead Temple Boss Key", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GBT_BOSS_KEY] = HintText::Item({ + //obscure + Text{"an important key", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Great Bay Temple Boss Key", "**FRENCH**", "**SPANISH**"} + ); + hintTable[STONE_TOWER_TEMPLE_BOSS_KEY] = HintText::Item({ + //obscure + Text{"an important key", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Stone Tower Temple Boss Key", "**FRENCH**", "**SPANISH**"} + ); //SMALLKEYS - hintTable[SMALL_KEY] = HintText::Item({ Text{"a useful key", "a useful key", "a useful key"} }); - 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", "", ""}}); + //hintTable[SMALL_KEY] = HintText::Item({Text{"a useful key", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_TEMPLE_SMALL_KEY] = HintText::Item({ + //obscure + Text{"swampy small key", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Woodfall Temple Small Key", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SNOWHEAD_TEMPLE_SMALL_KEY] = HintText::Item({ + //obscure + Text{"icy small key", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Snowhead Temple Small Key", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GBT_SMALL_KEY] = HintText::Item({ + //obscure + Text{"ocean small key", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Great Bay Temple Small Key", "**FRENCH**", "**SPANISH**"} + ); + hintTable[STONE_TOWER_TEMPLE_SMALL_KEY] = HintText::Item({ + //obscure + Text{"rocky small key", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Stone Tower Temple Small Key", "**FRENCH**", "**SPANISH**"} + ); //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"} }); + hintTable[ODOLWAS_REMAINS] = HintText::Item({ + //obscure + Text{"a boss's remains", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Odolwa's Remains", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GOHTS_REMAINS] = HintText::Item({ + //obscure + Text{"a boss's remains", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Goht's Remains", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GYORGS_REMAINS] = HintText::Item({ + //obscure + Text{"a boss's remains", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Gyorg's Remains", "**FRENCH**", "**SPANISH**"} + ); + hintTable[TWINMOLDS_REMAINS] = HintText::Item({ + //obscure + Text{"a boss's remains", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Twinmold's Remains", "**FRENCH**", "**SPANISH**"} + ); /*----------------------- | 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", "",""}}); + hintTable[RECOVERY_HEART] = HintText::Item({ + //obscure + Text{"Recovery Heart", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Recovery Heart", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GREEN_RUPEE] = HintText::Item({ + //obscure + Text{"Green rupee", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Green Rupee", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BLUE_RUPEE] = HintText::Item({ + //obscure + Text{"Blue rupee", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Blue Rupee", "**FRENCH**", "**SPANISH**"} + ); + hintTable[RED_RUPEE] = HintText::Item({ + //obscure + Text{"Red rupee", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Red Rupee", "**FRENCH**", "**SPANISH**"} + ); + hintTable[PURPLE_RUPEE] = HintText::Item({ + //obscure + Text{"Purple rupee", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Purple Rupee", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SILVER_RUPEE] = HintText::Item({ + //obscure + Text{"Silver rupee", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Silver Rupee", "**FRENCH**", "**SPANISH**"} + ); + hintTable[HUGE_RUPEE] = HintText::Item({ + //obscure + Text{"Huge rupee", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Huge Rupee", "**FRENCH**", "**SPANISH**"} + ); + hintTable[DEKU_NUTS_5] = HintText::Item({ + //obscure + Text{"5 nuts", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Deku Nuts (5 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[DEKU_NUTS_10] = HintText::Item({ + //obscure + Text{"10 nuts", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Deku Nuts (10 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOMBS_5] = HintText::Item({ + //obscure + Text{"5 explosive orbs", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Bombs (5 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOMBS_10] = HintText::Item({ + //obscure + Text{"10 explosive orbs", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Bombs (10 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOMBS_20] = HintText::Item({ + //obscure + Text{"20 explosive orbs", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Bombs (20 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOMBCHU_5] = HintText::Item({ + //obscure + Text{"5 explosive mice", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Bombchu (5 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOMBCHU_10] = HintText::Item({ + //obscure + Text{"10 explosive mice", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Bombchu (10 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOMBCHU_20] = HintText::Item({ + //obscure + Text{"20 explosive mice", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Bombchu (20 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ARROWS_10] = HintText::Item({ + //obscure + Text{"10 projectile sticks", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Arrow (10 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ARROWS_30] = HintText::Item({ + //obscure + Text{"30 projectile sticks", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Arrow (30 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ARROWS_40] = HintText::Item({ + //obscure + Text{"40 projectile sticks", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Arrow (40 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[ARROWS_50] = HintText::Item({ + //obscure + Text{"50 projectile sticks", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Arrow (50 pieces)", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BLUE_POTION_REFILL] = HintText::Item({ + //obscure + Text{"Blue Potion Refill", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"some Blue Potion", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GREEN_POTION_REFILL] = HintText::Item({ + //obscure + Text{"Green Potion Refill", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"some Green Potion", "**FRENCH**", "**SPANISH**"} + ); + hintTable[RED_POTION_REFILL] = HintText::Item({ + //obscure + Text{"Red Potion Refill", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"some Red Potion", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BOMBCHU_DROP] = HintText::Item({ + //obscure + Text{"explosive mice", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"some Bombchu", "**FRENCH**", "**SPANISH**"} + ); + hintTable[DEKU_STICK_1] = HintText::Item({ + //obscure + Text{"1 stick", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"a Deku Stick", "**FRENCH**", "**SPANISH**"} + ); /*---------------- | 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","",""}}); + hintTable[BUY_ARROWS_10] = HintText::Item({Text{"Buy 10 Arrows", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_ARROWS_30] = HintText::Item({Text{"Buy 30 Arrows", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_BLUE_POTION] = HintText::Item({Text{"Buy Blue Potion", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_BOMBCHU_10] = HintText::Item({Text{"Buy 10 Bombchu", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_BOMBS_10] = HintText::Item({Text{"Buy 10 Bombs", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_DEKU_NUT_10] = HintText::Item({Text{"Buy 10 Deku Nuts", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_DEKU_STICK_1] = HintText::Item({Text{"Buy 1 Deku Stick", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_FAIRYS_SPIRIT] = HintText::Item({Text{"Buy Fairy", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_GREEN_POTION] = HintText::Item({Text{"Buy Green Potion", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_HEROS_SHIELD] = HintText::Item({Text{"Buy Hero Shield", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_MAGIC_BEAN] = HintText::Item({Text{"Buy Magic Bean", "**FRENCH**", "**SPANISH**"}}); + hintTable[BUY_RED_POTION] = HintText::Item({Text{"Buy Red Potion", "**FRENCH**", "**SPANISH**"}}); /*----------------------- | 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"}}); + hintTable[CLOCK_TOWER_OCARINA_OF_TIME] = HintText::Sometimes({ + Text{"A Musical Instrument", "**FRENCH**", "**SPANISH**"}}); + hintTable[HMS_DEKU_MASK] = HintText::Sometimes({ + Text{"a forest curse removed rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[HMS_SONG_OF_HEALING] = HintText::Sometimes({ + Text{"a masked man's melody teaches", "**FRENCH**", "**SPANISH**"}}); + hintTable[HMS_BOMBERS_NOTEBOOK] = HintText::Sometimes({ + Text{"a masked man's gift rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[HMS_STARTING_SWORD] = HintText::Sometimes({ + Text{"a new file yields", "**FRENCH**", "**SPANISH**"}}); + hintTable[HMS_STARTING_SHIELD] = HintText::Sometimes({ + Text{"a new file yields", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[DEKU_PALACE_BEAN_SELLER] = HintText::Sometimes({ + Text{"a gorging merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[DEKU_PALACE_WEST_GARDEN] = HintText::Sometimes({ + Text{"the home of scrubs contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[DEKU_PALACE_BUTLER_RACE] = HintText::Sometimes({ + Text{"the royal servant rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[DEKU_PALACE_BEAN_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a merchant's cave contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[DEKU_PALACE_IMPRISONED_MONKEY] = HintText::Sometimes({ + Text{"a false imprisonment teaches", "**FRENCH**", "**SPANISH**"}}); //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{"", "", ""}}); + hintTable[E_CLOCK_TOWN_AROMA_IN_BAR] = HintText::Sometimes({ + Text{"an important lady rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_ARCHERY_1] = HintText::Sometimes({ + Text{"a town activity rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_ARCHERY_2] = HintText::Sometimes({ + Text{"a town activity rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_MAYOR] = HintText::Sometimes({ + Text{"a town leader rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_HONEY_DARLING_3DAYS] = HintText::Sometimes({ + Text{"a lovers game rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_GORON] = HintText::Sometimes({ + Text{"a treasure game rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_POSTMAN_FREEDOM] = HintText::Sometimes({ + Text{"a delivery person rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_GORMAN] = HintText::Sometimes({ + Text{"a miserable leader rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_AROMA_IN_OFFICE] = HintText::Sometimes({ + Text{"an important lady rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[BOMBERS_HIDEOUT_CHEST] = HintText::Sometimes({ + Text{"a secret hideout contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_CHEST] = HintText::Sometimes({ + Text{"a shop roof contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN_POSTBOX] = HintText::Sometimes({ + Text{"a correspondence box contains", "**FRENCH**", "**SPANISH**"}}); + //hintTable[E_CLOCK_TOWN_MILK_BAR_CHATEAU] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + //hintTable[E_CLOCK_TOWN_MILK_BAR_MILK] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORMAN_TRACK_MYSTERY_MILK_QUEST] = HintText::Sometimes({ + Text{"an upset stomach cure rewards", "**FRENCH**", "**SPANISH**"}}); + //hintTable[E_CLOCK_TOWN_HONEY_DARLING_ANY_DAY] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + //hintTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_HUMAN] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + //hintTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_ZORA] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + //hintTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_DEKU] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); //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_POWDER_KEG_CHALLENGE_SPRING] = HintText::Sometimes({ Text{"a large goron rewards", "", ""}}); - hintTable[GORON_VILLAGE_SCRUB_PURCHASE_SPRING] = HintText::Sometimes({ Text{"a northern merchant sells", "", ""}}); - hintTable[GORON_VILLAGE_SCRUB_TRADE_SPRING] = HintText::Sometimes({ Text{"a northern merchant trades", "", ""}}); - hintTable[GORON_VILLAGE_LEDGE_SPRING] = HintText::Sometimes({ Text{"a cold ledge contains", "", ""}}); - hintTable[GORON_VILLAGE_GORON_LULLABY] = HintText::Sometimes({ Text{"a lonely child teaches", "", ""}}); - hintTable[LENS_CAVE_RED_RUPEE] = HintText::Sometimes({ Text{"a lonely peak contains", "", ""}}); - hintTable[LENS_CAVE_PURPLE_RUPEE] = HintText::Sometimes({ Text{"a lonely peak contains", "", ""}}); - 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", "", ""}}); + hintTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE] = HintText::Sometimes({ + Text{"a large goron rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_SCRUB_PURCHASE] = HintText::Sometimes({ + Text{"a northern merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_LENS_OF_TRUTH_CHEST] = HintText::Sometimes({ + Text{"a lonely peak contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_SCRUB_TRADE] = HintText::Sometimes({ + Text{"a northern merchant trades", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_LEDGE] = HintText::Sometimes({ + Text{"a cold ledge contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING] = HintText::Sometimes({ + Text{"a large goron rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_SCRUB_PURCHASE_SPRING] = HintText::Sometimes({ + Text{"a northern merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_SCRUB_TRADE_SPRING] = HintText::Sometimes({ + Text{"a northern merchant trades", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_LEDGE_SPRING] = HintText::Sometimes({ + Text{"a cold ledge contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_GORON_LULLABY] = HintText::Sometimes({ + Text{"a lonely child teaches", "**FRENCH**", "**SPANISH**"}}); + hintTable[LENS_CAVE_RED_RUPEE] = HintText::Sometimes({ + Text{"a lonely peak contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[LENS_CAVE_PURPLE_RUPEE] = HintText::Sometimes({ + Text{"a lonely peak contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_SHOP_ITEM_1] = HintText::Sometimes({ + Text{"a goron shop sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_SHOP_ITEM_2] = HintText::Sometimes({ + Text{"a goron shop sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_SHOP_ITEM_3] = HintText::Sometimes({ + Text{"a goron shop sells", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[GBC_OCEAN_SPIDER_DAY1] = HintText::Sometimes({ + Text{"a new ocean home owner rewards", "**FRENCH**", "**SPANISH**"}}); + //hintTable[GBC_OCEAN_SPIDER_DAY2] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + //hintTable[GBC_OCEAN_SPIDER_DAY3] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_FISHERMAN_GAME] = HintText::Sometimes({ + Text{"an ocean game rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_OCEAN_SPIDER_CHEST] = HintText::Sometimes({ + Text{"the colored masks contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_LAB_FISH] = HintText::Sometimes({ + Text{"feeding the fish rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_LEDGE] = HintText::Sometimes({ + Text{"an ocean ledge contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_MIKAU] = HintText::Sometimes({ + Text{"a healed spirit rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_BABY_ZORAS] = HintText::Sometimes({ + Text{"the pirates' loot teaches", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_GROTTO_CHEST] = HintText::Sometimes({ + Text{"an ocean cave contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_GROTTO_COW1] = HintText::Sometimes({ + Text{"a lost creature gives", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_GROTTO_COW2] = HintText::Sometimes({ + Text{"a lost creature gives", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBC_FISHERMAN_PHOTO] = HintText::Sometimes({ + Text{"a fisherman rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_GBC_GB] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_GBC_ST] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[IKANA_CANYON_GREAT_FAIRY] = HintText::Sometimes({ + Text{"the fairy of kindness rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_POE_HUT_HP] = HintText::Sometimes({ + Text{"a game of ghosts rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_LEDGE] = HintText::Sometimes({ + Text{"a canyon ledge contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_PAMELAS_FATHER] = HintText::Sometimes({ + Text{"a lost father rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_SECRET_SHRINE_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a waterfall cave contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_SCRUB_TRADE] = HintText::Sometimes({ + Text{"an eastern merchant trades", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_SCRUB_PURCHASE] = HintText::Sometimes({ + Text{"an eastern merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_IKANA_CANYON_ST] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_IKANA_CANYON_CT] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[IKANA_GRAVEYARD_DAMPE_DIGGING] = HintText::Sometimes({ + Text{"a fearful basement contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_IRON_KNUCKLE_CHEST] = HintText::Sometimes({ + Text{"a hollow ground contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_CAPTAIN_KEETA_CHEST] = HintText::Sometimes({ + Text{"a skeletal leader rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_DAY_ONE_GRAVE_TABLET] = HintText::Sometimes({ + Text{"a hollow ground teaches", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_DAY_ONE_GRAVE_BATS] = HintText::Sometimes({ + Text{"a cloud of bats contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a circled cave contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[LAUNDRY_POOL_KAFEI] = HintText::Sometimes({ + Text{"a posted letter rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE] = HintText::Sometimes({ + Text{"a shady dealer rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO] = HintText::Sometimes({ + Text{"a shady dealer rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[LAUNDRY_POOL_GURU_GURU] = HintText::Sometimes({ + Text{"a musician gives", "**FRENCH**", "**SPANISH**"}}); + hintTable[LAUNDRY_POOL_SF] = HintText::Sometimes({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[MILK_ROAD_GORMAN_RACE] = HintText::Sometimes({ + Text{"a sporting event rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[MILK_ROAD_GORMAN_MILK_BUY] = HintText::Sometimes({ + Text{"a dodgy seller sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[MILK_ROAD_KEATON_QUIZ] = HintText::Sometimes({ + Text{"a mysterious fox rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_MILK_ROAD_RR] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_MILK_ROAD_GB] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[MOUNTAIN_VILLAGE_SMITH_DAY_ONE] = HintText::Sometimes({ + Text{"a moutain smith crafts", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_VILLAGE_SMITH_DAY_TWO] = HintText::Sometimes({ + Text{"a mountain smith crafts", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_VILLAGE_FROG_CHOIR] = HintText::Sometimes({ + Text{"a frog choir rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_VILLAGE_KEATON_QUIZ] = HintText::Sometimes({ + Text{"a mysterious fox rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_VILLAGE_DARMANI] = HintText::Sometimes({ + Text{"a mountain spirit rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_VILLAGE_HUNGRY_GORON] = HintText::Sometimes({ + Text{"a hungry goron rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_WATERFALL_CHEST] = HintText::Sometimes({ + Text{"a springtime waterfall contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_VILLAGE_SPRING_WATER_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a springtime cave contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[N_CLOCK_TOWN_GREAT_FAIRY_DEKU] = HintText::Sometimes({ + Text{"the fairy of magic rewards", "**FRENCH**", "**SPANISH**"}}); + //hintTable[N_CLOCK_TOWN_BOMBERS_HIDE_SEEK] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); doesn't give an item in 3d + hintTable[N_CLOCK_TOWN_KEATON_QUIZ] = HintText::Sometimes({ + Text{"a mysterious fox rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[N_CLOCK_TOWN_DEKU_PLAYGROUND_3DAYS] = HintText::Sometimes({ + Text{"a game for scrubs rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[N_CLOCK_TOWN_TREE] = HintText::Sometimes({ + Text{"a town playground contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[N_CLOCK_TOWN_OLD_LADY] = HintText::Sometimes({ + Text{"an old lady's struggle rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[N_CLOCK_TOWN_GREAT_FAIRY_HUMAN] = HintText::Sometimes({ + Text{"the fairy of magi rewardsc", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_N_CLOCK_TOWN_CT] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_N_CLOCK_TOWN_WF] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[N_CLOCK_TOWN_POSTBOX] = HintText::Sometimes({ + Text{"a correspondence box contains", "**FRENCH**", "**SPANISH**"}}); + //hintTable[N_CLOCK_TOWN_DEKU_PLAYGROUND_ADAY] = HintText::Sometimes({Text{"a game for scrubs", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[ROAD_TO_SNOWHEAD_PILLAR] = HintText::Sometimes({ + Text{"a cold platform contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_SNOWHEAD_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a snowy cave contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[PINNACLE_ROCK_SEAHORSES] = HintText::Sometimes({ + Text{"a fishy reunion rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[PINNACLE_ROCK_UPPER_CHEST] = HintText::Sometimes({ + Text{"a marine trench contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PINNACLE_ROCK_LOWER_CHEST] = HintText::Sometimes({ + Text{"a marine trench contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PINNACLE_ROCK_ZORA_EGG1] = HintText::Sometimes({ + Text{"in a marine trench rests", "**FRENCH**", "**SPANISH**"}}); + hintTable[PINNACLE_ROCK_ZORA_EGG2] = HintText::Sometimes({ + Text{"in a marine trench rests", "**FRENCH**", "**SPANISH**"}}); + hintTable[PINNACLE_ROCK_ZORA_EGG3] = HintText::Sometimes({ + Text{"in a marine trench rests", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[ROAD_TO_IKANA_PILLAR_CHEST] = HintText::Sometimes({ + Text{"a high chest contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_IKANA_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a blocked cave contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[ROAD_TO_SS_ARCHERY_1] = HintText::Sometimes({ + Text{"a swamp game rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_SS_ARCHERY_2] = HintText::Sometimes({ + Text{"a swamp game rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_SS_TREE] = HintText::Sometimes({ + Text{"a batty tree contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_SWAMP_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a southern cave contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_ROAD_TO_SS_WF] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_ROAD_TO_SS_SH] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[ROMANI_RANCH_ALIEN_DEFENSE] = HintText::Sometimes({ + Text{"a ranch invasion rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH_DOG_RACE] = HintText::Sometimes({ + Text{"a sporting event rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH_GROG] = HintText::Sometimes({ + Text{"a chicken lover rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH_CREMIA_ESCORT] = HintText::Sometimes({ + Text{"an older sister rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH_ROMANIS_GAME] = HintText::Sometimes({ + Text{"an equine reunion teaches", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH_COW_1] = HintText::Sometimes({ + Text{"a lost creature gives", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH_COW_2] = HintText::Sometimes({ + Text{"a lost creature gives", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH_COW_3] = HintText::Sometimes({ + Text{"a lost creature gives", "**FRENCH**", "**SPANISH**"}}); + hintTable[DOGGY_RACETRACK_ROOF_CHEST] = HintText::Sometimes({ + Text{"a day at the races contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[S_CLOCK_TOWN_SCRUB_TRADE] = HintText::Sometimes({ + Text{"a town merchant trades", "**FRENCH**", "**SPANISH**"}}); + hintTable[S_CLOCK_TOWN_POSTBOX] = HintText::Sometimes({ + Text{"a correspondence box contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[S_CLOCK_TOWN_CLOCK_TOWER_ENTRANCE] = HintText::Sometimes({ + Text{"the tower doors contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[S_CLOCK_TOWN_STRAW_ROOF_CHEST] = HintText::Sometimes({ + Text{"a straw roof contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[S_CLOCK_TOWN_FINAL_DAY_CHEST] = HintText::Sometimes({ + Text{"a carnival tower contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[S_CLOCK_TOWN_BANK_REWARD_1] = HintText::Sometimes({ + Text{"a keeper of wealth rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[S_CLOCK_TOWN_BANK_REWARD_2] = HintText::Sometimes({ + Text{"interest rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[S_CLOCK_TOWN_BANK_REWARD_3] = HintText::Sometimes({ + Text{"being rich rewards", "**FRENCH**", "**SPANISH**"}}); //Snowhead - hintTable[SNOWHEAD_GREAT_FAIRY] = HintText::Sometimes({Text{"the fairy of power rewards", "", ""}}); + hintTable[SNOWHEAD_GREAT_FAIRY] = HintText::Sometimes({ + Text{"the fairy of power rewards", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[SOUTHERN_SWAMP_KOUME] = HintText::Sometimes({ + Text{"a witch rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_KOTAKE] = HintText::Sometimes({ + Text{"a sleeping witch rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_KOTAKE_IN_WOODS] = HintText::Sometimes({ + Text{"a witch rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_SCRUB_TRADE] = HintText::Sometimes({ + Text{"a southern merchant trades", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_PICTOGRAPH_WINNER] = HintText::Sometimes({ + Text{"a swamp game rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_BOAT_ARCHERY] = HintText::Sometimes({ + Text{"a swamp game rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[SWAMP_TOURIST_CENTER_ROOF] = HintText::Sometimes({ + Text{"a tourist center contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_NEAR_SPIDER_HOUSE_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a swampy cave contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_SPIDER_HOUSE_REWARD] = HintText::Sometimes({ + Text{"a swamp spider man rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_MYSTERY_WOODS_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a mystery cave contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_KOTAKE_MUSHROOM_SALE] = HintText::Sometimes({ + Text{"a sleeping witch rewards", "**FRENCH**", "**SPANISH**"}}); + //hintTable[SOUTHERN_SWAMP_PICTOGRAPH_STANDARD] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + //hintTable[SOUTHERN_SWAMP_PICTOGRAPH_GOOD] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_SCRUB_PURCHASE] = HintText::Sometimes({ + Text{"a southern merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_SCRUB_PURCHASE_CLEAR] = HintText::Sometimes({ + Text{"a southern merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR] = HintText::Sometimes({ + Text{"a southern merchant trades", "**FRENCH**", "**SPANISH**"}}); + hintTable[SWAMP_TOURIST_CENTER_ROOF_CLEAR] = HintText::Sometimes({ + Text{"a tourist center contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[POTION_SHOP_ITEM_1] = HintText::Sometimes({ + Text{"a potion maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[POTION_SHOP_ITEM_2] = HintText::Sometimes({ + Text{"a potion maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[POTION_SHOP_ITEM_3] = HintText::Sometimes({ + Text{"a potion maker sells", "**FRENCH**", "**SPANISH**"}}); +//Stock Pot Inn + hintTable[STOCKPOTINN_RESERVATION] = HintText::Sometimes({ + Text{"checking-in rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_MIDNIGHT_MEETING] = HintText::Sometimes({ + Text{"a late meeting rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_TOILET_HAND] = HintText::Sometimes({ + Text{"a strange palm rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_GRANDMA_SHORT_STORY] = HintText::Sometimes({ + Text{"an old lady rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_GRANDMA_LONG_STORY] = HintText::Sometimes({ + Text{"an old lady rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_ANJU_AND_KAFEI] = HintText::Sometimes({ + Text{"a lovers' reunion rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_STAFF_ROOM_CHEST] = HintText::Sometimes({ + Text{"an employee room contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_GUEST_ROOM_CHEST] = HintText::Sometimes({ + Text{"a guest bedroom contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[STONE_TOWER_INVERTED_RIGHT_CHEST] = HintText::Sometimes({ + Text{"a sky below contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_INVERTED_CENTER_CHEST] = HintText::Sometimes({ + Text{"a sky below contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_INVERTED_LEFT_CHEST] = HintText::Sometimes({ + Text{"a sky below contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[TERMINA_FIELD_MOONS_TEAR] = HintText::Sometimes({ + Text{"a falling star contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_GOSSIP_STONES] = HintText::Sometimes({ + Text{"mysterious stones reward", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_BUSINESS_SCRUB] = HintText::Sometimes({ + Text{"a hidden merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_PEAHAT_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a hollow ground contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_DODONGO_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a hollow ground contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_BIO_BABA_GROTTO_BEEHIVE] = HintText::Sometimes({ + Text{"a beehive contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_KAMARO] = HintText::Sometimes({ + Text{"a dancer rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_PILLAR_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a hollow pillar contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_GRASS_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a grassy cave contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_UNDERWATER_CHEST] = HintText::Sometimes({ + Text{"a sunken chest contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_GRASS_CHEST] = HintText::Sometimes({ + Text{"a grassy chest contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_STUMP_CHEST] = HintText::Sometimes({ + Text{"a tree chest contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_GROTTO_COW1] = HintText::Sometimes({ + Text{"a lost creature gives", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_GROTTO_COW2] = HintText::Sometimes({ + Text{"a lost creature gibes", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[HOT_SPRING_WATER_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a steamy grotto contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWIN_ISLANDS_GORON_RACE] = HintText::Sometimes({ + Text{"a sporting event rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWIN_ISLANDS_GORON_RACETRACK_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a hidden cave contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWIN_ISLANDS_UNDERWATER_RAMP_CHEST] = HintText::Sometimes({ + Text{"a spring treasure contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWIN_ISLANDS_CAVE_CHEST] = HintText::Sometimes({ + Text{"a sunken springtime treasure contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWIN_ISLANDS_LULLABY_INTRO] = HintText::Sometimes({ + Text{"a goron elder teaches", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_TWIN_ISLANDS_SH] = HintText::Sometimes({ + Text{"a map maker sells ", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_TWIN_ISLANDS_RR] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_TWIN_ISLANDS_SH_SPRING] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TINGLE_TWIN_ISLANDS_RR_SPRING] = HintText::Sometimes({ + Text{"a map maker sells", "**FRENCH**", "**SPANISH**"}}); //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_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", "", ""}}); + hintTable[W_CLOCK_TOWN_BOMB_BAG_BUY] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[W_CLOCK_TOWN_BIG_BOMB_BAG_BUY] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[W_CLOCK_TOWN_POSTMANS_GAME] = HintText::Sometimes({ + Text{"a delivery person rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[W_CLOCK_TOWN_ROSA_SISTERS] = HintText::Sometimes({ + Text{"traveling sisters reward", "**FRENCH**", "**SPANISH**"}}); + hintTable[W_CLOCK_TOWN_SWORDSMANS_SCHOOL] = HintText::Sometimes({ + Text{"a town game rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY] = HintText::Sometimes({ + Text{"a shady town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[W_CLOCK_TOWN_BOMB_SHOP_GORON] = HintText::Sometimes({ + Text{"a town goron merchant sells", "**FRENCH**", "**SPANISH**"}}); + //hintTable[W_CLOCK_TOWN_LOTTERY] = HintText::Sometimes({Text{"**ENGLISH**", "**FRENCH**", "**SPANISH**"}}); + hintTable[TRADING_POST_ITEM_1] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TRADING_POST_ITEM_2] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TRADING_POST_ITEM_3] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TRADING_POST_ITEM_4] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TRADING_POST_ITEM_5] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TRADING_POST_ITEM_6] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TRADING_POST_ITEM_7] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[TRADING_POST_ITEM_8] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[BOMB_SHOP_ITEM_1] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[BOMB_SHOP_ITEM_2] = HintText::Sometimes({ + Text{"a town merchant sells", "**FRENCH**", "**SPANISH**"}}); + //hintTable[BOMB_SHOP_ITEM_3] = HintText::Sometimes({Text{"a town merchant", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[WOODFALL_BRIDGE_CHEST] = HintText::Sometimes({ + Text{"a swamp chest contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_BEHIND_OWL_CHEST] = HintText::Sometimes({ + Text{"a swamp chest contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ENTRANCE_TO_WOODFALL_CHEST] = HintText::Sometimes({ + Text{"a swamp chest contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_GREAT_FAIRY] = HintText::Sometimes({ + Text{"the fairy of wisdom rewards", "**FRENCH**", "**SPANISH**"}}); //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 ", "", ""}}); + hintTable[ZORA_CAPE_GREAT_FAIRY] = HintText::Sometimes({ + Text{"the fairy of courage rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_CAPE_BEAVER_RACE_1] = HintText::Sometimes({ + Text{"a river dweller rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_CAPE_BEAVER_RACE_2] = HintText::Sometimes({ + Text{"a river dweller rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_CAPE_LIKE_LIKE] = HintText::Sometimes({ + Text{"a shield eater contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_CAPE_LEDGE_NO_TREE] = HintText::Sometimes({ + Text{"a high place contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_CAPE_LEDGE_WITH_TREE] = HintText::Sometimes({ + Text{"a high place contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_CAPE_GROTTO_CHEST] = HintText::Sometimes({ + Text{"a beach cave contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_CAPE_UNDERWATER_CHEST] = HintText::Sometimes({ + Text{"a sunken chest contains ", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[ZORA_HALL_SCRUB_TRADE] = HintText::Sometimes({ + Text{"a western merchant trades", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL_EVAN] = HintText::Sometimes({ + Text{"a musician rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL_LULU_ROOM_LEDGE] = HintText::Sometimes({ + Text{"the singer's room contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL_SCRUB_PURCHASE] = HintText::Sometimes({ + Text{"a western merchant sells", "**FRENCH**", "**SPANISH**"}}); + //hintTable[ZORA_HALL_STAGE_LIGHTS] = HintText::Sometimes({Text{"a fan", "**FRENCH**", "**SPANISH**"}}); + //hintTable[ZORA_HALL_BAD_PHOTO_LULU] = HintText::Sometimes({Text{"a fan", "**FRENCH**", "**SPANISH**"}}); + //hintTable[ZORA_HALL_GOOD_PHOTO_LULU] = HintText::Sometimes({Text{"a fan", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_SHOP_ITEM_1] = HintText::Sometimes({ + Text{"a zora merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_SHOP_ITEM_2] = HintText::Sometimes({ + Text{"a zora merchant sells", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_SHOP_ITEM_3] = HintText::Sometimes({ + Text{"a zora merchant sells", "**FRENCH**", "**SPANISH**"}}); /*------------------------- | 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", "", ""}}); + hintTable[WOODFALL_TEMPLE_HEROS_BOW_CHEST] = HintText::Exclude({ + Text{"the sleeping temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_TEMPLE_MAP_CHEST] = HintText::Exclude({ + Text{"the sleeping temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_TEMPLE_COMPASS_CHEST] = HintText::Exclude({ + Text{"the sleeping temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_TEMPLE_BOSS_KEY_CHEST] = HintText::Exclude({ + Text{"the sleeping temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_TEMPLE_SMALL_KEY_CHEST] = HintText::Exclude({ + Text{"the sleeping temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_TEMPLE_DEKU_PRINCESS] = HintText::Exclude({ + Text{"the sleeping temple rewards", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_ENTRANCE_FAIRY] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_ENTRANCE_PLATFORM] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_MAIN_ROOM_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_MAIN_ROOM_SWITCH] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_PRE_BOSS_LOWER_RIGHT_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_PRE_BOSS_UPPER_RIGHT_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_PRE_BOSS_UPPER_LEFT_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_PRE_BOSS_PILLAR_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_DEKU_BABA] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_DRAGONFLY_ROOM_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_SKULLTULA] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_DARK_ROOM] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_JAR_FAIRY] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_BRIDGE_ROOM_BEEHIVE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[WF_SF_PLATFORM_ROOM_BEEHIVE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ODOLWA_HEART_CONTAINER] = HintText::Exclude({ + Text{"a masked evil contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[SNOWHEAD_TEMPLE_FIRE_ARROW_CHEST] = HintText::Exclude({ + Text{"an icy temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SNOWHEAD_TEMPLE_MAP_CHEST] = HintText::Exclude({ + Text{"an icy temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SNOWHEAD_TEMPLE_COMPASS_CHEST] = HintText::Exclude({ + Text{"an icy temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SNOWHEAD_TEMPLE_BOSS_KEY_CHEST] = HintText::Exclude({ + Text{"an icy temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SNOWHEAD_TEMPLE_BLOCK_ROOM_CHEST] = HintText::Exclude({ + Text{"an icy temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SNOWHEAD_TEMPLE_ICICLE_ROOM_CHEST] = HintText::Exclude({ + Text{"an icy temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SNOWHEAD_TEMPLE_BRIDGE_ROOM_CHEST] = HintText::Exclude({ + Text{"an icy temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_SNOW_ROOM_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_CEILING_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_DINOLFOS_1] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_DINOLFOS_2] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_BRIDGE_ROOM_LEDGE_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_BRIDGE_ROOM_PILLAR_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_MAP_ROOM_FAIRY] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_MAP_ROOM_LEDGE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_BASEMENT] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_TWIN_BLOCK] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_ICICLE_ROOM_WALL] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_MAIN_ROOM_WALL] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_PILLAR_FREEZARDS] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_ICE_PUZZLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SH_SF_CRATE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GOHT_HEART_CONTAINER] = HintText::Exclude({ + Text{"a masked evil contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[GBT_ICE_ARROW_CHEST] = HintText::Exclude({ + Text{"the murky watered temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_MAP_CHEST] = HintText::Exclude({ + Text{"the murky watered temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_COMPASS_CHEST] = HintText::Exclude({ + Text{"the murky watered temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_BOSS_KEY_CHEST] = HintText::Exclude({ + Text{"the murky watered temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SMALL_KEY_CHEST] = HintText::Exclude({ + Text{"the murky watered temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_SKULLTULA] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_WATER_CONTROL_UNDERWATER_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_WATERWHEEL_ROOM_LOWER] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_WATERWHEEL_ROOM_UPPER] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_GREEN_VALVE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_SEESAW_ROOM] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_ENTRANCE_TORCHES] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_BIO_BABAS] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_UNDERWATER_BARREL] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_WHIRLPOOL_BARREL] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_WHIRLPOOL_JAR] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_DEXIHANDS_JAR] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_LEDGE_JAR] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_PRE_BOSS_ROOM_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GBT_SF_PRE_BOSS_ROOM_UNDERWATER_BUBBLE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[GYORG_HEART_CONTAINER] = HintText::Exclude({ + Text{"a masked evil contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[STONE_TOWER_TEMPLE_MAP_CHEST] = HintText::Exclude({ + Text{"a rocky temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_TEMPLE_COMPASS_CHEST] = HintText::Exclude({ + Text{"a rocky temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_TEMPLE_BOSS_KEY_CHEST] = HintText::Exclude({ + Text{"a rocky temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_TEMPLE_ARMOS_ROOM_CHEST] = HintText::Exclude({ + Text{"a rocky temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_TEMPLE_BRIDGE_SWITCH_CHEST] = HintText::Exclude({ + Text{"a rocky temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_TEMPLE_UPDRAFT_ROOM_CHEST] = HintText::Exclude({ + Text{"a rocky temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM_CHEST] = HintText::Exclude({ + Text{"a rocky temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST] = HintText::Exclude({ + Text{"a rocky temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST] = HintText::Exclude({ + Text{"a rocky temple contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_MIRROR_SUN_BLOCK] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_LAVA_ROOM_LEDGE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_LAVA_ROOM_FIRE_RING] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_EYEGORE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_UPDRAFT_FIRE_RING] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_MIRROR_SUN_SWITCH] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_BOSS_WARP] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_WIZZROBE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_DEATH_ARMOS] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_UPDRAFT_FROZEN_EYE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_THIN_BRIDGE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_BASEMENT_LEDGE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_STATUE_EYE] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_UNDERWATER] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[ST_SF_BRIDGE_CRYSTAL] = HintText::Exclude({ + Text{"a lost fairy is", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWINMOLD_HEART_CONTAINER] = HintText::Exclude({ + Text{"a masked evil contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[PF_INTERIOR_HOOKSHOT_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_INT_LOWER_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_INT_UPPER_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_INT_TANK_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_INT_GUARD_ROOM_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_CAGE_ROOM_SHALLOW_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_CAGE_ROOM_DEEP_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_MAZE_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_SEWER_CAGE] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_EXTERIOR_LOG_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_EXTERIOR_SAND_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_EXTERIOR_CORNER_CHEST] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_INT_INVISIBLE_SOLDIER] = HintText::Exclude({ + Text{"the home of pirates contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_INT_HOOKSHOT_ROOM_ZORA_EGG] = HintText::Exclude({ + Text{"in the home of pirates rests", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_INT_GUARD_ROOM_ZORA_EGG] = HintText::Exclude({ + Text{"in the home of pirates rests", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_INT_BARREL_MAZE_ZORA_EGG] = HintText::Exclude({ + Text{"in the home of pirates rests", "**FRENCH**", "**SPANISH**"}}); + hintTable[PF_INT_LAVA_ROOM_ZORA_EGG] = HintText::Exclude({ + Text{"in the home of pirates rests", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[BENEATH_THE_WELL_MIRROR_SHIELD_CHEST] = HintText::Exclude({ + Text{"a frightful exchange contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[WELL_LEFT_PATH_CHEST] = HintText::Exclude({ + Text{"a frightful exchange contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[WELL_RIGHT_PATH_CHEST] = HintText::Exclude({ + Text{"a frightful exchange contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[BENEATH_THE_WELL_COW] = HintText::Exclude({ + Text{"a lost creature contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[IKANA_CASTLE_PILLAR] = HintText::Exclude({ + Text{"a fiery pilar contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CASTLE_IKANA_KING] = HintText::Exclude({ + Text{"a fallen king teaches", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[SECRET_SHRINE_DINOLFOS_CHEST] = HintText::Exclude({ + Text{"a secret place contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SECRET_SHRINE_WIZZROBE_CHEST] = HintText::Exclude({ + Text{"a secret place contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SECRET_SHRINE_WART_CHEST] = HintText::Exclude({ + Text{"a secret place contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SECRET_SHRINE_GARO_CHEST] = HintText::Exclude({ + Text{"a secret place contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[SECRET_SHRINE_FINAL_CHEST] = HintText::Exclude({ + Text{"a secret place contains", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[THE_MOON_DEKU_TRIAL_BONUS] = HintText::Exclude({ + Text{"a masked child's game contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[THE_MOON_GORON_TRIAL_BONUS] = HintText::Exclude({ + Text{"a masked child's game contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[THE_MOON_ZORA_TRIAL_BONUS] = HintText::Exclude({ + Text{"a masked child's game contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[THE_MOON_LINK_TRIAL_BONUS] = HintText::Exclude({ + Text{"a masked child's game contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[THE_MOON_GARO_CHEST] = HintText::Exclude({ + Text{"a masked child's game contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[THE_MOON_IRON_KNUCKLE_CHEST] = HintText::Exclude({ + Text{"a masked child's game contains", "**FRENCH**", "**SPANISH**"}}); + hintTable[THE_MOON_MAJORA_CHILD] = HintText::Exclude({ + Text{"the lonely child rewards", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[SSH_MAIN_ROOM_NEAR_CEILING] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MAIN_ROOM_WATER] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MAIN_ROOM_LOWER_LEFT_SOIL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MAIN_ROOM_LOWER_RIGHT_SOIL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MAIN_ROOM_UPPER_SOIL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MAIN_ROOM_PILLAR] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MAIN_ROOM_UPPER_PILLAR] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MAIN_ROOM_JAR] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MONUMENT_ROOM_CRATE_1] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MONUMENT_ROOM_CRATE_2] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MONUMENT_ROOM_TORCH] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MONUMENT_ROOM_ON_MONUMENT] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_MONUMENT_ROOM_LOWER_WALL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_GOLD_ROOM_NEAR_CEILING] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_GOLD_ROOM_PILLAR] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_GOLD_ROOM_BEEHIVE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_GOLD_ROOM_WALL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_POT_ROOM_JAR] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_POT_ROOM_POT_1] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_POT_ROOM_POT_2] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_POT_ROOM_BEHIND_VINES] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_POT_ROOM_WALL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_POT_ROOM_BEEHIVE_1] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_POT_ROOM_BEEHIVE_2] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_TREE_ROOM_TREE_1] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_TREE_ROOM_TREE_2] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_TREE_ROOM_TREE_3] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_TREE_ROOM_GRASS_1] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_TREE_ROOM_GRASS_2] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[SSH_TREE_ROOM_BEEHIVE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); //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", "", ""}}); + hintTable[OSH_ENTRANCE_LEFT_WALL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_ENTRANCE_RIGHT_WALL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_ENTRANCE_WEB] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_LIBRARY_HOLE_BEHIND_PICTURE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_LIBRARY_HOLE_BEHIND_CABINET] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_LIBRARY_ON_CORNER_BOOKSHELF] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_LIBRARY_CEILING_EDGE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_LIBRARY_BEHIND_BOOKCASE_1] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_LIBRARY_BEHIND_BOOKCASE_2] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_LIBRARY_BEHIND_PICTURE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_SECOND_ROOM_CEILING_EDGE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_SECOND_ROOM_CEILING_PLANK] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_SECOND_ROOM_JAR] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_SECOND_ROOM_WEBBED_HOLE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_SECOND_ROOM_WEBBED_POT] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_SECOND_ROOM_UPPER_POT] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_SECOND_ROOM_BEHIND_SKULL_1] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_SECOND_ROOM_BEHIND_SKULL_2] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_SECOND_ROOM_LOWER_POT] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_STORAGE_ROOM_CEILING_WEB] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_STORAGE_ROOM_BEHIND_CRATE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_STORAGE_ROOM_WALL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_STORAGE_ROOM_CRATE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_STORAGE_ROOM_BARREL] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_COLORED_SKULLS_CEILING_EDGE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_COLORED_SKULLS_CHANDELIER_1] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_COLORED_SKULLS_CHANDELIER_2] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_COLORED_SKULLS_CHANDELIER_3] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_COLORED_SKULLS_BEHIND_PICTURE] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); + hintTable[OSH_COLORED_SKULLS_POT] = HintText::Exclude({ + Text{"a gold spider is", "**FRENCH**", "**SPANISH**"}}); /*---------------------- | 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", "", ""}}); + hintTable[N_CLOCK_TOWN] = HintText::Region({ Text{"N Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_FAIRY_FOUNTAIN] = HintText::Region({Text{"Clock Town Fairy Fountain", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_DEKU_PLAYGROUND] = HintText::Region({Text{"Deku Playground", "**FRENCH**", "**SPANISH**"}}); + hintTable[E_CLOCK_TOWN] = HintText::Region({Text{"E Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN] = HintText::Region({Text{"Stock Pot Inn", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_GUEST_ROOM] = HintText::Region({Text{"Stock Pot Inn", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_STAFF_ROOM] = HintText::Region({Text{"Stock Pot Inn", "**FRENCH**", "**SPANISH**"}}); + hintTable[STOCKPOTINN_GRANDMA_ROOM] = HintText::Region({Text{"Stock Pot Inn", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_OBSERVATORY] = HintText::Region({Text{"Observatory", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_BAR] = HintText::Region({Text{"Milk Bar", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_HONEY_DARLING] = HintText::Region({Text{"E Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_TREASURE_CHEST_GAME] = HintText::Region({Text{"E Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_ARCHERY] = HintText::Region({Text{"E Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_MAYOR_HOUSE] = HintText::Region({Text{"E Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[W_CLOCK_TOWN] = HintText::Region({Text{"W Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_SWORDSMANS_SCHOOL] = HintText::Region({Text{"W Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_POSTMAN_HOUSE] = HintText::Region({Text{"W Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_LOTTERY] = HintText::Region({Text{"W Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_BOMB_SHOP] = HintText::Region({Text{"W Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_TRADING_POST] = HintText::Region({Text{"W Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWN_CURIOSITY_SHOP] = HintText::Region({Text{"W Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[S_CLOCK_TOWN] = HintText::Region({Text{"S Clock Town", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWER] = HintText::Region({Text{"Clock Tower", "**FRENCH**", "**SPANISH**"}}); + hintTable[CLOCK_TOWER_ROOF] = HintText::Region({Text{"Clock Tower Roof", "**FRENCH**", "**SPANISH**"}}); + hintTable[LAUNDRY_POOL] = HintText::Region({Text{"Laundry Pool", "**FRENCH**", "**SPANISH**"}}); + hintTable[LAUNDRY_POOL_KAFEI_HIDEOUT] = HintText::Region({Text{"Laundry Pool", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD] = HintText::Region({Text{"Termina Field", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_PEAHAT_GROTTO] = HintText::Region({Text{"Termina Field", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_DODONGO_GROTTO] = HintText::Region({Text{"Termina Field", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_BIO_BABA_GROTTO] = HintText::Region({Text{"Termina Field", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_PILLAR_GROTTO] = HintText::Region({Text{"Termina Field", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_GRASS_GROTTO] = HintText::Region({Text{"Termina Field", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_BUSINESS_SCRUB_GROTTO] = HintText::Region({Text{"Termina Field", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_COW_GROTTO] = HintText::Region({Text{"Termina Field", "**FRENCH**", "**SPANISH**"}}); + hintTable[TERMINA_FIELD_GOSSIP_STONES_GROTTO] = HintText::Region({Text{"Termina Field", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_SOUTHERN_SWAMP] = HintText::Region({Text{"Road to Southern Swamp", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_SOUTHERN_SWAMP_ARCHERY] = HintText::Region({Text{"Road to Southern Swamp", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_SWAMP_GROTTO] = HintText::Region({Text{"Road to Southern Swamp", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP] = HintText::Region({Text{"Southern Swamp", "**FRENCH**", "**SPANISH**"}}); + hintTable[SWAMP_TOURIST_CENTER] = HintText::Region({Text{"Southern Swamp", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_HAGS_POTION_SHOP] = HintText::Region({Text{"Southern Swamp", "**FRENCH**", "**SPANISH**"}}); + hintTable[MYSTERY_WOODS] = HintText::Region({Text{"Mystery Woods", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_MYSTERY_WOODS_GROTTO] = HintText::Region({Text{"Mystery Woods", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_NEAR_SPIDER_HOUSE_GROTTO] = HintText::Region({Text{"Southern Swamp", "**FRENCH**", "**SPANISH**"}}); + hintTable[SOUTHERN_SWAMP_TOP] = HintText::Region({Text{"Southern Swamp", "**FRENCH**", "**SPANISH**"}}); + hintTable[DEKU_PALACE] = HintText::Region({Text{"Deku Palace", "**FRENCH**", "**SPANISH**"}}); + hintTable[DEKU_PALACE_INTERIOR] = HintText::Region({Text{"Deku Palace", "**FRENCH**", "**SPANISH**"}}); + hintTable[DEKU_PALACE_BEAN_GROTTO] = HintText::Region({Text{"Deku Palace", "**FRENCH**", "**SPANISH**"}}); + hintTable[DEKU_SHRINE] = HintText::Region({Text{"Deku Palace", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL] = HintText::Region({Text{"Woodfall", "**FRENCH**", "**SPANISH**"}}); + hintTable[WOODFALL_FAIRY_FOUNTAIN] = HintText::Region({Text{"Woodfall Fairy Foutain", "**FRENCH**", "**SPANISH**"}}); + hintTable[PATH_TO_MOUNTAIN_VILLAGE] = HintText::Region({Text{"Path to Mountain Vilage", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_VILLAGE] = HintText::Region({Text{"Mountain Village", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_GRAVEYARD] = HintText::Region({Text{"Goron Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_SMITHY] = HintText::Region({Text{"Mountain Village", "**FRENCH**", "**SPANISH**"}}); + hintTable[MOUNTAIN_VILLAGE_SPRING_WATER_GROTTO] = HintText::Region({Text{"Mountain Village", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWIN_ISLANDS] = HintText::Region({Text{"Twin Islands", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_RACETRACK] = HintText::Region({Text{"Goron Racetrack", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWIN_ISLANDS_GORON_RACETRACK_GROTTO] = HintText::Region({Text{"Twin Islands", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWIN_ISLANDS_SPRING_WATER_GROTTO] = HintText::Region({Text{"Twin Islands", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE] = HintText::Region({Text{"Goron Village", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_LENS_CAVE] = HintText::Region({Text{"Goron Village", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_INTERIOR] = HintText::Region({Text{"Goron Village", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORON_VILLAGE_SHOP] = HintText::Region({Text{"Goron Village", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_SNOWHEAD] = HintText::Region({Text{"Road to Snowhead", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_SNOWHEAD_GROTTO] = HintText::Region({Text{"Road to Snowhead", "**FRENCH**", "**SPANISH**"}}); + hintTable[SNOWHEAD] = HintText::Region({Text{"Snowhead", "**FRENCH**", "**SPANISH**"}}); + hintTable[SNOWHEAD_FAIRY_FOUNTAIN] = HintText::Region({Text{"Snowhead Fairy Fountain", "**FRENCH**", "**SPANISH**"}}); + hintTable[MILK_ROAD] = HintText::Region({Text{"Milk Road", "**FRENCH**", "**SPANISH**"}}); + hintTable[GORMAN_TRACK] = HintText::Region({Text{"Gorman Track", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH] = HintText::Region({Text{"Romani Ranch", "**FRENCH**", "**SPANISH**"}}); + hintTable[DOGGY_RACETRACK] = HintText::Region({Text{"Romani Ranch", "**FRENCH**", "**SPANISH**"}}); + hintTable[CUCCO_SHACK] = HintText::Region({Text{"Romani Ranch", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH_HOUSE] = HintText::Region({Text{"Romani Ranch", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROMANI_RANCH_BARN] = HintText::Region({Text{"Romani Ranch", "**FRENCH**", "**SPANISH**"}}); + hintTable[GREAT_BAY_COAST] = HintText::Region({Text{"Great Bay Coast", "**FRENCH**", "**SPANISH**"}}); + hintTable[GREAT_BAY_COAST_MARINE_LAB] = HintText::Region({Text{"Great Bay Coast", "**FRENCH**", "**SPANISH**"}}); + hintTable[GREAT_BAY_COAST_GROTTO] = HintText::Region({Text{"Great Bay Coast", "**FRENCH**", "**SPANISH**"}}); + hintTable[GREAT_BAY_COAST_COW_GROTTO] = HintText::Region({Text{"Great Bay Coast", "**FRENCH**", "**SPANISH**"}}); + hintTable[FISHERMAN_HUT] = HintText::Region({Text{"Great Bay Coast", "**FRENCH**", "**SPANISH**"}}); + hintTable[PINNACLE_ROCK] = HintText::Region({Text{"Pinnacle Rock", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_CAPE] = HintText::Region({Text{"Zora Cape", "**FRENCH**", "**SPANISH**"}}); + hintTable[WATERFALL_RAPIDS] = HintText::Region({Text{"Zora Cape", "**FRENCH**", "**SPANISH**"}}); + hintTable[GREAT_BAY_FAIRY_FOUNTAIN] = HintText::Region({Text{"Zora Cape Fairy Fountain", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_CAPE_GROTTO] = HintText::Region({Text{"Zora Cape", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL] = HintText::Region({Text{"Zora Hall", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL_EVANS_ROOM] = HintText::Region({Text{"Zora Hall", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL_LULUS_ROOM] = HintText::Region({Text{"Zora Hall", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL_JAPAS_ROOM] = HintText::Region({Text{"Zora Hall", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL_TIJOS_ROOM] = HintText::Region({Text{"Zora Hall", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL_SHOP] = HintText::Region({Text{"Zora Hall", "**FRENCH**", "**SPANISH**"}}); + hintTable[ZORA_HALL_BACK_ENTRANCE] = HintText::Region({Text{"Zora Hall", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_IKANA] = HintText::Region({Text{"Road to Ikana", "**FRENCH**", "**SPANISH**"}}); + hintTable[ROAD_TO_IKANA_GROTTO] = HintText::Region({Text{"Road to Ikana", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_GROTTO] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_BELOW_GRAVE1] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_BATS_ROOM] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_TABLET_ROOM] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_BELOW_GRAVE2] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_PRE_IRON_KNUCKLE_ROOM] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_IRON_KNUCKLE_ROOM] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_GRAVEYARD_BELOW_GRAVE3] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[DAMPES_HUT] = HintText::Region({Text{"Ikana Graveyard", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON] = HintText::Region({Text{"Ikana Canyon", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_UPPER] = HintText::Region({Text{"Ikana Canyon", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_CAVE] = HintText::Region({Text{"Ikana Canyon", "**FRENCH**", "**SPANISH**"}}); + hintTable[SAKONS_HIDEOUT] = HintText::Region({Text{"Ikana Canyon", "**FRENCH**", "**SPANISH**"}}); + hintTable[MUSIC_BOX_HOUSE] = HintText::Region({Text{"Ikana Canyon", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_POE_HUT] = HintText::Region({Text{"Ikana Canyon", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_GREAT_FAIRY_FOUNTAIN] = HintText::Region({Text{"Ikana Canyon Fairy Foutain", "**FRENCH**", "**SPANISH**"}}); + hintTable[IKANA_CANYON_SECRET_SHRINE_GROTTO] = HintText::Region({Text{"Ikana Canyon", "**FRENCH**", "**SPANISH**"}}); + hintTable[STONE_TOWER] = HintText::Region({Text{"Stone Tower", "**FRENCH**", "**SPANISH**"}}); + hintTable[INVERTED_STONE_TOWER] = HintText::Region({Text{"Stone Tower", "**FRENCH**", "**SPANISH**"}}); + /*--------------------- | 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.", "", ""}}); + hintTable[JUNK01] = HintText::Junk({Text{"That's no moon.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK02] = HintText::Junk({Text{"The moon is haunted.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK03] = HintText::Junk({Text{"Majora has sick dance moves.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK04] = HintText::Junk({Text{"Making hints is hard.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK05] = HintText::Junk({Text{"May the way of the Hero lead to the Triforce.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK06] = HintText::Junk({Text{"They say that the final item you're looking for can be found somewhere in Termina.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK07] = HintText::Junk({Text{"They say that 85 percent of statistics are made up", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK08] = HintText::Junk({Text{"They say the golden dog is picked as the winner most often", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK09] = HintText::Junk({Text{"Be patient young grasshopper", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK10] = HintText::Junk({Text{"The Ikana King used to be quite handsome", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK11] = HintText::Junk({Text{"If the Goron Elder is frozen how does he move each day", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK12] = HintText::Junk({Text{"The Owl's feathers lead the way", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK13] = HintText::Junk({Text{"The Happy Mask Salesman doesn't sleep", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK14] = HintText::Junk({Text{"why do they call it oven when you of in the cold food of out hot eat the food", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK15] = HintText::Junk({Text{"It seems Link has difficulties remembering music without the help of a fairy.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK16] = HintText::Junk({Text{"Pickle.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK17] = HintText::Junk({Text{"Why is it called The Legend of Zelda Majora's Mask when Zelda isn't here?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK18] = HintText::Junk({Text{"They say you can find the Star Fox cast in your mask inventory screen.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK19] = HintText::Junk({Text{"They say #L# is Real 2401.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK20] = HintText::Junk({Text{"They say #The Moon# blinks if you stare long enough", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK21] = HintText::Junk({Text{"They say bunnies have a really good sense of time.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK22] = HintText::Junk({Text{"They say this game has a method of infinitely jumping.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK23] = HintText::Junk({Text{"According to all known laws of aviation there is no way a Zora should be able to fly.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK24] = HintText::Junk({Text{"Why is Zelda green?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK25] = HintText::Junk({Text{"Did you know for the first time in 23 years, in 2023 Waluigi didn't star in a game?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK26] = HintText::Junk({Text{"Here's a hint, @. Don't be bad.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK27] = HintText::Junk({Text{"They say this randomizer actually took longer to develop than the original Majora's Mask.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK28] = HintText::Junk({Text{"They say pirates are allergic to #bees#.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK29] = HintText::Junk({Text{"Ocean man, take me by the hand.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK30] = HintText::Junk({Text{"Special shoutouts to ennopp who plays piano during this cutscene", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK31] = HintText::Junk({Text{"Did you know it's actually surprisingly easy to mod a 3DS?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK32] = HintText::Junk({Text{"Zora eggs are quite delicious.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK33] = HintText::Junk({Text{"Zabora and Gabora have gotten better at making swords that stay sharp.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK34] = HintText::Junk({Text{"They say Tacoman369 has never defeated Majora.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK35] = HintText::Junk({Text{"L2P @.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK36] = HintText::Junk({Text{"They say the #Majora's Mask 3D Randomizer# developers are cool people.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK37] = HintText::Junk({Text{"Also try #Ocarina of Time 3D Randomizer#!", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK38] = HintText::Junk({Text{"The single rupee is a unique item.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK39] = HintText::Junk({Text{"Hey, listen!", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK40] = HintText::Junk({Text{"They say even the Hero of Time can't help everyone.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK41] = HintText::Junk({Text{"The dirt around here tastes really good.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK42] = HintText::Junk({Text{"Talk to me again for the best hint.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK43] = HintText::Junk({Text{"They say Gorons discovered a method of space travel.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK44] = HintText::Junk({Text{"I AM ERROR", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK45] = HintText::Junk({Text{"Real 3DS ZELDA players use motion controls.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK46] = HintText::Junk({Text{"Real ZELDA players use HOLD targeting.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK47] = HintText::Junk({Text{"They say items are random...", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK48] = HintText::Junk({Text{"Dear Mario, please come to the castle. I've baked a cake for you. Yours truly, Princess Toadstool, Peach", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK49] = HintText::Junk({Text{"They say the key to victory is beating the game...", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK50] = HintText::Junk({Text{"They say the gold dog cheats.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK51] = HintText::Junk({Text{"They say @ drowned.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK52] = HintText::Junk({Text{"Goodbye then.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK53] = HintText::Junk({Text{"You've met with a terrible hint, haven't you?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK54] = HintText::Junk({Text{"I'm stoned. Get it?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK55] = HintText::Junk({Text{"One who doesn't have all the masks will not get a #special reward#", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK56] = HintText::Junk({Text{"They say the #blue dog# will win a race some day...", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK57] = HintText::Junk({Text{"Remember to check your 3DS battery level and save often.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK58] = HintText::Junk({Text{"Just be a rock.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK59] = HintText::Junk({Text{"I can't feel my legs!", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK60] = HintText::Junk({Text{"What are you staring at?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK61] = HintText::Junk({Text{"Glitches are a pathway to many abilities some consider to be... Unnatural.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK62] = HintText::Junk({Text{"You ever just feel like smashing that $ button?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK63] = HintText::Junk({Text{"I think the Mask of Truth has it's uses!", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK64] = HintText::Junk({Text{"There's a lot of eyes here, isn't there?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK65] = HintText::Junk({Text{"I think that #large object in the sky# hasn't moved in a few days.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK66] = HintText::Junk({Text{"Watch out for that #large object in the sky!#", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK67] = HintText::Junk({Text{"#Tingle Tingle Kooloo Limpah!#", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK68] = HintText::Junk({Text{"They say if you have three specific items, you can zoom across Termina.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK69] = HintText::Junk({Text{"They say the powder keg can remain fairly elusive.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK70] = HintText::Junk({Text{"It's pretty cold here, would you mind warming me up, @?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK71] = HintText::Junk({Text{"These hints can be quite useful. This is an exception.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK72] = HintText::Junk({Text{"Turns are more effective when you tilt the whole console.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK73] = HintText::Junk({Text{"You ever been in a cockpit before?", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK74] = HintText::Junk({Text{"It's a secret to everybody", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK75] = HintText::Junk({Text{"You found me!", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK76] = HintText::Junk({Text{"I have it on my post-it note somewhere.", "**FRENCH**", "**SPANISH**"}}); + hintTable[JUNK77] = HintText::Junk({Text{"Follow the rainbow.", "**FRENCH**", "**SPANISH**"}}); /*------------------------ | 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"}}); + hintTable[WOODFALL_TEMPLE] = HintText::DungeonName({ + //obscure + Text{"the sleeping temple", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Woodfall Temple", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SNOWHEAD_TEMPLE] = HintText::DungeonName({ + //obscure + Text{"an icy temple", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Snowhead Temple", "**FRENCH**", "**SPANISH**"} + ); + hintTable[GREAT_BAY_TEMPLE] = HintText::DungeonName({ + //obscure + Text{"the murky watered temple", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Great Bay Temple", "**FRENCH**", "**SPANISH**"} + ); + hintTable[STONE_TOWER_TEMPLE] = HintText::DungeonName({ + //obscure + Text{"a rocky temple", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Stone Tower Temple", "**FRENCH**", "**SPANISH**"} + ); + hintTable[PIRATE_FORTRESS] = HintText::DungeonName({ + //obscure + Text{"the home of pirates", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Pirates' Fortress", "**FRENCH**", "**SPANISH**"} + ); + hintTable[BENEATH_THE_WELL] = HintText::DungeonName({ + //obscure + Text{"an empty watering hole", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"Beneath the Well", "**FRENCH**", "**SPANISH**"} + ); + hintTable[IKANA_CASTLE] = HintText::DungeonName({ + //obscure + Text{"a fallen castle", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Ancient Castle of Ikana", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SECRET_SHRINE] = HintText::DungeonName({ + //obscure + Text{"a mini boss run area", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Secret Shrine", "**FRENCH**", "**SPANISH**"} + ); + hintTable[SSH] = HintText::DungeonName({ + //obscure + Text{"a home to muddy spiders", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Swamp Spider House", "**FRENCH**", "**SPANISH**"} + ); + hintTable[OSH] = HintText::DungeonName({ + //obscure + Text{"a home To swimming spiders", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Ocean Spider House", "**FRENCH**", "**SPANISH**"} + ); + hintTable[THE_MOON] = HintText::DungeonName({ + //obscure + Text{"a dungeon out of this world", "**FRENCH**", "**SPANISH**"} + }, + //clear + Text{"the Moon", "**FRENCH**", "**SPANISH**"} + ); /*----------------------- | 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"}}); + hintTable[ODOLWA] = HintText::Boss({Text{"a masked jungle warrior", "**FRENCH**", "**SPANISH**"}}); + hintTable[GOHT] = HintText::Boss({Text{"a masked mechanical monster", "**FRENCH**", "**SPANISH**"}}); + hintTable[GYORG] = HintText::Boss({Text{"a gargantuan masked fish", "**FRENCH**", "**SPANISH**"}}); + hintTable[TWINMOLD] = HintText::Boss({Text{"a giant masked insect", "**FRENCH**", "**SPANISH**"}}); + hintTable[MAJORA] = HintText::Boss({Text{"a cursed mask", "**FRENCH**", "**SPANISH**"}}); } diff --git a/source/hints.cpp b/source/hints.cpp index fd4a304..5f232e7 100644 --- a/source/hints.cpp +++ b/source/hints.cpp @@ -151,7 +151,7 @@ static std::vector GetAccessibleGossipStones(const LocationKey hint auto accessibleGossipStones = GetAccessibleLocations(gossipStoneLocations); //Give the item back to the location Location(hintedLocation)->SetPlacedItem(originalItem); - + return accessibleGossipStones; } diff --git a/source/include/category.hpp b/source/include/category.hpp index ad19b95..62c2939 100644 --- a/source/include/category.hpp +++ b/source/include/category.hpp @@ -77,6 +77,13 @@ enum class Category { cDayOne, cDayTwo, cDayThree, + cAnjuAndKafei, + cNotebook, + cAlternateCheck, + cZoraEgg, + cMoonItems, + cFDM, + cMainInventory, }; enum class OptionCategory { diff --git a/source/include/keys.hpp b/source/include/keys.hpp index 157bbb3..d99121b 100644 --- a/source/include/keys.hpp +++ b/source/include/keys.hpp @@ -57,7 +57,7 @@ typedef enum { GAROS_MASK, CAPTAINS_HAT, GIANTS_MASK, - FIERCE_DIETY_MASK, + FIERCE_DEITY_MASK, MASK_OF_TRUTH, SWAMP_SKULLTULA_TOKEN, OCEANSIDE_SKULLTULA_TOKEN, @@ -127,6 +127,7 @@ typedef enum { SONG_OF_TIME, SONG_OF_STORMS, SONATA_OF_AWAKENING, + LULLABY_INTRO, GORONS_LULLABY, NEW_WAVE_BOSSA_NOVA, ELEGY_OF_EMPTINESS, @@ -237,6 +238,7 @@ typedef enum { SOUTHERN_SWAMP_MUSIC_STATUE, GIANTS_OATH_TO_ORDER, DEKU_PALACE_IMPRISONED_MONKEY, + TWIN_ISLANDS_LULLABY_INTRO, GORON_VILLAGE_GORON_LULLABY, GBC_BABY_ZORAS, ROMANI_RANCH_ROMANIS_GAME, @@ -338,6 +340,7 @@ typedef enum { MOUNTAIN_VILLAGE_SMITH_DAY_ONE, MOUNTAIN_VILLAGE_SMITH_DAY_TWO, MOUNTAIN_VILLAGE_FROG_CHOIR, + MOUNTAIN_VILLAGE_KEATON_QUIZ, MOUNTAIN_VILLAGE_DARMANI, MOUNTAIN_VILLAGE_HUNGRY_GORON, MOUNTAIN_WATERFALL_CHEST, @@ -409,10 +412,13 @@ typedef enum { SOUTHERN_SWAMP_PICTOGRAPH_STANDARD, SOUTHERN_SWAMP_PICTOGRAPH_GOOD, SOUTHERN_SWAMP_SCRUB_PURCHASE, + SOUTHERN_SWAMP_SCRUB_PURCHASE_CLEAR, + SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR, + SWAMP_TOURIST_CENTER_ROOF_CLEAR, POTION_SHOP_ITEM_1, POTION_SHOP_ITEM_2, POTION_SHOP_ITEM_3, -//StockPotInn +//Stock Pot Inn STOCKPOTINN_RESERVATION, STOCKPOTINN_MIDNIGHT_MEETING, STOCKPOTINN_TOILET_HAND, @@ -740,6 +746,7 @@ typedef enum { LAUNDRY_POOL, LAUNDRY_POOL_KAFEI_HIDEOUT, TERMINA_FIELD, + TERMINA_FIELD_OUTSIDE_OBSERVATORY, TERMINA_FIELD_PEAHAT_GROTTO, TERMINA_FIELD_DODONGO_GROTTO, TERMINA_FIELD_BIO_BABA_GROTTO, @@ -813,6 +820,7 @@ typedef enum { IKANA_GRAVEYARD_BATS_ROOM, IKANA_GRAVEYARD_TABLET_ROOM, IKANA_GRAVEYARD_BELOW_GRAVE2, + IKANA_GRAVEYARD_PRE_IRON_KNUCKLE_ROOM, IKANA_GRAVEYARD_IRON_KNUCKLE_ROOM, IKANA_GRAVEYARD_BELOW_GRAVE3, DAMPES_HUT, @@ -902,6 +910,7 @@ typedef enum { STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_DEATH_ARMOS_LEDGE, STONE_TOWER_TEMPLE_PRE_GOMESS_ROOM, STONE_TOWER_TEMPLE_GOMESS_ROOM, + STONE_TOWER_TEMPLE_INVERTED_EYEGORE_ROOM, STONE_TOWER_TEMPLE_INVERTED_THIN_BRIDGE_ROOM, STONE_TOWER_TEMPLE_PRE_BOSS_ROOM, STONE_TOWER_TEMPLE_BOSS_ROOM, @@ -930,6 +939,7 @@ typedef enum { BENEATH_THE_WELL_PRE_MIRROR_SHIELD_ROOM, BENEATH_THE_WELL_MIRROR_SHIELD_ROOM, IKANA_CASTLE_EXTERIOR_LOWER, + IKANA_CASTLE_SHORTCUT, IKANA_CASTLE_ENTRANCE, IKANA_CASTLE_LAVA_BLOCKS_ROOM, IKANA_CASTLE_NO_FLOOR_ROOM, @@ -968,7 +978,8 @@ typedef enum { SSH_MONUMENT_ROOM_LOWER, SSH_MONUMENT_ROOM_UPPER, SSH_GOLD_ROOM_LOWER, - SSH_GOLD_ROOM_UPPER, + SSH_GOLD_ROOM_UPPER_LEFT, + SSH_GOLD_ROOM_UPPER_RIGHT, SSH_POT_ROOM_LOWER, SSH_POT_ROOM_UPPER, SSH_TREE_ROOM, diff --git a/source/include/logic.hpp b/source/include/logic.hpp index 8965a3a..4d1d9b9 100644 --- a/source/include/logic.hpp +++ b/source/include/logic.hpp @@ -37,9 +37,10 @@ namespace Logic { extern bool AlienBottle; extern bool GoronRaceBottle; extern bool BeaverRaceBottle; - extern bool DampeBottle; + extern bool ArcheryBottle; extern bool ChateauBottle; extern bool MysteryMilkBottle; + extern bool UsableMysteryMilkBottle; extern bool BombersNotebook; extern bool MirrorShield; extern bool HerosShield; @@ -82,7 +83,7 @@ namespace Logic { extern bool GarosMask; extern bool CaptainsHat; extern bool GiantsMask; - extern bool FierceDietyMask; + extern bool FierceDeityMask; extern bool MaskOfTruth; extern bool OneMask; extern bool TwoMasks; @@ -114,6 +115,7 @@ namespace Logic { extern bool SongOfStorms; extern bool SongOfHealing; extern bool SonataOfAwakening; + extern bool LullabyIntro; extern bool GoronsLullaby; extern bool NewWaveBossaNova; extern bool ElegyOfEmptiness; @@ -207,7 +209,7 @@ namespace Logic { extern bool AnySword; extern bool AnyBombBag; extern bool AnyMagicBean; - extern bool WaterForBeans; + extern bool BeansAndWater; extern bool TwoBottles; extern bool AnyWallet; extern bool LimitlessBeans; @@ -308,6 +310,25 @@ namespace Logic { extern bool WoodfallFrog; extern bool GreatBayFrog; extern bool ThinBridgeCrystalChest; + extern bool MilkQuestStart; + extern bool KoumeSaved; + extern bool SpokeToKoume; + extern bool WoodfallPoisonClear; + extern bool WoodfallLadder; + extern bool UpdraftRoomSwitchUpright; + extern bool UpdraftRoomSwitchInverted; + extern bool DekuTrialClear; + extern bool GoronTrialClear; + extern bool ZoraTrialClear; + extern bool LinkTrialClear; + extern bool GoldRoomLadder; + extern bool WinnerPicture; + extern bool PiratePicture; + extern bool RockSirloin; + extern bool SpokeToBabyGoron; + extern bool Milk; + extern bool SpokeToKafei; + extern bool PostedKafeiLetter; extern bool CanGoToMoon; @@ -326,4 +347,4 @@ namespace Logic { u8 TotalMaskCount(); bool EventsUpdated(); void LogicReset(); -} \ No newline at end of file +} diff --git a/source/include/menu.hpp b/source/include/menu.hpp index ee78177..67066ca 100644 --- a/source/include/menu.hpp +++ b/source/include/menu.hpp @@ -42,10 +42,8 @@ void PrintOptionSubMenu(); void PrintSubMenu(); void PrintPresetsMenu(); void PrintResetToDefaultsMenu(); -void PrintGenerateMenu(); void ClearDescription(); void PrintOptionDescription(); -void PrintVersionDescription(); void GenerateRandomizer(); std::string GetInput(const char* hintText); diff --git a/source/include/setting_descriptions.hpp b/source/include/setting_descriptions.hpp index e3083d2..8c7d541 100644 --- a/source/include/setting_descriptions.hpp +++ b/source/include/setting_descriptions.hpp @@ -106,7 +106,7 @@ extern string_view blastLong; extern string_view blastVeryLong; extern string_view underwaterOcarinaDesc; -extern string_view fierceDietyAnywhereDesc; +extern string_view fierceDeityAnywhereDesc; extern string_view skipMinigamePhasesDesc; extern string_view fastLabFishDesc; extern string_view fastBankDesc; @@ -207,7 +207,7 @@ extern string_view shuffleHeartContainersDesc; extern string_view shufflePiecesOfHeartDesc; extern string_view shuffleMainInventoryDesc; extern string_view shuffleTransformationDesc; -extern string_view shuffleFierceDietyDesc; +extern string_view shuffleFierceDeityDesc; extern string_view shuffleMoonItemsDesc; extern string_view shuffleBombersNotebookDesc; extern string_view ocarinaDiveDesc; @@ -215,6 +215,7 @@ extern string_view fastZoraSwimDesc; extern string_view dpadMaskDesc; extern string_view dpadOcarinaDesc; extern string_view dpadArrowDesc; +extern string_view twinmoldRestorationDesc; extern string_view customMapButtonDesc; extern string_view customItemsButtonDesc; extern string_view customMasksButtonDesc; @@ -224,4 +225,7 @@ extern string_view compassShowWotHDesc; extern string_view skipHMSCutsceneDesc; extern string_view skipDarmaniCutsceneDesc; extern string_view skipMikauCutsceneDesc; -extern string_view skipBombersMinigameDesc; \ No newline at end of file +extern string_view skipBombersMinigameDesc; +extern string_view NARegionDesc; +extern string_view EURegionDesc; +extern string_view VersionDesc; \ No newline at end of file diff --git a/source/include/settings.hpp b/source/include/settings.hpp index 3075003..8cb4de4 100644 --- a/source/include/settings.hpp +++ b/source/include/settings.hpp @@ -363,7 +363,7 @@ namespace Settings { extern Option StartingGaroMask; extern Option StartingCaptainsHat; extern Option StartingGiantsMask; - extern Option StartingFierceDietyMask; + extern Option StartingFierceDeityMask; extern Option StartingMaskOfTruth; //Excluded Locations extern std::vector excludeLocationsOptions; @@ -400,7 +400,7 @@ namespace Settings { extern Option ItemPoolValue; extern Option ShuffleMainInventory; extern Option ShuffleTransformation; - extern Option ShuffleFierceDiety; + extern Option ShuffleFierceDeity; extern Option ShuffleChests; extern Option ShuffleMasks; extern Option ShuffleGFRewards; @@ -419,6 +419,7 @@ namespace Settings { extern Option ChestSize; extern Option ChangeOverworldItems; extern Option IngameSpoilers; + extern Option RegionSelect; extern Option MenuOpeningButton; extern Option RsDurability; extern Option SkipBombersMinigame; @@ -427,7 +428,7 @@ namespace Settings { //Comfort extern Option BlastMaskCooldown; extern Option UnderwaterOcarina; - extern Option FierceDietyAnywhere; + extern Option FierceDeityAnywhere; extern Option ProgressiveGildedSword; extern Option StartingSpin; extern Option AmmoDrops; @@ -448,6 +449,10 @@ namespace Settings { extern Option SkipSongReplays; extern Option FastZoraSwim; extern Option OcarinaDive; + extern Option DpadTransform; + extern Option DpadOcarina; + extern Option DpadArrows; + extern Option TwinmoldRestoraion; //Trial Skips extern Option OdolwaTrialSkip; @@ -525,8 +530,10 @@ namespace Settings { extern u32 LinksPocketRewardBitMask; extern std::array rDungeonRewardOverrides; - extern u8 PlayOption; - extern u8 Version; + extern Option PlayOption; + extern Option Version; + extern std::vector gameOptions; + extern Menu gameSettings; } diff --git a/source/include/version.hpp b/source/include/version.hpp index cf766e1..cd04e54 100644 --- a/source/include/version.hpp +++ b/source/include/version.hpp @@ -1,4 +1,4 @@ #pragma once -#define RANDOMIZER_VERSION "v1.1.1" +#define RANDOMIZER_VERSION "v1.3.1" #define COMMIT_NUMBER "develop" diff --git a/source/item_list.cpp b/source/item_list.cpp index eed7e25..24819c2 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_GFAIRY ); + itemTable[GREAT_FAIRYS_SWORD] = Item(true , false, &GreatFairySword, Text{"Great Fairy's 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 ); @@ -53,15 +53,15 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[DON_GEROS_MASK] = Item(true, false, &DonGerosMask, Text{"Don Gero's Mask", "Masque de Don Gero", "Máscara de Don Gero"}, DON_GEROS_MASK, (u32)GetItemID::GI_MASK_DON_GEROS, ITEMTYPE_MASK ); itemTable[MASK_OF_SCENTS] = Item(true, false, &MaskOfScents, Text{"Mask of Scents", "Masque des Senteurs", "Máscara de aromas"}, MASK_OF_SCENTS, (u32)GetItemID::GI_MASK_OF_SCENTS, ITEMTYPE_MASK ); itemTable[ROMANIS_MASK] = Item(true, false, &RomanisMask, Text{"Romani's Mask", "Masque de Romani", "Máscara de Romani"}, ROMANIS_MASK, (u32)GetItemID::GI_MASK_ROMANIS, ITEMTYPE_MASK ); - itemTable[CIRCUS_LEADERS_MASK] = Item(true, false, &CircusLeadersMask, Text{"Circus Leader's Mask", "Masque de chef de cirque", "Máscara de lider de circo"}, CIRCUS_LEADERS_MASK, (u32)GetItemID::GI_MASK_TROUPE_LEADERS, ITEMTYPE_MASK ); + itemTable[CIRCUS_LEADERS_MASK] = Item(true, false, &CircusLeadersMask, Text{"Troupe Leader's Mask", "Masque de chef de troupe", "Máscara de lider de troupe"}, CIRCUS_LEADERS_MASK, (u32)GetItemID::GI_MASK_TROUPE_LEADERS, ITEMTYPE_MASK ); itemTable[KAFEIS_MASK] = Item(true, false, &KafeisMask, Text{"Kafei's Mask", "Masque de Kafei", "Máscara de Kafei"}, KAFEIS_MASK, (u32)GetItemID::GI_MASK_KAFEIS, ITEMTYPE_MASK ); itemTable[COUPLES_MASK] = Item(true, false, &CouplesMask, Text{"Couple's Mask", "Masque de couple", "Máscara de pareja"}, COUPLES_MASK, (u32)GetItemID::GI_MASK_COUPLES, ITEMTYPE_MASK ); itemTable[KAMAROS_MASK] = Item(true, false, &KamarosMask, Text{"Kamaro's Mask", "Masque de Kamaro", "Máscara de Kamaro"}, KAMAROS_MASK, (u32)GetItemID::GI_MASK_KAMARAOS, ITEMTYPE_MASK ); - itemTable[GIBDOS_MASK] = Item(true, false, &GibdosMask, Text{"Gibdo's Mask", "Masque Gibdo", "Máscara de Gibdo"}, GIBDOS_MASK, (u32)GetItemID::GI_MASK_GIBDO, ITEMTYPE_MASK ); + itemTable[GIBDOS_MASK] = Item(true, false, &GibdosMask, Text{"Gibdo Mask", "Masque Gibdo", "Máscara de Gibdo"}, GIBDOS_MASK, (u32)GetItemID::GI_MASK_GIBDO, ITEMTYPE_MASK ); itemTable[GAROS_MASK] = Item(true, false, &GarosMask, Text{"Garo's Mask", "Masque de Garo", "Máscara de Garo"}, GAROS_MASK, (u32)GetItemID::GI_MASK_GARO, ITEMTYPE_MASK ); itemTable[CAPTAINS_HAT] = Item(true, false, &CaptainsHat, Text{"Captain's Hat", "Chapeau de capitaine", "Sombrero de Capitan"}, CAPTAINS_HAT, (u32)GetItemID::GI_MASK_CAPTAINS_HAT, ITEMTYPE_MASK ); itemTable[GIANTS_MASK] = Item(true, false, &GiantsMask, Text{"Giant's Mask", "Masque de geant", "Máscara de gigante"}, GIANTS_MASK, (u32)GetItemID::GI_MASK_GIANTS, ITEMTYPE_MASK ); - itemTable[FIERCE_DIETY_MASK] = Item(true, false, &FierceDietyMask, Text{"Fierce Diety Mask", "Masque Dietetique Fiere", "Máscara Fiere Diety"}, FIERCE_DIETY_MASK, (u32)GetItemID::GI_MASK_FIERCE_DEITY, ITEMTYPE_MASK ); + itemTable[FIERCE_DEITY_MASK] = Item(true, false, &FierceDeityMask, Text{"Fierce Deity Mask", "Masque Dietetique Fiere", "Máscara Fiere Deity"}, FIERCE_DEITY_MASK, (u32)GetItemID::GI_MASK_FIERCE_DEITY, ITEMTYPE_MASK ); itemTable[MASK_OF_TRUTH] = Item(true, false, &MaskOfTruth, Text{"Mask of Truth", "Masque de vérité", "Máscara de la Verdad"}, MASK_OF_TRUTH, (u32)GetItemID::GI_MASK_OF_TRUTH, ITEMTYPE_MASK ); itemTable[FISHING_PASS] = Item(false, true, &noVariable, Text{"Fishing Pass", "Fishing Pass", "Fishing Pass"}, FISHING_PASS, 0xBA, ITEMTYPE_ITEM ); // @@ -89,14 +89,14 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth itemTable[ST_STRAY_FAIRY] = Item(true, true, &StoneTowerStrayFairies, Text{"Stone Tower Stray Fairy", "Fee errante de la Forteresse de Pierre", "Hada Callejera de la Torre Piedra" }, ST_STRAY_FAIRY, (u32)GetItemID::GI_NONE, ITEMTYPE_STRAYFAIRY); //Bottles - itemTable[EMPTY_BOTTLE1] = Item(true, false, &DampeBottle, Text{"Empty Bottle", "Flacon vide", "Botella vacía" }, EMPTY_BOTTLE1, (u32)GetItemID::GI_BOTTLE_EMPTY, ITEMTYPE_ITEM); + itemTable[EMPTY_BOTTLE1] = Item(true, false, &ArcheryBottle, Text{"Empty Bottle", "Flacon vide", "Botella vacía" }, EMPTY_BOTTLE1, (u32)GetItemID::GI_BOTTLE_EMPTY, ITEMTYPE_ITEM); itemTable[EMPTY_BOTTLE2] = Item(true, false, &BeaverRaceBottle, Text{"Empty Bottle", "Flacon vide", "Botella vacía" }, EMPTY_BOTTLE2, (u32)GetItemID::GI_BOTTLE_EMPTY, ITEMTYPE_ITEM); 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[GOLD_DUST] = Item(true, true, &GoronRaceBottle, Text{"Gold Dust", "Poudre d'Or", "Polvo de Oro" }, GOLD_DUST, (u32)GetItemID::GI_BOTTLE_GOLD_DUST, ITEMTYPE_QUEST); 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[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_QUEST); //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); @@ -131,6 +131,7 @@ void ItemTable_Init() { //repeatable denotes that an item in a vanilla playth //itemTable[SONG_OF_TIME] = Item(Text{"Song of Time", "Chant du temps", "Canción del tiempo"}, ITEMTYPE_SONG, 0xC5, true, &SongOfTime, SONG_OF_TIME, false,); itemTable[SONG_OF_STORMS] = Item(true, false, &SongOfStorms, Text{"Song of Storms", "Chant des tempêtes", "Canción de la tormenta"}, SONG_OF_STORMS, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG); itemTable[SONATA_OF_AWAKENING] = Item(true, false, &SonataOfAwakening, Text{"Sonata of Awakening", "Sonate de i'Eveil", "Sonata del Despertar"}, SONATA_OF_AWAKENING, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); + itemTable[LULLABY_INTRO] = Item(true, false, &LullabyIntro, Text{"Goron's Lullaby Intro", "Goron's Lullaby Intro", "Goron's Lullaby Intro"}, LULLABY_INTRO, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); itemTable[GORONS_LULLABY] = Item(true, false, &GoronsLullaby, Text{"Goron's Lullaby", "Berceuse des Gorons", "Nana Goron"}, GORONS_LULLABY, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG); itemTable[NEW_WAVE_BOSSA_NOVA] = Item(true, false, &NewWaveBossaNova, Text{"New Wave Bossa Nova", "Bossa Nova des Flots", "Nueva Bossanova"}, NEW_WAVE_BOSSA_NOVA, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); itemTable[ELEGY_OF_EMPTINESS] = Item(true, false, &ElegyOfEmptiness, Text{"Elegy of Emptiness", "Hymne du Vida", "Elegia al Vacio"}, ELEGY_OF_EMPTINESS, (u32)GetItemID::GI_NONE, ITEMTYPE_SONG ); @@ -252,4 +253,4 @@ void NewItem(const ItemKey itemKey, const Item item) { return; } itemTable[itemKey] = item; -} \ No newline at end of file +} diff --git a/source/item_location.cpp b/source/item_location.cpp index cb61ec3..b2b2111 100644 --- a/source/item_location.cpp +++ b/source/item_location.cpp @@ -20,9 +20,9 @@ void LocationTable_Init() { 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 ); - locationTable[HMS_STARTING_SWORD] = ItemLocation::Base (0x00, 0x37, false, "Starting Sword", HMS_STARTING_SWORD, PROGRESSIVE_SWORD, {Category::cClockTower}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP ); - locationTable[HMS_STARTING_SHIELD] = ItemLocation::Base (0x00, 0x32, false, "Starting Shield", HMS_STARTING_SHIELD, HEROS_SHIELD, {Category::cClockTower}, 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, Category::cNotebook}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP ); + locationTable[HMS_STARTING_SWORD] = ItemLocation::Base (0x00, 0x37, false, "Starting Sword", HMS_STARTING_SWORD, PROGRESSIVE_SWORD, {Category::cClockTower, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP ); + locationTable[HMS_STARTING_SHIELD] = ItemLocation::Base (0x00, 0x32, false, "Starting Shield", HMS_STARTING_SHIELD, HEROS_SHIELD, {Category::cClockTower, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(6), SpoilerCollectionCheckGroup::GROUP_NO_GROUP ); //Deku Palace locationTable[DEKU_PALACE_BEAN_SELLER] = ItemLocation::Base (0x07, 0x35, true, "DP Bean Seller", DEKU_PALACE_BEAN_SELLER, MAGIC_BEAN, {Category::cDekuPalace,Category::cWoodfall,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_DEKU_PALACE ); @@ -32,17 +32,17 @@ void LocationTable_Init() { locationTable[DEKU_PALACE_BEAN_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x05, true, "DP Bean Grotto Chest", DEKU_PALACE_BEAN_GROTTO_CHEST, RED_RUPEE, {Category::cDekuPalace,Category::cGrotto,Category::cWoodfall,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DEKU_PALACE); //East Clock Town - locationTable[E_CLOCK_TOWN_AROMA_IN_BAR] = ItemLocation::Base (0x15, 0x6F, false, "ECT Milk Bar Madame Aroma", E_CLOCK_TOWN_AROMA_IN_BAR, CHATEAU_ROMANI, {Category::cEastClockTown, Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_ARCHERY_1] = ItemLocation::Base (0x20, 0x47, false, "ECT Archery #1", E_CLOCK_TOWN_ARCHERY_1, PROGRESSIVE_BOW, {Category::cEastClockTown, Category::cMinigame,Category::cDayOne }, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_AROMA_IN_BAR] = ItemLocation::Base (0x15, 0x6F, false, "ECT Milk Bar Madame Aroma", E_CLOCK_TOWN_AROMA_IN_BAR, CHATEAU_ROMANI, {Category::cEastClockTown, Category::cDayThree, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_ARCHERY_1] = ItemLocation::Base (0x20, 0x47, false, "ECT Archery #1", E_CLOCK_TOWN_ARCHERY_1, PROGRESSIVE_BOW, {Category::cEastClockTown, Category::cMinigame,Category::cDayOne, Category::cMainInventory }, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); locationTable[E_CLOCK_TOWN_MAYOR] = ItemLocation::Base (0x12, 0x0C, false, "ECT Mayor Reward", E_CLOCK_TOWN_MAYOR, PIECE_OF_HEART, {Category::cEastClockTown, Category::cVanillaHeartPiece ,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_ARCHERY_2] = ItemLocation::Base (0x20, 0x0C, false, "ECT Archery #2", E_CLOCK_TOWN_ARCHERY_2, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_HONEY_DARLING_3DAYS] = ItemLocation::Base (0x11, 0x0C, false, "ECT Honey and Darling 3 Days", E_CLOCK_TOWN_HONEY_DARLING_3DAYS, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_ARCHERY_2] = ItemLocation::Base (0x20, 0x0C, false, "ECT Archery #2", E_CLOCK_TOWN_ARCHERY_2, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_HONEY_DARLING_3DAYS] = ItemLocation::Base (0x11, 0x0C, false, "ECT Honey and Darling 3 Days", E_CLOCK_TOWN_HONEY_DARLING_3DAYS, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame , Category::cVanillaHeartPiece,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); locationTable[E_CLOCK_TOWN_TREASURE_CHEST_GAME_GORON] = ItemLocation::Chest (0x17, 0x00, true, "ECT Treasure Chest Game (Goron)", E_CLOCK_TOWN_TREASURE_CHEST_GAME_GORON, PIECE_OF_HEART, {Category::cEastClockTown, Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_POSTMAN_FREEDOM] = ItemLocation::Base (0x6C, 0x84, true, "ECT Postman's Freedom", E_CLOCK_TOWN_POSTMAN_FREEDOM, POSTMANS_HAT, {Category::cEastClockTown, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_POSTMAN_FREEDOM] = ItemLocation::Base (0x6C, 0x84, false, "ECT Postman's Freedom", E_CLOCK_TOWN_POSTMAN_FREEDOM, POSTMANS_HAT, {Category::cEastClockTown, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); locationTable[E_CLOCK_TOWN_GORMAN] = ItemLocation::Base (0x15, 0x83, false, "ECT Milk Bar Gorman", E_CLOCK_TOWN_GORMAN, CIRCUS_LEADERS_MASK, {Category::cEastClockTown, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_AROMA_IN_OFFICE] = ItemLocation::Base (0x12, 0x8F, false, "ECT Mayor's Office Madame Aroma", E_CLOCK_TOWN_AROMA_IN_OFFICE, KAFEIS_MASK, {Category::cEastClockTown, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[BOMBERS_HIDEOUT_CHEST] = ItemLocation::Chest (0x29, 0x00, true, "Bombers' Hideout Chest", BOMBERS_HIDEOUT_CHEST, SILVER_RUPEE, {Category::cEastClockTown,Category::cChest,Category::cDayOne }, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); - locationTable[E_CLOCK_TOWN_CHEST] = ItemLocation::Chest (0x6C, 0x0A, true, "ECT Chest", E_CLOCK_TOWN_CHEST, SILVER_RUPEE, {Category::cEastClockTown,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_AROMA_IN_OFFICE] = ItemLocation::Base (0x12, 0x8F, false, "ECT Mayor's Office Madame Aroma", E_CLOCK_TOWN_AROMA_IN_OFFICE, KAFEIS_MASK, {Category::cEastClockTown, Category::cDayOne, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[BOMBERS_HIDEOUT_CHEST] = ItemLocation::Chest (0x29, 0x00, true, "Bombers' Hideout Chest", BOMBERS_HIDEOUT_CHEST, SILVER_RUPEE, {Category::cEastClockTown, Category::cChest,Category::cDayOne }, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); + locationTable[E_CLOCK_TOWN_CHEST] = ItemLocation::Chest (0x6C, 0x0A, true, "ECT Chest", E_CLOCK_TOWN_CHEST, SILVER_RUPEE, {Category::cEastClockTown, Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); //locationTable[E_CLOCK_TOWN_MILK_BAR_CHATEAU] = ItemLocation::Base (0x12, 0x00, true, "Milk Bar Chateau Buy", E_CLOCK_TOWN_MILK_BAR_CHATEAU, CHATEAU_ROMANI, {Category::cEastClockTown}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); //locationTable[E_CLOCK_TOWN_MILK_BAR_MILK] = ItemLocation::Base (0x12, 0x00, true, "Milk Bar Milk Buy", E_CLOCK_TOWN_MILK_BAR_MILK, MILK, {Category::cEastClockTown}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); //locationTable[E_CLOCK_TOWN_HONEY_DARLING_ANY_DAY] = ItemLocation::Base (0x11, 0x00, true, "Honey and Darling Any Day", E_CLOCK_TOWN_HONEY_DARLING_ANY_DAY, PURPLE_RUPEE, {Category::cEClockTown,Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); @@ -52,74 +52,75 @@ void LocationTable_Init() { locationTable[E_CLOCK_TOWN_POSTBOX] = ItemLocation::Base (0x6C, 0xBA, false, "ECT Postbox", E_CLOCK_TOWN_POSTBOX, PIECE_OF_HEART, {Category::cEastClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_E_CLOCK_TOWN ); //Goron Village - locationTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE] = ItemLocation::Base (0x4D, 0x34, false, "GV Powder Keg Challenge", GORON_VILLAGE_POWDER_KEG_CHALLENGE, POWDER_KEG, {Category::cGoronVillage,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_SCRUB_PURCHASE] = ItemLocation::Base (0x4D, 0x1D, false, "GV Scrub Purchase", GORON_VILLAGE_SCRUB_PURCHASE, PROGRESSIVE_BOMB_BAG, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_LENS_OF_TRUTH_CHEST] = ItemLocation::Chest (0x07, 0x01, true, "GV Lens of Truth Chest", GORON_VILLAGE_LENS_OF_TRUTH_CHEST, LENS_OF_TRUTH, {Category::cGoronVillage,Category::cChest,Category::cDayOne }, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_SCRUB_TRADE] = ItemLocation::Base (0x4D, 0x99, true, "GV Deku Scrub Merchant Trade", GORON_VILLAGE_SCRUB_TRADE, MOUNTAIN_TITLE, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_LEDGE] = ItemLocation::Collectable(0x4D, 0x00, false, "GV Piece of Heart", GORON_VILLAGE_LEDGE, PIECE_OF_HEART, {Category::cGoronVillage, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_GORON_LULLABY] = ItemLocation::Base (0x32, 0x4D, false, "GV Goron Lullaby", GORON_VILLAGE_GORON_LULLABY, GORONS_LULLABY, {Category::cGoronVillage, Category::cSong,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[LENS_CAVE_RED_RUPEE] = ItemLocation::Chest (0x07, 0x03, true, "GV Lens Cave Invisible Chest", LENS_CAVE_RED_RUPEE, RED_RUPEE, {Category::cGoronVillage,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[LENS_CAVE_PURPLE_RUPEE] = ItemLocation::Chest (0x07, 0x06, true, "GV Lens Cave Rock Chest", LENS_CAVE_PURPLE_RUPEE, PURPLE_RUPEE, {Category::cGoronVillage,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING] = ItemLocation::Base (0x48, 0x34, false, "GV Powder Keg Challenge (Spring)", GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, POWDER_KEG, {Category::cGoronVillage,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_SCRUB_PURCHASE_SPRING] = ItemLocation::Base (0x48, 0x1D, false, "GV Scrub Purchase (Spring)", GORON_VILLAGE_SCRUB_PURCHASE_SPRING, PROGRESSIVE_BOMB_BAG, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_SCRUB_TRADE_SPRING] = ItemLocation::Base (0x48, 0x99, true, "GV Deku Scrub Merchant Trade (Spring)", GORON_VILLAGE_SCRUB_TRADE_SPRING, MOUNTAIN_TITLE, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); - locationTable[GORON_VILLAGE_LEDGE_SPRING] = ItemLocation::Collectable(0x48, 0x00, false, "GV Piece of Heart (Spring)", GORON_VILLAGE_LEDGE_SPRING, PIECE_OF_HEART, {Category::cGoronVillage, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE] = ItemLocation::Base (0x4D, 0x34, false, "GV Powder Keg Challenge", GORON_VILLAGE_POWDER_KEG_CHALLENGE, POWDER_KEG, {Category::cGoronVillage, Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_SCRUB_PURCHASE] = ItemLocation::Base (0x4D, 0x1D, false, "GV Scrub Purchase", GORON_VILLAGE_SCRUB_PURCHASE, PROGRESSIVE_BOMB_BAG, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne, Category::cShop, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_LENS_OF_TRUTH_CHEST] = ItemLocation::Chest (0x07, 0x01, true, "GV Lens of Truth Chest", GORON_VILLAGE_LENS_OF_TRUTH_CHEST, LENS_OF_TRUTH, {Category::cGoronVillage, Category::cChest, Category::cDayOne, Category::cMainInventory }, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_SCRUB_TRADE] = ItemLocation::Base (0x4D, 0x99, true, "GV Deku Scrub Merchant Trade", GORON_VILLAGE_SCRUB_TRADE, MOUNTAIN_TITLE, {Category::cGoronVillage, Category::cDekuScrub, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_LEDGE] = ItemLocation::Collectable(0x4D, 0x00, false, "GV Piece of Heart", GORON_VILLAGE_LEDGE, PIECE_OF_HEART, {Category::cGoronVillage, Category::cVanillaHeartPiece, Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_GORON_LULLABY] = ItemLocation::Base (0x32, 0x4D, false, "GV Goron Lullaby", GORON_VILLAGE_GORON_LULLABY, GORONS_LULLABY, {Category::cGoronVillage, Category::cSong, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[LENS_CAVE_RED_RUPEE] = ItemLocation::Chest (0x07, 0x03, true, "GV Lens Cave Invisible Chest", LENS_CAVE_RED_RUPEE, RED_RUPEE, {Category::cGoronVillage, Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[LENS_CAVE_PURPLE_RUPEE] = ItemLocation::Chest (0x07, 0x06, true, "GV Lens Cave Rock Chest", LENS_CAVE_PURPLE_RUPEE, PURPLE_RUPEE, {Category::cGoronVillage, Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING] = ItemLocation::Base (0x48, 0x34, false, "GV Powder Keg Challenge (Spring)", GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, POWDER_KEG, {Category::cGoronVillage, Category::cDayOne, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_SCRUB_PURCHASE_SPRING] = ItemLocation::Base (0x48, 0x1D, false, "GV Scrub Purchase (Spring)", GORON_VILLAGE_SCRUB_PURCHASE_SPRING, PROGRESSIVE_BOMB_BAG, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne, Category::cShop, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_SCRUB_TRADE_SPRING] = ItemLocation::Base (0x48, 0x99, true, "GV Deku Scrub Merchant Trade (Spring)", GORON_VILLAGE_SCRUB_TRADE_SPRING, MOUNTAIN_TITLE, {Category::cGoronVillage, Category::cDekuScrub,Category::cDayOne, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); + locationTable[GORON_VILLAGE_LEDGE_SPRING] = ItemLocation::Collectable(0x48, 0x00, false, "GV Piece of Heart (Spring)", GORON_VILLAGE_LEDGE_SPRING, PIECE_OF_HEART, {Category::cGoronVillage, Category::cVanillaHeartPiece,Category::cDayOne, Category::cAlternateCheck}, SpoilerCollectionCheckGroup::GROUP_GORON_VILLAGE ); //Great Bay Coast - locationTable[GBC_OCEAN_SPIDER_DAY1] = ItemLocation::Base (0x28, 0x48, false, "OSH Day 1 Reward", GBC_OCEAN_SPIDER_DAY1, PROGRESSIVE_WALLET, {Category::cGreatBayCoast ,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); + locationTable[GBC_OCEAN_SPIDER_DAY1] = ItemLocation::Base (0x28, 0x48, false, "OSH Reward", GBC_OCEAN_SPIDER_DAY1, PROGRESSIVE_WALLET, {Category::cGreatBayCoast ,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); //locationTable[GBC_OCEAN_SPIDER_DAY2] = ItemLocation::Base (0x28, 0x00, true, "OSH Day 2 Reward", GBC_OCEAN_SPIDER_DAY2, PURPLE_RUPEE, {Category::cGreatBayCoast ,Category::cDayTwo}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); //locationTable[GBC_OCEAN_SPIDER_DAY3] = ItemLocation::Base (0x28, 0x00, true, "OSH Day 3 Reward", GBC_OCEAN_SPIDER_DAY3, RED_RUPEE, {Category::cGreatBayCoast,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); - locationTable[GBC_FISHERMAN_GAME] = ItemLocation::Base (0x37, 0x06, false, "GBC Fisherman's Game", GBC_FISHERMAN_GAME, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); - locationTable[GBC_OCEAN_SPIDER_CHEST] = ItemLocation::Chest (0x28, 0x00, false, "OSH Chest", GBC_OCEAN_SPIDER_CHEST, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece ,Category::cDayOne,Category::cChest}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); - locationTable[GBC_LAB_FISH] = ItemLocation::Collectable(0x2F, 0x0A, false, "GBC Marine Lab Fish HP", GBC_LAB_FISH, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); + locationTable[GBC_FISHERMAN_GAME] = ItemLocation::Base (0x37, 0x0C, false, "GBC Fisherman's Game", GBC_FISHERMAN_GAME, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece, Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); + locationTable[GBC_OCEAN_SPIDER_CHEST] = ItemLocation::Chest (0x28, 0x00, false, "OSH Chest", GBC_OCEAN_SPIDER_CHEST, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece, Category::cDayOne,Category::cChest}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); + locationTable[GBC_LAB_FISH] = ItemLocation::Collectable(0x2F, 0x00, false, "GBC Marine Lab Fish HP", GBC_LAB_FISH, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); locationTable[GBC_LEDGE] = ItemLocation::Collectable(0x37, 0x00, false, "GBC Ledge", GBC_LEDGE, PIECE_OF_HEART, {Category::cGreatBayCoast, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); locationTable[GBC_MIKAU] = ItemLocation::Base (0x37, 0x7A, false, "GBC Mikau", GBC_MIKAU, ZORA_MASK, {Category::cGreatBayCoast, Category::cTransformMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); locationTable[GBC_BABY_ZORAS] = ItemLocation::Base (0x2F, 0x4E, false, "GBC Marine Lab Baby Zoras", GBC_BABY_ZORAS, NEW_WAVE_BOSSA_NOVA, {Category::cGreatBayCoast, Category::cSong,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); - locationTable[GBC_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x17, true, "GBC Grotto Chest", GREAT_BAY_COAST_GROTTO, RED_RUPEE, {Category::cGreatBayCoast,Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); - locationTable[GBC_FISHERMAN_PHOTO] = ItemLocation::Base (0x3C, 0x95, false, "GBC Fisherman Photo", GBC_FISHERMAN_PHOTO, SEAHORSE, {Category::cGreatBayCoast,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); + locationTable[GBC_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x17, true, "GBC Grotto Chest", GREAT_BAY_COAST_GROTTO, RED_RUPEE, {Category::cGreatBayCoast, Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); + locationTable[GBC_FISHERMAN_PHOTO] = ItemLocation::Base (0x3C, 0x95, false, "GBC Fisherman Photo", GBC_FISHERMAN_PHOTO, SEAHORSE, {Category::cGreatBayCoast, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_GREAT_BAY_COAST ); //Ikana Canyon - locationTable[IKANA_CANYON_GREAT_FAIRY] = ItemLocation::Base (0x26, 0x3B, false, "IC Great Fairy", IKANA_CANYON_GREAT_FAIRY, GREAT_FAIRYS_SWORD, {Category::cIkanaCanyon,Category::cDayOne, Category::cFairyFountain}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); - 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_GREAT_FAIRY] = ItemLocation::Base (0x26, 0x3B, false, "IC Great Fairy", IKANA_CANYON_GREAT_FAIRY, GREAT_FAIRYS_SWORD, {Category::cIkanaCanyon, Category::cDayOne, Category::cFairyFountain, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); + locationTable[IKANA_CANYON_POE_HUT_HP] = ItemLocation::Base (0x51, 0x0C, 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 ); locationTable[IKANA_CANYON_SECRET_SHRINE_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x14, true, "IC Secret Shrine Grotto", IKANA_CANYON_SECRET_SHRINE_GROTTO_CHEST, BOMBCHU_5, {Category::cIkanaCanyon, Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); locationTable[IKANA_CANYON_SCRUB_TRADE] = ItemLocation::Base (0x13, 0x07, true, "IC Deku Scrub Merchant Trade", IKANA_CANYON_SCRUB_TRADE, HUGE_RUPEE, {Category::cIkanaCanyon, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); - 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 ); + 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, Category::cShop}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); //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_DAMPE_DIGGING] = ItemLocation::Chest (0x30, 0x10, false, "IG Dampe Digging", IKANA_GRAVEYARD_DAMPE_DIGGING, PIECE_OF_HEART, {Category::cIkanaGraveyard, Category::cVanillaHeartPiece, Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_GRAVEYARD ); + locationTable[IKANA_GRAVEYARD_IRON_KNUCKLE_CHEST] = ItemLocation::Chest (0x0C, 0x00, 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 (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_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 ); //Laundry Pool - locationTable[LAUNDRY_POOL_KAFEI] = ItemLocation::Base (0x0D, 0xAB, true, "LP Kafei's Pendant", LAUNDRY_POOL_KAFEI, PENDANT_MEMORIES, {Category::cLaundryPool,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); + locationTable[LAUNDRY_POOL_KAFEI] = ItemLocation::Base (0x0D, 0xAB, true, "LP Kafei's Pendant", LAUNDRY_POOL_KAFEI, PENDANT_MEMORIES, {Category::cLaundryPool,Category::cDayOne, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); locationTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE] = ItemLocation::Base (0x0D, 0x80, false, "LP Curiosity Shop Man 1", LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE, KEATON_MASK, {Category::cLaundryPool, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); - locationTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO] = ItemLocation::Base (0x0D, 0xA1, true, "LP Curiosity Shop Man 2", LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO, LETTER_MAMA, {Category::cLaundryPool,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); + locationTable[LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO] = ItemLocation::Base (0x0D, 0xA1, true, "LP Curiosity Shop Man 2", LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO, LETTER_MAMA, {Category::cLaundryPool,Category::cDayThree, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); locationTable[LAUNDRY_POOL_GURU_GURU] = ItemLocation::Base (0x70, 0x8C, false, "LP Guru Guru", LAUNDRY_POOL_GURU_GURU, BREMEN_MASK, {Category::cLaundryPool, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_LAUNDRY_POOL ); //Milk Road locationTable[MILK_ROAD_GORMAN_RACE] = ItemLocation::Base (0x6A, 0x81, false, "MR Gorman Track Race", MILK_ROAD_GORMAN_RACE, GAROS_MASK, {Category::cMilkRoad, Category::cMinigame, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD ); - locationTable[MILK_ROAD_GORMAN_MILK_BUY] = ItemLocation::Base (0x6A, 0x92, true, "MR Gorman Track Milk Purchase", MILK_ROAD_GORMAN_MILK_BUY, MILK, {Category::cMilkRoad,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD ); - locationTable[GORMAN_TRACK_MYSTERY_MILK_QUEST] = ItemLocation::Base (0x6A, 0x70, false, "MR Gorman's Mystery Milk Quest", GORMAN_TRACK_MYSTERY_MILK_QUEST, BOTTLE_WITH_MYSTERY_MILK, {Category::cMilkRoad,Category::cDayTwo}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD ); - locationTable[MILK_ROAD_KEATON_QUIZ] = ItemLocation::Base (0x6A, 0x0C, false, "MR Keaton Quiz", MILK_ROAD_KEATON_QUIZ, PIECE_OF_HEART, {Category::cMilkRoad, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD ); + locationTable[MILK_ROAD_GORMAN_MILK_BUY] = ItemLocation::Base (0x6A, 0x92, true, "MR Gorman Track Milk Purchase", MILK_ROAD_GORMAN_MILK_BUY, MILK, {Category::cMilkRoad,Category::cDayOne, Category::cShop}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD ); + locationTable[GORMAN_TRACK_MYSTERY_MILK_QUEST] = ItemLocation::Base (0x6A, 0x70, false, "MR Gorman's Mystery Milk Quest", GORMAN_TRACK_MYSTERY_MILK_QUEST, BOTTLE_WITH_MYSTERY_MILK, {Category::cMilkRoad, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD ); + locationTable[MILK_ROAD_KEATON_QUIZ] = ItemLocation::Base (0x22, 0x03, false, "MR Keaton Quiz", MILK_ROAD_KEATON_QUIZ, PIECE_OF_HEART, {Category::cMilkRoad, Category::cVanillaHeartPiece, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD ); //Mountain Village - locationTable[MOUNTAIN_VILLAGE_SMITH_DAY_ONE] = ItemLocation::Base (0x2C, 0x4A, false, "MV Smith Day 1", MOUNTAIN_VILLAGE_SMITH_DAY_ONE, RAZOR_SWORD, {Category::cMountainVillage,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); - locationTable[MOUNTAIN_VILLAGE_SMITH_DAY_TWO] = ItemLocation::Base (0x2C, 0x39, false, "MV Smith Day 2", MOUNTAIN_VILLAGE_SMITH_DAY_TWO, GILDED_SWORD, {Category::cMountainVillage,Category::cDayTwo}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); + locationTable[MOUNTAIN_VILLAGE_SMITH_DAY_ONE] = ItemLocation::Base (0x2C, 0x38, false, "MV Razor Sword", MOUNTAIN_VILLAGE_SMITH_DAY_ONE, RAZOR_SWORD, {Category::cMountainVillage,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); + locationTable[MOUNTAIN_VILLAGE_SMITH_DAY_TWO] = ItemLocation::Base (0x2C, 0x39, false, "MV Gilded Sword", MOUNTAIN_VILLAGE_SMITH_DAY_TWO, GILDED_SWORD, {Category::cMountainVillage,Category::cDayTwo, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); locationTable[MOUNTAIN_VILLAGE_FROG_CHOIR] = ItemLocation::Base (0x5A, 0x0C, false, "MV Frog Choir", MOUNTAIN_VILLAGE_FROG_CHOIR, PIECE_OF_HEART, {Category::cMountainVillage, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); locationTable[MOUNTAIN_VILLAGE_DARMANI] = ItemLocation::Base (0x4E, 0x79, false, "MV Graveyard Darmani", MOUNTAIN_VILLAGE_DARMANI, GORON_MASK, {Category::cMountainVillage, Category::cTransformMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); locationTable[MOUNTAIN_VILLAGE_HUNGRY_GORON] = ItemLocation::Base (0x50, 0x88, false, "MV Hungry Goron", MOUNTAIN_VILLAGE_HUNGRY_GORON, DON_GEROS_MASK, {Category::cMountainVillage, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); locationTable[MOUNTAIN_WATERFALL_CHEST] = ItemLocation::Chest (0x5A, 0x00, true, "MV Waterfall Chest", MOUNTAIN_WATERFALL_CHEST, RED_RUPEE, {Category::cMountainVillage,Category::cChest,Category::cDayOne }, SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); locationTable[MOUNTAIN_VILLAGE_SPRING_WATER_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x1B, true, "MV Spring Water Grotto", MOUNTAIN_VILLAGE_SPRING_WATER_GROTTO_CHEST, RED_RUPEE, {Category::cMountainVillage, Category::cGrotto,Category::cChest,Category::cDayOne }, SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); - + locationTable[MOUNTAIN_VILLAGE_KEATON_QUIZ] = ItemLocation::Base (0x5A, 0x03, false, "MV Keaton Quiz", MOUNTAIN_VILLAGE_KEATON_QUIZ, PIECE_OF_HEART, {Category::cMountainVillage, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MOUNTAIN_VILLAGE ); + //N Clock Town locationTable[N_CLOCK_TOWN_GREAT_FAIRY_DEKU] = ItemLocation::Base (0x26, 0x0E, false, "NCT Great Fairy (Deku)", N_CLOCK_TOWN_GREAT_FAIRY_DEKU, PROGRESSIVE_MAGIC_METER, {Category::cNorthClockTown, Category::cFairyFountain,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_N_CLOCK_TOWN ); - //locationTable[N_CLOCK_TOWN_BOMBERS_HIDE_SEEK] = ItemLocation::Base (0x6E, 0x50, true, "NCT Bombers Hide n Seek", N_CLOCK_TOWN_BOMBERS_HIDE_SEEK, BOMBERS_NOTEBOOK, {Category::cNorthClockTown,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_N_CLOCK_TOWN ); - locationTable[N_CLOCK_TOWN_KEATON_QUIZ] = ItemLocation::Base (0x6E, 0x0C, false, "NCT Keaton Quiz", N_CLOCK_TOWN_KEATON_QUIZ, PIECE_OF_HEART, {Category::cNorthClockTown, Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_N_CLOCK_TOWN ); + //locationTable[N_CLOCK_TOWN_BOMBERS_HIDE_SEEK] = ItemLocation::Base (0x6E, 0x50, true, "NCT Bombers Hide n Seek", N_CLOCK_TOWN_BOMBERS_HIDE_SEEK, BOMBERS_NOTEBOOK, {Category::cNorthClockTown,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_N_CLOCK_TOWN ); + locationTable[N_CLOCK_TOWN_KEATON_QUIZ] = ItemLocation::Base (0x6E, 0x03, false, "NCT Keaton Quiz", N_CLOCK_TOWN_KEATON_QUIZ, PIECE_OF_HEART, {Category::cNorthClockTown, Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_N_CLOCK_TOWN ); locationTable[N_CLOCK_TOWN_DEKU_PLAYGROUND_3DAYS] = ItemLocation::Base (0x1E, 0x0C, false, "NCT Deku Playground 3 Days Reward", N_CLOCK_TOWN_DEKU_PLAYGROUND_3DAYS, PIECE_OF_HEART, {Category::cNorthClockTown, Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_N_CLOCK_TOWN ); locationTable[N_CLOCK_TOWN_TREE] = ItemLocation::Collectable(0x6E, 0x00, false, "NCT Tree", N_CLOCK_TOWN_TREE, PIECE_OF_HEART, {Category::cNorthClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_N_CLOCK_TOWN ); locationTable[N_CLOCK_TOWN_OLD_LADY] = ItemLocation::Base (0x6E, 0x8D, false, "NCT Old Lady", N_CLOCK_TOWN_OLD_LADY, BLAST_MASK, {Category::cNorthClockTown, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_N_CLOCK_TOWN ); @@ -135,22 +136,22 @@ void LocationTable_Init() { locationTable[PINNACLE_ROCK_SEAHORSES] = ItemLocation::Base (0x25, 0x0C, false, "PR Seahorses", PINNACLE_ROCK_SEAHORSES, PIECE_OF_HEART, {Category::cPinnacleRock, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_PINNACLE_ROCK ); locationTable[PINNACLE_ROCK_UPPER_CHEST] = ItemLocation::Chest (0x25, 0x02, true, "PR Upper Chest", PINNACLE_ROCK_UPPER_CHEST, RED_RUPEE, {Category::cPinnacleRock,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_PINNACLE_ROCK ); locationTable[PINNACLE_ROCK_LOWER_CHEST] = ItemLocation::Chest (0x25, 0x01, true, "PR Lower Chest", PINNACLE_ROCK_LOWER_CHEST, RED_RUPEE, {Category::cPinnacleRock,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_PINNACLE_ROCK ); - locationTable[PINNACLE_ROCK_ZORA_EGG1] = ItemLocation::Collectable(0x25, 0x69, true, "PR Zora Egg 1", PINNACLE_ROCK_ZORA_EGG1, ZORA_EGG, {Category::cPinnacleRock, Category::cBottleCatch,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_PINNACLE_ROCK ); - locationTable[PINNACLE_ROCK_ZORA_EGG2] = ItemLocation::Collectable(0x25, 0x69, true, "PR Zora Egg 2", PINNACLE_ROCK_ZORA_EGG2, ZORA_EGG, {Category::cPinnacleRock, Category::cBottleCatch,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_PINNACLE_ROCK ); - locationTable[PINNACLE_ROCK_ZORA_EGG3] = ItemLocation::Collectable(0x25, 0x69, true, "PR Zora Egg 3", PINNACLE_ROCK_ZORA_EGG3, ZORA_EGG, {Category::cPinnacleRock, Category::cBottleCatch,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_PINNACLE_ROCK ); + locationTable[PINNACLE_ROCK_ZORA_EGG1] = ItemLocation::Collectable(0x25, 0x69, true, "PR Zora Egg 1", PINNACLE_ROCK_ZORA_EGG1, ZORA_EGG, {Category::cPinnacleRock, Category::cBottleCatch,Category::cDayOne, Category::cZoraEgg}, SpoilerCollectionCheckGroup::GROUP_PINNACLE_ROCK ); + locationTable[PINNACLE_ROCK_ZORA_EGG2] = ItemLocation::Collectable(0x25, 0x69, true, "PR Zora Egg 2", PINNACLE_ROCK_ZORA_EGG2, ZORA_EGG, {Category::cPinnacleRock, Category::cBottleCatch,Category::cDayOne, Category::cZoraEgg}, SpoilerCollectionCheckGroup::GROUP_PINNACLE_ROCK ); + locationTable[PINNACLE_ROCK_ZORA_EGG3] = ItemLocation::Collectable(0x25, 0x69, true, "PR Zora Egg 3", PINNACLE_ROCK_ZORA_EGG3, ZORA_EGG, {Category::cPinnacleRock, Category::cBottleCatch,Category::cDayOne, Category::cZoraEgg}, SpoilerCollectionCheckGroup::GROUP_PINNACLE_ROCK ); //Road to Ikana locationTable[ROAD_TO_IKANA_PILLAR_CHEST] = ItemLocation::Chest (0x53, 0x00, true, "Road to Ikana Pillar Chest", ROAD_TO_IKANA_PILLAR_CHEST, RED_RUPEE, {Category::cRoadToIkana,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); locationTable[ROAD_TO_IKANA_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x16, true, "Road to Ikana Grotto", ROAD_TO_IKANA_GROTTO_CHEST, BOMBCHU_5, {Category::cRoadToIkana,Category::cGrotto,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_IKANA_CANYON ); //Road to Southern Swamp - locationTable[ROAD_TO_SS_ARCHERY_1] = ItemLocation::Base (0x24, 0x47, false, "Road to Southern Swamp Archery 1", ROAD_TO_SS_ARCHERY_1, PROGRESSIVE_BOW, {Category::cRoadToSouthernSwamp,Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[ROAD_TO_SS_ARCHERY_2] = ItemLocation::Base (0x24, 0x0C, false, "Road to Southern Swamp Archery 2", ROAD_TO_SS_ARCHERY_2, PIECE_OF_HEART, {Category::cRoadToSouthernSwamp,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[ROAD_TO_SS_ARCHERY_1] = ItemLocation::Base (0x24, 0x47, false, "Road to Southern Swamp Archery 1", ROAD_TO_SS_ARCHERY_1, PROGRESSIVE_BOW, {Category::cRoadToSouthernSwamp,Category::cMinigame,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[ROAD_TO_SS_ARCHERY_2] = ItemLocation::Base (0x24, 0x0C, false, "Road to Southern Swamp Archery 2", ROAD_TO_SS_ARCHERY_2, PIECE_OF_HEART, {Category::cRoadToSouthernSwamp,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[ROAD_TO_SS_TREE] = ItemLocation::Collectable(0x40, 0x00, false, "Road to Southern Swamp Tree", ROAD_TO_SS_TREE, PIECE_OF_HEART, {Category::cRoadToSouthernSwamp, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[ROAD_TO_SWAMP_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x1E, true, "Road to Southern Swamp Grotto", ROAD_TO_SWAMP_GROTTO_CHEST, RED_RUPEE, {Category::cRoadToSouthernSwamp,Category::cGrotto, Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); //Romani Ranch - locationTable[ROMANI_RANCH_ALIEN_DEFENSE] = ItemLocation::Base (0x35, 0x60, true, "RR Alien Defense", ROMANI_RANCH_ALIEN_DEFENSE, BOTTLE_WITH_MILK, {Category::cRomaniRanch,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); + locationTable[ROMANI_RANCH_ALIEN_DEFENSE] = ItemLocation::Base (0x35, 0x60, false, "RR Alien Defense", ROMANI_RANCH_ALIEN_DEFENSE, BOTTLE_WITH_MILK, {Category::cRomaniRanch}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); locationTable[ROMANI_RANCH_DOG_RACE] = ItemLocation::Base (0x41, 0x0C, false, "RR Dog Race", ROMANI_RANCH_DOG_RACE, PIECE_OF_HEART, {Category::cRomaniRanch,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); locationTable[ROMANI_RANCH_GROG] = ItemLocation::Base (0x42, 0x7F, false, "RR Grog", ROMANI_RANCH_GROG, BUNNY_HOOD, {Category::cRomaniRanch, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); locationTable[ROMANI_RANCH_CREMIA_ESCORT] = ItemLocation::Base (0x2D, 0x82, true, "RR Cremia Escort", ROMANI_RANCH_CREMIA_ESCORT, ROMANIS_MASK, {Category::cRomaniRanch, Category::cVanillaMask,Category::cDayTwo}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); @@ -158,25 +159,25 @@ void LocationTable_Init() { locationTable[DOGGY_RACETRACK_ROOF_CHEST] = ItemLocation::Chest (0x41, 0x00, true, "RR Doggy Racetrack Roof Chest", DOGGY_RACETRACK_ROOF_CHEST, PURPLE_RUPEE, {Category::cRomaniRanch,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ROMANI_RANCH ); //S Clock Town - locationTable[S_CLOCK_TOWN_SCRUB_TRADE] = ItemLocation::Base (0x6F, 0x97, true, "SCT Scrub Trade", S_CLOCK_TOWN_SCRUB_TRADE, LAND_TITLE, {Category::cSouthClockTown,Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); + locationTable[S_CLOCK_TOWN_SCRUB_TRADE] = ItemLocation::Base (0x6F, 0x97, true, "SCT Scrub Trade", S_CLOCK_TOWN_SCRUB_TRADE, LAND_TITLE, {Category::cSouthClockTown,Category::cDekuScrub,Category::cDayOne, Category::cTradeItem}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); locationTable[S_CLOCK_TOWN_POSTBOX] = ItemLocation::Base (0x6F, 0xBA, false, "SCT Postbox", S_CLOCK_TOWN_POSTBOX, PIECE_OF_HEART, {Category::cSouthClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); locationTable[S_CLOCK_TOWN_CLOCK_TOWER_ENTRANCE] = ItemLocation::Collectable(0x6F, 0x00, false, "SCT Clock Tower Entrance", S_CLOCK_TOWN_CLOCK_TOWER_ENTRANCE, PIECE_OF_HEART, {Category::cSouthClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); locationTable[S_CLOCK_TOWN_STRAW_ROOF_CHEST] = ItemLocation::Chest (0x6F, 0x00, true, "SCT Straw Roof Chest", S_CLOCK_TOWN_STRAW_ROOF_CHEST, RED_RUPEE, {Category::cSouthClockTown,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); locationTable[S_CLOCK_TOWN_FINAL_DAY_CHEST] = ItemLocation::Chest (0x6F, 0x01, true, "SCT Final Day Chest", S_CLOCK_TOWN_FINAL_DAY_CHEST, PURPLE_RUPEE, {Category::cSouthClockTown,Category::cChest ,Category::cDayThree}, SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); - locationTable[S_CLOCK_TOWN_BANK_REWARD_1] = ItemLocation::Base (0x6F, 0x48, false, "SCT Bank Reward 1", S_CLOCK_TOWN_BANK_REWARD_1, PROGRESSIVE_WALLET, {Category::cSouthClockTown,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); - locationTable[S_CLOCK_TOWN_BANK_REWARD_2] = ItemLocation::Base (0x6F, 0x02, false, "SCT Bank Reward 2", S_CLOCK_TOWN_BANK_REWARD_2, BLUE_RUPEE, {Category::cSouthClockTown,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); + locationTable[S_CLOCK_TOWN_BANK_REWARD_1] = ItemLocation::Base (0x6F, 0x48, false, "SCT Bank Reward 1", S_CLOCK_TOWN_BANK_REWARD_1, PROGRESSIVE_WALLET, {Category::cSouthClockTown,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); + locationTable[S_CLOCK_TOWN_BANK_REWARD_2] = ItemLocation::Base (0x6F, 0x03, false, "SCT Bank Reward 2", S_CLOCK_TOWN_BANK_REWARD_2, BLUE_RUPEE, {Category::cSouthClockTown,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); locationTable[S_CLOCK_TOWN_BANK_REWARD_3] = ItemLocation::Base (0x6F, 0x0C, false, "SCT Bank Reward 3", S_CLOCK_TOWN_BANK_REWARD_3, PIECE_OF_HEART, {Category::cSouthClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_S_CLOCK_TOWN ); //Snowhead locationTable[SNOWHEAD_GREAT_FAIRY] = ItemLocation::Base (0x26, 0x2B, false, "SH Great Fairy", SNOWHEAD_GREAT_FAIRY, PROGRESSIVE_MAGIC_METER, {Category::cSnowhead, Category::cFairyFountain,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SNOWHEAD ); //Southern Swamp - locationTable[SOUTHERN_SWAMP_KOUME] = ItemLocation::Base (0x57, 0x43, false, "SS Koume", SOUTHERN_SWAMP_KOUME, PICTOGRAPH_BOX, {Category::cSouthernSwamp,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[SOUTHERN_SWAMP_KOTAKE] = ItemLocation::Base (0x0A, 0x59, false, "SS Kotake", SOUTHERN_SWAMP_KOTAKE, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[SOUTHERN_SWAMP_KOTAKE_IN_WOODS] = ItemLocation::Base (0x64, 0x59, false, "SS Mystery Woods Kotake", SOUTHERN_SWAMP_KOTAKE_IN_WOODS, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[SOUTHERN_SWAMP_SCRUB_TRADE] = ItemLocation::Base (0x45, 0x98, true, "SS Deku Scrub Merchant Trade", SOUTHERN_SWAMP_SCRUB_TRADE, SWAMP_TITLE, {Category::cSouthernSwamp, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_KOUME] = ItemLocation::Base (0x57, 0x43, false, "SS Koume", SOUTHERN_SWAMP_KOUME, PICTOGRAPH_BOX, {Category::cSouthernSwamp,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_KOTAKE] = ItemLocation::Base (0x0A, 0x59, false, "SS Kotake", SOUTHERN_SWAMP_KOTAKE, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_KOTAKE_IN_WOODS] = ItemLocation::Base (0x64, 0x59, false, "SS Mystery Woods Kotake", SOUTHERN_SWAMP_KOTAKE_IN_WOODS, BOTTLE_WITH_RED_POTION, {Category::cSouthernSwamp, Category::cAlternateCheck, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_SCRUB_TRADE] = ItemLocation::Base (0x45, 0x98, true, "SS Deku Scrub Merchant Trade", SOUTHERN_SWAMP_SCRUB_TRADE, SWAMP_TITLE, {Category::cSouthernSwamp, Category::cDekuScrub,Category::cDayOne, Category::cTradeItem}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[SOUTHERN_SWAMP_PICTOGRAPH_WINNER] = ItemLocation::Base (0x57, 0xBA, false, "SS Pictograph Contest Winner", SOUTHERN_SWAMP_PICTOGRAPH_WINNER, PIECE_OF_HEART, {Category::cSouthernSwamp, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[SOUTHERN_SWAMP_BOAT_ARCHERY] = ItemLocation::Base (0x57, 0x5A, false, "SS Boat Archery", SOUTHERN_SWAMP_BOAT_ARCHERY, EMPTY_BOTTLE2, {Category::cSouthernSwamp, Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_BOAT_ARCHERY] = ItemLocation::Base (0x57, 0x5A, false, "SS Boat Archery", SOUTHERN_SWAMP_BOAT_ARCHERY, EMPTY_BOTTLE1, {Category::cSouthernSwamp, Category::cMinigame, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[SWAMP_TOURIST_CENTER_ROOF] = ItemLocation::Collectable(0x45, 0x00, false, "SS Tourist Center Roof", SWAMP_TOURIST_CENTER_ROOF, PIECE_OF_HEART, {Category::cSouthernSwamp, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[SOUTHERN_SWAMP_SPIDER_HOUSE_REWARD] = ItemLocation::Base (0x27, 0x8A, false, "SSH Reward", SOUTHERN_SWAMP_SPIDER_HOUSE_REWARD, MASK_OF_TRUTH, {Category::cSouthernSwamp, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); locationTable[SOUTHERN_SWAMP_MUSIC_STATUE] = ItemLocation::Base (0x45, 0x72, false, "SS Music Statue", SOUTHERN_SWAMP_MUSIC_STATUE, SONG_OF_SOARING, {Category::cSouthernSwamp, Category::cSong,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); @@ -185,25 +186,28 @@ void LocationTable_Init() { locationTable[SOUTHERN_SWAMP_KOTAKE_MUSHROOM_SALE] = ItemLocation::Base (0x0A, 0x5D, true, "SS Kotake Mushroom Sale", SOUTHERN_SWAMP_KOTAKE_MUSHROOM_SALE, RED_RUPEE, {Category::cSouthernSwamp,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); //locationTable[SOUTHERN_SWAMP_PICTOGRAPH_STANDARD] = ItemLocation::Base (0x0A, 0x00, true, "SS Pictograph Standard", SOUTHERN_SWAMP_PICTOGRAPH_STANDARD, BLUE_RUPEE, {Category::cSouthernSwamp, Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); //locationTable[SOUTHERN_SWAMP_PICTOGRAPH_GOOD] = ItemLocation::Base (0x0A, 0x00, true, "SS Pictograph Good", SOUTHERN_SWAMP_PICTOGRAPH_GOOD, RED_RUPEE, {Category::cSouthernSwamp,Category::cMinigame}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); - locationTable[SOUTHERN_SWAMP_SCRUB_PURCHASE] = ItemLocation::Base (0x45, 0x35, true, "SS Deku Scrub Merchant Purchase", SOUTHERN_SWAMP_SCRUB_PURCHASE, MAGIC_BEAN, {Category::cSouthernSwamp, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_SCRUB_PURCHASE] = ItemLocation::Base (0x45, 0x35, true, "SS Deku Scrub Merchant Purchase", SOUTHERN_SWAMP_SCRUB_PURCHASE, MAGIC_BEAN, {Category::cSouthernSwamp, Category::cDekuScrub,Category::cDayOne, Category::cShop}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_SCRUB_PURCHASE_CLEAR] = ItemLocation::Base (0x00, 0x35, true, "SS Deku Scrub Merchant Purchase (Cleared)", SOUTHERN_SWAMP_SCRUB_PURCHASE_CLEAR, MAGIC_BEAN, {Category::cSouthernSwamp, Category::cDekuScrub,Category::cDayOne, Category::cShop, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SWAMP_TOURIST_CENTER_ROOF_CLEAR] = ItemLocation::Collectable(0x00, 0x00, false, "SS Tourist Center Roof (Cleared)", SWAMP_TOURIST_CENTER_ROOF_CLEAR, PIECE_OF_HEART, {Category::cSouthernSwamp, Category::cVanillaHeartPiece,Category::cDayOne, Category::cAlternateCheck}, SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); + locationTable[SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR] = ItemLocation::Base (0x00, 0x98, true, "SS Deku Scrub Merchant Trade (Cleared)", SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR, SWAMP_TITLE, {Category::cSouthernSwamp, Category::cDekuScrub,Category::cDayOne,Category::cTradeItem, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_SOUTHERN_SWAMP ); //Stock Pot Inn - locationTable[STOCKPOTINN_RESERVATION] = ItemLocation::Base (0x61, 0xA0, true, "SPI Reservation", STOCKPOTINN_RESERVATION, ROOM_KEY, {Category::cStockPotInn,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_MIDNIGHT_MEETING] = ItemLocation::Base (0x61, 0xAA, true, "SPI Midnight Meeting", STOCKPOTINN_MIDNIGHT_MEETING, LETTER_KAFEI, {Category::cStockPotInn,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_TOILET_HAND] = ItemLocation::Base (0x61, 0x01, false, "SPI Toilet Hand", STOCKPOTINN_TOILET_HAND, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_GRANDMA_SHORT_STORY] = ItemLocation::Base (0x61, 0x0C, false, "SPI Grandma Short Story", STOCKPOTINN_GRANDMA_SHORT_STORY, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_GRANDMA_LONG_STORY] = ItemLocation::Base (0x61, 0xBA, false, "SPI Grandma Long Story", STOCKPOTINN_GRANDMA_LONG_STORY, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); - locationTable[STOCKPOTINN_ANJU_AND_KAFEI] = ItemLocation::Base (0x61, 0x85, false, "SPI Anju And Kafei", STOCKPOTINN_ANJU_AND_KAFEI, COUPLES_MASK, {Category::cStockPotInn, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); + locationTable[STOCKPOTINN_RESERVATION] = ItemLocation::Base (0x61, 0xA0, true, "SPI Reservation", STOCKPOTINN_RESERVATION, ROOM_KEY, {Category::cStockPotInn,Category::cDayOne, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); + locationTable[STOCKPOTINN_MIDNIGHT_MEETING] = ItemLocation::Base (0x61, 0xAA, true, "SPI Midnight Meeting", STOCKPOTINN_MIDNIGHT_MEETING, LETTER_KAFEI, {Category::cStockPotInn,Category::cDayOne, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); + locationTable[STOCKPOTINN_TOILET_HAND] = ItemLocation::Base (0x61, 0x01, false, "SPI Toilet Hand", STOCKPOTINN_TOILET_HAND, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); + locationTable[STOCKPOTINN_GRANDMA_SHORT_STORY] = ItemLocation::Base (0x61, 0x0C, false, "SPI Grandma Short Story", STOCKPOTINN_GRANDMA_SHORT_STORY, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); + locationTable[STOCKPOTINN_GRANDMA_LONG_STORY] = ItemLocation::Base (0x61, 0xBA, false, "SPI Grandma Long Story", STOCKPOTINN_GRANDMA_LONG_STORY, PIECE_OF_HEART, {Category::cStockPotInn, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); + locationTable[STOCKPOTINN_ANJU_AND_KAFEI] = ItemLocation::Base (0x61, 0x85, false, "SPI Anju And Kafei", STOCKPOTINN_ANJU_AND_KAFEI, COUPLES_MASK, {Category::cStockPotInn, Category::cDayThree, Category::cAnjuAndKafei}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); locationTable[STOCKPOTINN_STAFF_ROOM_CHEST] = ItemLocation::Chest (0x61, 0x01, true, "SPI Staff Room Chest", STOCKPOTINN_STAFF_ROOM_CHEST, SILVER_RUPEE, {Category::cStockPotInn,Category::cChest ,Category::cDayThree}, SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); locationTable[STOCKPOTINN_GUEST_ROOM_CHEST] = ItemLocation::Chest (0x61, 0x00, true, "SPI Guest Room Chest", STOCKPOTINN_GUEST_ROOM_CHEST, SILVER_RUPEE, {Category::cStockPotInn,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_STOCKPOTINN ); //Stone Tower - locationTable[STONE_TOWER_INVERTED_RIGHT_CHEST] = ItemLocation::Chest (0x18, 0x1D, true, "IST Right Chest", STONE_TOWER_INVERTED_RIGHT_CHEST, SILVER_RUPEE, {Category::cStoneTower,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_STONE_TOWER ); - locationTable[STONE_TOWER_INVERTED_CENTER_CHEST] = ItemLocation::Chest (0x18, 0x1E, true, "IST Center Chest", STONE_TOWER_INVERTED_CENTER_CHEST, BOMBCHU_10, {Category::cStoneTower,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_STONE_TOWER ); - locationTable[STONE_TOWER_INVERTED_LEFT_CHEST] = ItemLocation::Chest (0x18, 0x1F, true, "IST Left Chest", STONE_TOWER_INVERTED_LEFT_CHEST, MAGIC_BEAN, {Category::cStoneTower,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_STONE_TOWER ); + locationTable[STONE_TOWER_INVERTED_RIGHT_CHEST] = ItemLocation::Chest (0x59, 0x1D, true, "IST Right Chest", STONE_TOWER_INVERTED_RIGHT_CHEST, SILVER_RUPEE, {Category::cStoneTower,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_STONE_TOWER ); + locationTable[STONE_TOWER_INVERTED_CENTER_CHEST] = ItemLocation::Chest (0x59, 0x1E, true, "IST Center Chest", STONE_TOWER_INVERTED_CENTER_CHEST, BOMBCHU_10, {Category::cStoneTower,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_STONE_TOWER ); + locationTable[STONE_TOWER_INVERTED_LEFT_CHEST] = ItemLocation::Chest (0x59, 0x1F, true, "IST Left Chest", STONE_TOWER_INVERTED_LEFT_CHEST, MAGIC_BEAN, {Category::cStoneTower,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_STONE_TOWER ); //Termina Field - locationTable[TERMINA_FIELD_MOONS_TEAR] = ItemLocation::Base (0x2D, 0x96, true, "TF Moon's Tear", TERMINA_FIELD_MOONS_TEAR, MOONS_TEAR, {Category::cTerminaField,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); + locationTable[TERMINA_FIELD_MOONS_TEAR] = ItemLocation::Base (0x2D, 0x96, true, "TF Moon's Tear", TERMINA_FIELD_MOONS_TEAR, MOONS_TEAR, {Category::cTerminaField,Category::cDayOne, Category::cTradeItem}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); locationTable[TERMINA_FIELD_GOSSIP_STONES] = ItemLocation::Base (0x07, 0x0C, false, "TF Gossip Stones", TERMINA_FIELD_GOSSIP_STONES, PIECE_OF_HEART, {Category::cTerminaField,Category::cGrotto, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); locationTable[TERMINA_FIELD_BUSINESS_SCRUB] = ItemLocation::Base (0x07, 0x01, false, "TF Business Scrub", TERMINA_FIELD_BUSINESS_SCRUB, PIECE_OF_HEART, {Category::cTerminaField,Category::cGrotto,Category::cDekuScrub, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); locationTable[TERMINA_FIELD_PEAHAT_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x04, true, "TF Peahat Grotto Chest", TERMINA_FIELD_PEAHAT_GROTTO_CHEST, PIECE_OF_HEART, {Category::cTerminaField,Category::cGrotto, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TERMINA_FIELD ); @@ -218,20 +222,20 @@ void LocationTable_Init() { //Twin Islands locationTable[HOT_SPRING_WATER_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x02, true, "TI Hot Spring Water Grotto Chest", HOT_SPRING_WATER_GROTTO_CHEST, RED_RUPEE, {Category::cTwinIslands, Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); - locationTable[TWIN_ISLANDS_GORON_RACE] = ItemLocation::Base (0x6B, 0x6A, true, "TI Goron Racetrack Race", TWIN_ISLANDS_GORON_RACE, GOLD_DUST, {Category::cTwinIslands,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); + locationTable[TWIN_ISLANDS_GORON_RACE] = ItemLocation::Base (0x6B, 0x6A, true, "TI Goron Racetrack Race", TWIN_ISLANDS_GORON_RACE, GOLD_DUST, {Category::cTwinIslands, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); locationTable[TWIN_ISLANDS_GORON_RACETRACK_GROTTO_CHEST] = ItemLocation::Chest (0x07, 0x19, true, "TI Goron Racetrack Grotto", TWIN_ISLANDS_GORON_RACETRACK_GROTTO_CHEST, BOMBCHU_5, {Category::cTwinIslands, Category::cGrotto,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); locationTable[TWIN_ISLANDS_UNDERWATER_RAMP_CHEST] = ItemLocation::Chest (0x5E, 0x06, true, "TI Underwater Ramp Chest", TWIN_ISLANDS_UNDERWATER_RAMP_CHEST, PIECE_OF_HEART, {Category::cTwinIslands, Category::cVanillaHeartPiece, Category::cChest, Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); locationTable[TWIN_ISLANDS_CAVE_CHEST] = ItemLocation::Chest (0x5E, 0x00, true, "TI Cave Chest", TWIN_ISLANDS_CAVE_CHEST, RED_RUPEE, {Category::cTwinIslands,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); - + locationTable[TWIN_ISLANDS_LULLABY_INTRO] = ItemLocation::Base (0x5D, 0x00, false, "TI Lullaby Intro", TWIN_ISLANDS_LULLABY_INTRO, LULLABY_INTRO, {Category::cTwinIslands, Category::cSong, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS ); //W Clock Town - locationTable[W_CLOCK_TOWN_BOMB_BAG_BUY] = ItemLocation::Base (0x0D, 0x1B, false, "WCT Bomb Bag Purchase", W_CLOCK_TOWN_BOMB_BAG_BUY, PROGRESSIVE_BOMB_BAG, {Category::cWestClockTown,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_BIG_BOMB_BAG_BUY] = ItemLocation::Base (0x0D, 0x1C, false, "WCT Big Bomb Bag Purchase", W_CLOCK_TOWN_BIG_BOMB_BAG_BUY, PROGRESSIVE_BOMB_BAG, {Category::cWestClockTown,Category::cDayTwo}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_POSTMANS_GAME] = ItemLocation::Base (0x2E, 0x0C, false, "WCT Postman's Game", W_CLOCK_TOWN_POSTMANS_GAME, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_ROSA_SISTERS] = ItemLocation::Base (0x6D, 0x0C, false, "WCT Rosa Sisters", W_CLOCK_TOWN_ROSA_SISTERS, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_SWORDSMANS_SCHOOL] = ItemLocation::Base (0x54, 0x0C, false, "WCT Swordsman's School", W_CLOCK_TOWN_SWORDSMANS_SCHOOL, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY] = ItemLocation::Base (0x0D, 0x7E, false, "WCT All-Night Mask Purchase", W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY, ALL_NIGHT_MASK, {Category::cWestClockTown, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_BOMB_BAG_BUY] = ItemLocation::Base (0x0D, 0x1B, false, "WCT Bomb Bag Purchase", W_CLOCK_TOWN_BOMB_BAG_BUY, PROGRESSIVE_BOMB_BAG, {Category::cWestClockTown,Category::cDayOne, Category::cShop, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_BIG_BOMB_BAG_BUY] = ItemLocation::Base (0x0D, 0x1C, false, "WCT Big Bomb Bag Purchase", W_CLOCK_TOWN_BIG_BOMB_BAG_BUY, PROGRESSIVE_BOMB_BAG, {Category::cWestClockTown,Category::cDayTwo, Category::cShop, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_POSTMANS_GAME] = ItemLocation::Base (0x2E, 0x0C, false, "WCT Postman's Game", W_CLOCK_TOWN_POSTMANS_GAME, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_ROSA_SISTERS] = ItemLocation::Base (0x6D, 0x0C, false, "WCT Rosa Sisters", W_CLOCK_TOWN_ROSA_SISTERS, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_SWORDSMANS_SCHOOL] = ItemLocation::Base (0x54, 0x0C, false, "WCT Swordsman's School", W_CLOCK_TOWN_SWORDSMANS_SCHOOL, PIECE_OF_HEART, {Category::cWestClockTown, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY] = ItemLocation::Base (0x0D, 0x7E, false, "WCT All-Night Mask Purchase", W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY, ALL_NIGHT_MASK, {Category::cWestClockTown, Category::cVanillaMask,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); //locationTable[W_CLOCK_TOWN_LOTTERY] = ItemLocation::Base (0x39, 0x00, true, "WCT Lottery", W_CLOCK_TOWN_LOTTERY, PURPLE_RUPEE, {Category::cWestClockTown}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); - locationTable[W_CLOCK_TOWN_BOMB_SHOP_GORON] = ItemLocation::Base (0x0D, 0x34, true, "WCT Bomb Shop Goron", W_CLOCK_TOWN_BOMB_SHOP_GORON, POWDER_KEG, {Category::cWestClockTown, Category::cMerchant,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); + locationTable[W_CLOCK_TOWN_BOMB_SHOP_GORON] = ItemLocation::Base (0x0D, 0x34, true, "WCT Bomb Shop Goron", W_CLOCK_TOWN_BOMB_SHOP_GORON, POWDER_KEG, {Category::cWestClockTown, Category::cMerchant,Category::cDayOne, Category::cShop, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_W_CLOCK_TOWN ); //Woodfall locationTable[WOODFALL_BRIDGE_CHEST] = ItemLocation::Chest (0x46, 0x01, true, "WF Bridge Chest", WOODFALL_BRIDGE_CHEST, PIECE_OF_HEART, {Category::cWoodfall, Category::cVanillaHeartPiece, Category::cChest, Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_WOODFALL ); @@ -241,8 +245,8 @@ void LocationTable_Init() { //Zora Cape locationTable[ZORA_CAPE_GREAT_FAIRY] = ItemLocation::Base (0x26, 0xB2, false, "ZC Great Fairy", ZORA_CAPE_GREAT_FAIRY, DOUBLE_DEFENSE, {Category::cZoraCape,Category::cFairyFountain,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); - locationTable[ZORA_CAPE_BEAVER_RACE_1] = ItemLocation::Base (0x4A, 0x5A, false, "ZC Beaver Race 1", ZORA_CAPE_BEAVER_RACE_1, EMPTY_BOTTLE1, {Category::cZoraCape,Category::cMinigame,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); - locationTable[ZORA_CAPE_BEAVER_RACE_2] = ItemLocation::Base (0x4A, 0x0C, false, "ZC Beaver Race 2", ZORA_CAPE_BEAVER_RACE_2, PIECE_OF_HEART, {Category::cZoraCape,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); + locationTable[ZORA_CAPE_BEAVER_RACE_1] = ItemLocation::Base (0x4A, 0x5A, false, "ZC Beaver Race 1", ZORA_CAPE_BEAVER_RACE_1, EMPTY_BOTTLE2, {Category::cZoraCape,Category::cMinigame, Category::cMainInventory}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); + locationTable[ZORA_CAPE_BEAVER_RACE_2] = ItemLocation::Base (0x4A, 0x0C, false, "ZC Beaver Race 2", ZORA_CAPE_BEAVER_RACE_2, PIECE_OF_HEART, {Category::cZoraCape,Category::cMinigame, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); locationTable[ZORA_CAPE_LIKE_LIKE] = ItemLocation::Collectable(0x38, 0x00, false, "ZC Like Like HP", ZORA_CAPE_LIKE_LIKE, PIECE_OF_HEART, {Category::cZoraCape, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); locationTable[ZORA_CAPE_LEDGE_NO_TREE] = ItemLocation::Chest (0x38, 0x01, true, "ZC Ledge Without Tree Chest", ZORA_CAPE_LEDGE_NO_TREE, RED_RUPEE, {Category::cZoraCape,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); locationTable[ZORA_CAPE_LEDGE_WITH_TREE] = ItemLocation::Chest (0x38, 0x02, true, "ZC Ledge With Tree Chest", ZORA_CAPE_LEDGE_WITH_TREE, RED_RUPEE, {Category::cZoraCape,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); @@ -250,10 +254,10 @@ void LocationTable_Init() { locationTable[ZORA_CAPE_UNDERWATER_CHEST] = ItemLocation::Chest (0x38, 0x00, true, "ZC Underwater Chest", ZORA_CAPE_UNDERWATER_CHEST, PURPLE_RUPEE, {Category::cZoraCape,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ZORA_CAPE ); //Zora Hall - locationTable[ZORA_HALL_SCRUB_TRADE] = ItemLocation::Base (0x4C, 0x9A, true, "ZH Deku Scrub Merchant Trade", ZORA_HALL_SCRUB_TRADE, OCEAN_TITLE, {Category::cZoraHall, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); - locationTable[ZORA_HALL_EVAN] = ItemLocation::Base (0x4C, 0x0C, false, "ZH Deku Evan", ZORA_HALL_EVAN, PIECE_OF_HEART, {Category::cZoraHall, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); + locationTable[ZORA_HALL_SCRUB_TRADE] = ItemLocation::Base (0x4C, 0x9A, true, "ZH Deku Scrub Merchant Trade", ZORA_HALL_SCRUB_TRADE, OCEAN_TITLE, {Category::cZoraHall, Category::cDekuScrub,Category::cDayOne, Category::cTradeItem}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); + locationTable[ZORA_HALL_EVAN] = ItemLocation::Base (0x4C, 0x0C, false, "ZH Evan", ZORA_HALL_EVAN, PIECE_OF_HEART, {Category::cZoraHall, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); locationTable[ZORA_HALL_LULU_ROOM_LEDGE] = ItemLocation::Collectable(0x4C, 0x00, false, "ZH Lulu's Room Ledge", ZORA_HALL_LULU_ROOM_LEDGE, PIECE_OF_HEART, {Category::cZoraHall, Category::cVanillaHeartPiece,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); - locationTable[ZORA_HALL_SCRUB_PURCHASE] = ItemLocation::Base (0x4C, 0x5C, true, "ZH Deku Scrub Merchant Purchase", ZORA_HALL_SCRUB_PURCHASE, GREEN_POTION_REFILL, {Category::cZoraHall, Category::cDekuScrub,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); + locationTable[ZORA_HALL_SCRUB_PURCHASE] = ItemLocation::Base (0x4C, 0x5C, true, "ZH Deku Scrub Merchant Purchase", ZORA_HALL_SCRUB_PURCHASE, GREEN_POTION_REFILL, {Category::cZoraHall, Category::cDekuScrub,Category::cDayOne, Category::cShop}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); //locationTable[ZORA_HALL_STAGE_LIGHTS] = ItemLocation::Base (0x33, 0x00, true, "ZH Stage Lights", ZORA_HALL_STAGE_LIGHTS, BLUE_RUPEE, {Category::cZoraHall}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); //locationTable[ZORA_HALL_BAD_PHOTO_LULU] = ItemLocation::Base (0x4C, 0x00, true, "ZH Bad Photograph of Lulu", ZORA_HALL_SCRUB_TRADE, BLUE_RUPEE, {Category::cZoraHall, Category::cDekuScrub}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); //locationTable[ZORA_HALL_GOOD_PHOTO_LULU] = ItemLocation::Base (0x4C, 0x00, true, "ZH Good Photograph of Lulu", ZORA_HALL_SCRUB_TRADE, BLUE_RUPEE, {Category::cZoraHall, Category::cDekuScrub}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_ZORA_HALL ); @@ -265,7 +269,7 @@ void LocationTable_Init() { //Woodfall Temple - locationTable[WOODFALL_TEMPLE_HEROS_BOW_CHEST] = ItemLocation::Chest (0x1B, 0x1B, true, "Woodfall Temple Hero's Bow Chest", WOODFALL_TEMPLE_HEROS_BOW_CHEST, PROGRESSIVE_BOW, {Category::cWoodfall, Category::cWoodfallTemple,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[WOODFALL_TEMPLE_HEROS_BOW_CHEST] = ItemLocation::Chest (0x1B, 0x1B, true, "Woodfall Temple Hero's Bow Chest", WOODFALL_TEMPLE_HEROS_BOW_CHEST, PROGRESSIVE_BOW, {Category::cWoodfall, Category::cWoodfallTemple,Category::cChest ,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); locationTable[WOODFALL_TEMPLE_MAP_CHEST] = ItemLocation::Chest (0x1B, 0x1D, true, "Woodfall Temple Map Chest", WOODFALL_TEMPLE_MAP_CHEST, WOODFALL_MAP, {Category::cWoodfall, Category::cWoodfallTemple,Category::cVanillaMap,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); locationTable[WOODFALL_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (0x1B, 0x1C, true, "Woodfall Temple Compass Chest", WOODFALL_TEMPLE_COMPASS_CHEST, WOODFALL_TEMPLE_COMPASS, {Category::cWoodfall, Category::cWoodfallTemple,Category::cVanillaCompass,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); locationTable[WOODFALL_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (0x1B, 0x1E, true, "Woodfall Temple Boss Key Chest", WOODFALL_TEMPLE_BOSS_KEY_CHEST, WOODFALL_TEMPLE_BOSS_KEY, {Category::cWoodfall, Category::cWoodfallTemple,Category::cVanillaBossKey,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); @@ -274,7 +278,7 @@ void LocationTable_Init() { locationTable[WOODFALL_TEMPLE_DEKU_PRINCESS] = ItemLocation::Base (0x1B, 0x5F, true, "Deku Princess", WOODFALL_TEMPLE_DEKU_PRINCESS, DEKU_PRINCESS, {Category::cWoodfall, Category::cWoodfallTemple, Category::cBottleCatch,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); //Snowhead Temple - locationTable[SNOWHEAD_TEMPLE_FIRE_ARROW_CHEST] = ItemLocation::Chest (0x21, 0x1B, true, "Snowhead Temple Fire Arrow Chest", SNOWHEAD_TEMPLE_FIRE_ARROW_CHEST, FIRE_ARROWS, {Category::cSnowhead, Category::cSnowheadTemple,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[SNOWHEAD_TEMPLE_FIRE_ARROW_CHEST] = ItemLocation::Chest (0x21, 0x1B, true, "Snowhead Temple Fire Arrow Chest", SNOWHEAD_TEMPLE_FIRE_ARROW_CHEST, FIRE_ARROWS, {Category::cSnowhead, Category::cSnowheadTemple,Category::cChest ,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); locationTable[SNOWHEAD_TEMPLE_MAP_CHEST] = ItemLocation::Chest (0x21, 0x1D, true, "Snowhead Temple Map Chest", SNOWHEAD_TEMPLE_MAP_CHEST, SNOWHEAD_TEMPLE_MAP, {Category::cSnowhead, Category::cSnowheadTemple, Category::cVanillaMap,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); locationTable[SNOWHEAD_TEMPLE_COMPASS_CHEST] = ItemLocation::Chest (0x21, 0x1C, true, "Snowhead Temple Compass Chest", SNOWHEAD_TEMPLE_COMPASS_CHEST, SNOWHEAD_TEMPLE_COMPASS, {Category::cSnowhead, Category::cSnowheadTemple, Category::cVanillaCompass,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); locationTable[SNOWHEAD_TEMPLE_BOSS_KEY_CHEST] = ItemLocation::Chest (0x21, 0x1E, true, "Snowhead Temple Boss Key Chest", SNOWHEAD_TEMPLE_BOSS_KEY_CHEST, SNOWHEAD_TEMPLE_BOSS_KEY, {Category::cSnowhead, Category::cSnowheadTemple, Category::cVanillaBossKey,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); @@ -283,7 +287,7 @@ void LocationTable_Init() { locationTable[SNOWHEAD_TEMPLE_BRIDGE_ROOM_CHEST] = ItemLocation::Chest (0x21, 0x01, true, "Snowhead Temple Bridge Room Chest", SNOWHEAD_TEMPLE_BRIDGE_ROOM_CHEST, SNOWHEAD_TEMPLE_SMALL_KEY, {Category::cSnowhead, Category::cSnowheadTemple, Category::cVanillaSmallKey,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); //Great Bay Temple - locationTable[GBT_ICE_ARROW_CHEST] = ItemLocation::Chest (0x49, 0x1B, true, "Great Bay Temple Ice Arrow Chest", GBT_ICE_ARROW_CHEST, ICE_ARROWS, {Category::cGreatBayTemple,Category::cChest,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[GBT_ICE_ARROW_CHEST] = ItemLocation::Chest (0x49, 0x1B, true, "Great Bay Temple Ice Arrow Chest", GBT_ICE_ARROW_CHEST, ICE_ARROWS, {Category::cGreatBayTemple,Category::cChest,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); locationTable[GBT_MAP_CHEST] = ItemLocation::Chest (0x49, 0x1D, true, "Great Bay Temple Map Chest", GBT_MAP_CHEST, GBT_MAP, {Category::cGreatBayTemple, Category::cVanillaMap,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); locationTable[GBT_COMPASS_CHEST] = ItemLocation::Chest (0x49, 0x1C, true, "Great Bay Temple Compass Chest", GBT_COMPASS_CHEST, GBT_COMPASS, {Category::cGreatBayTemple, Category::cVanillaCompass,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); locationTable[GBT_BOSS_KEY_CHEST] = ItemLocation::Chest (0x49, 0x1E, true, "Great Bay Temple Boss Key Chest", GBT_BOSS_KEY_CHEST, GBT_BOSS_KEY, {Category::cGreatBayTemple, Category::cVanillaBossKey,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); @@ -297,11 +301,11 @@ void LocationTable_Init() { locationTable[STONE_TOWER_TEMPLE_BRIDGE_SWITCH_CHEST] = ItemLocation::Chest (0x16, 0x01, true, "Stone Tower Temple Bridge Switch Chest", STONE_TOWER_TEMPLE_BRIDGE_SWITCH_CHEST, STONE_TOWER_TEMPLE_SMALL_KEY, {Category::cStoneTowerTemple, Category::cVanillaSmallKey,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); locationTable[STONE_TOWER_TEMPLE_UPDRAFT_ROOM_CHEST] = ItemLocation::Chest (0x18, 0x04, true, "Stone Tower Temple Updraft Room Chest", STONE_TOWER_TEMPLE_UPDRAFT_ROOM_CHEST, STONE_TOWER_TEMPLE_SMALL_KEY, {Category::cStoneTowerTemple, Category::cVanillaSmallKey,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); locationTable[STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM_CHEST] = ItemLocation::Chest (0x18, 0x05, true, "Stone Tower Temple Death Armos Room Chest", STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM_CHEST, STONE_TOWER_TEMPLE_SMALL_KEY, {Category::cStoneTowerTemple, Category::cVanillaSmallKey,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST] = ItemLocation::Chest (0x16, 0x1B, true, "Stone Tower Temple Light Arrow Chest", STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST, LIGHT_ARROWS, {Category::cStoneTowerTemple,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); - locationTable[STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST] = ItemLocation::Chest (0x36, 0x7D, false, "Stone Tower Temple Giant's Mask Chest", STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST, GIANTS_MASK, {Category::cStoneTowerTemple,Category::cChest, Category::cVanillaMask ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST] = ItemLocation::Chest (0x16, 0x1B, true, "Stone Tower Temple Light Arrow Chest", STONE_TOWER_TEMPLE_LIGHT_ARROW_CHEST, LIGHT_ARROWS, {Category::cStoneTowerTemple,Category::cChest ,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST] = ItemLocation::Chest (0x36, 0x00, false, "Stone Tower Temple Giant's Mask Chest", STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST, GIANTS_MASK, {Category::cStoneTowerTemple,Category::cChest, Category::cVanillaMask ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); //Pirate Fortress - locationTable[PF_INTERIOR_HOOKSHOT_CHEST] = ItemLocation::Chest (0x23, 0x02, true, "Pirate's Fortress Int Hookshot Chest", PF_INTERIOR_HOOKSHOT_CHEST, HOOKSHOT, {Category::cPiratesFortressInterior,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); + locationTable[PF_INTERIOR_HOOKSHOT_CHEST] = ItemLocation::Chest (0x23, 0x02, true, "Pirate's Fortress Int Hookshot Chest", PF_INTERIOR_HOOKSHOT_CHEST, HOOKSHOT, {Category::cPiratesFortressInterior,Category::cChest ,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); locationTable[PF_INT_LOWER_CHEST] = ItemLocation::Chest (0x14, 0x00, true, "Pirate's Fortress Int Lower Chest", PF_INT_LOWER_CHEST, RED_RUPEE, {Category::cPiratesFortressInterior,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); locationTable[PF_INT_UPPER_CHEST] = ItemLocation::Chest (0x14, 0x01, true, "Pirate's Fortress Int Upper Chest", PF_INT_UPPER_CHEST, RED_RUPEE, {Category::cPiratesFortressInterior,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); locationTable[PF_INT_TANK_CHEST] = ItemLocation::Chest (0x23, 0x00, true, "Pirate's Fortress Int Tank Chest", PF_INT_TANK_CHEST, RED_RUPEE, {Category::cPiratesFortressInterior,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); @@ -313,15 +317,15 @@ void LocationTable_Init() { locationTable[PF_EXTERIOR_LOG_CHEST] = ItemLocation::Chest (0x3B, 0x00, true, "Pirate's Fortress Ext Log Chest", PF_EXTERIOR_LOG_CHEST, RED_RUPEE, {Category::cPiratesFortressExterior,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); locationTable[PF_EXTERIOR_SAND_CHEST] = ItemLocation::Chest (0x3B, 0x01, true, "Pirate's Fortress Ext Sand Chest", PF_EXTERIOR_SAND_CHEST, RED_RUPEE, {Category::cPiratesFortressExterior,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); locationTable[PF_EXTERIOR_CORNER_CHEST] = ItemLocation::Chest (0x3B, 0x02, true, "Pirate's Fortress Ext Corner Chest", PF_EXTERIOR_CORNER_CHEST, RED_RUPEE, {Category::cPiratesFortressExterior,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); - locationTable[PF_INT_INVISIBLE_SOLDIER] = ItemLocation::Base (0x14, 0x8B, false, "Pirate's Fortress Int Invisible Soldier", PF_INT_INVISIBLE_SOLDIER, STONE_MASK, {Category::cPiratesFortressInterior, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); - locationTable[PF_INT_HOOKSHOT_ROOM_ZORA_EGG] = ItemLocation::Collectable(0x23, 0x69, true, "Pirate's Fortress Int Hookshot Room Zora Egg", PF_INT_HOOKSHOT_ROOM_ZORA_EGG, ZORA_EGG, {Category::cPiratesFortressInterior, Category::cBottleCatch,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); - locationTable[PF_INT_GUARD_ROOM_ZORA_EGG] = ItemLocation::Collectable(0x23, 0x69, true, "Pirate's Fortress Int Guard Room Zora Egg", PF_INT_GUARD_ROOM_ZORA_EGG, ZORA_EGG, {Category::cPiratesFortressInterior, Category::cBottleCatch,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); - locationTable[PF_INT_BARREL_MAZE_ZORA_EGG] = ItemLocation::Collectable(0x23, 0x69, true, "Pirate's Fortress Int Barrel Maze Zora Egg", PF_INT_BARREL_MAZE_ZORA_EGG, ZORA_EGG, {Category::cPiratesFortressInterior, Category::cBottleCatch,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); - locationTable[PF_INT_LAVA_ROOM_ZORA_EGG] = ItemLocation::Collectable(0x23, 0x69, true, "Pirate's Fortress Int Lava Room Zora Egg", PF_INT_LAVA_ROOM_ZORA_EGG, ZORA_EGG, {Category::cPiratesFortressInterior, Category::cBottleCatch,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); + locationTable[PF_INT_INVISIBLE_SOLDIER] = ItemLocation::Base (0x14, 0x8B, false, "Pirate's Fortress Int Invisible Soldier", PF_INT_INVISIBLE_SOLDIER, STONE_MASK, {Category::cPiratesFortressInterior, Category::cVanillaMask,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); + locationTable[PF_INT_HOOKSHOT_ROOM_ZORA_EGG] = ItemLocation::Collectable(0x23, 0x69, true, "Pirate's Fortress Int Hookshot Room Zora Egg", PF_INT_HOOKSHOT_ROOM_ZORA_EGG, ZORA_EGG, {Category::cPiratesFortressInterior, Category::cBottleCatch,Category::cDayOne, Category::cZoraEgg}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); + locationTable[PF_INT_GUARD_ROOM_ZORA_EGG] = ItemLocation::Collectable(0x23, 0x69, true, "Pirate's Fortress Int Guard Room Zora Egg", PF_INT_GUARD_ROOM_ZORA_EGG, ZORA_EGG, {Category::cPiratesFortressInterior, Category::cBottleCatch,Category::cDayOne, Category::cZoraEgg}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); + locationTable[PF_INT_BARREL_MAZE_ZORA_EGG] = ItemLocation::Collectable(0x23, 0x69, true, "Pirate's Fortress Int Barrel Maze Zora Egg", PF_INT_BARREL_MAZE_ZORA_EGG, ZORA_EGG, {Category::cPiratesFortressInterior, Category::cBottleCatch,Category::cDayOne, Category::cZoraEgg}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); + locationTable[PF_INT_LAVA_ROOM_ZORA_EGG] = ItemLocation::Collectable(0x23, 0x69, true, "Pirate's Fortress Int Lava Room Zora Egg", PF_INT_LAVA_ROOM_ZORA_EGG, ZORA_EGG, {Category::cPiratesFortressInterior, Category::cBottleCatch,Category::cDayOne, Category::cZoraEgg}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_PIRATE_FORTRESS ); //Beneath The Well - locationTable[BENEATH_THE_WELL_MIRROR_SHIELD_CHEST] = ItemLocation::Chest (0x4B, 0x1B, true, "Beneath the Well Mirror Shield Chest" , BENEATH_THE_WELL_MIRROR_SHIELD_CHEST, MIRROR_SHIELD, {Category::cBeneathTheWell,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BENEATH_THE_WELL ); + locationTable[BENEATH_THE_WELL_MIRROR_SHIELD_CHEST] = ItemLocation::Chest (0x4B, 0x1B, true, "Beneath the Well Mirror Shield Chest" , BENEATH_THE_WELL_MIRROR_SHIELD_CHEST, MIRROR_SHIELD, {Category::cBeneathTheWell,Category::cChest ,Category::cDayOne, Category::cMainInventory}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BENEATH_THE_WELL ); locationTable[WELL_LEFT_PATH_CHEST] = ItemLocation::Chest (0x4B, 0x02, true, "Beneath the Well Left Path Chest" , WELL_LEFT_PATH_CHEST, PURPLE_RUPEE, {Category::cBeneathTheWell,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BENEATH_THE_WELL ); locationTable[WELL_RIGHT_PATH_CHEST] = ItemLocation::Chest (0x4B, 0x01, true, "Beneath the Well Right Path Chest", WELL_RIGHT_PATH_CHEST, PURPLE_RUPEE, {Category::cBeneathTheWell,Category::cChest ,Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_BENEATH_THE_WELL ); @@ -337,23 +341,23 @@ void LocationTable_Init() { locationTable[SECRET_SHRINE_FINAL_CHEST] = ItemLocation::Chest (0x60, 0x0A, true, "Secret Shrine Final Chest", SECRET_SHRINE_FINAL_CHEST, PIECE_OF_HEART, {Category::cSecretShrine, Category::cVanillaHeartPiece, Category::cChest, Category::cDayOne}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_SECRET_SHRINE ); //The Moon - locationTable[THE_MOON_DEKU_TRIAL_BONUS] = ItemLocation::Collectable(0x2A, 0x00, false, "The Moon Deku Trial Bonus", THE_MOON_DEKU_TRIAL_BONUS, PIECE_OF_HEART, {Category::cTheMoon,Category::cDayThree}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); - locationTable[THE_MOON_GORON_TRIAL_BONUS] = ItemLocation::Collectable(0x3F, 0x00, false, "The Moon Goron Trial Bonus", THE_MOON_GORON_TRIAL_BONUS, PIECE_OF_HEART, {Category::cTheMoon,Category::cDayThree}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); - locationTable[THE_MOON_ZORA_TRIAL_BONUS] = ItemLocation::Collectable(0x47, 0x00, false, "The Moon Zora Trial Bonus", THE_MOON_ZORA_TRIAL_BONUS, PIECE_OF_HEART, {Category::cTheMoon,Category::cDayThree}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); - locationTable[THE_MOON_LINK_TRIAL_BONUS] = ItemLocation::Collectable(0x66, 0x00, false, "The Moon Link Trial Bonus", THE_MOON_LINK_TRIAL_BONUS, PIECE_OF_HEART, {Category::cTheMoon,Category::cDayThree}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); - locationTable[THE_MOON_GARO_CHEST] = ItemLocation::Chest (0x66, 0x01, true, "The Moon Garo Chest", THE_MOON_GARO_CHEST, ARROWS_30, {Category::cTheMoon,Category::cDayThree}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); - locationTable[THE_MOON_IRON_KNUCKLE_CHEST] = ItemLocation::Chest (0x67, 0x02, true, "The Moon Iron Knuckle Chest", THE_MOON_IRON_KNUCKLE_CHEST, BOMBCHU_10, {Category::cTheMoon,Category::cDayThree}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); - locationTable[THE_MOON_MAJORA_CHILD] = ItemLocation::Base (0x67, 0x7B, false, "The Moon Majora Child", THE_MOON_MAJORA_CHILD, FIERCE_DIETY_MASK, {Category::cTheMoon,Category::cDayThree}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); + locationTable[THE_MOON_DEKU_TRIAL_BONUS] = ItemLocation::Collectable(0x2A, 0x00, false, "The Moon Deku Trial Bonus", THE_MOON_DEKU_TRIAL_BONUS, PIECE_OF_HEART, {Category::cTheMoon,Category::cDayThree, Category::cMoonItems}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); + locationTable[THE_MOON_GORON_TRIAL_BONUS] = ItemLocation::Collectable(0x3F, 0x00, false, "The Moon Goron Trial Bonus", THE_MOON_GORON_TRIAL_BONUS, PIECE_OF_HEART, {Category::cTheMoon,Category::cDayThree, Category::cMoonItems}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); + locationTable[THE_MOON_ZORA_TRIAL_BONUS] = ItemLocation::Collectable(0x47, 0x00, false, "The Moon Zora Trial Bonus", THE_MOON_ZORA_TRIAL_BONUS, PIECE_OF_HEART, {Category::cTheMoon,Category::cDayThree, Category::cMoonItems}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); + locationTable[THE_MOON_LINK_TRIAL_BONUS] = ItemLocation::Collectable(0x66, 0x00, false, "The Moon Link Trial Bonus", THE_MOON_LINK_TRIAL_BONUS, PIECE_OF_HEART, {Category::cTheMoon,Category::cDayThree, Category::cMoonItems}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); + locationTable[THE_MOON_GARO_CHEST] = ItemLocation::Chest (0x66, 0x01, true, "The Moon Garo Chest", THE_MOON_GARO_CHEST, ARROWS_30, {Category::cTheMoon,Category::cDayThree, Category::cMoonItems}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); + locationTable[THE_MOON_IRON_KNUCKLE_CHEST] = ItemLocation::Chest (0x67, 0x02, true, "The Moon Iron Knuckle Chest", THE_MOON_IRON_KNUCKLE_CHEST, BOMBCHU_10, {Category::cTheMoon,Category::cDayThree, Category::cMoonItems}, SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); + locationTable[THE_MOON_MAJORA_CHILD] = ItemLocation::Base (0x67, 0x7B, false, "The Moon Majora Child", THE_MOON_MAJORA_CHILD, FIERCE_DEITY_MASK, {Category::cTheMoon,Category::cDayThree, Category::cFDM}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); /*------------------------------- --- BOSSES --- -------------------------------*/ locationTable[LINKS_POCKET] = ItemLocation::Base (0x63, 0x00, false, "Link's Pocket", LINKS_POCKET, NONE, {}, SpoilerCollectionCheck::AlwaysCollected(), SpoilerCollectionCheckGroup::GROUP_NO_GROUP ); - locationTable[ODOLWA] = ItemLocation::Reward (0x1F, 0x2D, false, "Woodfall Temple Odolwa's Remains", ODOLWAS_REMAINS, ODOLWAS_REMAINS, {}, SpoilerCollectionCheck::EventChkInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[GOHT] = ItemLocation::Reward (0x44, 0x2F, false, "Snowhead Temple Goht's Remains", GOHTS_REMAINS, GOHTS_REMAINS, {}, SpoilerCollectionCheck::EventChkInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[GYORG] = ItemLocation::Reward (0x5F, 0x30, false, "Great Bay Temple Gyorg's Remains", GYORGS_REMAINS, GYORGS_REMAINS, {}, SpoilerCollectionCheck::EventChkInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[TWINMOLD] = ItemLocation::Reward (0x36, 0x31, false, "Stone Tower Temple Twinmold's Remains", TWINMOLDS_REMAINS, TWINMOLDS_REMAINS, {}, SpoilerCollectionCheck::EventChkInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ODOLWA] = ItemLocation::Base (0x1F, 0x2D, false, "Woodfall Temple Odolwa's Remains", ODOLWAS_REMAINS, ODOLWAS_REMAINS, {}, SpoilerCollectionCheck::EventChkInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[GOHT] = ItemLocation::Base (0x44, 0x2F, false, "Snowhead Temple Goht's Remains", GOHTS_REMAINS, GOHTS_REMAINS, {}, SpoilerCollectionCheck::EventChkInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[GYORG] = ItemLocation::Base (0x5F, 0x30, false, "Great Bay Temple Gyorg's Remains", GYORGS_REMAINS, GYORGS_REMAINS, {}, SpoilerCollectionCheck::EventChkInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[TWINMOLD] = ItemLocation::Base (0x36, 0x31, false, "Stone Tower Temple Twinmold's Remains", TWINMOLDS_REMAINS, TWINMOLDS_REMAINS, {}, SpoilerCollectionCheck::EventChkInf(0), SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); locationTable[MAJORA] = ItemLocation::Reward (0x0B, 0x00, false, "Majora", MAJORA, MAJORAS_MASK, {}, SpoilerCollectionCheck::None(), SpoilerCollectionCheckGroup::GROUP_DUNGEON_THE_MOON ); /*------------------------------- @@ -503,10 +507,10 @@ void LocationTable_Init() { /*------------------------------- ---HEART CONTAINERS --- -------------------------------*/ - locationTable[ODOLWA_HEART_CONTAINER] = ItemLocation::Base (0x1F, 0x00, false, "Woodfall Temple Odolwa Heart Container", ODOLWA_HEART_CONTAINER, HEART_CONTAINER, {Category::cWoodfall, Category::cWoodfallTemple,Category::cBossHeart, Category::cDungeonReward,Category::cDayOne}, SpoilerCollectionCheck::Collectable(0x00,0x00), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); - locationTable[GOHT_HEART_CONTAINER] = ItemLocation::Base (0x44, 0x00, false, "Snowhead Temple Goht Heart Container", GOHT_HEART_CONTAINER, HEART_CONTAINER, {Category::cSnowhead, Category::cSnowheadTemple, Category::cBossHeart, Category::cDungeonReward,Category::cDayOne}, SpoilerCollectionCheck::Collectable(0x00,0x00), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); - locationTable[GYORG_HEART_CONTAINER] = ItemLocation::Base (0x5F, 0x00, false, "Great Bay Temple Gyorg Heart Container", GYORG_HEART_CONTAINER, HEART_CONTAINER, {Category::cZoraCape, Category::cGreatBayTemple, Category::cBossHeart, Category::cDungeonReward,Category::cDayOne}, SpoilerCollectionCheck::Collectable(0x00,0x00), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); - locationTable[TWINMOLD_HEART_CONTAINER] = ItemLocation::Base (0x36, 0x00, false, "Stone Tower Temple Twinmold Heart Container", TWINMOLD_HEART_CONTAINER, HEART_CONTAINER, {Category::cStoneTower, Category::cStoneTowerTemple,Category::cBossHeart, Category::cDungeonReward,Category::cDayOne}, SpoilerCollectionCheck::Collectable(0x00,0x00), SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); + locationTable[ODOLWA_HEART_CONTAINER] = ItemLocation::Base (0x1F, 0x0D, false, "Woodfall Temple Odolwa Heart Container", ODOLWA_HEART_CONTAINER, HEART_CONTAINER, {Category::cWoodfall, Category::cWoodfallTemple,Category::cBossHeart, Category::cDungeonReward,Category::cDayOne}, SpoilerCollectionCheck::Collectable(0x00,0x00), SpoilerCollectionCheckGroup::GROUP_DUNGEON_WOODFALL_TEMPLE ); + locationTable[GOHT_HEART_CONTAINER] = ItemLocation::Base (0x44, 0x0D, false, "Snowhead Temple Goht Heart Container", GOHT_HEART_CONTAINER, HEART_CONTAINER, {Category::cSnowhead, Category::cSnowheadTemple, Category::cBossHeart, Category::cDungeonReward,Category::cDayOne}, SpoilerCollectionCheck::Collectable(0x00,0x00), SpoilerCollectionCheckGroup::GROUP_DUNGEON_SNOWHEAD_TEMPLE ); + locationTable[GYORG_HEART_CONTAINER] = ItemLocation::Base (0x5F, 0x0D, false, "Great Bay Temple Gyorg Heart Container", GYORG_HEART_CONTAINER, HEART_CONTAINER, {Category::cZoraCape, Category::cGreatBayTemple, Category::cBossHeart, Category::cDungeonReward,Category::cDayOne}, SpoilerCollectionCheck::Collectable(0x00,0x00), SpoilerCollectionCheckGroup::GROUP_DUNGEON_GREAT_BAY ); + locationTable[TWINMOLD_HEART_CONTAINER] = ItemLocation::Base (0x36, 0x0D, false, "Stone Tower Temple Twinmold Heart Container", TWINMOLD_HEART_CONTAINER, HEART_CONTAINER, {Category::cStoneTower, Category::cStoneTowerTemple,Category::cBossHeart, Category::cDungeonReward,Category::cDayOne}, SpoilerCollectionCheck::Collectable(0x00,0x00), SpoilerCollectionCheckGroup::GROUP_DUNGEON_STONE_TOWER ); /*------------------------------- --- COWS --- @@ -533,8 +537,8 @@ void LocationTable_Init() { locationTable[TINGLE_TWIN_ISLANDS_SH] = ItemLocation::Base (0x5D, 0xB6, false, "TI Tingle Snowhead Map Buy", TINGLE_TWIN_ISLANDS_SH, SNOWHEAD_MAP, {Category::cTwinIslands, Category::cTingleMap,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS); locationTable[TINGLE_TWIN_ISLANDS_RR] = ItemLocation::Base (0x5D, 0xB7, false, "TI Tingle Romani Ranch Buy", TINGLE_TWIN_ISLANDS_RR, ROMANI_RANCH_MAP, {Category::cTwinIslands, Category::cTingleMap, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS); - locationTable[TINGLE_TWIN_ISLANDS_SH_SPRING] = ItemLocation::Base (0x5E, 0xB6, false, "TI Tingle Snowhead Map Buy (Spring)", TINGLE_TWIN_ISLANDS_SH_SPRING, SNOWHEAD_MAP, {Category::cTwinIslands, Category::cTingleMap, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS); - locationTable[TINGLE_TWIN_ISLANDS_RR_SPRING] = ItemLocation::Base (0x5E, 0xB7, false, "TI Tingle Romani Ranch Map Buy (Spring)", TINGLE_TWIN_ISLANDS_RR_SPRING, ROMANI_RANCH_MAP, {Category::cTwinIslands, Category::cTingleMap, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS); + locationTable[TINGLE_TWIN_ISLANDS_SH_SPRING] = ItemLocation::Base (0x5E, 0xB6, false, "TI Tingle Snowhead Map Buy (Spring)", TINGLE_TWIN_ISLANDS_SH_SPRING, SNOWHEAD_MAP, {Category::cTwinIslands, Category::cTingleMap, Category::cDayOne, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS); + locationTable[TINGLE_TWIN_ISLANDS_RR_SPRING] = ItemLocation::Base (0x5E, 0xB7, false, "TI Tingle Romani Ranch Map Buy (Spring)", TINGLE_TWIN_ISLANDS_RR_SPRING, ROMANI_RANCH_MAP, {Category::cTwinIslands, Category::cTingleMap, Category::cDayOne, Category::cAlternateCheck}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_TWIN_ISLANDS); locationTable[TINGLE_MILK_ROAD_RR] = ItemLocation::Base (0x22, 0xB7, false, "MR Tingle Romani Ranch Map Buy", TINGLE_MILK_ROAD_RR, ROMANI_RANCH_MAP, {Category::cMilkRoad, Category::cTingleMap,Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD); locationTable[TINGLE_MILK_ROAD_GB] = ItemLocation::Base (0x22, 0xB8, false, "MR Tingle Great Bay Map Buy", TINGLE_MILK_ROAD_GB, GREAT_BAY_MAP, {Category::cMilkRoad, Category::cTingleMap, Category::cDayOne}, SpoilerCollectionCheck::ItemGetInf(0), SpoilerCollectionCheckGroup::GROUP_MILK_ROAD); @@ -584,7 +588,7 @@ void LocationTable_Init() { -------------------------------*/ // These are not actual locations, but are filler spots used for hint reachability. - OoT Randomizer // flag + 0x400 = message ID -locationTable[TF_MILK_ROAD_TREE_GOSSIP] = ItemLocation::HintStone (0x00,0x20b0, true, "TF Near Milk Road Tree Gossip Stone", {}); +locationTable[TF_MILK_ROAD_TREE_GOSSIP] = ItemLocation::HintStone (0x00,0x20b8, true, "TF Near Milk Road Tree Gossip Stone", {}); locationTable[TF_IKANA_SNOWHEAD_GOSSIP] = ItemLocation::HintStone (0x00,0x20bb, true, "TF Between Ikana And Snowhead Gossip Stone", {}); locationTable[TF_OBSERVATORY_GOSSIP] = ItemLocation::HintStone (0x00,0x20c1, true, "TF Behind Observatory Gossip Stone", {}); locationTable[TF_TOP_SNOWHEAD_GOSSIP] = ItemLocation::HintStone (0x00,0x20b9, true, "TF Top Snowhead Area Gossip Stone", {}); @@ -878,6 +882,7 @@ std::vector overworldLocations = { MOUNTAIN_VILLAGE_SMITH_DAY_ONE, MOUNTAIN_VILLAGE_SMITH_DAY_TWO, MOUNTAIN_VILLAGE_FROG_CHOIR, + MOUNTAIN_VILLAGE_KEATON_QUIZ, MOUNTAIN_VILLAGE_DARMANI, MOUNTAIN_VILLAGE_HUNGRY_GORON, MOUNTAIN_WATERFALL_CHEST, @@ -950,6 +955,9 @@ std::vector overworldLocations = { //SOUTHERN_SWAMP_PICTOGRAPH_STANDARD, //SOUTHERN_SWAMP_PICTOGRAPH_GOOD, SOUTHERN_SWAMP_SCRUB_PURCHASE, + SOUTHERN_SWAMP_SCRUB_PURCHASE_CLEAR, + SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR, + SWAMP_TOURIST_CENTER_ROOF_CLEAR, POTION_SHOP_ITEM_1, POTION_SHOP_ITEM_2, POTION_SHOP_ITEM_3, @@ -987,6 +995,7 @@ std::vector overworldLocations = { TWIN_ISLANDS_GORON_RACETRACK_GROTTO_CHEST, TWIN_ISLANDS_UNDERWATER_RAMP_CHEST, TWIN_ISLANDS_CAVE_CHEST, + TWIN_ISLANDS_LULLABY_INTRO, TINGLE_TWIN_ISLANDS_SH, TINGLE_TWIN_ISLANDS_RR, TINGLE_TWIN_ISLANDS_SH_SPRING, @@ -1123,11 +1132,11 @@ void LocationReset() { for (LocationKey il : dungeonRewardLocations) { Location(il)->RemoveFromPool(); - } + }*/ for (LocationKey il : gossipStoneLocations) { Location(il)->RemoveFromPool(); - }*/ + } // Something's still missing from allLocations, IDK what though and this fixes it for (LocationKey il = LINKS_POCKET; il <= OSH_COLORED_SKULLS_POT; il++) { @@ -1197,6 +1206,7 @@ void CreateItemOverrides() { //Keaton Quiz auto loc14 = Location(N_CLOCK_TOWN_KEATON_QUIZ); PlaceItemInLocation(MILK_ROAD_KEATON_QUIZ, loc14->GetPlacedItemKey());//copy NCT keaton quiz item to milk road + PlaceItemInLocation(MOUNTAIN_VILLAGE_KEATON_QUIZ, loc14->GetPlacedItemKey());//copy NCT keaton quiz item to Mountain Village //Spring time Goron Village auto loc15 = Location(GORON_VILLAGE_POWDER_KEG_CHALLENGE); auto loc16 = Location(GORON_VILLAGE_SCRUB_PURCHASE); @@ -1206,6 +1216,13 @@ void CreateItemOverrides() { PlaceItemInLocation(GORON_VILLAGE_SCRUB_PURCHASE_SPRING, loc16->GetPlacedItemKey()); PlaceItemInLocation(GORON_VILLAGE_SCRUB_TRADE_SPRING, loc17->GetPlacedItemKey()); PlaceItemInLocation(GORON_VILLAGE_LEDGE_SPRING, loc18->GetPlacedItemKey()); + //Cleared Southern Swamp + auto loc19 = Location(SOUTHERN_SWAMP_SCRUB_PURCHASE); + auto loc20 = Location(SOUTHERN_SWAMP_SCRUB_TRADE); + auto loc21 = Location(SWAMP_TOURIST_CENTER_ROOF); + PlaceItemInLocation(SOUTHERN_SWAMP_SCRUB_PURCHASE_CLEAR, loc19->GetPlacedItemKey()); + PlaceItemInLocation(SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR, loc20->GetPlacedItemKey()); + PlaceItemInLocation(SWAMP_TOURIST_CENTER_ROOF_CLEAR, loc21->GetPlacedItemKey()); for (LocationKey locKey : allLocations) { auto loc = Location(locKey); diff --git a/source/item_pool.cpp b/source/item_pool.cpp index bb7c6e5..e7fcda4 100644 --- a/source/item_pool.cpp +++ b/source/item_pool.cpp @@ -103,7 +103,7 @@ const std::array easyItems = { GAROS_MASK, CAPTAINS_HAT, GIANTS_MASK, - FIERCE_DIETY_MASK, + FIERCE_DEITY_MASK, MASK_OF_TRUTH, EMPTY_BOTTLE1, EMPTY_BOTTLE2, @@ -257,7 +257,7 @@ const std::array chestItems = { MIRROR_SHIELD, }; -const std::array songList = { +const std::array songList = { //SONG_OF_TIME, //SONG_OF_DOUBLE_TIME, //INVERTED_SONG_OF_TIME, //SoT not included yet @@ -266,6 +266,7 @@ const std::array songList = { SONG_OF_HEALING, //SONG_OF_SOARING, SONATA_OF_AWAKENING, + LULLABY_INTRO, GORONS_LULLABY, NEW_WAVE_BOSSA_NOVA, ELEGY_OF_EMPTINESS, @@ -275,6 +276,7 @@ const std::array songList = { static void PlaceVanillaSongs() { PlaceItemInLocation(HMS_SONG_OF_HEALING, SONG_OF_HEALING); PlaceItemInLocation(DEKU_PALACE_IMPRISONED_MONKEY, SONATA_OF_AWAKENING); + PlaceItemInLocation(TWIN_ISLANDS_LULLABY_INTRO, LULLABY_INTRO); PlaceItemInLocation(GORON_VILLAGE_GORON_LULLABY, GORONS_LULLABY); PlaceItemInLocation(ROMANI_RANCH_ROMANIS_GAME, EPONAS_SONG); PlaceItemInLocation(GBC_BABY_ZORAS, NEW_WAVE_BOSSA_NOVA); @@ -283,6 +285,7 @@ static void PlaceVanillaSongs() { PlaceItemInLocation(GIANTS_OATH_TO_ORDER, OATH_TO_ORDER); }; +// TODO: Change back to 18 when the override value is correct. const std::array maskList = { KEATON_MASK, BUNNY_HOOD, @@ -300,7 +303,7 @@ const std::array maskList = { GIBDOS_MASK, GAROS_MASK, CAPTAINS_HAT, - GIANTS_MASK, + GIANTS_MASK, MASK_OF_TRUTH, }; @@ -362,8 +365,8 @@ static void PlaceVanillaMainInventory() { PlaceItemInLocation(TWIN_ISLANDS_GORON_RACE, GOLD_DUST); PlaceItemInLocation(E_CLOCK_TOWN_AROMA_IN_BAR, CHATEAU_ROMANI); PlaceItemInLocation(GORMAN_TRACK_MYSTERY_MILK_QUEST, BOTTLE_WITH_MYSTERY_MILK); - PlaceItemInLocation(ZORA_CAPE_BEAVER_RACE_1,EMPTY_BOTTLE2); - PlaceItemInLocation(IKANA_GRAVEYARD_DAMPE_DIGGING,EMPTY_BOTTLE1); + PlaceItemInLocation(SOUTHERN_SWAMP_BOAT_ARCHERY, EMPTY_BOTTLE1); + PlaceItemInLocation(ZORA_CAPE_BEAVER_RACE_1, EMPTY_BOTTLE2); PlaceItemInLocation(ROMANI_RANCH_ALIEN_DEFENSE,BOTTLE_WITH_MILK); PlaceItemInLocation(GBC_FISHERMAN_PHOTO, SEAHORSE); }; @@ -799,7 +802,8 @@ static void PlaceVanillaShopItems() { PlaceItemInLocation(TRADING_POST_ITEM_7, BUY_DEKU_NUT_10); PlaceItemInLocation(TRADING_POST_ITEM_8, BUY_MAGIC_BEAN); PlaceItemInLocation(BOMB_SHOP_ITEM_1, BUY_BOMBS_10); - PlaceItemInLocation(BOMB_SHOP_ITEM_2, BUY_BOMBCHU_10); + PlaceItemInLocation(BOMB_SHOP_ITEM_2, BUY_BOMBCHU_10); + PlaceItemInLocation(W_CLOCK_TOWN_BOMB_SHOP_GORON, POWDER_KEG); PlaceItemInLocation(POTION_SHOP_ITEM_1, BUY_BLUE_POTION); PlaceItemInLocation(POTION_SHOP_ITEM_2, BUY_GREEN_POTION); PlaceItemInLocation(POTION_SHOP_ITEM_3, BUY_RED_POTION); @@ -890,23 +894,25 @@ void GenerateItemPool() { //temp placement until shopsanity works PlaceItemInLocation(SOUTHERN_SWAMP_SCRUB_PURCHASE, MAGIC_BEAN); - //Place Temp Items at alt locations so they don't get filled with important stuff - will be replaced later PlaceItemInLocation(SOUTHERN_SWAMP_KOTAKE_IN_WOODS, BLUE_RUPEE); PlaceItemInLocation(N_CLOCK_TOWN_POSTBOX, BLUE_RUPEE); PlaceItemInLocation(E_CLOCK_TOWN_POSTBOX, BLUE_RUPEE); PlaceItemInLocation(MILK_ROAD_KEATON_QUIZ, BLUE_RUPEE); + PlaceItemInLocation(MOUNTAIN_VILLAGE_KEATON_QUIZ, BLUE_RUPEE); PlaceItemInLocation(GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, BLUE_RUPEE); PlaceItemInLocation(GORON_VILLAGE_SCRUB_PURCHASE_SPRING, BLUE_RUPEE); PlaceItemInLocation(GORON_VILLAGE_SCRUB_TRADE_SPRING, BLUE_RUPEE); PlaceItemInLocation(GORON_VILLAGE_LEDGE_SPRING, BLUE_RUPEE); - + PlaceItemInLocation(SOUTHERN_SWAMP_SCRUB_PURCHASE_CLEAR, BLUE_RUPEE); + PlaceItemInLocation(SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR, BLUE_RUPEE); + PlaceItemInLocation(SWAMP_TOURIST_CENTER_ROOF_CLEAR, BLUE_RUPEE); //Check Non Dungeon Settings //KOKIRISWORD SHUFFLE if(StartingKokiriSword.Value() == (u8)StartingSwordSetting::STARTINGSWORD_NONE) {//if starting with no sword we need to add an extra to the pool - AddItemToMainPool(PROGRESSIVE_SWORD); + AddItemToMainPool(PROGRESSIVE_SWORD, 1); IceTrapModels.push_back(0x37);//GetItemID::GI_KOKIRI_SWORD PlaceItemInLocation(HMS_STARTING_SWORD,GREEN_RUPEE);//Add Junk to this location because theres no way to get it otherwise } else { @@ -915,7 +921,7 @@ void GenerateItemPool() { //SHUFFLE STARTING SHIELD if(StartingShield.Value() == (u8)StartingSheildSetting::STARTINGSHIELD_NONE){//if starting with no shield add an extra to the pool - AddItemToMainPool(HEROS_SHIELD); + AddItemToMainPool(HEROS_SHIELD, 1); PlaceItemInLocation(HMS_STARTING_SHIELD, GREEN_RUPEE);//PlaceJunk Here because you cant not get this } else { PlaceItemInLocation(HMS_STARTING_SHIELD, HEROS_SHIELD);}//if starting with any other shield place this here because this location is unobtainable @@ -989,6 +995,10 @@ void GenerateItemPool() { //else { PlaceVanillaSongs(); //} + if (StartingSongOfHealing.Value() == u8(1)){//if starting with song of healing fill deku mask and notebook spots as they are unobtainable + PlaceItemInLocation(HMS_DEKU_MASK, GREEN_RUPEE); + PlaceItemInLocation(HMS_BOMBERS_NOTEBOOK, GREEN_RUPEE); + } //if (ShuffleSoaring) //{ @@ -1035,12 +1045,12 @@ void GenerateItemPool() { PlaceItemInLocation(GBC_MIKAU, ZORA_MASK); } - //FIERECE DIETY SHUFFLE - if(ShuffleFierceDiety){ - AddItemToMainPool(FIERCE_DIETY_MASK); + //FIERECE DEITY SHUFFLE + if(ShuffleFierceDeity){ + AddItemToMainPool(FIERCE_DEITY_MASK); } else{ - PlaceItemInLocation(THE_MOON_MAJORA_CHILD,FIERCE_DIETY_MASK); + PlaceItemInLocation(THE_MOON_MAJORA_CHILD,FIERCE_DEITY_MASK); } //PIECEOFHEART SHUFFLE @@ -1090,14 +1100,14 @@ void GenerateItemPool() { if (ShuffleTradeItems){//TradeItems refers to Anju&Kafei Items AddItemsToPool(ItemPool, anjuKafeiTradeItems); } else { - if(ShuffleMasks){ - AddItemToMainPool(KAFEIS_MASK); - AddItemToMainPool(COUPLES_MASK); - } - else{ + //if(ShuffleMasks){ //-Kafei & Couples Mask part of A&K not masks + // AddItemToMainPool(KAFEIS_MASK); + // AddItemToMainPool(COUPLES_MASK); + //} + //else{ PlaceItemInLocation(E_CLOCK_TOWN_AROMA_IN_OFFICE, KAFEIS_MASK); PlaceItemInLocation(STOCKPOTINN_ANJU_AND_KAFEI, COUPLES_MASK); - } + //} PlaceItemInLocation(STOCKPOTINN_MIDNIGHT_MEETING, LETTER_KAFEI); PlaceItemInLocation(LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO, LETTER_MAMA); PlaceItemInLocation(STOCKPOTINN_RESERVATION, ROOM_KEY); @@ -1187,7 +1197,6 @@ void GenerateItemPool() { AddItemToMainPool(dungeon->GetCompass()); } } - AddItemsToPool(ItemPool, tingleMaps); } if (Keysanity.Is(KeysanitySetting::KEYSANITY_VANILLA)) { diff --git a/source/location_access.cpp b/source/location_access.cpp index a12796b..1fd1c71 100644 --- a/source/location_access.cpp +++ b/source/location_access.cpp @@ -33,7 +33,7 @@ bool LocationAccess::CanBuy() const { return true; } - //Check if current walet is large enough + //Check if current walet is large enough bool SufficientWallet = true; if (Location(location)->GetPrice() > 500) { SufficientWallet = Logic::ProgressiveWallet >= 3; @@ -59,9 +59,9 @@ bool LocationAccess::CanBuy() const { } Area::Area() = default; -Area::Area(std::string regionName_, std::string scene_, u32 hintKey_, +Area::Area(std::string regionName_, std::string scene_, u32 hintKey_, std::vector events_, - std::vector locations_, + std::vector locations_, std::list exits_ ) : regionName(std::move(regionName_)), scene(std::move(scene_)), @@ -198,10 +198,10 @@ void AreaTable_Init() { //clear array from previous playthroughs areaTable.fill(Area("Invalid Area", "Invalid Area", NONE, {}, {}, {})); //Name, Scene, hint text, events, locations, exits - areaTable[ROOT] = Area("Root", "Root", LINKS_POCKET, {}, { + areaTable[ROOT] = Area("Root", "Root", LINKS_POCKET, {}, { //Locations //LocationAccess(LINKS_POCKET, {[] {return true;}}) - }, + }, { //Exits Entrance(ROOT_EXITS, {[]{return true;}}) @@ -223,14 +223,16 @@ void AreaTable_Init() { areaTable[N_CLOCK_TOWN] = Area("North Clock Town", "North Clock Town", N_CLOCK_TOWN, { //Events EventAccess(&OldLadySaved, {[]{return Fighting || Bow;}}), - }, + EventAccess(&WinnerPicture, {[]{return false;}}),//Trick for picture of Tingle instead of Deku King? + EventAccess(&PostedKafeiLetter, {[]{return LetterKafei;}}), + }, { //Locations LocationAccess(N_CLOCK_TOWN_KEATON_QUIZ, {[] {return KeatonMask;}}), LocationAccess(N_CLOCK_TOWN_TREE, {[] {return true;}}), - LocationAccess(N_CLOCK_TOWN_OLD_LADY, {[] {return Fighting || Bow;}}), - LocationAccess(TINGLE_N_CLOCK_TOWN_CT, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), - LocationAccess(TINGLE_N_CLOCK_TOWN_WF, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(N_CLOCK_TOWN_OLD_LADY, {[] {return Fighting;}}), + LocationAccess(TINGLE_N_CLOCK_TOWN_CT, {[]{return CanUseProjectile;}}), + LocationAccess(TINGLE_N_CLOCK_TOWN_WF, {[]{return CanUseProjectile;}}), LocationAccess(N_CLOCK_TOWN_POSTBOX, {[]{return PostmansHat;}}), }, @@ -248,7 +250,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(N_CLOCK_TOWN_GREAT_FAIRY_DEKU, {[] {return ClockTownStrayFairy && (ZoraMask || DekuMask || GoronMask );}}), + LocationAccess(N_CLOCK_TOWN_GREAT_FAIRY_DEKU, {[] {return ClockTownStrayFairy && DekuMask;}}), LocationAccess(N_CLOCK_TOWN_GREAT_FAIRY_HUMAN, {[] {return ClockTownStrayFairy;}}), }, @@ -271,7 +273,8 @@ void AreaTable_Init() { areaTable[E_CLOCK_TOWN] = Area("East Clock Town", "East Clock Town", E_CLOCK_TOWN, { //Events - }, + EventAccess(&PostedKafeiLetter, {[]{return LetterKafei;}}), + }, { //Locations LocationAccess(E_CLOCK_TOWN_CHEST, {[] {return true;}}), @@ -284,7 +287,7 @@ void AreaTable_Init() { Entrance(N_CLOCK_TOWN, {[]{return true;}}), Entrance(TERMINA_FIELD, {[]{return true;}}), Entrance(CLOCK_TOWN_OBSERVATORY, {[]{return BombersNotebook || SkipBombersMinigame;}}), - Entrance(STOCKPOTINN, {[]{return true;}}),//to-Do StockPotInn Night Access + Entrance(STOCKPOTINN, {[]{return true;}}),//to-Do Stock Pot Inn Night Access Entrance(CLOCK_TOWN_BAR, {[]{return RomanisMask;}}), Entrance(CLOCK_TOWN_HONEY_DARLING, {[]{return true;}}), Entrance(CLOCK_TOWN_TREASURE_CHEST_GAME, {[]{return true;}}), @@ -293,13 +296,17 @@ void AreaTable_Init() { Entrance(S_CLOCK_TOWN, {[]{return true;}}), }); - areaTable[STOCKPOTINN] = Area("StockPotInn", "StockPotInn", STOCKPOTINN, { + areaTable[STOCKPOTINN] = Area("Stock Pot Inn", "Stock Pot Inn", STOCKPOTINN, { //Events - }, + EventAccess(&MilkQuestStart, {[] {return CircusLeadersMask;}}), + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&Bugs, {[]{return AnyBottle;}}), + }, { //Locations LocationAccess(STOCKPOTINN_RESERVATION, {[] {return GoronMask;}}), - LocationAccess(STOCKPOTINN_TOILET_HAND, {[] {return AnyPaper && (DekuMask || RoomKey);}}), + LocationAccess(STOCKPOTINN_TOILET_HAND, {[] {return AnyPaper;}}),//Inn unlocked on day 3 }, { //Exits @@ -309,7 +316,7 @@ void AreaTable_Init() { Entrance(E_CLOCK_TOWN, {[]{return true;}}), }); - areaTable[STOCKPOTINN_GUEST_ROOM] = Area("StockPotInn Guest Room", "StockPotInn Guest Room", NONE, { + areaTable[STOCKPOTINN_GUEST_ROOM] = Area("Stock Pot Inn Guest Room", "Stock Pot Inn Guest Room", NONE, { //Events //Listen to Anju? --probably not needed as its not hard required }, @@ -322,13 +329,13 @@ void AreaTable_Init() { Entrance(STOCKPOTINN, {[]{return true;}}), }); - areaTable[STOCKPOTINN_STAFF_ROOM] = Area("StockPotInn Staff Room", "StockPotInn Staff Room", NONE, { + areaTable[STOCKPOTINN_STAFF_ROOM] = Area("Stock Pot Inn Staff Room", "Stock Pot Inn Staff Room", NONE, { //Events }, { //Locations LocationAccess(STOCKPOTINN_MIDNIGHT_MEETING, {[] {return KafeisMask && (DekuMask || RoomKey);}}), - LocationAccess(STOCKPOTINN_ANJU_AND_KAFEI, {[] {return KafeisMask && LetterKafei && PendantAccess && SunMask;}}), + LocationAccess(STOCKPOTINN_ANJU_AND_KAFEI, {[] {return KafeisMask && SpokeToKafei && PendantAccess && SunMask;}}), LocationAccess(STOCKPOTINN_STAFF_ROOM_CHEST, {[] {return true;}}),//Day 3? }, { @@ -336,7 +343,7 @@ void AreaTable_Init() { Entrance(STOCKPOTINN, {[]{return true;}}), }); - areaTable[STOCKPOTINN_GRANDMA_ROOM] = Area("StockPotInn Grandma's Room", "StockPotInn Grandma's Room", NONE, { + areaTable[STOCKPOTINN_GRANDMA_ROOM] = Area("Stock Pot Inn Grandma's Room", "Stock Pot Inn Grandma's Room", NONE, { //Events }, { @@ -352,19 +359,21 @@ void AreaTable_Init() { areaTable[CLOCK_TOWN_OBSERVATORY] = Area("Astral Observatory/Bombers Hideout", "Astral Obseravtory/Bombers Hideout", NONE, { //Events EventAccess(&WatchMoonTearFall, {[]{return true;}}), + EventAccess(&ScarecrowSong, {[]{return Ocarina;}}), }, { //Locations - LocationAccess(BOMBERS_HIDEOUT_CHEST, {[] {return AnyBombBag;}}), + LocationAccess(BOMBERS_HIDEOUT_CHEST, {[] {return HasExplosives;}}), }, { //Exits Entrance(E_CLOCK_TOWN, {[]{return true;}}), - Entrance(TERMINA_FIELD, {[]{return (DekuMask && MagicMeter) || Hookshot || Bow || ZoraMask;}}), + Entrance(TERMINA_FIELD_OUTSIDE_OBSERVATORY, {[]{return CanUseProjectile;}}),//Trick for using pots? }); areaTable[CLOCK_TOWN_BAR] = Area("Milk Bar", "Milk Bar", NONE, { //Events + EventAccess(&Milk, {[]{return RomanisMask && AnyBottle;}}), }, { //Locations @@ -380,7 +389,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(E_CLOCK_TOWN_HONEY_DARLING_3DAYS, {[] {return Bow && AnyBombBag;}}), + LocationAccess(E_CLOCK_TOWN_HONEY_DARLING_3DAYS, {[] {return Bow && AnyBombBag;}}),//Deku does not replace bow }, { //Exits @@ -425,11 +434,7 @@ void AreaTable_Init() { areaTable[W_CLOCK_TOWN] = Area("West Clock Town", "West Clock Town", W_CLOCK_TOWN, { //Events - EventAccess(&BugRock, {[]{return BugRock;}}), - EventAccess(&BugShrub,{[]{return BugShrub;}}), - EventAccess(&LoneFish, {[]{return LoneFish;}}), - EventAccess(&SpringWater, {[]{return SpringWater;}}), - }, + }, { //Locations LocationAccess(W_CLOCK_TOWN_ROSA_SISTERS, {[] {return KamarosMask;}}), @@ -451,8 +456,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(W_CLOCK_TOWN_SWORDSMANS_SCHOOL, {[] {return Fighting;}}), - LocationAccess(W_CLOCK_TOWN_SWORDSMANS_SCHOOL, {[] {return Fighting;}}), + LocationAccess(W_CLOCK_TOWN_SWORDSMANS_SCHOOL, {[] {return AnyBSword;}}), }, { //Exits @@ -464,7 +468,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(W_CLOCK_TOWN_POSTMANS_GAME, {[] {return true;}}),//Maybe Bunny Hood? + LocationAccess(W_CLOCK_TOWN_POSTMANS_GAME, {[] {return BunnyHood;}}),//trick to do without? }, { //Exits @@ -495,13 +499,15 @@ void AreaTable_Init() { LocationAccess(W_CLOCK_TOWN_BIG_BOMB_BAG_BUY, {[] {return OldLadySaved;}}), LocationAccess(W_CLOCK_TOWN_BOMB_SHOP_GORON, {[] {return GoronMask && PowderKeg;}}), }, - { + { //Exits Entrance(W_CLOCK_TOWN, {[]{return true;}}), }); areaTable[CLOCK_TOWN_TRADING_POST] = Area("Trading Post", "Trading Post", NONE, { //Events + EventAccess(&ScarecrowSong, {[]{return Ocarina;}}), + EventAccess(&SpringWater, {[]{return AnyBottle;}}), }, { //Locations @@ -524,7 +530,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY, {[] {return AnyWallet;}}), + LocationAccess(W_CLOCK_TOWN_ALL_NIGHT_MASK_BUY, {[] {return (ProgressiveWallet >= 2);}}), }, { //Exits @@ -533,7 +539,8 @@ void AreaTable_Init() { areaTable[S_CLOCK_TOWN] = Area("South Clock Town", "South Clock Town", S_CLOCK_TOWN, { //Events - }, + EventAccess(&PostedKafeiLetter, {[]{return LetterKafei;}}), + }, { //Locations LocationAccess(S_CLOCK_TOWN_SCRUB_TRADE, {[] {return MoonsTear;}}), @@ -542,8 +549,8 @@ void AreaTable_Init() { LocationAccess(S_CLOCK_TOWN_STRAW_ROOF_CHEST, {[] {return Hookshot || (DekuMask && MoonsTear);}}), LocationAccess(S_CLOCK_TOWN_FINAL_DAY_CHEST, {[] {return Hookshot || (DekuMask && MoonsTear);}}), LocationAccess(S_CLOCK_TOWN_BANK_REWARD_1, {[] {return true;}}), - LocationAccess(S_CLOCK_TOWN_BANK_REWARD_2, {[] {return AnyWallet;}}), - LocationAccess(S_CLOCK_TOWN_BANK_REWARD_3, {[] {return AnyWallet;}}), + LocationAccess(S_CLOCK_TOWN_BANK_REWARD_2, {[] {return AnyWallet;}}),//Adult Wallet for lenience + LocationAccess(S_CLOCK_TOWN_BANK_REWARD_3, {[] {return (OceanWallet500 || ProgressiveWallet > 1);}}),//Giant Wallet for lenience }, { //Exits @@ -589,26 +596,28 @@ void AreaTable_Init() { areaTable[LAUNDRY_POOL] = Area("Laundry Pool", "Laundry Pool", LAUNDRY_POOL, { //Events EventAccess(&LaundryFrog, {[]{return DonGerosMask;}}), - }, + EventAccess(&Bugs, {[]{return AnyBottle;}}), + }, { //Locations - LocationAccess(LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE, {[] {return LetterKafei;}}), - LocationAccess(LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO, {[] {return LetterKafei;}}), + LocationAccess(LAUNDRY_POOL_CURIOSITY_SHOP_MAN_ONE, {[] {return SpokeToKafei;}}), + LocationAccess(LAUNDRY_POOL_CURIOSITY_SHOP_MAN_TWO, {[] {return SpokeToKafei;}}), LocationAccess(LAUNDRY_POOL_GURU_GURU, {[] {return true;}}), //No Reqs, Talk on night of day 1 or 2 LocationAccess(LAUNDRY_POOL_SF, { [] {return true;}}), }, { //Exits Entrance(S_CLOCK_TOWN, {[]{return true;}}), - Entrance(LAUNDRY_POOL_KAFEI_HIDEOUT, {[]{return LetterKafei;}}), + Entrance(LAUNDRY_POOL_KAFEI_HIDEOUT, {[]{return PostedKafeiLetter;}}), }); areaTable[LAUNDRY_POOL_KAFEI_HIDEOUT] = Area("Kafei's Hideout", "Kafei's Hideout", NONE, { //Events + EventAccess(&SpokeToKafei, {[]{return PostedKafeiLetter;}}), }, { //Locations - LocationAccess(LAUNDRY_POOL_KAFEI, {[] {return LetterKafei;}}), + LocationAccess(LAUNDRY_POOL_KAFEI, {[] {return PostedKafeiLetter;}}), }, { @@ -623,21 +632,13 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(TERMINA_FIELD_MOONS_TEAR, {[] {return WatchMoonTearFall;}}), LocationAccess(TERMINA_FIELD_KAMARO, {[] {return CanPlay(SongOfHealing);}}), 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; } }), + LocationAccess(TERMINA_FIELD_STUMP_CHEST, {[] {return Hookshot || BeansAndWater;}}), //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;}}), @@ -650,22 +651,39 @@ void AreaTable_Init() { Entrance(S_CLOCK_TOWN, {[]{return true;}}), Entrance(TERMINA_FIELD_PEAHAT_GROTTO, {[]{return true;}}), Entrance(TERMINA_FIELD_DODONGO_GROTTO, {[]{return true;}}), - Entrance(TERMINA_FIELD_BIO_BABA_GROTTO, {[]{return true;}}), + Entrance(TERMINA_FIELD_BIO_BABA_GROTTO, {[]{return CanBlastOrSmash;}}), Entrance(TERMINA_FIELD_PILLAR_GROTTO, {[]{return true;}}), Entrance(TERMINA_FIELD_GRASS_GROTTO, {[]{return true;}}), Entrance(TERMINA_FIELD_BUSINESS_SCRUB_GROTTO, {[]{return true;}}), - Entrance(TERMINA_FIELD_COW_GROTTO, {[]{return true;}}), - Entrance(TERMINA_FIELD_GOSSIP_STONES_GROTTO, {[]{return AnyBombBag || BlastMask || GoronMask;}}),//Something to break rocks + Entrance(TERMINA_FIELD_COW_GROTTO, {[]{return HasExplosives && MaskOfTruth;}}),//Trick for no MoT? + Entrance(TERMINA_FIELD_GOSSIP_STONES_GROTTO, {[]{return CanBlastOrSmash;}}),//Something to break rocks Entrance(ROAD_TO_SOUTHERN_SWAMP, {[]{return true;}}), Entrance(PATH_TO_MOUNTAIN_VILLAGE, {[]{return Bow;}}),// || (HotSpringWater && AnyBottle) Entrance(MILK_ROAD, {[]{return true;}}), Entrance(GREAT_BAY_COAST, {[]{return CanPlay(EponasSong);}}), Entrance(ROAD_TO_IKANA, {[]{return true;}}), + Entrance(TERMINA_FIELD_OUTSIDE_OBSERVATORY, {[]{return DekuMask;}}), }); - areaTable[TERMINA_FIELD_PEAHAT_GROTTO] = Area("Termina Field Peahat Grotto","Termina Field Peahat Grotto", TERMINA_FIELD_PEAHAT_GROTTO,{ + areaTable[TERMINA_FIELD_OUTSIDE_OBSERVATORY] = Area("Termina Field Outside Observatory","Termina Field Outside Observatory", NONE, { //Events }, + { + //Locations + LocationAccess(TERMINA_FIELD_MOONS_TEAR, {[] {return WatchMoonTearFall;}}), + //Gossip Stones + LocationAccess(TF_OBSERVATORY_GOSSIP, {[] {return true;}}), + }, + { + //Exits + Entrance(TERMINA_FIELD, {[]{return BeansAndWater;}}), + Entrance(CLOCK_TOWN_OBSERVATORY, {[]{return true;}}), + }); + + areaTable[TERMINA_FIELD_PEAHAT_GROTTO] = Area("Termina Field Peahat Grotto","Termina Field Peahat Grotto", NONE, { + //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + }, { //Locations LocationAccess(TERMINA_FIELD_PEAHAT_GROTTO_CHEST, {[] {return Fighting || Bow;}}), @@ -675,7 +693,8 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_DODONGO_GROTTO] = Area("Termina Field Dodongo Grotto","Termina Field Dodongo Grotto", TERMINA_FIELD_DODONGO_GROTTO,{ + + areaTable[TERMINA_FIELD_DODONGO_GROTTO] = Area("Termina Field Dodongo Grotto","Termina Field Dodongo Grotto", NONE, { //Events }, { @@ -687,8 +706,9 @@ 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", TERMINA_FIELD_BIO_BABA_GROTTO,{ + areaTable[TERMINA_FIELD_BIO_BABA_GROTTO] = Area("Termina Field Bio Baba Grotto","Termina Field Bio Baba Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? }, { //Locations @@ -698,8 +718,13 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_PILLAR_GROTTO] = Area("Termina Field Pillar Grotto","Termina Field Pillar Grotto", TERMINA_FIELD_PILLAR_GROTTO,{ + areaTable[TERMINA_FIELD_PILLAR_GROTTO] = Area("Termina Field Pillar Grotto","Termina Field Pillar Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -709,8 +734,13 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_GRASS_GROTTO] = Area("Termina Field Grass Grotto","Termina Field Grass Grotto", TERMINA_FIELD_GRASS_GROTTO,{ + areaTable[TERMINA_FIELD_GRASS_GROTTO] = Area("Termina Field Grass Grotto","Termina Field Grass Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -720,36 +750,43 @@ void AreaTable_Init() { { //Exits }); - areaTable[TERMINA_FIELD_BUSINESS_SCRUB_GROTTO] = Area("Termina Field Business Scrub Grotto","Termina Field Business Scrub Grotto", TERMINA_FIELD_BUSINESS_SCRUB_GROTTO,{ + areaTable[TERMINA_FIELD_BUSINESS_SCRUB_GROTTO] = Area("Termina Field Business Scrub Grotto","Termina Field Business Scrub Grotto", NONE, { //Events + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? }, { //Locations - LocationAccess(TERMINA_FIELD_BUSINESS_SCRUB, {[] {return AnyWallet;}}), + LocationAccess(TERMINA_FIELD_BUSINESS_SCRUB, {[] {return AnyWallet && WatchMoonTearFall;}}), }, { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_COW_GROTTO] = Area("Termina Field Cow Grotto","Termina Field Cow Grotto", TERMINA_FIELD_COW_GROTTO,{ + areaTable[TERMINA_FIELD_COW_GROTTO] = Area("Termina Field Cow Grotto","Termina Field Cow Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Milk, {[]{return CanPlay(EponasSong) && AnyBottle;}}), }, { //Locations - LocationAccess(TERMINA_FIELD_GROTTO_COW1, {[]{return CanPlay(EponasSong);}}), - LocationAccess(TERMINA_FIELD_GROTTO_COW2, {[]{return CanPlay(EponasSong);}}), + LocationAccess(TERMINA_FIELD_GROTTO_COW1, {[]{return CanPlay(EponasSong) && AnyBottle;}}), + LocationAccess(TERMINA_FIELD_GROTTO_COW2, {[]{return CanPlay(EponasSong) && AnyBottle;}}), }, { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), }); - areaTable[TERMINA_FIELD_GOSSIP_STONES_GROTTO] = Area("Termina Field Gossip Stones Grotto","Termina Field Gossip Stones Grotto", TERMINA_FIELD_GOSSIP_STONES_GROTTO,{ + areaTable[TERMINA_FIELD_GOSSIP_STONES_GROTTO] = Area("Termina Field Gossip Stones Grotto","Termina Field Gossip Stones Grotto", NONE, { //Events + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&SpringWater, {[] {return AnyBottle;}}), + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? }, { //Locations - LocationAccess(TERMINA_FIELD_GOSSIP_STONES, {[] {return (GoronMask && CanPlay(GoronsLullaby)) || - (DekuMask && CanPlay(SonataOfAwakening)) || + 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;}}), @@ -763,18 +800,23 @@ void AreaTable_Init() { areaTable[ROAD_TO_SOUTHERN_SWAMP] = Area("Road to Southern Swamp", "Road to Southern Swamp", ROAD_TO_SOUTHERN_SWAMP, { //Events - }, + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&SpringWater, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&WinnerPicture, {[]{return false;}}),//Trick for picture of Tingle instead of Deku King? + }, { //Locations - LocationAccess(ROAD_TO_SS_TREE, {[] {return DekuMask && (MagicMeter || Bow || Hookshot || ZoraMask);}}),//something to kill the dragonfly - LocationAccess(TINGLE_ROAD_TO_SS_WF, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), - LocationAccess(TINGLE_ROAD_TO_SS_SH, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(ROAD_TO_SS_TREE, {[] {return CanUseProjectile;}}),//something to kill the dragonfly + LocationAccess(TINGLE_ROAD_TO_SS_WF, {[]{return CanUseProjectile;}}), + LocationAccess(TINGLE_ROAD_TO_SS_SH, {[]{return CanUseProjectile;}}), //Gossip Stones LocationAccess(ROAD_TO_SS_GOSSIP, {[] {return true;}}), }, { //Exits - Entrance(TERMINA_FIELD,{[]{return true;}}), + Entrance(TERMINA_FIELD, {[]{return true;}}), Entrance(SOUTHERN_SWAMP, {[]{return true;}}), Entrance(ROAD_TO_SOUTHERN_SWAMP_ARCHERY, {[]{return true;}}), Entrance(ROAD_TO_SWAMP_GROTTO, {[]{return true;}}), @@ -797,6 +839,11 @@ void AreaTable_Init() { areaTable[ROAD_TO_SWAMP_GROTTO] = Area("Road To Southen Swamp Grotto", "Road To Southern Swamp Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -810,14 +857,20 @@ void AreaTable_Init() { areaTable[SOUTHERN_SWAMP] = Area("Southern Swamp", "Southern Swamp", SOUTHERN_SWAMP, { //Events + EventAccess(&Mushroom, {[]{return MaskOfScents && AnyBottle;}}),//Base logic expects mushrooms from SS or Woods + EventAccess(&SpringWater, {[]{return AnyBottle;}}), EventAccess(&SwampFrog, {[]{return DonGerosMask;}}), - }, + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + }, { //Locations LocationAccess(SOUTHERN_SWAMP_SCRUB_TRADE, {[] {return LandTitle;}}), LocationAccess(SOUTHERN_SWAMP_SCRUB_PURCHASE, {[]{return DekuMask;}}), LocationAccess(SOUTHERN_SWAMP_MUSIC_STATUE, {[] {return true;}}), LocationAccess(SWAMP_TOURIST_CENTER_ROOF, {[] {return DekuMask && LandTitle;}}), + LocationAccess(SOUTHERN_SWAMP_SCRUB_TRADE_CLEAR, {[] {return LandTitle && WoodfallClear;}}), + LocationAccess(SOUTHERN_SWAMP_SCRUB_PURCHASE_CLEAR, {[]{return DekuMask && WoodfallClear;}}), + LocationAccess(SWAMP_TOURIST_CENTER_ROOF_CLEAR, {[] {return DekuMask && LandTitle && WoodfallClear;}}), //Gossip Stones LocationAccess(SS_GOSSIP, {[] {return true;}}), }, @@ -827,10 +880,11 @@ void AreaTable_Init() { Entrance(MYSTERY_WOODS, {[]{return true;}}), Entrance(SWAMP_TOURIST_CENTER, {[]{return true;}}), Entrance(SOUTHERN_SWAMP_HAGS_POTION_SHOP, {[]{return true;}}), - Entrance(DEKU_PALACE, {[]{return DekuMask && AnyBottle;}}), + + Entrance(DEKU_PALACE, {[]{return KoumeSaved || WoodfallClear || (DekuMask && (Bow || ZoraMask || Hookshot));}}), Entrance(SOUTHERN_SWAMP_TOP, {[]{return false;}}),//Only accessable From top route falling down - Entrance(SSH_ENTRANCE, {[]{return DekuMask && AnyBottle;}}), - Entrance(SOUTHERN_SWAMP_NEAR_SPIDER_HOUSE_GROTTO, {[]{return DekuMask && AnyBottle;}}), + Entrance(SSH_ENTRANCE, {[]{return (DekuMask && (KoumeSaved || Bow || ZoraMask || Hookshot)) || WoodfallClear;}}), + Entrance(SOUTHERN_SWAMP_NEAR_SPIDER_HOUSE_GROTTO, {[]{return (DekuMask && (KoumeSaved || Bow || ZoraMask || Hookshot)) || WoodfallClear;}}), }); areaTable[SWAMP_TOURIST_CENTER] = Area("Swamp Tourist Center", "Swamp Tourist Center", NONE, { @@ -838,9 +892,9 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SOUTHERN_SWAMP_KOUME, {[] {return AnyBottle && DekuMask;}}), - LocationAccess(SOUTHERN_SWAMP_PICTOGRAPH_WINNER, {[] {return Pictobox;}}), - LocationAccess(SOUTHERN_SWAMP_BOAT_ARCHERY, {[] {return WoodfallClear && AnyBottle;}}), + LocationAccess(SOUTHERN_SWAMP_KOUME, {[] {return KoumeSaved;}}), + LocationAccess(SOUTHERN_SWAMP_PICTOGRAPH_WINNER, {[] {return WinnerPicture;}}), + LocationAccess(SOUTHERN_SWAMP_BOAT_ARCHERY, {[] {return WoodfallClear && KoumeSaved;}}), }, { //Exits @@ -852,7 +906,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SOUTHERN_SWAMP_KOTAKE, {[] {return true;}}), + LocationAccess(SOUTHERN_SWAMP_KOTAKE, {[] {return SpokeToKoume;}}), LocationAccess(SOUTHERN_SWAMP_KOTAKE_MUSHROOM_SALE, {[] {return Mushroom;}}), LocationAccess(POTION_SHOP_ITEM_1, {[]{return AnyBottle;}}), LocationAccess(POTION_SHOP_ITEM_2, {[]{return AnyBottle;}}), @@ -866,7 +920,9 @@ void AreaTable_Init() { areaTable[MYSTERY_WOODS] = Area("Mystery Woods", "Mystery Woods", MYSTERY_WOODS, { //Events - EventAccess(&Mushroom, {[]{return MaskOfScents && AnyBottle;}}), + EventAccess(&SpokeToKoume, {[]{return true;}}), + EventAccess(&Mushroom, {[]{return MaskOfScents && AnyBottle;}}),//Base logic expects mushrooms from SS or Woods + EventAccess(&KoumeSaved, {[]{return AnyBottle;}}),//Add Red Potion requirement for shuffle shops }, { //Locations @@ -880,6 +936,11 @@ void AreaTable_Init() { areaTable[SOUTHERN_SWAMP_MYSTERY_WOODS_GROTTO] = Area("Mystery Woods Grotto", "Mystery Woods Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -895,7 +956,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SOUTHERN_SWAMP_NEAR_SPIDER_HOUSE_GROTTO_CHEST, {[] {return DekuMask && AnyBottle;}}), + LocationAccess(SOUTHERN_SWAMP_NEAR_SPIDER_HOUSE_GROTTO_CHEST, {[] {return true;}}), }, { //Exits @@ -910,13 +971,15 @@ void AreaTable_Init() { }, { //Exits - Entrance(SOUTHERN_SWAMP, {[]{return true;}}),//just fall off + Entrance(SOUTHERN_SWAMP, {[]{return true;}}),//just fall off Entrance(WOODFALL, {[]{return DekuMask;}}), }); areaTable[DEKU_PALACE] = Area("Deku Palace", "Deku Palace", DEKU_PALACE, { //Events - }, + EventAccess(&Mushroom, {[]{return /*DekuMask || WoodfallClear*/ false;}}),//Trick for obscure mushroom? + EventAccess(&DekuBabaNuts, {[]{return DekuMask || (WoodfallClear && Fighting);}}), + }, { //locations LocationAccess(DEKU_PALACE_WEST_GARDEN, {[] {return DekuMask;}}), @@ -927,18 +990,19 @@ void AreaTable_Init() { //SOUTHERN_SWAMP_TOP might not be needed but theres two entrances/exits from deku palace that lead to southern swamp //BUT only the top route can reach woodfall Entrance(SOUTHERN_SWAMP_TOP, {[]{return DekuMask;}}), - Entrance(DEKU_PALACE_INTERIOR, {[]{return DekuMask && WaterForBeans && MagicBean;}}), - Entrance(DEKU_PALACE_BEAN_GROTTO, {[]{return DekuMask;}}), - Entrance(DEKU_SHRINE, {[]{return DekuMask;}}), + Entrance(DEKU_PALACE_INTERIOR, {[]{return DekuMask && BeansAndWater;}}), + Entrance(DEKU_PALACE_BEAN_GROTTO, {[]{return DekuMask || WoodfallClear;}}), + Entrance(DEKU_SHRINE, {[]{return WoodfallClear;}}), }); areaTable[DEKU_PALACE_INTERIOR] = Area("Deku Palace Throne Room", "Deku Palace Throne Room", NONE, { //Events - EventAccess(&DekuPrincessReturned, {[]{return DekuPrincess;}}), + EventAccess(&DekuPrincessReturned, {[]{return DekuMask && DekuPrincess;}}), + EventAccess(&WinnerPicture, {[]{return DekuMask && Pictobox;}}), }, { //Locations - LocationAccess(DEKU_PALACE_IMPRISONED_MONKEY, {[] {return DekuMask && MagicBean && WaterForBeans;}}), + LocationAccess(DEKU_PALACE_IMPRISONED_MONKEY, {[] {return DekuMask && Ocarina;}}), }, { //Exits @@ -947,13 +1011,15 @@ void AreaTable_Init() { areaTable[DEKU_PALACE_BEAN_GROTTO] = Area("Deku Palace Bean Grotto", "Deku Palace Bean Grotto", NONE, { //Events - EventAccess(&LimitlessBeans, {[]{return LimitlessBeans;}}), - EventAccess(&SpringWater, {[]{return SpringWater;}}) + EventAccess(&LimitlessBeans, {[]{return true;}}), + EventAccess(&SpringWater, {[]{return AnyBottle;}}), + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), }, { //Locations LocationAccess(DEKU_PALACE_BEAN_SELLER, {[] {return true;}}), - LocationAccess(DEKU_PALACE_BEAN_GROTTO_CHEST, {[] {return DekuMask && ((MagicBean && WaterForBeans) || Hookshot);}}), + LocationAccess(DEKU_PALACE_BEAN_GROTTO_CHEST, {[] {return BeansAndWater || Hookshot;}}), }, { //Exits @@ -965,7 +1031,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(DEKU_PALACE_BUTLER_RACE, {[] {return DekuMask;}}),// && DekuPrincessReturned + LocationAccess(DEKU_PALACE_BUTLER_RACE, {[] {return (Fighting || CanUseProjectile) && DekuPrincessReturned;}}), }, { //Exits @@ -974,12 +1040,12 @@ void AreaTable_Init() { areaTable[WOODFALL] = Area("Woodfall", "Woodfall", WOODFALL, { //Events - }, + }, { //Locations - LocationAccess(WOODFALL_BRIDGE_CHEST, {[] {return DekuMask;}}), - LocationAccess(WOODFALL_BEHIND_OWL_CHEST, {[] {return DekuMask;}}), - LocationAccess(ENTRANCE_TO_WOODFALL_CHEST, {[] {return DekuMask;}}), + LocationAccess(WOODFALL_BRIDGE_CHEST, {[] {return (DekuMask && (Fighting || CanUseProjectile)) || Hookshot;}}),//Fighting or projectile to get past the Hiploop + LocationAccess(WOODFALL_BEHIND_OWL_CHEST, {[] {return DekuMask && (Fighting || CanUseProjectile);}}),//Fighting or projectile to get past the Hiploop + LocationAccess(ENTRANCE_TO_WOODFALL_CHEST, {[] {return DekuMask || WoodfallClear || Hookshot;}}), }, { @@ -1014,17 +1080,20 @@ void AreaTable_Init() { { //Exits Entrance(TERMINA_FIELD, {[]{return true;}}), - Entrance(MOUNTAIN_VILLAGE, {[]{return AnyBombBag;}}), + Entrance(MOUNTAIN_VILLAGE, {[]{return HasExplosives || CanUse(FIRE_ARROWS) || GoronMask;}}), }); areaTable[MOUNTAIN_VILLAGE] = Area("Mountain Village", "Mountain Village", MOUNTAIN_VILLAGE, { //Events - }, + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle && SnowheadClear;}}), + }, { //Locations - 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;}}), + LocationAccess(MOUNTAIN_VILLAGE_FROG_CHOIR, {[] {return SnowheadClear && LaundryFrog && SwampFrog && WoodfallFrog && GreatBayFrog && DonGerosMask;}}), + LocationAccess(MOUNTAIN_VILLAGE_HUNGRY_GORON, {[] {return GoronMask && RockSirloin;}}), + LocationAccess(MOUNTAIN_WATERFALL_CHEST, {[] {return SnowheadClear && CanUse(LENS_OF_TRUTH);}}), + LocationAccess(MOUNTAIN_VILLAGE_KEATON_QUIZ, {[]{return SnowheadClear && KeatonMask && AnySword;}}), //Gossip Stones LocationAccess(MV_NEAR_FROGS_GOSSIP, {[] {return true;}}), LocationAccess(MV_NEAR_GROTTO_GOSSIP, {[] {return true;}}), @@ -1033,7 +1102,7 @@ void AreaTable_Init() { //Exits Entrance(PATH_TO_MOUNTAIN_VILLAGE, {[]{return true;}}), Entrance(TWIN_ISLANDS, {[]{return true;}}), - Entrance(GORON_GRAVEYARD, {[]{return LensOfTruth && MagicMeter;}}), + Entrance(GORON_GRAVEYARD, {[]{return CanUse(LENS_OF_TRUTH);}}), Entrance(ROAD_TO_SNOWHEAD, {[]{return true;}}), Entrance(MOUNTAIN_SMITHY, {[]{return true;}}), Entrance(MOUNTAIN_VILLAGE_SPRING_WATER_GROTTO, {[]{return SnowheadClear;}}), @@ -1041,10 +1110,11 @@ void AreaTable_Init() { areaTable[GORON_GRAVEYARD] = Area("Goron Graveyard", "Goron Graveyard", NONE, { //Events + EventAccess(&HotSpringWater, {[]{return GoronMask && AnyBottle;}}), }, { //Locations - LocationAccess(MOUNTAIN_VILLAGE_DARMANI, {[] {return LensOfTruth && CanPlay(SongOfHealing) && MagicMeter;}}), + LocationAccess(MOUNTAIN_VILLAGE_DARMANI, {[] {return CanUse(LENS_OF_TRUTH) && CanPlay(SongOfHealing);}}), }, { //Exits @@ -1056,8 +1126,9 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(MOUNTAIN_VILLAGE_SMITH_DAY_ONE, {[] {return AnyWallet && ( HotSpringWater || SnowheadClear || (Bow && MagicMeter && FireArrows));}}), - LocationAccess(MOUNTAIN_VILLAGE_SMITH_DAY_TWO, {[] {return GoronRaceBottle && (HotSpringWater || SnowheadClear || (Bow && MagicMeter && FireArrows));}}), + LocationAccess(MOUNTAIN_VILLAGE_SMITH_DAY_ONE, {[] {return AnyWallet && AnyBSword && (HotSpringWater || SnowheadClear || CanUse(FIRE_ARROWS));}}), //Need to check for B sword + LocationAccess(MOUNTAIN_VILLAGE_SMITH_DAY_TWO, {[] {return GoronRaceBottle && AnyWallet && AnyBSword && (HotSpringWater || SnowheadClear || CanUse(FIRE_ARROWS));}}), //Currently need at least one progressive wallet as these are not independent checks + //Hot Spring Water may not be viable in ER, can timer be removed? }, { //Exits @@ -1066,6 +1137,11 @@ void AreaTable_Init() { areaTable[MOUNTAIN_VILLAGE_SPRING_WATER_GROTTO] = Area("Mountain Village Spring Water Grotto", "Mountain Village Spring Water Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -1078,22 +1154,23 @@ void AreaTable_Init() { areaTable[TWIN_ISLANDS] = Area("Twin Islands", "Twin Islands", TWIN_ISLANDS, { //Events - //Goron Elder song part? + EventAccess(&WinnerPicture, {[]{return false;}}),//Trick for picture of Tingle instead of Deku King? }, { //Locations LocationAccess(TWIN_ISLANDS_UNDERWATER_RAMP_CHEST, {[] {return SnowheadClear && ZoraMask;}}), LocationAccess(TWIN_ISLANDS_CAVE_CHEST, {[] {return SnowheadClear && ZoraMask;}}), - LocationAccess(TINGLE_TWIN_ISLANDS_SH, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), - LocationAccess(TINGLE_TWIN_ISLANDS_RR, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), - LocationAccess(TINGLE_TWIN_ISLANDS_SH_SPRING, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), - LocationAccess(TINGLE_TWIN_ISLANDS_RR_SPRING, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TWIN_ISLANDS_LULLABY_INTRO, {[] {return SpokeToBabyGoron && GoronMask && (HotSpringWater || CanUse(FIRE_ARROWS));}}),//Hot Spring Water may not be viable in ER, can timer be removed? + LocationAccess(TINGLE_TWIN_ISLANDS_SH, {[]{return CanUseProjectile;}}), + LocationAccess(TINGLE_TWIN_ISLANDS_RR, {[]{return CanUseProjectile;}}), + LocationAccess(TINGLE_TWIN_ISLANDS_SH_SPRING, {[]{return CanUseProjectile;}}), + LocationAccess(TINGLE_TWIN_ISLANDS_RR_SPRING, {[]{return CanUseProjectile;}}), }, { //Exits Entrance(MOUNTAIN_VILLAGE, {[]{return true;}}), - Entrance(GORON_RACETRACK, {[]{return PowderKeg && GoronMask && AnyBombBag;}}), - Entrance(TWIN_ISLANDS_SPRING_WATER_GROTTO, {[]{return (Bow && FireArrows && MagicMeter) || SnowheadClear;}}), + Entrance(GORON_RACETRACK, {[]{return PowderKeg && GoronMask;}}), + Entrance(TWIN_ISLANDS_SPRING_WATER_GROTTO, {[]{return (HotSpringWater || CanUse(FIRE_ARROWS)) || SnowheadClear;}}),//Hot Spring Water may not be viable in ER, can timer be removed? Entrance(GORON_VILLAGE, {[]{return true;}}), }); @@ -1107,11 +1184,16 @@ void AreaTable_Init() { { //Exits Entrance(TWIN_ISLANDS, {[]{return true;}}), - Entrance(TWIN_ISLANDS_GORON_RACETRACK_GROTTO, {[]{return AnyBombBag;}}), + Entrance(TWIN_ISLANDS_GORON_RACETRACK_GROTTO, {[]{return HasExplosives && MaskOfTruth && ((Hookshot && CanPlay(ScarecrowSong)) || GoronMask);}}),//Trick for no MoT? }); areaTable[TWIN_ISLANDS_GORON_RACETRACK_GROTTO] = Area("Goron Racetrack Grotto", "Goron Racetrack Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -1124,7 +1206,9 @@ void AreaTable_Init() { areaTable[TWIN_ISLANDS_SPRING_WATER_GROTTO] = Area("Twin Islands Hot Spring Water Grotto", "Twin Islands Hot Spring Water Grotto", NONE, { //Events - EventAccess(&HotSpringWater, {[]{return HotSpringWater;}}), + EventAccess(&HotSpringWater, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? }, { //Locations @@ -1138,33 +1222,34 @@ void AreaTable_Init() { areaTable[GORON_VILLAGE] = Area("Goron Village", "Goron Village", GORON_VILLAGE, { //Events //Owl talk? - }, + }, { //Locations - LocationAccess(GORON_VILLAGE_POWDER_KEG_CHALLENGE, {[] {return GoronMask && (SnowheadClear || (Bow && FireArrows && MagicMeter));}}), - LocationAccess(GORON_VILLAGE_SCRUB_PURCHASE, {[] {return AnyWallet && GoronMask;}}), + LocationAccess(GORON_VILLAGE_POWDER_KEG_CHALLENGE, {[] {return GoronMask && (SnowheadClear || CanUse(FIRE_ARROWS));}}), + LocationAccess(GORON_VILLAGE_SCRUB_PURCHASE, {[] {return AnyWallet && GoronMask && (ProgressiveBombBag >= 2);}}), LocationAccess(GORON_VILLAGE_SCRUB_TRADE, {[] {return DekuMask && SwampTitle;}}), LocationAccess(GORON_VILLAGE_LEDGE, {[] {return DekuMask && SwampTitle;}}), - LocationAccess(GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, {[] {return GoronMask && (SnowheadClear || (Bow && FireArrows && MagicMeter));}}), - LocationAccess(GORON_VILLAGE_SCRUB_PURCHASE_SPRING, {[] {return AnyWallet && GoronMask;}}), + LocationAccess(GORON_VILLAGE_POWDER_KEG_CHALLENGE_SPRING, {[] {return GoronMask && (SnowheadClear || CanUse(FIRE_ARROWS));}}), + LocationAccess(GORON_VILLAGE_SCRUB_PURCHASE_SPRING, {[] {return AnyWallet && GoronMask && (ProgressiveBombBag >= 2);}}), LocationAccess(GORON_VILLAGE_SCRUB_TRADE_SPRING, {[] {return DekuMask && SwampTitle;}}), LocationAccess(GORON_VILLAGE_LEDGE_SPRING, {[] {return DekuMask && SwampTitle;}}), }, { //Exits Entrance(GORON_VILLAGE_LENS_CAVE, {[]{return true;}}), - Entrance(GORON_VILLAGE_INTERIOR, {[]{return (AnyBottle && HotSpringWater) || GoronMask;}}), //unfreeze goron or open it yourself + Entrance(GORON_VILLAGE_INTERIOR, {[]{return GoronMask || CanUse(FIRE_ARROWS);}}),//Ensure entry is available all days. Explosives do not work here Entrance(TWIN_ISLANDS, {[]{return true;}}), }); areaTable[GORON_VILLAGE_LENS_CAVE] = Area("Lens of Truth Cave", "Lens of Truth Cave", NONE, { //Events + EventAccess(&Bugs, {[]{return AnyBottle;}}), }, { //Locations LocationAccess(GORON_VILLAGE_LENS_OF_TRUTH_CHEST, {[] {return true;}}), - LocationAccess(LENS_CAVE_RED_RUPEE, {[] {return LensOfTruth && MagicMeter;}}), - LocationAccess(LENS_CAVE_PURPLE_RUPEE, {[] {return AnyBombBag && LensOfTruth && MagicMeter;}}), + LocationAccess(LENS_CAVE_RED_RUPEE, {[] {return CanUse(LENS_OF_TRUTH);}}), + LocationAccess(LENS_CAVE_PURPLE_RUPEE, {[] {return HasExplosives;}}),//Do not need Lens for this chest }, { //Exits @@ -1173,13 +1258,12 @@ void AreaTable_Init() { areaTable[GORON_VILLAGE_INTERIOR] = Area("Goron Village Interior", "Goron Village Interior", GORON_VILLAGE, { //Events - //Light Torches? - //Rock Roast? - //Stop Baby Crying? + EventAccess(&SpokeToBabyGoron, {[]{return true;}}), + EventAccess(&RockSirloin, {[]{return GoronMask && MagicMeter && (CanUse(FIRE_ARROWS) || (CanPlay(LullabyIntro) && HasFireSourceWithTorch));}}), }, { //Locations - LocationAccess(GORON_VILLAGE_GORON_LULLABY, {[]{return GoronMask;}}), + LocationAccess(GORON_VILLAGE_GORON_LULLABY, {[]{return GoronMask && CanPlay(LullabyIntro);}}), }, { //Exits @@ -1203,21 +1287,26 @@ void AreaTable_Init() { areaTable[ROAD_TO_SNOWHEAD] = Area("Road To Snowhead", "Road To Snowhead", ROAD_TO_SNOWHEAD, { //Events - }, + }, { //Locations - LocationAccess(ROAD_TO_SNOWHEAD_PILLAR, {[] {return GoronMask && MagicMeter && LensOfTruth;}}), + LocationAccess(ROAD_TO_SNOWHEAD_PILLAR, {[] {return GoronMask && CanUse(LENS_OF_TRUTH) && Hookshot && CanPlay(ScarecrowSong);}}), }, { //Exits - Entrance(ROAD_TO_SNOWHEAD_GROTTO, {[]{return GoronMask && MagicMeter && AnyBombBag;}}), + Entrance(ROAD_TO_SNOWHEAD_GROTTO, {[]{return GoronMask && MagicMeter && HasExplosives && MaskOfTruth;}}),//Trick for no MoT? Entrance(MOUNTAIN_VILLAGE, {[]{return true;}}), - Entrance(SNOWHEAD, {[]{return GoronMask && MagicMeter;}}), + Entrance(SNOWHEAD, {[]{return GoronMask && MagicMeter;}}),//Trick for no magic? }); areaTable[ROAD_TO_SNOWHEAD_GROTTO] = Area("Road To Snowhead Grotto", "Road to Snowhead Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -1231,7 +1320,7 @@ void AreaTable_Init() { areaTable[SNOWHEAD] = Area("Snowhead", "Snowhead", SNOWHEAD, { //Events //SleepyGoron - }, + }, { //Locations }, @@ -1256,11 +1345,12 @@ void AreaTable_Init() { areaTable[MILK_ROAD] = Area("Milk Road", "Milk Road", MILK_ROAD, { //Events - }, + EventAccess(&WinnerPicture, {[]{return false;}}),//Trick for picture of Tingle instead of Deku King? + }, { //Locations - LocationAccess(TINGLE_MILK_ROAD_RR, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), - LocationAccess(TINGLE_MILK_ROAD_GB, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_MILK_ROAD_RR, {[]{return CanUseProjectile;}}), + LocationAccess(TINGLE_MILK_ROAD_GB, {[]{return CanUseProjectile;}}), LocationAccess(MILK_ROAD_KEATON_QUIZ, {[] {return KeatonMask;}}), //Gossip Stones LocationAccess(MR_GOSSIP, {[] {return true;}}), @@ -1270,17 +1360,19 @@ void AreaTable_Init() { Entrance(TERMINA_FIELD, {[]{return true;}}), Entrance(GORMAN_TRACK, {[]{return true;}}), Entrance(ROMANI_RANCH, {[]{return true;}}), //Set to True because its open on Day 3 for one potential early check, checks for days 1 and 2 require powderkeg - //Will add in day + //Will add in day }); areaTable[GORMAN_TRACK] = Area("Gorman Track", "Gorman Track", NONE, { //Events + EventAccess(&UsableMysteryMilkBottle, {[] {return MilkQuestStart && CircusLeadersMask && MysteryMilkBottle;}}), // Assumes that if you could start the quest, you can finish it + EventAccess(&Milk, {[]{return AnyBottle;}}), }, { //Locations LocationAccess(MILK_ROAD_GORMAN_RACE, {[]{return CanPlay(EponasSong);}}), LocationAccess(MILK_ROAD_GORMAN_MILK_BUY, {[]{return AnyBottle;}}), - LocationAccess(GORMAN_TRACK_MYSTERY_MILK_QUEST, {[] {return CircusLeadersMask;}}), + LocationAccess(GORMAN_TRACK_MYSTERY_MILK_QUEST, {[] {return MilkQuestStart && CircusLeadersMask;}}), }, { //Exits @@ -1289,7 +1381,7 @@ void AreaTable_Init() { areaTable[ROMANI_RANCH] = Area("Romani Ranch", "Romani Ranch", ROMANI_RANCH, { EventAccess(&Epona, {[]{return Epona || CanPlay(EponasSong);}}), - }, + }, { //Locations LocationAccess(ROMANI_RANCH_ALIEN_DEFENSE, {[] {return GoronMask && PowderKeg && Bow;}}),//Day1 Night @@ -1311,11 +1403,12 @@ void AreaTable_Init() { areaTable[DOGGY_RACETRACK] = Area("Doggy Racetrack", "Doggy Racetrack", NONE, { //Events + EventAccess(&Bugs, {[]{return AnyBottle;}}), }, { //Locations LocationAccess(ROMANI_RANCH_DOG_RACE, {[] {return MaskOfTruth;}}), - LocationAccess(DOGGY_RACETRACK_ROOF_CHEST, {[] {return Hookshot || (WaterForBeans && MagicBean);}}), + LocationAccess(DOGGY_RACETRACK_ROOF_CHEST, {[] {return Hookshot || BeansAndWater;}}), //Gossip Stones LocationAccess(DOGGY_RACETRACK_GOSSIP, {[] {return true;}}), }, @@ -1351,12 +1444,13 @@ void AreaTable_Init() { areaTable[ROMANI_RANCH_BARN] = Area("Romani Ranch Barn", "Romani Ranch Barn", NONE, { //Events + EventAccess(&Milk, {[]{return CanPlay(EponasSong) && AnyBottle;}}), }, { //Locations - LocationAccess(ROMANI_RANCH_COW_1, {[]{return EponasSong && AnyBottle;}}), - LocationAccess(ROMANI_RANCH_COW_2, {[]{return EponasSong && AnyBottle;}}), - LocationAccess(ROMANI_RANCH_COW_3, {[]{return EponasSong && AnyBottle;}}), + LocationAccess(ROMANI_RANCH_COW_1, {[]{return CanPlay(EponasSong) && AnyBottle && PowderKeg && GoronMask;}}), + LocationAccess(ROMANI_RANCH_COW_2, {[]{return CanPlay(EponasSong) && AnyBottle && PowderKeg && GoronMask;}}), + LocationAccess(ROMANI_RANCH_COW_3, {[]{return CanPlay(EponasSong) && AnyBottle && PowderKeg && GoronMask;}}), }, { //Exits @@ -1365,14 +1459,17 @@ void AreaTable_Init() { areaTable[GREAT_BAY_COAST] = Area("Great Bay Coast", "Great Bay Coast", GREAT_BAY_COAST, { //Events - }, + EventAccess(&WinnerPicture, {[]{return false;}}),//Trick for picture of Tingle instead of Deku King? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + }, { //Locations LocationAccess(GBC_FISHERMAN_GAME, {[] {return GreatBayClear && Hookshot;}}), - LocationAccess(GBC_LEDGE, {[] {return Hookshot && MagicBean && AnyBottle;}}), + LocationAccess(GBC_LEDGE, {[] {return Hookshot && BeansAndWater && AnyBottle;}}), LocationAccess(GBC_MIKAU, {[] {return CanPlay(SongOfHealing);}}), - LocationAccess(TINGLE_GBC_GB, {[]{ return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), - LocationAccess(TINGLE_GBC_ST, {[]{ return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_GBC_GB, {[]{ return CanUseProjectile;}}), + LocationAccess(TINGLE_GBC_ST, {[]{ return CanUseProjectile;}}), //Gossip Stones LocationAccess(GBC_BENEATH_COW_GROTTO_GOSSIP, {[] {return true;}}), LocationAccess(GBC_OUTSIDE_FORTRESS_GOSSIP, {[] {return true;}}), @@ -1392,7 +1489,6 @@ void AreaTable_Init() { areaTable[GREAT_BAY_COAST_MARINE_LAB] = Area("Great Bay Marine Lab", "Great Bay Marine Lab", NONE, { //Events - //Zora Eggs? }, { //Locations @@ -1406,6 +1502,11 @@ void AreaTable_Init() { areaTable[GREAT_BAY_COAST_GROTTO] = Area("Great Bay Coast Grotto", "Great Bay Coast Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -1418,11 +1519,12 @@ void AreaTable_Init() { areaTable[GREAT_BAY_COAST_COW_GROTTO] = Area("Great Bay Coast Cow Grotto", "Great Bay Coast Cow Grotto", NONE, { //Events + EventAccess(&Milk, {[]{return CanPlay(EponasSong) && AnyBottle;}}), }, { //Locations - LocationAccess(GBC_GROTTO_COW1, {[]{return EponasSong && AnyBottle;}}), - LocationAccess(GBC_GROTTO_COW2, {[]{return EponasSong && AnyBottle;}}), + LocationAccess(GBC_GROTTO_COW1, {[]{return CanPlay(EponasSong) && AnyBottle;}}), + LocationAccess(GBC_GROTTO_COW2, {[]{return CanPlay(EponasSong) && AnyBottle;}}), }, { //Exits @@ -1431,11 +1533,10 @@ void AreaTable_Init() { areaTable[FISHERMAN_HUT] = Area("Fisherman's Hut", "Fisherman's Hut", NONE, { //Events - EventAccess(&Seahorse, {[]{return Seahorse || (AnyBottle && ZoraMask && Pictobox);}}), }, { //Locations - LocationAccess(GBC_FISHERMAN_PHOTO, {[] {return Pictobox && ZoraMask;}}), + LocationAccess(GBC_FISHERMAN_PHOTO, {[] {return PiratePicture && ZoraMask;}}), }, { //Exits @@ -1444,15 +1545,15 @@ void AreaTable_Init() { areaTable[PINNACLE_ROCK] = Area("Pinnacle Rock", "Pinnacle Rock", PINNACLE_ROCK, { //Events - }, + }, { //Locations LocationAccess(PINNACLE_ROCK_SEAHORSES, {[]{return ZoraMask && MagicMeter && Seahorse;}}), - LocationAccess(PINNACLE_ROCK_UPPER_CHEST, {[]{return ZoraMask && MagicMeter;}}), - LocationAccess(PINNACLE_ROCK_LOWER_CHEST, {[]{return ZoraMask && MagicMeter;}}), - LocationAccess(PINNACLE_ROCK_ZORA_EGG1, {[]{return ZoraMask && MagicMeter && AnyBottle;}}), - LocationAccess(PINNACLE_ROCK_ZORA_EGG2, {[]{return ZoraMask && MagicMeter && AnyBottle;}}), - LocationAccess(PINNACLE_ROCK_ZORA_EGG3, {[]{return ZoraMask && MagicMeter && AnyBottle;}}), + LocationAccess(PINNACLE_ROCK_UPPER_CHEST, {[]{return ZoraMask && MagicMeter && Seahorse;}}), + LocationAccess(PINNACLE_ROCK_LOWER_CHEST, {[]{return ZoraMask && MagicMeter && Seahorse;}}), + LocationAccess(PINNACLE_ROCK_ZORA_EGG1, {[]{return ZoraMask && MagicMeter && TwoBottles && Seahorse;}}),//Require at least two bottles for lenience + LocationAccess(PINNACLE_ROCK_ZORA_EGG2, {[]{return ZoraMask && MagicMeter && TwoBottles && Seahorse;}}),//Require at least two bottles for lenience + LocationAccess(PINNACLE_ROCK_ZORA_EGG3, {[]{return ZoraMask && MagicMeter && TwoBottles && Seahorse;}}),//Require at least two bottles for lenience }, { //Exits @@ -1461,7 +1562,9 @@ void AreaTable_Init() { areaTable[ZORA_CAPE] = Area("Zora Cape", "Zora Cape", ZORA_CAPE, { //Events - }, + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + }, { //Locations LocationAccess(ZORA_CAPE_LIKE_LIKE, {[] {return ZoraMask;}}), @@ -1474,12 +1577,12 @@ void AreaTable_Init() { { //Exits Entrance(GREAT_BAY_COAST, {[]{return true;}}), - Entrance(ZORA_HALL, {[]{return ZoraMask;}}), + Entrance(ZORA_HALL, {[]{return ZoraMask && MagicMeter;}}),//Trick to avoid Skullfish without shield? Entrance(WATERFALL_RAPIDS, {[]{return Hookshot;}}), Entrance(GREAT_BAY_FAIRY_FOUNTAIN, {[]{return Hookshot;}}), - Entrance(ZORA_CAPE_GROTTO, {[]{return Hookshot && AnyBombBag;}}), - Entrance(GREAT_BAY_TEMPLE_ENTRANCE, {[]{return Hookshot && ZoraMask && CanPlay(NewWaveBossaNova);}}), - Entrance(ZORA_HALL_BACK_ENTRANCE, {[]{return ZoraMask;}}), + Entrance(ZORA_CAPE_GROTTO, {[]{return CanBlastOrSmash;}}), + Entrance(GREAT_BAY_TEMPLE_ENTRANCE, {[]{return Hookshot && ZoraMask && MagicMeter && CanPlay(NewWaveBossaNova);}}),//Trick to avoid Skullfish without shield? + Entrance(ZORA_HALL_BACK_ENTRANCE, {[]{return (ZoraMask && MagicMeter) || Hookshot;}}),//Trick to avoid Skullfish without shield? }); areaTable[WATERFALL_RAPIDS] = Area("Waterfall Rapids", "Waterfall Rapids", NONE, { @@ -1509,6 +1612,11 @@ void AreaTable_Init() { areaTable[ZORA_CAPE_GROTTO] = Area("Zora Cape Grotto", "Zora Cape Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Loactions @@ -1522,7 +1630,7 @@ void AreaTable_Init() { areaTable[ZORA_HALL] = Area("Zora Hall", "Zora Hall", ZORA_HALL, { //Events - }, + }, { //Locations //LocationAccess(ZORA_HALL_STAGE_LIGHTS, {[] {return;}}), @@ -1553,7 +1661,7 @@ void AreaTable_Init() { Entrance(ZORA_HALL, {[]{return true;}}), }); - areaTable[ZORA_HALL_LULUS_ROOM] = Area("Zora Hall Lulu's Room", "Zora Hall Lulu's Room", NONE,{ + areaTable[ZORA_HALL_LULUS_ROOM] = Area("Zora Hall Lulu's Room", "Zora Hall Lulu's Room", NONE, { //Events }, { @@ -1567,7 +1675,7 @@ void AreaTable_Init() { Entrance(ZORA_HALL, {[]{return true;}}), }); - areaTable[ZORA_HALL_JAPAS_ROOM] = Area("Zora Hall Japas' Room", "Zora Hall Japas' Room", NONE,{ + areaTable[ZORA_HALL_JAPAS_ROOM] = Area("Zora Hall Japas' Room", "Zora Hall Japas' Room", NONE, { //Events }, { @@ -1618,7 +1726,7 @@ void AreaTable_Init() { areaTable[ROAD_TO_IKANA] = Area("Road To Ikana", "Road To Ikana", ROAD_TO_IKANA, { //Events - }, + }, { //Locations LocationAccess(ROAD_TO_IKANA_PILLAR_CHEST, {[] {return Hookshot;}}), @@ -1628,8 +1736,8 @@ void AreaTable_Init() { //Exits Entrance(TERMINA_FIELD, {[]{return CanPlay(EponasSong);}}), Entrance(IKANA_GRAVEYARD, {[]{return CanPlay(EponasSong);}}), - Entrance(IKANA_CANYON, {[]{return Hookshot && GarosMask && CanPlay(EponasSong);}}), - Entrance(ROAD_TO_IKANA_GROTTO, {[]{return CanPlay(EponasSong) && GoronMask;}}), + Entrance(IKANA_CANYON, {[]{return Hookshot && GarosMask && CanPlay(EponasSong);}}),//Trick for Gibdo Mask? + Entrance(ROAD_TO_IKANA_GROTTO, {[]{return GoronMask;}}),//Goron-only boulder }); areaTable[ROAD_TO_IKANA_GROTTO] = Area("Road To Ikana Grotto", "Road to Ikana Grotto", NONE, { @@ -1637,7 +1745,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(ROAD_TO_IKANA_GROTTO_CHEST, {[] {return GoronMask;}}), + LocationAccess(ROAD_TO_IKANA_GROTTO_CHEST, {[] {return true;}}), }, { //Exits @@ -1646,7 +1754,7 @@ void AreaTable_Init() { areaTable[IKANA_GRAVEYARD] = Area("Ikana Graveyard", "Ikana Graveyard", IKANA_GRAVEYARD, { //Events - }, + }, { //Locations LocationAccess(IKANA_GRAVEYARD_CAPTAIN_KEETA_CHEST, {[] {return CanPlay(SonataOfAwakening) && Fighting;}}), @@ -1657,11 +1765,16 @@ void AreaTable_Init() { Entrance(IKANA_GRAVEYARD_BELOW_GRAVE1, {[]{return CaptainsHat;}}), Entrance(IKANA_GRAVEYARD_BELOW_GRAVE2, {[]{return CaptainsHat;}}), Entrance(IKANA_GRAVEYARD_BELOW_GRAVE3, {[]{return CaptainsHat;}}), - Entrance(IKANA_GRAVEYARD_GROTTO, {[]{return AnyBombBag;}}), + Entrance(IKANA_GRAVEYARD_GROTTO, {[]{return HasExplosives && MaskOfTruth;}}),//Trick for no MoT? }); areaTable[IKANA_GRAVEYARD_GROTTO] = Area("Ikana Graveyard Grotto", "Ikana Graveyard Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -1702,7 +1815,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(IKANA_GRAVEYARD_DAY_ONE_GRAVE_TABLET, {[] {return CaptainsHat && CanPlay(EponasSong) && Fighting;}}), + LocationAccess(IKANA_GRAVEYARD_DAY_ONE_GRAVE_TABLET, {[] {return Fighting;}}), }, { //Exits @@ -1718,7 +1831,19 @@ void AreaTable_Init() { { //Exits Entrance(IKANA_GRAVEYARD, {[]{return true;}}), - Entrance(IKANA_GRAVEYARD_IRON_KNUCKLE_ROOM, {[]{return true;}}), + Entrance(IKANA_GRAVEYARD_PRE_IRON_KNUCKLE_ROOM, {[]{return true;}}), + }); + + areaTable[IKANA_GRAVEYARD_PRE_IRON_KNUCKLE_ROOM] = Area("Ikana Graveyard Below Graves Pre Iron Knuckle Room", "Ikana Graveyard Below Graves Pre Iron Knuckle Room", NONE, { + //Evvents + }, + { + //Locations + }, + { + //Exits + Entrance(IKANA_GRAVEYARD_BELOW_GRAVE2, {[]{return true;}}), + Entrance(IKANA_GRAVEYARD_IRON_KNUCKLE_ROOM, {[]{return CanUse(LENS_OF_TRUTH) && HasExplosives && (Fighting || CanUseProjectile);}}),//Projectiles or melee required to get past Skulltulas }); areaTable[IKANA_GRAVEYARD_IRON_KNUCKLE_ROOM] = Area("Ikana Graveyard Below Graves Iron Knuckle Room", "Ikana Graveyard Below Graves Iron Knuckle Room", NONE, { @@ -1726,7 +1851,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(IKANA_GRAVEYARD_IRON_KNUCKLE_CHEST, {[] {return CaptainsHat && AnyBombBag && Fighting;}}), //Doesnt need bombs? + LocationAccess(IKANA_GRAVEYARD_IRON_KNUCKLE_CHEST, {[] {return Fighting;}}), }, { //Exits @@ -1747,6 +1872,7 @@ void AreaTable_Init() { areaTable[DAMPES_HUT] = Area("Dampe's Hut", "Dampe's Hut", NONE, { //Events + EventAccess(&BigPoe, {[]{return /*CanUseProjectile && AnyBottle*/ false;}}),//Trick Gibdo Big Poe out of well? }, { //Locations @@ -1760,8 +1886,8 @@ void AreaTable_Init() { areaTable[IKANA_CANYON] = Area("Lower Ikana Canyon", "Lower Ikana Canyon", IKANA_CANYON, { //Events - EventAccess(&EnterSakonHideout, {[]{return LetterKafei && PendantAccess && KafeisMask;}}),//probably missing a req - }, + EventAccess(&EnterSakonHideout, {[]{return SpokeToKafei;}}),//Sakon spawns if Kafei was met in Laundry Pool + }, { //Locations LocationAccess(IKANA_CANYON_LEDGE, {[] {return ZoraMask && OceanTitle && DekuMask;}}), @@ -1775,19 +1901,20 @@ void AreaTable_Init() { //Exits Entrance(ROAD_TO_IKANA, {[]{return true;}}), Entrance(SAKONS_HIDEOUT, {[]{return EnterSakonHideout;}}), - Entrance(SECRET_SHRINE_ENTRANCE, {[]{return true;}}), //slow swim but don't NEED zora mask + Entrance(SECRET_SHRINE_ENTRANCE, {[]{return true;}}),//slow swim but don't NEED zora mask Entrance(IKANA_CANYON_SECRET_SHRINE_GROTTO, {[]{return true;}}), Entrance(SOUTHERN_SWAMP, {[]{return true;}}),//end of river - Entrance(IKANA_CANYON_UPPER, {[]{return IceArrows && MagicMeter && Bow && Hookshot;}}), + Entrance(IKANA_CANYON_UPPER, {[]{return CanUse(ICE_ARROWS) && Hookshot;}}), }); areaTable[IKANA_CANYON_UPPER] = Area("Upper Ikana Canyon", "Upper Ikana Canyon", IKANA_CANYON, { //Events + EventAccess(&WinnerPicture, {[]{return false;}}),//Trick for picture of Tingle instead of Deku King? }, { //Locations - LocationAccess(TINGLE_IKANA_CANYON_ST, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), - LocationAccess(TINGLE_IKANA_CANYON_CT, {[]{return (DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask;}}), + LocationAccess(TINGLE_IKANA_CANYON_ST, {[]{return CanUseProjectile;}}), + LocationAccess(TINGLE_IKANA_CANYON_CT, {[]{return CanUseProjectile;}}), //Gossip Stones LocationAccess(IC_SPIRIT_HOUSE_GOSSIP, {[] {return true;}}), }, @@ -1798,7 +1925,7 @@ void AreaTable_Init() { Entrance(IKANA_CANYON_POE_HUT, {[]{return true;}}), Entrance(STONE_TOWER, {[]{return true;}}), Entrance(IKANA_CANYON_CAVE, {[]{return true;}}), - Entrance(IKANA_CASTLE_EXTERIOR_LOWER, {[]{return MirrorShield;}}), + Entrance(IKANA_CASTLE_SHORTCUT, {[]{return true;}}), Entrance(BENEATH_THE_WELL_ENTRANCE, {[]{return true;}}), Entrance(IKANA_CANYON, {[]{return true;}}), }); @@ -1817,7 +1944,7 @@ void AreaTable_Init() { areaTable[SAKONS_HIDEOUT] = Area("Sakon's Hideout", "Sakon's Hideout", SAKONS_HIDEOUT, { //Events - EventAccess(&SunMask, {[]{return true;}}), + EventAccess(&SunMask, {[]{return Fighting;}}), }, { //Locations @@ -1851,7 +1978,7 @@ void AreaTable_Init() { Entrance(IKANA_CANYON_UPPER, {[]{return true;}}), }); - areaTable[IKANA_CANYON_GREAT_FAIRY_FOUNTAIN] = Area("Ikana Canyon Great Fairy Fountain", "Ikana Canyon Great Fairy Fountain", NONE,{ + areaTable[IKANA_CANYON_GREAT_FAIRY_FOUNTAIN] = Area("Ikana Canyon Great Fairy Fountain", "Ikana Canyon Great Fairy Fountain", NONE, { //Events }, { @@ -1865,6 +1992,11 @@ void AreaTable_Init() { areaTable[IKANA_CANYON_SECRET_SHRINE_GROTTO] = Area("Ikana Canyon Near Secret Shrine Grotto", "Ikana Canyon Near Secret Shrine Grotto", NONE, { //Events + EventAccess(&Mushroom, {[]{return false;}}),//Trick for obscure mushroom? + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations @@ -1877,30 +2009,31 @@ void AreaTable_Init() { areaTable[STONE_TOWER] = Area("Stone Tower", "Stone Tower", STONE_TOWER, { //Events - }, + }, { //Locations }, { //Exits Entrance(IKANA_CANYON_UPPER, {[]{return true;}}), - Entrance(STONE_TOWER_TEMPLE_ENTRANCE, {[]{return CanPlay(ElegyOfEmptiness) && GoronMask && ZoraMask && DekuMask && Hookshot;}}), - Entrance(INVERTED_STONE_TOWER, {[]{return CanPlay(ElegyOfEmptiness) && GoronMask && ZoraMask && DekuMask && Hookshot && Bow && LightArrows && MagicMeter;}}), + Entrance(STONE_TOWER_TEMPLE_ENTRANCE, {[]{return CanPlay(ElegyOfEmptiness) && GoronMask && ZoraMask && Hookshot;}}), + Entrance(INVERTED_STONE_TOWER, {[]{return CanPlay(ElegyOfEmptiness) && GoronMask && ZoraMask && Hookshot && CanUse(LIGHT_ARROWS);}}), }); areaTable[INVERTED_STONE_TOWER] = Area("Inverted Stone Tower", "Inverted Stone Tower", INVERTED_STONE_TOWER, { //Events + EventAccess(&Bugs, {[]{return AnyBottle;}}), }, { //Locations - LocationAccess(STONE_TOWER_INVERTED_LEFT_CHEST, {[] {return MagicBean && WaterForBeans;}}), - LocationAccess(STONE_TOWER_INVERTED_CENTER_CHEST, {[] {return MagicBean && WaterForBeans;}}), - LocationAccess(STONE_TOWER_INVERTED_RIGHT_CHEST, {[] {return MagicBean && WaterForBeans;}}), + LocationAccess(STONE_TOWER_INVERTED_LEFT_CHEST, {[] {return BeansAndWater;}}), + LocationAccess(STONE_TOWER_INVERTED_CENTER_CHEST, {[] {return BeansAndWater;}}), + LocationAccess(STONE_TOWER_INVERTED_RIGHT_CHEST, {[] {return BeansAndWater;}}), }, { //Exits - Entrance(STONE_TOWER, {[]{return LightArrows && Bow && MagicMeter;}}), + Entrance(STONE_TOWER, {[]{return CanUse(LIGHT_ARROWS);}}), Entrance(STONE_TOWER_TEMPLE_INVERTED_ENTRANCE, {[]{return true;}}), }); @@ -1917,43 +2050,46 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WF_SF_ENTRANCE_FAIRY, {[] {return DekuMask && MagicMeter && GreatFairyMask;}}), - LocationAccess(WF_SF_ENTRANCE_PLATFORM, {[] {return ((DekuMask && MagicMeter) || Hookshot) && GreatFairyMask;}}), + LocationAccess(WF_SF_ENTRANCE_FAIRY, {[] {return DekuMask || GreatFairyMask;}}), + LocationAccess(WF_SF_ENTRANCE_PLATFORM, {[] {return DekuMask || Hookshot;}}), }, { //Exits Entrance(WOODFALL, {[]{return true;}}), - Entrance(WOODFALL_TEMPLE_MAIN_ROOM, {[]{return DekuMask;}}), + Entrance(WOODFALL_TEMPLE_MAIN_ROOM, {[]{return DekuMask || Hookshot;}}), }); areaTable[WOODFALL_TEMPLE_MAIN_ROOM] = Area("Woodfall Temple Main Room", "Woodfall Temple Main Room", WOODFALL_TEMPLE, { //Events + EventAccess(&WoodfallPoisonClear, {[]{return CanUse(FIRE_ARROWS);}}), }, { //Locations - LocationAccess(WF_SF_MAIN_ROOM_BUBBLE, {[] {return (Bow || Hookshot) && GreatFairyMask;}}), - LocationAccess(WF_SF_JAR_FAIRY, {[] {return true;}}), - LocationAccess(WF_SF_DEKU_BABA, {[] {return Fighting;}}),//need some way to kill the deku baba + LocationAccess(WF_SF_MAIN_ROOM_BUBBLE, {[] {return (Bow || Hookshot) && GreatFairyMask;}}),//Stricter to make sure it can be obtained from the entrance platform + LocationAccess(WF_SF_JAR_FAIRY, {[] {return DekuMask && GreatFairyMask;}}),//Trick for hidden fairy without GFM? + LocationAccess(WF_SF_DEKU_BABA, {[] {return Fighting || DekuMask;}}), }, { //Exits Entrance(WOODFALL_TEMPLE_ENTRANCE, {[]{return true;}}), Entrance(WOODFALL_TEMPLE_BRIDGE_ROOM, {[]{return SmallKeys(WoodfallTempleKeys, 1);}}), - Entrance(WOODFALL_TEMPLE_PLATFORM_ROOM, {[]{return true;}}), - Entrance(WOODFALL_TEMPLE_UPPER_MAIN_ROOM, {[]{return SmallKeys(WoodfallTempleKeys, 1) && Bow && DekuMask;}}),//Main Room 2F switch pressed OR Hookshot trick OR Zora Jump? + Entrance(WOODFALL_TEMPLE_PLATFORM_ROOM, {[]{return DekuMask || WoodfallPoisonClear;}}), + Entrance(WOODFALL_TEMPLE_UPPER_MAIN_ROOM, {[]{return WoodfallLadder || WoodfallPoisonClear;}}),//Trick for hookshot on moth torch? }); areaTable[WOODFALL_TEMPLE_UPPER_MAIN_ROOM] = Area("Woodfall Temple Main Room 2F", "Woodfall Temple Main Room 2F", WOODFALL_TEMPLE, { //Events + EventAccess(&WoodfallPoisonClear, {[]{return Bow;}}), + EventAccess(&WoodfallLadder, {[]{return true;}}), }, { //Locations - LocationAccess(WF_SF_MAIN_ROOM_SWITCH, {[] {return DekuMask || Hookshot;}}),//ability to get over to tree and press switch + LocationAccess(WF_SF_MAIN_ROOM_SWITCH, {[] {return DekuMask;}}),//Torch is not hookshotable }, { //Exits Entrance(WOODFALL_TEMPLE_MAIN_ROOM, {[]{return true;}}),//just jump - Entrance(WOODFALL_TEMPLE_UPPER_PLATFORM_ROOM, {[]{return true;}}), + Entrance(WOODFALL_TEMPLE_UPPER_PLATFORM_ROOM, {[]{return true;}}), Entrance(WOODFALL_TEMPLE_DRAGONFLY_ROOM, {[]{return true;}}), Entrance(WOODFALL_TEMPLE_PRE_BOSS_ROOM, {[]{return Bow;}}), }); @@ -1963,13 +2099,13 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WOODFALL_TEMPLE_SMALL_KEY_CHEST, {[] {return DekuMask;}}), + LocationAccess(WOODFALL_TEMPLE_SMALL_KEY_CHEST, {[] {return DekuMask || Hookshot;}}), }, { //Exits Entrance(WOODFALL_TEMPLE_MAIN_ROOM, {[]{return true;}}), Entrance(WOODFALL_TEMPLE_UPPER_PLATFORM_ROOM, {[]{return Bow && DekuMask;}}), - Entrance(WOODFALL_TEMPLE_MAP_ROOM, {[]{return DekuMask;}}), + Entrance(WOODFALL_TEMPLE_MAP_ROOM, {[]{return DekuMask || Hookshot;}}), }), areaTable[WOODFALL_TEMPLE_MAP_ROOM] = Area("Woodfall Temple Map Room", "Woodfall Temple Map Room", WOODFALL_TEMPLE, { @@ -1977,7 +2113,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WOODFALL_TEMPLE_MAP_CHEST, {[] {return DekuMask;}}), + LocationAccess(WOODFALL_TEMPLE_MAP_CHEST, {[] {return DekuMask;}}),//Trick for clearing with Goron? }, { //Exits @@ -1989,22 +2125,22 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WF_SF_PLATFORM_ROOM_BEEHIVE, {[] {return (Bow || Hookshot || ZoraMask || (DekuMask && MagicMeter) ) && GreatFairyMask;}}), + LocationAccess(WF_SF_PLATFORM_ROOM_BEEHIVE, {[] {return CanUseProjectile && GreatFairyMask;}}),//Trick for hidden fairy without GFM? }, { //Exits Entrance(WOODFALL_TEMPLE_BOSS_KEY_ROOM, {[]{return Bow && DekuMask;}}), - Entrance(WOODFALL_TEMPLE_BOW_ROOM, {[]{return DekuMask;}}), - Entrance(WOODFALL_TEMPLE_UPPER_MAIN_ROOM, {[]{return DekuMask;}}), + Entrance(WOODFALL_TEMPLE_BOW_ROOM, {[]{return true;}}), + Entrance(WOODFALL_TEMPLE_UPPER_MAIN_ROOM, {[]{return true;}}), }); areaTable[WOODFALL_TEMPLE_BOSS_KEY_ROOM] = Area("Woodfall Temple Boss Key Room", "Woodfall Temple Boss Key Room", WOODFALL_TEMPLE, { //Events - EventAccess(&WoodfallFrog, {[]{return DekuMask && Fighting && Bow && DonGerosMask;}}), + EventAccess(&WoodfallFrog, {[]{return DekuMask && Fighting && Bow && DonGerosMask;}}),//Trick for clearing with Goron? }, { //Locations - LocationAccess(WOODFALL_TEMPLE_BOSS_KEY_CHEST, {[] {return DekuMask && Fighting && Bow;}}), + LocationAccess(WOODFALL_TEMPLE_BOSS_KEY_CHEST, {[] {return DekuMask && Fighting && Bow;}}),//Trick for clearing with Goron? }, { //Exits @@ -2016,7 +2152,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WOODFALL_TEMPLE_HEROS_BOW_CHEST, {[] {return DekuMask && Fighting ;}}), + LocationAccess(WOODFALL_TEMPLE_HEROS_BOW_CHEST, {[] {return Fighting;}}), }, { //Exits @@ -2025,18 +2161,18 @@ void AreaTable_Init() { areaTable[WOODFALL_TEMPLE_BRIDGE_ROOM] = Area("Woodfall Temple Bridge Room", "Woodfall Temple Bridge Room", WOODFALL_TEMPLE, { //Events - EventAccess(&DekuBabaSticks, {[]{return AnySword;}}), + EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), }, { //Locations - LocationAccess(WF_SF_BRIDGE_ROOM_BEEHIVE, {[] {return ((DekuMask && MagicMeter) || Bow || Hookshot || ZoraMask) && GreatFairyMask;}}), - LocationAccess(WF_SF_SKULLTULA, {[] {return Fighting;}}), + LocationAccess(WF_SF_BRIDGE_ROOM_BEEHIVE, {[] {return CanUseProjectile && GreatFairyMask;}}),//Trick for hidden fairy without GFM? + LocationAccess(WF_SF_SKULLTULA, {[] {return Fighting && GreatFairyMask;}}),//Trick for hidden fairy without GFM? }, { //Exits Entrance(WOODFALL_TEMPLE_MAIN_ROOM, {[]{return true;}}), - Entrance(WOODFALL_TEMPLE_COMPASS_ROOM, {[]{return HasFireSource || HasFireSourceWithTorch;}}),//need to light torch to unlock door - Entrance(WOODFALL_TEMPLE_DARK_ROOM, {[]{return HasFireSource || HasFireSourceWithTorch;}}),//need to burn webs + Entrance(WOODFALL_TEMPLE_COMPASS_ROOM, {[]{return CanUse(FIRE_ARROWS) || HasFireSourceWithTorch;}}), + Entrance(WOODFALL_TEMPLE_DARK_ROOM, {[]{return CanUse(FIRE_ARROWS) || HasFireSourceWithTorch;}}), }); areaTable[WOODFALL_TEMPLE_COMPASS_ROOM] = Area("Woodfall Temple Compass Room", "Woodfall Temple Compass Room", WOODFALL_TEMPLE, { @@ -2044,7 +2180,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WOODFALL_TEMPLE_COMPASS_CHEST, {[] {return Fighting || DekuMask;}}),//Something to hurt the dragonflys + LocationAccess(WOODFALL_TEMPLE_COMPASS_CHEST, {[] {return DekuMask || Bow || ZoraMask;}}),//Cannot kill with Hookshot, Trick for Fighting? }, { //Exits @@ -2061,7 +2197,7 @@ void AreaTable_Init() { { //Exits Entrance(WOODFALL_TEMPLE_BRIDGE_ROOM, {[]{return true;}}), - Entrance(WOODFALL_TEMPLE_DRAGONFLY_ROOM, {[]{return Fighting || HasFireSource || HasFireSourceWithTorch;}})// + Entrance(WOODFALL_TEMPLE_DRAGONFLY_ROOM, {[]{return CanUse(FIRE_ARROWS) || HasFireSourceWithTorch;}}) }); areaTable[WOODFALL_TEMPLE_DRAGONFLY_ROOM] = Area("Woodfall Temple Dragonfly Platform Room", "Woodfall Temple Dragonfly Platform Room", WOODFALL_TEMPLE, { @@ -2069,7 +2205,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WF_SF_DRAGONFLY_ROOM_BUBBLE, {[] {return Bow && DekuMask && GreatFairyMask;}}), + LocationAccess(WF_SF_DRAGONFLY_ROOM_BUBBLE, {[] {return true;}}),//No need for GFM here, Fairy is ground level }, { //Exits @@ -2082,40 +2218,40 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WF_SF_PRE_BOSS_LOWER_RIGHT_BUBBLE, {[] {return Bow && GreatFairyMask;}}), - LocationAccess(WF_SF_PRE_BOSS_UPPER_RIGHT_BUBBLE, {[] {return Bow && GreatFairyMask;}}), - LocationAccess(WF_SF_PRE_BOSS_UPPER_LEFT_BUBBLE, {[] {return Bow && GreatFairyMask;}}), - LocationAccess(WF_SF_PRE_BOSS_PILLAR_BUBBLE, {[] {return GreatFairyMask && (Bow || Hookshot);}}), + LocationAccess(WF_SF_PRE_BOSS_LOWER_RIGHT_BUBBLE, {[] {return true;}}),//These fairies are ground level and you can jump on the platforms and run into them + LocationAccess(WF_SF_PRE_BOSS_UPPER_RIGHT_BUBBLE, {[] {return true;}}), + LocationAccess(WF_SF_PRE_BOSS_UPPER_LEFT_BUBBLE, {[] {return true;}}), + LocationAccess(WF_SF_PRE_BOSS_PILLAR_BUBBLE, {[] {return DekuMask || (GreatFairyMask && (Bow || Hookshot));}}), //Can either hit the switch with Deku or make the fairy come to you with bow/hookshot }, { //Exits Entrance(WOODFALL_TEMPLE_UPPER_MAIN_ROOM, {[]{return true;}}), - Entrance(WOODFALL_TEMPLE_BOSS_ROOM, {[]{return DekuMask && Bow && BossKeyWoodfallTemple;}}), + Entrance(WOODFALL_TEMPLE_BOSS_ROOM, {[]{return ((DekuMask && CanUseProjectile) || Hookshot) && BossKeyWoodfallTemple;}}),//Crystal switch and Deku Flower, or Hookshot a torch }); areaTable[WOODFALL_TEMPLE_BOSS_ROOM] = Area("Woodfall Temple Boss Room", "Woodfall Temple Boss Room", WOODFALL_TEMPLE, { //Events - EventAccess(&WoodfallClear, {[]{return WoodfallClear || (BossKeyWoodfallTemple && DekuMask && Bow && Fighting);}}), - }, + EventAccess(&WoodfallClear, {[]{return DekuMask && Bow && Fighting;}}),//Trick for beating without Deku/Bow? + }, { //Locations - LocationAccess(ODOLWA, {[] {return DekuMask && Fighting && BossKeyWoodfallTemple;}}), - LocationAccess(ODOLWA_HEART_CONTAINER, {[] {return Bow && Fighting && BossKeyWoodfallTemple && DekuMask;}}), - LocationAccess(GIANTS_OATH_TO_ORDER, {[]{return WoodfallClear;}}), + LocationAccess(ODOLWA, {[]{return DekuMask && Bow && Fighting;}}),//Trick for beating without Deku/Bow? + LocationAccess(ODOLWA_HEART_CONTAINER, {[]{return DekuMask && Bow && Fighting;}}),//Trick for beating without Deku/Bow? + LocationAccess(GIANTS_OATH_TO_ORDER, {[]{return DekuMask && Bow && Fighting;}}),//Trick for beating without Deku/Bow? }, { //Exits - Entrance(WOODFALL_TEMPLE_PRE_BOSS_ROOM, {[]{return true;}}), - Entrance(WOODFALL_TEMPLE_PRINCESS_ROOM, {[]{return WoodfallClear;}}), + Entrance(WOODFALL_TEMPLE_PRE_BOSS_ROOM, {[]{return false;}}),//One-way door + Entrance(WOODFALL_TEMPLE_PRINCESS_ROOM, {[]{return DekuMask && Bow && Fighting;}}),//Trick for beating without Deku/Bow? }); areaTable[WOODFALL_TEMPLE_PRINCESS_ROOM] = Area("Deku Princess Room", "Deku Princess Room", WOODFALL_TEMPLE, { //Events - EventAccess(&DekuPrincess, {[]{return WoodfallClear;}}), + EventAccess(&DekuPrincess, {[]{return WoodfallClear && AnyBottle;}}), }, { //Locations - LocationAccess(WOODFALL_TEMPLE_DEKU_PRINCESS, {[]{return AnyBottle;}}), + LocationAccess(WOODFALL_TEMPLE_DEKU_PRINCESS, {[]{return AnyBottle && AnySword;}}), }, { //Exits @@ -2136,9 +2272,9 @@ void AreaTable_Init() { { //Exits Entrance(SNOWHEAD, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_BRIDGE_ROOM, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_COMPASS_ROOM, {[]{return SmallKeys(SnowheadTempleKeys, 1);}}), - Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_1F, {[]{return FireArrows && Bow && MagicMeter;}}), + Entrance(SNOWHEAD_TEMPLE_BRIDGE_ROOM, {[]{return GoronMask;}}),//All exits into the temple require Goron to push the block + Entrance(SNOWHEAD_TEMPLE_COMPASS_ROOM, {[]{return GoronMask && SmallKeys(SnowheadTempleKeys, 1);}}), + Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_1F, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), }); areaTable[SNOWHEAD_TEMPLE_BRIDGE_ROOM] = Area("Snowhead Temple Bridge Room", "Snowhead Temple Bridge Room", SNOWHEAD_TEMPLE, { @@ -2146,16 +2282,16 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SNOWHEAD_TEMPLE_BRIDGE_ROOM_CHEST, {[] {return GoronMask && MagicMeter;}}), + LocationAccess(SNOWHEAD_TEMPLE_BRIDGE_ROOM_CHEST, {[] {return CanUse(FIRE_ARROWS) && (GoronMask || Hookshot);}}), //StrayFairies - LocationAccess(SH_SF_BRIDGE_ROOM_LEDGE_BUBBLE, {[] {return ((GreatFairyMask && Bow) || (Hookshot && GreatFairyMask));}}), - LocationAccess(SH_SF_BRIDGE_ROOM_PILLAR_BUBBLE, {[] {return ((GreatFairyMask && Bow) || (Hookshot && GreatFairyMask));}}), + LocationAccess(SH_SF_BRIDGE_ROOM_LEDGE_BUBBLE, {[] {return GoronMask || (GreatFairyMask && (Bow || Hookshot));}}),//Can walk up to it with Goron + LocationAccess(SH_SF_BRIDGE_ROOM_PILLAR_BUBBLE, {[] {return GreatFairyMask && (Bow || Hookshot);}}),//Unlike N64, does not need Lens }, { //Exits Entrance(SNOWHEAD_TEMPLE_ENTRANCE, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_1F, {[]{return GoronMask;}}), - Entrance(SNOWHEAD_TEMPLE_LOWER_MAP_ROOM, {[]{return GoronMask;}}), + Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_1F, {[]{return GoronMask || (CanUse(FIRE_ARROWS) && Hookshot);}}), + Entrance(SNOWHEAD_TEMPLE_LOWER_MAP_ROOM, {[]{return GoronMask || (CanUse(FIRE_ARROWS) && Hookshot);}}), }); areaTable[SNOWHEAD_TEMPLE_LOWER_MAP_ROOM] = Area("Snowhead Temple Lower Map Room", "Snowhead Temple Lower Map Room", SNOWHEAD_TEMPLE, { @@ -2169,7 +2305,7 @@ void AreaTable_Init() { { //Exits Entrance(SNOWHEAD_TEMPLE_BRIDGE_ROOM, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_UPPER_MAP_ROOM, {[]{return FireArrows && Bow && MagicMeter;}}), + Entrance(SNOWHEAD_TEMPLE_UPPER_MAP_ROOM, {[]{return CanUse(FIRE_ARROWS);}}), }); areaTable[SNOWHEAD_TEMPLE_UPPER_MAP_ROOM] = Area("Snowhead Temple Upper Map Room", "Snowhead Temple Upper Map Room", SNOWHEAD_TEMPLE, { @@ -2177,7 +2313,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SH_SF_MAP_ROOM_LEDGE, {[] {return ((Hookshot && ScarecrowSong) || (LensOfTruth && MagicMeter));}}), // || (Hookshot && Bow && MagicMeter && FireArrows) || (Hookshot && Explosives && SmallKeys(SnowheadTempleKeys,2)) || (Hookshot && ZoraMask && Explosives && SmallKeys(SnowheadTempleKeys,1)) + LocationAccess(SH_SF_MAP_ROOM_LEDGE, {[] {return Hookshot || CanUse(LENS_OF_TRUTH);}}), }, { //Exits @@ -2195,8 +2331,9 @@ void AreaTable_Init() { //Exits Entrance(SNOWHEAD_TEMPLE_BASEMENT, {[]{return true;}}), Entrance(SNOWHEAD_TEMPLE_DOUBLE_BLOCK_ROOM_LOWER, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_ENTRANCE, {[]{return FireArrows && Bow && MagicMeter;}}), - Entrance(SNOWHEAD_TEMPLE_PILLAR_FREEZARDS_ROOM, {[]{return FireArrows && Bow && MagicMeter;}}),//Has 2 entrances, left and right both need fire arrows though + Entrance(SNOWHEAD_TEMPLE_ENTRANCE, {[]{return Bow;}}), + Entrance(SNOWHEAD_TEMPLE_PILLAR_FREEZARDS_ROOM, {[]{return CanUse(FIRE_ARROWS);}}), + Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_2F, {[]{return Hookshot && CanPlay(ScarecrowSong);}}), }); areaTable[SNOWHEAD_TEMPLE_BASEMENT]= Area("Snowhead Temple Basement", "Snowhead Temple Basement", SNOWHEAD_TEMPLE, { @@ -2222,7 +2359,7 @@ void AreaTable_Init() { { //Exits Entrance(SNOWHEAD_TEMPLE_BASEMENT, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_PILLAR_FREEZARDS_ROOM, {[]{return DekuMask && FireArrows && MagicMeter && Bow;}}), + Entrance(SNOWHEAD_TEMPLE_PILLAR_FREEZARDS_ROOM, {[]{return DekuMask && CanUse(FIRE_ARROWS);}}), }); areaTable[SNOWHEAD_TEMPLE_DOUBLE_BLOCK_ROOM_LOWER] = Area("Snowhead Temple Double Block Room Lower", "Snowhead Temple Block Room Lower", SNOWHEAD_TEMPLE, { @@ -2235,7 +2372,7 @@ void AreaTable_Init() { { //Exits Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_1F, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_DOUBLE_BLOCK_ROOM_UPPER, {[]{return false;}}),//cant get up unless Hookshot on SF chest? + Entrance(SNOWHEAD_TEMPLE_DOUBLE_BLOCK_ROOM_UPPER, {[]{return false;}}),//Trick for Zora climb? }); areaTable[SNOWHEAD_TEMPLE_DOUBLE_BLOCK_ROOM_UPPER] = Area("Snowhead Temple Double Block Room Upper", "Snowhead Temple Double Block Room Upper", SNOWHEAD_TEMPLE, { @@ -2259,15 +2396,15 @@ void AreaTable_Init() { LocationAccess(SNOWHEAD_TEMPLE_COMPASS_CHEST, {[] {return true;}}), //Stray Fairies - LocationAccess(SH_SF_ICE_PUZZLE, {[] {return Bow && MagicMeter && FireArrows;}}), - LocationAccess(SH_SF_CRATE, {[] {return AnyBombBag && GreatFairyMask;}}), + LocationAccess(SH_SF_ICE_PUZZLE, {[] {return CanUse(FIRE_ARROWS);}}), + LocationAccess(SH_SF_CRATE, {[] {return HasExplosives && GreatFairyMask;}}),//Trick for Goron pound? //Trick for hidden fairy without GFM? }, { //Exits Entrance(SNOWHEAD_TEMPLE_ENTRANCE, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_DOUBLE_BLOCK_ROOM_UPPER, {[]{return FireArrows && MagicMeter && Bow;}}), - Entrance(SNOWHEAD_TEMPLE_ICICLE_ROOM, {[]{return AnyBombBag;}}), + Entrance(SNOWHEAD_TEMPLE_DOUBLE_BLOCK_ROOM_UPPER, {[]{return Hookshot || CanUse(FIRE_ARROWS);}}), + Entrance(SNOWHEAD_TEMPLE_ICICLE_ROOM, {[]{return HasExplosives;}}), }); areaTable[SNOWHEAD_TEMPLE_ICICLE_ROOM] = Area("Snowhead Temple Icicle Room", "Snowhead Temple Icicle Room", SNOWHEAD_TEMPLE, { @@ -2275,8 +2412,8 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SNOWHEAD_TEMPLE_ICICLE_ROOM_CHEST, {[] {return Bow;}}), - LocationAccess(SH_SF_ICICLE_ROOM_WALL, {[] {return Bow && GreatFairyMask;}}), + LocationAccess(SNOWHEAD_TEMPLE_ICICLE_ROOM_CHEST, {[] {return (Bow || ZoraMask) && (CanBlastOrSmash || CanUse(FIRE_ARROWS));}}), //Shoot icicles down or climb as Zora. Make Zora into a trick? + LocationAccess(SH_SF_ICICLE_ROOM_WALL, {[] {return Bow && GreatFairyMask && CanUse(LENS_OF_TRUTH);}}),//Trick for jump without bow? //Trick for hidden fairy without GFM? }, { //Exits @@ -2289,12 +2426,12 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SH_SF_CEILING_BUBBLE, {[] {return (Hookshot || Bow) && GreatFairyMask;}}), + LocationAccess(SH_SF_CEILING_BUBBLE, {[] {return (Hookshot || Bow) && GreatFairyMask && CanUse(LENS_OF_TRUTH);}}), }, { //Exits Entrance(SNOWHEAD_TEMPLE_ICICLE_ROOM, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_2F, {[]{return GoronMask || (FireArrows && MagicMeter && Bow);}}), + Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_2F, {[]{return GoronMask || CanUse(FIRE_ARROWS);}}), }); areaTable[SNOWHEAD_TEMPLE_MAIN_ROOM_2F] = Area("Snowhead Temple Main Room 2F", "Snowhead Temple Main Room 2F", SNOWHEAD_TEMPLE, { @@ -2302,14 +2439,14 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SH_SF_MAIN_ROOM_WALL, {[] {return (Bow || Hookshot) && GreatFairyMask;}}), + LocationAccess(SH_SF_MAIN_ROOM_WALL, {[] {return Hookshot && CanPlay(ScarecrowSong) && GreatFairyMask && CanUse(LENS_OF_TRUTH);}}),//Trick for Hookshot-less? Trick for hidden fairy without GFM? }, { //Exits Entrance(SNOWHEAD_TEMPLE_GORON_SWITCH_PUZZLE_ROOM, {[]{return GoronMask;}}), Entrance(SNOWHEAD_TEMPLE_UPPER_MAP_ROOM, {[]{return GoronMask;}}), Entrance(SNOWHEAD_TEMPLE_MINIBOSS_ROOM, {[]{return GoronMask;}}), - Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_3F, {[]{return GoronMask && FireArrows && Bow && MagicMeter;}}), + Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_3F, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), }); areaTable[SNOWHEAD_TEMPLE_MINIBOSS_ROOM] = Area("Snowhead Temple Miniboss Room", "Snowhead Temple Miniboss Room", SNOWHEAD_TEMPLE, { @@ -2329,12 +2466,12 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SH_SF_PILLAR_FREEZARDS, {[] {return Bow && MagicMeter && FireArrows;}}), + LocationAccess(SH_SF_PILLAR_FREEZARDS, {[] {return CanUse(FIRE_ARROWS);}}), }, { //Exits - Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_1F, {[]{return FireArrows && MagicMeter && Bow;}}), - Entrance(SNOWHEAD_TEMPLE_PILLAR_SWITCH_ROOM, {[]{return FireArrows && MagicMeter && Bow;}}), + Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_1F, {[]{return CanUse(FIRE_ARROWS);}}), + Entrance(SNOWHEAD_TEMPLE_PILLAR_SWITCH_ROOM, {[]{return CanUse(FIRE_ARROWS);}}), }); areaTable[SNOWHEAD_TEMPLE_PILLAR_SWITCH_ROOM] = Area("Snowhead Temple Pillar Switch Room", "Snowhead Temple Pillar Switch Room", SNOWHEAD_TEMPLE, { @@ -2358,7 +2495,7 @@ void AreaTable_Init() { { //Exits Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_4F, {[]{return SHSwitchPress && GoronMask;}}), - Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_2F, {[]{return GoronMask;}}), + Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_2F, {[]{return true;}}), Entrance(SNOWHEAD_TEMPLE_SNOW_ROOM, {[]{return SmallKeys(SnowheadTempleKeys, 3) && GoronMask;}}), }); @@ -2367,19 +2504,19 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SH_SF_SNOW_ROOM_BUBBLE, {[] {return GreatFairyMask && LensOfTruth && (Bow || Hookshot || ZoraMask);}}), + LocationAccess(SH_SF_SNOW_ROOM_BUBBLE, {[] {return GreatFairyMask && CanUse(LENS_OF_TRUTH) && CanUseProjectile;}}), }, { //Exits Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_3F, {[]{return SmallKeys(SnowheadTempleKeys, 3);}}), - Entrance(SNOWHEAD_TEMPLE_DINOLFOS_ROOM, {[]{return true;}})//maybe FireArrows? + Entrance(SNOWHEAD_TEMPLE_DINOLFOS_ROOM, {[]{return true;}}) //Need Fire Arrows to melt the ice and progress, but you can also just jump down }); areaTable[SNOWHEAD_TEMPLE_MAIN_ROOM_4F] = Area("Snowhead Temple Main Room 4F", "Snowhead Temple Main Room 4F", SNOWHEAD_TEMPLE, { //Events }, { - //Location + //Locations }, { //Exits @@ -2412,7 +2549,7 @@ void AreaTable_Init() { { //Exits Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_4F, {[]{return true;}}), - Entrance(SNOWHEAD_TEMPLE_BOSS_KEY_ROOM, {[]{return true;}}), + Entrance(SNOWHEAD_TEMPLE_BOSS_KEY_ROOM, {[]{return Bow || Fighting;}}), }); areaTable[SNOWHEAD_TEMPLE_BOSS_KEY_ROOM] = Area("Snowhead Temple Boss Key Room", "Snowhead Temple Boss Key Room", SNOWHEAD_TEMPLE, { @@ -2430,17 +2567,18 @@ void AreaTable_Init() { areaTable[SNOWHEAD_TEMPLE_BOSS_ROOM] = Area("Snowhead Temple Boss Room", "Snowhead Temple Boss Room", SNOWHEAD_TEMPLE, { //Events - EventAccess(&SnowheadClear, {[]{return SnowheadClear || (BossKeySnowheadTemple && GoronMask && FireArrows && Bow && MagicMeter);}}), - }, + EventAccess(&SnowheadClear, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), + }, { //Locations - LocationAccess(GOHT, {[] {return GoronMask && FireArrows && Bow && MagicMeter && BossKeySnowheadTemple;}}), - LocationAccess(GOHT_HEART_CONTAINER, {[] {return GoronMask && BossKeySnowheadTemple && Bow && FireArrows && MagicMeter;}}), + LocationAccess(GOHT, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), + LocationAccess(GOHT_HEART_CONTAINER, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), + LocationAccess(GIANTS_OATH_TO_ORDER, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), }, { //Exits - Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_4F, {[]{return true;}}), - Entrance(SNOWHEAD, {[]{return GoronMask && FireArrows && Bow && MagicMeter;}}),//gotta kill boss to leave + Entrance(SNOWHEAD_TEMPLE_MAIN_ROOM_4F, {[]{return false;}}), + Entrance(SNOWHEAD, {[]{return GoronMask && CanUse(FIRE_ARROWS);}}), }); /*-------------------------- @@ -2452,7 +2590,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(GBT_SF_ENTRANCE_TORCHES, {[] {return Bow && MagicMeter && FireArrows;}}), + LocationAccess(GBT_SF_ENTRANCE_TORCHES, {[] {return CanUse(FIRE_ARROWS);}}), }, { //Exits @@ -2462,12 +2600,12 @@ void AreaTable_Init() { areaTable[GREAT_BAY_TEMPLE_WATER_CONTROL_ROOM] = Area("Great Bay Temple Water Control Room", "Great Bay Temple Water Control Room", GREAT_BAY_TEMPLE, { //Events - EventAccess(&ReverseWaterFlow, {[]{return RedSwitch && RedSwitch2;}}), + EventAccess(&ReverseWaterFlow, {[]{return RedSwitch && RedSwitch2 && Hookshot;}}), }, { //Locations - LocationAccess(GBT_SF_SKULLTULA, {[] {return Hookshot || (Bow && GreatFairyMask);}}), - LocationAccess(GBT_SF_WATER_CONTROL_UNDERWATER_BUBBLE, {[] {return Hookshot && (ZoraMask || GreatFairyMask);}}), + LocationAccess(GBT_SF_SKULLTULA, {[] {return CanUseProjectile && GreatFairyMask;}}), + LocationAccess(GBT_SF_WATER_CONTROL_UNDERWATER_BUBBLE, {[] {return ZoraMask || ((Bow || Hookshot) && GreatFairyMask);}}), }, { //Exits @@ -2480,21 +2618,21 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(GBT_SF_WHIRLPOOL_JAR, {[] {return ZoraMask && Hookshot;}}), - LocationAccess(GBT_SF_WHIRLPOOL_BARREL, {[] {return ZoraMask && Hookshot;}}), + LocationAccess(GBT_SF_WHIRLPOOL_JAR, {[] {return (ZoraMask || Bow) && GreatFairyMask;}}),//Trick for hidden fairy without GFM? + LocationAccess(GBT_SF_WHIRLPOOL_BARREL, {[] {return GreatFairyMask;}}),//Trick for hidden fairy without GFM? }, { //Exits Entrance(GREAT_BAY_TEMPLE_RED_SWITCH_ROOM, {[]{return ZoraMask;}}), Entrance(GREAT_BAY_TEMPLE_MAP_ROOM, {[]{return ZoraMask;}}), - Entrance(GREAT_BAY_TEMPLE_GREEN_SWITCH_ROOM, {[]{return IceArrows && Bow && MagicMeter;}}), + Entrance(GREAT_BAY_TEMPLE_GREEN_SWITCH_ROOM, {[]{return CanUse(ICE_ARROWS);}}), Entrance(GREAT_BAY_TEMPLE_PRE_BOSS_ROOM, {[]{return ReverseWaterFlow && ZoraMask;}}), Entrance(GREAT_BAY_TEMPLE_COMPASS_ROOM, {[]{return ReverseWaterFlow && ZoraMask;}}), }); areaTable[GREAT_BAY_TEMPLE_RED_SWITCH_ROOM] = Area("Great Bay Temple Red Switch Room", "Great Bay Temple Red Switch Room", GREAT_BAY_TEMPLE, { //Events - EventAccess(&RedSwitch, {[]{return IceArrows && MagicMeter && Bow;}}), + EventAccess(&RedSwitch, {[]{return CanUse(ICE_ARROWS);}}), }, { //Locations @@ -2510,18 +2648,19 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(GBT_MAP_CHEST, {[] {return ZoraMask && Hookshot;}}), - LocationAccess(GBT_SF_LEDGE_JAR, {[] {return ZoraMask && Hookshot && (GreatFairyMask || (Bow && MagicMeter && IceArrows));}}), + LocationAccess(GBT_MAP_CHEST, {[] {return Hookshot || CanUse(ICE_ARROWS);}}), + LocationAccess(GBT_SF_LEDGE_JAR, {[] {return CanUseProjectile && (GreatFairyMask || CanUse(ICE_ARROWS));}}), }, { //Exits - Entrance(GREAT_BAY_TEMPLE_RED_SWITCH2_ROOM, {[]{return ZoraMask && IceArrows && MagicMeter && Bow;}}), + Entrance(GREAT_BAY_TEMPLE_RED_SWITCH2_ROOM, {[]{return CanUse(ICE_ARROWS);}}), Entrance(GREAT_BAY_TEMPLE_BIO_BABA_ROOM, {[]{return ZoraMask;}}), + Entrance(GREAT_BAY_TEMPLE_WHIRLPOOL_ROOM, {[]{return ReverseWaterFlow;}}), }); areaTable[GREAT_BAY_TEMPLE_RED_SWITCH2_ROOM] = Area("Great Bay Temple 2nd Red Switch Room", "Great Bay Temple 2nd Red Switch Room", GREAT_BAY_TEMPLE, { //Events - EventAccess(&RedSwitch2, {[]{return IceArrows && MagicMeter && Bow;}}),//Need to freeze chu to get to switch + EventAccess(&RedSwitch2, {[]{return CanUse(ICE_ARROWS);}}),//Need to freeze chu to get to switch }, { //Locations @@ -2536,12 +2675,12 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(GBT_SF_BIO_BABAS, {[] {return ZoraMask || Hookshot || Bow;}}), + LocationAccess(GBT_SF_BIO_BABAS, {[] {return CanUseProjectile;}}), }, { //Exits Entrance(GREAT_BAY_TEMPLE_MAP_ROOM, {[]{return ZoraMask;}}),//just swim back, no current - Entrance(GREAT_BAY_TEMPLE_COMPASS_ROOM, {[]{return ZoraMask;}}), + Entrance(GREAT_BAY_TEMPLE_COMPASS_ROOM, {[]{return true;}}), }); areaTable[GREAT_BAY_TEMPLE_COMPASS_ROOM] = Area("Great Bay Temple Compass/Key Room", "Great Bay Temple Compass/Key Room", GREAT_BAY_TEMPLE, { @@ -2549,30 +2688,29 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(GBT_COMPASS_CHEST, {[] {return ZoraMask;}}), - LocationAccess(GBT_SMALL_KEY_CHEST, {[] {return ZoraMask && Hookshot;}}), - LocationAccess(GBT_SF_DEXIHANDS_JAR, {[] {return ZoraMask && GreatFairyMask;}}), - + LocationAccess(GBT_COMPASS_CHEST, {[] {return CanUseProjectile || Hookshot;}}),//Projectile sever Bio Baba from platforms + LocationAccess(GBT_SMALL_KEY_CHEST, {[] {return ZoraMask;}}), + LocationAccess(GBT_SF_DEXIHANDS_JAR, {[] {return CanUseProjectile && GreatFairyMask;}}),//Trick for hidden fairy without GFM? }, { //Exits Entrance(GREAT_BAY_TEMPLE_BIO_BABA_ROOM, {[]{return true;}}), Entrance(GREAT_BAY_TEMPLE_WHIRLPOOL_ROOM, {[]{return !ReverseWaterFlow;}}), - Entrance(GREAT_BAY_TEMPLE_FROG_MINIBOSS_ROOM, {[]{return IceArrows && Bow && MagicMeter && FireArrows;}}), + Entrance(GREAT_BAY_TEMPLE_FROG_MINIBOSS_ROOM, {[]{return CanUse(ICE_ARROWS) && CanUse(FIRE_ARROWS);}}), Entrance(GREAT_BAY_TEMPLE_WATER_WHEEL_ROOM, {[]{return ReverseWaterFlow;}}), }); areaTable[GREAT_BAY_TEMPLE_FROG_MINIBOSS_ROOM] = Area("Great Bay Temple Frog MiniBoss", "Great Bay Temple Frog MiniBoss", GREAT_BAY_TEMPLE, { //Events - EventAccess(&GreatBayFrog, {[]{return Bow && IceArrows && MagicMeter && Fighting && DonGerosMask;}}), + EventAccess(&GreatBayFrog, {[]{return CanUse(ICE_ARROWS) && Fighting && DonGerosMask;}}), }, { //Locations }, { //Exits - Entrance(GREAT_BAY_TEMPLE_COMPASS_ROOM, {[]{return true;}}), - Entrance(GREAT_BAY_TEMPLE_BOSS_KEY_ROOM, {[]{return IceArrows && Bow && MagicMeter;}}),//need to beat frog to leave + Entrance(GREAT_BAY_TEMPLE_COMPASS_ROOM, {[]{return CanUse(ICE_ARROWS) && Fighting;}}), + Entrance(GREAT_BAY_TEMPLE_BOSS_KEY_ROOM, {[]{return CanUse(ICE_ARROWS) && Fighting;}}), }); areaTable[GREAT_BAY_TEMPLE_BOSS_KEY_ROOM] = Area("Great Bay Temple Boss Key Room", "Great Bay Temple Boss Key Room", GREAT_BAY_TEMPLE, { @@ -2605,20 +2743,20 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(GBT_ICE_ARROW_CHEST, {[] {return ZoraMask && Hookshot;}}), + LocationAccess(GBT_ICE_ARROW_CHEST, {[] {return Fighting && CanUseProjectile;}}), }, { //Exits - Entrance(GREAT_BAY_TEMPLE_PRE_MINIBOSS_ROOM, {[]{return ZoraMask || Hookshot || Fighting || Bow;}}),//some kind of fighting + Entrance(GREAT_BAY_TEMPLE_PRE_MINIBOSS_ROOM, {[]{return Fighting && CanUseProjectile;}}), }); areaTable[GREAT_BAY_TEMPLE_GREEN_SWITCH_ROOM] = Area("Great Bay Temple Green Switch Room", "Great Bay Temple Green Switch Room", GREAT_BAY_TEMPLE, { //Events - EventAccess(&GreenSwitch, {[]{return ZoraMask && IceArrows && Bow && MagicMeter;}}), + EventAccess(&GreenSwitch, {[]{return CanUse(ICE_ARROWS);}}), }, { //Locations - LocationAccess(GBT_SF_GREEN_VALVE, {[] {return Hookshot && Bow && MagicMeter && IceArrows;}}), + LocationAccess(GBT_SF_GREEN_VALVE, {[] {return Hookshot && CanUse(ICE_ARROWS);}}), }, { //Exits @@ -2630,28 +2768,28 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(GBT_SF_WATERWHEEL_ROOM_LOWER, {[] {return Hookshot && ZoraMask && ReverseWaterFlow;}}), - LocationAccess(GBT_SF_WATERWHEEL_ROOM_UPPER, {[] {return ZoraMask && Hookshot && Bow && MagicMeter && IceArrows;}}), + LocationAccess(GBT_SF_WATERWHEEL_ROOM_LOWER, {[] {return Hookshot && CanUse(ICE_ARROWS);}}), + LocationAccess(GBT_SF_WATERWHEEL_ROOM_UPPER, {[] {return Hookshot && CanUse(ICE_ARROWS);}}), }, { //Exits Entrance(GREAT_BAY_TEMPLE_COMPASS_ROOM, {[]{return false;}}),//Cant go back against current - Entrance(GREAT_BAY_TEMPLE_SEESAW_ROOM, {[]{return IceArrows && FireArrows && Bow && MagicMeter;}}),//FireArrows included to avoid potential softlock + Entrance(GREAT_BAY_TEMPLE_SEESAW_ROOM, {[]{return CanUse(ICE_ARROWS) && CanUse(FIRE_ARROWS);}}),//CanUse(FIRE_ARROWS) included to avoid potential softlock }); areaTable[GREAT_BAY_TEMPLE_SEESAW_ROOM] = Area("Great Bay Temple Seesaw Room", "Great Bay Temple Seesaw Room", GREAT_BAY_TEMPLE, { //Events - EventAccess(&GreenSwitch2, {[]{return FireArrows && IceArrows && Bow && MagicMeter;}}), + EventAccess(&GreenSwitch2, {[]{return CanUse(FIRE_ARROWS) && CanUse(ICE_ARROWS);}}), }, { //Locations - LocationAccess(GBT_SF_SEESAW_ROOM, {[] {return Bow && MagicMeter && FireArrows && IceArrows;}}), - LocationAccess(GBT_SF_UNDERWATER_BARREL, {[] {return ZoraMask;}}), + LocationAccess(GBT_SF_SEESAW_ROOM, {[] {return CanUse(FIRE_ARROWS) && CanUse(ICE_ARROWS);}}), + LocationAccess(GBT_SF_UNDERWATER_BARREL, {[] {return ZoraMask && GreatFairyMask;}}),//Trick for hidden fairy without GFM? }, { //Exits Entrance(GREAT_BAY_TEMPLE_WATER_WHEEL_ROOM, {[]{return true;}}), - Entrance(GREAT_BAY_TEMPLE_MAP_ROOM, {[]{return FireArrows && IceArrows && Bow && MagicMeter;}}), + Entrance(GREAT_BAY_TEMPLE_MAP_ROOM, {[]{return CanUse(FIRE_ARROWS) && CanUse(ICE_ARROWS);}}), }); areaTable[GREAT_BAY_TEMPLE_PRE_BOSS_ROOM] = Area("Great Bay Temple Pre-Boss Room", "Great Bay Temple Pre-Boss Room", GREAT_BAY_TEMPLE, { @@ -2671,17 +2809,18 @@ void AreaTable_Init() { areaTable[GREAT_BAY_TEMPLE_BOSS_ROOM] = Area("Great Bay Temple Boss Room", "Great Bay Temple Boss Room", GREAT_BAY_TEMPLE, { //Events - EventAccess(&GreatBayClear, {[]{return GreatBayClear || (ZoraMask && Hookshot && BossKeyGreatBayTemple && IceArrows && FireArrows && Bow && MagicMeter);}}), + EventAccess(&GreatBayClear, {[]{return ZoraMask && MagicMeter && CanUseProjectile;}}), }, { //Locations - LocationAccess(GYORG, {[] {return ZoraMask && Hookshot && BossKeyGreatBayTemple && IceArrows && FireArrows && Bow && MagicMeter;}}), - LocationAccess(GYORG_HEART_CONTAINER, {[] {return ZoraMask && Hookshot && BossKeyGreatBayTemple && IceArrows && FireArrows && Bow && MagicMeter;}}), + LocationAccess(GYORG, {[]{return ZoraMask && MagicMeter && CanUseProjectile;}}), + LocationAccess(GYORG_HEART_CONTAINER, {[]{return ZoraMask && MagicMeter && CanUseProjectile;}}), + LocationAccess(GIANTS_OATH_TO_ORDER, {[]{return ZoraMask && MagicMeter && CanUseProjectile;}}), }, { //Exits Entrance(GREAT_BAY_TEMPLE_PRE_BOSS_ROOM, {[]{return true;}}), - Entrance(ZORA_CAPE, {[]{return IceArrows && ZoraMask && Bow && MagicMeter;}}), + Entrance(ZORA_CAPE, {[]{return ZoraMask && MagicMeter && CanUseProjectile;}}), }); /*-------------------------- @@ -2699,13 +2838,13 @@ void AreaTable_Init() { { //Exits Entrance(STONE_TOWER_TEMPLE_UPRIGHT_DEATH_ARMOS_ROOM, {[]{return true;}}), - Entrance(STONE_TOWER_TEMPLE_UPRIGHT_UPDRAFT_ROOM, {[]{return LightArrows && Bow && MagicMeter;}}), + Entrance(STONE_TOWER_TEMPLE_UPRIGHT_UPDRAFT_ROOM, {[]{return CanUse(LIGHT_ARROWS);}}), Entrance(STONE_TOWER_TEMPLE_EYEGORE_ROOM, {[]{return false;}}),//OneWay }); areaTable[STONE_TOWER_TEMPLE_UPRIGHT_DEATH_ARMOS_ROOM] = Area("Stone Tower Temple Upright Death Armos Room", "Stone Tower Temple Upright Death Armos Room", STONE_TOWER_TEMPLE, { //Events - EventAccess(&ArmosRoomLightHole, {[]{return CanPlay(ElegyOfEmptiness) && ZoraMask && GoronMask && AnyBombBag;}}), + EventAccess(&ArmosRoomLightHole, {[]{return CanPlay(ElegyOfEmptiness) && ZoraMask && GoronMask && HasExplosives;}}), }, { //Locations @@ -2714,7 +2853,7 @@ void AreaTable_Init() { //Exits Entrance(STONE_TOWER_TEMPLE_ENTRANCE, {[]{return true;}}), Entrance(STONE_TOWER_TEMPLE_ARMOS_ROOM, {[]{return CanPlay(ElegyOfEmptiness) && ZoraMask && GoronMask;}}), - Entrance(STONE_TOWER_TEMPLE_WATER_BRIDGE_ROOM, {[]{return CanPlay(ElegyOfEmptiness) && ZoraMask && GoronMask && SmallKeys(StoneTowerTempleKeys, 1);}}), + Entrance(STONE_TOWER_TEMPLE_WATER_BRIDGE_ROOM, {[]{return CanPlay(ElegyOfEmptiness) && ZoraMask && GoronMask && SmallKeys(StoneTowerTempleKeys, 1);}}), }); areaTable[STONE_TOWER_TEMPLE_ARMOS_ROOM] = Area("Stone Tower Temple Armos Room", "Stone Tower Temple Armos Room", STONE_TOWER_TEMPLE, { @@ -2723,7 +2862,7 @@ void AreaTable_Init() { { //Locations LocationAccess(STONE_TOWER_TEMPLE_MAP_CHEST, {[] {return true;}}), - LocationAccess(STONE_TOWER_TEMPLE_ARMOS_ROOM_CHEST, {[] {return ArmosRoomLightHole && (MirrorShield || (LightArrows && MagicMeter && Bow));}}), // || (GoronMask && Explosives && UseLightArrow) || (ZoraMask && OneStoneTowerKey && UseLightArrow)) + LocationAccess(STONE_TOWER_TEMPLE_ARMOS_ROOM_CHEST, {[] {return (ArmosRoomLightHole && MirrorShield) || CanUse(LIGHT_ARROWS);}}), LocationAccess(ST_SF_BASEMENT_LEDGE, {[] {return Hookshot;}}), }, { @@ -2736,10 +2875,8 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(STONE_TOWER_TEMPLE_BRIDGE_SWITCH_CHEST, {[] {return DekuMask && ZoraMask;}}), //|| ((ZoraMask && UseLightArrow)) - //StrayFairies - LocationAccess(ST_SF_BRIDGE_CRYSTAL, {[] {return ZoraMask && Bow && MagicMeter && LightArrows;}}), - + LocationAccess(STONE_TOWER_TEMPLE_BRIDGE_SWITCH_CHEST, {[] {return DekuMask && ZoraMask;}}),//Zora Mask required to go underneath the bridge + LocationAccess(ST_SF_BRIDGE_CRYSTAL, {[] {return ZoraMask && CanUse(LIGHT_ARROWS);}}), }, { //Exits @@ -2749,15 +2886,17 @@ void AreaTable_Init() { areaTable[STONE_TOWER_TEMPLE_UPRIGHT_UPDRAFT_ROOM] = Area("Stone Tower Temple Upright Updraft Room", "Stone Tower Temple Upright Updraft Room", STONE_TOWER_TEMPLE, { //Events + EventAccess(&UpdraftRoomSwitchUpright, {[]{return ZoraMask;}}), }, { //Locations - LocationAccess(STONE_TOWER_TEMPLE_COMPASS_CHEST, {[] {return MirrorShield || (Bow && MagicMeter && LightArrows);}}), + LocationAccess(STONE_TOWER_TEMPLE_COMPASS_CHEST, {[] {return MirrorShield || CanUse(LIGHT_ARROWS);}}), + LocationAccess(ST_SF_UNDERWATER, {[] {return ZoraMask && UpdraftRoomSwitchInverted;}}),//Trick to hit the switch with Light+Ice while still upright? }, { //Exits - Entrance(STONE_TOWER_TEMPLE_ENTRANCE, {[]{return MirrorShield || (LightArrows && MagicMeter && Bow);}}), - Entrance(STONE_TOWER_TEMPLE_SUN_BLOCK_PUZZLE_ROOM, {[]{return ZoraMask && SmallKeys(StoneTowerTempleKeys, 2);}}), + Entrance(STONE_TOWER_TEMPLE_ENTRANCE, {[]{return MirrorShield || CanUse(LIGHT_ARROWS);}}), + Entrance(STONE_TOWER_TEMPLE_SUN_BLOCK_PUZZLE_ROOM, {[]{return SmallKeys(StoneTowerTempleKeys, 2);}}), }); areaTable[STONE_TOWER_TEMPLE_SUN_BLOCK_PUZZLE_ROOM] = Area("Stone Tower Temple Sun Block Puzzle Room", "Stone Tower Temple Sun Block Puzzle Room", STONE_TOWER_TEMPLE, { @@ -2765,13 +2904,13 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(ST_SF_MIRROR_SUN_BLOCK, {[] {return ((MirrorShield && GoronMask) || (Bow && MagicMeter && LightArrows));}}), - LocationAccess(ST_SF_MIRROR_SUN_SWITCH, {[] {return ((MirrorShield && GoronMask) || (Bow && MagicMeter && LightArrows));}}), + LocationAccess(ST_SF_MIRROR_SUN_BLOCK, {[] {return (MirrorShield && GoronMask) || CanUse(LIGHT_ARROWS);}}), + LocationAccess(ST_SF_MIRROR_SUN_SWITCH, {[] {return (MirrorShield && GoronMask) || CanUse(LIGHT_ARROWS);}}), }, { //Exits Entrance(STONE_TOWER_TEMPLE_UPRIGHT_UPDRAFT_ROOM, {[]{return true;}}), - Entrance(STONE_TOWER_TEMPLE_LAVA_ROOM, {[]{return ((MirrorShield && GoronMask) || (LightArrows && MagicMeter && Bow));}}), + Entrance(STONE_TOWER_TEMPLE_LAVA_ROOM, {[]{return (MirrorShield && GoronMask) || CanUse(LIGHT_ARROWS);}}), }); areaTable[STONE_TOWER_TEMPLE_LAVA_ROOM] = Area("Stone Tower Temple Lava Room", "Stone Tower Temple Lava Room", STONE_TOWER_TEMPLE, { @@ -2806,11 +2945,11 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(ST_SF_THIN_BRIDGE, {[] {return ThinBridgeCrystalChest;}}), + LocationAccess(ST_SF_THIN_BRIDGE, {[] {return ThinBridgeCrystalChest;}}),//Trick to activate the switch with explosives while still upright? }, { //Exits - Entrance(STONE_TOWER_TEMPLE_EYEGORE_ROOM, {[]{return Hookshot;}}), + Entrance(STONE_TOWER_TEMPLE_EYEGORE_ROOM, {[]{return Hookshot;}}),//Failsafe Entrance(STONE_TOWER_TEMPLE_GARO_ROOM, {[]{return false;}})//One Way Door }); @@ -2819,7 +2958,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(ST_SF_EYEGORE, {[] {return Bow && MagicMeter && LightArrows;}}), + LocationAccess(ST_SF_EYEGORE, {[] {return CanUseProjectile;}}), }, { //Exits @@ -2832,27 +2971,27 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(ST_SF_BOSS_WARP, {[] {return Bow && MagicMeter && LightArrows;}}),//Shoot sun switch while upright + LocationAccess(ST_SF_BOSS_WARP, {[] {return CanUse(LIGHT_ARROWS);}}),//Shoot sun switch while upright }, { //Exits Entrance(STONE_TOWER_TEMPLE_UPDRAFT_ROOM, {[]{return true;}}), - Entrance(STONE_TOWER_TEMPLE_INVERTED_THIN_BRIDGE_ROOM, {[]{return Hookshot && InvertedChestSpawn;}}), + Entrance(STONE_TOWER_TEMPLE_INVERTED_EYEGORE_ROOM, {[]{return Hookshot && InvertedChestSpawn && SmallKeys(StoneTowerTempleKeys, 4);}}), }); areaTable[STONE_TOWER_TEMPLE_UPDRAFT_ROOM] = Area("Inverted Stone Tower Temple Updraft Room", "Inverted Stone Tower Temple Updraft Room", STONE_TOWER_TEMPLE, { //Events + EventAccess(&UpdraftRoomSwitchInverted, {[]{return CanUse(LIGHT_ARROWS);}}), }, { //Locations LocationAccess(STONE_TOWER_TEMPLE_UPDRAFT_ROOM_CHEST, {[] {return DekuMask;}}), - LocationAccess(ST_SF_UPDRAFT_FROZEN_EYE, {[] {return Bow && MagicMeter && FireArrows && DekuMask;}}), - LocationAccess(ST_SF_UNDERWATER, {[] {return ZoraMask && DekuMask;}}), - LocationAccess(ST_SF_UPDRAFT_FIRE_RING, {[] {return ZoraMask && DekuMask && CanPlay(ElegyOfEmptiness);}}), + LocationAccess(ST_SF_UPDRAFT_FROZEN_EYE, {[] {return CanUse(FIRE_ARROWS) && DekuMask;}}), + LocationAccess(ST_SF_UPDRAFT_FIRE_RING, {[] {return UpdraftRoomSwitchUpright && DekuMask && CanPlay(ElegyOfEmptiness);}}), }, { //Exits - Entrance(STONE_TOWER_TEMPLE_INVERTED_ENTRANCE, {[]{return DekuMask;}}), + Entrance(STONE_TOWER_TEMPLE_INVERTED_ENTRANCE, {[]{return DekuMask;}}),//Failsafe Entrance(STONE_TOWER_TEMPLE_FLIPPING_LAVA_ROOM, {[]{return DekuMask && SmallKeys(StoneTowerTempleKeys, 3);}}), }); @@ -2865,7 +3004,7 @@ void AreaTable_Init() { { //Exits Entrance(STONE_TOWER_TEMPLE_UPDRAFT_ROOM, {[]{return true;}}), - Entrance(STONE_TOWER_TEMPLE_FLIPPING_BLOCK_PUZZLE, {[]{return LightArrows && Bow && MagicMeter;}}), + Entrance(STONE_TOWER_TEMPLE_FLIPPING_BLOCK_PUZZLE, {[]{return CanUse(LIGHT_ARROWS);}}), }); areaTable[STONE_TOWER_TEMPLE_FLIPPING_BLOCK_PUZZLE] = Area("Inverted Stone Tower Flipping Block Puzzle", "Inverted Stone Tower Flipping Block Puzzle", STONE_TOWER_TEMPLE, { @@ -2877,7 +3016,7 @@ void AreaTable_Init() { { //Exits Entrance(STONE_TOWER_TEMPLE_FLIPPING_LAVA_ROOM, {[]{return true;}}), - Entrance(STONE_TOWER_TEMPLE_WIZZROBE_ROOM, {[]{return LightArrows && Bow && MagicMeter;}}), + Entrance(STONE_TOWER_TEMPLE_WIZZROBE_ROOM, {[]{return CanUse(LIGHT_ARROWS);}}), }); areaTable[STONE_TOWER_TEMPLE_WIZZROBE_ROOM] = Area("Inverted Stone Tower Temple Wizzrobe Room", "Inverted Stone Tower Temple Wizzrobe Room", STONE_TOWER_TEMPLE, { @@ -2885,12 +3024,12 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(ST_SF_WIZZROBE, {[] {return Fighting && Hookshot;}}), + LocationAccess(ST_SF_WIZZROBE, {[] {return (Fighting || CanUseProjectile) && Hookshot;}}), }, { //Exits Entrance(STONE_TOWER_TEMPLE_FLIPPING_BLOCK_PUZZLE, {[]{return true;}}), - Entrance(STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM, {[]{return Hookshot;}}), + Entrance(STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM, {[]{return (Fighting || CanUseProjectile) && Hookshot;}}), }); areaTable[STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM] = Area("Inverted Stone Tower Temple Death Armos Room", "Inverted Stone Tower Temple Death Armos Room", STONE_TOWER_TEMPLE, { @@ -2898,7 +3037,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM_CHEST, {[] {return DekuMask && LightArrows && Bow && MagicMeter;}}), + LocationAccess(STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM_CHEST, {[] {return DekuMask && CanPlay(ElegyOfEmptiness) && CanUse(LIGHT_ARROWS);}}), }, { //Exits @@ -2916,7 +3055,7 @@ void AreaTable_Init() { //Exits Entrance(STONE_TOWER_TEMPLE_DEATH_ARMOS_ROOM, {[]{return true;}}), Entrance(STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_DEATH_ARMOS_LEDGE, {[]{return true;}}), - Entrance(STONE_TOWER_TEMPLE_PRE_GOMESS_ROOM, {[]{return DekuMask && Bow;}}), + Entrance(STONE_TOWER_TEMPLE_PRE_GOMESS_ROOM, {[]{return DekuMask && CanUseProjectile;}}), }); areaTable[STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_DEATH_ARMOS_LEDGE] = Area("Inverted Stone Tower Temple Entrance Death Armos Ledge", "Inverted Stone Tower Temple Entrance Death Armos Ledge", STONE_TOWER_TEMPLE, { @@ -2948,17 +3087,29 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(STONE_TOWER_TEMPLE_BOSS_KEY_CHEST, {[] {return LightArrows && Bow && MagicMeter;}}), + LocationAccess(STONE_TOWER_TEMPLE_BOSS_KEY_CHEST, {[] {return Fighting && CanUse(LIGHT_ARROWS);}}), }, { //Exits - Entrance(STONE_TOWER_TEMPLE_PRE_GOMESS_ROOM, {[]{return LightArrows && Bow && MagicMeter;}}), + Entrance(STONE_TOWER_TEMPLE_PRE_GOMESS_ROOM, {[]{return Fighting && CanUse(LIGHT_ARROWS);}}), + }); + + areaTable[STONE_TOWER_TEMPLE_INVERTED_EYEGORE_ROOM] = Area("Inverted Stone Tower Eyegore Room", "Inverted Stone Tower Eyegore Room", STONE_TOWER_TEMPLE, { + //Events + }, + { + //Locations + }, + { + //Exits + Entrance(STONE_TOWER_TEMPLE_INVERTED_ENTRANCE, {[]{return true;}}), + Entrance(STONE_TOWER_TEMPLE_INVERTED_THIN_BRIDGE_ROOM, {[]{return CanUse(LIGHT_ARROWS);}}) }); areaTable[STONE_TOWER_TEMPLE_INVERTED_THIN_BRIDGE_ROOM] = Area("Inverted Stone Tower Thin Bridge Room", "Inverted Stone Tower Thin Bridge Room", STONE_TOWER_TEMPLE, { //Events - EventAccess(&ThinBridgeCrystalChest, {[]{return Fighting || Bow;}}), + EventAccess(&ThinBridgeCrystalChest, {[]{return Fighting || CanUseProjectile;}}), }, { //Locations @@ -2982,32 +3133,34 @@ void AreaTable_Init() { areaTable[STONE_TOWER_TEMPLE_BOSS_ROOM] = Area("Stone Tower Temple Boss Room", "Stone Tower Temple Boss Room", STONE_TOWER_TEMPLE, { //Events - EventAccess(&StoneTowerClear, {[]{return StoneTowerClear || (LightArrows && Bow && MagicMeter && BossKeyStoneTowerTemple && GiantsMask );}}), - }, + EventAccess(&StoneTowerClear, {[]{return CanUse(LIGHT_ARROWS) && CanUse(GIANTS_MASK);}}), + }, { //Locations - LocationAccess(STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST, {[] {return LightArrows && Bow && MagicMeter && BossKeyStoneTowerTemple;}}), - LocationAccess(TWINMOLD, {[] {return LightArrows && Bow && MagicMeter && BossKeyStoneTowerTemple && GiantsMask;}}), - LocationAccess(TWINMOLD_HEART_CONTAINER, {[] {return LightArrows && Bow && MagicMeter && BossKeyStoneTowerTemple && GiantsMask;}}), + LocationAccess(STONE_TOWER_TEMPLE_GIANTS_MASK_CHEST, {[]{return CanUse(LIGHT_ARROWS) || CanUse(GIANTS_MASK);}}), + LocationAccess(TWINMOLD, {[]{return CanUse(LIGHT_ARROWS) && CanUse(GIANTS_MASK);}}), + LocationAccess(TWINMOLD_HEART_CONTAINER, {[]{return CanUse(LIGHT_ARROWS) && CanUse(GIANTS_MASK);}}), + LocationAccess(GIANTS_OATH_TO_ORDER, {[]{return CanUse(LIGHT_ARROWS) && CanUse(GIANTS_MASK);}}), }, { //Exits - Entrance(STONE_TOWER_TEMPLE, {[]{return LightArrows && Bow && MagicMeter && BossKeyStoneTowerTemple && GiantsMask;}}), + Entrance(STONE_TOWER_TEMPLE, {[]{return CanUse(LIGHT_ARROWS) && CanUse(GIANTS_MASK);}}), }); areaTable[PIRATE_FORTRESS_EXTERIOR] = Area("Pirates Fortress Exterior", "Pirates Fortress Exterior", PIRATE_FORTRESS, { //Events + EventAccess(&PiratePicture, {[]{return Pictobox && StoneMask;}}),//Trick for no Stone Mask? }, { //Locations - LocationAccess(PF_EXTERIOR_LOG_CHEST, {[] {return ZoraMask;}}), - LocationAccess(PF_EXTERIOR_SAND_CHEST, {[] {return ZoraMask;}}), - LocationAccess(PF_EXTERIOR_CORNER_CHEST, {[] {return ZoraMask;}}), + LocationAccess(PF_EXTERIOR_LOG_CHEST, {[] {return ZoraMask && MagicMeter;}}),//Trick to avoid Skullfish without shield? + LocationAccess(PF_EXTERIOR_SAND_CHEST, {[] {return ZoraMask && MagicMeter;}}),//Trick to avoid Skullfish without shield? + LocationAccess(PF_EXTERIOR_CORNER_CHEST, {[] {return ZoraMask && MagicMeter;}}),//Trick to avoid Skullfish without shield? }, { //Exits Entrance(ZORA_CAPE, {[]{return ZoraMask;}}), - Entrance(PIRATE_FORTRESS_MAZE_ROOM, {[]{return ZoraMask && GoronMask;}}),//need to hit goron switch to open grate + Entrance(PIRATE_FORTRESS_MAZE_ROOM, {[]{return ZoraMask && MagicMeter && GoronMask;}}),//Trick to avoid Skullfish without shield? }); areaTable[PIRATE_FORTRESS_MAZE_ROOM] = Area("Pirates Fortress Maze Room", "Pirates Fortress Maze Room", PIRATE_FORTRESS, { @@ -3030,12 +3183,12 @@ void AreaTable_Init() { //Locations LocationAccess(PF_CAGE_ROOM_SHALLOW_CHEST, {[] {return ZoraMask;}}), LocationAccess(PF_CAGE_ROOM_DEEP_CHEST, {[]{return ZoraMask;}}), - LocationAccess(PF_SEWER_CAGE, {[] {return ZoraMask;}}), + LocationAccess(PF_SEWER_CAGE, {[] {return true;}}), }, { //Exits Entrance(PIRATE_FORTRESS_MAZE_ROOM, {[]{return ZoraMask;}}), - Entrance(PIRATE_FORTRESS_EXTERIOR_TOP, {[]{return ZoraMask;}}), + Entrance(PIRATE_FORTRESS_EXTERIOR_TOP, {[]{return CanUseProjectile;}}), }); areaTable[PIRATE_FORTRESS_EXTERIOR_TOP] = Area("Pirates Fortress Exterior Top", "Pirates Fortress Exterior Top", PIRATE_FORTRESS, { @@ -3053,30 +3206,32 @@ void AreaTable_Init() { areaTable[PIRATE_FORTRESS_INTERIOR] = Area("Pirates Fortress Interior", "Pirates Fortress Interior", PIRATE_FORTRESS, { //Events + EventAccess(&PiratePicture, {[]{return Pictobox && StoneMask;}}),//Trick for no Stone Mask? }, { //Locations - LocationAccess(PF_INT_LOWER_CHEST, {[] {return ZoraMask && Hookshot;}}), - LocationAccess(PF_INT_UPPER_CHEST, {[] {return ZoraMask && Hookshot;}}), - LocationAccess(PF_INT_INVISIBLE_SOLDIER, {[] {return LensOfTruth && MagicMeter && AnyHealingPotion;}}), + LocationAccess(PF_INT_LOWER_CHEST, {[] {return Hookshot;}}), + LocationAccess(PF_INT_UPPER_CHEST, {[] {return Hookshot;}}), + LocationAccess(PF_INT_INVISIBLE_SOLDIER, {[] {return CanUse(LENS_OF_TRUTH) && AnyHealingPotion;}}), }, { //Exits Entrance(PIRATE_FORTRESS_EXTERIOR_TOP, {[]{return true;}}), Entrance(PIRATE_FORTRESS_HOOKSHOT_ROOM, {[]{return true;}}), - Entrance(PIRATE_FORTRESS_HOOKSHOT_ROOM_TOP, {[]{return Bow || Hookshot;}}), + Entrance(PIRATE_FORTRESS_HOOKSHOT_ROOM_TOP, {[]{return CanUseProjectile || StoneMask;}}), Entrance(PIRATE_FORTRESS_BARREL_MAZE, {[]{return Hookshot;}}), Entrance(PIRATE_FORTRESS_LAVA_ROOM, {[]{return Hookshot;}}), - Entrance(PIRATE_FORTRESS_GUARD_ROOM, {[]{return Hookshot;}}), + Entrance(PIRATE_FORTRESS_GUARD_ROOM, {[]{return Hookshot && (CanUseProjectile || StoneMask);}}), }); areaTable[PIRATE_FORTRESS_HOOKSHOT_ROOM] = Area("Pirates Fortress Hookshot Room", "Pirates Fortress Hookshot Room", PIRATE_FORTRESS, { //Events + EventAccess(&PiratePicture, {[]{return Pictobox && StoneMask;}}),//Trick for no Stone Mask? }, { //Locations LocationAccess(PF_INTERIOR_HOOKSHOT_CHEST, {[] {return PirateBees;}}), - LocationAccess(PF_INT_HOOKSHOT_ROOM_ZORA_EGG, {[]{return ZoraMask && AnyBottle;}}), + LocationAccess(PF_INT_HOOKSHOT_ROOM_ZORA_EGG, {[]{return PirateBees && Hookshot && ZoraMask && TwoBottles;}}),//Require at least two bottles for lenience }, { //Exits @@ -3085,7 +3240,7 @@ void AreaTable_Init() { areaTable[PIRATE_FORTRESS_HOOKSHOT_ROOM_TOP] = Area("Pirates Fortress Upper Hookshot Room", "Pirates Fortress Upper Hookshot Room", PIRATE_FORTRESS, { //Events - EventAccess(&PirateBees, {[]{return Bow || Hookshot;}}), + EventAccess(&PirateBees, {[]{return Bow;}}),//Trick for zora fins or deku bubble? }, { //Locations @@ -3098,40 +3253,44 @@ void AreaTable_Init() { areaTable[PIRATE_FORTRESS_BARREL_MAZE] = Area("Pirates Fortress Barrel Maze", "Pirates Fortress Barrel Maze", PIRATE_FORTRESS, { //Events + EventAccess(&PiratePicture, {[]{return Pictobox && StoneMask;}}),//Trick for no Stone Mask? }, { //Locations - LocationAccess(PF_INT_BARREL_MAZE_ZORA_EGG, {[]{return ZoraMask && AnyBottle;}}), + LocationAccess(PF_INT_BARREL_MAZE_ZORA_EGG, {[]{return Hookshot && ZoraMask && TwoBottles;}}),//Require at least two bottles for lenience }, { //Exits - Entrance(PIRATE_FORTRESS_INTERIOR, {[]{return Hookshot && Fighting;}}), + Entrance(PIRATE_FORTRESS_INTERIOR, {[]{return (CanUseProjectile || StoneMask) && Fighting;}}),//Projectile/Stone to get past guards, Fighting for swordswoman }); areaTable[PIRATE_FORTRESS_LAVA_ROOM] = Area("Pirate Fortress Lava Room", "Pirate Fortress Lava Room", PIRATE_FORTRESS, { //Events - }, + EventAccess(&PiratePicture, {[]{return Pictobox && StoneMask;}}),//Trick for no Stone Mask? + }, { //Locations - LocationAccess(PF_INT_TANK_CHEST, {[] {return ZoraMask && Hookshot;}}), - LocationAccess(PF_INT_LAVA_ROOM_ZORA_EGG, {[]{return ZoraMask && AnyBottle;}}), + LocationAccess(PF_INT_TANK_CHEST, {[] {return Hookshot && ZoraMask;}}), + LocationAccess(PF_INT_LAVA_ROOM_ZORA_EGG, {[]{return Hookshot && ZoraMask && TwoBottles;}}),//Require at least two bottles for lenience }, { //Exits - Entrance(PIRATE_FORTRESS_INTERIOR, {[]{return Hookshot && Fighting;}}), + Entrance(PIRATE_FORTRESS_INTERIOR, {[]{return (CanUseProjectile || StoneMask) && Fighting;}}),//Projectile/Stone to get past guards, Fighting for swordswoman }); areaTable[PIRATE_FORTRESS_GUARD_ROOM] = Area("Pirates Fortress Guard Room", "Pirates Fortress Guard Room", PIRATE_FORTRESS, { //Events - }, + EventAccess(&PiratePicture, {[]{return Pictobox && StoneMask;}}),//Trick for no Stone Mask? + EventAccess(&Fish, {[]{return AnyBottle && ZoraMask && Hookshot;}}), + }, { //Locations - LocationAccess(PF_INT_GUARD_ROOM_CHEST, {[] {return Hookshot || Bow || StoneMask;}}), - LocationAccess(PF_INT_GUARD_ROOM_ZORA_EGG, {[]{return ZoraMask && AnyBottle;}}), + LocationAccess(PF_INT_GUARD_ROOM_CHEST, {[] {return CanUseProjectile || StoneMask;}}), + LocationAccess(PF_INT_GUARD_ROOM_ZORA_EGG, {[]{return Hookshot && ZoraMask && TwoBottles;}}),//Require at least two bottles for lenience }, { //Exits - Entrance(PIRATE_FORTRESS_INTERIOR, {[]{return Hookshot && Fighting;}}), + Entrance(PIRATE_FORTRESS_INTERIOR, {[]{return (CanUseProjectile || StoneMask) && Fighting;}}),//Projectile/Stone to get past guards, Fighting for swordswoman }); areaTable[BENEATH_THE_WELL_ENTRANCE] = Area("Beneath The Well Entrance", "Beneath The Well Entrance", BENEATH_THE_WELL, { @@ -3143,13 +3302,13 @@ void AreaTable_Init() { { //Exits Entrance(IKANA_CANYON_UPPER, {[]{return true;}}), - Entrance(BENEATH_THE_WELL_LEFT_PATH_ROOM, {[]{return AnyBottle && GibdosMask;}}), + Entrance(BENEATH_THE_WELL_LEFT_PATH_ROOM, {[]{return GibdosMask && (AnyRedPotion || AnyBluePotion);}}), Entrance(BENEATH_THE_WELL_RIGHT_PATH_ROOM, {[]{return GibdosMask && MagicBean;}}), }); areaTable[BENEATH_THE_WELL_LEFT_PATH_ROOM] = Area("Beneath The Well Left Path", "Beneath The Well Left Path", BENEATH_THE_WELL, { //Events - EventAccess(&LoneFish, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), EventAccess(&SpringWater, {[]{return AnyBottle;}}), }, { @@ -3158,14 +3317,15 @@ void AreaTable_Init() { { //Exits Entrance(BENEATH_THE_WELL_ENTRANCE, {[]{return true;}}), - Entrance(BENEATH_THE_WELL_LEFT_PATH_HOT_WATER_ROOM, {[]{return GibdosMask && AnyBottle && FishAccess;}}), - Entrance(BENEATH_THE_WELL_LEFT_PATH_RIGHT_DOOR_ROOM, {[]{return GibdosMask && AnyBottle && SpringWater;}}), + Entrance(BENEATH_THE_WELL_LEFT_PATH_HOT_WATER_ROOM, {[]{return GibdosMask && Fish;}}), + Entrance(BENEATH_THE_WELL_LEFT_PATH_RIGHT_DOOR_ROOM, {[]{return GibdosMask && SpringWater;}}), }); areaTable[BENEATH_THE_WELL_LEFT_PATH_HOT_WATER_ROOM] = Area("Beneath The Well Hot Water Room", "Beneath The Well Hot Water Room", BENEATH_THE_WELL, { //Events - EventAccess(&FishGroup, {[]{return AnyBottle;}}), - EventAccess(&HotSpringWater, {[]{return AnyBottle;}}), + EventAccess(&Fish, {[]{return AnyBottle;}}), + EventAccess(&SpringWater, {[]{return AnyBottle;}}), + EventAccess(&HotSpringWater, {[]{return ZoraMask && AnyBottle;}}), }, { //Locations @@ -3177,7 +3337,7 @@ void AreaTable_Init() { areaTable[BENEATH_THE_WELL_LEFT_PATH_RIGHT_DOOR_ROOM] = Area("Beneath The Well Left Path Right Room", "Beneath The Well Left Path Right Room", BENEATH_THE_WELL, { //Events - EventAccess(&WanderingBugs, {[]{return AnyBottle;}}), + EventAccess(&Bugs, {[]{return AnyBottle && (CanUse(FIRE_ARROWS) || HasFireSourceWithTorch);}}), }, { //Locations @@ -3185,8 +3345,8 @@ void AreaTable_Init() { { //Exits Entrance(BENEATH_THE_WELL_LEFT_PATH_ROOM, {[]{return true;}}), - Entrance(BENEATH_THE_WELL_LEFT_PATH_FAIRY_FOUNTAIN, {[]{return GibdosMask && BugsAccess && AnyBottle;}}), - Entrance(BENEATH_THE_WELL_LEFT_PATH_CHEST_ROOM, {[]{return GibdosMask && BugsAccess && AnyBottle;}}), + Entrance(BENEATH_THE_WELL_LEFT_PATH_FAIRY_FOUNTAIN, {[]{return GibdosMask && Bugs;}}), + Entrance(BENEATH_THE_WELL_LEFT_PATH_CHEST_ROOM, {[]{return GibdosMask && Bugs;}}), }); areaTable[BENEATH_THE_WELL_LEFT_PATH_FAIRY_FOUNTAIN] = Area("Beneath The Well Fairy Fountain", "Beneath The Well Fairy Fountain", BENEATH_THE_WELL, { @@ -3205,7 +3365,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WELL_LEFT_PATH_CHEST, {[] {return true;}}), + LocationAccess(WELL_LEFT_PATH_CHEST, {[] {return CanUse(LENS_OF_TRUTH);}}),//invisible chest }, { //Exits @@ -3214,7 +3374,6 @@ void AreaTable_Init() { areaTable[BENEATH_THE_WELL_RIGHT_PATH_ROOM] = Area("Beneath The Well Right Path", "Beneath The Well Right Path", BENEATH_THE_WELL, { //Events - EventAccess(&DekuBabaNuts, {[]{return Fighting;}}), EventAccess(&DekuBabaSticks, {[]{return Fighting;}}), EventAccess(&SpringWater, {[]{return AnyBottle;}}), }, @@ -3224,13 +3383,13 @@ void AreaTable_Init() { { //Exits Entrance(BENEATH_THE_WELL_ENTRANCE, {[]{return true;}}), - Entrance(BENEATH_THE_WELL_RIGHT_PATH_LEFT_DOOR_ROOM, {[]{return GibdosMask && AnyBottle && FishAccess;}}), + Entrance(BENEATH_THE_WELL_RIGHT_PATH_LEFT_DOOR_ROOM, {[]{return GibdosMask && Fish;}}), Entrance(BENEATH_THE_WELL_PRE_COW_AND_BIG_POE_ROOM, {[]{return GibdosMask && DekuBabaNuts;}}), }); areaTable[BENEATH_THE_WELL_PRE_COW_AND_BIG_POE_ROOM] = Area("Beneath The Well Before Cow/Big Poe Room", "Beneath The Well Before Cow/Big Poe Room", BENEATH_THE_WELL, { //Events - EventAccess(&WanderingBugs, {[]{return AnyBottle;}}), + EventAccess(&Bugs, {[]{return AnyBottle;}}), }, { //Locations @@ -3238,13 +3397,13 @@ void AreaTable_Init() { { //Exits Entrance(BENEATH_THE_WELL_RIGHT_PATH_ROOM, {[]{return true;}}), - Entrance(BENEATH_THE_WELL_COW_ROOM, {[]{return GibdosMask && HotSpringWater && AnyBottle;}}), + Entrance(BENEATH_THE_WELL_COW_ROOM, {[]{return GibdosMask && HotSpringWater;}}), Entrance(BENEATH_THE_WELL_BIG_POE_ROOM, {[]{return GibdosMask && AnyBombBag;}}), }); areaTable[BENEATH_THE_WELL_COW_ROOM] = Area("Beneath The Well Cow Room", "Beneath The Well Cow Room", BENEATH_THE_WELL, { //Events - //Milk? + EventAccess(&Milk, {[]{return CanPlay(EponasSong) && AnyBottle;}}), }, { //Locations @@ -3257,7 +3416,7 @@ void AreaTable_Init() { areaTable[BENEATH_THE_WELL_BIG_POE_ROOM] = Area("Beneath The Well Big Poe Room", "Beneath The Well Big Poe Room", BENEATH_THE_WELL, { //Events - EventAccess(&BigPoe, {[]{return Bow && AnyBottle;}}), + EventAccess(&BigPoe, {[]{return CanUseProjectile && AnyBottle;}}), }, { //Locations @@ -3278,8 +3437,8 @@ void AreaTable_Init() { { //Exits Entrance(BENEATH_THE_WELL_RIGHT_PATH_ROOM, {[]{return true;}}), - Entrance(BENEATH_THE_WELL_RIGHT_PATH_CHEST_ROOM, {[]{return GibdosMask && AnyBottle && BugsAccess;}}), - Entrance(BENEATH_THE_WELL_PRE_MIRROR_SHIELD_ROOM, {[]{return GibdosMask && AnyBottle && BigPoe;}}), + Entrance(BENEATH_THE_WELL_RIGHT_PATH_CHEST_ROOM, {[]{return GibdosMask && Bugs;}}), + Entrance(BENEATH_THE_WELL_PRE_MIRROR_SHIELD_ROOM, {[]{return GibdosMask && BigPoe;}}), }); areaTable[BENEATH_THE_WELL_RIGHT_PATH_CHEST_ROOM] = Area("Beneath The Well Right Path Chest Room", "Beneath The Well Right Path Chest Room", BENEATH_THE_WELL, { @@ -3287,7 +3446,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(WELL_RIGHT_PATH_CHEST, {[] {return FireArrows && MagicMeter && Bow;}}), + LocationAccess(WELL_RIGHT_PATH_CHEST, {[] {return CanUse(FIRE_ARROWS);}}),//Trick for lighting torches with Deku Sticks? }, { //Exits @@ -3296,7 +3455,7 @@ void AreaTable_Init() { areaTable[BENEATH_THE_WELL_PRE_MIRROR_SHIELD_ROOM] = Area("Beneath The Well Pre Mirror Shield Room", "Beneath The Well Pre Mirror Shield Room", BENEATH_THE_WELL, { //Events - EventAccess(&WanderingBugs, {[]{return AnyBottle;}}), + EventAccess(&Bugs, {[]{return AnyBottle && (CanUse(FIRE_ARROWS));}}), }, { //Locations @@ -3304,20 +3463,20 @@ void AreaTable_Init() { { //Exits Entrance(BENEATH_THE_WELL_RIGHT_PATH_LEFT_DOOR_ROOM, {[]{return true;}}), - Entrance(BENEATH_THE_WELL_MIRROR_SHIELD_ROOM, {[]{return AnyBottle;}}), + Entrance(BENEATH_THE_WELL_MIRROR_SHIELD_ROOM, {[]{return GibdosMask && Milk;}}), }); areaTable[BENEATH_THE_WELL_MIRROR_SHIELD_ROOM] = Area("Beneath The Well Mirror Shield Room", "Beneath The Well Mirror Shield Room", BENEATH_THE_WELL, { //Events - }, + }, { //Locations - LocationAccess(BENEATH_THE_WELL_MIRROR_SHIELD_CHEST, {[] {return (FireArrows || LightArrows) && Bow && MagicMeter;}}),//Either burn the cloth or just light arow the switch + LocationAccess(BENEATH_THE_WELL_MIRROR_SHIELD_CHEST, {[] {return CanUse(FIRE_ARROWS);}}),//Trick for lighting torches with Deku Sticks? }, { //Exits Entrance(BENEATH_THE_WELL_PRE_MIRROR_SHIELD_ROOM, {[]{return true;}}), - Entrance(IKANA_CASTLE_EXTERIOR_LOWER, {[]{return MirrorShield || (LightArrows && MagicMeter && Bow);}}), + Entrance(IKANA_CASTLE_EXTERIOR_LOWER, {[]{return MirrorShield || CanUse(LIGHT_ARROWS);}}), }); areaTable[IKANA_CASTLE_EXTERIOR_LOWER] = Area("Ikana Castle Lower Exterior", "Ikana Castle Lower Exterior", IKANA_CASTLE, { @@ -3328,11 +3487,23 @@ void AreaTable_Init() { }, { //Exits - Entrance(IKANA_CANYON_UPPER, {[]{return LightArrows && Bow && MagicMeter;}}), + Entrance(IKANA_CASTLE_SHORTCUT, {[]{return CanUse(LIGHT_ARROWS);}}), Entrance(BENEATH_THE_WELL_MIRROR_SHIELD_ROOM, {[]{return true;}}), Entrance(IKANA_CASTLE_ENTRANCE, {[]{return true;}}), }); + areaTable[IKANA_CASTLE_SHORTCUT] = Area("Ikana Castle Shortcut", "Ikana Castle Shortcut", IKANA_CASTLE, { + //Events + }, + { + //Locations + }, + { + //Exits + Entrance(IKANA_CANYON_UPPER, {[]{return true;}}), + Entrance(IKANA_CASTLE_EXTERIOR_LOWER, {[]{return CanUse(LIGHT_ARROWS) || (MirrorShield && (Fighting || CanUseProjectile));}}), + }); + areaTable[IKANA_CASTLE_ENTRANCE] = Area("Ikana Castle Entrance", "Ikana Castle Entrance", IKANA_CASTLE, { //Events }, @@ -3341,9 +3512,9 @@ void AreaTable_Init() { }, { //Exits - Entrance(IKANA_CASTLE_LAVA_BLOCKS_ROOM, {[]{return FireArrows && Bow && MagicMeter;}}), - Entrance(IKANA_CASTLE_RIGHT_ROOM, {[]{return FireArrows && Bow && MagicMeter;}}), - Entrance(IKANA_CASTLE_THRONE_ROOM, {[]{return IkanaCastleRoofHole;}}), + Entrance(IKANA_CASTLE_LAVA_BLOCKS_ROOM, {[]{return CanUse(FIRE_ARROWS);}}), + Entrance(IKANA_CASTLE_RIGHT_ROOM, {[]{return CanUse(FIRE_ARROWS);}}), + Entrance(IKANA_CASTLE_THRONE_ROOM, {[]{return (IkanaCastleRoofHole && MirrorShield) || CanUse(LIGHT_ARROWS);}}), }); areaTable[IKANA_CASTLE_LAVA_BLOCKS_ROOM] = Area("Ikana Castle Lava Blocks Room", "Ikana Castle Lava Blocks Room", IKANA_CASTLE, { @@ -3405,7 +3576,7 @@ void AreaTable_Init() { { //Exits Entrance(IKANA_CASTLE_ENTRANCE, {[]{return true;}}), - Entrance(IKANA_CASTLE_WIZZROBE_ROOM, {[]{return (MirrorShield && IkanaLightSwitch) || (LightArrows && MagicMeter && Bow);}}) + Entrance(IKANA_CASTLE_WIZZROBE_ROOM, {[]{return (MirrorShield && IkanaLightSwitch) || CanUse(LIGHT_ARROWS);}}) }); areaTable[IKANA_CASTLE_WIZZROBE_ROOM] = Area("Ikana Castle Wizzrobe Room", "Ikana Castle Wizzrobe Room", IKANA_CASTLE, { @@ -3417,7 +3588,7 @@ void AreaTable_Init() { { //Exits Entrance(IKANA_CASTLE_RIGHT_ROOM, {[]{return true;}}), - Entrance(IKANA_CASTLE_RIGHT_STAIRWELL, {[]{return Bow || Fighting;}}), + Entrance(IKANA_CASTLE_RIGHT_STAIRWELL, {[]{return CanUseProjectile || Fighting;}}), }); areaTable[IKANA_CASTLE_RIGHT_STAIRWELL] = Area("Ikana Castle Right Stairwell", "Ikana Castle Right Starwell", IKANA_CASTLE, { @@ -3434,7 +3605,7 @@ void AreaTable_Init() { areaTable[IKANA_CASTLE_EXTERIOR_UPPER_RIGHT] = Area("Ikana Castle Exterior Upper Right", "Ikana Caastle Exterior Upper Right", IKANA_CASTLE, { //Events - EventAccess(&IkanaCastleRoofHole, {[]{return PowderKeg;}}), + EventAccess(&IkanaCastleRoofHole, {[]{return GoronMask && PowderKeg;}}), }, { //Locations @@ -3442,16 +3613,16 @@ void AreaTable_Init() { { //Exits Entrance(IKANA_CASTLE_RIGHT_STAIRWELL, {[]{return true;}}), - Entrance(IKANA_CASTLE_ENTRANCE, {[]{return IkanaCastleRoofHole;}}),//jump in hole + Entrance(IKANA_CASTLE_ENTRANCE, {[]{return IkanaCastleRoofHole;}}),//jump in hole Entrance(IKANA_CASTLE_EXTERIOR_LOWER, {[]{return true;}}), }); areaTable[IKANA_CASTLE_THRONE_ROOM] = Area("Ikana Castle Throne Room", "Ikana Castle Throne Room", IKANA_CASTLE, { //Events - }, + }, { //Locations - LocationAccess(IKANA_CASTLE_IKANA_KING, {[] {return (LightArrows || MirrorShield) && Fighting && FireArrows && Bow && MagicMeter;}}), + LocationAccess(IKANA_CASTLE_IKANA_KING, {[] {return MirrorShield && Fighting && CanUse(FIRE_ARROWS);}}),//Light arrows don't work here }, { //Exits @@ -3461,14 +3632,16 @@ void AreaTable_Init() { areaTable[SECRET_SHRINE_ENTRANCE] = Area("Secret Shrine Entrance", "Secret Shrine Entrance", SECRET_SHRINE, { //Events - }, + EventAccess(&Bugs, {[]{return AnyBottle;}}), + EventAccess(&SpringWater, {[] {return AnyBottle;}}), + }, { //Locations }, { //Exits Entrance(IKANA_CANYON, {[]{return true;}}), - Entrance(SECRET_SHRINE_CENTER_ROOM, {[]{return LightArrows && Bow && MagicMeter;}}), + Entrance(SECRET_SHRINE_CENTER_ROOM, {[]{return CanUse(LIGHT_ARROWS);}}), }); areaTable[SECRET_SHRINE_CENTER_ROOM] = Area("Secret Shrine Center Room", "Secret Shrine Center Room", SECRET_SHRINE, { @@ -3537,10 +3710,10 @@ void AreaTable_Init() { areaTable[THE_MOON_TREE_ROOM] = Area("The Moon Tree Room", "The Moon Tree Room", THE_MOON, { //Events - }, + }, { //Locations - LocationAccess(THE_MOON_MAJORA_CHILD, {[] {return AllMasks;}}), + LocationAccess(THE_MOON_MAJORA_CHILD, {[] {return DekuTrialClear && GoronTrialClear && ZoraTrialClear && LinkTrialClear;}}), }, { //Exits @@ -3567,19 +3740,20 @@ void AreaTable_Init() { }, { //Exits - Entrance(THE_MOON_TREE_ROOM, {[]{return DekuMask;}}), + Entrance(THE_MOON_TREE_ROOM, {[]{return true;}}), 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, { //Events + EventAccess(&DekuTrialClear, {[]{return AllMasks;}}), }, { //Locations }, { //Exits - Entrance(THE_MOON_TREE_ROOM, {[]{return (TotalMaskCount() >= 1);}}), + Entrance(THE_MOON_TREE_ROOM, {[]{return true;}}),//Talk to child Entrance(THE_MOON_DEKU_TRIAL, {[]{return true;}}), }); @@ -3590,28 +3764,29 @@ void AreaTable_Init() { //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;}}), + LocationAccess(MOON_GORON_GOSSIP_1, {[] {return GoronMask && MagicMeter;}}), + LocationAccess(MOON_GORON_GOSSIP_2, {[] {return GoronMask && MagicMeter;}}), + LocationAccess(MOON_GORON_GOSSIP_3, {[] {return GoronMask && MagicMeter;}}), + LocationAccess(MOON_GORON_GOSSIP_4, {[] {return GoronMask && MagicMeter;}}), + LocationAccess(MOON_GORON_GOSSIP_5, {[] {return GoronMask && MagicMeter;}}), }, { //Exits - Entrance(THE_MOON_TREE_ROOM, {[]{return GoronMask;}}), - Entrance(THE_MOON_GORON_TRIAL_KID_ROOM, {[]{return GoronMask;}}), + Entrance(THE_MOON_TREE_ROOM, {[]{return true;}}), + Entrance(THE_MOON_GORON_TRIAL_KID_ROOM, {[]{return GoronMask && MagicMeter;}}), }); areaTable[THE_MOON_GORON_TRIAL_KID_ROOM] = Area("The Moon Goron Trial Kid Room", "The Moon Goron Trial Kid Room", THE_MOON, { //Events + EventAccess(&GoronTrialClear, {[]{return AllMasks;}}), }, { //Locations }, { //Exits - Entrance(THE_MOON_TREE_ROOM, {[]{return (TotalMaskCount() >= 2);}}), - Entrance(THE_MOON_GORON_TRIAL, {[]{return GoronMask;}}), + Entrance(THE_MOON_TREE_ROOM, {[]{return true;}}),//Talk to child + Entrance(THE_MOON_GORON_TRIAL, {[]{return true;}}), }); areaTable[THE_MOON_ZORA_TRIAL] = Area("The Moon Zora Trial", "The Moon Zora Trial", THE_MOON, { @@ -3621,11 +3796,11 @@ void AreaTable_Init() { //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;}}), + LocationAccess(MOON_ZORA_GOSSIP_1, {[] {return ZoraMask && MagicMeter;}}), + LocationAccess(MOON_ZORA_GOSSIP_2, {[] {return ZoraMask && MagicMeter;}}), + LocationAccess(MOON_ZORA_GOSSIP_3, {[] {return ZoraMask && MagicMeter;}}), + LocationAccess(MOON_ZORA_GOSSIP_4, {[] {return ZoraMask && MagicMeter;}}), + LocationAccess(MOON_ZORA_GOSSIP_5, {[] {return ZoraMask && MagicMeter;}}), }, { //Exits @@ -3635,13 +3810,14 @@ void AreaTable_Init() { areaTable[THE_MOON_ZORA_TRIAL_KID_ROOM] = Area("The Moon Zora Trial Kid Room", "The Moon Zora Trial Kid Room", THE_MOON, { //Events + EventAccess(&ZoraTrialClear, {[]{return AllMasks;}}), }, { //Locations }, { //Exits - Entrance(THE_MOON_TREE_ROOM, {[]{return (TotalMaskCount() >= 3);}}), + Entrance(THE_MOON_TREE_ROOM, {[]{return true;}}),//Talk to child Entrance(THE_MOON_ZORA_TRIAL, {[]{return true;}}), }); @@ -3723,7 +3899,7 @@ void AreaTable_Init() { { //Exits Entrance(THE_MOON_LINK_TRIAL_GOSSIP_ROOM_2, {[]{return Fighting;}}), - Entrance(THE_MOON_LINK_TRIAL_PIECE_OF_HEART_ROOM, {[]{return Fighting && AnyBombBag && Bow;}}), + Entrance(THE_MOON_LINK_TRIAL_PIECE_OF_HEART_ROOM, {[]{return Fighting && HasBombchus && Bow;}}),//Trick for Song of Storms? }); 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, { @@ -3738,18 +3914,19 @@ void AreaTable_Init() { { //Exits Entrance(THE_MOON_LINK_TRIAL_IRON_KNUCKLE_ROOM, {[]{return true;}}), - Entrance(THE_MOON_LINK_TRIAL_KID_ROOM, {[]{return (AnyBombBag && FireArrows && Bow && MagicMeter) || CanPlay(SongOfStorms);}}), + Entrance(THE_MOON_LINK_TRIAL_KID_ROOM, {[]{return HasBombchus && CanUse(FIRE_ARROWS);}}),//Trick for Song of Storms? }); areaTable[THE_MOON_LINK_TRIAL_KID_ROOM] = Area("The Moon Link Trial Kid Room", "The Moon Link Trial Kid Room", THE_MOON, { //Events + EventAccess(&LinkTrialClear, {[]{return AllMasks;}}), }, { //Locations }, { //Exits - Entrance(THE_MOON_TREE_ROOM, {[]{return (TotalMaskCount() >= 4);}}), + Entrance(THE_MOON_TREE_ROOM, {[]{return true;}}),//Talk to child Entrance(THE_MOON_LINK_TRIAL_PIECE_OF_HEART_ROOM, {[]{return true;}}), }); @@ -3758,7 +3935,7 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(MAJORA, {[] {return Fighting;}}), + LocationAccess(MAJORA, {[] {return Fighting && CanUseProjectile;}}), }, { //Exits @@ -3768,7 +3945,8 @@ void AreaTable_Init() { areaTable[SSH_ENTRANCE] = Area("Swamp Spider House Entrance", "Swamp Spider House Entrance", SSH, { //Events - }, + EventAccess(&Bugs, {[]{return AnyBottle;}}), + }, { //Locations LocationAccess(SOUTHERN_SWAMP_SPIDER_HOUSE_REWARD, {[] {return SkulltulaCount(SwampSkulltulaTokens, 30);}}), @@ -3781,14 +3959,15 @@ void AreaTable_Init() { areaTable[SSH_MAIN_ROOM_LOWER] = Area("Swamp Spider House Main Room", "Swamp Spider House Main Room", SSH, { //Events + EventAccess(&SpringWater, {[]{return AnyBottle;}}), }, { //Locations - LocationAccess(SSH_MAIN_ROOM_WATER, {[] {return Fighting;}}), - LocationAccess(SSH_MAIN_ROOM_LOWER_LEFT_SOIL, {[] {return Bugs && Fighting;}}), - LocationAccess(SSH_MAIN_ROOM_LOWER_RIGHT_SOIL, {[] {return Bugs && Fighting;}}), - LocationAccess(SSH_MAIN_ROOM_PILLAR, {[] {return Fighting;}}), - LocationAccess(SSH_MAIN_ROOM_JAR, {[] {return Fighting;}}), + LocationAccess(SSH_MAIN_ROOM_WATER, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_MAIN_ROOM_LOWER_LEFT_SOIL, {[] {return Bugs && (Fighting || CanUseProjectile);}}), + LocationAccess(SSH_MAIN_ROOM_LOWER_RIGHT_SOIL, {[] {return Bugs && (Fighting || CanUseProjectile);}}), + LocationAccess(SSH_MAIN_ROOM_PILLAR, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_MAIN_ROOM_JAR, {[] {return Fighting || CanUseProjectile;}}), }, { //Exits @@ -3803,9 +3982,9 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SSH_MAIN_ROOM_UPPER_SOIL, {[] {return Bugs && Fighting;}}), - LocationAccess(SSH_MAIN_ROOM_UPPER_PILLAR, {[] {return Fighting;}}), - LocationAccess(SSH_MAIN_ROOM_NEAR_CEILING, {[] {return (DekuMask && AnyBombBag);}}), + LocationAccess(SSH_MAIN_ROOM_UPPER_SOIL, {[] {return Bugs && (Fighting || CanUseProjectile);}}), + LocationAccess(SSH_MAIN_ROOM_UPPER_PILLAR, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_MAIN_ROOM_NEAR_CEILING, {[] {return DekuMask || ZoraMask || Hookshot;}}), }, { //Exits @@ -3819,9 +3998,9 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SSH_MONUMENT_ROOM_CRATE_1, {[] {return Fighting;}}), - LocationAccess(SSH_MONUMENT_ROOM_CRATE_2, {[] {return Fighting;}}), - LocationAccess(SSH_MONUMENT_ROOM_LOWER_WALL, {[] {return Fighting && Bugs && (AnyBombBag || GoronMask);}}), + LocationAccess(SSH_MONUMENT_ROOM_CRATE_1, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_MONUMENT_ROOM_CRATE_2, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_MONUMENT_ROOM_LOWER_WALL, {[] {return (CanBlastOrSmash && BeansAndWater && (Fighting || CanUseProjectile)) || Hookshot || ZoraMask ;}}), }, { //Exits @@ -3834,8 +4013,8 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SSH_MONUMENT_ROOM_TORCH, {[] {return Fighting;}}), - LocationAccess(SSH_MONUMENT_ROOM_ON_MONUMENT, {[] {return Fighting;}}), + LocationAccess(SSH_MONUMENT_ROOM_TORCH, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_MONUMENT_ROOM_ON_MONUMENT, {[] {return Fighting || CanUseProjectile;}}), }, { //Exits @@ -3848,18 +4027,18 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SSH_POT_ROOM_JAR, {[] {return Fighting;}}), - LocationAccess(SSH_POT_ROOM_POT_1, {[] {return Fighting;}}), - LocationAccess(SSH_POT_ROOM_POT_2, {[] {return Fighting;}}), + LocationAccess(SSH_POT_ROOM_JAR, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_POT_ROOM_POT_1, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_POT_ROOM_POT_2, {[] {return Fighting || CanUseProjectile;}}), LocationAccess(SSH_POT_ROOM_BEHIND_VINES, {[] {return AnySword;}}), - LocationAccess(SSH_POT_ROOM_WALL, {[] {return Fighting;}}), - LocationAccess(SSH_POT_ROOM_BEEHIVE_1, {[] {return Bow || Hookshot || ZoraMask || (DekuMask && MagicMeter);}}), - LocationAccess(SSH_POT_ROOM_BEEHIVE_2, {[] {return Bow || Hookshot || ZoraMask || (DekuMask && MagicMeter);}}), + LocationAccess(SSH_POT_ROOM_WALL, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_POT_ROOM_BEEHIVE_1, {[] {return CanUseProjectile;}}), + LocationAccess(SSH_POT_ROOM_BEEHIVE_2, {[] {return CanUseProjectile;}}), }, { //Exits Entrance(SSH_POT_ROOM_UPPER, {[]{return DekuMask && CanPlay(SonataOfAwakening);}}), - Entrance(SSH_MAIN_ROOM_LOWER, {[]{return true;}}), + Entrance(SSH_MAIN_ROOM_LOWER, {[]{return true;}}), Entrance(SSH_MAIN_ROOM_UPPER, {[]{return DekuMask && CanPlay(SonataOfAwakening);}}), }); @@ -3872,7 +4051,7 @@ void AreaTable_Init() { { //Exits Entrance(SSH_POT_ROOM_LOWER, {[]{return true;}}), - Entrance(SSH_GOLD_ROOM_UPPER, {[]{return DekuMask;}}), + Entrance(SSH_GOLD_ROOM_UPPER_RIGHT, {[]{return DekuMask;}}), Entrance(SSH_MAIN_ROOM_UPPER, {[]{return DekuMask;}}), }); @@ -3881,19 +4060,33 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(SSH_GOLD_ROOM_NEAR_CEILING, {[] {return Hookshot || ZoraMask;}}), - LocationAccess(SSH_GOLD_ROOM_PILLAR, {[] {return Fighting;}}), - LocationAccess(SSH_GOLD_ROOM_BEEHIVE, {[] {return Fighting || Bow || Hookshot || (DekuMask && MagicMeter);}}), - LocationAccess(SSH_GOLD_ROOM_WALL, {[] {return Fighting;}}), + LocationAccess(SSH_GOLD_ROOM_PILLAR, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_GOLD_ROOM_BEEHIVE, {[] {return CanUseProjectile;}}), + LocationAccess(SSH_GOLD_ROOM_WALL, {[] {return (GoldRoomLadder && CanUseProjectile) || Hookshot || ZoraMask;}}), + }, + { + //Exits + Entrance(SSH_MAIN_ROOM_LOWER, {[]{return true;}}), + Entrance(SSH_GOLD_ROOM_UPPER_LEFT, {[]{return (GoldRoomLadder && CanUseProjectile) || Hookshot;}}), + }); + + areaTable[SSH_GOLD_ROOM_UPPER_LEFT] = Area("Swamp Spider House Gold Room", "Swamp Spider House Gold Room", SSH, { + //Events + EventAccess(&GoldRoomLadder, {[]{return CanUseProjectile;}}),//Trick for Bombchu to hit the switch from lower? + }, + { + //Locations + LocationAccess(SSH_GOLD_ROOM_NEAR_CEILING, {[] {return (BeansAndWater && (Fighting || CanUseProjectile)) || Hookshot || ZoraMask;}}), }, { //Exits - Entrance(SSH_MAIN_ROOM_LOWER,{[]{return true;}}), - Entrance(SSH_GOLD_ROOM_UPPER, {[]{return AnyBombBag;}}),//Bombchu can hit switch to spawn ladder + Entrance(SSH_GOLD_ROOM_LOWER, {[]{return true;}}), + Entrance(SSH_TREE_ROOM, {[]{return BeansAndWater;}}),//Trick for beanless jump? }); - areaTable[SSH_GOLD_ROOM_UPPER] = Area("Swamp Spider House Gold Room", "Swamp Spider House Gold Room", SSH, { + areaTable[SSH_GOLD_ROOM_UPPER_RIGHT] = Area("Swamp Spider House Gold Room", "Swamp Spider House Gold Room", SSH, { //Events + EventAccess(&GoldRoomLadder, {[]{return Fighting || CanUseProjectile;}}),//Trick for Bombchu to hit the switch from lower? }, { //Locations @@ -3901,43 +4094,47 @@ void AreaTable_Init() { { //Exits Entrance(SSH_GOLD_ROOM_LOWER, {[]{return true;}}), - Entrance(SSH_TREE_ROOM, {[]{return true;}}), + Entrance(SSH_POT_ROOM_UPPER, {[]{return true;}}), + Entrance(SSH_TREE_ROOM, {[]{return false;}}),//Trick for jumping over? }); areaTable[SSH_TREE_ROOM] = Area("Swamp Spider House Tree Room", "Swamp Spider House Tree Room", SSH, { //Events + EventAccess(&Bugs, {[]{return AnyBottle;}}), }, { //Locations - LocationAccess(SSH_TREE_ROOM_TREE_1, {[] {return Fighting;}}), - LocationAccess(SSH_TREE_ROOM_TREE_2, {[] {return Fighting;}}), - LocationAccess(SSH_TREE_ROOM_TREE_3, {[] {return Fighting;}}), - LocationAccess(SSH_TREE_ROOM_GRASS_1, {[] {return Fighting;}}), - LocationAccess(SSH_TREE_ROOM_GRASS_2, {[] {return Fighting;}}), - LocationAccess(SSH_TREE_ROOM_BEEHIVE, {[] {return Bow || Hookshot || ZoraMask || (DekuMask && MagicMeter);}}), + LocationAccess(SSH_TREE_ROOM_TREE_1, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_TREE_ROOM_TREE_2, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_TREE_ROOM_TREE_3, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_TREE_ROOM_GRASS_1, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_TREE_ROOM_GRASS_2, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(SSH_TREE_ROOM_BEEHIVE, {[] {return CanUseProjectile;}}), }, { //Exits - Entrance(SSH_GOLD_ROOM_UPPER, {[]{return true;}}), + Entrance(SSH_GOLD_ROOM_LOWER, {[]{return true;}}), + Entrance(SSH_GOLD_ROOM_UPPER_LEFT, {[]{return false;}}),//Trick for jumping over? + Entrance(SSH_GOLD_ROOM_UPPER_RIGHT, {[]{return false;}}),//Trick for jumping over? }); areaTable[OSH_ENTRANCE] = Area("Ocean Spider House Entrance", "Ocean Spider House Entrance", OSH, { //Events - }, + }, { //Locations LocationAccess(GBC_OCEAN_SPIDER_DAY1, {[] {return SkulltulaCount(OceanSkulltulaTokens, 30);}}), //Skulltulas - LocationAccess(OSH_ENTRANCE_LEFT_WALL, {[] {return (AnyBombBag || BlastMask) && (Hookshot || ZoraMask);}}), - LocationAccess(OSH_ENTRANCE_RIGHT_WALL, {[] {return (AnyBombBag || BlastMask) && (Hookshot || ZoraMask);}}), - LocationAccess(OSH_ENTRANCE_WEB, {[] {return (AnyBombBag || BlastMask) && ((Hookshot && Bow && MagicMeter && FireArrows) || (ZoraMask && Bow && MagicMeter && FireArrows));}}), + LocationAccess(OSH_ENTRANCE_LEFT_WALL, {[] {return HasExplosives && (Hookshot || ZoraMask);}}), + LocationAccess(OSH_ENTRANCE_RIGHT_WALL, {[] {return HasExplosives && (Hookshot || ZoraMask);}}), + LocationAccess(OSH_ENTRANCE_WEB, {[] {return HasExplosives && CanUse(FIRE_ARROWS) && (Hookshot || ZoraMask);}}), }, { //Exits Entrance(GREAT_BAY_COAST, {[]{return GoronMask;}}), - Entrance(OSH_SECOND_ROOM, {[]{return Hookshot && (AnyBombBag || BlastMask);}}), + Entrance(OSH_SECOND_ROOM, {[]{return Hookshot && HasExplosives;}}), }); areaTable[OSH_SECOND_ROOM] = Area("Ocean Spider House Second Room", "Ocean Spider House Second Room", OSH, { @@ -3947,20 +4144,20 @@ void AreaTable_Init() { //Locations LocationAccess(OSH_SECOND_ROOM_CEILING_EDGE, {[] {return Hookshot || ZoraMask;}}), LocationAccess(OSH_SECOND_ROOM_CEILING_PLANK, {[] {return Hookshot || ZoraMask;}}), - LocationAccess(OSH_SECOND_ROOM_JAR, {[] {return Fighting;}}), - LocationAccess(OSH_SECOND_ROOM_WEBBED_HOLE, {[] {return (HasFireSource || HasFireSourceWithTorch) && Hookshot;}}), - LocationAccess(OSH_SECOND_ROOM_WEBBED_POT, {[] {return (HasFireSource || HasFireSourceWithTorch) && Fighting;}}), - LocationAccess(OSH_SECOND_ROOM_UPPER_POT, {[] {return Fighting;}}), + LocationAccess(OSH_SECOND_ROOM_JAR, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(OSH_SECOND_ROOM_WEBBED_HOLE, {[] {return (CanUse(FIRE_ARROWS) || HasFireSourceWithTorch) && Hookshot;}}), + LocationAccess(OSH_SECOND_ROOM_WEBBED_POT, {[] {return (CanUse(FIRE_ARROWS) || HasFireSourceWithTorch) && (Fighting || CanUseProjectile);}}), + LocationAccess(OSH_SECOND_ROOM_UPPER_POT, {[] {return Fighting || CanUseProjectile;}}), LocationAccess(OSH_SECOND_ROOM_BEHIND_SKULL_1, {[] {return Hookshot || ZoraMask;}}), LocationAccess(OSH_SECOND_ROOM_BEHIND_SKULL_2, {[] {return Hookshot || ZoraMask;}}), - LocationAccess(OSH_SECOND_ROOM_LOWER_POT, {[] {return Fighting;}}), + LocationAccess(OSH_SECOND_ROOM_LOWER_POT, {[] {return Fighting || CanUseProjectile;}}), }, { //Exits Entrance(OSH_ENTRANCE, {[]{return true;}}), - Entrance(OSH_LIBRARY, {[]{return (HasFireSource || HasFireSourceWithTorch);}}), + Entrance(OSH_LIBRARY, {[]{return (CanUse(FIRE_ARROWS) || HasFireSourceWithTorch);}}), Entrance(OSH_COLORED_SKULLS, {[]{return true;}}), - Entrance(OSH_STORAGE_ROOM, {[]{return (HasFireSource || HasFireSourceWithTorch);}}), + Entrance(OSH_STORAGE_ROOM, {[]{return (CanUse(FIRE_ARROWS) || HasFireSourceWithTorch);}}), }); areaTable[OSH_LIBRARY] = Area("Ocean Spider House Library", "Ocean Spider House Library", OSH, { @@ -3970,11 +4167,11 @@ void AreaTable_Init() { //Locations LocationAccess(OSH_LIBRARY_HOLE_BEHIND_PICTURE, {[] {return Hookshot;}}), LocationAccess(OSH_LIBRARY_HOLE_BEHIND_CABINET, {[] {return Hookshot || ZoraMask;}}), - LocationAccess(OSH_LIBRARY_ON_CORNER_BOOKSHELF, {[] {return Fighting;}}), + LocationAccess(OSH_LIBRARY_ON_CORNER_BOOKSHELF, {[] {return Fighting || CanUseProjectile;}}), LocationAccess(OSH_LIBRARY_CEILING_EDGE, {[] {return Hookshot || ZoraMask;}}), - LocationAccess(OSH_LIBRARY_BEHIND_BOOKCASE_1, {[] {return Hookshot;}}), - LocationAccess(OSH_LIBRARY_BEHIND_BOOKCASE_2, {[] {return Hookshot;}}), - LocationAccess(OSH_LIBRARY_BEHIND_PICTURE, {[] {return Hookshot;}}), + LocationAccess(OSH_LIBRARY_BEHIND_BOOKCASE_1, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(OSH_LIBRARY_BEHIND_BOOKCASE_2, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(OSH_LIBRARY_BEHIND_PICTURE, {[] {return CanUseProjectile;}}), }, { //Exits @@ -3986,12 +4183,13 @@ void AreaTable_Init() { }, { //Locations - LocationAccess(OSH_COLORED_SKULLS_CEILING_EDGE, {[] {return Hookshot;}}), - LocationAccess(OSH_COLORED_SKULLS_CHANDELIER_1, {[] {return GoronMask;}}), - LocationAccess(OSH_COLORED_SKULLS_CHANDELIER_2, {[] {return GoronMask;}}), - LocationAccess(OSH_COLORED_SKULLS_CHANDELIER_3, {[] {return GoronMask;}}), - LocationAccess(OSH_COLORED_SKULLS_BEHIND_PICTURE, {[] {return Hookshot;}}), - LocationAccess(OSH_COLORED_SKULLS_POT, {[] {return Fighting;}}), + LocationAccess(OSH_COLORED_SKULLS_CEILING_EDGE, {[] {return Hookshot || ZoraMask;}}), + LocationAccess(OSH_COLORED_SKULLS_CHANDELIER_1, {[] {return Fighting || CanUseProjectile;}}),//Just roll into the table to get them down + LocationAccess(OSH_COLORED_SKULLS_CHANDELIER_2, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(OSH_COLORED_SKULLS_CHANDELIER_3, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(OSH_COLORED_SKULLS_BEHIND_PICTURE, {[] {return Hookshot || ZoraMask;}}), + LocationAccess(OSH_COLORED_SKULLS_POT, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(GBC_OCEAN_SPIDER_CHEST, {[] {return CaptainsHat && Bow;}}),//Trick for without Captain's Hat? }, { //Exits @@ -4003,15 +4201,11 @@ void AreaTable_Init() { }, { //Locations - //Chest - LocationAccess(GBC_OCEAN_SPIDER_CHEST, {[] {return CaptainsHat && Bow;}}), - - //Skulltulas - LocationAccess(OSH_STORAGE_ROOM_CEILING_WEB, {[] {return Bow && MagicMeter && FireArrows && Hookshot;}}), - LocationAccess(OSH_STORAGE_ROOM_BEHIND_CRATE, {[] {return Fighting;}}), - LocationAccess(OSH_STORAGE_ROOM_WALL, {[] {return Fighting;}}), - LocationAccess(OSH_STORAGE_ROOM_CRATE, {[] {return Hookshot;}}), - LocationAccess(OSH_STORAGE_ROOM_BARREL, {[] {return Fighting;}}), + LocationAccess(OSH_STORAGE_ROOM_CEILING_WEB, {[] {return CanUse(FIRE_ARROWS) && (Hookshot || ZoraMask);}}), + LocationAccess(OSH_STORAGE_ROOM_BEHIND_CRATE, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(OSH_STORAGE_ROOM_WALL, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(OSH_STORAGE_ROOM_CRATE, {[] {return Fighting || CanUseProjectile;}}), + LocationAccess(OSH_STORAGE_ROOM_BARREL, {[] {return Hookshot;}}), }, { //Exits @@ -4032,7 +4226,7 @@ void AreaTable_Init() { } namespace Areas { - static std::array < const AreaKey, 265> allAreas = { + static std::array < const AreaKey, 270> allAreas = { ROOT, ROOT_EXITS, N_CLOCK_TOWN, @@ -4062,6 +4256,7 @@ namespace Areas { LAUNDRY_POOL, LAUNDRY_POOL_KAFEI_HIDEOUT, TERMINA_FIELD, + TERMINA_FIELD_OUTSIDE_OBSERVATORY, TERMINA_FIELD_PEAHAT_GROTTO, TERMINA_FIELD_DODONGO_GROTTO, TERMINA_FIELD_BIO_BABA_GROTTO, @@ -4135,6 +4330,7 @@ namespace Areas { IKANA_GRAVEYARD_BATS_ROOM, IKANA_GRAVEYARD_TABLET_ROOM, IKANA_GRAVEYARD_BELOW_GRAVE2, + IKANA_GRAVEYARD_PRE_IRON_KNUCKLE_ROOM, IKANA_GRAVEYARD_IRON_KNUCKLE_ROOM, IKANA_GRAVEYARD_BELOW_GRAVE3, DAMPES_HUT, @@ -4223,6 +4419,7 @@ namespace Areas { STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_DEATH_ARMOS_LEDGE, STONE_TOWER_TEMPLE_PRE_GOMESS_ROOM, STONE_TOWER_TEMPLE_GOMESS_ROOM, + STONE_TOWER_TEMPLE_INVERTED_EYEGORE_ROOM, STONE_TOWER_TEMPLE_INVERTED_THIN_BRIDGE_ROOM, STONE_TOWER_TEMPLE_PRE_BOSS_ROOM, STONE_TOWER_TEMPLE_BOSS_ROOM, @@ -4251,6 +4448,7 @@ namespace Areas { BENEATH_THE_WELL_PRE_MIRROR_SHIELD_ROOM, BENEATH_THE_WELL_MIRROR_SHIELD_ROOM, IKANA_CASTLE_EXTERIOR_LOWER, + IKANA_CASTLE_SHORTCUT, IKANA_CASTLE_ENTRANCE, IKANA_CASTLE_LAVA_BLOCKS_ROOM, IKANA_CASTLE_NO_FLOOR_ROOM, @@ -4289,7 +4487,8 @@ namespace Areas { SSH_MONUMENT_ROOM_LOWER, SSH_MONUMENT_ROOM_UPPER, SSH_GOLD_ROOM_LOWER, - SSH_GOLD_ROOM_UPPER, + SSH_GOLD_ROOM_UPPER_RIGHT, + SSH_GOLD_ROOM_UPPER_LEFT, SSH_POT_ROOM_LOWER, SSH_POT_ROOM_UPPER, SSH_TREE_ROOM, diff --git a/source/logic.cpp b/source/logic.cpp index f86f36e..445cd36 100644 --- a/source/logic.cpp +++ b/source/logic.cpp @@ -45,9 +45,10 @@ namespace Logic { bool AlienBottle = false; bool GoronRaceBottle = false; bool BeaverRaceBottle = false; - bool DampeBottle = false; + bool ArcheryBottle = false; bool ChateauBottle = false; bool MysteryMilkBottle = false; + bool UsableMysteryMilkBottle = false; bool BombersNotebook = false; bool MirrorShield = false; bool HerosShield = false; @@ -90,7 +91,7 @@ namespace Logic { bool GarosMask = false; bool CaptainsHat = false; bool GiantsMask = false; - bool FierceDietyMask = false; + bool FierceDeityMask = false; bool MaskOfTruth = false; bool OneMask = false; bool TwoMasks = false; @@ -122,6 +123,7 @@ namespace Logic { bool SongOfStorms = false; bool SonataOfAwakening = false; bool SongOfHealing = false; + bool LullabyIntro = false; bool GoronsLullaby = false; bool NewWaveBossaNova = false; bool ElegyOfEmptiness = false; @@ -212,7 +214,7 @@ namespace Logic { bool AnySword = false; bool AnyBombBag = false; bool AnyMagicBean = false; - bool WaterForBeans = false; + bool BeansAndWater = false; bool TwoBottles = false; bool AnyWallet = false; bool LimitlessBeans = false; @@ -299,6 +301,25 @@ namespace Logic { bool WoodfallFrog = false; bool GreatBayFrog = false; bool ThinBridgeCrystalChest = false; + bool MilkQuestStart = false; + bool KoumeSaved = false; + bool SpokeToKoume = false; + bool WoodfallPoisonClear = false; + bool WoodfallLadder = false; + bool UpdraftRoomSwitchUpright = false; + bool UpdraftRoomSwitchInverted = false; + bool DekuTrialClear = false; + bool GoronTrialClear = false; + bool ZoraTrialClear = false; + bool LinkTrialClear = false; + bool GoldRoomLadder = false; + bool WinnerPicture = false; + bool PiratePicture = false; + bool RockSirloin = false; + bool SpokeToBabyGoron = false; + bool Milk = false; + bool SpokeToKafei = false; + bool PostedKafeiLetter = false; bool CanGoToMoon = false; @@ -363,7 +384,7 @@ namespace Logic { (item == GAROS_MASK) || (item == CAPTAINS_HAT) || (item == GIANTS_MASK) || - (item == FIERCE_DIETY_MASK) || + (item == FIERCE_DEITY_MASK) || (item == MASK_OF_TRUTH); } static bool HasItem(ItemKey itemName) { @@ -397,7 +418,7 @@ namespace Logic { (itemName == GAROS_MASK && GarosMask) || (itemName == CAPTAINS_HAT && CaptainsHat) || (itemName == GIANTS_MASK && GiantsMask) || - (itemName == FIERCE_DIETY_MASK && FierceDietyMask) || + (itemName == FIERCE_DEITY_MASK && FierceDeityMask) || (itemName == MASK_OF_TRUTH && MaskOfTruth); } @@ -462,16 +483,16 @@ namespace Logic { DekuNutDrop = NutPot || NutCrate || DekuBabaNuts; BugsAccess = BugShrub || WanderingBugs || BugRock; FishAccess = LoneFish || FishGroup; - WaterAccess = (SpringWater && WitchBottle) || CanPlay(SongOfStorms); - HotSpringWaterAccess = HotSpringWater && WitchBottle; - WaterForBeans = (WitchBottle && WaterAccess) || SongOfStorms; + WaterAccess = (SpringWater && AnyBottle) || CanPlay(SongOfStorms); + HotSpringWaterAccess = HotSpringWater && AnyBottle; + BeansAndWater = AnyMagicBean && (SpringWater || SongOfStorms); AnyMagicBean = (MagicBean || MagicBeanPack || LimitlessBeans); //refills Bombs = AnyBombBag; Nuts = DekuNutDrop; Sticks = DekuStickDrop || DekuStick; - Bugs = HasBottle && BugsAccess; - Fish = HasBottle && FishAccess; + Bugs = AnyBottle && BugsAccess; + Fish = AnyBottle && FishAccess; //Other Helpers CanBlastOrSmash = HasExplosives || GoronMask; @@ -488,16 +509,16 @@ namespace Logic { AnyBSword = KokiriSword || RazorSword || GildedSword || (ProgressiveSword >= 1); NightInnAccess = DekuMask || RoomKey; - Fighting = GoronMask || ZoraMask || AnySword || DekuStickFighting; + Fighting = GoronMask || ZoraMask || AnySword /*|| DekuStickFighting || HasExplosives*/;//Trick for bombs, arrows and sticks? AnyShield = HerosShield|| MirrorShield; - CanUseProjectile = HasExplosives || HerosBow || (ProgressiveBow >= 1); + CanUseProjectile = Hookshot || HerosBow || (ProgressiveBow >= 1) || (DekuMask && MagicMeter) || ZoraMask; + HasExplosives = AnyBombBag || (BlastMask && AnyShield);//Shield required to use Blast Mask without killing the player //Item Helpers AnyMagicBean = MagicBean || LimitlessBeans; AnyWallet = Townwallet200 || OceanWallet500 || (ProgressiveWallet >= 1); - AnyBottle = WitchBottle || AlienBottle || BeaverRaceBottle || DampeBottle || GoronRaceBottle || ChateauBottle || MysteryMilkBottle || HasBottle; + AnyBottle = WitchBottle || AlienBottle || BeaverRaceBottle || ArcheryBottle || GoronRaceBottle || ChateauBottle || UsableMysteryMilkBottle || HasBottle; MagicMeter = (ProgressiveMagic >= 1) || MagicPower || ExtendedMagicPower; - WaterForBeans = (AnyBottle && (SpringWater || HotSpringWater)) || SongOfStorms; Scarecrow = Hookshot && CanPlay(ScarecrowSong); AnyPaper = (LandTitle || SwampTitle || OceanTitle || MountainTitle || LetterKafei || LetterMama); @@ -514,13 +535,13 @@ namespace Logic { AnyHealingPotion = AnyRedPotion || AnyBluePotion; AnyRedPotion = AnyBottle; AnyBluePotion = AnyBottle; - TwoBottles = { (WitchBottle && AlienBottle) || (WitchBottle && BeaverRaceBottle) || (WitchBottle && DampeBottle) || + TwoBottles = { (WitchBottle && AlienBottle) || (WitchBottle && BeaverRaceBottle) || (WitchBottle && ArcheryBottle) || (WitchBottle && GoronRaceBottle) || (WitchBottle && ChateauBottle) || (AlienBottle && GoronRaceBottle) || - (AlienBottle && BeaverRaceBottle) || (AlienBottle && DampeBottle) || (AlienBottle && ChateauBottle) || - (GoronRaceBottle && BeaverRaceBottle) || (GoronRaceBottle && DampeBottle) || (GoronRaceBottle && ChateauBottle) || - (BeaverRaceBottle && DampeBottle) || (BeaverRaceBottle && ChateauBottle) || (DampeBottle && ChateauBottle) || - (WitchBottle && MysteryMilkBottle) || (AlienBottle && MysteryMilkBottle) || (BeaverRaceBottle && MysteryMilkBottle) || - (DampeBottle && MysteryMilkBottle) || (GoronRaceBottle && MysteryMilkBottle) || (ChateauBottle && MysteryMilkBottle)}; + (AlienBottle && BeaverRaceBottle) || (AlienBottle && ArcheryBottle) || (AlienBottle && ChateauBottle) || + (GoronRaceBottle && BeaverRaceBottle) || (GoronRaceBottle && ArcheryBottle) || (GoronRaceBottle && ChateauBottle) || + (BeaverRaceBottle && ArcheryBottle) || (BeaverRaceBottle && ChateauBottle) || (ArcheryBottle && ChateauBottle) || + (WitchBottle && UsableMysteryMilkBottle) || (AlienBottle && UsableMysteryMilkBottle) || (BeaverRaceBottle && UsableMysteryMilkBottle) || + (ArcheryBottle && UsableMysteryMilkBottle) || (GoronRaceBottle && UsableMysteryMilkBottle) || (ChateauBottle && UsableMysteryMilkBottle)}; //Tricks PoisonWaterAsZora = ZoraMask && TakeDamage; @@ -572,9 +593,10 @@ namespace Logic { AlienBottle = false; GoronRaceBottle = false; BeaverRaceBottle = false; - DampeBottle = false; + ArcheryBottle = false; ChateauBottle = false; MysteryMilkBottle = false; + UsableMysteryMilkBottle = false; BombersNotebook = false; MirrorShield = false; HerosShield = false; @@ -617,7 +639,7 @@ namespace Logic { GarosMask = false; CaptainsHat = false; GiantsMask = false; - FierceDietyMask = false; + FierceDeityMask = false; MaskOfTruth = false; OneMask = false; TwoMasks = false; @@ -649,6 +671,7 @@ namespace Logic { SongOfStorms = false; SonataOfAwakening = false; SongOfHealing = false; + LullabyIntro = false; GoronsLullaby = false; NewWaveBossaNova = false; ElegyOfEmptiness = false; @@ -740,7 +763,7 @@ namespace Logic { AnySword = false; AnyBombBag = false; AnyMagicBean = false; - WaterForBeans = false; + BeansAndWater = false; TwoBottles = false; AnyWallet = false; LimitlessBeans = false; @@ -828,6 +851,25 @@ namespace Logic { WoodfallFrog = false; GreatBayFrog = false; ThinBridgeCrystalChest = false; + MilkQuestStart = false; + KoumeSaved = false; + SpokeToKoume = false; + WoodfallPoisonClear = false; + WoodfallLadder = false; + UpdraftRoomSwitchUpright = false; + UpdraftRoomSwitchInverted = false; + DekuTrialClear = false; + GoronTrialClear = false; + ZoraTrialClear = false; + LinkTrialClear = false; + GoldRoomLadder = false; + WinnerPicture = false; + PiratePicture = false; + RockSirloin = false; + SpokeToBabyGoron = false; + Milk = false; + SpokeToKafei = false; + PostedKafeiLetter = false; ZoraEgg = 0; diff --git a/source/menu.cpp b/source/menu.cpp index 166114f..f90e9a1 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -20,7 +20,6 @@ using namespace Settings; namespace { bool seedChanged; - bool choosePlayOption; u16 pastSeedLength; u16 settingBound = 0; PrintConsole topScreen, bottomScreen; @@ -48,7 +47,6 @@ void MenuInit() { Settings::InitSettings(); seedChanged = false; - choosePlayOption = false; pastSeedLength = Settings::seed.length(); settingBound = 0; @@ -164,7 +162,7 @@ void MenuUpdate(u32 kDown) { } } //If they pressed B on any menu other than main, go backwards to the previous menu - else if (kDown & KEY_B && currentMenu->mode != MAIN_MENU && !choosePlayOption) { + else if (kDown & KEY_B && currentMenu->mode != MAIN_MENU) { //Want to reset generate menu when leaving if (currentMenu->mode == POST_GENERATE) { @@ -226,9 +224,6 @@ void MenuUpdate(u32 kDown) { PrintResetToDefaultsMenu(); } else if (currentMenu->mode == GENERATE_MODE) { UpdateGenerateMenu(kDown); - if (currentMenu->mode != POST_GENERATE) { - PrintGenerateMenu(); - } } else if (currentMenu->mode == SUB_MENU) { PrintSubMenu(); } @@ -322,34 +317,12 @@ void UpdateResetToDefaultsMenu(u32 kDown) { } u16 menuIdx2; void UpdateGenerateMenu(u32 kDown) { - if (!choosePlayOption) { - if ((kDown & KEY_A) != 0) { - Settings::PlayOption = currentMenu->menuIdx; - consoleSelect(&bottomScreen); - consoleClear(); - choosePlayOption = true; - menuIdx2 = currentMenu->menuIdx; - currentMenu->menuIdx = 0; - } - } - else { - if ((kDown & KEY_B) !=0) { - consoleSelect(&bottomScreen); - consoleClear(); - choosePlayOption = false; - currentMenu->menuIdx = menuIdx2; - } - else if ((kDown & KEY_A) !=0) { - Settings::Version = currentMenu->menuIdx; - consoleSelect(&bottomScreen); - consoleClear(); + //consoleSelect(&bottomScreen); + //consoleClear(); GenerateRandomizer(); //This is just a dummy mode to stop the prompt from appearing again currentMenu->mode = POST_GENERATE; - choosePlayOption = false; - } - } - } + } void PrintMainMenu() { printf("\x1b[0;%dHMain Settings", 1+(BOTTOM_WIDTH-13)/2); @@ -488,47 +461,6 @@ void PrintResetToDefaultsMenu() { printf("\x1b[12;4HPress B to return to the preset menu."); } -void PrintGenerateMenu() { - - consoleSelect(&bottomScreen); - - if (!choosePlayOption) { - printf("\x1b[3;%dHHow will you play?", 1+(BOTTOM_WIDTH-18)/2); - std::vector playOptions = {"3ds Console", "Citra Emulator"}; - - for (u8 i = 0; i < playOptions.size(); i++) { - - std::string option = playOptions[i]; - u8 row = 6 + (i * 2); - //make the current selection green - if (currentMenu->menuIdx == i) { - printf("\x1b[%d;%dH%s>", row, 14, GREEN); - printf("\x1b[%d;%dH%s%s", row, 15, option.c_str(), RESET); - } else { - printf("\x1b[%d;%dH%s", row, 15, option.c_str()); - } - } - } - else { - printf("\x1b[3;%dHSelect your game version", 1 + (BOTTOM_WIDTH -18) / 2); - std::vector versionOptions = {"1.0", "1.1"}; - - for (u8 j=0; j < versionOptions.size(); j++) { - std::string option = versionOptions[j]; - u8 row = 6 + (j * 2); - //make the current selection green - if (currentMenu->menuIdx == j) { - printf("\x1b[%d;%dH%s>", row, 14, GREEN); - printf("\x1b[%d;%dH%s%s", row, 15, option.c_str(), RESET); - } else { - printf("\x1b[%d;%dH%s", row, 15, option.c_str()); - } - } - ClearDescription(); - PrintVersionDescription(); - - } -} void ClearDescription() { consoleSelect(&topScreen); @@ -546,15 +478,6 @@ void PrintOptionDescription() { printf("\x1b[22;0H%s", description.data()); } -void PrintVersionDescription() { - ClearDescription(); //"Description must fit in this space ---------------//" - std::string_view description = "Due to patch size when using version 1.1 it can \n" - "take up to 30 seconds to launch the game, this is\n" - "expected and will not effect gameplay"; - - printf("\x1b[22;0H%s", description.data()); -} - void GenerateRandomizer() { consoleSelect(&topScreen); @@ -590,11 +513,11 @@ void GenerateRandomizer() { printf("\x1b[13;10HWriting Patch..."); if (WriteAllPatches()) { printf("Done"); - if (Settings::PlayOption == PATCH_CONSOLE) { + if (Settings::PlayOption.Value() == PATCH_CONSOLE) { 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) { + else if (Settings::PlayOption.Value() == PATCH_CITRA) { printf("\x1b[15;10HCopy code.ips, exheader.bin and romfs to\n"); printf("\x1b[16;10Hthe MM3D mods folder, then launch MM3D!\n"); } diff --git a/source/patch.cpp b/source/patch.cpp index cf0ac4e..91b4c1e 100644 --- a/source/patch.cpp +++ b/source/patch.cpp @@ -111,15 +111,27 @@ bool WriteAllPatches() { FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma"), FS_ATTRIBUTE_DIRECTORY); //Create the titles directory if it doesn't exist FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles"), FS_ATTRIBUTE_DIRECTORY); - //Create the 0004000000125500 directory if it doesn't exist (mm3d game id) - FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500"), FS_ATTRIBUTE_DIRECTORY); - //Create the romfs directory if it doesn't exist (for LayeredFS) - FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/romfs"), FS_ATTRIBUTE_DIRECTORY); - //Create the actor directory if it doesn't exist - FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/romfs/actor"), FS_ATTRIBUTE_DIRECTORY); - //Create the actors directory if it doesn't exist - FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/romfs/actors"), FS_ATTRIBUTE_DIRECTORY); + //Create the 0004000000125500 OR 0004000000125600 directory if it doesn't exist (mm3d game id: NA/EUR) + if (!Settings::RegionSelect){ + FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500"), FS_ATTRIBUTE_DIRECTORY); + //Create the romfs directory if it doesn't exist (for LayeredFS) + FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/romfs"), FS_ATTRIBUTE_DIRECTORY); + //Create the actor directory if it doesn't exist + FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/romfs/actor"), FS_ATTRIBUTE_DIRECTORY); + //Create the actors directory if it doesn't exist + FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/romfs/actors"), FS_ATTRIBUTE_DIRECTORY); + } + //EU + if (Settings::RegionSelect){ + FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125600"), FS_ATTRIBUTE_DIRECTORY); + //Create the romfs directory if it doesn't exist (for LayeredFS) + FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125600/romfs"), FS_ATTRIBUTE_DIRECTORY); + //Create the actor directory if it doesn't exist + FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125600/romfs/actor"), FS_ATTRIBUTE_DIRECTORY); + //Create the actors directory if it doesn't exist + FSUSER_CreateDirectory(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125600/romfs/actors"), FS_ATTRIBUTE_DIRECTORY); + } /*romfs is used to get files from the romfs folder.This allows us to copy //from basecode and write the exheader without the user needing to worry about //placing them manually on their SD card.*/ @@ -131,17 +143,29 @@ bool WriteAllPatches() { /*------------------------ - | basecode.ips | --------------------------*/ - - // Delete code.ips if it exists - FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/code.ips")); - - // Open code.ips - if (!R_SUCCEEDED(res = FSUSER_OpenFile(&code, sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/code.ips"), FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) { - return false; + //NA + if (!Settings::RegionSelect){ + // Delete code.ips if it exists + FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/code.ips")); + + // Open code.ips + if (!R_SUCCEEDED(res = FSUSER_OpenFile(&code, sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125500/code.ips"), FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) { + return false; + } + } + //EU + if (Settings::RegionSelect){ + // Delete code.ips if it exists + FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125600/code.ips")); + + // Open code.ips + if (!R_SUCCEEDED(res = FSUSER_OpenFile(&code, sdmcArchive, fsMakePath(PATH_ASCII, "/luma/titles/0004000000125600/code.ips"), FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) { + return false; + } } // Copy basecode to code - const char* basecodeFile = Settings::Version == 0 ? "romfs:/basecode.ips" : "romfs:/basecode1.1.ips"; + const char* basecodeFile = Settings::Version.Value() == 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); @@ -340,13 +364,19 @@ bool WriteAllPatches() { // Get exheader for proper playOption const char * filePath; - if (Settings::PlayOption == PATCH_CONSOLE) { + if (Settings::PlayOption.Value() == PATCH_CONSOLE) { filePath = "romfs:/exheader.bin"; } else { filePath = "romfs:/exheader_citra.bin"; } - - CopyFile(sdmcArchive, "/luma/titles/0004000000125500/exheader.bin", filePath); + //NA + if (!Settings::RegionSelect){ + CopyFile(sdmcArchive, "/luma/titles/0004000000125500/exheader.bin", filePath); + } + //EU + if (Settings::RegionSelect){ + CopyFile(sdmcArchive, "/luma/titles/0004000000125600/exheader.bin", filePath); + } /*------------------------ - | custom assets | @@ -398,51 +428,102 @@ bool WriteAllPatches() { // Delete assets if it exists Handle titleassetsOut; - const char* titleassetsOutPath = "/luma/titles/0004000000125500/romfs/actors/zelda2_mag.gar.lzs"; const char* titleassetsInPath = "romfs:/zelda2_mag.gar.lzs"; - FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, titleassetsOutPath)); + //NA + if (!Settings::RegionSelect){ + const char* titleassetsOutPath = "/luma/titles/0004000000125500/romfs/actors/zelda2_mag.gar.lzs"; + FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, titleassetsOutPath)); + // Open assets destination + if (!R_SUCCEEDED(res = FSUSER_OpenFile(&titleassetsOut, sdmcArchive, fsMakePath(PATH_ASCII, titleassetsOutPath), FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) { + return false; + } - // Open assets destination - if (!R_SUCCEEDED(res = FSUSER_OpenFile(&titleassetsOut, sdmcArchive, fsMakePath(PATH_ASCII, titleassetsOutPath), FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) { - return false; + if (auto file = FILEPtr{std::fopen(titleassetsInPath, "r"), std::fclose}) { + // obtain assets size + fseek(file.get(), 0, SEEK_END); + const auto lSize = static_cast(ftell(file.get())); + rewind(file.get()); + + // copy assets into the buffer + std::vector buffer(lSize); + fread(buffer.data(), 1, buffer.size(), file.get()); + + // Write the assets to final destination + if (!R_SUCCEEDED(res = FSFILE_Write(titleassetsOut, &bytesWritten, 0, buffer.data(), buffer.size(), FS_WRITE_FLUSH))) { + return false; + } + } } + //EU + if (Settings::RegionSelect){ + const char* titleassetsOutPath = "/luma/titles/0004000000125600/romfs/actors/zelda2_mag.gar.lzs"; + FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, titleassetsOutPath)); + // Open assets destination + if (!R_SUCCEEDED(res = FSUSER_OpenFile(&titleassetsOut, sdmcArchive, fsMakePath(PATH_ASCII, titleassetsOutPath), FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) { + return false; + } - if (auto file = FILEPtr{std::fopen(titleassetsInPath, "r"), std::fclose}) { - // obtain assets size - fseek(file.get(), 0, SEEK_END); - const auto lSize = static_cast(ftell(file.get())); - rewind(file.get()); + if (auto file = FILEPtr{std::fopen(titleassetsInPath, "r"), std::fclose}) { + // obtain assets size + fseek(file.get(), 0, SEEK_END); + const auto lSize = static_cast(ftell(file.get())); + rewind(file.get()); - // copy assets into the buffer - std::vector buffer(lSize); - fread(buffer.data(), 1, buffer.size(), file.get()); + // copy assets into the buffer + std::vector buffer(lSize); + fread(buffer.data(), 1, buffer.size(), file.get()); - // Write the assets to final destination - if (!R_SUCCEEDED(res = FSFILE_Write(titleassetsOut, &bytesWritten, 0, buffer.data(), buffer.size(), FS_WRITE_FLUSH))) { - return false; + // Write the assets to final destination + if (!R_SUCCEEDED(res = FSFILE_Write(titleassetsOut, &bytesWritten, 0, buffer.data(), buffer.size(), FS_WRITE_FLUSH))) { + return false; + } } } + FSFILE_Close(titleassetsOut); /*------------------- | LOCALE EMULATION | -------------------*/ - if (Settings::PlayOption == PATCH_CONSOLE) { + if (Settings::PlayOption.Value() == PATCH_CONSOLE) { Handle localeOut; - const char* localeOutPath = "/luma/titles/0004000000125500/locale.txt"; - FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, localeOutPath)); - - if (!R_SUCCEEDED(res = FSUSER_OpenFile(&localeOut, sdmcArchive, fsMakePath(PATH_ASCII, localeOutPath), FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) { - return false; + //NA + if (!Settings::RegionSelect){ + const char* localeOutPath = "/luma/titles/0004000000125500/locale.txt"; + FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, localeOutPath)); + + if (!R_SUCCEEDED(res = FSUSER_OpenFile(&localeOut, sdmcArchive, fsMakePath(PATH_ASCII, localeOutPath), FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) { + return false; + } + } + //EU + if (Settings::RegionSelect){ + const char* localeOutPath = "/luma/titles/0004000000125600/locale.txt"; + FSUSER_DeleteFile(sdmcArchive, fsMakePath(PATH_ASCII, localeOutPath)); + if (!R_SUCCEEDED(res = FSUSER_OpenFile(&localeOut, sdmcArchive, fsMakePath(PATH_ASCII, localeOutPath), FS_OPEN_WRITE | FS_OPEN_CREATE, 0))) { + return false; + } } - std::vector buffer = { 'U', 'S', 'A', ' ', 'E', 'N' }; - - if (!R_SUCCEEDED(res = FSFILE_Write(localeOut, &bytesWritten, 0, buffer.data(), buffer.size(), FS_WRITE_FLUSH))) { - return false; + + //NA + if (!Settings::RegionSelect){ + std::vector buffer = { 'U', 'S', 'A', ' ', 'E', 'N' }; + if (!R_SUCCEEDED(res = FSFILE_Write(localeOut, &bytesWritten, 0, buffer.data(), buffer.size(), FS_WRITE_FLUSH))) { + return false; + } + FSFILE_Close(localeOut); } - FSFILE_Close(localeOut); + //EU + if (Settings::RegionSelect){ + std::vector buffer = { 'E', 'U', 'R', ' ', 'E', 'N' }; + if (!R_SUCCEEDED(res = FSFILE_Write(localeOut, &bytesWritten, 0, buffer.data(), buffer.size(), FS_WRITE_FLUSH))) { + return false; + } + FSFILE_Close(localeOut); + } + } FSUSER_CloseArchive(sdmcArchive); diff --git a/source/playthrough.cpp b/source/playthrough.cpp index 7bd171b..c06ee3d 100644 --- a/source/playthrough.cpp +++ b/source/playthrough.cpp @@ -76,7 +76,7 @@ namespace Playthrough { clockTownMap = ItemTable(Location(TINGLE_N_CLOCK_TOWN_CT)->GetPlacedItemKey()).GetName().GetEnglish(); woodfallMap = ItemTable(Location(TINGLE_N_CLOCK_TOWN_WF)->GetPlacedItemKey()).GetName().GetEnglish(); - CustomMessages::CreateMessage(0x1D12, 0xFFFF, 0x3FF0A005, 0xFF1001, + CustomMessages::CreateMessage(0x1D12, 0xFFFF, 0x3FF0A014, 0xFF1001, woodfallMap.insert(0, "#").append("# #20 Rupees#&").append(snowHeadMap.insert(0, "#").c_str()).append("# #40 Rupees#").append("&#No thanks#").c_str(), {QM_GREEN, QM_RED, QM_GREEN, QM_RED, QM_GREEN}, {}, {}, 0x0, false, false); woodfallMap = ItemTable(Location(TINGLE_N_CLOCK_TOWN_WF)->GetPlacedItemKey()).GetName().GetEnglish(); diff --git a/source/setting_descriptions.cpp b/source/setting_descriptions.cpp index 38a6d08..1bb5a40 100644 --- a/source/setting_descriptions.cpp +++ b/source/setting_descriptions.cpp @@ -120,7 +120,7 @@ string_view shuffleMainInventoryDesc = "Shuffle Main Inventory Items\n" "Magic Beans and Fire, Ice, and Light Arrows"; // // string_view shuffleTransformationDesc = "Shuffles Deku, Goron, and Zora Masks"; // -string_view shuffleFierceDietyDesc = "Shuffles Fierce Diety Mask"; // +string_view shuffleFierceDeityDesc = "Shuffles Fierce Deity Mask"; // string_view shuffleMoonItemsDesc = "Shuffles Items from the Moon into the pool\n" // "Includes 4 Pieces of Heart, and 2 junk items"; // /*------------------------------ // @@ -332,10 +332,8 @@ string_view changeOverworldItemsDesc = "**OPTION CURRENTLY WIP**\n" /*------------------------------ // | INGAME SPOILERS | // ------------------------------*/ // -string_view ingameSpoilersShowDesc = "**OPTION CURRENTLY WIP**\n" // - "Every spoiler is shown."; // -string_view ingameSpoilersHideDesc = "**OPTION CURRENTLY WIP**\n" // - "Hides the spheres page and only shows a\n" // +string_view ingameSpoilersShowDesc = "Every spoiler is shown."; // +string_view ingameSpoilersHideDesc = "Hides the spheres page and only shows a\n" // "location's item after it has been found."; // // string_view genSpoilerLogDesc = "Choose to Generate a Spoiler Log"; // @@ -393,17 +391,13 @@ string_view removeDDDesc = "If set the double defense item will be /*------------------------------ // | BLAST MASK COOLDOWN | // ------------------------------*/ // -string_view blastDefault = "**OPTION CURRENTLY WIP**\n" // - "Sets the cooldown time on the blastmask to \n" // +string_view blastDefault = "Sets the cooldown time on the blastmask to \n" // "the default cooldown time of 10 seconds"; // -string_view blastInstant = "**OPTION CURRENTLY WIP**\n" // - "Sets the cooldown time on the blastmask to \n" // +string_view blastInstant = "Sets the cooldown time on the blastmask to \n" // "have no cooldown time"; // -string_view blastVeryShort = "**OPTION CURRENTLY WIP**\n" // - "Sets the cooldown time on the blastmask to \n" // - "have an even shorter cooldown time of 1 second"; // -string_view blastShort = "**OPTION CURRENTLY WIP**\n" // - "Sets the cooldown time on the blastmask to \n" // +string_view blastVeryShort = "Sets the cooldown time on the blastmask to \n" // + "have an even shorter cooldown time of 3 seconds"; // +string_view blastShort = "Sets the cooldown time on the blastmask to \n" // "have a shorter cooldown time of 5 seconds"; // string_view blastLong = "**OPTION CURRENTLY WIP**\n" // "Sets the cooldown time on the blastmask to \n" // @@ -420,8 +414,8 @@ string_view skipMinigamePhasesDesc = "**OPTION CURRENTLY WIP**\n" "both rewards at once for that minigame." // "Also skips the first beaver race."; // // -string_view fierceDietyAnywhereDesc = "**OPTION CURRENTLY WIP**\n" // - "Enables the use of the Fierce Diety Mask anywhere";// +string_view fierceDeityAnywhereDesc = "**OPTION CURRENTLY WIP**\n" // + "Enables the use of the Fierce Deity Mask anywhere";// // string_view underwaterOcarinaDesc = "**OPTION CURRENTLY WIP**\n" // "Enables the use of the ocarina while underwater.";// @@ -617,10 +611,12 @@ string_view ocarinaDiveDesc = "Enables Ocarina Diving"; string_view dpadMaskDesc = "Enables using the 3 D-Pad buttons to use\n" // "transformation masks. This option will also\n" // "patch using Down A with Mask Storage."; // -string_view dpadOcarinaDesc = "Enables using D-Pad down to activate your\n" // +string_view dpadOcarinaDesc = "Enables using D-Pad right to activate your\n" // "ocarina."; // string_view dpadArrowDesc = "Enables using D-Pad up to change your current\n" // "arrow that is being used."; // +string_view twinmoldRestorationDesc = "Fixes Twinmold boss fight so Red Twinmold does not\n" + "regen health when it burrows."; // // /*------------------------------- // | CUSTOM BUTTON MAPPING | // @@ -640,15 +636,23 @@ string_view ingameSpoilersButtonDesc = "Change the button to open the ingame Spo -------------------------------*/ // string_view skipBombersMinigameDesc = "Skip Bomber's Minigame to get the code.\n" // "Sets the code to 12345."; // - -/*------------------------------ // -| GLITCHES | // -------------------------------*/ // +/*------------------------------ // +| GLITCHES | // +------------------------------*/ // const std::vector GlitchDifficulties{"Novice", "Intermediate", "Advanced", "Expert", "Hero"}; - -/*------------------------------ // -| CUTSCENE OPTIONS | // -------------------------------*/ +/*------------------------------ // +| CUTSCENE OPTIONS | // +------------------------------*/ // string_view skipHMSCutsceneDesc = "Skips the initial Happy Mask Salesman's cutscenes"; // string_view skipDarmaniCutsceneDesc = "Skips the Song of Healing Cutscene for Darmani"; // -string_view skipMikauCutsceneDesc = "Skips the Song of Healing Cutscene for Mikau"; // \ No newline at end of file +string_view skipMikauCutsceneDesc = "Skips the Song of Healing Cutscene for Mikau"; // +/*------------------------------ // +| REGION OPTIONS | // +------------------------------*/ // +string_view NARegionDesc = " North America\n" // + "Currently only supports English Hints and Custom Text"; +string_view EURegionDesc = " Europe\n" // + "Currently only supports English Hints and Custom Text"; +string_view VersionDesc = "Due to patch size when using version 1.1 it can \n" // + "take up to 30 seconds to launch the game, this is\n"// + "expected and will not effect gameplay"; // \ No newline at end of file diff --git a/source/settings.cpp b/source/settings.cpp index c198451..d5aff7d 100644 --- a/source/settings.cpp +++ b/source/settings.cpp @@ -64,14 +64,26 @@ namespace Settings { }; //Mode/Logic Settings - Option Logic = Option::U8("Logic", { "Glitchless", "No Logic", "Vanilla", "Glitched" }, { logicGlitchless, logicNoLogic, logicVanilla, logicGlitched }); + Option Logic = Option::U8("Logic", { "Glitchless", "No Logic", "Vanilla", "Glitched" }, { logicGlitchless, logicNoLogic, logicVanilla, logicGlitched },OptionCategory::Setting, (u8)LogicSetting::LOGIC_GLITCHLESS); Option LocationsReachable = Option::Bool("All Locations Reachable", { "Off", "On" }, { locationsReachableDesc }, OptionCategory::Setting, 1); //All Locations Reachable On std::vector logicOptions = { &Logic, &LocationsReachable, + }; + + //Game Settings + Option GenerateSpoilerLog = Option::Bool("Generate Spoiler Log", { "No", "Yes" }, { genSpoilerLogDesc }, OptionCategory::Setting, 1); // On + Option IngameSpoilers = Option::Bool("Ingame Spoilers", { "Hide", "Show" }, { ingameSpoilersHideDesc, ingameSpoilersShowDesc }); + Option RegionSelect = Option::Bool("Game Region", {"NA", "EU"}, {NARegionDesc, EURegionDesc}); + Option PlayOption = Option::U8("Console/Emulator", {"3DS", "Citra"}, {"How will you Play?"}); + Option Version = Option::U8("Version", {"1.0", "1.1"}, {VersionDesc}); + std::vector