From 41cf6b333865b5d06d7260305467cb53d2603ddc Mon Sep 17 00:00:00 2001 From: Malkierian Date: Mon, 27 Jan 2025 14:13:14 -0700 Subject: [PATCH 01/68] LUS bump (#4960) --- libultraship | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libultraship b/libultraship index d60e84754..5341b0172 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit d60e84754a7a1226d6b3c2a515e21f8990b7a5b4 +Subproject commit 5341b017254a186da3ffe6d681d4e293769f23f4 From 668e266ecc867f38db39b4cce833a299f21a60c9 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Mon, 27 Jan 2025 17:59:46 -0800 Subject: [PATCH 02/68] clamp `addAlpha` when skipping spinning logos to prevent softlock (#4964) * debug print logos seen * maybe this is the fix, not sure if there's a better option i'm overlooking * use clamp * msvc plz * msvc? * max is cleaner --- soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp b/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp index 48bbdb6b6..d478f8fc3 100644 --- a/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp +++ b/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp @@ -185,7 +185,7 @@ void OnZTitleUpdatePressButtonToSkip(void* gameState) { if (CHECK_BTN_ANY(titleContext->state.input->press.button, BTN_A | BTN_B | BTN_START)) { // Force the title state to start fading to black and to last roughly 5 frames based on current fade in/out titleContext->visibleDuration = 0; - titleContext->addAlpha = (255 - titleContext->coverAlpha) / 5; + titleContext->addAlpha = std::max((255 - titleContext->coverAlpha) / 5, 1); } } From 1f65bde5838524b921e1bb339cbca3892c31ae55 Mon Sep 17 00:00:00 2001 From: Malkierian Date: Tue, 28 Jan 2025 18:45:21 -0700 Subject: [PATCH 03/68] Move most ImGui-related files/code to an SohGui subfolder. (#4968) --- .../Enhancements/TimeDisplay/TimeDisplay.cpp | 2 +- soh/soh/Enhancements/audio/AudioEditor.cpp | 2 +- soh/soh/Enhancements/controls/InputViewer.cpp | 2 +- .../controls/SohInputEditorWindow.cpp | 2 +- .../cosmetics/CosmeticsEditor.cpp | 2 +- .../Enhancements/debugger/MessageViewer.cpp | 2 +- soh/soh/Enhancements/debugger/actorViewer.cpp | 2 +- soh/soh/Enhancements/debugger/colViewer.cpp | 2 +- .../Enhancements/debugger/debugSaveEditor.cpp | 8 +-- soh/soh/Enhancements/debugger/dlViewer.cpp | 6 +-- .../Enhancements/debugger/hookDebugger.cpp | 4 +- soh/soh/Enhancements/debugger/valueViewer.cpp | 2 +- soh/soh/Enhancements/gameplaystats.cpp | 2 +- soh/soh/Enhancements/presets.cpp | 2 +- .../Enhancements/randomizer/Plandomizer.cpp | 4 +- .../Enhancements/randomizer/hook_handlers.cpp | 2 +- soh/soh/Enhancements/randomizer/option.cpp | 2 +- soh/soh/Enhancements/randomizer/option.h | 2 +- .../Enhancements/randomizer/randomizer.cpp | 4 +- .../randomizer/randomizer_check_tracker.cpp | 2 +- .../randomizer_entrance_tracker.cpp | 2 +- .../randomizer/randomizer_item_tracker.cpp | 2 +- .../resolution-editor/ResolutionEditor.cpp | 2 +- .../Enhancements/timesplits/TimeSplits.cpp | 2 +- soh/soh/OTRGlobals.cpp | 4 +- soh/soh/SaveManager.cpp | 2 +- soh/soh/SohGui.hpp | 50 ------------------ soh/soh/{ => SohGui}/ImGuiUtils.cpp | 0 soh/soh/{ => SohGui}/ImGuiUtils.h | 2 +- soh/soh/{ => SohGui}/SohGui.cpp | 10 ++-- soh/soh/SohGui/SohGui.hpp | 50 ++++++++++++++++++ soh/soh/{ => SohGui}/SohMenuBar.cpp | 52 +++++++++---------- soh/soh/{ => SohGui}/SohMenuBar.h | 0 soh/soh/{ => SohGui}/SohModals.cpp | 2 +- soh/soh/{ => SohGui}/SohModals.h | 0 soh/soh/{ => SohGui}/UIWidgets.cpp | 0 soh/soh/{ => SohGui}/UIWidgets.hpp | 0 37 files changed, 118 insertions(+), 118 deletions(-) delete mode 100644 soh/soh/SohGui.hpp rename soh/soh/{ => SohGui}/ImGuiUtils.cpp (100%) rename soh/soh/{ => SohGui}/ImGuiUtils.h (97%) rename soh/soh/{ => SohGui}/SohGui.cpp (97%) create mode 100644 soh/soh/SohGui/SohGui.hpp rename soh/soh/{ => SohGui}/SohMenuBar.cpp (99%) rename soh/soh/{ => SohGui}/SohMenuBar.h (100%) rename soh/soh/{ => SohGui}/SohModals.cpp (98%) rename soh/soh/{ => SohGui}/SohModals.h (100%) rename soh/soh/{ => SohGui}/UIWidgets.cpp (100%) rename soh/soh/{ => SohGui}/UIWidgets.hpp (100%) diff --git a/soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp b/soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp index 09f037570..05e03dae1 100644 --- a/soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp +++ b/soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp @@ -4,7 +4,7 @@ #include "assets/textures/parameter_static/parameter_static.h" #include "assets/soh_assets.h" -#include "soh/ImGuiUtils.h" +#include "soh/SohGui/ImGuiUtils.h" extern "C" { #include "macros.h" diff --git a/soh/soh/Enhancements/audio/AudioEditor.cpp b/soh/soh/Enhancements/audio/AudioEditor.cpp index d56c8269c..d15bc5f25 100644 --- a/soh/soh/Enhancements/audio/AudioEditor.cpp +++ b/soh/soh/Enhancements/audio/AudioEditor.cpp @@ -11,7 +11,7 @@ #include "soh/OTRGlobals.h" #include "soh/cvar_prefixes.h" #include -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "AudioCollection.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" diff --git a/soh/soh/Enhancements/controls/InputViewer.cpp b/soh/soh/Enhancements/controls/InputViewer.cpp index 7d6b37179..5f650a25f 100644 --- a/soh/soh/Enhancements/controls/InputViewer.cpp +++ b/soh/soh/Enhancements/controls/InputViewer.cpp @@ -9,7 +9,7 @@ #include #include -#include "../../UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" // Text colors static ImVec4 textColor = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); diff --git a/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp b/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp index 7967c3d15..7e4918799 100644 --- a/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp +++ b/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp @@ -1,7 +1,7 @@ #include "SohInputEditorWindow.h" #include #include "soh/OTRGlobals.h" -#include "../../UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "z64.h" #include "soh/cvar_prefixes.h" #ifndef __WIIU__ diff --git a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp index 45e097df7..0bdd3d10d 100644 --- a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp +++ b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp @@ -10,7 +10,7 @@ #include #include -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" diff --git a/soh/soh/Enhancements/debugger/MessageViewer.cpp b/soh/soh/Enhancements/debugger/MessageViewer.cpp index 3c10772f3..589dbaf4a 100644 --- a/soh/soh/Enhancements/debugger/MessageViewer.cpp +++ b/soh/soh/Enhancements/debugger/MessageViewer.cpp @@ -1,6 +1,6 @@ #include "MessageViewer.h" -#include +#include #include #include "../custom-message/CustomMessageManager.h" diff --git a/soh/soh/Enhancements/debugger/actorViewer.cpp b/soh/soh/Enhancements/debugger/actorViewer.cpp index c6ac49a74..8aac60954 100644 --- a/soh/soh/Enhancements/debugger/actorViewer.cpp +++ b/soh/soh/Enhancements/debugger/actorViewer.cpp @@ -1,6 +1,6 @@ #include "actorViewer.h" #include "../../util.h" -#include "../../UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "soh/ActorDB.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/nametag.h" diff --git a/soh/soh/Enhancements/debugger/colViewer.cpp b/soh/soh/Enhancements/debugger/colViewer.cpp index 2cba03f5b..493ffdfdc 100644 --- a/soh/soh/Enhancements/debugger/colViewer.cpp +++ b/soh/soh/Enhancements/debugger/colViewer.cpp @@ -1,6 +1,6 @@ #include "colViewer.h" #include "../../frame_interpolation.h" -#include "../../UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include #include diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index 5fedd54be..962f50bd6 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -1,8 +1,8 @@ #include "debugSaveEditor.h" -#include "../../util.h" -#include "../../ImGuiUtils.h" -#include "../../OTRGlobals.h" -#include "../../UIWidgets.hpp" +#include "soh/util.h" +#include "soh/SohGui/ImGuiUtils.h" +#include "soh/OTRGlobals.h" +#include "soh/SohGui/UIWidgets.hpp" #include #include diff --git a/soh/soh/Enhancements/debugger/dlViewer.cpp b/soh/soh/Enhancements/debugger/dlViewer.cpp index fdfc8be1c..4f4d13bff 100644 --- a/soh/soh/Enhancements/debugger/dlViewer.cpp +++ b/soh/soh/Enhancements/debugger/dlViewer.cpp @@ -1,9 +1,9 @@ #include "actorViewer.h" -#include "../../util.h" -#include "../../UIWidgets.hpp" +#include "soh/util.h" +#include "soh/SohGui/UIWidgets.hpp" #include "ResourceManager.h" #include "DisplayList.h" -#include "../../OTRGlobals.h" +#include "soh/OTRGlobals.h" #include #include diff --git a/soh/soh/Enhancements/debugger/hookDebugger.cpp b/soh/soh/Enhancements/debugger/hookDebugger.cpp index 8ee9b3391..782cf4f7a 100644 --- a/soh/soh/Enhancements/debugger/hookDebugger.cpp +++ b/soh/soh/Enhancements/debugger/hookDebugger.cpp @@ -1,6 +1,6 @@ #include "hookDebugger.h" -#include "../game-interactor/GameInteractor.h" -#include "../../UIWidgets.hpp" +#include "soh/Enhancements/game-interactor/GameInteractor.h" +#include "soh/SohGui/UIWidgets.hpp" #include #include diff --git a/soh/soh/Enhancements/debugger/valueViewer.cpp b/soh/soh/Enhancements/debugger/valueViewer.cpp index a58512ea3..088e69713 100644 --- a/soh/soh/Enhancements/debugger/valueViewer.cpp +++ b/soh/soh/Enhancements/debugger/valueViewer.cpp @@ -1,5 +1,5 @@ #include "valueViewer.h" -#include "../../UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "soh/OTRGlobals.h" extern "C" { diff --git a/soh/soh/Enhancements/gameplaystats.cpp b/soh/soh/Enhancements/gameplaystats.cpp index ddff16c7d..aff0d0726 100644 --- a/soh/soh/Enhancements/gameplaystats.cpp +++ b/soh/soh/Enhancements/gameplaystats.cpp @@ -5,7 +5,7 @@ #include "functions.h" #include "macros.h" #include "soh/cvar_prefixes.h" -#include "../UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "soh/util.h" #include diff --git a/soh/soh/Enhancements/presets.cpp b/soh/soh/Enhancements/presets.cpp index b72143247..4ba4b62be 100644 --- a/soh/soh/Enhancements/presets.cpp +++ b/soh/soh/Enhancements/presets.cpp @@ -3,7 +3,7 @@ #include #include #include -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include void clearCvars(std::vector cvarsToClear) { diff --git a/soh/soh/Enhancements/randomizer/Plandomizer.cpp b/soh/soh/Enhancements/randomizer/Plandomizer.cpp index 2a086d377..e6c9399b5 100644 --- a/soh/soh/Enhancements/randomizer/Plandomizer.cpp +++ b/soh/soh/Enhancements/randomizer/Plandomizer.cpp @@ -1,5 +1,5 @@ #include "Plandomizer.h" -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "soh/util.h" #include #include "soh/Notification/Notification.h" @@ -10,7 +10,7 @@ #include #include "soh/OTRGlobals.h" -#include "soh/ImGuiUtils.h" +#include "soh/SohGui/ImGuiUtils.h" #include "soh/Enhancements/randomizer/logic.h" #include "soh/Enhancements/randomizer/randomizer_check_objects.h" #include "soh/Enhancements/randomizer/rando_hash.h" diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index cc9708789..e323e810a 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -12,7 +12,7 @@ #include "soh/Enhancements/randomizer/ShuffleFreestanding.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" -#include "soh/ImGuiUtils.h" +#include "soh/SohGui/ImGuiUtils.h" #include "soh/Notification/Notification.h" #include "soh/SaveManager.h" #include "soh/Enhancements/randomizer/ShuffleFairies.h" diff --git a/soh/soh/Enhancements/randomizer/option.cpp b/soh/soh/Enhancements/randomizer/option.cpp index 84743cae6..5cf16ac26 100644 --- a/soh/soh/Enhancements/randomizer/option.cpp +++ b/soh/soh/Enhancements/randomizer/option.cpp @@ -2,7 +2,7 @@ #include "libultraship/bridge.h" #include #include -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" namespace Rando { Option Option::Bool(RandomizerSettingKey key_, std::string name_, std::vector options_, diff --git a/soh/soh/Enhancements/randomizer/option.h b/soh/soh/Enhancements/randomizer/option.h index a8ffe3511..1ff68c852 100644 --- a/soh/soh/Enhancements/randomizer/option.h +++ b/soh/soh/Enhancements/randomizer/option.h @@ -1,6 +1,6 @@ #pragma once -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include #include diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 477c2f0da..d1ca49162 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -11,9 +11,9 @@ #include "3drando/rando_main.hpp" #include "3drando/random.hpp" #include "soh/ResourceManagerHelpers.h" -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "3drando/custom_messages.hpp" -#include "../../UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include #include #include "../custom-message/CustomMessageTypes.h" diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index b6ef5752c..51abc0db1 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -6,7 +6,7 @@ #include "soh/cvar_prefixes.h" #include "soh/SaveManager.h" #include "soh/ResourceManagerHelpers.h" -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "dungeon.h" #include "location_access.h" diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp index 0d7b1a731..78de199d7 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp @@ -1,7 +1,7 @@ #include "randomizer_entrance_tracker.h" #include "soh/OTRGlobals.h" #include "soh/cvar_prefixes.h" -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include #include diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index 0b96c4ab2..eb0b1aafd 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -4,7 +4,7 @@ #include "soh/cvar_prefixes.h" #include "soh/SaveManager.h" #include "soh/ResourceManagerHelpers.h" -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "randomizerTypes.h" #include diff --git a/soh/soh/Enhancements/resolution-editor/ResolutionEditor.cpp b/soh/soh/Enhancements/resolution-editor/ResolutionEditor.cpp index c15f04364..a18aea8dc 100644 --- a/soh/soh/Enhancements/resolution-editor/ResolutionEditor.cpp +++ b/soh/soh/Enhancements/resolution-editor/ResolutionEditor.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include "soh/SohGui/UIWidgets.hpp" #include #include "soh/OTRGlobals.h" #include "soh/cvar_prefixes.h" diff --git a/soh/soh/Enhancements/timesplits/TimeSplits.cpp b/soh/soh/Enhancements/timesplits/TimeSplits.cpp index b17f95b82..de9e157c3 100644 --- a/soh/soh/Enhancements/timesplits/TimeSplits.cpp +++ b/soh/soh/Enhancements/timesplits/TimeSplits.cpp @@ -1,5 +1,5 @@ #include "TimeSplits.h" -#include "soh/UIWidgets.hpp" +#include "soh/SohGui/UIWidgets.hpp" #include "soh/Enhancements/gameplaystats.h" #include "soh/SaveManager.h" #include "soh/util.h" diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 9bc33593d..c19b186db 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -42,7 +42,6 @@ #include "Fonts.h" #include #include "Enhancements/custom-message/CustomMessageManager.h" -#include "ImGuiUtils.h" #include "Enhancements/presets.h" #include "util.h" #include @@ -70,7 +69,8 @@ #include "Enhancements/custom-message/CustomMessageTypes.h" #include #include "Enhancements/item-tables/ItemTableManager.h" -#include "SohGui.hpp" +#include "soh/SohGui/SohGui.hpp" +#include "soh/SohGui/ImGuiUtils.h" #include "ActorDB.h" #include "SaveManager.h" diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index 188006181..f91696191 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -15,7 +15,7 @@ #include "macros.h" #include #include -#include "SohGui.hpp" +#include "soh/SohGui/SohGui.hpp" #define NOGDI // avoid various windows defines that conflict with things in z64.h #include diff --git a/soh/soh/SohGui.hpp b/soh/soh/SohGui.hpp deleted file mode 100644 index 526db64bf..000000000 --- a/soh/soh/SohGui.hpp +++ /dev/null @@ -1,50 +0,0 @@ -// -// SohGui.hpp -// soh -// -// Created by David Chavez on 24.08.22. -// - -#ifndef SohGui_hpp -#define SohGui_hpp - -#include -#include "SohMenuBar.h" -#include "Enhancements/audio/AudioEditor.h" -#include "Enhancements/controls/InputViewer.h" -#include "Enhancements/cosmetics/CosmeticsEditor.h" -#include "Enhancements/debugger/actorViewer.h" -#include "Enhancements/debugger/colViewer.h" -#include "Enhancements/debugger/debugSaveEditor.h" -#include "Enhancements/debugger/hookDebugger.h" -#include "Enhancements/debugger/dlViewer.h" -#include "Enhancements/debugger/valueViewer.h" -#include "Enhancements/gameplaystatswindow.h" -#include "Enhancements/randomizer/randomizer_check_tracker.h" -#include "Enhancements/randomizer/randomizer_entrance_tracker.h" -#include "Enhancements/randomizer/randomizer_item_tracker.h" -#include "Enhancements/randomizer/randomizer_settings_window.h" -#include "Enhancements/timesplits/TimeSplits.h" -#include "Enhancements/randomizer/Plandomizer.h" -#include "AboutWindow.h" -#include "SohModals.h" - -#ifdef __cplusplus -extern "C" { -#endif - void enableBetaQuest(); - void disableBetaQuest(); -#ifdef __cplusplus -} -#endif - -namespace SohGui { - void SetupHooks(); - void SetupGuiElements(); - void Draw(); - void Destroy(); - void RegisterPopup(std::string title, std::string message, std::string button1 = "OK", std::string button2 = "", std::function button1callback = nullptr, std::function button2callback = nullptr); - void ShowRandomizerSettingsMenu(); -} - -#endif /* SohGui_hpp */ diff --git a/soh/soh/ImGuiUtils.cpp b/soh/soh/SohGui/ImGuiUtils.cpp similarity index 100% rename from soh/soh/ImGuiUtils.cpp rename to soh/soh/SohGui/ImGuiUtils.cpp diff --git a/soh/soh/ImGuiUtils.h b/soh/soh/SohGui/ImGuiUtils.h similarity index 97% rename from soh/soh/ImGuiUtils.h rename to soh/soh/SohGui/ImGuiUtils.h index 763bae49b..fde8ec6a4 100644 --- a/soh/soh/ImGuiUtils.h +++ b/soh/soh/SohGui/ImGuiUtils.h @@ -7,7 +7,7 @@ #include #include #include -#include "Enhancements/randomizer/randomizerTypes.h" +#include "soh/Enhancements/randomizer/randomizerTypes.h" #include "variables.h" //only for gItemIcons extern "C" { diff --git a/soh/soh/SohGui.cpp b/soh/soh/SohGui/SohGui.cpp similarity index 97% rename from soh/soh/SohGui.cpp rename to soh/soh/SohGui/SohGui.cpp index f91f263c9..84a44b052 100644 --- a/soh/soh/SohGui.cpp +++ b/soh/soh/SohGui/SohGui.cpp @@ -25,15 +25,15 @@ #include "include/global.h" #include "include/z64audio.h" #include "soh/SaveManager.h" -#include "OTRGlobals.h" +#include "soh/OTRGlobals.h" #include "soh/Enhancements/presets.h" #include "soh/resource/type/Skeleton.h" #include "libultraship/libultraship.h" -#include "Enhancements/game-interactor/GameInteractor.h" -#include "Enhancements/cosmetics/authenticGfxPatches.h" -#include "Enhancements/resolution-editor/ResolutionEditor.h" -#include "Enhancements/debugger/MessageViewer.h" +#include "soh/Enhancements/game-interactor/GameInteractor.h" +#include "soh/Enhancements/cosmetics/authenticGfxPatches.h" +#include "soh/Enhancements/resolution-editor/ResolutionEditor.h" +#include "soh/Enhancements/debugger/MessageViewer.h" #include "soh/Notification/Notification.h" #include "soh/Enhancements/TimeDisplay/TimeDisplay.h" diff --git a/soh/soh/SohGui/SohGui.hpp b/soh/soh/SohGui/SohGui.hpp new file mode 100644 index 000000000..4544c13e9 --- /dev/null +++ b/soh/soh/SohGui/SohGui.hpp @@ -0,0 +1,50 @@ +// +// SohGui.hpp +// soh +// +// Created by David Chavez on 24.08.22. +// + +#ifndef SohGui_hpp +#define SohGui_hpp + +#include +#include "SohMenuBar.h" +#include "soh/Enhancements/audio/AudioEditor.h" +#include "soh/Enhancements/controls/InputViewer.h" +#include "soh/Enhancements/cosmetics/CosmeticsEditor.h" +#include "soh/Enhancements/debugger/actorViewer.h" +#include "soh/Enhancements/debugger/colViewer.h" +#include "soh/Enhancements/debugger/debugSaveEditor.h" +#include "soh/Enhancements/debugger/hookDebugger.h" +#include "soh/Enhancements/debugger/dlViewer.h" +#include "soh/Enhancements/debugger/valueViewer.h" +#include "soh/Enhancements/gameplaystatswindow.h" +#include "soh/Enhancements/randomizer/randomizer_check_tracker.h" +#include "soh/Enhancements/randomizer/randomizer_entrance_tracker.h" +#include "soh/Enhancements/randomizer/randomizer_item_tracker.h" +#include "soh/Enhancements/randomizer/randomizer_settings_window.h" +#include "soh/Enhancements/timesplits/TimeSplits.h" +#include "soh/Enhancements/randomizer/Plandomizer.h" +#include "soh/AboutWindow.h" +#include "SohModals.h" + +#ifdef __cplusplus +extern "C" { +#endif + void enableBetaQuest(); + void disableBetaQuest(); +#ifdef __cplusplus +} +#endif + +namespace SohGui { + void SetupHooks(); + void SetupGuiElements(); + void Draw(); + void Destroy(); + void RegisterPopup(std::string title, std::string message, std::string button1 = "OK", std::string button2 = "", std::function button1callback = nullptr, std::function button2callback = nullptr); + void ShowRandomizerSettingsMenu(); +} + +#endif /* SohGui_hpp */ diff --git a/soh/soh/SohMenuBar.cpp b/soh/soh/SohGui/SohMenuBar.cpp similarity index 99% rename from soh/soh/SohMenuBar.cpp rename to soh/soh/SohGui/SohMenuBar.cpp index 250106530..e5e52c71d 100644 --- a/soh/soh/SohMenuBar.cpp +++ b/soh/soh/SohGui/SohMenuBar.cpp @@ -6,45 +6,45 @@ #include "UIWidgets.hpp" #include "include/z64audio.h" #include "graphic/Fast3D/gfx_rendering_api.h" -#include "OTRGlobals.h" -#include "SaveManager.h" +#include "soh/OTRGlobals.h" +#include "soh/SaveManager.h" #include "z64.h" -#include "cvar_prefixes.h" +#include "soh/cvar_prefixes.h" #include "macros.h" #include "functions.h" #include "variables.h" -#include "Enhancements/game-interactor/GameInteractor.h" +#include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/presets.h" #include "soh/Enhancements/mods.h" #include "soh/Notification/Notification.h" -#include "Enhancements/cosmetics/authenticGfxPatches.h" +#include "soh/Enhancements/cosmetics/authenticGfxPatches.h" #ifdef ENABLE_REMOTE_CONTROL #include "soh/Network/CrowdControl/CrowdControl.h" #include "soh/Network/Sail/Sail.h" #endif -#include "Enhancements/audio/AudioEditor.h" -#include "Enhancements/controls/InputViewer.h" -#include "Enhancements/cosmetics/CosmeticsEditor.h" -#include "Enhancements/debugger/actorViewer.h" -#include "Enhancements/debugger/colViewer.h" -#include "Enhancements/debugger/debugSaveEditor.h" -#include "Enhancements/debugger/hookDebugger.h" -#include "Enhancements/debugger/dlViewer.h" -#include "Enhancements/debugger/valueViewer.h" -#include "Enhancements/gameplaystatswindow.h" -#include "Enhancements/debugger/MessageViewer.h" -#include "Enhancements/randomizer/randomizer_check_tracker.h" -#include "Enhancements/randomizer/randomizer_entrance_tracker.h" -#include "Enhancements/randomizer/randomizer_item_tracker.h" -#include "Enhancements/randomizer/randomizer_settings_window.h" -#include "Enhancements/resolution-editor/ResolutionEditor.h" -#include "Enhancements/enemyrandomizer.h" -#include "Enhancements/timesplits/TimeSplits.h" -#include "Enhancements/randomizer/Plandomizer.h" -#include "Enhancements/TimeDisplay/TimeDisplay.h" -#include "AboutWindow.h" +#include "soh/Enhancements/audio/AudioEditor.h" +#include "soh/Enhancements/controls/InputViewer.h" +#include "soh/Enhancements/cosmetics/CosmeticsEditor.h" +#include "soh/Enhancements/debugger/actorViewer.h" +#include "soh/Enhancements/debugger/colViewer.h" +#include "soh/Enhancements/debugger/debugSaveEditor.h" +#include "soh/Enhancements/debugger/hookDebugger.h" +#include "soh/Enhancements/debugger/dlViewer.h" +#include "soh/Enhancements/debugger/valueViewer.h" +#include "soh/Enhancements/gameplaystatswindow.h" +#include "soh/Enhancements/debugger/MessageViewer.h" +#include "soh/Enhancements/randomizer/randomizer_check_tracker.h" +#include "soh/Enhancements/randomizer/randomizer_entrance_tracker.h" +#include "soh/Enhancements/randomizer/randomizer_item_tracker.h" +#include "soh/Enhancements/randomizer/randomizer_settings_window.h" +#include "soh/Enhancements/resolution-editor/ResolutionEditor.h" +#include "soh/Enhancements/enemyrandomizer.h" +#include "soh/Enhancements/timesplits/TimeSplits.h" +#include "soh/Enhancements/randomizer/Plandomizer.h" +#include "soh/Enhancements/TimeDisplay/TimeDisplay.h" +#include "soh/AboutWindow.h" // FA icons are kind of wonky, if they worked how I expected them to the "+ 2.0f" wouldn't be needed, but // they don't work how I expect them to so I added that because it looked good when I eyeballed it diff --git a/soh/soh/SohMenuBar.h b/soh/soh/SohGui/SohMenuBar.h similarity index 100% rename from soh/soh/SohMenuBar.h rename to soh/soh/SohGui/SohMenuBar.h diff --git a/soh/soh/SohModals.cpp b/soh/soh/SohGui/SohModals.cpp similarity index 98% rename from soh/soh/SohModals.cpp rename to soh/soh/SohGui/SohModals.cpp index 576df50f7..642fedf15 100644 --- a/soh/soh/SohModals.cpp +++ b/soh/soh/SohGui/SohModals.cpp @@ -5,7 +5,7 @@ #include #include #include "UIWidgets.hpp" -#include "OTRGlobals.h" +#include "soh/OTRGlobals.h" #include "z64.h" extern "C" PlayState* gPlayState; diff --git a/soh/soh/SohModals.h b/soh/soh/SohGui/SohModals.h similarity index 100% rename from soh/soh/SohModals.h rename to soh/soh/SohGui/SohModals.h diff --git a/soh/soh/UIWidgets.cpp b/soh/soh/SohGui/UIWidgets.cpp similarity index 100% rename from soh/soh/UIWidgets.cpp rename to soh/soh/SohGui/UIWidgets.cpp diff --git a/soh/soh/UIWidgets.hpp b/soh/soh/SohGui/UIWidgets.hpp similarity index 100% rename from soh/soh/UIWidgets.hpp rename to soh/soh/SohGui/UIWidgets.hpp From 7df9641297e8ac5965ed9bfd62dc98fae38d6a09 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 29 Jan 2025 10:12:42 -0500 Subject: [PATCH 04/68] Exclude locations fix (#4969) * Properly check for Excluded Location option. * Remove GetOption overloads, weren't working anyway --- soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp | 2 +- soh/soh/Enhancements/randomizer/context.cpp | 8 -------- soh/soh/Enhancements/randomizer/context.h | 2 -- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp index a21dacaaf..d78f1ef90 100644 --- a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp @@ -159,7 +159,7 @@ static void WriteExcludedLocations() { for (size_t i = 1; i < Rando::Settings::GetInstance()->GetExcludeLocationsOptions().size(); i++) { for (const auto& location : Rando::Settings::GetInstance()->GetExcludeLocationsOptions()[i]) { - if (ctx->GetOption(location->GetKey()).Get() == RO_LOCATION_INCLUDE) { + if (ctx->GetLocationOption(static_cast(location->GetKey())).Get() == RO_LOCATION_INCLUDE) { continue; } diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 3e846c4b7..79a60cc70 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -438,14 +438,6 @@ OptionValue& Context::GetOption(const RandomizerSettingKey key) { return mOptions[key]; } -OptionValue& Context::GetOption(const RandomizerTrick key) { - return mTrickOptions[key]; -} - -OptionValue& Context::GetOption(const RandomizerCheck key) { - return itemLocationTable[key].GetExcludedOption(); -} - OptionValue& Context::GetTrickOption(const RandomizerTrick key) { return mTrickOptions[key]; } diff --git a/soh/soh/Enhancements/randomizer/context.h b/soh/soh/Enhancements/randomizer/context.h index 0fbb18748..cc71609eb 100644 --- a/soh/soh/Enhancements/randomizer/context.h +++ b/soh/soh/Enhancements/randomizer/context.h @@ -91,8 +91,6 @@ class Context { TrialInfo* GetTrial(TrialKey key) const; static Sprite* GetSeedTexture(uint8_t index); OptionValue& GetOption(RandomizerSettingKey key); - OptionValue& GetOption(RandomizerTrick key); - OptionValue& GetOption(RandomizerCheck key); OptionValue& GetTrickOption(RandomizerTrick key); OptionValue& GetLocationOption(RandomizerCheck key); From 1744f1fc1842cc1a440138f88849e0fde6048f8a Mon Sep 17 00:00:00 2001 From: Malkierian Date: Thu, 30 Jan 2025 02:37:17 -0700 Subject: [PATCH 05/68] Set Item Tracker Total Checks window to only scale text if Item Tracker window type is Floating. (#4963) Increase default width to account for window type title text. --- .../Enhancements/randomizer/randomizer_item_tracker.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index eb0b1aafd..b2343b000 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -921,7 +921,11 @@ void DrawTotalChecks() { uint16_t totalChecksGotten = CheckTracker::GetTotalChecksGotten(); ImGui::BeginGroup(); - ImGui::SetWindowFontScale(2.5); + if (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_FLOATING) { + ImGui::SetWindowFontScale(2.5); + } else { + ImGui::SetWindowFontScale(1); + } ImGui::Text("Checks: %d/%d", totalChecksGotten, totalChecks); ImGui::EndGroup(); } @@ -1340,7 +1344,7 @@ void ItemTrackerWindow::DrawElement() { if (CVarGetInteger("gTrackers.ItemTracker.TotalChecks.DisplayType", SECTION_DISPLAY_MINIMAL_HIDDEN) == SECTION_DISPLAY_MINIMAL_SEPARATE) { - ImGui::SetNextWindowSize(ImVec2(400, 300), ImGuiCond_FirstUseEver); + ImGui::SetNextWindowSize(ImVec2(450, 300), ImGuiCond_FirstUseEver); BeginFloatingWindows("Total Checks"); DrawTotalChecks(); EndFloatingWindows(); From 133825c1cde0400a0dba5108c2145682aa73c89c Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Fri, 31 Jan 2025 10:41:03 -0800 Subject: [PATCH 06/68] update to latest LUS main (#4976) --- libultraship | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libultraship b/libultraship index 5341b0172..e641b3777 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 5341b017254a186da3ffe6d681d4e293769f23f4 +Subproject commit e641b3777cbefb18a9cf4b95353d650b3a2abf65 From b62808dc2dae5e975eec6eb892dae41071a4e641 Mon Sep 17 00:00:00 2001 From: Malkierian Date: Sat, 1 Feb 2025 19:38:22 -0700 Subject: [PATCH 07/68] Prevent adding Gerudo Fortress Keyring when Keyrings are set to off. (#4981) --- soh/soh/Enhancements/randomizer/3drando/item_pool.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index ff41c204b..a2699cb65 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -1153,7 +1153,7 @@ void GenerateItemPool() { ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); } else { //Only add key ring if 4 Fortress keys necessary - if (ctx->GetOption(RSK_KEYRINGS_GERUDO_FORTRESS)) { + if (ctx->GetOption(RSK_KEYRINGS_GERUDO_FORTRESS) && ctx->GetOption(RSK_KEYRINGS)) { AddItemToMainPool(RG_GERUDO_FORTRESS_KEY_RING); //Add junk to make up for missing keys for (uint8_t i = 0; i < 3; i++) { @@ -1164,7 +1164,7 @@ void GenerateItemPool() { } } if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { - if (ctx->GetOption(RSK_KEYRINGS_GERUDO_FORTRESS) && ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL)) { + if (ctx->GetOption(RSK_KEYRINGS_GERUDO_FORTRESS) && ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && ctx->GetOption(RSK_KEYRINGS) ) { AddItemToPool(PendingJunkPool, RG_GERUDO_FORTRESS_KEY_RING); } else { AddItemToPool(PendingJunkPool, RG_GERUDO_FORTRESS_SMALL_KEY); From f4604673e02f223fbc5af5677d17a36eb44d9efd Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Sat, 1 Feb 2025 19:11:56 -0800 Subject: [PATCH 08/68] clean up/fix mq dungeon and required trial parsing logic (#4979) --- soh/soh/Enhancements/randomizer/dungeon.cpp | 17 ++++++++--------- soh/soh/Enhancements/randomizer/trial.cpp | 14 +++++++------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index d83bc9251..423c8666e 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -1419,17 +1419,16 @@ std::array Dungeons::GetDungeonList() { size_t Dungeons::GetDungeonListSize() const { return dungeonList.size(); } + void Dungeons::ParseJson(nlohmann::json spoilerFileJson) { nlohmann::json mqDungeonsJson = spoilerFileJson["masterQuestDungeons"]; - for (auto it = mqDungeonsJson.begin(); it != mqDungeonsJson.end(); ++it) { - std::string dungeonName = it.value().get(); - for (auto& dungeon : dungeonList) { - if (dungeon.GetName() == dungeonName) { - dungeon.SetMQ(); - } else { - dungeon.ClearMQ(); - } + + for (auto& dungeon : dungeonList) { + dungeon.ClearMQ(); + + if (std::find(mqDungeonsJson.begin(), mqDungeonsJson.end(), dungeon.GetName()) != mqDungeonsJson.end()) { + dungeon.SetMQ(); } } } -} // namespace Rando \ No newline at end of file +} // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/trial.cpp b/soh/soh/Enhancements/randomizer/trial.cpp index 1110d37d8..a9b1f3fb3 100644 --- a/soh/soh/Enhancements/randomizer/trial.cpp +++ b/soh/soh/Enhancements/randomizer/trial.cpp @@ -71,13 +71,13 @@ size_t Trials::GetTrialListSize() const { void Trials::ParseJson(nlohmann::json spoilerFileJson) { nlohmann::json trialsJson = spoilerFileJson["requiredTrials"]; - for (auto it = trialsJson.begin(); it != trialsJson.end(); ++it) { - std::string trialName = it.value().get(); - for (auto& trial : mTrials) { - if (trial.GetName() == trialName) { + + for (auto& trial : mTrials) { + trial.SetAsSkipped(); + + for (auto nameInLang : trial.GetName().GetAllMessages()) { + if (std::find(trialsJson.begin(), trialsJson.end(), nameInLang) != trialsJson.end()) { trial.SetAsRequired(); - } else { - trial.SetAsSkipped(); } } } @@ -91,4 +91,4 @@ std::unordered_map Trials::GetAllTrialHintHeys( return output; } -} // namespace Rando \ No newline at end of file +} // namespace Rando From ac9b8c2e87db604e826eb22609ea41989c10fc73 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Sat, 1 Feb 2025 23:33:04 -0800 Subject: [PATCH 09/68] better soft reset (#4984) --- soh/include/variables.h | 1 + soh/soh/Enhancements/ResetGameplayFrames.cpp | 30 ++++++++++++++++++++ soh/soh/Enhancements/debugconsole.cpp | 9 +++--- soh/src/code/game.c | 4 +++ soh/src/code/graph.c | 19 ++++++------- soh/src/code/z_play.c | 5 ---- 6 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 soh/soh/Enhancements/ResetGameplayFrames.cpp diff --git a/soh/include/variables.h b/soh/include/variables.h index f5486f761..e3408eef6 100644 --- a/soh/include/variables.h +++ b/soh/include/variables.h @@ -247,6 +247,7 @@ extern "C" extern GfxPool gGfxPools[2]; // 0x24820 bytes extern u8* gAudioHeap; extern u8* gSystemHeap; + extern GameState* gGameState; #ifdef __cplusplus }; diff --git a/soh/soh/Enhancements/ResetGameplayFrames.cpp b/soh/soh/Enhancements/ResetGameplayFrames.cpp new file mode 100644 index 000000000..3b234dbe5 --- /dev/null +++ b/soh/soh/Enhancements/ResetGameplayFrames.cpp @@ -0,0 +1,30 @@ +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/ShipInit.hpp" + +extern "C" { +#include "functions.h" +#include "variables.h" +} + +void ResetGameplayFramesOnSoftReset() { + PlayState* play = (PlayState*)gGameState; + + if (gGameState->init == TitleSetup_Init) { + play->gameplayFrames = 0; + } +} + +void ResetGameplayFramesOnTitleScreenExit() { + PlayState* play = (PlayState*)gGameState; + + if (gSaveContext.fileNum == 0xFF) { + play->gameplayFrames = 0; + } +} + +void RegisterResetGameplayFrames() { + COND_HOOK(OnPlayDestroy, true, ResetGameplayFramesOnSoftReset); + COND_HOOK(OnPlayDestroy, true, ResetGameplayFramesOnTitleScreenExit); +} + +static RegisterShipInitFunc initFunc(RegisterResetGameplayFrames); diff --git a/soh/soh/Enhancements/debugconsole.cpp b/soh/soh/Enhancements/debugconsole.cpp index 9ef0fe2ab..7037f9b0a 100644 --- a/soh/soh/Enhancements/debugconsole.cpp +++ b/soh/soh/Enhancements/debugconsole.cpp @@ -204,14 +204,13 @@ static bool SetPosHandler(std::shared_ptr Console, const std::vec } static bool ResetHandler(std::shared_ptr Console, std::vector args, std::string* output) { - if (gPlayState == nullptr) { - ERROR_MESSAGE("PlayState == nullptr"); + if (gGameState == nullptr) { + ERROR_MESSAGE("gGameState == nullptr"); return 1; } - gPlayState->gameplayFrames = 0; - SET_NEXT_GAMESTATE(&gPlayState->state, TitleSetup_Init, GameState); - gPlayState->state.running = false; + SET_NEXT_GAMESTATE(gGameState, TitleSetup_Init, GameState); + gGameState->running = false; GameInteractor::Instance->ExecuteHooks(gSaveContext.fileNum); return 0; } diff --git a/soh/src/code/game.c b/soh/src/code/game.c index d7524009b..7e1db9c17 100644 --- a/soh/src/code/game.c +++ b/soh/src/code/game.c @@ -14,6 +14,10 @@ ViMode sViMode; FaultClient sGameFaultClient; u16 sLastButtonPressed; +// #region SOH [General] Making gGameState available +GameState* gGameState; +// #endregion + // Forward declared, because this in a C++ header. int gfx_create_framebuffer(uint32_t width, uint32_t height, uint32_t native_width, uint32_t native_height, uint8_t resize); void gfx_texture_cache_clear(); diff --git a/soh/src/code/graph.c b/soh/src/code/graph.c index f691c2619..c55417d93 100644 --- a/soh/src/code/graph.c +++ b/soh/src/code/graph.c @@ -18,7 +18,6 @@ // SOH [Port] Game State management for our render loop static struct RunFrameContext { GraphicsContext gfxCtx; - GameState* gameState; GameStateOverlay* nextOvl; GameStateOverlay* ovl; int state; @@ -487,28 +486,28 @@ static void RunFrame() size = runFrameContext.ovl->instanceSize; osSyncPrintf("クラスサイズ=%dバイト\n", size); // "Class size = %d bytes" - runFrameContext.gameState = SYSTEM_ARENA_MALLOC_DEBUG(size); + gGameState = SYSTEM_ARENA_MALLOC_DEBUG(size); - if (!runFrameContext.gameState) + if (!gGameState) { osSyncPrintf("確保失敗\n"); // "Failure to secure" snprintf(faultMsg, sizeof(faultMsg), "CLASS SIZE= %d bytes", size); Fault_AddHungupAndCrashImpl("GAME CLASS MALLOC FAILED", faultMsg); } - GameState_Init(runFrameContext.gameState, runFrameContext.ovl->init, &runFrameContext.gfxCtx); + GameState_Init(gGameState, runFrameContext.ovl->init, &runFrameContext.gfxCtx); // Setup the normal skybox once before entering any game states to avoid the 0xabababab crash. // The crash is due to certain skyboxes not loading all the data they need from Skybox_Setup. if (!hasSetupSkybox) { - PlayState* play = (PlayState*)runFrameContext.gameState; + PlayState* play = (PlayState*)gGameState; Skybox_Setup(play, &play->skyboxCtx, SKYBOX_NORMAL_SKY); hasSetupSkybox = true; } uint64_t freq = GetFrequency(); - while (GameState_IsRunning(runFrameContext.gameState)) + while (GameState_IsRunning(gGameState)) { //uint64_t ticksA, ticksB; //ticksA = GetPerfCounter(); @@ -517,7 +516,7 @@ static void RunFrame() PadMgr_ThreadEntry(&gPadMgr); - Graph_Update(&runFrameContext.gfxCtx, runFrameContext.gameState); + Graph_Update(&runFrameContext.gfxCtx, gGameState); //ticksB = GetPerfCounter(); if (GfxDebuggerIsDebuggingRequested()) { @@ -535,9 +534,9 @@ static void RunFrame() nextFrame:; } - runFrameContext.nextOvl = Graph_GetNextGameState(runFrameContext.gameState); - GameState_Destroy(runFrameContext.gameState); - SYSTEM_ARENA_FREE_DEBUG(runFrameContext.gameState); + runFrameContext.nextOvl = Graph_GetNextGameState(gGameState); + GameState_Destroy(gGameState); + SYSTEM_ARENA_FREE_DEBUG(gGameState); Overlay_FreeGameState(runFrameContext.ovl); } Graph_Destroy(&runFrameContext.gfxCtx); diff --git a/soh/src/code/z_play.c b/soh/src/code/z_play.c index 2b4743417..8d35a33c4 100644 --- a/soh/src/code/z_play.c +++ b/soh/src/code/z_play.c @@ -205,11 +205,6 @@ void Play_Destroy(GameState* thisx) { GameInteractor_ExecuteOnPlayDestroy(); - // Only initialize the frame counter when exiting the title screen - if (gSaveContext.fileNum == 0xFF) { - play->gameplayFrames = 0; - } - play->state.gfxCtx->callback = NULL; play->state.gfxCtx->callbackParam = 0; From 33d7b173fa9c3a30b1ef20136fcc3de31ade35d3 Mon Sep 17 00:00:00 2001 From: Xeokn <74164454+Xeokn@users.noreply.github.com> Date: Mon, 3 Feb 2025 08:00:59 +1000 Subject: [PATCH 10/68] Additional Sail commands (#4970) * Additional Sail Commands. Adds "SpawnEnemyWithOffset" and "SpawnActor" to Sail Functions. * Small Corrections Indentation my beloved --- .../game-interactor/GameInteractionEffect.cpp | 24 +++++++++++++++++++ .../game-interactor/GameInteractionEffect.h | 8 +++++++ soh/soh/Network/Sail/Sail.cpp | 14 +++++++++++ 3 files changed, 46 insertions(+) diff --git a/soh/soh/Enhancements/game-interactor/GameInteractionEffect.cpp b/soh/soh/Enhancements/game-interactor/GameInteractionEffect.cpp index a0469d0c3..913496159 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractionEffect.cpp +++ b/soh/soh/Enhancements/game-interactor/GameInteractionEffect.cpp @@ -640,4 +640,28 @@ namespace GameInteractionEffect { void SlipperyFloor::_Remove() { GameInteractor::State::SlipperyFloorActive = 0; } + + // MARK: - SpawnEnemyWithOffset + GameInteractionEffectQueryResult SpawnEnemyWithOffset::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } + return GameInteractor::RawAction::SpawnEnemyWithOffset(parameters[0], parameters[1]); + } + + void SpawnEnemyWithOffset::_Apply() { + GameInteractor::RawAction::SpawnEnemyWithOffset(parameters[0], parameters[1]); + } + + // MARK: - SpawnActor + GameInteractionEffectQueryResult SpawnActor::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } + return GameInteractor::RawAction::SpawnActor(parameters[0], parameters[1]); + } + + void SpawnActor::_Apply() { + GameInteractor::RawAction::SpawnActor(parameters[0], parameters[1]); + } } diff --git a/soh/soh/Enhancements/game-interactor/GameInteractionEffect.h b/soh/soh/Enhancements/game-interactor/GameInteractionEffect.h index 5e28024b6..2a29022d5 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractionEffect.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractionEffect.h @@ -262,6 +262,14 @@ namespace GameInteractionEffect { void _Apply() override; void _Remove() override; }; + class SpawnEnemyWithOffset: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + }; + class SpawnActor: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + }; } #endif /* __cplusplus */ diff --git a/soh/soh/Network/Sail/Sail.cpp b/soh/soh/Network/Sail/Sail.cpp index 1c27e1d72..f9ae7b313 100644 --- a/soh/soh/Network/Sail/Sail.cpp +++ b/soh/soh/Network/Sail/Sail.cpp @@ -320,6 +320,20 @@ GameInteractionEffectBase* Sail::EffectFromJson(nlohmann::json payload) { return new GameInteractionEffect::PlayerInvincibility(); } else if (name == "SlipperyFloor") { return new GameInteractionEffect::SlipperyFloor(); + } else if (name == "SpawnEnemyWithOffset") { + auto effect = new GameInteractionEffect::SpawnEnemyWithOffset(); + if (payload.contains("parameters")) { + effect->parameters[0] = payload["parameters"][0].get(); + effect->parameters[1] = payload["parameters"][1].get(); + } + return effect; + } else if (name == "SpawnActor") { + auto effect = new GameInteractionEffect::SpawnActor(); + if (payload.contains("parameters")) { + effect->parameters[0] = payload["parameters"][0].get(); + effect->parameters[1] = payload["parameters"][1].get(); + } + return effect; } else { SPDLOG_INFO("[Sail] Unknown effect name: {}", name); return nullptr; From e5ddcce7f25b64bfdba385c5a282c83332d647e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 3 Feb 2025 09:46:59 +0000 Subject: [PATCH 11/68] use CanKillEnemy more (#4867) * use CanKillEnemy more reviewed instances of RG_KOKIRI_SWORD in logic * kokiri does not damage spikes * confirmed hammer works vs dodongos * 3 --- .../location_access/dungeons/dodongos_cavern.cpp | 8 ++++---- .../location_access/dungeons/fire_temple.cpp | 2 +- .../location_access/dungeons/forest_temple.cpp | 8 ++++---- .../dungeons/gerudo_training_ground.cpp | 15 ++++++--------- .../location_access/dungeons/spirit_temple.cpp | 14 +++++++------- .../location_access/dungeons/water_temple.cpp | 12 ++++++------ soh/soh/Enhancements/randomizer/logic.cpp | 5 ++++- soh/soh/Enhancements/randomizer/randomizerTypes.h | 1 + 8 files changed, 33 insertions(+), 32 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp index 189d1c867..d6798523b 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp @@ -88,8 +88,8 @@ void RegionTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, true), }, { //Exits - Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->HasExplosives();});}), - Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->HasExplosives();});}), + Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}), + Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}), }); areaTable[RR_DODONGOS_CAVERN_DODONGO_ROOM] = Region("Dodongos Cavern Dodongo Room", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { @@ -186,8 +186,8 @@ void RegionTable_Init_DodongosCavern() { }, { //Exits Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->HasExplosives();});}), - Entrance(RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->HasExplosives();});}), + Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}), + Entrance(RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}), }); areaTable[RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM] = Region("Dodongos Cavern Second Slingshot Room", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp index 65efe4cfe..429d84667 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp @@ -43,7 +43,7 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_LOOP_ENEMIES] = Region("Fire Temple Loop Enemies", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 8) || !logic->IsKeysanity;}), - Entrance(RR_FIRE_TEMPLE_LOOP_TILES, []{return Here(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER);});}), + Entrance(RR_FIRE_TEMPLE_LOOP_TILES, []{return Here(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return logic->CanKillEnemy(RE_TORCH_SLUG) && logic->CanKillEnemy(RE_FIRE_KEESE);});}), }); areaTable[RR_FIRE_TEMPLE_LOOP_TILES] = Region("Fire Temple Loop Tiles", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp index 241a82064..87f738b90 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp @@ -66,7 +66,7 @@ void RegionTable_Init_ForestTemple() { EventAccess(&logic->FairyPot, []{return true;}), }, { //Locations - LOCATION(RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST, logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER)), + LOCATION(RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)), LOCATION(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1, logic->CanBreakPots()), LOCATION(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, logic->CanBreakPots()), }, { @@ -214,15 +214,15 @@ void RegionTable_Init_ForestTemple() { areaTable[RR_FOREST_TEMPLE_UPPER_STALFOS] = Region("Forest Temple Upper Stalfos", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FOREST_TEMPLE_BOW_CHEST, logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER)), + LOCATION(RC_FOREST_TEMPLE_BOW_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)), LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1, logic->CanBreakPots()), LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2, logic->CanBreakPots()), LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3, logic->CanBreakPots()), LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4, logic->CanBreakPots()), }, { //Exits - Entrance(RR_FOREST_TEMPLE_RED_POE_ROOM, []{return logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER);}), - Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, []{return logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER);}), + Entrance(RR_FOREST_TEMPLE_RED_POE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3);}), + Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3);}), }); areaTable[RR_FOREST_TEMPLE_BLUE_POE_ROOM] = Region("Forest Temple Blue Poe Room", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, { diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp index b2e09a8c2..f0b9de5c3 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp @@ -19,16 +19,16 @@ void RegionTable_Init_GerudoTrainingGround() { //Locations LOCATION(RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)), - LOCATION(RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)), - LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, logic->HasExplosives() && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))), + LOCATION(RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true)), + LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true)), LOCATION(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, true), LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}), - Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && (logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT));}), - Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && logic->HasExplosives();});}), + Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true) && (logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT));}), + Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true);});}), Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, []{return true;}), }); @@ -92,7 +92,7 @@ void RegionTable_Init_GerudoTrainingGround() { areaTable[RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM] = Region("Gerudo Training Ground Heavy Block Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, logic->CanJumpslashExceptHammer()), + LOCATION(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_WOLFOS, ED_CLOSE, true, 4, true)), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, []{return (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)));}), @@ -230,10 +230,7 @@ void RegionTable_Init_GerudoTrainingGround() { //Events EventAccess(&logic->MQGTGRightSideSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}), EventAccess(&logic->GTGPlatformSilverRupees, []{return logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_HOVER_BOOTS);}), - }, { - //Locations - LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, logic->IsAdult && (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))), - }, { + }, {}, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_FIRE_ARROWS);}), //the fire bubble here is a jerk if you are aiming for the nearest hook platform, you have to aim to the right hand side with hook to dodge it diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp index 8b8b4d465..3d8e26cd6 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp @@ -31,13 +31,13 @@ void RegionTable_Init_SpiritTemple() { EventAccess(&logic->NutCrate, []{return true;}), }, { //Locations - LOCATION(RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), - LOCATION(RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))), - LOCATION(RC_SPIRIT_TEMPLE_GS_METAL_FENCE, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), - LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_1, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), - LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_2, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), - LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_3, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), - LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_4, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), + LOCATION(RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), + LOCATION(RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))), + LOCATION(RC_SPIRIT_TEMPLE_GS_METAL_FENCE, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), + LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_1, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), + LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_2, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), + LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_3, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), + LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_4, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp index ab206f6ef..318a5eb64 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp @@ -54,10 +54,10 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MAP_ROOM] = Region("Water Temple Map Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MAP_CHEST, (logic->CanUse(RG_MAGIC_SINGLE) && logic->CanUse(RG_KOKIRI_SWORD)) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_WATER_TEMPLE_MAP_CHEST, logic->CanKillEnemy(RE_SPIKE, ED_CLOSE, true, 3)), }, { //Exits - Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return (logic->CanUse(RG_MAGIC_SINGLE) && logic->CanUse(RG_KOKIRI_SWORD)) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_HOOKSHOT);}), + Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return logic->CanKillEnemy(RE_SPIKE, ED_CLOSE, true, 3);}), }); areaTable[RR_WATER_TEMPLE_CRACKED_WALL] = Region("Water Temple Cracked Wall", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { @@ -70,10 +70,10 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_TORCH_ROOM] = Region("Water Temple Torch Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_TORCHES_CHEST, (logic->CanUse(RG_MAGIC_SINGLE) && logic->CanUse(RG_KOKIRI_SWORD)) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_WATER_TEMPLE_TORCHES_CHEST, logic->CanKillEnemy(RE_SHELL_BLADE, ED_CLOSE, true, 3)), }, { //Exits - Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return (logic->CanUse(RG_MAGIC_SINGLE) && logic->CanUse(RG_KOKIRI_SWORD)) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_HOOKSHOT);}), + Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return logic->CanKillEnemy(RE_SHELL_BLADE, ED_CLOSE, true, 3);}), }); areaTable[RR_WATER_TEMPLE_NORTH_LOWER] = Region("Water Temple North Lower", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { @@ -238,8 +238,8 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_DARK_LINK_ROOM] = Region("Water Temple Dark Link Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits - Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, []{return logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD);}), - Entrance(RR_WATER_TEMPLE_LONGSHOT_ROOM, []{return logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD);}), + Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, []{return logic->CanKillEnemy(RE_DARK_LINK);}), + Entrance(RR_WATER_TEMPLE_LONGSHOT_ROOM, []{return logic->CanKillEnemy(RE_DARK_LINK);}), }); areaTable[RR_WATER_TEMPLE_LONGSHOT_ROOM] = Region("Water Temple Longshot Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 1ea19d3ad..fa9c8d8e5 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -527,7 +527,7 @@ namespace Rando { } return killed; case RE_DODONGO: - return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || (quantity <= 5 && CanUse(RG_STICKS)) || HasExplosives() || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); + return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || (quantity <= 5 && CanUse(RG_STICKS)) || HasExplosives() || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); case RE_LIZALFOS: return CanJumpslash() || HasExplosives() || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); case RE_KEESE: @@ -637,6 +637,8 @@ namespace Rando { return CanJumpslash() || HasExplosives() || CanUse(RG_FAIRY_BOW); case RE_FREEZARD: return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_STICKS) || HasExplosives() || CanUse(RG_HOOKSHOT) || CanUse(RG_DINS_FIRE) || CanUse(RG_FIRE_ARROWS); + case RE_SHELL_BLADE: + return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_STICKS) || HasExplosives() || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_DINS_FIRE); case RE_SPIKE: return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_STICKS) || HasExplosives() || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_DINS_FIRE); case RE_STINGER: @@ -794,6 +796,7 @@ namespace Rando { case RE_ARMOS: case RE_GREEN_BUBBLE: case RE_FREEZARD: + case RE_SHELL_BLADE: case RE_SPIKE: case RE_BIG_OCTO: case RE_GIBDO: diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 66128d50f..0561ce54d 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5724,6 +5724,7 @@ typedef enum { RE_DINOLFOS, RE_TORCH_SLUG, RE_FREEZARD, + RE_SHELL_BLADE, RE_SPIKE, RE_WHITE_WOLFOS, RE_STINGER, From e7e02735b09ab2cfbd678e241b77d13461131dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 3 Feb 2025 09:57:35 +0000 Subject: [PATCH 12/68] rando: vanilla dungeon rewards (#4836) * rando: vanilla dungeon rewards * gift from rauru is dungeon location, not pocket * missing apostrophe in preset description * neither pocket nor gift should be listed in dungeonRewardLocations --- soh/soh/Enhancements/presets.h | 4 +-- .../Enhancements/randomizer/3drando/fill.cpp | 35 +++++++------------ .../Enhancements/randomizer/3drando/hints.cpp | 18 ++++++---- soh/soh/Enhancements/randomizer/context.cpp | 3 ++ .../Enhancements/randomizer/location_list.cpp | 4 +-- .../randomizer/option_descriptions.cpp | 1 + .../Enhancements/randomizer/randomizerTypes.h | 1 + soh/soh/Enhancements/randomizer/settings.cpp | 2 +- 8 files changed, 33 insertions(+), 35 deletions(-) diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index 31df92831..b7b7100b9 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -1403,7 +1403,7 @@ const std::map presetTypes = { "Spock Race", "Race preset used for the official Ship of Harkinian race on June 3rd 2023. The following settings are notable:\n" \ "- Rainbow Bridge is set to Greg\n" \ - "- Ganons Boss Key is 5 dungeon rewards\n" \ + "- Ganon's Boss Key is 5 dungeon rewards\n" \ "- Shopsanity and Scrubsanity enabled\n" \ "- All locations reachable is off\n", \ spockRacePresetEntries, @@ -1413,7 +1413,7 @@ const std::map presetTypes = { "No Logic Race preset used for official Ship of Harkinian No Logic races. The following settings are " "notable:\n" "- Rainbow Bridge is set to Greg\n" - "- Ganons Boss Key is 5 dungeon rewards\n" + "- Ganon's Boss Key is 5 dungeon rewards\n" "- Shopsanity and Scrubsanity enabled\n" "- All locations reachable is off\n", spockRaceNoLogicPresetEntries, diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index 234bd6a8e..9c2bff044 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -900,7 +900,6 @@ static void AssumedFill(const std::vector& items, const std::vect //setting, or randomize one dungeon reward to Link's Pocket if that setting is on static void RandomizeDungeonRewards() { auto ctx = Rando::Context::GetInstance(); - std::array rDungeonRewardOverrides{}; //quest item bit mask of each stone/medallion for the savefile // static constexpr std::array bitMaskTable = { // 0x00040000, //Kokiri Emerald @@ -916,34 +915,24 @@ static void RandomizeDungeonRewards() { int baseOffset = Rando::StaticData::RetrieveItem(RG_KOKIRI_EMERALD).GetItemID(); //End of Dungeons includes Link's Pocket - if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) { + if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON) || ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_VANILLA)) { //get stones and medallions std::vector rewards = FilterAndEraseFromPool(ItemPool, [](const auto i) {return Rando::StaticData::RetrieveItem(i).GetItemType() == ITEMTYPE_DUNGEONREWARD;}); - // If there are less than 9 dungeon rewards, prioritize the actual dungeons - // for placement instead of Link's Pocket - if (rewards.size() < 9) { - ctx->PlaceItemInLocation(RC_LINKS_POCKET, RG_GREEN_RUPEE); - } - - if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_VANILLA)) { //Place dungeon rewards in vanilla locations + if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_VANILLA) || ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_VANILLA)) { // Place dungeon rewards in vanilla locations for (RandomizerCheck loc : Rando::StaticData::dungeonRewardLocations) { ctx->GetItemLocation(loc)->PlaceVanillaItem(); } - } else { //Randomize dungeon rewards with assumed fill - AssumedFill(rewards, Rando::StaticData::dungeonRewardLocations); - } - - for (size_t i = 0; i < Rando::StaticData::dungeonRewardLocations.size(); i++) { - const auto index = ctx->GetItemLocation(Rando::StaticData::dungeonRewardLocations[i])->GetPlacedItem().GetItemID() - baseOffset; - rDungeonRewardOverrides[i] = index; - - //set the player's dungeon reward on file creation instead of pushing it to them at the start. - //This is done mainly because players are already familiar with seeing their dungeon reward - //before opening up their file - // if (i == Rando::StaticData::dungeonRewardLocations.size()-1) { - // LinksPocketRewardBitMask = bitMaskTable[index]; - // } + ctx->GetItemLocation(RC_GIFT_FROM_RAURU)->PlaceVanillaItem(); + } else { // Randomize dungeon rewards with assumed fill + std::vector rewardLocations(Rando::StaticData::dungeonRewardLocations); + // If there are less than 9 dungeon rewards, prioritize actual dungeons for placement + if (rewards.size() < 9) { + ctx->PlaceItemInLocation(RC_LINKS_POCKET, RG_GREEN_RUPEE); + } else { + rewardLocations.push_back(RC_LINKS_POCKET); + } + AssumedFill(rewards, rewardLocations); } } else if (ctx->GetOption(RSK_LINKS_POCKET).Is(RO_LINKS_POCKET_DUNGEON_REWARD)) { //get 1 stone/medallion diff --git a/soh/soh/Enhancements/randomizer/3drando/hints.cpp b/soh/soh/Enhancements/randomizer/3drando/hints.cpp index 634c2ca56..b9e9f4688 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hints.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hints.cpp @@ -698,8 +698,8 @@ void CreateChildAltarHint() { if (!ctx->GetHint(RH_ALTAR_CHILD)->IsEnabled()){ std::vector stoneLocs = {}; if (ctx->GetOption(RSK_TOT_ALTAR_HINT)) { - //force marking the rewards as hinted if they are at the end of dungeons as they can be inffered - if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)){ + //force marking the rewards as hinted if they are at the end of dungeons as they can be inferred + if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON) || ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_VANILLA)) { stoneLocs = FindItemsAndMarkHinted({RG_KOKIRI_EMERALD, RG_GORON_RUBY, RG_ZORA_SAPPHIRE}, {}); } else { stoneLocs = FindItemsAndMarkHinted({RG_KOKIRI_EMERALD, RG_GORON_RUBY, RG_ZORA_SAPPHIRE}, {RC_ALTAR_HINT_CHILD}); @@ -707,7 +707,9 @@ void CreateChildAltarHint() { } std::vector stoneAreas = {}; for (auto loc : stoneLocs){ - stoneAreas.push_back(ctx->GetItemLocation(loc)->GetRandomArea()); + if (loc != RC_UNKNOWN_CHECK) { + stoneAreas.push_back(ctx->GetItemLocation(loc)->GetRandomArea()); + } } ctx->AddHint(RH_ALTAR_CHILD, Hint(RH_ALTAR_CHILD, HINT_TYPE_ALTAR_CHILD, {}, stoneLocs, stoneAreas)); } @@ -718,9 +720,9 @@ void CreateAdultAltarHint() { if (!ctx->GetHint(RH_ALTAR_ADULT)->IsEnabled()){ std::vector medallionLocs = {}; if (ctx->GetOption(RSK_TOT_ALTAR_HINT)) { - //force marking the rewards as hinted if they are at the end of dungeons as they can be inffered - if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)){ - medallionLocs = FindItemsAndMarkHinted({RG_LIGHT_MEDALLION, RG_FOREST_MEDALLION, RG_FIRE_MEDALLION, RG_WATER_MEDALLION, RG_SPIRIT_MEDALLION, RG_SHADOW_MEDALLION}, + //force marking the rewards as hinted if they are at the end of dungeons as they can be inferred + if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON) || ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_VANILLA)) { + medallionLocs = FindItemsAndMarkHinted({RG_LIGHT_MEDALLION, RG_FOREST_MEDALLION, RG_FIRE_MEDALLION, RG_WATER_MEDALLION, RG_SPIRIT_MEDALLION, RG_SHADOW_MEDALLION}, {}); } else { medallionLocs = FindItemsAndMarkHinted({RG_LIGHT_MEDALLION, RG_FOREST_MEDALLION, RG_FIRE_MEDALLION, RG_WATER_MEDALLION, RG_SPIRIT_MEDALLION, RG_SHADOW_MEDALLION}, @@ -729,7 +731,9 @@ void CreateAdultAltarHint() { } std::vector medallionAreas = {}; for (auto loc : medallionLocs){ - medallionAreas.push_back(ctx->GetItemLocation(loc)->GetRandomArea()); + if (loc != RC_UNKNOWN_CHECK) { + medallionAreas.push_back(ctx->GetItemLocation(loc)->GetRandomArea()); + } } ctx->AddHint(RH_ALTAR_ADULT, Hint(RH_ALTAR_ADULT, HINT_TYPE_ALTAR_ADULT, {}, medallionLocs, medallionAreas)); } diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 79a60cc70..cd4914aaf 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -214,6 +214,9 @@ void Context::ItemReset() { for (const RandomizerCheck il : StaticData::dungeonRewardLocations) { GetItemLocation(il)->ResetVariables(); } + + GetItemLocation(RC_GIFT_FROM_RAURU)->ResetVariables(); + GetItemLocation(RC_LINKS_POCKET)->ResetVariables(); } void Context::LocationReset() { diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 54c1d8f81..1fe52b897 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -8,8 +8,8 @@ std::multimap, RandomizerCheck> Rando::StaticData::Che std::vector Rando::StaticData::dungeonRewardLocations = { // Bosses - RC_QUEEN_GOHMA, RC_KING_DODONGO, RC_BARINADE, RC_PHANTOM_GANON, RC_VOLVAGIA, - RC_MORPHA, RC_TWINROVA, RC_BONGO_BONGO, RC_LINKS_POCKET, + RC_QUEEN_GOHMA, RC_KING_DODONGO, RC_BARINADE, + RC_PHANTOM_GANON, RC_VOLVAGIA, RC_MORPHA, RC_TWINROVA, RC_BONGO_BONGO, }; using namespace Rando; diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index 8abdd2634..a3184765f 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -451,6 +451,7 @@ void Settings::CreateOptionDescriptions() { "Shuffle fairy locations."; mOptionDescriptions[RSK_SHUFFLE_DUNGEON_REWARDS] = "Shuffles the location of Spiritual Stones and medallions.\n" + "Vanilla - Spiritual Stones and medallions will be given from their respective boss.\n" "\n" "End of dungeons - Spiritual Stones and medallions will be given as rewards " "for beating major dungeons. Link will always start with one stone or medallion.\n" diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 0561ce54d..dabfedac7 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5388,6 +5388,7 @@ typedef enum { //Dungeon reward settings typedef enum { + RO_DUNGEON_REWARDS_VANILLA, RO_DUNGEON_REWARDS_END_OF_DUNGEON, RO_DUNGEON_REWARDS_ANY_DUNGEON, RO_DUNGEON_REWARDS_OVERWORLD, diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 2ca325635..cf1acdd7f 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -170,7 +170,7 @@ void Settings::CreateOptions() { OPT_U8(RSK_MQ_ICE_CAVERN, "Ice Cavern Quest", {"Vanilla", "Master Quest", "Random"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MQDungeonsIceCavern"), "", WidgetType::Combobox, RO_MQ_SET_VANILLA, false, IMFLAG_NONE); OPT_U8(RSK_MQ_GTG, "Gerudo Training Ground Quest", {"Vanilla", "Master Quest", "Random"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MQDungeonsGTG"), "", WidgetType::Combobox, RO_MQ_SET_VANILLA, false, IMFLAG_NONE); OPT_U8(RSK_MQ_GANONS_CASTLE, "Ganon's Castle Quest", {"Vanilla", "Master Quest", "Random"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MQDungeonsGanonsCastle"), "", WidgetType::Combobox, RO_MQ_SET_VANILLA); - OPT_U8(RSK_SHUFFLE_DUNGEON_REWARDS, "Shuffle Dungeon Rewards", {"End of Dungeons", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleDungeonReward"), mOptionDescriptions[RSK_SHUFFLE_DUNGEON_REWARDS], WidgetType::Combobox, RO_DUNGEON_REWARDS_END_OF_DUNGEON); + OPT_U8(RSK_SHUFFLE_DUNGEON_REWARDS, "Shuffle Dungeon Rewards", {"Vanilla", "End of Dungeons", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleDungeonReward"), mOptionDescriptions[RSK_SHUFFLE_DUNGEON_REWARDS], WidgetType::Combobox, RO_DUNGEON_REWARDS_END_OF_DUNGEON); OPT_U8(RSK_LINKS_POCKET, "Link's Pocket", {"Dungeon Reward", "Advancement", "Anything", "Nothing"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("LinksPocket"), "", WidgetType::Combobox, RO_LINKS_POCKET_DUNGEON_REWARD); OPT_U8(RSK_SHUFFLE_SONGS, "Shuffle Songs", {"Song Locations", "Dungeon Rewards", "Anywhere"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleSongs"), mOptionDescriptions[RSK_SHUFFLE_SONGS], WidgetType::Combobox, RO_SONG_SHUFFLE_SONG_LOCATIONS); OPT_U8(RSK_SHOPSANITY, "Shop Shuffle", {"Off", "Specific Count", "Random"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("Shopsanity"), mOptionDescriptions[RSK_SHOPSANITY], WidgetType::Combobox, RO_SHOPSANITY_OFF); From c7f335f23c3af94eea5a7af6602481dc088bebf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 3 Feb 2025 10:08:58 +0000 Subject: [PATCH 13/68] Prefer EVENTCHKINF constants to hex (#4965) Also remove unnecessary const qualifiers that flood warnings --- .../Enhancements/randomizer/location_list.cpp | 118 +++++++++--------- soh/soh/Enhancements/randomizer/option.cpp | 6 +- soh/soh/Enhancements/randomizer/option.h | 6 +- 3 files changed, 65 insertions(+), 65 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 1fe52b897..d35b54a73 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -177,8 +177,8 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_HF_SOUTHEAST_GROTTO_CHEST] = Location::Chest(RC_HF_SOUTHEAST_GROTTO_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_FIELD, ACTOR_EN_BOX, SCENE_GROTTOS, 22978, 0x02, "Southeast Grotto Chest", RHT_HF_SOUTHEAST_GROTTO_CHEST, RG_RED_RUPEE); locationTable[RC_HF_OPEN_GROTTO_CHEST] = Location::Chest(RC_HF_OPEN_GROTTO_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_FIELD, ACTOR_EN_BOX, SCENE_GROTTOS, 22947, 0x03, "Open Grotto Chest", RHT_HF_OPEN_GROTTO_CHEST, RG_BLUE_RUPEE); locationTable[RC_HF_NEAR_MARKET_GROTTO_CHEST] = Location::Chest(RC_HF_NEAR_MARKET_GROTTO_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_FIELD, ACTOR_EN_BOX, SCENE_GROTTOS, 22944, 0x00, "Near Market Grotto Chest", RHT_HF_NEAR_MARKET_GROTTO_CHEST, RG_BLUE_RUPEE); - locationTable[RC_HF_OCARINA_OF_TIME_ITEM] = Location::Base(RC_HF_OCARINA_OF_TIME_ITEM, RCQUEST_BOTH, RCTYPE_OCARINA, ACTOR_ID_MAX, SCENE_HYRULE_FIELD, 0x00, "Ocarina of Time Item", RHT_HF_OCARINA_OF_TIME_ITEM, RG_PROGRESSIVE_OCARINA, SpoilerCollectionCheck::EventChkInf(0x43)); - locationTable[RC_HF_TEKTITE_GROTTO_FREESTANDING_POH] = Location::Collectable(RC_HF_TEKTITE_GROTTO_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_FIELD, ACTOR_EN_ITEM00, SCENE_GROTTOS, 262, 0x01, "Tektite Grotto Freestanding PoH", RHT_HF_TEKTITE_GROTTO_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_HF_OCARINA_OF_TIME_ITEM] = Location::Base(RC_HF_OCARINA_OF_TIME_ITEM, RCQUEST_BOTH, RCTYPE_OCARINA, ACTOR_ID_MAX, SCENE_HYRULE_FIELD, 0x00, "Ocarina of Time Item", RHT_HF_OCARINA_OF_TIME_ITEM, RG_PROGRESSIVE_OCARINA, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_OBTAINED_OCARINA_OF_TIME)); + locationTable[RC_HF_TEKTITE_GROTTO_FREESTANDING_POH] = Location::Collectable(RC_HF_TEKTITE_GROTTO_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_FIELD, ACTOR_EN_ITEM00, SCENE_GROTTOS, 262, 0x01, "Tektite Grotto Freestanding PoH", RHT_HF_TEKTITE_GROTTO_FREESTANDING_POH, RG_PIECE_OF_HEART, true); locationTable[RC_HF_DEKU_SCRUB_GROTTO] = Location::Base(RC_HF_DEKU_SCRUB_GROTTO, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_HYRULE_FIELD, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x02, 0xE6), "Deku Scrub Grotto", RHT_HF_DEKU_SCRUB_GROTTO, RG_PIECE_OF_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_HF_DEKU_SCRUB_GROTTO), true, 10); // Lake Hylia locationTable[RC_LH_CHILD_FISHING] = Location::Base(RC_LH_CHILD_FISHING, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_FISHING_POND, 0x00, "Child Fishing", RHT_LH_CHILD_FISHING, RG_PIECE_OF_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_CHILD_FISHING), true); @@ -186,34 +186,34 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_LH_HYRULE_LOACH] = Location::Base(RC_LH_HYRULE_LOACH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_FISHING_POND, 0x00, "Hyrule Loach Reward", RHT_LH_HYRULE_LOACH, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_CAUGHT_LOACH)); locationTable[RC_LH_LAB_DIVE] = Location::Base(RC_LH_LAB_DIVE, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_LAKESIDE_LABORATORY, 0x00, "Lab Dive", RHT_LH_LAB_DIVE, RG_PIECE_OF_HEART, SpoilerCollectionCheck::ItemGetInf(16), true); locationTable[RC_LH_TRADE_FROG] = Location::Base(RC_LH_TRADE_FROG, RCQUEST_BOTH, RCTYPE_ADULT_TRADE, ACTOR_ID_MAX, SCENE_LAKESIDE_LABORATORY, 0x00, "Lab Trade Eyeball Frog", RHT_LH_TRADE_FROG, RG_EYEDROPS, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ADULT_TRADES_LH_TRADE_FROG), true); - locationTable[RC_LH_UNDERWATER_ITEM] = Location::Base(RC_LH_UNDERWATER_ITEM, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_LAKE_HYLIA, 0x00, "Underwater Item", RHT_LH_UNDERWATER_ITEM, RG_RUTOS_LETTER, SpoilerCollectionCheck::EventChkInf(0x31), true); + locationTable[RC_LH_UNDERWATER_ITEM] = Location::Base(RC_LH_UNDERWATER_ITEM, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_LAKE_HYLIA, 0x00, "Underwater Item", RHT_LH_UNDERWATER_ITEM, RG_RUTOS_LETTER, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_OBTAINED_RUTOS_LETTER), true); locationTable[RC_LH_SUN] = Location::Base(RC_LH_SUN, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_LAKE_HYLIA, 0x00, "Sun", RHT_LH_SUN, RG_FIRE_ARROWS, SpoilerCollectionCheck::Chest(0x57, 0x1F), true); - locationTable[RC_LH_FREESTANDING_POH] = Location::Collectable(RC_LH_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, 7686, 0x1E, "Freestanding PoH", RHT_LH_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_LH_FREESTANDING_POH] = Location::Collectable(RC_LH_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, 7686, 0x1E, "Freestanding PoH", RHT_LH_FREESTANDING_POH, RG_PIECE_OF_HEART, true); locationTable[RC_LH_DEKU_SCRUB_GROTTO_LEFT] = Location::Base(RC_LH_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LAKE_HYLIA, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xEF), "Deku Scrub Grotto Left", RHT_LH_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_LEFT), false, 20); locationTable[RC_LH_DEKU_SCRUB_GROTTO_RIGHT] = Location::Base(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LAKE_HYLIA, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xEF), "Deku Scrub Grotto Right", RHT_LH_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_RIGHT), false, 40); locationTable[RC_LH_DEKU_SCRUB_GROTTO_CENTER] = Location::Base(RC_LH_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LAKE_HYLIA, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xEF), "Deku Scrub Grotto Center", RHT_LH_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_CENTER), false, 40); // Gerudo Valley locationTable[RC_GV_CHEST] = Location::Chest(RC_GV_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDO_VALLEY, 23200, 0x00, "Chest", RHT_GV_CHEST, RG_PURPLE_RUPEE); locationTable[RC_GV_TRADE_SAW] = Location::Base(RC_GV_TRADE_SAW, RCQUEST_BOTH, RCTYPE_ADULT_TRADE, ACTOR_ID_MAX, SCENE_GERUDO_VALLEY, 0x00, "Trade Saw", RHT_GV_TRADE_SAW, RG_BROKEN_SWORD, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ADULT_TRADES_GV_TRADE_SAW), true); - locationTable[RC_GV_WATERFALL_FREESTANDING_POH] = Location::Collectable(RC_GV_WATERFALL_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GERUDO_VALLEY, 262, 0x01, "Waterfall Freestanding PoH", RHT_GV_WATERFALL_FREESTANDING_POH, RG_PIECE_OF_HEART, true); - locationTable[RC_GV_CRATE_FREESTANDING_POH] = Location::Collectable(RC_GV_CRATE_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GERUDO_VALLEY, 518, 0x02, "Crate Freestanding PoH", RHT_GV_CRATE_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_GV_WATERFALL_FREESTANDING_POH] = Location::Collectable(RC_GV_WATERFALL_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GERUDO_VALLEY, 262, 0x01, "Waterfall Freestanding PoH", RHT_GV_WATERFALL_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_GV_CRATE_FREESTANDING_POH] = Location::Collectable(RC_GV_CRATE_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GERUDO_VALLEY, 518, 0x02, "Crate Freestanding PoH", RHT_GV_CRATE_FREESTANDING_POH, RG_PIECE_OF_HEART, true); locationTable[RC_GV_DEKU_SCRUB_GROTTO_REAR] = Location::Base(RC_GV_DEKU_SCRUB_GROTTO_REAR, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GERUDO_VALLEY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x07, 0xF0), "Deku Scrub Grotto Rear", RHT_GV_DEKU_SCRUB_GROTTO_REAR, RG_BUY_RED_POTION_40, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_REAR), false, 40); locationTable[RC_GV_DEKU_SCRUB_GROTTO_FRONT] = Location::Base(RC_GV_DEKU_SCRUB_GROTTO_FRONT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GERUDO_VALLEY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x08, 0xF0), "Deku Scrub Grotto Front", RHT_GV_DEKU_SCRUB_GROTTO_FRONT, RG_BUY_GREEN_POTION, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT), false, 40); // Gerudo Fortress - locationTable[RC_GF_CHEST] = Location::Chest(RC_GF_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDOS_FORTRESS, 1984, 0x00, "Chest", RHT_GF_CHEST, RG_PIECE_OF_HEART, true); + locationTable[RC_GF_CHEST] = Location::Chest(RC_GF_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDOS_FORTRESS, 1984, 0x00, "Chest", RHT_GF_CHEST, RG_PIECE_OF_HEART, true); locationTable[RC_GF_HBA_1000_POINTS] = Location::Base(RC_GF_HBA_1000_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, "GF HBA 1000 Points", RHT_GF_HBA_1000_POINTS, RG_PIECE_OF_HEART, SpoilerCollectionCheck::InfTable(INFTABLE_190), true); locationTable[RC_GF_HBA_1500_POINTS] = Location::Base(RC_GF_HBA_1500_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, "GF HBA 1500 Points", RHT_GF_HBA_1500_POINTS, RG_PROGRESSIVE_BOW, SpoilerCollectionCheck::ItemGetInf(15), true); // RandoTodo: Do we replace these with the RC_HIDEOUT keys or keep these? locationTable[RC_GF_GERUDO_MEMBERSHIP_CARD] = Location::Base(RC_GF_GERUDO_MEMBERSHIP_CARD, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_THIEVES_HIDEOUT, 0x00, "GF Gerudo Membership Card", RHT_GF_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ITEM_FROM_LEADER_OF_FORTRESS), true); - locationTable[RC_GF_NORTH_F1_CARPENTER] = Location::Collectable(RC_GF_NORTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3089, 0x0C, "GF North F1 Carpenter", RHT_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); - locationTable[RC_GF_NORTH_F2_CARPENTER] = Location::Collectable(RC_GF_NORTH_F2_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 2577, 0x0A, "GF North F2 Carpenter", RHT_GF_NORTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); - locationTable[RC_GF_SOUTH_F1_CARPENTER] = Location::Collectable(RC_GF_SOUTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3601, 0x0E, "GF South F1 Carpenter", RHT_GF_SOUTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); - locationTable[RC_GF_SOUTH_F2_CARPENTER] = Location::Collectable(RC_GF_SOUTH_F2_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3857, 0x0F, "GF South F2 Carpenter", RHT_GF_SOUTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); + locationTable[RC_GF_NORTH_F1_CARPENTER] = Location::Collectable(RC_GF_NORTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3089, 0x0C, "GF North F1 Carpenter", RHT_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); + locationTable[RC_GF_NORTH_F2_CARPENTER] = Location::Collectable(RC_GF_NORTH_F2_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 2577, 0x0A, "GF North F2 Carpenter", RHT_GF_NORTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); + locationTable[RC_GF_SOUTH_F1_CARPENTER] = Location::Collectable(RC_GF_SOUTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3601, 0x0E, "GF South F1 Carpenter", RHT_GF_SOUTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); + locationTable[RC_GF_SOUTH_F2_CARPENTER] = Location::Collectable(RC_GF_SOUTH_F2_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3857, 0x0F, "GF South F2 Carpenter", RHT_GF_SOUTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true); // Haunted Wasteland locationTable[RC_WASTELAND_CHEST] = Location::Chest(RC_WASTELAND_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_WASTELAND, ACTOR_EN_BOX, SCENE_HAUNTED_WASTELAND, -30048, 0x00, "Chest", RHT_WASTELAND_CHEST, RG_PURPLE_RUPEE); locationTable[RC_WASTELAND_BOMBCHU_SALESMAN] = Location::Base(RC_WASTELAND_BOMBCHU_SALESMAN, RCQUEST_BOTH, RCTYPE_MERCHANT, RCAREA_WASTELAND, ACTOR_ID_MAX, SCENE_HAUNTED_WASTELAND, 0x00, "Carpet Salesman", RHT_WASTELAND_BOMBCHU_SALESMAN, RG_BUY_BOMBCHUS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN), false, 200); // Desert Colossus - locationTable[RC_COLOSSUS_FREESTANDING_POH] = Location::Collectable(RC_COLOSSUS_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_DESERT_COLOSSUS, 3334, 0x0D, "Freestanding PoH", RHT_COLOSSUS_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_COLOSSUS_FREESTANDING_POH] = Location::Collectable(RC_COLOSSUS_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_DESERT_COLOSSUS, 3334, 0x0D, "Freestanding PoH", RHT_COLOSSUS_FREESTANDING_POH, RG_PIECE_OF_HEART, true); locationTable[RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR] = Location::Base(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DESERT_COLOSSUS, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x07, 0xFD), "Deku Scrub Grotto Rear", RHT_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, RG_BUY_RED_POTION_40, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR), false, 40); locationTable[RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT] = Location::Base(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DESERT_COLOSSUS, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x08, 0xFD), "Deku Scrub Grotto Front", RHT_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, RG_BUY_GREEN_POTION, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT), false, 40); // Market @@ -234,8 +234,8 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_4] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Fourth Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_4, RG_TREASURE_GAME_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4)); locationTable[RC_MARKET_TREASURE_CHEST_GAME_KEY_5] = Location::Chest(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, RCQUEST_BOTH, RCTYPE_CHEST_GAME, ACTOR_EN_BOX, SCENE_TREASURE_BOX_SHOP, 0x00, "Chest Game Fifth Room Key", RHT_MARKET_TREASURE_CHEST_GAME_KEY_5, RG_TREASURE_GAME_SMALL_KEY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5)); // Hyrule Castle - locationTable[RC_HC_MALON_EGG] = Location::Base(RC_HC_MALON_EGG, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_HYRULE_CASTLE, 0x00, "Malon Egg", RHT_HC_MALON_EGG, RG_WEIRD_EGG, SpoilerCollectionCheck::EventChkInf(0x12), true); - locationTable[RC_HC_ZELDAS_LETTER] = Location::Base(RC_HC_ZELDAS_LETTER, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_CASTLE_COURTYARD_ZELDA, 0x00, "Zeldas Letter", RHT_HC_ZELDAS_LETTER, RG_ZELDAS_LETTER, SpoilerCollectionCheck::EventChkInf(0x40), true); + locationTable[RC_HC_MALON_EGG] = Location::Base(RC_HC_MALON_EGG, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_HYRULE_CASTLE, 0x00, "Malon Egg", RHT_HC_MALON_EGG, RG_WEIRD_EGG, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_OBTAINED_POCKET_EGG), true); + locationTable[RC_HC_ZELDAS_LETTER] = Location::Base(RC_HC_ZELDAS_LETTER, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_CASTLE_COURTYARD_ZELDA, 0x00, "Zeldas Letter", RHT_HC_ZELDAS_LETTER, RG_ZELDAS_LETTER, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_OBTAINED_ZELDAS_LETTER), true); // Kakariko locationTable[RC_KAK_REDEAD_GROTTO_CHEST] = Location::Chest(RC_KAK_REDEAD_GROTTO_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_BOX, SCENE_GROTTOS, 31434, 0x0A, "Redead Grotto Chest", RHT_KAK_REDEAD_GROTTO_CHEST, RG_HUGE_RUPEE); locationTable[RC_KAK_OPEN_GROTTO_CHEST] = Location::Chest(RC_KAK_OPEN_GROTTO_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_BOX, SCENE_GROTTOS, 22984, 0x08, "Open Grotto Chest", RHT_KAK_OPEN_GROTTO_CHEST, RG_RED_RUPEE); @@ -252,23 +252,23 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_KAK_ANJU_AS_ADULT] = Location::Base(RC_KAK_ANJU_AS_ADULT, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_KAKARIKO_VILLAGE, 0x00, "Anju as Adult", RHT_KAK_ANJU_AS_ADULT, RG_CLAIM_CHECK, SpoilerCollectionCheck::ItemGetInf(44), true); locationTable[RC_KAK_ANJU_AS_CHILD] = Location::Base(RC_KAK_ANJU_AS_CHILD, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_KAKARIKO_VILLAGE, 0x00, "Anju as Child", RHT_KAK_ANJU_AS_CHILD, RG_EMPTY_BOTTLE, SpoilerCollectionCheck::ItemGetInf(12), true); locationTable[RC_KAK_TRADE_POCKET_CUCCO] = Location::Base(RC_KAK_TRADE_POCKET_CUCCO, RCQUEST_BOTH, RCTYPE_ADULT_TRADE, ACTOR_ID_MAX, SCENE_KAKARIKO_VILLAGE, 0x00, "Trade Pocket Cucco", RHT_KAK_TRADE_POCKET_CUCCO, RG_COJIRO, SpoilerCollectionCheck::ItemGetInf(46), true); - locationTable[RC_KAK_IMPAS_HOUSE_FREESTANDING_POH] = Location::Collectable(RC_KAK_IMPAS_HOUSE_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_IMPAS_HOUSE, 262, 0x01, "Impas House Freestanding PoH", RHT_KAK_IMPAS_HOUSE_FREESTANDING_POH, RG_PIECE_OF_HEART, true); - locationTable[RC_KAK_WINDMILL_FREESTANDING_POH] = Location::Collectable(RC_KAK_WINDMILL_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, 262, 0x01, "Windmill Freestanding PoH", RHT_KAK_WINDMILL_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_KAK_IMPAS_HOUSE_FREESTANDING_POH] = Location::Collectable(RC_KAK_IMPAS_HOUSE_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_IMPAS_HOUSE, 262, 0x01, "Impas House Freestanding PoH", RHT_KAK_IMPAS_HOUSE_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_KAK_WINDMILL_FREESTANDING_POH] = Location::Collectable(RC_KAK_WINDMILL_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, 262, 0x01, "Windmill Freestanding PoH", RHT_KAK_WINDMILL_FREESTANDING_POH, RG_PIECE_OF_HEART, true); // Graveyard locationTable[RC_GRAVEYARD_SHIELD_GRAVE_CHEST] = Location::Chest(RC_GRAVEYARD_SHIELD_GRAVE_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GRAVEYARD, ACTOR_EN_BOX, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 21824, 0x00, "Shield Grave Chest", RHT_GRAVEYARD_SHIELD_GRAVE_CHEST, RG_HYLIAN_SHIELD); - locationTable[RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST] = Location::Chest(RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GRAVEYARD, ACTOR_EN_BOX, SCENE_REDEAD_GRAVE, -22592, 0x00, "Heart Piece Grave Chest", RHT_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, RG_PIECE_OF_HEART, true); + locationTable[RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST] = Location::Chest(RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GRAVEYARD, ACTOR_EN_BOX, SCENE_REDEAD_GRAVE, -22592, 0x00, "Heart Piece Grave Chest", RHT_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, RG_PIECE_OF_HEART, true); locationTable[RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST] = Location::Chest(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_ROYAL_FAMILYS_TOMB, -32736, 0x00, "Composers Grave Chest", RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_CHEST, RG_BOMBS_5); - locationTable[RC_GRAVEYARD_HOOKSHOT_CHEST] = Location::Chest(RC_GRAVEYARD_HOOKSHOT_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GRAVEYARD, ACTOR_EN_BOX, SCENE_WINDMILL_AND_DAMPES_GRAVE, 4352, 0x00, "Hookshot Chest", RHT_GRAVEYARD_HOOKSHOT_CHEST, RG_PROGRESSIVE_HOOKSHOT, true); - locationTable[RC_GRAVEYARD_FREESTANDING_POH] = Location::Collectable(RC_GRAVEYARD_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GRAVEYARD, 1030, 0x04, "Freestanding PoH", RHT_GRAVEYARD_FREESTANDING_POH, RG_PIECE_OF_HEART, true); - locationTable[RC_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, 1798, 0x07, "Dampe Race Freestanding PoH", RHT_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH, RG_PIECE_OF_HEART, true); - locationTable[RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR] = Location::Collectable(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GRAVEYARD, 6406, 0x19, "Dampe Gravedigging Tour", RHT_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, RG_PIECE_OF_HEART, true); + locationTable[RC_GRAVEYARD_HOOKSHOT_CHEST] = Location::Chest(RC_GRAVEYARD_HOOKSHOT_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GRAVEYARD, ACTOR_EN_BOX, SCENE_WINDMILL_AND_DAMPES_GRAVE, 4352, 0x00, "Hookshot Chest", RHT_GRAVEYARD_HOOKSHOT_CHEST, RG_PROGRESSIVE_HOOKSHOT, true); + locationTable[RC_GRAVEYARD_FREESTANDING_POH] = Location::Collectable(RC_GRAVEYARD_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GRAVEYARD, 1030, 0x04, "Freestanding PoH", RHT_GRAVEYARD_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, 1798, 0x07, "Dampe Race Freestanding PoH", RHT_GRAVEYARD_DAMPE_RACE_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR] = Location::Collectable(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GRAVEYARD, 6406, 0x19, "Dampe Gravedigging Tour", RHT_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, RG_PIECE_OF_HEART, true); // Death Mountain locationTable[RC_DMT_CHEST] = Location::Chest(RC_DMT_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEATH_MOUNTAIN_TRAIL, 23201, 0x01, "Chest", RHT_DMT_CHEST, RG_PURPLE_RUPEE); locationTable[RC_DMT_STORMS_GROTTO_CHEST] = Location::Chest(RC_DMT_STORMS_GROTTO_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_BOX, SCENE_GROTTOS, 23255, 0x17, "Storms Grotto Chest", RHT_DMT_STORMS_GROTTO_CHEST, RG_HUGE_RUPEE); locationTable[RC_DMT_TRADE_BROKEN_SWORD] = Location::Base(RC_DMT_TRADE_BROKEN_SWORD, RCQUEST_BOTH, RCTYPE_ADULT_TRADE, ACTOR_ID_MAX, SCENE_DEATH_MOUNTAIN_TRAIL, 0x00, "Trade Broken Sword", RHT_DMT_TRADE_BROKEN_SWORD, RG_PRESCRIPTION, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ADULT_TRADES_DMT_TRADE_BROKEN_SWORD), true); locationTable[RC_DMT_TRADE_EYEDROPS] = Location::Base(RC_DMT_TRADE_EYEDROPS, RCQUEST_BOTH, RCTYPE_ADULT_TRADE, ACTOR_ID_MAX, SCENE_DEATH_MOUNTAIN_TRAIL, 0x00, "Trade Eyedrops", RHT_DMT_TRADE_EYEDROPS, RG_CLAIM_CHECK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ADULT_TRADES_DMT_TRADE_EYEDROPS), true); locationTable[RC_DMT_TRADE_CLAIM_CHECK] = Location::Base(RC_DMT_TRADE_CLAIM_CHECK, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_DEATH_MOUNTAIN_TRAIL, 0x00, "Trade Claim Check", RHT_DMT_TRADE_CLAIM_CHECK, RG_BIGGORON_SWORD, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ADULT_TRADES_DMT_TRADE_CLAIM_CHECK), true); - locationTable[RC_DMT_FREESTANDING_POH] = Location::Collectable(RC_DMT_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_TRAIL, 7686, 0x1E, "Freestanding PoH", RHT_DMT_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_DMT_FREESTANDING_POH] = Location::Collectable(RC_DMT_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_TRAIL, 7686, 0x1E, "Freestanding PoH", RHT_DMT_FREESTANDING_POH, RG_PIECE_OF_HEART, true); // Goron City locationTable[RC_GC_MAZE_LEFT_CHEST] = Location::Chest(RC_GC_MAZE_LEFT_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GORON_CITY, 23232, 0x00, "Maze Left Chest", RHT_GC_MAZE_LEFT_CHEST, RG_HUGE_RUPEE); locationTable[RC_GC_MAZE_RIGHT_CHEST] = Location::Chest(RC_GC_MAZE_RIGHT_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GORON_CITY, 23201, 0x01, "Maze Right Chest", RHT_GC_MAZE_RIGHT_CHEST, RG_PURPLE_RUPEE); @@ -276,15 +276,15 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_GC_ROLLING_GORON_AS_CHILD] = Location::Base(RC_GC_ROLLING_GORON_AS_CHILD, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, "Rolling Goron as Child", RHT_GC_ROLLING_GORON_AS_CHILD, RG_PROGRESSIVE_BOMB_BAG, SpoilerCollectionCheck::InfTable(INFTABLE_11E), true); locationTable[RC_GC_ROLLING_GORON_AS_ADULT] = Location::Base(RC_GC_ROLLING_GORON_AS_ADULT, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, "Rolling Goron as Adult", RHT_GC_ROLLING_GORON_AS_ADULT, RG_GORON_TUNIC, SpoilerCollectionCheck::InfTable(INFTABLE_GORON_CITY_DOORS_UNLOCKED), true); locationTable[RC_GC_DARUNIAS_JOY] = Location::Base(RC_GC_DARUNIAS_JOY, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, "Darunias Joy", RHT_GC_DARUNIAS_JOY, RG_PROGRESSIVE_STRENGTH, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DARUNIAS_JOY), true); - locationTable[RC_GC_POT_FREESTANDING_POH] = Location::Collectable(RC_GC_POT_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GORON_CITY, 7942, 0x1F, "Pot Freestanding PoH", RHT_GC_POT_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_GC_POT_FREESTANDING_POH] = Location::Collectable(RC_GC_POT_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_GORON_CITY, 7942, 0x1F, "Pot Freestanding PoH", RHT_GC_POT_FREESTANDING_POH, RG_PIECE_OF_HEART, true); locationTable[RC_GC_DEKU_SCRUB_GROTTO_LEFT] = Location::Base(RC_GC_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GORON_CITY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xFB), "Deku Scrub Grotto Left", RHT_GC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_LEFT), false, 20); locationTable[RC_GC_DEKU_SCRUB_GROTTO_RIGHT] = Location::Base(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GORON_CITY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xFB), "Deku Scrub Grotto Right", RHT_GC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_RIGHT), false, 40); locationTable[RC_GC_DEKU_SCRUB_GROTTO_CENTER] = Location::Base(RC_GC_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_GORON_CITY, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xFB), "Deku Scrub Grotto Center", RHT_GC_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_CENTER), false, 70); locationTable[RC_GC_MEDIGORON] = Location::Base(RC_GC_MEDIGORON, RCQUEST_BOTH, RCTYPE_MERCHANT, ACTOR_ID_MAX, SCENE_GORON_CITY, 0x00, "Medigoron", RHT_GC_MEDIGORON, RG_GIANTS_KNIFE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MERCHANTS_MEDIGORON), false, 200); // Death Mountain Crater locationTable[RC_DMC_UPPER_GROTTO_CHEST] = Location::Chest(RC_DMC_UPPER_GROTTO_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_BOX, SCENE_GROTTOS, 23802, 0x1A, "Upper Grotto Chest", RHT_DMC_UPPER_GROTTO_CHEST, RG_BOMBS_20); - locationTable[RC_DMC_WALL_FREESTANDING_POH] = Location::Collectable(RC_DMC_WALL_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 518, 0x02, "Wall Freestanding PoH", RHT_DMC_WALL_FREESTANDING_POH, RG_PIECE_OF_HEART, true); - locationTable[RC_DMC_VOLCANO_FREESTANDING_POH] = Location::Collectable(RC_DMC_VOLCANO_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 2054, 0x08, "Volcano Freestanding PoH", RHT_DMC_WALL_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_DMC_WALL_FREESTANDING_POH] = Location::Collectable(RC_DMC_WALL_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 518, 0x02, "Wall Freestanding PoH", RHT_DMC_WALL_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_DMC_VOLCANO_FREESTANDING_POH] = Location::Collectable(RC_DMC_VOLCANO_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, 2054, 0x08, "Volcano Freestanding PoH", RHT_DMC_WALL_FREESTANDING_POH, RG_PIECE_OF_HEART, true); locationTable[RC_DMC_DEKU_SCRUB] = Location::Base(RC_DMC_DEKU_SCRUB, RCQUEST_BOTH, RCTYPE_SCRUB, ACTOR_EN_DNS, SCENE_DEATH_MOUNTAIN_CRATER, 0x05, "Deku Scrub", RHT_DMC_DEKU_SCRUB, RG_BUY_BOMBS_535, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB), false, 40); locationTable[RC_DMC_DEKU_SCRUB_GROTTO_LEFT] = Location::Base(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xF9), "Deku Scrub Grotto Left", RHT_DMC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_LEFT), false, 20); locationTable[RC_DMC_DEKU_SCRUB_GROTTO_RIGHT] = Location::Base(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xF9), "Deku Scrub Grotto Right", RHT_DMC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_RIGHT), false, 40); @@ -292,44 +292,44 @@ void Rando::StaticData::InitLocationTable() { // // Zoras River locationTable[RC_ZR_OPEN_GROTTO_CHEST] = Location::Chest(RC_ZR_OPEN_GROTTO_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_ZORAS_RIVER, ACTOR_EN_BOX, SCENE_GROTTOS, 22985, 0x09, "Open Grotto Chest", RHT_ZR_OPEN_GROTTO_CHEST, RG_RED_RUPEE); locationTable[RC_ZR_MAGIC_BEAN_SALESMAN] = Location::Base(RC_ZR_MAGIC_BEAN_SALESMAN, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_ZORAS_RIVER, 0x00, "Magic Bean Salesman", RHT_ZR_MAGIC_BEAN_SALESMAN, RG_MAGIC_BEAN, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MERCHANTS_MAGIC_BEAN_SALESMAN), true, 60); - locationTable[RC_ZR_FROGS_ZELDAS_LULLABY] = Location::Base(RC_ZR_FROGS_ZELDAS_LULLABY, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Zelda's Lullaby", RHT_ZR_FROGS_ZELDAS_LULLABY, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(0xD1)); - locationTable[RC_ZR_FROGS_EPONAS_SONG] = Location::Base(RC_ZR_FROGS_EPONAS_SONG, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Epona's Song", RHT_ZR_FROGS_EPONAS_SONG, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(0xD2)); - locationTable[RC_ZR_FROGS_SARIAS_SONG] = Location::Base(RC_ZR_FROGS_SARIAS_SONG, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Saria's Song", RHT_ZR_FROGS_SARIAS_SONG, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(0xD4)); - locationTable[RC_ZR_FROGS_SUNS_SONG] = Location::Base(RC_ZR_FROGS_SUNS_SONG, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Sun's Song", RHT_ZR_FROGS_SUNS_SONG, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(0xD3)); - locationTable[RC_ZR_FROGS_SONG_OF_TIME] = Location::Base(RC_ZR_FROGS_SONG_OF_TIME, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Song of Time", RHT_ZR_FROGS_SONG_OF_TIME, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(0xD5)); - locationTable[RC_ZR_FROGS_IN_THE_RAIN] = Location::Base(RC_ZR_FROGS_IN_THE_RAIN, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs in the Rain", RHT_ZR_FROGS_IN_THE_RAIN, RG_PIECE_OF_HEART, SpoilerCollectionCheck::EventChkInf(0xD6), true); - locationTable[RC_ZR_FROGS_OCARINA_GAME] = Location::Base(RC_ZR_FROGS_OCARINA_GAME, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Ocarina Game", RHT_ZR_FROGS_OCARINA_GAME, RG_PIECE_OF_HEART, SpoilerCollectionCheck::EventChkInf(0xD0), true); - locationTable[RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH] = Location::Collectable(RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, 1030, 0x04, "Near Open Grotto Freestanding PoH", RHT_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, RG_PIECE_OF_HEART, true); - locationTable[RC_ZR_NEAR_DOMAIN_FREESTANDING_POH] = Location::Collectable(RC_ZR_NEAR_DOMAIN_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, 2822, 0x0B, "Near Domain Freestanding PoH", RHT_ZR_NEAR_DOMAIN_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_ZR_FROGS_ZELDAS_LULLABY] = Location::Base(RC_ZR_FROGS_ZELDAS_LULLABY, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Zelda's Lullaby", RHT_ZR_FROGS_ZELDAS_LULLABY, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_SONGS_FOR_FROGS_ZL)); + locationTable[RC_ZR_FROGS_EPONAS_SONG] = Location::Base(RC_ZR_FROGS_EPONAS_SONG, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Epona's Song", RHT_ZR_FROGS_EPONAS_SONG, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_SONGS_FOR_FROGS_EPONA)); + locationTable[RC_ZR_FROGS_SARIAS_SONG] = Location::Base(RC_ZR_FROGS_SARIAS_SONG, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Saria's Song", RHT_ZR_FROGS_SARIAS_SONG, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_SONGS_FOR_FROGS_SARIA)); + locationTable[RC_ZR_FROGS_SUNS_SONG] = Location::Base(RC_ZR_FROGS_SUNS_SONG, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Sun's Song", RHT_ZR_FROGS_SUNS_SONG, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_SONGS_FOR_FROGS_SUNS)); + locationTable[RC_ZR_FROGS_SONG_OF_TIME] = Location::Base(RC_ZR_FROGS_SONG_OF_TIME, RCQUEST_BOTH, RCTYPE_FROG_SONG, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Song of Time", RHT_ZR_FROGS_SONG_OF_TIME, RG_PURPLE_RUPEE, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_SONGS_FOR_FROGS_SOT)); + locationTable[RC_ZR_FROGS_IN_THE_RAIN] = Location::Base(RC_ZR_FROGS_IN_THE_RAIN, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs in the Rain", RHT_ZR_FROGS_IN_THE_RAIN, RG_PIECE_OF_HEART, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_SONGS_FOR_FROGS_STORMS), true); + locationTable[RC_ZR_FROGS_OCARINA_GAME] = Location::Base(RC_ZR_FROGS_OCARINA_GAME, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_FR, SCENE_ZORAS_RIVER, 0x00, "Frogs Ocarina Game", RHT_ZR_FROGS_OCARINA_GAME, RG_PIECE_OF_HEART, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_SONGS_FOR_FROGS_CHOIR), true); + locationTable[RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH] = Location::Collectable(RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, 1030, 0x04, "Near Open Grotto Freestanding PoH", RHT_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_ZR_NEAR_DOMAIN_FREESTANDING_POH] = Location::Collectable(RC_ZR_NEAR_DOMAIN_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, 2822, 0x0B, "Near Domain Freestanding PoH", RHT_ZR_NEAR_DOMAIN_FREESTANDING_POH, RG_PIECE_OF_HEART, true); locationTable[RC_ZR_DEKU_SCRUB_GROTTO_REAR] = Location::Base(RC_ZR_DEKU_SCRUB_GROTTO_REAR, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_ZORAS_RIVER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x07, 0xEB), "Deku Scrub Grotto Rear", RHT_ZR_DEKU_SCRUB_GROTTO_REAR, RG_BUY_RED_POTION_40, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_REAR), false, 40); locationTable[RC_ZR_DEKU_SCRUB_GROTTO_FRONT] = Location::Base(RC_ZR_DEKU_SCRUB_GROTTO_FRONT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_ZORAS_RIVER, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x08, 0xEB), "Deku Scrub Grotto Front", RHT_ZR_DEKU_SCRUB_GROTTO_FRONT, RG_BUY_GREEN_POTION, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_FRONT), false, 40); // Zoras Domain - locationTable[RC_ZD_CHEST] = Location::Chest(RC_ZD_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_ZORAS_DOMAIN, -18496, 0x00, "Chest", RHT_ZD_CHEST, RG_PIECE_OF_HEART, true); - locationTable[RC_ZD_DIVING_MINIGAME] = Location::Base(RC_ZD_DIVING_MINIGAME, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_ZORAS_DOMAIN, 0x00, "Diving Minigame", RHT_ZD_DIVING_MINIGAME, RG_PROGRESSIVE_SCALE, SpoilerCollectionCheck::EventChkInf(0x38), true); + locationTable[RC_ZD_CHEST] = Location::Chest(RC_ZD_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_ZORAS_DOMAIN, -18496, 0x00, "Chest", RHT_ZD_CHEST, RG_PIECE_OF_HEART, true); + locationTable[RC_ZD_DIVING_MINIGAME] = Location::Base(RC_ZD_DIVING_MINIGAME, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_ZORAS_DOMAIN, 0x00, "Diving Minigame", RHT_ZD_DIVING_MINIGAME, RG_PROGRESSIVE_SCALE, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_OBTAINED_SILVER_SCALE), true); locationTable[RC_ZD_KING_ZORA_THAWED] = Location::Base(RC_ZD_KING_ZORA_THAWED, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_ZORAS_DOMAIN, 0x00, "King Zora Thawed", RHT_ZD_KING_ZORA_THAWED, RG_ZORA_TUNIC, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KING_ZORA_THAWED), true); locationTable[RC_ZD_TRADE_PRESCRIPTION] = Location::Base(RC_ZD_TRADE_PRESCRIPTION, RCQUEST_BOTH, RCTYPE_ADULT_TRADE, ACTOR_ID_MAX, SCENE_ZORAS_DOMAIN, 0x00, "Trade Prescription", RHT_ZD_TRADE_PRESCRIPTION, RG_EYEBALL_FROG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ADULT_TRADES_ZD_TRADE_PRESCRIPTION), true); // Zora's Fountain - locationTable[RC_ZF_ICEBERG_FREESTANDING_POH] = Location::Collectable(RC_ZF_ICEBERG_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 262, 0x01, "Iceberg Freestanding PoH", RHT_ZF_ICEBERG_FREESTANDING_POH, RG_PIECE_OF_HEART, true); - locationTable[RC_ZF_BOTTOM_FREESTANDING_POH] = Location::Collectable(RC_ZF_BOTTOM_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 5126, 0x14, "Bottom Freestanding PoH", RHT_ZF_BOTTOM_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_ZF_ICEBERG_FREESTANDING_POH] = Location::Collectable(RC_ZF_ICEBERG_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 262, 0x01, "Iceberg Freestanding PoH", RHT_ZF_ICEBERG_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_ZF_BOTTOM_FREESTANDING_POH] = Location::Collectable(RC_ZF_BOTTOM_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, 5126, 0x14, "Bottom Freestanding PoH", RHT_ZF_BOTTOM_FREESTANDING_POH, RG_PIECE_OF_HEART, true); // Lon Lon Ranch locationTable[RC_LLR_TALONS_CHICKENS] = Location::Base(RC_LLR_TALONS_CHICKENS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_LON_LON_BUILDINGS, 0x00, "Talons Chickens", RHT_LLR_TALONS_CHICKENS, RG_BOTTLE_WITH_MILK, SpoilerCollectionCheck::ItemGetInf(2), true); - locationTable[RC_LLR_FREESTANDING_POH] = Location::Collectable(RC_LLR_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_LON_LON_BUILDINGS, 262, 0x01, "Freestanding PoH", RHT_LLR_FREESTANDING_POH, RG_PIECE_OF_HEART, true); + locationTable[RC_LLR_FREESTANDING_POH] = Location::Collectable(RC_LLR_FREESTANDING_POH, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_ITEM00, SCENE_LON_LON_BUILDINGS, 262, 0x01, "Freestanding PoH", RHT_LLR_FREESTANDING_POH, RG_PIECE_OF_HEART, true); locationTable[RC_LLR_DEKU_SCRUB_GROTTO_LEFT] = Location::Base(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LON_LON_RANCH, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x00, 0xFC), "Deku Scrub Grotto Left", RHT_LLR_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_LEFT), false, 20); locationTable[RC_LLR_DEKU_SCRUB_GROTTO_RIGHT] = Location::Base(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LON_LON_RANCH, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x05, 0xFC), "Deku Scrub Grotto Right", RHT_LLR_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_RIGHT), false, 40); locationTable[RC_LLR_DEKU_SCRUB_GROTTO_CENTER] = Location::Base(RC_LLR_DEKU_SCRUB_GROTTO_CENTER, RCQUEST_BOTH, RCTYPE_SCRUB, RCAREA_LON_LON_RANCH, ACTOR_EN_DNS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x03, 0xFC), "Deku Scrub Grotto Center", RHT_LLR_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_CENTER), false, 40); // Dungeons // Deku Tree Vanilla - locationTable[RC_DEKU_TREE_MAP_CHEST] = Location::Chest(RC_DEKU_TREE_MAP_CHEST, RCQUEST_VANILLA, RCTYPE_MAP, ACTOR_EN_BOX, SCENE_DEKU_TREE, 2083, 0x03, "Map Chest", RHT_DEKU_TREE_MAP_CHEST, RG_DEKU_TREE_MAP, true); - locationTable[RC_DEKU_TREE_COMPASS_CHEST] = Location::Chest(RC_DEKU_TREE_COMPASS_CHEST, RCQUEST_VANILLA, RCTYPE_COMPASS, ACTOR_EN_BOX, SCENE_DEKU_TREE, 2050, 0x02, "Compass Chest", RHT_DEKU_TREE_COMPASS_CHEST, RG_DEKU_TREE_COMPASS, true); + locationTable[RC_DEKU_TREE_MAP_CHEST] = Location::Chest(RC_DEKU_TREE_MAP_CHEST, RCQUEST_VANILLA, RCTYPE_MAP, ACTOR_EN_BOX, SCENE_DEKU_TREE, 2083, 0x03, "Map Chest", RHT_DEKU_TREE_MAP_CHEST, RG_DEKU_TREE_MAP, true); + locationTable[RC_DEKU_TREE_COMPASS_CHEST] = Location::Chest(RC_DEKU_TREE_COMPASS_CHEST, RCQUEST_VANILLA, RCTYPE_COMPASS, ACTOR_EN_BOX, SCENE_DEKU_TREE, 2050, 0x02, "Compass Chest", RHT_DEKU_TREE_COMPASS_CHEST, RG_DEKU_TREE_COMPASS, true); locationTable[RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST] = Location::Chest(RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, 22790, 0x06, "Compass Room Side Chest", RHT_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, RG_RECOVERY_HEART); locationTable[RC_DEKU_TREE_BASEMENT_CHEST] = Location::Chest(RC_DEKU_TREE_BASEMENT_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, 22788, 0x04, "Basement Chest", RHT_DEKU_TREE_BASEMENT_CHEST, RG_RECOVERY_HEART); - locationTable[RC_DEKU_TREE_SLINGSHOT_CHEST] = Location::Chest(RC_DEKU_TREE_SLINGSHOT_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, 161, 0x01, "Slingshot Chest", RHT_DEKU_TREE_SLINGSHOT_CHEST, RG_PROGRESSIVE_SLINGSHOT, true); + locationTable[RC_DEKU_TREE_SLINGSHOT_CHEST] = Location::Chest(RC_DEKU_TREE_SLINGSHOT_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, 161, 0x01, "Slingshot Chest", RHT_DEKU_TREE_SLINGSHOT_CHEST, RG_PROGRESSIVE_SLINGSHOT, true); locationTable[RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST] = Location::Chest(RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, RCQUEST_VANILLA, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, 22789, 0x05, "Slingshot Room Side Chest", RHT_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, RG_RECOVERY_HEART); // Deku Tree MQ - locationTable[RC_DEKU_TREE_MQ_MAP_CHEST] = Location::Chest(RC_DEKU_TREE_MQ_MAP_CHEST, RCQUEST_MQ, RCTYPE_MAP, ACTOR_EN_BOX, SCENE_DEKU_TREE, 2083, 0x03, "MQ Map Chest", RHT_DEKU_TREE_MQ_MAP_CHEST, RG_DEKU_TREE_MAP, true); - locationTable[RC_DEKU_TREE_MQ_COMPASS_CHEST] = Location::Chest(RC_DEKU_TREE_MQ_COMPASS_CHEST, RCQUEST_MQ, RCTYPE_COMPASS, ACTOR_EN_BOX, SCENE_DEKU_TREE, 2049, 0x01, "MQ Compass Chest", RHT_DEKU_TREE_MQ_COMPASS_CHEST, RG_DEKU_TREE_COMPASS, true); - locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_CHEST] = Location::Chest(RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, 4262, 0x06, "MQ Slingshot Chest", RHT_DEKU_TREE_MQ_SLINGSHOT_CHEST, RG_PROGRESSIVE_SLINGSHOT, true); + locationTable[RC_DEKU_TREE_MQ_MAP_CHEST] = Location::Chest(RC_DEKU_TREE_MQ_MAP_CHEST, RCQUEST_MQ, RCTYPE_MAP, ACTOR_EN_BOX, SCENE_DEKU_TREE, 2083, 0x03, "MQ Map Chest", RHT_DEKU_TREE_MQ_MAP_CHEST, RG_DEKU_TREE_MAP, true); + locationTable[RC_DEKU_TREE_MQ_COMPASS_CHEST] = Location::Chest(RC_DEKU_TREE_MQ_COMPASS_CHEST, RCQUEST_MQ, RCTYPE_COMPASS, ACTOR_EN_BOX, SCENE_DEKU_TREE, 2049, 0x01, "MQ Compass Chest", RHT_DEKU_TREE_MQ_COMPASS_CHEST, RG_DEKU_TREE_COMPASS, true); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_CHEST] = Location::Chest(RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, 4262, 0x06, "MQ Slingshot Chest", RHT_DEKU_TREE_MQ_SLINGSHOT_CHEST, RG_PROGRESSIVE_SLINGSHOT, true); locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST] = Location::Chest(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, -31454, 0x02, "MQ Slingshot Room Back Chest", RHT_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, RG_DEKU_SHIELD); locationTable[RC_DEKU_TREE_MQ_BASEMENT_CHEST] = Location::Chest(RC_DEKU_TREE_MQ_BASEMENT_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, -31452, 0x04, "MQ Basement Chest", RHT_DEKU_TREE_MQ_BASEMENT_CHEST, RG_DEKU_SHIELD); locationTable[RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST] = Location::Chest(RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, RCQUEST_MQ, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_DEKU_TREE, 22789, 0x05, "MQ Before Spinning Log Chest", RHT_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, RG_RECOVERY_HEART); @@ -701,7 +701,7 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_FIRE_TEMPLE_GS_BOULDER_MAZE] = Location::GSToken(RC_FIRE_TEMPLE_GS_BOULDER_MAZE, RCQUEST_VANILLA, SCENE_FIRE_TEMPLE, 9220, 0x04, "GS Boulder Maze", RHT_FIRE_TEMPLE_GS_BOULDER_MAZE); locationTable[RC_FIRE_TEMPLE_GS_SCARECROW_TOP] = Location::GSToken(RC_FIRE_TEMPLE_GS_SCARECROW_TOP, RCQUEST_VANILLA, SCENE_FIRE_TEMPLE, 9224, 0x08, "GS Scarecrow Top", RHT_FIRE_TEMPLE_GS_SCARECROW_TOP); locationTable[RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB] = Location::GSToken(RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB, RCQUEST_VANILLA, SCENE_FIRE_TEMPLE, 9232, 0x10, "GS Scarecrow Climb", RHT_FIRE_TEMPLE_GS_SCARECROW_CLIMB); - locationTable[RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE] = Location::GSToken(RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE, RCQUEST_MQ, SCENE_FIRE_TEMPLE, 9218, 0x02, "MQ GS Above Fire Wall Maze", RHT_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE); + locationTable[RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE] = Location::GSToken(RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE, RCQUEST_MQ, SCENE_FIRE_TEMPLE, 9218, 0x02, "MQ GS Above Fire Wall Maze", RHT_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE); locationTable[RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER] = Location::GSToken(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER, RCQUEST_MQ, SCENE_FIRE_TEMPLE, 9224, 0x08, "MQ GS Fire Wall Maze Center", RHT_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER); locationTable[RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR] = Location::GSToken(RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, RCQUEST_MQ, SCENE_FIRE_TEMPLE, 9217, 0x01, "MQ GS Big Lava Room Open Door", RHT_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR); locationTable[RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM] = Location::GSToken(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, RCQUEST_MQ, SCENE_FIRE_TEMPLE, 9232, 0x10, "MQ GS Fire Wall Maze Side Room", RHT_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM); @@ -835,7 +835,7 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_TWINROVA] = Location::Base(RC_TWINROVA, RCQUEST_BOTH, RCTYPE_DUNGEON_REWARD, ACTOR_DOOR_WARP1, SCENE_SPIRIT_TEMPLE_BOSS, 0x00, "Twinrova", "Twinrova", RHT_TWINROVA, RG_SPIRIT_MEDALLION, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE), true); locationTable[RC_BONGO_BONGO] = Location::Base(RC_BONGO_BONGO, RCQUEST_BOTH, RCTYPE_DUNGEON_REWARD, ACTOR_DOOR_WARP1, SCENE_SHADOW_TEMPLE_BOSS, 0x00, "Bongo Bongo", "Bongo Bongo", RHT_BONGO_BONGO, RG_SHADOW_MEDALLION, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE), true); locationTable[RC_GANON] = Location::Base(RC_GANON, RCQUEST_BOTH, RCTYPE_DUNGEON_REWARD, ACTOR_DOOR_WARP1, SCENE_GANON_BOSS, 0x00, "Ganon", "Ganon", RHT_NONE, RG_TRIFORCE); - locationTable[RC_GIFT_FROM_RAURU] = Location::Base(RC_GIFT_FROM_RAURU, RCQUEST_BOTH, RCTYPE_DUNGEON_REWARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_ID_MAX, 0x00, "Gift from Rauru", "Gift from Rauru", RHT_GIFT_FROM_RAURU, RG_LIGHT_MEDALLION, SpoilerCollectionCheck::EventChkInf(0xC9), true); + locationTable[RC_GIFT_FROM_RAURU] = Location::Base(RC_GIFT_FROM_RAURU, RCQUEST_BOTH, RCTYPE_DUNGEON_REWARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_ID_MAX, 0x00, "Gift from Rauru", "Gift from Rauru", RHT_GIFT_FROM_RAURU, RG_LIGHT_MEDALLION, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_TIME_TRAVELED_TO_ADULT), true); // Heart Containers locationTable[RC_DEKU_TREE_QUEEN_GOHMA_HEART] = Location::Base(RC_DEKU_TREE_QUEEN_GOHMA_HEART, RCQUEST_BOTH, RCTYPE_BOSS_HEART_OR_OTHER_REWARD, ACTOR_ITEM_B_HEART, SCENE_DEKU_TREE_BOSS, 0x00, "Queen Gohma Heart Container", RHT_DEKU_TREE_QUEEN_GOHMA_HEART, RG_HEART_CONTAINER, SpoilerCollectionCheck::Collectable(0x11, 0x1F), true); @@ -848,9 +848,9 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_SHADOW_TEMPLE_BONGO_BONGO_HEART] = Location::Base(RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, RCQUEST_BOTH, RCTYPE_BOSS_HEART_OR_OTHER_REWARD, ACTOR_ITEM_B_HEART, SCENE_SHADOW_TEMPLE_BOSS, 0x00, "Bongo Bongo Heart Container", RHT_SHADOW_TEMPLE_BONGO_BONGO_HEART, RG_HEART_CONTAINER, SpoilerCollectionCheck::Collectable(0x18, 0x1F), true); // Cutscenes - locationTable[RC_TOT_MASTER_SWORD] = Location::Base(RC_TOT_MASTER_SWORD, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, 0x00, "ToT Master Sword", RHT_TOT_MASTER_SWORD, RG_MASTER_SWORD, SpoilerCollectionCheck::EventChkInf(0x45), true); - locationTable[RC_TOT_LIGHT_ARROWS_CUTSCENE] = Location::Base(RC_TOT_LIGHT_ARROWS_CUTSCENE, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, 0x00, "ToT Light Arrow Cutscene", RHT_TOT_LIGHT_ARROWS_CUTSCENE, RG_LIGHT_ARROWS, SpoilerCollectionCheck::EventChkInf(0xC4), true); - locationTable[RC_LW_GIFT_FROM_SARIA] = Location::Base(RC_LW_GIFT_FROM_SARIA, RCQUEST_BOTH, RCTYPE_OCARINA, ACTOR_ID_MAX, SCENE_LOST_WOODS, 0x00, "Gift From Saria", RHT_LW_GIFT_FROM_SARIA, RG_PROGRESSIVE_OCARINA, SpoilerCollectionCheck::EventChkInf(0xC1), true); + locationTable[RC_TOT_MASTER_SWORD] = Location::Base(RC_TOT_MASTER_SWORD, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, 0x00, "ToT Master Sword", RHT_TOT_MASTER_SWORD, RG_MASTER_SWORD, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_PULLED_MASTER_SWORD_FROM_PEDESTAL), true); + locationTable[RC_TOT_LIGHT_ARROWS_CUTSCENE] = Location::Base(RC_TOT_LIGHT_ARROWS_CUTSCENE, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, 0x00, "ToT Light Arrow Cutscene", RHT_TOT_LIGHT_ARROWS_CUTSCENE, RG_LIGHT_ARROWS, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS), true); + locationTable[RC_LW_GIFT_FROM_SARIA] = Location::Base(RC_LW_GIFT_FROM_SARIA, RCQUEST_BOTH, RCTYPE_OCARINA, ACTOR_ID_MAX, SCENE_LOST_WOODS, 0x00, "Gift From Saria", RHT_LW_GIFT_FROM_SARIA, RG_PROGRESSIVE_OCARINA, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_SPOKE_TO_SARIA_ON_BRIDGE), true); locationTable[RC_ZF_GREAT_FAIRY_REWARD] = Location::Base(RC_ZF_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_ZORAS_FOUNTAIN, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 1, "Great Fairy Reward", RHT_ZF_GREAT_FAIRY_REWARD, RG_FARORES_WIND, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_GREAT_FAIRY_REWARD), true); locationTable[RC_HC_GREAT_FAIRY_REWARD] = Location::Base(RC_HC_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_CASTLE, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 2, "Great Fairy Reward", RHT_HC_GREAT_FAIRY_REWARD, RG_DINS_FIRE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_GREAT_FAIRY_REWARD), true); locationTable[RC_COLOSSUS_GREAT_FAIRY_REWARD] = Location::Base(RC_COLOSSUS_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_DESERT_COLOSSUS, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 3, "Great Fairy Reward", RHT_COLOSSUS_GREAT_FAIRY_REWARD, RG_NAYRUS_LOVE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD), true); @@ -859,17 +859,17 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_OGC_GREAT_FAIRY_REWARD] = Location::Base(RC_OGC_GREAT_FAIRY_REWARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_HYRULE_CASTLE, ACTOR_BG_DY_YOSEIZO, SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 3, "OGC Great Fairy Reward", "OGC Great Fairy Reward", RHT_OGC_GREAT_FAIRY_REWARD, RG_DOUBLE_DEFENSE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_OGC_GREAT_FAIRY_REWARD), true); // Songs - locationTable[RC_SHEIK_IN_FOREST] = Location::Base(RC_SHEIK_IN_FOREST, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_SACRED_FOREST_MEADOW, 0x00, "Sheik in Forest", "Sheik in Forest", RHT_SHEIK_IN_FOREST, RG_MINUET_OF_FOREST, SpoilerCollectionCheck::EventChkInf(0x50), true); - locationTable[RC_SHEIK_IN_CRATER] = Location::Base(RC_SHEIK_IN_CRATER, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_DEATH_MOUNTAIN_CRATER, 0x00, "Sheik in Crater", "Sheik in Crater", RHT_SHEIK_IN_CRATER, RG_BOLERO_OF_FIRE, SpoilerCollectionCheck::EventChkInf(0x51), true); - locationTable[RC_SHEIK_IN_ICE_CAVERN] = Location::Base(RC_SHEIK_IN_ICE_CAVERN, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_ICE_CAVERN, 0x00, "Sheik in Ice Cavern", "Sheik in Ice Cavern", RHT_SHEIK_IN_ICE_CAVERN, RG_SERENADE_OF_WATER, SpoilerCollectionCheck::EventChkInf(0x52), true); - locationTable[RC_SHEIK_AT_COLOSSUS] = Location::Base(RC_SHEIK_AT_COLOSSUS, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_DESERT_COLOSSUS, 0x00, "Sheik at Colossus", "Sheik at Colossus", RHT_SHEIK_AT_COLOSSUS, RG_REQUIEM_OF_SPIRIT, SpoilerCollectionCheck::EventChkInf(0xAC), true); - locationTable[RC_SHEIK_IN_KAKARIKO] = Location::Base(RC_SHEIK_IN_KAKARIKO, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_KAKARIKO_VILLAGE, 0x00, "Sheik in Kakariko", "Sheik in Kakariko", RHT_SHEIK_IN_KAKARIKO, RG_NOCTURNE_OF_SHADOW, SpoilerCollectionCheck::EventChkInf(0xAA), true); - locationTable[RC_SHEIK_AT_TEMPLE] = Location::Base(RC_SHEIK_AT_TEMPLE, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, 0x00, "Sheik at Temple", "Sheik at Temple", RHT_SHEIK_AT_TEMPLE, RG_PRELUDE_OF_LIGHT, SpoilerCollectionCheck::EventChkInf(0x55), true); - locationTable[RC_SONG_FROM_IMPA] = Location::Base(RC_SONG_FROM_IMPA, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, RCAREA_HYRULE_CASTLE, ACTOR_ID_MAX, SCENE_ID_MAX, 0x00, "Song from Impa", "Song from Impa", RHT_SONG_FROM_IMPA, RG_ZELDAS_LULLABY, SpoilerCollectionCheck::EventChkInf(0x59), true); + locationTable[RC_SHEIK_IN_FOREST] = Location::Base(RC_SHEIK_IN_FOREST, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_SACRED_FOREST_MEADOW, 0x00, "Sheik in Forest", "Sheik in Forest", RHT_SHEIK_IN_FOREST, RG_MINUET_OF_FOREST, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_MINUET_OF_FOREST), true); + locationTable[RC_SHEIK_IN_CRATER] = Location::Base(RC_SHEIK_IN_CRATER, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_DEATH_MOUNTAIN_CRATER, 0x00, "Sheik in Crater", "Sheik in Crater", RHT_SHEIK_IN_CRATER, RG_BOLERO_OF_FIRE, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_BOLERO_OF_FIRE), true); + locationTable[RC_SHEIK_IN_ICE_CAVERN] = Location::Base(RC_SHEIK_IN_ICE_CAVERN, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_ICE_CAVERN, 0x00, "Sheik in Ice Cavern", "Sheik in Ice Cavern", RHT_SHEIK_IN_ICE_CAVERN, RG_SERENADE_OF_WATER, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER), true); + locationTable[RC_SHEIK_AT_COLOSSUS] = Location::Base(RC_SHEIK_AT_COLOSSUS, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_DESERT_COLOSSUS, 0x00, "Sheik at Colossus", "Sheik at Colossus", RHT_SHEIK_AT_COLOSSUS, RG_REQUIEM_OF_SPIRIT, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_REQUIEM_OF_SPIRIT), true); + locationTable[RC_SHEIK_IN_KAKARIKO] = Location::Base(RC_SHEIK_IN_KAKARIKO, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_KAKARIKO_VILLAGE, 0x00, "Sheik in Kakariko", "Sheik in Kakariko", RHT_SHEIK_IN_KAKARIKO, RG_NOCTURNE_OF_SHADOW, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_BONGO_BONGO_ESCAPED_FROM_WELL), true); + locationTable[RC_SHEIK_AT_TEMPLE] = Location::Base(RC_SHEIK_AT_TEMPLE, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, 0x00, "Sheik at Temple", "Sheik at Temple", RHT_SHEIK_AT_TEMPLE, RG_PRELUDE_OF_LIGHT, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT), true); + locationTable[RC_SONG_FROM_IMPA] = Location::Base(RC_SONG_FROM_IMPA, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, RCAREA_HYRULE_CASTLE, ACTOR_ID_MAX, SCENE_ID_MAX, 0x00, "Song from Impa", "Song from Impa", RHT_SONG_FROM_IMPA, RG_ZELDAS_LULLABY, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_ZELDAS_LULLABY), true); locationTable[RC_SONG_FROM_MALON] = Location::Base(RC_SONG_FROM_MALON, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_LON_LON_RANCH, 0x00, "Song from Malon", "Song from Malon", RHT_SONG_FROM_MALON, RG_EPONAS_SONG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LEARNED_EPONA_SONG), true); - locationTable[RC_SONG_FROM_SARIA] = Location::Base(RC_SONG_FROM_SARIA, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_SACRED_FOREST_MEADOW, 0x00, "Song from Saria", "Song from Saria", RHT_SONG_FROM_SARIA, RG_SARIAS_SONG, SpoilerCollectionCheck::EventChkInf(0x57), true); + locationTable[RC_SONG_FROM_SARIA] = Location::Base(RC_SONG_FROM_SARIA, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_SACRED_FOREST_MEADOW, 0x00, "Song from Saria", "Song from Saria", RHT_SONG_FROM_SARIA, RG_SARIAS_SONG, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_SARIAS_SONG), true); locationTable[RC_SONG_FROM_ROYAL_FAMILYS_TOMB] = Location::Base(RC_SONG_FROM_ROYAL_FAMILYS_TOMB, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_ROYAL_FAMILYS_TOMB, 0x00, "Song from Composers Grave", "Song from Composers Grave", RHT_SONG_FROM_ROYAL_FAMILYS_TOMB, RG_SUNS_SONG, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_SUNS_SONG), true); - locationTable[RC_SONG_FROM_OCARINA_OF_TIME] = Location::Base(RC_SONG_FROM_OCARINA_OF_TIME, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_HYRULE_FIELD, 0x00, "Song from Ocarina of Time", "Song from Ocarina of Time", RHT_SONG_FROM_OCARINA_OF_TIME, RG_SONG_OF_TIME, SpoilerCollectionCheck::EventChkInf(0xA9), true); + locationTable[RC_SONG_FROM_OCARINA_OF_TIME] = Location::Base(RC_SONG_FROM_OCARINA_OF_TIME, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, ACTOR_ID_MAX, SCENE_HYRULE_FIELD, 0x00, "Song from Ocarina of Time", "Song from Ocarina of Time", RHT_SONG_FROM_OCARINA_OF_TIME, RG_SONG_OF_TIME, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_SONG_OF_TIME), true); locationTable[RC_SONG_FROM_WINDMILL] = Location::Base(RC_SONG_FROM_WINDMILL, RCQUEST_BOTH, RCTYPE_SONG_LOCATION, RCAREA_KAKARIKO_VILLAGE, ACTOR_ID_MAX, SCENE_WINDMILL_AND_DAMPES_GRAVE, 0x00, "Song from Windmill", "Song from Windmill", RHT_SONG_FROM_WINDMILL, RG_SONG_OF_STORMS, SpoilerCollectionCheck::EventChkInf(EVENTCHKINF_LEARNED_SONG_OF_STORMS), true); //Beehives diff --git a/soh/soh/Enhancements/randomizer/option.cpp b/soh/soh/Enhancements/randomizer/option.cpp index 5cf16ac26..e032d1a2d 100644 --- a/soh/soh/Enhancements/randomizer/option.cpp +++ b/soh/soh/Enhancements/randomizer/option.cpp @@ -48,7 +48,7 @@ size_t Option::GetOptionCount() const { return options.size(); } -const RandomizerSettingKey Option::GetKey() const { +RandomizerSettingKey Option::GetKey() const { return static_cast(key); } @@ -355,7 +355,7 @@ LocationOption::LocationOption(RandomizerCheck key_, const std::string& name_) : Option(key_, name_, {"Included", "Excluded"}, OptionCategory::Setting, "", "", WidgetType::Checkbox, RO_LOCATION_INCLUDE, false, IMFLAG_NONE) {} -const RandomizerCheck LocationOption::GetKey() const { +RandomizerCheck LocationOption::GetKey() const { return static_cast(key); } @@ -368,7 +368,7 @@ TrickOption TrickOption::LogicTrick(RandomizerTrick key_, RandomizerCheckQuest q return {key_, quest_, area_, std::move(tags_), name_, std::move(description_)}; } -const RandomizerTrick TrickOption::GetKey() const { +RandomizerTrick TrickOption::GetKey() const { return static_cast(key); } diff --git a/soh/soh/Enhancements/randomizer/option.h b/soh/soh/Enhancements/randomizer/option.h index 1ff68c852..d2291463b 100644 --- a/soh/soh/Enhancements/randomizer/option.h +++ b/soh/soh/Enhancements/randomizer/option.h @@ -195,7 +195,7 @@ class Option { * * @return const RandomizerSettingKey */ - const RandomizerSettingKey GetKey() const; + RandomizerSettingKey GetKey() const; /** * @brief Get the name of the Option. @@ -366,7 +366,7 @@ class LocationOption : public Option { public: LocationOption() = default; LocationOption(RandomizerCheck key_, const std::string& name_); - const RandomizerCheck GetKey() const; + RandomizerCheck GetKey() const; }; class TrickOption : public Option { @@ -385,7 +385,7 @@ public: */ static TrickOption LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set tags_, const std::string& name_, std::string description_); - const RandomizerTrick GetKey() const; + RandomizerTrick GetKey() const; /** * @brief Retrieve the quest type this trick is relevant for. From 8ae8770db8f1c3548e1b2da26c5da72a40c32d33 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Mon, 3 Feb 2025 15:58:49 -0800 Subject: [PATCH 14/68] pull in `startMode` docs (#4988) --- soh/include/z64player.h | 23 +++++ .../actors/ovl_player_actor/z_player.c | 91 ++++++++++--------- 2 files changed, 69 insertions(+), 45 deletions(-) diff --git a/soh/include/z64player.h b/soh/include/z64player.h index 6f00eb3ef..a00d86557 100644 --- a/soh/include/z64player.h +++ b/soh/include/z64player.h @@ -7,6 +7,29 @@ struct Player; +// Determines behavior when spawning. See `PlayerStartMode`. +#define PLAYER_GET_START_MODE(thisx) (thisx->params & 0xF00) >> 8 + +typedef enum PlayerStartMode { + /* 0 */ PLAYER_START_MODE_NOTHING, // Update is empty and draw function is NULL, nothing occurs. Useful in cutscenes, for example. + /* 1 */ PLAYER_START_MODE_TIME_TRAVEL, // Arriving from time travel. Automatically adjusts by age. + /* 2 */ PLAYER_START_MODE_BLUE_WARP, // Arriving from a blue warp. + /* 3 */ PLAYER_START_MODE_DOOR, // Unused. Use a door immediately if one is nearby. If no door is in usable range, a softlock occurs. + /* 4 */ PLAYER_START_MODE_GROTTO, // Arriving from a grotto, launched upward from the ground. + /* 5 */ PLAYER_START_MODE_WARP_SONG, // Arriving from a warp song. + /* 6 */ PLAYER_START_MODE_FARORES_WIND, // Arriving from a Farores Wind warp. + /* 7 */ PLAYER_START_MODE_KNOCKED_OVER, // Knocked over on the ground and flashing red. + /* 8 */ PLAYER_START_MODE_UNUSED_8, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 9 */ PLAYER_START_MODE_UNUSED_9, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 10 */ PLAYER_START_MODE_UNUSED_10, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 11 */ PLAYER_START_MODE_UNUSED_11, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 12 */ PLAYER_START_MODE_UNUSED_12, // Unused, behaves the same as PLAYER_START_MODE_MOVE_FORWARD_SLOW. + /* 13 */ PLAYER_START_MODE_IDLE, // Idle standing still, or swim if in water. + /* 14 */ PLAYER_START_MODE_MOVE_FORWARD_SLOW, // Take a few steps forward at a slow speed (2.0f), or swim if in water. + /* 15 */ PLAYER_START_MODE_MOVE_FORWARD, // Take a few steps forward, using the speed from the last exit (gSaveContext.entranceSpeed), or swim if in water. + /* 16 */ PLAYER_START_MODE_MAX // Note: By default, this param has 4 bits allocated. The max value is 16. +} PlayerStartMode; + typedef enum PlayerSword { /* 0 */ PLAYER_SWORD_NONE, /* 1 */ PLAYER_SWORD_KOKIRI, diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 762814076..34bee2f6f 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -157,17 +157,17 @@ s32 func_80835C08(Player* this, PlayState* play); void Player_UseItem(PlayState* play, Player* this, s32 item); void func_80839F90(Player* this, PlayState* play); s32 func_8083C61C(PlayState* play, Player* this); -void func_8083CA20(PlayState* play, Player* this); -void func_8083CA54(PlayState* play, Player* this); -void func_8083CA9C(PlayState* play, Player* this); -void func_80846648(PlayState* play, Player* this); -void func_80846660(PlayState* play, Player* this); -void func_808467D4(PlayState* play, Player* this); -void func_808468A8(PlayState* play, Player* this); -void func_808468E8(PlayState* play, Player* this); -void func_80846978(PlayState* play, Player* this); -void func_808469BC(PlayState* play, Player* this); -void func_80846A68(PlayState* play, Player* this); +void Player_StartMode_Idle(PlayState* play, Player* this); +void Player_StartMode_MoveForwardSlow(PlayState* play, Player* this); +void Player_StartMode_MoveForward(PlayState* play, Player* this); +void Player_StartMode_Nothing(PlayState* play, Player* this); +void Player_StartMode_BlueWarp(PlayState* play, Player* this); +void Player_StartMode_TimeTravel(PlayState* play, Player* this); +void Player_StartMode_Door(PlayState* play, Player* this); +void Player_StartMode_Grotto(PlayState* play, Player* this); +void Player_StartMode_KnockedOver(PlayState* play, Player* this); +void Player_StartMode_WarpSong(PlayState* play, Player* this); +void Player_StartMode_FaroresWind(PlayState* play, Player* this); void Player_UpdateCommon(Player* this, PlayState* play, Input* input); void func_8084FF7C(Player* this); void Player_UpdateBunnyEars(Player* this); @@ -6618,13 +6618,13 @@ s32 func_8083C910(PlayState* play, Player* this, f32 arg2) { return 1; } -void func_8083CA20(PlayState* play, Player* this) { +void Player_StartMode_Idle(PlayState* play, Player* this) { if (func_8083C910(play, this, 180.0f)) { this->av2.actionVar2 = -20; } } -void func_8083CA54(PlayState* play, Player* this) { +void Player_StartMode_MoveForwardSlow(PlayState* play, Player* this) { this->linearVelocity = 2.0f; gSaveContext.entranceSpeed = 2.0f; if (func_8083C910(play, this, 120.0f)) { @@ -6632,7 +6632,7 @@ void func_8083CA54(PlayState* play, Player* this) { } } -void func_8083CA9C(PlayState* play, Player* this) { +void Player_StartMode_MoveForward(PlayState* play, Player* this) { if (gSaveContext.entranceSpeed < 0.1f) { gSaveContext.entranceSpeed = 0.1f; } @@ -10614,12 +10614,12 @@ static ColliderQuadInit D_808546A0 = { void func_8084663C(Actor* thisx, PlayState* play) { } -void func_80846648(PlayState* play, Player* this) { +void Player_StartMode_Nothing(PlayState* play, Player* this) { this->actor.update = func_8084663C; this->actor.draw = NULL; } -void func_80846660(PlayState* play, Player* this) { +void Player_StartMode_BlueWarp(PlayState* play, Player* this) { Player_SetupAction(play, this, Player_Action_8084F710, 0); if ((play->sceneNum == SCENE_LAKE_HYLIA) && (gSaveContext.sceneSetupIndex >= 4)) { this->av1.actionVar1 = 1; @@ -10652,7 +10652,7 @@ void func_80846720(PlayState* play, Player* this, s32 arg2) { static Vec3f D_808546F4 = { -1.0f, 69.0f, 20.0f }; -void func_808467D4(PlayState* play, Player* this) { +void Player_StartMode_TimeTravel(PlayState* play, Player* this) { Player_SetupAction(play, this, Player_Action_8084E9AC, 0); this->stateFlags1 |= PLAYER_STATE1_IN_CUTSCENE; Math_Vec3f_Copy(&this->actor.world.pos, &D_808546F4); @@ -10666,12 +10666,12 @@ void func_808467D4(PlayState* play, Player* this) { this->av2.actionVar2 = 20; } -void func_808468A8(PlayState* play, Player* this) { +void Player_StartMode_Door(PlayState* play, Player* this) { Player_SetupAction(play, this, Player_Action_8084F9A0, 0); Player_StartAnimMovement(play, this, 0x9B); } -void func_808468E8(PlayState* play, Player* this) { +void Player_StartMode_Grotto(PlayState* play, Player* this) { func_808389E8(this, &gPlayerAnim_link_normal_jump, 12.0f, play); Player_SetupAction(play, this, Player_Action_8084F9C0, 0); this->stateFlags1 |= PLAYER_STATE1_IN_CUTSCENE; @@ -10679,11 +10679,11 @@ void func_808468E8(PlayState* play, Player* this) { OnePointCutscene_Init(play, 5110, 40, &this->actor, MAIN_CAM); } -void func_80846978(PlayState* play, Player* this) { +void Player_StartMode_KnockedOver(PlayState* play, Player* this) { func_80837C0C(play, this, PLAYER_HIT_RESPONSE_KNOCKBACK_LARGE, 2.0f, 2.0f, this->actor.shape.rot.y + 0x8000, 0); } -void func_808469BC(PlayState* play, Player* this) { +void Player_StartMode_WarpSong(PlayState* play, Player* this) { Player_SetupAction(play, this, Player_Action_8084F698, 0); this->actor.draw = NULL; this->stateFlags1 |= PLAYER_STATE1_IN_CUTSCENE; @@ -10696,7 +10696,7 @@ Actor* Player_SpawnMagicSpell(PlayState* play, Player* this, s32 spell) { this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0, true); } -void func_80846A68(PlayState* play, Player* this) { +void Player_StartMode_FaroresWind(PlayState* play, Player* this) { this->actor.draw = NULL; Player_SetupAction(play, this, Player_Action_8085076C, 0); this->stateFlags1 |= PLAYER_STATE1_IN_CUTSCENE; @@ -10743,23 +10743,23 @@ void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHe this->ivanDamageMultiplier = 1; } -static void (*D_80854738[])(PlayState* play, Player* this) = { - /* 0x0 */ func_80846648, - /* 0x1 */ func_808467D4, // From time travel - /* 0x2 */ func_80846660, - /* 0x3 */ func_808468A8, - /* 0x4 */ func_808468E8, - /* 0x5 */ func_808469BC, - /* 0x6 */ func_80846A68, - /* 0x7 */ func_80846978, - /* 0x8 */ func_8083CA54, - /* 0x9 */ func_8083CA54, - /* 0xA */ func_8083CA54, - /* 0xB */ func_8083CA54, - /* 0xC */ func_8083CA54, - /* 0xD */ func_8083CA20, - /* 0xE */ func_8083CA54, - /* 0xF */ func_8083CA9C, +static void (*sStartModeFuncs[PLAYER_START_MODE_MAX])(PlayState* play, Player* this) = { + Player_StartMode_Nothing, // PLAYER_START_MODE_NOTHING + Player_StartMode_TimeTravel, // PLAYER_START_MODE_TIME_TRAVEL + Player_StartMode_BlueWarp, // PLAYER_START_MODE_BLUE_WARP + Player_StartMode_Door, // PLAYER_START_MODE_DOOR + Player_StartMode_Grotto, // PLAYER_START_MODE_GROTTO + Player_StartMode_WarpSong, // PLAYER_START_MODE_WARP_SONG + Player_StartMode_FaroresWind, // PLAYER_START_MODE_FARORES_WIND + Player_StartMode_KnockedOver, // PLAYER_START_MODE_KNOCKED_OVER + Player_StartMode_MoveForwardSlow, // PLAYER_START_MODE_UNUSED_8 + Player_StartMode_MoveForwardSlow, // PLAYER_START_MODE_UNUSED_9 + Player_StartMode_MoveForwardSlow, // PLAYER_START_MODE_UNUSED_10 + Player_StartMode_MoveForwardSlow, // PLAYER_START_MODE_UNUSED_11 + Player_StartMode_MoveForwardSlow, // PLAYER_START_MODE_UNUSED_12 + Player_StartMode_Idle, // PLAYER_START_MODE_IDLE + Player_StartMode_MoveForwardSlow, // PLAYER_START_MODE_MOVE_FORWARD_SLOW + Player_StartMode_MoveForward, // PLAYER_START_MODE_MOVE_FORWARD }; static Vec3f D_80854778 = { 0.0f, 50.0f, 0.0f }; @@ -10769,7 +10769,7 @@ void Player_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; SceneTableEntry* scene = play->loadedScene; u32 titleFileSize; - s32 initMode; + s32 startMode; s32 respawnFlag; s32 respawnMode; @@ -10858,16 +10858,17 @@ void Player_Init(Actor* thisx, PlayState* play2) { gSaveContext.infTable[26] |= gBitFlags[play->sceneNum]; } - initMode = (thisx->params & 0xF00) >> 8; - if ((initMode == 5) || (initMode == 6)) { + startMode = PLAYER_GET_START_MODE(thisx); + + if ((startMode == PLAYER_START_MODE_WARP_SONG) || (startMode == PLAYER_START_MODE_FARORES_WIND)) { if (gSaveContext.cutsceneIndex >= 0xFFF0) { - initMode = 13; + startMode = PLAYER_START_MODE_IDLE; } } - D_80854738[initMode](play, this); + sStartModeFuncs[startMode](play, this); - if (initMode != 0) { + if (startMode != PLAYER_START_MODE_NOTHING) { if ((gSaveContext.gameMode == 0) || (gSaveContext.gameMode == 3)) { this->naviActor = Player_SpawnFairy(play, this, &thisx->world.pos, &D_80854778, FAIRY_NAVI); if (gSaveContext.dogParams != 0) { From 11e07a8f9d82ff10f5654b1d7b2125870e957040 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Tue, 4 Feb 2025 01:44:02 -0800 Subject: [PATCH 15/68] rework assignable tunic/boots to use shipinit and hooks (#4978) * don't put away items when equipping tunics/boots * vb * don't need that return * ok i guess i'm going down the rabbit hole * more rabbit hole * shipinit and more hooks * clean up * use fewer params, add a missing condition * make the loops make sense --- .../Enhancements/AssignableTunicsAndBoots.cpp | 114 ++++++++++++++++++ .../game-interactor/GameInteractor.h | 5 + .../actors/ovl_player_actor/z_player.c | 50 +------- 3 files changed, 122 insertions(+), 47 deletions(-) create mode 100644 soh/soh/Enhancements/AssignableTunicsAndBoots.cpp diff --git a/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp b/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp new file mode 100644 index 000000000..a7e210b95 --- /dev/null +++ b/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp @@ -0,0 +1,114 @@ +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/ShipInit.hpp" + +extern "C" { +#include "macros.h" +#include "variables.h" + +extern s32 Player_GetItemOnButton(PlayState*, s32); +extern void Inventory_ChangeEquipment(s16, u16); +extern void Player_SetEquipmentData(PlayState*, Player*); +extern void func_808328EC(Player*, u16); +extern PlayState* gPlayState; +} + +static u16 sItemButtons[] = { BTN_B, BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT, BTN_DUP, BTN_DDOWN, BTN_DLEFT, BTN_DRIGHT }; + +void UseTunicBoots(Player* player, PlayState* play, Input* input) { + // Boots and tunics equip despite state + if ( + player->stateFlags1 & (PLAYER_STATE1_INPUT_DISABLED | PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE | PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD) || + player->stateFlags2 & PLAYER_STATE2_OCARINA_PLAYING + ) { + return; + } + + s32 item = ITEM_NONE; + for (s32 i = 0; i < ARRAY_COUNT(sItemButtons); i++) { + if (CHECK_BTN_ALL(input->press.button, sItemButtons[i])) { + item = Player_GetItemOnButton(play, i); + break; + } + } + + if (item >= ITEM_TUNIC_KOKIRI && item <= ITEM_BOOTS_HOVER) { + if (item >= ITEM_BOOTS_KOKIRI) { + u16 bootsValue = item - ITEM_BOOTS_KOKIRI + 1; + if (CUR_EQUIP_VALUE(EQUIP_TYPE_BOOTS) == bootsValue) { + Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_KOKIRI); + } else { + Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, bootsValue); + } + Player_SetEquipmentData(play, player); + func_808328EC(player, CUR_EQUIP_VALUE(EQUIP_TYPE_BOOTS) == EQUIP_VALUE_BOOTS_IRON ? NA_SE_PL_WALK_HEAVYBOOTS : NA_SE_PL_CHANGE_ARMS); + } else { + u16 tunicValue = item - ITEM_TUNIC_KOKIRI + 1; + if (CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC) == tunicValue) { + Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_KOKIRI); + } else { + Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, tunicValue); + } + Player_SetEquipmentData(play, player); + func_808328EC(player, NA_SE_PL_CHANGE_ARMS); + } + } +} + +void ClearAssignedTunicsBoots(int32_t unused = 0) { + for (int32_t buttonIndex = 0; buttonIndex < 8; buttonIndex++) { + int32_t item = gSaveContext.equips.buttonItems[buttonIndex]; + + if (item >= ITEM_TUNIC_KOKIRI && item <= ITEM_BOOTS_HOVER) { + gSaveContext.equips.buttonItems[buttonIndex] = ITEM_NONE; + } + } +} + +#define CVAR_TUNICBOOTS_NAME CVAR_ENHANCEMENT("AssignableTunicsAndBoots") +#define CVAR_TUNICBOOTS_DEFAULT 0 +#define CVAR_TUNICBOOTS_VALUE CVarGetInteger(CVAR_TUNICBOOTS_NAME, CVAR_TUNICBOOTS_DEFAULT) + +void RegisterAssignableTunicsBoots() { + // make sure we don't change our held/equipped item when changing tunics/boots + COND_VB_SHOULD(VB_CHANGE_HELD_ITEM_AND_USE_ITEM, CVAR_TUNICBOOTS_VALUE != CVAR_TUNICBOOTS_DEFAULT, { + int32_t item = va_arg(args, int32_t); + + if (item >= ITEM_TUNIC_KOKIRI && item <= ITEM_BOOTS_HOVER) { + *should = false; + } + }); + + // make sure we don't crash because tunics/boots don't have assoicated item actions + COND_VB_SHOULD(VB_ITEM_ACTION_BE_NONE, CVAR_TUNICBOOTS_VALUE != CVAR_TUNICBOOTS_DEFAULT, { + int32_t item = va_arg(args, int32_t); + + if (item >= ITEM_TUNIC_KOKIRI && item <= ITEM_BOOTS_HOVER) { + *should = true; + } + }); + + // do something when the player presses a button to use the tunics/boots + COND_VB_SHOULD(VB_EXECUTE_PLAYER_ACTION_FUNC, CVAR_TUNICBOOTS_VALUE != CVAR_TUNICBOOTS_DEFAULT, { + // if the vanilla condition doesn't want us to run the actionFunc, don't do any of this + if (!*should) { + return; + } + + Input* input = va_arg(args, Input*); + Player* player = GET_PLAYER(gPlayState); + + *should = false; + player->actionFunc(player, gPlayState); + UseTunicBoots(player, gPlayState, input); + }); + + // clear out assigned tunics/boots when the enhancement is toggled off + if (GameInteractor::IsSaveLoaded(true) && CVAR_TUNICBOOTS_VALUE == CVAR_TUNICBOOTS_DEFAULT) { + ClearAssignedTunicsBoots(); + } + + // clear out assigned tunics/boots when loading a save with enhancement turned off + COND_HOOK(OnLoadGame, CVAR_TUNICBOOTS_VALUE == CVAR_TUNICBOOTS_DEFAULT, ClearAssignedTunicsBoots); +} + +static RegisterShipInitFunc initFunc(RegisterAssignableTunicsBoots, { CVAR_TUNICBOOTS_NAME }); diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.h b/soh/soh/Enhancements/game-interactor/GameInteractor.h index 936a4be99..889ba7f1c 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor.h @@ -532,6 +532,11 @@ typedef enum { VB_SPAWN_SONG_FAIRY, // Opt: *EnGs VB_SPAWN_GOSSIP_STONE_FAIRY, + + /*** Equippable tunics and boots ***/ + VB_CHANGE_HELD_ITEM_AND_USE_ITEM, + VB_ITEM_ACTION_BE_NONE, + VB_EXECUTE_PLAYER_ACTION_FUNC, } GIVanillaBehavior; #ifdef __cplusplus diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 34bee2f6f..77b4a7e27 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -2244,16 +2244,12 @@ void Player_InitItemActionWithAnim(PlayState* play, Player* this, s8 itemAction) } s8 Player_ItemToItemAction(s32 item) { - if (item >= ITEM_NONE_FE) { + if (GameInteractor_Should(VB_ITEM_ACTION_BE_NONE, item >= ITEM_NONE_FE, item)) { return PLAYER_IA_NONE; } else if (item == ITEM_LAST_USED) { return PLAYER_IA_SWORD_CS; } else if (item == ITEM_FISHING_POLE) { return PLAYER_IA_FISHING_POLE; - // #region SOH [Enhancement] Added to prevent crashes with assignable equipment - } else if (item >= ITEM_TUNIC_KOKIRI && item <= ITEM_BOOTS_HOVER) { - return PLAYER_IA_NONE; - // #endregion } else { return sItemActions[item]; } @@ -2572,7 +2568,7 @@ void Player_ProcessItemButtons(Player* this, PlayState* play) { if ((item < ITEM_NONE_FE) && (Player_ItemToItemAction(item) == this->heldItemAction)) { sHeldItemButtonIsHeldDown = true; } - } else { + } else if (GameInteractor_Should(VB_CHANGE_HELD_ITEM_AND_USE_ITEM, true, item)) { this->heldItemButton = i; Player_UseItem(play, this, item); } @@ -11883,45 +11879,6 @@ static Vec3f D_80854814 = { 0.0f, 0.0f, 200.0f }; static f32 sWaterConveyorSpeeds[] = { 2.0f, 4.0f, 7.0f }; static f32 sFloorConveyorSpeeds[] = { 0.5f, 1.0f, 3.0f }; -void Player_UseTunicBoots(Player* this, PlayState* play) { - // Boots and tunics equip despite state - if ( - this->stateFlags1 & (PLAYER_STATE1_INPUT_DISABLED | PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE | PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD) || - this->stateFlags2 & PLAYER_STATE2_OCARINA_PLAYING - ) { - return; - } - - s32 i; - for (i = 0; i < ARRAY_COUNT(sItemButtons); i++) { - if (CHECK_BTN_ALL(sControlInput->press.button, sItemButtons[i])) { - break; - } - } - s32 item = Player_GetItemOnButton(play, i); - if (item >= ITEM_TUNIC_KOKIRI && item <= ITEM_BOOTS_HOVER) { - if (item >= ITEM_BOOTS_KOKIRI) { - u16 bootsValue = item - ITEM_BOOTS_KOKIRI + 1; - if (CUR_EQUIP_VALUE(EQUIP_TYPE_BOOTS) == bootsValue) { - Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_KOKIRI); - } else { - Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, bootsValue); - } - Player_SetEquipmentData(play, this); - func_808328EC(this, CUR_EQUIP_VALUE(EQUIP_TYPE_BOOTS) == EQUIP_VALUE_BOOTS_IRON ? NA_SE_PL_WALK_HEAVYBOOTS : NA_SE_PL_CHANGE_ARMS); - } else { - u16 tunicValue = item - ITEM_TUNIC_KOKIRI + 1; - if (CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC) == tunicValue) { - Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_KOKIRI); - } else { - Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, tunicValue); - } - Player_SetEquipmentData(play, this); - func_808328EC(this, NA_SE_PL_CHANGE_ARMS); - } - } -} - void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { s32 pad; @@ -12218,9 +12175,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { sUseHeldItem = sHeldItemButtonIsHeldDown = 0; sSavedCurrentMask = this->currentMask; - if (!(this->stateFlags3 & PLAYER_STATE3_PAUSE_ACTION_FUNC)) { + if (GameInteractor_Should(VB_EXECUTE_PLAYER_ACTION_FUNC, !(this->stateFlags3 & PLAYER_STATE3_PAUSE_ACTION_FUNC), input)) { this->actionFunc(this, play); - Player_UseTunicBoots(this, play); } Player_UpdateCamAndSeqModes(play, this); From 40f2e16842b0179649334dc961fbfb60b52ff66c Mon Sep 17 00:00:00 2001 From: Archez Date: Tue, 4 Feb 2025 04:48:41 -0500 Subject: [PATCH 16/68] Macos game mode support (#4993) * Remove macos startup script and rework cpack bundling --------- Co-authored-by: Lars-Christian Selland * Add helper for creating mods folder --------- Co-authored-by: Lars-Christian Selland --------- Co-authored-by: Lars-Christian Selland --- CMake/Packaging-2.cmake | 1 - CMakeLists.txt | 5 ++++- soh/CMakeLists.txt | 4 ++-- soh/macosx/Info.plist.in | 5 +++++ soh/macosx/soh-macos.sh.in | 19 ------------------- soh/soh/OTRGlobals.cpp | 21 +++++++++++++++++++++ 6 files changed, 32 insertions(+), 23 deletions(-) delete mode 100755 soh/macosx/soh-macos.sh.in diff --git a/CMake/Packaging-2.cmake b/CMake/Packaging-2.cmake index 38fcc59f3..a29635eac 100644 --- a/CMake/Packaging-2.cmake +++ b/CMake/Packaging-2.cmake @@ -24,6 +24,5 @@ if (CPACK_GENERATOR MATCHES "Bundle") set(CPACK_BUNDLE_NAME "soh") set(CPACK_BUNDLE_PLIST "macosx/Info.plist") set(CPACK_BUNDLE_ICON "macosx/soh.icns") - set(CPACK_BUNDLE_STARTUP_COMMAND "macosx/soh-macos.sh") set(CPACK_BUNDLE_APPLE_CERT_APP "-") endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bdaf1de9..edbe5b44b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -272,9 +272,12 @@ install(DIRECTORY ${CMAKE_BINARY_DIR}/assets PERMISSIONS ${PROGRAM_PERMISSIONS_EXECUTE} ) +# Rename the installed soh binary to drop the macos suffix +INSTALL(CODE "FILE(RENAME \${CMAKE_INSTALL_PREFIX}/../MacOS/soh-macos \${CMAKE_INSTALL_PREFIX}/../MacOS/soh)") + install(CODE " include(BundleUtilities) - fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/soh-macos\" \"\" \"${dirs}\") + fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/../MacOS/soh\" \"\" \"${dirs}\") ") endif() diff --git a/soh/CMakeLists.txt b/soh/CMakeLists.txt index 8218588e4..b4ee6ed7f 100644 --- a/soh/CMakeLists.txt +++ b/soh/CMakeLists.txt @@ -702,7 +702,7 @@ else() ) endif() -if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS") +if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|NintendoSwitch|CafeOS") INSTALL(TARGETS soh DESTINATION . COMPONENT ship) endif() @@ -720,7 +720,7 @@ execute_process(COMMAND ${CURL} -sSfL https://raw.githubusercontent.com/gabomdq/ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/macosx/Info.plist.in ${CMAKE_BINARY_DIR}/macosx/Info.plist @ONLY) -configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/macosx/soh-macos.sh.in ${CMAKE_BINARY_DIR}/macosx/soh-macos.sh @ONLY) +INSTALL(TARGETS soh DESTINATION ../MacOS COMPONENT ship) INSTALL(FILES ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt DESTINATION ../MacOS COMPONENT ship) INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.otr DESTINATION ../Resources COMPONENT ship) elseif(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "NintendoSwitch|CafeOS") diff --git a/soh/macosx/Info.plist.in b/soh/macosx/Info.plist.in index 61316a18f..350c857f6 100644 --- a/soh/macosx/Info.plist.in +++ b/soh/macosx/Info.plist.in @@ -33,6 +33,11 @@ public.app-category.games LSMinimumSystemVersion 10.15 + LSEnvironment + + SHIP_HOME + ~/Library/Application Support/com.shipofharkinian.soh + LSArchitecturePriority arm64 diff --git a/soh/macosx/soh-macos.sh.in b/soh/macosx/soh-macos.sh.in deleted file mode 100755 index b90bd22e1..000000000 --- a/soh/macosx/soh-macos.sh.in +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -SNAME="$(dirname $0)" -export SHIP_HOME="$HOME/Library/Application Support/com.shipofharkinian.soh" -export SNAME -export RESPATH="${SNAME%/MacOS*}/Resources" -export LIBPATH="${SNAME%/MacOS*}/Frameworks" -export DYLD_FALLBACK_LIBRARY_PATH="$LIBPATH" - -if [ ! -e "$SHIP_HOME" ]; then mkdir "$SHIP_HOME"; fi - -if [ ! -e "$SHIP_HOME"/mods ]; then - mkdir -p "$SHIP_HOME"/mods - touch "$SHIP_HOME"/mods/custom_otr_files_go_here.txt -fi - -"$RESPATH"/soh-macos - -exit diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index c19b186db..d128c0eba 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -1038,6 +1038,23 @@ bool PathTestCleanup(FILE* tfile) { return true; } +void CheckAndCreateModFolder() { + try { + std::string modsPath = Ship::Context::LocateFileAcrossAppDirs("mods", appShortName); + if (!std::filesystem::exists(modsPath)) { + // Create mods folder relative to app dir + modsPath = Ship::Context::GetPathRelativeToAppDirectory("mods", appShortName); + std::string filePath = modsPath + "/custom_mod_files_go_here.txt"; + if (std::filesystem::create_directories(modsPath)) { + std::ofstream(filePath).close(); + } + } + } catch (std::filesystem::filesystem_error const& ex) { + // Couldn't make the folder, continue silently + return; + } +} + extern "C" void InitOTR() { #ifdef __SWITCH__ @@ -1083,6 +1100,10 @@ extern "C" void InitOTR() { } #endif +#if not defined(__SWITCH__) && not defined(__WIIU__) + CheckAndCreateModFolder(); +#endif + CheckSoHOTRVersion(Ship::Context::GetPathRelativeToAppBundle("soh.otr")); if (!std::filesystem::exists(Ship::Context::LocateFileAcrossAppDirs("oot-mq.otr", appShortName)) && From e44877cca87b17a23b6018cf9bf9321e77e066e7 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Tue, 4 Feb 2025 01:49:31 -0800 Subject: [PATCH 17/68] implement RemoveSpinAttackDarkness using shipinit and custom update func (#4987) Co-authored-by: Pepe20129 <72659707+Pepe20129@users.noreply.github.com> --- .../Enhancements/RemoveSpinAttackDarkness.cpp | 36 +++++++++++++++++++ soh/soh/SohGui/SohMenuBar.cpp | 2 ++ 2 files changed, 38 insertions(+) create mode 100644 soh/soh/Enhancements/RemoveSpinAttackDarkness.cpp diff --git a/soh/soh/Enhancements/RemoveSpinAttackDarkness.cpp b/soh/soh/Enhancements/RemoveSpinAttackDarkness.cpp new file mode 100644 index 000000000..20beb193a --- /dev/null +++ b/soh/soh/Enhancements/RemoveSpinAttackDarkness.cpp @@ -0,0 +1,36 @@ +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/ShipInit.hpp" + +extern "C" { +#include "src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.h" +} + +void Custom_EnMThunder_Update(Actor* thisx, PlayState* play) { + EnMThunder* enMThunder = (EnMThunder*)thisx; + f32 blueRadius; + s32 redGreen; + + enMThunder->actionFunc(enMThunder, play); + // don't call this part, it's what makes the spin attack darkness happen + // func_80A9F314(play, this->unk_1BC); + blueRadius = enMThunder->unk_1AC; + redGreen = (u32)(blueRadius * 255.0f) & 0xFF; + Lights_PointNoGlowSetInfo(&enMThunder->lightInfo, enMThunder->actor.world.pos.x, enMThunder->actor.world.pos.y, + enMThunder->actor.world.pos.z, redGreen, redGreen, (u32)(blueRadius * 100.0f), + (s32)(blueRadius * 800.0f)); +} + +void OnEnMThunderInitReplaceUpdateWithCustom(void* thunder) { + EnMThunder* enMThunder = (EnMThunder*)thunder; + enMThunder->actor.update = Custom_EnMThunder_Update; +} + +#define CVAR_REMOVESPINATTACKDARKNESS_NAME CVAR_ENHANCEMENT("RemoveSpinAttackDarkness") +#define CVAR_REMOVESPINATTACKDARKNESS_DEFAULT 0 +#define CVAR_REMOVESPINATTACKDARKNESS_VALUE CVarGetInteger(CVAR_REMOVESPINATTACKDARKNESS_NAME, CVAR_REMOVESPINATTACKDARKNESS_DEFAULT) + +void RegisterCustomEnMThunderUpdate() { + COND_ID_HOOK(OnActorInit, ACTOR_EN_M_THUNDER, CVAR_REMOVESPINATTACKDARKNESS_VALUE != CVAR_REMOVESPINATTACKDARKNESS_DEFAULT, OnEnMThunderInitReplaceUpdateWithCustom); +} + +static RegisterShipInitFunc initFunc(RegisterCustomEnMThunderUpdate, { CVAR_REMOVESPINATTACKDARKNESS_NAME }); diff --git a/soh/soh/SohGui/SohMenuBar.cpp b/soh/soh/SohGui/SohMenuBar.cpp index e5e52c71d..f1c86bc69 100644 --- a/soh/soh/SohGui/SohMenuBar.cpp +++ b/soh/soh/SohGui/SohMenuBar.cpp @@ -1460,6 +1460,8 @@ void DrawEnhancementsMenu() { UIWidgets::Tooltip("Shows what items you have collected in the file select screen, like in N64 randomizer"); UIWidgets::PaddedEnhancementCheckbox("Better ammo rendering in pause menu", CVAR_ENHANCEMENT("BetterAmmoRendering"), true, false); UIWidgets::Tooltip("Ammo counts in the pause menu will work correctly regardless of the position of items in the inventory"); + UIWidgets::PaddedEnhancementCheckbox("Remove spin attack darkness", CVAR_ENHANCEMENT("RemoveSpinAttackDarkness"), true, false); + UIWidgets::Tooltip("Remove the darkness that appears when charging a spin attack"); ImGui::EndMenu(); } From 811ffa5e98a4833153f4b897379d11be8c8e75e7 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Tue, 4 Feb 2025 02:32:44 -0800 Subject: [PATCH 18/68] fix rainbow all (#4991) --- soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp index 0bdd3d10d..c07abd646 100644 --- a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp +++ b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp @@ -1969,6 +1969,7 @@ void CosmeticsEditorWindow::DrawElement() { ) ) { CVarSetInteger(cosmeticOption.rainbowCvar, 1); + CVarSetInteger(cosmeticOption.changedCvar, 1); } } Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); From b2cb3ff87d0cfbe0e5bcd85cf16e4130d89a7aae Mon Sep 17 00:00:00 2001 From: aMannus Date: Tue, 4 Feb 2025 15:08:28 +0100 Subject: [PATCH 19/68] Unlock locked interior doors with overworld keys enabled (#4948) * Update LockOverworldDoors.cpp * Remove key logic from interiors * Fix entrances, this time while awake --- .../randomizer/LockOverworldDoors.cpp | 26 +------------------ .../location_access/overworld/graveyard.cpp | 4 +-- .../location_access/overworld/kakariko.cpp | 14 +++++----- .../location_access/overworld/lake_hylia.cpp | 6 ++--- .../overworld/lon_lon_ranch.cpp | 8 +++--- .../location_access/overworld/market.cpp | 14 +++++----- 6 files changed, 24 insertions(+), 48 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp b/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp index b8b8f4731..96bb9823c 100644 --- a/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp +++ b/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp @@ -16,7 +16,6 @@ std::map lookupTable = { {{ SCENE_MARKET_ENTRANCE_DAY, 447 }, RAND_INF_GUARD_HOUSE_UNLOCKED }, {{ SCENE_MARKET_ENTRANCE_NIGHT, 447 }, RAND_INF_GUARD_HOUSE_UNLOCKED }, {{ SCENE_MARKET_ENTRANCE_RUINS, 447 }, RAND_INF_GUARD_HOUSE_UNLOCKED }, - {{ SCENE_MARKET_GUARD_HOUSE, 447 }, RAND_INF_GUARD_HOUSE_UNLOCKED }, {{ SCENE_MARKET_DAY, 4543 }, RAND_INF_MARKET_BAZAAR_UNLOCKED }, {{ SCENE_MARKET_NIGHT, 4753 }, RAND_INF_MARKET_BAZAAR_UNLOCKED }, {{ SCENE_MARKET_DAY, 1471 }, RAND_INF_MARKET_POTION_SHOP_UNLOCKED }, @@ -25,22 +24,16 @@ std::map lookupTable = { {{ SCENE_MARKET_NIGHT, 3728 }, RAND_INF_MASK_SHOP_UNLOCKED }, {{ SCENE_MARKET_DAY, 2495 }, RAND_INF_MARKET_SHOOTING_GALLERY_UNLOCKED }, {{ SCENE_MARKET_NIGHT, 2703 }, RAND_INF_MARKET_SHOOTING_GALLERY_UNLOCKED }, - {{ SCENE_SHOOTING_GALLERY, 447 }, RAND_INF_MARKET_SHOOTING_GALLERY_UNLOCKED }, {{ SCENE_MARKET_DAY, 5567 }, RAND_INF_BOMBCHU_BOWLING_UNLOCKED }, {{ SCENE_MARKET_NIGHT, 5567 }, RAND_INF_BOMBCHU_BOWLING_UNLOCKED }, - {{ SCENE_BOMBCHU_BOWLING_ALLEY, 447 }, RAND_INF_BOMBCHU_BOWLING_UNLOCKED }, {{ SCENE_MARKET_DAY, 653 }, RAND_INF_TREASURE_CHEST_GAME_BUILDING_UNLOCKED }, {{ SCENE_MARKET_NIGHT, 447 }, RAND_INF_TREASURE_CHEST_GAME_BUILDING_UNLOCKED }, - {{ SCENE_TREASURE_BOX_SHOP, 6591 }, RAND_INF_TREASURE_CHEST_GAME_BUILDING_UNLOCKED }, {{ SCENE_BACK_ALLEY_DAY, 2689 }, RAND_INF_BOMBCHU_SHOP_UNLOCKED }, {{ SCENE_BACK_ALLEY_NIGHT, 2495 }, RAND_INF_BOMBCHU_SHOP_UNLOCKED }, {{ SCENE_BACK_ALLEY_DAY, 447 }, RAND_INF_RICHARDS_HOUSE_UNLOCKED }, {{ SCENE_BACK_ALLEY_NIGHT, 447 }, RAND_INF_RICHARDS_HOUSE_UNLOCKED }, - {{ SCENE_DOG_LADY_HOUSE, 447 }, RAND_INF_RICHARDS_HOUSE_UNLOCKED }, - {{ SCENE_DOG_LADY_HOUSE, 447 }, RAND_INF_RICHARDS_HOUSE_UNLOCKED }, {{ SCENE_BACK_ALLEY_HOUSE, 447 }, RAND_INF_ALLEY_HOUSE_UNLOCKED }, {{ SCENE_BACK_ALLEY_DAY, 1665 }, RAND_INF_ALLEY_HOUSE_UNLOCKED }, - {{ SCENE_BACK_ALLEY_NIGHT, 1471 }, RAND_INF_ALLEY_HOUSE_UNLOCKED }, {{ SCENE_KAKARIKO_VILLAGE, 6801 }, RAND_INF_KAK_BAZAAR_UNLOCKED }, // Adult Night {{ SCENE_KAKARIKO_VILLAGE, 6591 }, RAND_INF_KAK_BAZAAR_UNLOCKED }, // Adult Day {{ SCENE_KAKARIKO_VILLAGE, 6813 }, RAND_INF_KAK_BAZAAR_UNLOCKED }, // Child Day @@ -51,35 +44,23 @@ std::map lookupTable = { {{ SCENE_KAKARIKO_VILLAGE, 7822 }, RAND_INF_KAK_POTION_SHOP_UNLOCKED }, // Adult Night {{ SCENE_KAKARIKO_VILLAGE, 7615 }, RAND_INF_KAK_POTION_SHOP_UNLOCKED }, // Child Day/Night and Adult Day {{ SCENE_KAKARIKO_VILLAGE, 2495 }, RAND_INF_BOSS_HOUSE_UNLOCKED }, - {{ SCENE_KAKARIKO_CENTER_GUEST_HOUSE, 447 }, RAND_INF_BOSS_HOUSE_UNLOCKED }, {{ SCENE_KAKARIKO_VILLAGE, 3750 }, RAND_INF_GRANNYS_POTION_SHOP_UNLOCKED }, // Child {{ SCENE_KAKARIKO_VILLAGE, 3519 }, RAND_INF_GRANNYS_POTION_SHOP_UNLOCKED }, // Adult - {{ SCENE_POTION_SHOP_GRANNY, 447 }, RAND_INF_GRANNYS_POTION_SHOP_UNLOCKED }, {{ SCENE_KAKARIKO_VILLAGE, 5567 }, RAND_INF_SKULLTULA_HOUSE_UNLOCKED }, - {{ SCENE_HOUSE_OF_SKULLTULA, 447 }, RAND_INF_SKULLTULA_HOUSE_UNLOCKED }, {{ SCENE_KAKARIKO_VILLAGE, 1471 }, RAND_INF_IMPAS_HOUSE_UNLOCKED }, - {{ SCENE_IMPAS_HOUSE, 447 }, RAND_INF_IMPAS_HOUSE_UNLOCKED }, {{ SCENE_KAKARIKO_VILLAGE, 447 }, RAND_INF_WINDMILL_UNLOCKED }, - {{ SCENE_WINDMILL_AND_DAMPES_GRAVE, 2495 }, RAND_INF_WINDMILL_UNLOCKED }, {{ SCENE_KAKARIKO_VILLAGE, 4543 }, RAND_INF_KAK_SHOOTING_GALLERY_UNLOCKED }, // Day {{ SCENE_KAKARIKO_VILLAGE, 4751 }, RAND_INF_KAK_SHOOTING_GALLERY_UNLOCKED }, // Night - {{ SCENE_SHOOTING_GALLERY, 447 }, RAND_INF_KAK_SHOOTING_GALLERY_UNLOCKED }, {{ SCENE_GRAVEYARD, 645 }, RAND_INF_DAMPES_HUT_UNLOCKED }, // Child Day {{ SCENE_GRAVEYARD, 447 }, RAND_INF_DAMPES_HUT_UNLOCKED }, // Child Evening & Adult {{ SCENE_GRAVEYARD, 774 }, RAND_INF_DAMPES_HUT_UNLOCKED }, // Child Night (After Dampes Tour) - {{ SCENE_GRAVEKEEPERS_HUT, 447 }, RAND_INF_DAMPES_HUT_UNLOCKED }, {{ SCENE_LON_LON_RANCH, 2495 }, RAND_INF_TALONS_HOUSE_UNLOCKED }, {{ SCENE_LON_LON_RANCH, 2473 }, RAND_INF_TALONS_HOUSE_UNLOCKED }, {{ SCENE_LON_LON_RANCH, 2729 }, RAND_INF_TALONS_HOUSE_UNLOCKED }, - {{ SCENE_LON_LON_BUILDINGS, 1471 }, RAND_INF_TALONS_HOUSE_UNLOCKED }, {{ SCENE_LON_LON_RANCH, 1471 }, RAND_INF_STABLES_UNLOCKED }, - {{ SCENE_STABLE, 447 }, RAND_INF_STABLES_UNLOCKED }, {{ SCENE_LON_LON_RANCH, 447 }, RAND_INF_BACK_TOWER_UNLOCKED }, - {{ SCENE_LON_LON_BUILDINGS, 447 }, RAND_INF_BACK_TOWER_UNLOCKED }, {{ SCENE_LAKE_HYLIA, 447 }, RAND_INF_HYLIA_LAB_UNLOCKED }, - {{ SCENE_LAKESIDE_LABORATORY, 447 }, RAND_INF_HYLIA_LAB_UNLOCKED }, {{ SCENE_LAKE_HYLIA, 1471 }, RAND_INF_FISHING_HOLE_UNLOCKED }, - {{ SCENE_FISHING_POND, 447 }, RAND_INF_FISHING_HOLE_UNLOCKED }, }; static void OnDoorInit(void* actorRef) { @@ -88,12 +69,7 @@ static void OnDoorInit(void* actorRef) { auto it = lookupTable.find({gPlayState->sceneNum, enDoor->actor.params}); if (it != lookupTable.end()) { - if (it->second == RAND_INF_MARKET_SHOOTING_GALLERY_UNLOCKED && gSaveContext.entranceIndex == 0x3B) { - // Adult shooting gallery uses same scene and door params as child, so we manually handle it - enDoor->randomizerInf = RAND_INF_KAK_SHOOTING_GALLERY_UNLOCKED; - } else { - enDoor->randomizerInf = it->second; - } + enDoor->randomizerInf = it->second; if (!Flags_GetRandomizerInf(enDoor->randomizerInf)) { // We don't want to override checkable doors, we still want those to not be openable even if they have a key if (((enDoor->actor.params >> 7) & 7) != DOOR_CHECKABLE) { diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp index 727431b1f..87a2e3b48 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp @@ -104,7 +104,7 @@ void RegionTable_Init_Graveyard() { LOCATION(RC_DAMPE_HINT, logic->IsAdult), }, { //Exits - Entrance(RR_THE_GRAVEYARD, []{return logic->CanOpenOverworldDoor(RG_DAMPES_HUT_KEY);}), + Entrance(RR_THE_GRAVEYARD, []{return true;}), }); areaTable[RR_GRAVEYARD_WARP_PAD_REGION] = Region("Graveyard Warp Pad Region", "Graveyard", {RA_THE_GRAVEYARD}, NO_DAY_NIGHT_CYCLE, { @@ -120,4 +120,4 @@ void RegionTable_Init_Graveyard() { Entrance(RR_THE_GRAVEYARD, []{return true;}), Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_GY_SHADOW_FIRE_ARROWS) && logic->IsAdult && logic->CanUse(RG_FIRE_ARROWS));}), }); -} \ No newline at end of file +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp index 8fe55c45f..aff90914e 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp @@ -104,7 +104,7 @@ void RegionTable_Init_Kakariko() { EventAccess(&logic->WakeUpAdultTalon, []{return logic->IsAdult && logic->CanUse(RG_POCKET_EGG);}), }, {}, { //Exits - Entrance(RR_KAKARIKO_VILLAGE, []{return logic->CanOpenOverworldDoor(RG_BOSS_HOUSE_KEY);}), + Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), }); areaTable[RR_KAK_HOUSE_OF_SKULLTULA] = Region("Kak House of Skulltula", "Kak House of Skulltula", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -117,7 +117,7 @@ void RegionTable_Init_Kakariko() { LOCATION(RC_KAK_100_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 100), }, { //Exits - Entrance(RR_KAKARIKO_VILLAGE, []{return logic->CanOpenOverworldDoor(RG_SKULLTULA_HOUSE_KEY);}), + Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), }); areaTable[RR_KAK_IMPAS_HOUSE] = Region("Kak Impas House", "Kak Impas House", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -125,7 +125,7 @@ void RegionTable_Init_Kakariko() { LOCATION(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)), }, { //Exits - Entrance(RR_KAKARIKO_VILLAGE, []{return logic->CanOpenOverworldDoor(RG_IMPAS_HOUSE_KEY);}), + Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), }); areaTable[RR_KAK_IMPAS_HOUSE_BACK] = Region("Kak Impas House Back", "Kak Impas House", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -146,7 +146,7 @@ void RegionTable_Init_Kakariko() { LOCATION(RC_SONG_FROM_WINDMILL, logic->IsAdult && logic->HasItem(RG_FAIRY_OCARINA)), }, { //Exits - Entrance(RR_KAKARIKO_VILLAGE, []{return logic->CanOpenOverworldDoor(RG_WINDMILL_KEY);}), + Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), }); areaTable[RR_KAK_BAZAAR] = Region("Kak Bazaar", "Kak Bazaar", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -169,7 +169,7 @@ void RegionTable_Init_Kakariko() { LOCATION(RC_KAK_SHOOTING_GALLERY_REWARD, logic->HasItem(RG_CHILD_WALLET) && logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)), }, { //Exits - Entrance(RR_KAKARIKO_VILLAGE, []{return logic->CanOpenOverworldDoor(RG_KAK_SHOOTING_GALLERY_KEY);}), + Entrance(RR_KAKARIKO_VILLAGE, []{return true;}), }); areaTable[RR_KAK_POTION_SHOP_FRONT] = Region("Kak Potion Shop Front", "Kak Potion Shop", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -203,7 +203,7 @@ void RegionTable_Init_Kakariko() { LOCATION(RC_KAK_GRANNYS_SHOP, logic->IsAdult && (logic->CanUse(RG_ODD_MUSHROOM) || logic->TradeQuestStep(RG_ODD_MUSHROOM))), }, { // Exits - Entrance(RR_KAK_BACKYARD, []{return logic->CanOpenOverworldDoor(RG_GRANNYS_POTION_SHOP_KEY);}), + Entrance(RR_KAK_BACKYARD, []{return true;}), }); areaTable[RR_KAK_REDEAD_GROTTO] = Region("Kak Redead Grotto", "Kak Redead Grotto", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -239,4 +239,4 @@ void RegionTable_Init_Kakariko() { Entrance(RR_KAKARIKO_VILLAGE, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->DrainWell;}), Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild || (logic->DrainWell && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF));}), }); -} \ No newline at end of file +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp index 8833441e9..447d039d2 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp @@ -70,7 +70,7 @@ void RegionTable_Init_LakeHylia() { LOCATION(RC_LH_LAB_RIGHT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), }, { //Exits - Entrance(RR_LAKE_HYLIA, []{return logic->CanOpenOverworldDoor(RG_HYLIA_LAB_KEY);}), + Entrance(RR_LAKE_HYLIA, []{return true;}), }); // TODO: should some of these helpers be done via events instead? @@ -115,7 +115,7 @@ void RegionTable_Init_LakeHylia() { LOCATION(RC_FISHING_POLE_HINT, true), }, { //Exits - Entrance(RR_LH_FISHING_ISLAND, []{return logic->CanOpenOverworldDoor(RG_FISHING_HOLE_KEY);}), + Entrance(RR_LH_FISHING_ISLAND, []{return true;}), }); areaTable[RR_LH_GROTTO] = Region("LH Grotto", "LH Grotto", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -128,4 +128,4 @@ void RegionTable_Init_LakeHylia() { //Exits Entrance(RR_LAKE_HYLIA, []{return true;}), }); -} \ No newline at end of file +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp index fa1d7451e..283150415 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp @@ -39,7 +39,7 @@ void RegionTable_Init_LonLonRanch() { LOCATION(RC_LLR_TALONS_HOUSE_POT_3, logic->CanBreakPots()), }, { //Exits - Entrance(RR_LON_LON_RANCH, []{return logic->CanOpenOverworldDoor(RG_TALONS_HOUSE_KEY);}), + Entrance(RR_LON_LON_RANCH, []{return true;}), }); areaTable[RR_LLR_STABLES] = Region("LLR Stables", "LLR Stables", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -48,7 +48,7 @@ void RegionTable_Init_LonLonRanch() { LOCATION(RC_LLR_STABLES_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)), }, { //Exits - Entrance(RR_LON_LON_RANCH, []{return logic->CanOpenOverworldDoor(RG_STABLES_KEY);}), + Entrance(RR_LON_LON_RANCH, []{return true;}), }); areaTable[RR_LLR_TOWER] = Region("LLR Tower", "LLR Tower", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -58,7 +58,7 @@ void RegionTable_Init_LonLonRanch() { LOCATION(RC_LLR_TOWER_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)), }, { //Exits - Entrance(RR_LON_LON_RANCH, []{return logic->CanOpenOverworldDoor(RG_BACK_TOWER_KEY);}), + Entrance(RR_LON_LON_RANCH, []{return true;}), }); areaTable[RR_LLR_GROTTO] = Region("LLR Grotto", "LLR Grotto", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -71,4 +71,4 @@ void RegionTable_Init_LonLonRanch() { //Exits Entrance(RR_LON_LON_RANCH, []{return true;}), }); -} \ No newline at end of file +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp index e0ef67aa5..0b010c8a7 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp @@ -98,7 +98,7 @@ void RegionTable_Init_Market() { LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_11, logic->IsAdult && logic->CanBreakPots()), }, { //Exits - Entrance(RR_MARKET_ENTRANCE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}), + Entrance(RR_MARKET_ENTRANCE, []{return true;}), }); areaTable[RR_MARKET_BAZAAR] = Region("Market Bazaar", "Market Bazaar", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -133,7 +133,7 @@ void RegionTable_Init_Market() { LOCATION(RC_MARKET_SHOOTING_GALLERY_REWARD, logic->IsChild && logic->HasItem(RG_CHILD_WALLET)), }, { //Exits - Entrance(RR_THE_MARKET, []{return logic->CanOpenOverworldDoor(RG_MARKET_SHOOTING_GALLERY_KEY);}), + Entrance(RR_THE_MARKET, []{return true;}), }); areaTable[RR_MARKET_BOMBCHU_BOWLING] = Region("Market Bombchu Bowling", "Market Bombchu Bowling", {}, NO_DAY_NIGHT_CYCLE, { @@ -145,7 +145,7 @@ void RegionTable_Init_Market() { LOCATION(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, logic->CouldPlayBowling && logic->BombchusEnabled()), }, { //Exits - Entrance(RR_THE_MARKET, []{return logic->CanOpenOverworldDoor(RG_BOMBCHU_BOWLING_KEY);}), + Entrance(RR_THE_MARKET, []{return true;}), }); areaTable[RR_MARKET_POTION_SHOP] = Region("Market Potion Shop", "Market Potion Shop", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -179,7 +179,7 @@ void RegionTable_Init_Market() { LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 5)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))), }, { //Exits - Entrance(RR_THE_MARKET, []{return logic->CanOpenOverworldDoor(RG_TREASURE_CHEST_GAME_BUILDING_KEY);}), + Entrance(RR_THE_MARKET, []{return true;}), }); areaTable[RR_MARKET_BOMBCHU_SHOP] = Region("Market Bombchu Shop", "Market Bombchu Shop", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -202,7 +202,7 @@ void RegionTable_Init_Market() { LOCATION(RC_MARKET_LOST_DOG, logic->IsChild && logic->AtNight), }, { //Exits - Entrance(RR_MARKET_BACK_ALLEY, []{return logic->CanOpenOverworldDoor(RG_RICHARDS_HOUSE_KEY);}), + Entrance(RR_MARKET_BACK_ALLEY, []{return true;}), }); areaTable[RR_MARKET_MAN_IN_GREEN_HOUSE] = Region("Market Man in Green House", "Market Man in Green House", {}, NO_DAY_NIGHT_CYCLE, {}, { @@ -212,6 +212,6 @@ void RegionTable_Init_Market() { LOCATION(RC_MK_BACK_ALLEY_HOUSE_POT_3, logic->CanBreakPots()), }, { //Exits - Entrance(RR_MARKET_BACK_ALLEY, []{return logic->CanOpenOverworldDoor(RG_ALLEY_HOUSE_KEY);}), + Entrance(RR_MARKET_BACK_ALLEY, []{return true;}), }); -} \ No newline at end of file +} From 3cd4851474ae7d28bb0de627ac51b884c83965fb Mon Sep 17 00:00:00 2001 From: Archez Date: Tue, 4 Feb 2025 18:03:35 -0500 Subject: [PATCH 20/68] Defer scene DList resource loading to in-game and support alt pathing (#4986) * Defer scene dlist resource loading to in-game and support alt pathing * feedback --- .../importer/scenecommand/SetMeshFactory.cpp | 137 +++++++++++------- 1 file changed, 82 insertions(+), 55 deletions(-) diff --git a/soh/soh/resource/importer/scenecommand/SetMeshFactory.cpp b/soh/soh/resource/importer/scenecommand/SetMeshFactory.cpp index cdca68f34..b53a36b85 100644 --- a/soh/soh/resource/importer/scenecommand/SetMeshFactory.cpp +++ b/soh/soh/resource/importer/scenecommand/SetMeshFactory.cpp @@ -36,30 +36,38 @@ SetMeshFactory::ReadResource(std::shared_ptr initData, s for (int32_t i = 0; i < polyNum; i++) { if (setMesh->meshHeader.base.type == 0) { PolygonDlist dlist; + dlist.opa = nullptr; + dlist.xlu = nullptr; int32_t polyType = reader->ReadInt8(); // Unused std::string meshOpa = reader->ReadString(); std::string meshXlu = reader->ReadString(); - auto opaRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshOpa.c_str()); - auto xluRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshXlu.c_str()); - dlist.opa = meshOpa != "" ? (Gfx*)(opaRes ? opaRes->GetRawPointer() : nullptr) : 0; - dlist.xlu = meshXlu != "" ? (Gfx*)(xluRes ? xluRes->GetRawPointer() : nullptr) : 0; + // Enables alt-toggling support by setting maintained c_str references to DList resource after pushing to vector the first + // Defers resource loading later in game when the scene is drawn + if (meshOpa != "") { + meshOpa = "__OTR__" + meshOpa; + setMesh->opaPaths.push_back(meshOpa); + dlist.opa = (Gfx*)setMesh->opaPaths.back().c_str(); + } + if (meshXlu != "") { + meshXlu = "__OTR__" + meshXlu; + setMesh->xluPaths.push_back(meshXlu); + dlist.xlu = (Gfx*)setMesh->xluPaths.back().c_str(); + } - setMesh->opaPaths.push_back(meshOpa); - setMesh->xluPaths.push_back(meshXlu); setMesh->dlists.push_back(dlist); } else if (setMesh->meshHeader.base.type == 1) { PolygonDlist pType; + pType.opa = nullptr; + pType.xlu = nullptr; setMesh->meshHeader.polygon1.format = reader->ReadUByte(); - std::string imgOpa = reader->ReadString(); - std::string imgXlu = reader->ReadString(); - auto opaRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(imgOpa.c_str()); - auto xluRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(imgXlu.c_str()); - pType.opa = imgOpa != "" ? (Gfx*)(opaRes ? opaRes->GetRawPointer() : nullptr) : 0; - pType.xlu = imgXlu != "" ? (Gfx*)(xluRes ? xluRes->GetRawPointer() : nullptr) : 0; + // These strings are the same that are read and used below. Not sure why they get exported twice from the exporter. + // We read and ignore these to advance the reader. + reader->ReadString(); + reader->ReadString(); int32_t bgImageCount = reader->ReadUInt32(); setMesh->images.reserve(bgImageCount); @@ -104,17 +112,24 @@ SetMeshFactory::ReadResource(std::shared_ptr initData, s std::string meshOpa = reader->ReadString(); std::string meshXlu = reader->ReadString(); - opaRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshOpa.c_str()); - xluRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshXlu.c_str()); - pType.opa = meshOpa != "" ? (Gfx*)(opaRes ? opaRes->GetRawPointer() : nullptr) : 0; - pType.xlu = meshXlu != "" ? (Gfx*)(xluRes ? xluRes->GetRawPointer() : nullptr) : 0; + // Use long-lived maintained c_str references + if (meshOpa != "") { + meshOpa = "__OTR__" + meshOpa; + setMesh->opaPaths.push_back(meshOpa); + pType.opa = (Gfx*)setMesh->opaPaths.back().c_str(); + } + if (meshXlu != "") { + meshXlu = "__OTR__" + meshXlu; + setMesh->xluPaths.push_back(meshXlu); + pType.xlu = (Gfx*)setMesh->xluPaths.back().c_str(); + } - setMesh->opaPaths.push_back(meshOpa); - setMesh->xluPaths.push_back(meshXlu); setMesh->dlists.push_back(pType); } else if (setMesh->meshHeader.base.type == 2) { PolygonDlist2 dlist; - + dlist.opa = nullptr; + dlist.xlu = nullptr; + int32_t polyType = reader->ReadInt8(); // Unused dlist.pos.x = reader->ReadInt16(); dlist.pos.y = reader->ReadInt16(); @@ -124,13 +139,18 @@ SetMeshFactory::ReadResource(std::shared_ptr initData, s std::string meshOpa = reader->ReadString(); std::string meshXlu = reader->ReadString(); - auto opaRes = meshOpa != "" ? Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshOpa.c_str()) : nullptr; - auto xluRes = meshXlu != "" ? Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshXlu.c_str()) : nullptr; - dlist.opa = (Gfx*)(opaRes ? opaRes->GetRawPointer() : nullptr); - dlist.xlu = (Gfx*)(xluRes ? xluRes->GetRawPointer() : nullptr); + // Use long-lived maintained c_str references + if (meshOpa != "") { + meshOpa = "__OTR__" + meshOpa; + setMesh->opaPaths.push_back(meshOpa); + dlist.opa = (Gfx*)setMesh->opaPaths.back().c_str(); + } + if (meshXlu != "") { + meshXlu = "__OTR__" + meshXlu; + setMesh->xluPaths.push_back(meshXlu); + dlist.xlu = (Gfx*)setMesh->xluPaths.back().c_str(); + } - setMesh->opaPaths.push_back(meshOpa); - setMesh->xluPaths.push_back(meshXlu); setMesh->dlists2.push_back(dlist); } else { SPDLOG_ERROR("Tried to load mesh in SetMesh scene header with type that doesn't exist: {}", setMesh->meshHeader.base.type); @@ -194,38 +214,33 @@ std::shared_ptr SetMeshFactoryXML::ReadResource(std::shared_ptr if (setMesh->meshHeader.base.type == 0) { PolygonDlist dlist; + dlist.opa = nullptr; + dlist.xlu = nullptr; int32_t polyType = child->IntAttribute("PolyType"); // Unused std::string meshOpa = child->Attribute("MeshOpa"); std::string meshXlu = child->Attribute("MeshXlu"); + + // Enables alt-toggling support by setting maintained c_str references to DList resource after pushing to vector the first + // Defers resource loading later in game when the scene is drawn if (meshOpa != "") { - auto opaRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshOpa.c_str()); - dlist.opa = (Gfx*)(opaRes ? opaRes->GetRawPointer() : nullptr); - } else { - dlist.opa = 0; + meshOpa = "__OTR__" + meshOpa; + setMesh->opaPaths.push_back(meshOpa); + dlist.opa = (Gfx*)setMesh->opaPaths.back().c_str(); } - if (meshXlu != "") { - auto xluRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshXlu.c_str()); - dlist.xlu = (Gfx*)(xluRes ? xluRes->GetRawPointer() : nullptr); - } else { - dlist.xlu = 0; + meshXlu = "__OTR__" + meshXlu; + setMesh->xluPaths.push_back(meshXlu); + dlist.xlu = (Gfx*)setMesh->xluPaths.back().c_str(); } - setMesh->opaPaths.push_back(meshOpa); - setMesh->xluPaths.push_back(meshXlu); setMesh->dlists.push_back(dlist); } else if (setMesh->meshHeader.base.type == 1) { PolygonDlist pType; + pType.opa = nullptr; + pType.xlu = nullptr; setMesh->meshHeader.polygon1.format = child->IntAttribute("Format"); - std::string imgOpa = child->Attribute("ImgOpa"); - std::string imgXlu = child->Attribute("ImgXlu"); - - auto opaRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(imgOpa.c_str()); - auto xluRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(imgXlu.c_str()); - pType.opa = imgOpa != "" ? (Gfx*)(opaRes ? opaRes->GetRawPointer() : nullptr) : 0; - pType.xlu = imgXlu != "" ? (Gfx*)(xluRes ? xluRes->GetRawPointer() : nullptr) : 0; int32_t bgImageCount = child->IntAttribute("BgImageCount"); setMesh->images.reserve(bgImageCount); @@ -279,16 +294,23 @@ std::shared_ptr SetMeshFactoryXML::ReadResource(std::shared_ptr std::string meshOpa = child->Attribute("MeshOpa"); std::string meshXlu = child->Attribute("MeshXlu"); - opaRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshOpa.c_str()); - xluRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshXlu.c_str()); - pType.opa = meshOpa != "" ? (Gfx*)(opaRes ? opaRes->GetRawPointer() : nullptr) : 0; - pType.xlu = meshXlu != "" ? (Gfx*)(xluRes ? xluRes->GetRawPointer() : nullptr) : 0; + // Use long-lived maintained c_str references + if (meshOpa != "") { + meshOpa = "__OTR__" + meshOpa; + setMesh->opaPaths.push_back(meshOpa); + pType.opa = (Gfx*)setMesh->opaPaths.back().c_str(); + } + if (meshXlu != "") { + meshXlu = "__OTR__" + meshXlu; + setMesh->xluPaths.push_back(meshXlu); + pType.xlu = (Gfx*)setMesh->xluPaths.back().c_str(); + } - setMesh->opaPaths.push_back(meshOpa); - setMesh->xluPaths.push_back(meshXlu); setMesh->dlists.push_back(pType); } else if (setMesh->meshHeader.base.type == 2) { PolygonDlist2 dlist; + dlist.opa = nullptr; + dlist.xlu = nullptr; int32_t polyType = child->IntAttribute("PolyType"); // Unused dlist.pos.x = child->IntAttribute("PosX"); @@ -299,13 +321,18 @@ std::shared_ptr SetMeshFactoryXML::ReadResource(std::shared_ptr std::string meshOpa = child->Attribute("MeshOpa"); std::string meshXlu = child->Attribute("MeshXlu"); - auto opaRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshOpa.c_str()); - auto xluRes = Ship::Context::GetInstance()->GetResourceManager()->LoadResourceProcess(meshXlu.c_str()); - dlist.opa = meshOpa != "" ? (Gfx*)(opaRes ? opaRes->GetRawPointer() : nullptr) : 0; - dlist.xlu = meshXlu != "" ? (Gfx*)(xluRes ? xluRes->GetRawPointer() : nullptr) : 0; + // Use long-lived maintained c_str references + if (meshOpa != "") { + meshOpa = "__OTR__" + meshOpa; + setMesh->opaPaths.push_back(meshOpa); + dlist.opa = (Gfx*)setMesh->opaPaths.back().c_str(); + } + if (meshXlu != "") { + meshXlu = "__OTR__" + meshXlu; + setMesh->xluPaths.push_back(meshXlu); + dlist.xlu = (Gfx*)setMesh->xluPaths.back().c_str(); + } - setMesh->opaPaths.push_back(meshOpa); - setMesh->xluPaths.push_back(meshXlu); setMesh->dlists2.push_back(dlist); } else { SPDLOG_ERROR("Tried to load mesh in SetMesh scene header with type that doesn't exist: {}", setMesh->meshHeader.base.type); From 4044ab34c302ff101f3b439f41c93b1c92ed9dbb Mon Sep 17 00:00:00 2001 From: Malkierian Date: Wed, 5 Feb 2025 16:11:48 -0700 Subject: [PATCH 21/68] Add Fortress and Colossus entrance groups to the entrance tracker data, and adjusted the check tracker accordingly (for autoscroll). (#5001) --- .../randomizer/randomizer_check_tracker.cpp | 4 +- .../randomizer_entrance_tracker.cpp | 54 ++++++++++--------- .../randomizer/randomizer_entrance_tracker.h | 2 + 3 files changed, 32 insertions(+), 28 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index 51abc0db1..0b5178621 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -381,7 +381,9 @@ RandomizerCheckArea AreaFromEntranceGroup[] = { RCAREA_LON_LON_RANCH, RCAREA_LAKE_HYLIA, RCAREA_GERUDO_VALLEY, + RCAREA_GERUDO_FORTRESS, RCAREA_WASTELAND, + RCAREA_DESERT_COLOSSUS, RCAREA_MARKET, RCAREA_HYRULE_CASTLE, }; @@ -394,8 +396,6 @@ RandomizerCheckArea GetCheckArea() { if (ent != nullptr && !IsAreaScene(scene) && ent->type != ENTRANCE_TYPE_DUNGEON) { if (ent->source == "Desert Colossus" || ent->destination == "Desert Colossus") { area = RCAREA_DESERT_COLOSSUS; - } else if (ent->source == "Gerudo Fortress" || ent->destination == "Gerudo Fortress") { - area = RCAREA_GERUDO_FORTRESS; } else { area = AreaFromEntranceGroup[ent->dstGroup]; } diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp index 78de199d7..4c3cb971e 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp @@ -56,7 +56,9 @@ static std::string spoilerEntranceGroupNames[] = { "Lon Lon Ranch", "Lake Hylia", "Gerudo Valley", + "Gerudo Fortress", "Haunted Wasteland", + "Desert Colossus", "Market", "Hyrule Castle", }; @@ -310,35 +312,35 @@ const EntranceData entranceData[] = { { ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP, -1, SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE_BOSS), "Morpha Blue Warp", "Water Temple Blue Warp", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_ONE_WAY, "lh,bw", 1}, // Gerudo Area - { ENTR_HYRULE_FIELD_ROCKY_PATH, ENTR_GERUDO_VALLEY_EAST_EXIT, SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "Gerudo Valley East Exit", "Hyrule Field Rocky Path", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_OVERWORLD, "hf"}, - { ENTR_GERUDOS_FORTRESS_EAST_EXIT, ENTR_GERUDO_VALLEY_WEST_EXIT, SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "Gerudo Valley West Exit", "Gerudo Fortress East Exit", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_OVERWORLD, "gerudo fortress"}, - { ENTR_LAKE_HYLIA_RIVER_EXIT, -1, SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "Gerudo Valley River Exit", "Lake Hylia River Exit", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_OVERWORLD, "lh"}, - { ENTR_CARPENTERS_TENT_0, ENTR_GERUDO_VALLEY_OUTSIDE_TENT, SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "GV Carpenters' Tent Entry", "Carpenters' Tent", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_INTERIOR, "", 1}, - { ENTRANCE_GROTTO_LOAD(GROTTO_GV_OCTOROK_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_GV_OCTOROK_OFFSET), SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "GV Silver Rock Grotto Entry", "GV Octorok Grotto", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO, "", 1}, - { ENTRANCE_GROTTO_LOAD(GROTTO_GV_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_GV_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "GV Behind Tent Grotto Entry", "GV Storms Grotto", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, - { ENTR_GERUDO_VALLEY_WEST_EXIT, ENTR_GERUDOS_FORTRESS_EAST_EXIT, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Gerudo Fortress East Exit", "Gerudo Valley West Exit", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_OVERWORLD, "gerudo fortress"}, - { ENTR_HAUNTED_WASTELAND_EAST_EXIT, ENTR_GERUDOS_FORTRESS_GATE_EXIT, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Gerudo Fortress Gate Exit", "Haunted Wasteland East Exit", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_OVERWORLD, "gerudo fortress"}, - { ENTRANCE_GROTTO_LOAD(GROTTO_GF_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_GF_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "GF Storms Grotto Entry", "GF Storms Grotto", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO, "gerudo fortress", 1}, - { ENTR_GERUDO_TRAINING_GROUND_ENTRANCE, ENTR_GERUDOS_FORTRESS_OUTSIDE_GERUDO_TRAINING_GROUND, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "GF Outside Training Ground", "Gerudo Training Ground Entrance", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_DUNGEON, "gerudo fortress,gtg", 1}, - { ENTR_GERUDO_VALLEY_OUTSIDE_TENT, ENTR_CARPENTERS_TENT_0, SINGLE_SCENE_INFO(SCENE_CARPENTERS_TENT), "Carpenters' Tent", "GV Carpenters' Tent Entry", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_INTERIOR}, - { ENTRANCE_GROTTO_EXIT(GROTTO_GV_OCTOROK_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_GV_OCTOROK_OFFSET), {{ SCENE_GROTTOS, 0x06 }}, "GV Octorok Grotto", "GV Silver Rock Grotto Entry", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO}, - { ENTRANCE_GROTTO_EXIT(GROTTO_GV_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_GV_STORMS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "GV Storms Grotto", "GV Behind Tent Grotto Entry", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO, "scrubs"}, - { ENTRANCE_GROTTO_EXIT(GROTTO_GF_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_GF_STORMS_OFFSET), {{ SCENE_FAIRYS_FOUNTAIN, 0x00 }}, "GF Storms Grotto", "GF Storms Grotto Entry", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO, "gerudo fortress"}, - { ENTR_GERUDOS_FORTRESS_OUTSIDE_GERUDO_TRAINING_GROUND, ENTR_GERUDO_TRAINING_GROUND_ENTRANCE, SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "Gerudo Training Ground Entrance", "GF Outside Training Ground", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_DUNGEON, "gerudo fortress,gtg"}, + { ENTR_HYRULE_FIELD_ROCKY_PATH, ENTR_GERUDO_VALLEY_EAST_EXIT, SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "Gerudo Valley East Exit", "Hyrule Field Rocky Path", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_OVERWORLD, "hf"}, + { ENTR_GERUDOS_FORTRESS_EAST_EXIT, ENTR_GERUDO_VALLEY_WEST_EXIT, SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "Gerudo Valley West Exit", "Gerudo Fortress East Exit", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_OVERWORLD, ""}, + { ENTR_LAKE_HYLIA_RIVER_EXIT, -1, SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "Gerudo Valley River Exit", "Lake Hylia River Exit", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_OVERWORLD, "lh"}, + { ENTR_CARPENTERS_TENT_0, ENTR_GERUDO_VALLEY_OUTSIDE_TENT, SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "GV Carpenters' Tent Entry", "Carpenters' Tent", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_INTERIOR, "", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_GV_OCTOROK_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_GV_OCTOROK_OFFSET), SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "GV Silver Rock Grotto Entry", "GV Octorok Grotto", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO, "", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_GV_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_GV_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_GERUDO_VALLEY), "GV Behind Tent Grotto Entry", "GV Storms Grotto", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, + { ENTR_GERUDO_VALLEY_OUTSIDE_TENT, ENTR_CARPENTERS_TENT_0, SINGLE_SCENE_INFO(SCENE_CARPENTERS_TENT), "Carpenters' Tent", "GV Carpenters' Tent Entry", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_INTERIOR}, + { ENTRANCE_GROTTO_EXIT(GROTTO_GV_OCTOROK_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_GV_OCTOROK_OFFSET), {{ SCENE_GROTTOS, 0x06 }}, "GV Octorok Grotto", "GV Silver Rock Grotto Entry", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO}, + { ENTRANCE_GROTTO_EXIT(GROTTO_GV_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_GV_STORMS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "GV Storms Grotto", "GV Behind Tent Grotto Entry", ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_GROTTO, "scrubs"}, + { ENTR_GERUDO_VALLEY_WEST_EXIT, ENTR_GERUDOS_FORTRESS_EAST_EXIT, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Gerudo Fortress East Exit", "Gerudo Valley West Exit", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_OVERWORLD, ""}, + { ENTR_HAUNTED_WASTELAND_EAST_EXIT, ENTR_GERUDOS_FORTRESS_GATE_EXIT, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Gerudo Fortress Gate Exit", "Haunted Wasteland East Exit", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_OVERWORLD, ""}, + { ENTRANCE_GROTTO_LOAD(GROTTO_GF_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_GF_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "GF Storms Grotto Entry", "GF Storms Grotto", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_GROTTO, "", 1}, + { ENTR_GERUDO_TRAINING_GROUND_ENTRANCE, ENTR_GERUDOS_FORTRESS_OUTSIDE_GERUDO_TRAINING_GROUND, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "GF Outside Training Ground", "Gerudo Training Ground Entrance", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON, "gtg", 1}, + { ENTRANCE_GROTTO_EXIT(GROTTO_GF_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_GF_STORMS_OFFSET), {{ SCENE_FAIRYS_FOUNTAIN, 0x00 }}, "GF Storms Grotto", "GF Storms Grotto Entry", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_GROTTO, ""}, + { ENTR_GERUDOS_FORTRESS_OUTSIDE_GERUDO_TRAINING_GROUND, ENTR_GERUDO_TRAINING_GROUND_ENTRANCE, SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "Gerudo Training Ground Entrance", "GF Outside Training Ground", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON, "gtg"}, // The Wasteland - { ENTR_GERUDOS_FORTRESS_GATE_EXIT, ENTR_HAUNTED_WASTELAND_EAST_EXIT, SINGLE_SCENE_INFO(SCENE_HAUNTED_WASTELAND), "Haunted Wasteland East Exit", "Gerudo Fortress Gate Exit", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_OVERWORLD, "hw,gerudo fortress"}, + { ENTR_GERUDOS_FORTRESS_GATE_EXIT, ENTR_HAUNTED_WASTELAND_EAST_EXIT, SINGLE_SCENE_INFO(SCENE_HAUNTED_WASTELAND), "Haunted Wasteland East Exit", "Gerudo Fortress Gate Exit", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_OVERWORLD, "hw,gf"}, { ENTR_DESERT_COLOSSUS_EAST_EXIT, ENTR_HAUNTED_WASTELAND_WEST_EXIT, SINGLE_SCENE_INFO(SCENE_HAUNTED_WASTELAND), "Haunted Wasteland West Exit", "Desert Colossus East Exit", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_OVERWORLD, "dc,hw"}, - { ENTR_HAUNTED_WASTELAND_WEST_EXIT, ENTR_DESERT_COLOSSUS_EAST_EXIT, SINGLE_SCENE_INFO(SCENE_DESERT_COLOSSUS), "Desert Colossus East Exit", "Haunted Wasteland West Exit", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_OVERWORLD, "dc,hw"}, - { ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_NAYRUS_COLOSSUS, ENTR_DESERT_COLOSSUS_GREAT_FAIRY_EXIT, SINGLE_SCENE_INFO(SCENE_DESERT_COLOSSUS), "Colossus Great Fairy Entry", "Colossus Great Fairy Fountain", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_INTERIOR, "dc", 1}, - { ENTRANCE_GROTTO_LOAD(GROTTO_COLOSSUS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_COLOSSUS_OFFSET), SINGLE_SCENE_INFO(SCENE_DESERT_COLOSSUS), "Colossus Grotto Entry", "Colossus Grotto", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_GROTTO, "dc,scrubs", 1}, - { ENTR_SPIRIT_TEMPLE_ENTRANCE, ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, SINGLE_SCENE_INFO(SCENE_DESERT_COLOSSUS), "Colossus Outside Temple", "Spirit Temple Entrance", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_DUNGEON, "dc", 1}, - { ENTR_DESERT_COLOSSUS_GREAT_FAIRY_EXIT, ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_NAYRUS_COLOSSUS, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 0x02 }}, "Colossus Great Fairy Fountain", "Colossus Great Fairy Entry", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_INTERIOR, "dc"}, - { ENTRANCE_GROTTO_EXIT(GROTTO_COLOSSUS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_COLOSSUS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "Colossus Grotto", "Colossus Grotto Entry", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_GROTTO, "dc,scrubs"}, - { ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, ENTR_SPIRIT_TEMPLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Temple Entrance", "Colossus Outside Temple", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_DUNGEON, "dc"}, - { ENTR_SPIRIT_TEMPLE_BOSS_ENTRANCE, ENTR_SPIRIT_TEMPLE_BOSS_DOOR, SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Temple Boss Door", "Twinrova", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_DUNGEON, "", 1}, - { ENTR_SPIRIT_TEMPLE_BOSS_DOOR, ENTR_SPIRIT_TEMPLE_BOSS_ENTRANCE, SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE_BOSS), "Twinrova", "Spirit Temple Boss Door", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_DUNGEON, "", 1}, - { ENTR_DESERT_COLOSSUS_SPIRIT_TEMPLE_BLUE_WARP, -1, SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE_BOSS), "Twinrova Blue Warp", "Spirit Temple Blue Warp", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_ONE_WAY, "bw", 1}, + { ENTR_HAUNTED_WASTELAND_WEST_EXIT, ENTR_DESERT_COLOSSUS_EAST_EXIT, SINGLE_SCENE_INFO(SCENE_DESERT_COLOSSUS), "Desert Colossus East Exit", "Haunted Wasteland West Exit", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_TYPE_OVERWORLD, "dc,hw"}, + { ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_NAYRUS_COLOSSUS, ENTR_DESERT_COLOSSUS_GREAT_FAIRY_EXIT, SINGLE_SCENE_INFO(SCENE_DESERT_COLOSSUS), "Colossus Great Fairy Entry", "Colossus Great Fairy Fountain", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_INTERIOR, "dc", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_COLOSSUS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_COLOSSUS_OFFSET), SINGLE_SCENE_INFO(SCENE_DESERT_COLOSSUS), "Colossus Grotto Entry", "Colossus Grotto", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_GROTTO, "dc,scrubs", 1}, + { ENTR_SPIRIT_TEMPLE_ENTRANCE, ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, SINGLE_SCENE_INFO(SCENE_DESERT_COLOSSUS), "Colossus Outside Temple", "Spirit Temple Entrance", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DUNGEON, "dc", 1}, + { ENTR_DESERT_COLOSSUS_GREAT_FAIRY_EXIT, ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_NAYRUS_COLOSSUS, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 0x02 }}, "Colossus Great Fairy Fountain", "Colossus Great Fairy Entry", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_INTERIOR, "dc"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_COLOSSUS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_COLOSSUS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "Colossus Grotto", "Colossus Grotto Entry", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_GROTTO, "dc,scrubs"}, + { ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, ENTR_SPIRIT_TEMPLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Temple Entrance", "Colossus Outside Temple", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DUNGEON, "dc"}, + { ENTR_SPIRIT_TEMPLE_BOSS_ENTRANCE, ENTR_SPIRIT_TEMPLE_BOSS_DOOR, SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Temple Boss Door", "Twinrova", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DUNGEON, "", 1}, + { ENTR_SPIRIT_TEMPLE_BOSS_DOOR, ENTR_SPIRIT_TEMPLE_BOSS_ENTRANCE, SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE_BOSS), "Twinrova", "Spirit Temple Boss Door", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DUNGEON, "", 1}, + { ENTR_DESERT_COLOSSUS_SPIRIT_TEMPLE_BLUE_WARP, -1, SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE_BOSS), "Twinrova Blue Warp", "Spirit Temple Blue Warp", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_ONE_WAY, "bw", 1}, // Market { ENTR_HYRULE_FIELD_ON_BRIDGE_SPAWN, ENTR_MARKET_ENTRANCE_NEAR_GUARD_EXIT, {SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_DAY), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_RUINS)}, "Market Entrance South Exit", "Hyrule Field Drawbridge Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_OVERWORLD, "hf"}, diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h index 6e6a35ed6..ef217b7f0 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h @@ -25,7 +25,9 @@ typedef enum { ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_GERUDO_VALLEY, + ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_HAUNTED_WASTELAND, + ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_HYRULE_CASTLE, SPOILER_ENTRANCE_GROUP_COUNT, From eafe7f0b04f58560dc857d97cf7bc3a0ab5531f9 Mon Sep 17 00:00:00 2001 From: Archez Date: Thu, 6 Feb 2025 10:33:41 -0500 Subject: [PATCH 22/68] Fix save warping in links house with entrance rando (#5009) * Fix save warping in links house with entrance rando * account for interrior shuffle all --- soh/soh/Enhancements/randomizer/randomizer_entrance.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance.c b/soh/soh/Enhancements/randomizer/randomizer_entrance.c index 14d630005..fdb1f6809 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance.c +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance.c @@ -393,8 +393,11 @@ void Entrance_SetSavewarpEntrance(void) { gSaveContext.entranceIndex = ENTR_GANONS_TOWER_0; // Inside Ganon's Castle -> Ganon's Tower Climb } else if (scene == SCENE_THIEVES_HIDEOUT) { // Theives hideout gSaveContext.entranceIndex = ENTR_THIEVES_HIDEOUT_0; // Gerudo Fortress -> Thieve's Hideout spawn 0 - } else if (scene == SCENE_LINKS_HOUSE) { - gSaveContext.entranceIndex = Entrance_OverrideNextIndex(ENTR_LINKS_HOUSE_CHILD_SPAWN); + } else if (scene == SCENE_LINKS_HOUSE && + Randomizer_GetSettingValue(RSK_SHUFFLE_INTERIOR_ENTRANCES) != RO_INTERIOR_ENTRANCE_SHUFFLE_ALL) { + // Save warping in Link's house keeps the player there if Link's house not shuffled, + // otherwise fallback to regular spawns + gSaveContext.entranceIndex = ENTR_LINKS_HOUSE_CHILD_SPAWN; } else if (CVarGetInteger(CVAR_ENHANCEMENT("RememberSaveLocation"), 0) && scene != SCENE_FAIRYS_FOUNTAIN && scene != SCENE_GROTTOS && gSaveContext.entranceIndex != ENTR_LOAD_OPENING) { // Use the saved entrance value with remember save location, except when in grottos/fairy fountains or if From f2a3ac1740dfb1c4c0f9c7ef738992ee21656ff2 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Thu, 6 Feb 2025 17:40:38 -0500 Subject: [PATCH 23/68] Fix enabledTricks getting incorrectly logged. (#5012) --- soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp index d78f1ef90..da4c3eb43 100644 --- a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp @@ -187,7 +187,7 @@ static void WriteEnabledTricks() { auto ctx = Rando::Context::GetInstance(); for (const auto& setting : Rando::Settings::GetInstance()->GetOptionGroup(RSG_TRICKS).GetOptions()) { - if (ctx->GetOption(setting->GetKey()).IsNot(RO_GENERIC_ON)) { + if (ctx->GetTrickOption(static_cast(setting->GetKey())).IsNot(RO_GENERIC_ON)) { continue; } jsonData["enabledTricks"].push_back(RemoveLineBreaks(setting->GetName()).c_str()); From ca0617b035923e001acf0f6583e720e36dca1174 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:47:06 -0800 Subject: [PATCH 24/68] add some documentation to `RegisterShipInitFunc` (#4995) --- soh/soh/ShipInit.hpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/soh/soh/ShipInit.hpp b/soh/soh/ShipInit.hpp index b7612eb06..b5351cdc0 100644 --- a/soh/soh/ShipInit.hpp +++ b/soh/soh/ShipInit.hpp @@ -26,6 +26,37 @@ struct ShipInit { } }; +/** + * @brief Register a function to execute on boot and (optionally) in other situations + * + * @param initFunc The function to execute + * @param updatePaths Strings to specify additional situations in which to execute the function + * + * ### Examples: + * + * #### Execute function `bar` on boot + * + * ```cpp + * static RegisterShipInitFunc foo(bar); + * ``` + * + * #### Execute function `bar` on boot and when the CVar `baz` might have changed + * + * ```cpp + * static RegisterShipInitFunc foo(bar, { "baz" }); + * ``` + * + * #### Execute function `bar` on boot and when `IS_RANDO` might have changed + * + * ```cpp + * static RegisterShipInitFunc foo(bar, { "IS_RANDO" }); + * ``` + * + * ### Additional Information: + * + * To get a better sense of when your function will be executed + * you can look for `ShipInit::Init` calls throughout the codebase + */ struct RegisterShipInitFunc { RegisterShipInitFunc(std::function initFunc, const std::set& updatePaths = {}) { auto& shipInitFuncs = ShipInit::GetAll(); From 2400ad1d6869487046da4411db780702b094eaa1 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Thu, 6 Feb 2025 22:30:23 -0500 Subject: [PATCH 25/68] Start splitting Location List into ShipInit functions (#5011) * Move fairy checks to separate file * Moves pot locations to ShipInit function * Move Freestanding locations to a ShipInit function * Remove some extra newlines that were pasted in * Move fish locations to ShipInit function * Remove ON_BOOT, as it's not really necessary * Fix weird spacing --- .../randomizer/ShuffleFairies.cpp | 227 +++- .../Enhancements/randomizer/ShuffleFairies.h | 2 +- .../randomizer/ShuffleFreestanding.cpp | 235 ++++ .../Enhancements/randomizer/ShufflePots.cpp | 553 +++++++++ .../Enhancements/randomizer/fishsanity.cpp | 55 + .../Enhancements/randomizer/location_list.cpp | 1068 +---------------- soh/soh/Enhancements/randomizer/static_data.h | 5 + soh/soh/OTRGlobals.cpp | 4 +- 8 files changed, 1083 insertions(+), 1066 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp b/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp index f9cd16c4d..c2416c95a 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp @@ -7,6 +7,7 @@ #include "src/overlays/actors/ovl_Shot_Sun/z_shot_sun.h" #include "../../OTRGlobals.h" #include "../../cvar_prefixes.h" +#include "static_data.h" #define FAIRY_FLAG_TIMED (1 << 8) @@ -179,4 +180,228 @@ void ShuffleFairies_UnregisterHooks() { GameInteractor::Instance->UnregisterGameHook(onVanillaBehaviorHook); onVanillaBehaviorHook = 0; -} \ No newline at end of file +} + +void Rando::StaticData::RegisterFairyLocations() { + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, "Grotto Fairy 1", "SFM Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1)); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1801, "Grotto Fairy 2", "SFM Grotto Fairy 2", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2)); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1802, "Grotto Fairy 3", "SFM Grotto Fairy 3", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3)); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1803, "Grotto Fairy 4", "SFM Grotto Fairy 4", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4)); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1804, "Grotto Fairy 5", "SFM Grotto Fairy 5", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5)); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1805, "Grotto Fairy 6", "SFM Grotto Fairy 6", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6)); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1806, "Grotto Fairy 7", "SFM Grotto Fairy 7", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7)); + locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1807, "Grotto Fairy 8", "SFM Grotto Fairy 8", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8)); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0300, "Grotto Fairy 1", "ZR Grotto Fairy 1", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1)); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0301, "Grotto Fairy 2", "ZR Grotto Fairy 2", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2)); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0302, "Grotto Fairy 3", "ZR Grotto Fairy 3", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3)); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0303, "Grotto Fairy 4", "ZR Grotto Fairy 4", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4)); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0304, "Grotto Fairy 5", "ZR Grotto Fairy 5", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5)); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0305, "Grotto Fairy 6", "ZR Grotto Fairy 6", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6)); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0306, "Grotto Fairy 7", "ZR Grotto Fairy 7", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7)); + locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0307, "Grotto Fairy 8", "ZR Grotto Fairy 8", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8)); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F00, "Grotto Fairy 1", "HF Grotto Fairy 1", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_1)); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F01, "Grotto Fairy 2", "HF Grotto Fairy 2", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_2)); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F02, "Grotto Fairy 3", "HF Grotto Fairy 3", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_3)); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F03, "Grotto Fairy 4", "HF Grotto Fairy 4", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_4)); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F04, "Grotto Fairy 5", "HF Grotto Fairy 5", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_5)); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F05, "Grotto Fairy 6", "HF Grotto Fairy 6", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_6)); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F06, "Grotto Fairy 7", "HF Grotto Fairy 7", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_7)); + locationTable[RC_HF_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F07, "Grotto Fairy 8", "HF Grotto Fairy 8", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_8)); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C00, "Grotto Fairy 1", "ZD Grotto Fairy 1", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1)); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C01, "Grotto Fairy 2", "ZD Grotto Fairy 2", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2)); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C02, "Grotto Fairy 3", "ZD Grotto Fairy 3", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3)); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C03, "Grotto Fairy 4", "ZD Grotto Fairy 4", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4)); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C04, "Grotto Fairy 5", "ZD Grotto Fairy 5", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5)); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C05, "Grotto Fairy 6", "ZD Grotto Fairy 6", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6)); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C06, "Grotto Fairy 7", "ZD Grotto Fairy 7", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7)); + locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C07, "Grotto Fairy 8", "ZD Grotto Fairy 8", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8)); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D00, "Grotto Fairy 1", "GF Grotto Fairy 1", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_1)); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D01, "Grotto Fairy 2", "GF Grotto Fairy 2", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_2)); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D02, "Grotto Fairy 3", "GF Grotto Fairy 3", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_3)); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D03, "Grotto Fairy 4", "GF Grotto Fairy 4", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_4)); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D04, "Grotto Fairy 5", "GF Grotto Fairy 5", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_5)); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D05, "Grotto Fairy 6", "GF Grotto Fairy 6", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_6)); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D06, "Grotto Fairy 7", "GF Grotto Fairy 7", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_7)); + locationTable[RC_GF_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D07, "Grotto Fairy 8", "GF Grotto Fairy 8", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_8)); + + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x00, "Shield Grave Fairy 1", "Shield Grave Fairy 1", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1)); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x01, "Shield Grave Fairy 2", "Shield Grave Fairy 2", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2)); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x02, "Shield Grave Fairy 3", "Shield Grave Fairy 3", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3)); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x03, "Shield Grave Fairy 4", "Shield Grave Fairy 4", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4)); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x04, "Shield Grave Fairy 5", "Shield Grave Fairy 5", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5)); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x05, "Shield Grave Fairy 6", "Shield Grave Fairy 6", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6)); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x06, "Shield Grave Fairy 7", "Shield Grave Fairy 7", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7)); + locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x07, "Shield Grave Fairy 8", "Shield Grave Fairy 8", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8)); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_1] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_1, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x00, "Scrubs Fairy 1", "Scrubs Fairy 1", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1)); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_2] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_2, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x01, "Scrubs Fairy 2", "Scrubs Fairy 2", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2)); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_3] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_3, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x02, "Scrubs Fairy 3", "Scrubs Fairy 3", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3)); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_4] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_4, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x03, "Scrubs Fairy 4", "Scrubs Fairy 4", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4)); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_5] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_5, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x04, "Scrubs Fairy 5", "Scrubs Fairy 5", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5)); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_6] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_6, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x05, "Scrubs Fairy 6", "Scrubs Fairy 6", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6)); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_7] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_7, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x06, "Scrubs Fairy 7", "Scrubs Fairy 7", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7)); + locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_8] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x07, "Scrubs Fairy 8", "Scrubs Fairy 8", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8)); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x00, "MQ Scrubs Fairy 1", "MQ Scrubs Fairy 1", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1)); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x01, "MQ Scrubs Fairy 2", "MQ Scrubs Fairy 2", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2)); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x02, "MQ Scrubs Fairy 3", "MQ Scrubs Fairy 3", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3)); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x03, "MQ Scrubs Fairy 4", "MQ Scrubs Fairy 4", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4)); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x04, "MQ Scrubs Fairy 5", "MQ Scrubs Fairy 5", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5)); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x05, "MQ Scrubs Fairy 6", "MQ Scrubs Fairy 6", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6)); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x06, "MQ Scrubs Fairy 7", "MQ Scrubs Fairy 7", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7)); + locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x07, "MQ Scrubs Fairy 8", "MQ Scrubs Fairy 8", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8)); + locationTable[RC_COLOSSUS_OASIS_FAIRY_1] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x00, "Oasis Fairy 1", "Oasis Fairy 1", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_1)); + locationTable[RC_COLOSSUS_OASIS_FAIRY_2] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x01, "Oasis Fairy 2", "Oasis Fairy 2", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_2)); + locationTable[RC_COLOSSUS_OASIS_FAIRY_3] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_3, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x02, "Oasis Fairy 3", "Oasis Fairy 3", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_3)); + locationTable[RC_COLOSSUS_OASIS_FAIRY_4] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_4, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x03, "Oasis Fairy 4", "Oasis Fairy 4", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_4)); + locationTable[RC_COLOSSUS_OASIS_FAIRY_5] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_5, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x04, "Oasis Fairy 5", "Oasis Fairy 5", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_5)); + locationTable[RC_COLOSSUS_OASIS_FAIRY_6] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_6, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x05, "Oasis Fairy 6", "Oasis Fairy 6", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_6)); + locationTable[RC_COLOSSUS_OASIS_FAIRY_7] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_7, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x06, "Oasis Fairy 7", "Oasis Fairy 7", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_7)); + locationTable[RC_COLOSSUS_OASIS_FAIRY_8] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_8, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x07, "Oasis Fairy 8", "Oasis Fairy 8", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_8)); + + locationTable[RC_ZR_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_ZR_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, 0x0300, "Bean Sprout Fairy 1", "ZR Bean Sprout Fairy 1", RHT_ZR_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BEAN_SPROUT_FAIRY_1)); + locationTable[RC_ZR_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_ZR_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, 0x0301, "Bean Sprout Fairy 2", "ZR Bean Sprout Fairy 2", RHT_ZR_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BEAN_SPROUT_FAIRY_2)); + locationTable[RC_ZR_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_ZR_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, 0x0302, "Bean Sprout Fairy 3", "ZR Bean Sprout Fairy 3", RHT_ZR_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BEAN_SPROUT_FAIRY_3)); + locationTable[RC_KF_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_KF_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, 0x0900, "Bean Sprout Fairy 1", "KF Bean Sprout Fairy 1", RHT_KF_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_SPROUT_FAIRY_1)); + locationTable[RC_KF_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_KF_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, 0x0901, "Bean Sprout Fairy 2", "KF Bean Sprout Fairy 2", RHT_KF_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_SPROUT_FAIRY_2)); + locationTable[RC_KF_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_KF_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, 0x0902, "Bean Sprout Fairy 3", "KF Bean Sprout Fairy 3", RHT_KF_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_SPROUT_FAIRY_3)); + locationTable[RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x0400, "Bean Sprout Near Bridge Fairy 1", "LW Bean Sprout Near Bridge Fairy 1", RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1)); + locationTable[RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x0401, "Bean Sprout Near Bridge Fairy 2", "LW Bean Sprout Near Bridge Fairy 2", RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2)); + locationTable[RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x0402, "Bean Sprout Near Bridge Fairy 3", "LW Bean Sprout Near Bridge Fairy 3", RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3)); + locationTable[RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x1200, "Bean Sprout Near Theatre Fairy 1", "LW Bean Sprout Near Theatre Fairy 1", RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1)); + locationTable[RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x1201, "Bean Sprout Near Theatre Fairy 2", "LW Bean Sprout Near Theatre Fairy 2", RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2)); + locationTable[RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x1202, "Bean Sprout Near Theatre Fairy 3", "LW Bean Sprout Near Theatre Fairy 3", RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3)); + locationTable[RC_LH_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_LH_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, 0x0100, "Bean Sprout Fairy 1", "LH Bean Sprout Fairy 1", RHT_LH_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BEAN_SPROUT_FAIRY_1)); + locationTable[RC_LH_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_LH_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, 0x0101, "Bean Sprout Fairy 2", "LH Bean Sprout Fairy 2", RHT_LH_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BEAN_SPROUT_FAIRY_2)); + locationTable[RC_LH_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_LH_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, 0x0102, "Bean Sprout Fairy 3", "LH Bean Sprout Fairy 3", RHT_LH_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BEAN_SPROUT_FAIRY_3)); + locationTable[RC_GV_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_GV_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, 0x0300, "Bean Sprout Fairy 1", "GV Bean Sprout Fairy 1", RHT_GV_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BEAN_SPROUT_FAIRY_1)); + locationTable[RC_GV_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_GV_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, 0x0301, "Bean Sprout Fairy 2", "GV Bean Sprout Fairy 2", RHT_GV_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BEAN_SPROUT_FAIRY_2)); + locationTable[RC_GV_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_GV_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, 0x0302, "Bean Sprout Fairy 3", "GV Bean Sprout Fairy 3", RHT_GV_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BEAN_SPROUT_FAIRY_3)); + locationTable[RC_COLOSSUS_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x1800, "Bean Sprout Fairy 1", "Col Bean Sprout Fairy 1", RHT_COLOSSUS_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1)); + locationTable[RC_COLOSSUS_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x1801, "Bean Sprout Fairy 2", "Col Bean Sprout Fairy 2", RHT_COLOSSUS_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2)); + locationTable[RC_COLOSSUS_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x1802, "Bean Sprout Fairy 3", "Col Bean Sprout Fairy 3", RHT_COLOSSUS_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3)); + locationTable[RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, 0x0300, "Bean Sprout Fairy 1", "GY Bean Sprout Fairy 1", RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1)); + locationTable[RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, 0x0301, "Bean Sprout Fairy 2", "GY Bean Sprout Fairy 2", RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2)); + locationTable[RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, 0x0302, "Bean Sprout Fairy 3", "GY Bean Sprout Fairy 3", RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3)); + locationTable[RC_DMC_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_DMC_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 0x0300, "Bean Sprout Fairy 1", "DMC Bean Sprout Fairy 1", RHT_DMC_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BEAN_SPROUT_FAIRY_1)); + locationTable[RC_DMC_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_DMC_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 0x0301, "Bean Sprout Fairy 2", "DMC Bean Sprout Fairy 2", RHT_DMC_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BEAN_SPROUT_FAIRY_2)); + locationTable[RC_DMC_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_DMC_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 0x0302, "Bean Sprout Fairy 3", "DMC Bean Sprout Fairy 3", RHT_DMC_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BEAN_SPROUT_FAIRY_3)); + locationTable[RC_DMT_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_DMT_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0600, "Bean Sprout Fairy 1", "DMT Bean Sprout Fairy 1", RHT_DMT_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BEAN_SPROUT_FAIRY_1)); + locationTable[RC_DMT_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_DMT_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0601, "Bean Sprout Fairy 2", "DMT Bean Sprout Fairy 2", RHT_DMT_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BEAN_SPROUT_FAIRY_2)); + locationTable[RC_DMT_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_DMT_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0602, "Bean Sprout Fairy 3", "DMT Bean Sprout Fairy 3", RHT_DMT_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BEAN_SPROUT_FAIRY_3)); + + locationTable[RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -680), "ToT Left Gossip Stone Fairy", "ToT Left Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY)); + locationTable[RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -680), "ToT Left Gossip Stone Big Fairy", "ToT Left Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -615), "ToT Left Center Gossip Stone Fairy", "ToT Left Center Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY)); + locationTable[RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -615), "ToT Left Center Gossip Stone Big Fairy", "ToT Left Center Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -550), "ToT Right Center Gossip Stone Fairy", "ToT Right Center Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY)); + locationTable[RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -550), "ToT Right Center Gossip Stone Big Fairy", "ToT Right Center Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -485), "ToT Right Gossip Stone Fairy", "ToT Right Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY)); + locationTable[RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -485), "ToT Right Gossip Stone Big Fairy", "ToT Right Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_DMC_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMC_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS( 0, 1656), "Gossip Stone Fairy", "DMC Gossip Stone Fairy", RHT_DMC_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GOSSIP_STONE_FAIRY)); + locationTable[RC_DMC_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMC_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(0x1000, 1656), "Gossip Stone Big Fairy", "DMC Gossip Stone Big Fairy", RHT_DMC_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_DMT_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMT_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS( 0, -3935), "Gossip Stone Fairy", "DMT Gossip Stone Fairy", RHT_DMT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_GOSSIP_STONE_FAIRY)); + locationTable[RC_DMT_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMT_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(0x1000, -3935), "Gossip Stone Big Fairy", "DMT Gossip Stone Big Fairy", RHT_DMT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_COLOSSUS_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_COLOSSUS_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS( 0, 1320), "Gossip Stone Fairy", "Col Gossip Stone Fairy", RHT_COLOSSUS_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY)); + locationTable[RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(0x1000, 1320), "Gossip Stone Big Fairy", "Col Gossip Stone Big Fairy", RHT_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, RCQUEST_VANILLA,RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS( 0, -1520), "Gossip Stone Fairy", "DC Gossip Stone Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY)); + locationTable[RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, RCQUEST_VANILLA,RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(0x1000, -1520), "Gossip Stone Big Fairy", "DC Gossip Stone Big Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS( 0, -916), "MQ Gossip Stone Fairy", "DC MQ Gossip Stone Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY)); + locationTable[RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(0x1000, -916), "MQ Gossip Stone Big Fairy", "DC MQ Gossip Stone Big Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_GV_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GV_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS( 0, -2340), "Gossip Stone Fairy", "GV Gossip Stone Fairy", RHT_GV_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_GOSSIP_STONE_FAIRY)); + locationTable[RC_GV_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GV_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(0x1000, -2340), "Gossip Stone Big Fairy", "GV Gossip Stone Big Fairy", RHT_GV_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_GC_MAZE_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GC_MAZE_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS( 0, -1265), "Maze Gossip Stone Fairy", "GC Maze Gossip Stone Fairy", RHT_GC_MAZE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY)); + locationTable[RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(0x1000, -1265), "Maze Gossip Stone Big Fairy", "GC Maze Gossip Stone Big Fairy", RHT_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS( 0, 1496), "Medigoron Gossip Stone Fairy", "GC Medigoron Gossip Stone Fairy", RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY)); + locationTable[RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(0x1000, 1496), "Medigoron Gossip Stone Big Fairy", "GC Medigoron Gossip Stone Big Fairy", RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_GRAVEYARD_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GRAVEYARD_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS( 0, -75), "Gossip Stone Fairy", "GY Gossip Stone Fairy", RHT_GRAVEYARD_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY)); + locationTable[RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(0x1000, -75), "Gossip Stone Big Fairy", "GY Gossip Stone Big Fairy", RHT_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_HC_MALON_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HC_MALON_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS( 0, 3445), "Malon Gossip Stone Fairy", "HC Malon Gossip Stone Fairy", RHT_HC_MALON_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY)); + locationTable[RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(0x1000, 3445), "Malon Gossip Stone Big Fairy", "HC Malon Gossip Stone Big Fairy", RHT_HC_MALON_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS( 0, 1041), "Rock Wall Gossip Stone Fairy", "HC Rock Wall Gossip Stone Fairy", RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY)); + locationTable[RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(0x1000, 1041), "Rock Wall Gossip Stone Big Fairy", "HC Rock Wall Gossip Stone Big Fairy", RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0xC, 735), "Storms Grotto Gossip Stone Fairy", "HC Storms Grotto Gossip Stone Fairy", RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x100C, 735), "Storms Grotto Gossip Stone Big Fairy", "HC Storms Grotto Gossip Stone Big Fairy", RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS( 0, -2230), "Deku Tree Left Gossip Stone Fairy", "KF Deku Tree Left Gossip Stone Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY)); + locationTable[RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(0x1000, -2230), "Deku Tree Left Gossip Stone Big Fairy", "KF Deku Tree Left Gossip Stone Big Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS( 0, -700), "Deku Tree Right Gossip Stone Fairy", "KF Deku Tree Right Gossip Stone Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY)); + locationTable[RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(0x1000, -700), "Deku Tree Right Gossip Stone Big Fairy", "KF Deku Tree Right Gossip Stone Big Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_KF_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS( 0, -1223), "Gossip Stone Fairy", "KF Gossip Stone Fairy", RHT_KF_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_GOSSIP_STONE_FAIRY)); + locationTable[RC_KF_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(0x1000, -1223), "Gossip Stone Big Fairy", "KF Gossip Stone Big Fairy", RHT_KF_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x1B, -236), "Storms Gossip Stone Fairy", "KF Storms Gossip Stone Fairy", RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x101B, -236), "Storms Gossip Stone Big Fairy", "KF Storms Gossip Stone Big Fairy", RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_LH_LAB_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LH_LAB_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS( 0, 3212), "Lab Gossip Stone Fairy", "LH Lab Gossip Stone Fairy", RHT_LH_LAB_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY)); + locationTable[RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 3212), "Lab Gossip Stone Big Fairy", "LH Lab Gossip Stone Big Fairy", RHT_LH_LAB_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS( 0, 8395), "Southeast Gossip Stone Fairy", "LH Southeast Gossip Stone Fairy", RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY)); + locationTable[RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 8395), "Southeast Gossip Stone Big Fairy", "LH Southeast Gossip Stone Big Fairy", RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS( 0, 7984), "Southwest Gossip Stone Fairy", "LH Southwest Gossip Stone Fairy", RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY)); + locationTable[RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 7984), "Southwest Gossip Stone Big Fairy", "LH Southwest Gossip Stone Big Fairy", RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_LW_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LW_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS( 0, 2300), "Gossip Stone Fairy", "LW Gossip Stone Fairy", RHT_LW_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GOSSIP_STONE_FAIRY)); + locationTable[RC_LW_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LW_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(0x1000, 2300), "Gossip Stone Big Fairy", "LW Gossip Stone Big Fairy", RHT_LW_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS( 0, 1370), "Maze Lower Gossip Stone Fairy", "SFM Maze Lower Gossip Stone Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY)); + locationTable[RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(0x1000, 1370), "Maze Lower Gossip Stone Big Fairy", "SFM Maze Lower Gossip Stone Big Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS( 0, 740), "Maze Upper Gossip Stone Fairy", "SFM Maze Upper Gossip Stone Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY)); + locationTable[RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(0x1000, 740), "Maze Upper Gossip Stone Big Fairy", "SFM Maze Upper Gossip Stone Big Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_SFM_SARIA_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_SFM_SARIA_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS( 0, -2300), "Saria Gossip Stone Fairy", "SFM Saria Gossip Stone Fairy", RHT_SFM_SARIA_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY)); + locationTable[RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(0x1000, -2300), "Saria Gossip Stone Big Fairy", "SFM Saria Gossip Stone Big Fairy", RHT_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_ZD_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZD_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS( 0, -1600), "Gossip Stone Fairy", "ZD Gossip Stone Fairy", RHT_ZD_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_GOSSIP_STONE_FAIRY)); + locationTable[RC_ZD_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZD_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(0x1000, -1600), "Gossip Stone Big Fairy", "ZD Gossip Stone Big Fairy", RHT_ZD_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_ZF_FAIRY_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS( 0, 2205), "Fairy Gossip Stone Fairy", "ZF Fairy Gossip Stone Fairy", RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY)); + locationTable[RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(0x1000, 2205), "Fairy Gossip Stone Big Fairy", "ZF Fairy Gossip Stone Big Fairy", RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_ZF_JABU_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZF_JABU_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS( 0, -985), "Jabu Gossip Stone Fairy", "ZF Jabu Gossip Stone Fairy", RHT_ZF_JABU_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY)); + locationTable[RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(0x1000, -985), "Jabu Gossip Stone Big Fairy", "ZF Jabu Gossip Stone Big Fairy", RHT_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS( 0, -1070), "Near Grottos Gossip Stone Fairy", "ZR Near Grottos Gossip Stone Fairy", RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY)); + locationTable[RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(0x1000, -1070), "Near Grottos Gossip Stone Big Fairy", "ZR Near Grottos Gossip Stone Big Fairy", RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS( 0, -1650), "Near Domain Gossip Stone Fairy", "ZR Near Domain Gossip Stone Fairy", RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY)); + locationTable[RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(0x1000, -1650), "Near Domain Gossip Stone Big Fairy", "ZR Near Domain Gossip Stone Big Fairy", RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x11, -357), "Cow Grotto Gossip Stone Fairy", "HF Cow Grotto Gossip Stone Fairy", RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1011, -357), "Cow Grotto Gossip Stone Big Fairy", "HF Cow Grotto Gossip Stone Big Fairy", RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x10, -236), "Near Market Gossip Stone Fairy", "HF Near Market Gossip Stone Fairy", RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1010, -236), "Near Market Gossip Stone Big Fairy", "HF Near Market Gossip Stone Big Fairy", RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x14, -236), "Southeast Gossip Stone Fairy", "HF Southeast Gossip Stone Fairy", RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1014, -236), "Southeast Gossip Stone Big Fairy", "HF Southeast Gossip Stone Big Fairy", RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x13, -236), "Open Grotto Gossip Stone Fairy", "HF Open Grotto Gossip Stone Fairy", RHT_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1013, -236), "Open Grotto Gossip Stone Big Fairy", "HF Open Grotto Gossip Stone Big Fairy", RHT_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0xA, -236), "Open Grotto Gossip Stone Fairy", "Kak Open Grotto Gossip Stone Fairy", RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x100A, -236), "Open Grotto Gossip Stone Big Fairy", "Kak Open Grotto Gossip Stone Big Fairy", RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x4, -236), "Open Grotto Gossip Stone Fairy", "ZR Open Grotto Gossip Stone Fairy", RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1004, -236), "Open Grotto Gossip Stone Big Fairy", "ZR Open Grotto Gossip Stone Big Fairy", RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x1A, -236), "Near Shortcuts Gossip Stone Fairy", "LW Near Shortcuts Gossip Stone Fairy", RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x101A, -236), "Near Shortcuts Gossip Stone Big Fairy", "LW Near Shortcuts Gossip Stone Big Fairy", RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x8, -236), "Storms Grotto Gossip Stone Fairy", "DMT Storms Grotto Gossip Stone Fairy", RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1008, -236), "Storms Grotto Gossip Stone Big Fairy", "DMT Storms Grotto Gossip Stone Big Fairy", RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + locationTable[RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x6, -236), "Upper Grotto Gossip Stone Fairy", "DMC Upper Grotto Gossip Stone Fairy", RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY)); + locationTable[RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1006, -236), "Upper Grotto Gossip Stone Big Fairy", "DMC Upper Grotto Gossip Stone Big Fairy", RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG)); + + locationTable[RC_LH_ISLAND_SUN_FAIRY] = Location::Fairy(RC_LH_ISLAND_SUN_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 7319), "Island Sun's Song Fairy", "Island Sun's Song Fairy", RHT_LH_ISLAND_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_ISLAND_SUN_FAIRY)); + locationTable[RC_HF_POND_STORMS_FAIRY] = Location::Fairy(RC_HF_POND_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(0x1000, 5012), "Pond Song of Storms Fairy", "Pond Song of Storms Fairy", RHT_HF_POND_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_POND_STORMS_FAIRY)); + locationTable[RC_HF_FENCE_GROTTO_STORMS_FAIRY] = Location::Fairy(RC_HF_FENCE_GROTTO_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1000, -308), "Inside Fence Storms Fairy", "Inside Fence Storms Fairy", RHT_HF_FENCE_GROTTO_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FENCE_GROTTO_STORMS_FAIRY)); + locationTable[RC_DMT_FLAG_SUN_FAIRY] = Location::Fairy(RC_DMT_FLAG_SUN_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(0x1000, 464), "Flag Sun's Song Fairy", "Flag Sun's Song Fairy", RHT_DMT_FLAG_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_FLAG_SUN_FAIRY)); + locationTable[RC_DMT_COW_GROTTO_STORMS_FAIRY] = Location::Fairy(RC_DMT_COW_GROTTO_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1000, -311), "Cow Grotto Song of Storms Fairy", "Cow Grotto Song of Storms Fairy", RHT_DMT_COW_GROTTO_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_STORMS_FAIRY)); + locationTable[RC_LW_SHORTCUT_STORMS_FAIRY] = Location::Fairy(RC_LW_SHORTCUT_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(0x1000, -795), "Shortcuts Song of Storms Fairy", "Shortcuts Song of Storms Fairy", RHT_LW_SHORTCUT_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_STORMS_FAIRY)); + locationTable[RC_GF_KITCHEN_SUN_FAIRY] = Location::Fairy(RC_GF_KITCHEN_SUN_FAIRY, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(0x1000, -621), "Kitchen Sun's Song Fairy", "Kitchen Sun's Song Fairy", RHT_GF_KITCHEN_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_SUN_FAIRY)); + locationTable[RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY] = Location::Fairy(RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1000, 741), "Scrub Grotto Sun's Song Fairy", "Scrub Grotto Sun's Song Fairy", RHT_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY)); + locationTable[RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] = Location::Fairy(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_ROYAL_FAMILYS_TOMB, TWO_ACTOR_PARAMS(0x1000, 1476), "Composer's Grave Sun's Song Fairy", "Composer's Grave Sun's Song Fairy", RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY)); + + locationTable[RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY] = Location::Fairy(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1896), "After Boulder Room Sun's Song Fairy", "After Boulder Room Sun's Song Fairy", RHT_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY)); + locationTable[RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY] = Location::Fairy(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -220), "Four Armos Room Sun's Song Fairy", "Four Armos Room Sun's Song Fairy", RHT_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY)); + locationTable[RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, RCQUEST_VANILLA,RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 54), "Beamos Song of Storms Fairy", "Beamos Song of Storms Fairy", RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY)); + locationTable[RC_SHADOW_TEMPLE_PIT_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, RCQUEST_VANILLA,RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 3339), "Pit Room Song of Storms Fairy", "Pit Room Song of Storms Fairy", RHT_SHADOW_TEMPLE_PIT_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY)); + locationTable[RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -127), "Wind Hint Sun's Song Fairy", "Wind Hint Sun's Song Fairy", RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -1531), "Basement Sun's Song Fairy", "Basement Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY)); + locationTable[RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY] = Location::Fairy(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, RCQUEST_VANILLA,RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(0x1000, 1186), "Entrance Song of Storms Fairy", "Ice Cavern Entrance Song of Storms Fairy", RHT_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY)); + locationTable[RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY] = Location::Fairy(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, RCQUEST_VANILLA,RCAREA_GERUDO_TRAINING_GROUND,SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(0x1000, -445), "Entrance Song of Storms Fairy", "GTG Entrance Song of Storms Fairy", RHT_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY)); + locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY] = Location::Fairy(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(0x1000, 587), "Spirit Trial Beamos Sun's Song Fairy", "Spirit Trial Beamos Sun's Song Fairy", RHT_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY)); + + locationTable[RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY] = Location::Fairy(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -551), "MQ Lower Loop Stalfos Room Sun's Song Fairy", "MQ Lower Loop Stalfos Room Sun's Song Fairy", RHT_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY)); + locationTable[RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY] = Location::Fairy(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1563), "MQ Lower Loop Behind Iron Knuckle Sun's Song Fairy", "MQ Lower Loop Behind Iron Knuckle Sun's Song Fairy", RHT_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY)); + locationTable[RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY] = Location::Fairy(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -540), "MQ Before Dark Link Pilar Sun's Song Fairy", "MQ Before Dark Link Pilar Sun's Song Fairy", RHT_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY)); + locationTable[RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY] = Location::Fairy(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1501), "MQ Before Dark Link Left Song of Storms Fairy", "MQ Before Dark Link Left Song of Storms Fairy", RHT_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY)); + locationTable[RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY] = Location::Fairy(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1504), "MQ Before Dark Link Right Sun's Song Fairy", "MQ Before Dark Link Right Sun's Song Fairy", RHT_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY)); + locationTable[RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY] = Location::Fairy(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -220), "MQ Dinalfos Room Sun's Song Fairy", "MQ Dinalfos Room Sun's Song Fairy", RHT_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY)); + locationTable[RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 55), "MQ Beamos Song of Storms Fairy", "MQ Beamos Song of Storms Fairy", RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY)); + locationTable[RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 3342), "MQ Pit Room Song of Storms Fairy", "MQ Pit Room Song of Storms Fairy", RHT_SHADOW_TEMPLE_PIT_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY)); + locationTable[RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -127), "MQ Wind Hint Sun's Song Fairy", "MQ Wind Hint Sun's Song Fairy", RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -437), "MQ East Cell Sun's Song Fairy", "MQ East Cell Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -1458), "MQ Basement Sun's Song Fairy", "MQ Basement Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY)); +} + +static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFairyLocations); \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/ShuffleFairies.h b/soh/soh/Enhancements/randomizer/ShuffleFairies.h index f10537ae1..9fcd9ba52 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleFairies.h +++ b/soh/soh/Enhancements/randomizer/ShuffleFairies.h @@ -10,4 +10,4 @@ typedef struct FairyIdentity { } FairyIdentity; void ShuffleFairies_RegisterHooks(); -void ShuffleFairies_UnregisterHooks(); +void ShuffleFairies_UnregisterHooks(); \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/ShuffleFreestanding.cpp b/soh/soh/Enhancements/randomizer/ShuffleFreestanding.cpp index 7bf67b55d..c35cab107 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleFreestanding.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleFreestanding.cpp @@ -43,3 +43,238 @@ void ShuffleFreestanding_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* sh *should = false; } } + +void Rando::StaticData::RegisterFreestandingLocations() { + locationTable[RC_KF_BOULDER_RUPEE_2] = Location::Collectable(RC_KF_BOULDER_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-712, 1857), "Boulder Maze Second Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_2)); + locationTable[RC_KF_BOULDER_RUPEE_1] = Location::Collectable(RC_KF_BOULDER_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-1009, 1556), "Boulder Maze First Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_1)); + locationTable[RC_KF_BRIDGE_RUPEE] = Location::Collectable(RC_KF_BRIDGE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(2, -45), "Bridge Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BRIDGE_RUPEE)); + locationTable[RC_KF_BEHIND_MIDOS_RUPEE] = Location::Collectable(RC_KF_BEHIND_MIDOS_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-364, -783), "Behind Mido's House Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEHIND_MIDOS_RUPEE)); + locationTable[RC_KF_SARIAS_ROOF_WEST_HEART] = Location::Collectable(RC_KF_SARIAS_ROOF_WEST_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(451, 810), "Saria's Roof West Heart", RHT_KOKIRI_FOREST_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_ROOF_WEST_HEART)); + locationTable[RC_KF_SARIAS_ROOF_EAST_HEART] = Location::Collectable(RC_KF_SARIAS_ROOF_EAST_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(567, 819), "Saria's Roof East Heart", RHT_KOKIRI_FOREST_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_ROOF_EAST_HEART)); + locationTable[RC_KF_SARIAS_ROOF_NORTH_HEART] = Location::Collectable(RC_KF_SARIAS_ROOF_NORTH_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(509, 725), "Saria's Roof North Heart", RHT_KOKIRI_FOREST_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_ROOF_NORTH_HEART)); + locationTable[RC_KF_SOUTH_GRASS_WEST_RUPEE] = Location::Collectable(RC_KF_SOUTH_GRASS_WEST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-537, 194), "South Grass West Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE)); + locationTable[RC_KF_NORTH_GRASS_WEST_RUPEE] = Location::Collectable(RC_KF_NORTH_GRASS_WEST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(35, -418), "North Grass West Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_NORTH_GRASS_WEST_RUPEE)); + locationTable[RC_KF_NORTH_GRASS_EAST_RUPEE] = Location::Collectable(RC_KF_NORTH_GRASS_EAST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(107, -418), "North Grass East Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_NORTH_GRASS_EAST_RUPEE)); + locationTable[RC_KF_SOUTH_GRASS_EAST_RUPEE] = Location::Collectable(RC_KF_SOUTH_GRASS_EAST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-459, 181), "South Grass East Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE)); + locationTable[RC_KF_SARIAS_TOP_LEFT_HEART] = Location::Collectable(RC_KF_SARIAS_TOP_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, TWO_ACTOR_PARAMS(45, -52), "Saria's House Top Left Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_TOP_LEFT_HEART)); + locationTable[RC_KF_SARIAS_TOP_RIGHT_HEART] = Location::Collectable(RC_KF_SARIAS_TOP_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, TWO_ACTOR_PARAMS(46, 56), "Saria's House Top Right Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_TOP_RIGHT_HEART)); + locationTable[RC_KF_SARIAS_BOTTOM_LEFT_HEART] = Location::Collectable(RC_KF_SARIAS_BOTTOM_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, TWO_ACTOR_PARAMS(-46, -51), "Saria's House Bottom Left Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART)); + locationTable[RC_KF_SARIAS_BOTTOM_RIGHT_HEART] = Location::Collectable(RC_KF_SARIAS_BOTTOM_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, TWO_ACTOR_PARAMS(-46, 57), "Saria's House Bottom Right Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART)); + + locationTable[RC_KF_BEAN_RUPEE_1] = Location::Collectable(RC_KF_BEAN_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1269, -528), "Bean Platform Rupee 1", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_1)); + locationTable[RC_KF_BEAN_RUPEE_2] = Location::Collectable(RC_KF_BEAN_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1269, -567), "Bean Platform Rupee 2", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_2)); + locationTable[RC_KF_BEAN_RUPEE_3] = Location::Collectable(RC_KF_BEAN_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1304, -588), "Bean Platform Rupee 3", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_3)); + locationTable[RC_KF_BEAN_RUPEE_4] = Location::Collectable(RC_KF_BEAN_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1338, -567), "Bean Platform Rupee 4", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_4)); + locationTable[RC_KF_BEAN_RUPEE_5] = Location::Collectable(RC_KF_BEAN_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1338, -528), "Bean Platform Rupee 5", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_5)); + locationTable[RC_KF_BEAN_RUPEE_6] = Location::Collectable(RC_KF_BEAN_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1304, -508), "Bean Platform Rupee 6", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_6)); + locationTable[RC_KF_BEAN_RED_RUPEE] = Location::Collectable(RC_KF_BEAN_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1304, -548), "Bean Platform Red Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RED_RUPEE)); + + locationTable[RC_LW_BOULDER_RUPEE] = Location::Collectable(RC_LW_BOULDER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1720, -2510), "Boulder Rupee", RHT_LOST_WOODS_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BOULDER_RUPEE)); + locationTable[RC_LW_SHORTCUT_RUPEE_1] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2215, -850), "Underwater Shortcut Rupee 1", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_1)); + locationTable[RC_LW_SHORTCUT_RUPEE_2] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2164, -850), "Underwater Shortcut Rupee 2", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_2)); + locationTable[RC_LW_SHORTCUT_RUPEE_3] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2113, -850), "Underwater Shortcut Rupee 3", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_3)); + locationTable[RC_LW_SHORTCUT_RUPEE_4] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2061, -853), "Underwater Shortcut Rupee 4", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_4)); + locationTable[RC_LW_SHORTCUT_RUPEE_5] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2194, -895), "Underwater Shortcut Rupee 5", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_5)); + locationTable[RC_LW_SHORTCUT_RUPEE_6] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2156, -937), "Underwater Shortcut Rupee 6", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_6)); + locationTable[RC_LW_SHORTCUT_RUPEE_7] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_7, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2193, -813), "Underwater Shortcut Rupee 7", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_7)); + locationTable[RC_LW_SHORTCUT_RUPEE_8] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_8, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2153, -779), "Underwater Shortcut Rupee 8", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_8)); + + locationTable[RC_LH_FRONT_RUPEE] = Location::Collectable(RC_LH_FRONT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-940, 3968), "Underwater Front Rupee", RHT_LAKE_HYLIA_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_FRONT_RUPEE)); + locationTable[RC_LH_MIDDLE_RUPEE] = Location::Collectable(RC_LH_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-868, 4090), "Underwater Middle Rupee", RHT_LAKE_HYLIA_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_MIDDLE_RUPEE)); + locationTable[RC_LH_BACK_RUPEE] = Location::Collectable(RC_LH_BACK_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-861, 4212), "Underwater Back Rupee", RHT_LAKE_HYLIA_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BACK_RUPEE)); + locationTable[RC_LH_LAB_FRONT_RUPEE] = Location::Collectable(RC_LH_LAB_FRONT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(68, -207), "Lab Front Rupee", RHT_LABORATORY_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_FRONT_RUPEE)); + locationTable[RC_LH_LAB_LEFT_RUPEE] = Location::Collectable(RC_LH_LAB_LEFT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(-52, -32), "Lab Left Rupee", RHT_LABORATORY_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_LEFT_RUPEE)); + locationTable[RC_LH_LAB_RIGHT_RUPEE] = Location::Collectable(RC_LH_LAB_RIGHT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(-169, -124), "Lab Right Rupee", RHT_LABORATORY_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_RIGHT_RUPEE)); + + locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_1] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(385, -2766), "Dampe's Grave Rupee 1", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1)); + locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_2] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(528, -3216), "Dampe's Grave Rupee 2", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2)); + locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_3] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(753, -4828), "Dampe's Grave Rupee 3", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3)); + locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_4] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(570, -5599), "Dampe's Grave Rupee 4", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4)); + locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_5] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(1461, -5736), "Dampe's Grave Rupee 5", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5)); + locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_6] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2376, -4647), "Dampe's Grave Rupee 6", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6)); + locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_7] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_7, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2573, -3758), "Dampe's Grave Rupee 7", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7)); + locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_8] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_8, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(1511, -3118), "Dampe's Grave Rupee 8", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8)); + + locationTable[RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-42, 880), "Octorok Grotto Front Left Blue Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE)); + locationTable[RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(58, 803), "Octorok Grotto Back Blue Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE)); + locationTable[RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(90, 910), "Octorok Grotto Front Right Blue Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE)); + locationTable[RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-68, 959), "Octorok Grotto Front Left Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE)); + locationTable[RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(132, 961), "Octorok Grotto Front Right Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE)); + locationTable[RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-38, 768), "Octorok Grotto Back Left Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE)); + locationTable[RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(121, 784), "Octorok Grotto Back Right Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE)); + locationTable[RC_GV_OCTOROK_GROTTO_RED_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(32, 852), "Octorok Grotto Red Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE)); + + locationTable[RC_DMT_RED_RUPEE] = Location::Collectable(RC_DMT_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-625, -55), "Red Rupee Under Boulder", RHT_DEATH_MOUNTAIN_TRAIL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_RED_RUPEE)); + locationTable[RC_DMT_BLUE_RUPEE] = Location::Collectable(RC_DMT_BLUE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1060, -51), "Blue Rupee Under Boulder", RHT_DEATH_MOUNTAIN_TRAIL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BLUE_RUPEE)); + locationTable[RC_DMT_COW_GROTTO_LEFT_HEART] = Location::Collectable(RC_DMT_COW_GROTTO_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2287, -412), "Cow Grotto Left Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_LEFT_HEART)); + locationTable[RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART] = Location::Collectable(RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2371, -532), "Cow Grotto Middle Left Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART)); + locationTable[RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART] = Location::Collectable(RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2449, -534), "Cow Grotto Middle Right Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART)); + locationTable[RC_DMT_COW_GROTTO_RIGHT_HEART] = Location::Collectable(RC_DMT_COW_GROTTO_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2569, -432), "Cow Grotto Right Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RIGHT_HEART)); + locationTable[RC_DMT_COW_GROTTO_RUPEE_1] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2390, -100), "Cow Grotto Rupee 1", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_1)); + locationTable[RC_DMT_COW_GROTTO_RUPEE_2] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2390, -139), "Cow Grotto Rupee 2", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_2)); + locationTable[RC_DMT_COW_GROTTO_RUPEE_3] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2425, -160), "Cow Grotto Rupee 3", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_3)); + locationTable[RC_DMT_COW_GROTTO_RUPEE_4] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2459, -139), "Cow Grotto Rupee 4", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_4)); + locationTable[RC_DMT_COW_GROTTO_RUPEE_5] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2459, -100), "Cow Grotto Rupee 5", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_5)); + locationTable[RC_DMT_COW_GROTTO_RUPEE_6] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2425, -80), "Cow Grotto Rupee 6", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_6)); + locationTable[RC_DMT_COW_GROTTO_RED_RUPEE] = Location::Collectable(RC_DMT_COW_GROTTO_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2425, -120), "Cow Grotto Red Rupee", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RED_RUPEE)); + + locationTable[RC_DMC_NEAR_PLATFORM_RED_RUPEE] = Location::Collectable(RC_DMC_NEAR_PLATFORM_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(675, -718), "Near Warp Platform Red Rupee", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE)); + locationTable[RC_DMC_MIDDLE_PLATFORM_RED_RUPEE] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1117, -185), "Middle Platform Red Rupee", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE)); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1117, -248), "Middle Platform Blue Rupee 1", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1)); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1116, -128), "Middle Platform Blue Rupee 2", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2)); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1159, -162), "Middle Platform Blue Rupee 3", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3)); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1158, -227), "Middle Platform Blue Rupee 4", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4)); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1078, -226), "Middle Platform Blue Rupee 5", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5)); + locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1078, -164), "Middle Platform Blue Rupee 6", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6)); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1087, 454), "Distant Platform Rupee 1", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1)); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1087, 415), "Distant Platform Rupee 2", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2)); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1122, 395), "Distant Platform Rupee 3", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3)); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1156, 415), "Distant Platform Rupee 4", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4)); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1156, 454), "Distant Platform Rupee 5", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5)); + locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1122, 475), "Distant Platform Rupee 6", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6)); + locationTable[RC_DMC_DISTANT_PLATFORM_RED_RUPEE] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1122, 435), "Distant Platform Red Rupee", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE)); + + locationTable[RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(4216, -1464), "Beneath Domain Red Left Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE)); + locationTable[RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(4171, -1436), "Beneath Domain Red Middle Left Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE)); + locationTable[RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(4171, -1376), "Beneath Domain Red Middle Right Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE)); + locationTable[RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(4224, -1339), "Beneath Domain Red Right Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE)); + + locationTable[RC_ZF_BOTTOM_NORTH_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTH_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(68, -166), "Bottom North Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE)); + locationTable[RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(172, -35), "Bottom Northeast Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE)); + locationTable[RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(137, 130), "Bottom Southeast Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE)); + locationTable[RC_ZF_BOTTOM_SOUTH_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTH_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-76, 172), "Bottom South Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE)); + locationTable[RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-207, 47), "Bottom Southwest Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE)); + locationTable[RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-173, -132), "Bottom Northwest Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE)); + locationTable[RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(242, -576), "Bottom North Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE)); + locationTable[RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(540, -124), "Bottom Northeast Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE)); + locationTable[RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(397, 318), "Bottom Southeast Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE)); + locationTable[RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-166, 428), "Bottom South Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE)); + locationTable[RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-574, 163), "Bottom Southwest Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE)); + locationTable[RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-464, -389), "Bottom Northwest Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE)); + locationTable[RC_ZF_BOTTOM_NORTH_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTH_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(353, -934), "Bottom North Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE)); + locationTable[RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(1032, -254), "Bottom Northeast Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE)); + locationTable[RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(603, 466), "Bottom Southeast Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE)); + locationTable[RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-227, 696), "Bottom South Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE)); + locationTable[RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-847, 206), "Bottom Southwest Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE)); + locationTable[RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-857, -654), "Bottom Northwest Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE)); + + locationTable[RC_DEKU_TREE_LOBBY_LOWER_HEART] = Location::Collectable(RC_DEKU_TREE_LOBBY_LOWER_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-25, -81), "Lobby Lower Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART)); + locationTable[RC_DEKU_TREE_LOBBY_UPPER_HEART] = Location::Collectable(RC_DEKU_TREE_LOBBY_UPPER_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(87, -16), "Lobby Upper Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART)); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART] = Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-885, -185), "Final Room Left Front Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART)); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART] = Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-820, -76), "Final Room Left Back Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART)); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART] = Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-354, -206), "Final Room Right Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART)); + + locationTable[RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4266, -1575), "Lower Lizalfos Room Lavafall Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART)); + locationTable[RC_DODONGOS_CAVERN_BLADE_ROOM_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2039, -317), "Blade Room Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART)); + locationTable[RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3553, -1962), "Upper Lizalfos Room Left Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART)); + locationTable[RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3580, -2004), "Upper Lizalfos Room Right Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART)); + + locationTable[RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1124, -2855), "West Courtyard Right Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART)); + locationTable[RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1165, -2788), "West Courtyard Left Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART)); + locationTable[RC_FOREST_TEMPLE_WELL_WEST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_WELL_WEST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(307, -1734), "Well East Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART)); + locationTable[RC_FOREST_TEMPLE_WELL_EAST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_WELL_EAST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(251, -1735), "Well West Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART)); + + locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3476, -359), "Fire Pillar Room Left Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART)); + locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3476, -295), "Fire Pillar Room Right Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART)); + locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3526, -339), "Fire Pillar Room Back Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART)); + locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1753, -136), "East Central Room Left Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART)); + locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1813, -37), "East Central Room Right Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART)); + locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART] = Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1783, -91), "East Central Room Middle Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART)); + locationTable[RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(862, -169), "Fire Wall Chase East Pillar Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART)); + locationTable[RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(603, -190), "Fire Wall Chase West Pillar Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART)); + locationTable[RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1381, -1120), "Fire Wall Chase Exit Platform Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART)); + + locationTable[RC_WATER_TEMPLE_RIVER_HEART_1] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_1, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2781, -2515), "River Heart 1", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_1)); + locationTable[RC_WATER_TEMPLE_RIVER_HEART_2] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_2, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2528, -2727), "River Heart 2", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_2)); + locationTable[RC_WATER_TEMPLE_RIVER_HEART_3] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_3, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2436, -3348), "River Heart 3", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_3)); + locationTable[RC_WATER_TEMPLE_RIVER_HEART_4] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_4, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2021, -2937), "River Heart 4", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_4)); + + locationTable[RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5676, 1565), "Invisible Blades Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART)); + locationTable[RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5695, 1589), "Invisible Blades Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART)); + locationTable[RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3971, -1716), "Scarecrow Near Ship North Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART)); + locationTable[RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3970, -1560), "Scarecrow Near Ship South Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART)); + locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3471, -884), "After Ship Upper Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART)); + locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3473, -927), "After Ship Upper Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART)); + locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3164, -646), "After Ship Lower Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART)); + + locationTable[RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(708, 227), "Adult Climb Left Heart", RHT_SPIRIT_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART)); + locationTable[RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(661, 227), "Adult Climb Right Heart", RHT_SPIRIT_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART)); + + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-67, -748), "Basement Platform Left Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-19, -828), "Basement Platform Back Left Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(47, -805), "Basement Platform Middle Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(94, -762), "Basement Platform Back Right Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(85, -710), "Basement Platform Right Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE)); + locationTable[RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-1947, -625), "Coffin Room Front Left Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART)); + locationTable[RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-2144, -859), "Coffin Room Middle Right Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART)); + + locationTable[RC_ICE_CAVERN_LOBBY_RUPEE] = Location::Collectable(RC_ICE_CAVERN_LOBBY_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-105, 854), "Lobby Rupee", RHT_ICE_CAVERN_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_LOBBY_RUPEE)); + locationTable[RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART] = Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1171, -2258), "Map Room Left Heart", RHT_ICE_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART)); + locationTable[RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART] = Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1212, -2213), "Map Room Middle Heart", RHT_ICE_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART)); + locationTable[RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART] = Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1166, -2173), "Map Room Right Heart", RHT_ICE_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART)); + locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1] = Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1699, -697), "Sliding Block Room Rupee 1", RHT_ICE_CAVERN_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1)); + locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2] = Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1648, -715), "Sliding Block Room Rupee 2", RHT_ICE_CAVERN_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3] = Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1648, -677), "Sliding Block Room Rupee 3", RHT_ICE_CAVERN_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3)); + + locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART] = Location::Collectable(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1486, 204), "Beamos South Heart", RHT_GERUDO_TRAINING_GROUNDS_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART)); + locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART] = Location::Collectable(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1858, -183), "Beamos East Heart", RHT_GERUDO_TRAINING_GROUNDS_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART)); + + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1] = Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1855, -3953), "Shadow Trial Heart 1", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1)); + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2] = Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1844, -4038), "Shadow Trial Heart 2", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2)); + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3] = Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1827, -4106), "Shadow Trial Heart 3", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3)); + locationTable[RC_GANONS_CASTLE_FIRE_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1636, -3069), "Fire Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART)); + locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-517, 592), "Spirit Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART)); + + locationTable[RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1128, 1571), "MQ Compass Room Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART)); + locationTable[RC_DEKU_TREE_MQ_DEKU_BABA_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_DEKU_BABA_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-594, 840), "MQ Deku Baba Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_LOBBY_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-22, -88), "MQ Lobby Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_HEART)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1165, 325), "MQ Slingshot Room Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-885, -185), "MQ Final Room Left Front Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-820, -76), "MQ Final Room Left Back Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-354, -206), "MQ Final Room Right Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART)); + + locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4266, -1575), "MQ Lizalfos Room Lavafall Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART)); + locationTable[RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1955, -596), "MQ Torch Room Invisible Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART)); + + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-390, -1695), "MQ Lift Room Underwater Rupee 1", RHT_JABU_JABU_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-487, -1701), "MQ Lift Room Underwater Rupee 2", RHT_JABU_JABU_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-549, -1709), "MQ Lift Room Underwater Rupee 3", RHT_JABU_JABU_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3)); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-217, -1620), "MQ Lift Room Heart 1", RHT_JABU_JABU_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-206, -1797), "MQ Lift Room Heart 2", RHT_JABU_JABU_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2)); + + locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1124, -2855), "MQ West Courtyard Right Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART)); + locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1157, -2798), "MQ West Courtyard Middle Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART)); + locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1184, -2744), "MQ West Courtyard Left Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART)); + locationTable[RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(115, -1755), "MQ Well Middle Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART)); + locationTable[RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(15, -1755), "MQ Well West Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART)); + locationTable[RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(215, -1755), "MQ Well East Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART)); + + locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3476, -331), "MQ Fire Pillar Room Left Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART)); + locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3502, 320), "MQ Fire Pillar Room Right Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART)); + locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART] = Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3307, 180), "MQ Fire Pillar Room Lower Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART)); + + locationTable[RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5676, 1565), "MQ Invisible Blades Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART)); + locationTable[RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5695, 1589), "MQ Invisible Blades Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART)); + locationTable[RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3971, -1716), "MQ Scarecrow Near Ship North Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART)); + locationTable[RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3970, -1560), "MQ Scarecrow Near Ship South Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART)); + locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3471, -884), "MQ After Ship Upper Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART)); + locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3473, -927), "MQ After Ship Upper Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART)); + locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3164, -646), "MQ After Ship Lower Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART)); + + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1151, -535), "MQ Child Early Left Heart", RHT_SPIRIT_TEMPLE_MQ_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART)); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-976, -535), "MQ Child Early Right Heart", RHT_SPIRIT_TEMPLE_MQ_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART)); + + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-1945, -863), "MQ Coffin Room Front Right Invisible Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-83, -350), "MQ Bomb Alcove Left Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-83, -274), "MQ Bomb Alcove Right Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-2143, -621), "MQ Coffin Room Middle Left Invisible Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1083, -1174), "MQ Basement Hallway Front Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1044, -1223), "MQ Basement Hallway Left Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1114, -1223), "MQ Basement Hallway Right Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART)); + + locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1743, -528), "MQ Water Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART)); + locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2506, -1096), "MQ Light Trial Right Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART)); + locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2655, -549), "MQ Light Trial Left Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART)); +} + +static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFreestandingLocations); \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/ShufflePots.cpp b/soh/soh/Enhancements/randomizer/ShufflePots.cpp index 5b70b424e..91e44a55e 100644 --- a/soh/soh/Enhancements/randomizer/ShufflePots.cpp +++ b/soh/soh/Enhancements/randomizer/ShufflePots.cpp @@ -96,3 +96,556 @@ void ShufflePots_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va va_end(args); } + +void Rando::StaticData::RegisterPotLocations() { + // Overworld Pots + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check + locationTable[RC_KF_LINKS_HOUSE_POT] = Location::Pot(RC_KF_LINKS_HOUSE_POT, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_LINKS_HOUSE, TWO_ACTOR_PARAMS(-118, 51), "Links House Pot", "KF Links House Pot", RHT_POT_KOKIRI_FOREST, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_LINKS_HOUSE_POT)); + locationTable[RC_KF_TWINS_HOUSE_POT_2] = Location::Pot(RC_KF_TWINS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_TWINS_HOUSE, TWO_ACTOR_PARAMS(35, 57), "Twins House Pot 2", "KF Twins House Pot 2", RHT_POT_KOKIRI_FOREST, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_TWINS_HOUSE_POT_2)); + locationTable[RC_KF_TWINS_HOUSE_POT_1] = Location::Pot(RC_KF_TWINS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_TWINS_HOUSE, TWO_ACTOR_PARAMS(33, -55), "Twins House Pot 1", "KF Twins House Pot 1", RHT_POT_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_TWINS_HOUSE_POT_1)); + locationTable[RC_KF_BROTHERS_HOUSE_POT_1] = Location::Pot(RC_KF_BROTHERS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KNOW_IT_ALL_BROS_HOUSE, TWO_ACTOR_PARAMS(-134, -29), "Brothers House Pot 1", "KF Brothers House Pot 1", RHT_POT_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BROTHERS_HOUSE_POT_1)); + locationTable[RC_KF_BROTHERS_HOUSE_POT_2] = Location::Pot(RC_KF_BROTHERS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KNOW_IT_ALL_BROS_HOUSE, TWO_ACTOR_PARAMS(-68, 114), "Brothers House Pot 2", "KF Brothers House Pot 2", RHT_POT_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BROTHERS_HOUSE_POT_2)); + locationTable[RC_GF_BREAK_ROOM_POT_1] = Location::Pot(RC_GF_BREAK_ROOM_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1438, -3629), "Break Room Pot 1", "GF Break Room Pot 1", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_POT_1)); + locationTable[RC_GF_BREAK_ROOM_POT_2] = Location::Pot(RC_GF_BREAK_ROOM_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1403, -3679), "Break Room Pot 2", "GF Break Room Pot 2", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_POT_2)); + locationTable[RC_GF_KITCHEN_POT_1] = Location::Pot(RC_GF_KITCHEN_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1908, -789), "Kitchen Pot 1", "GF Kitchen Pot 1", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_POT_1)); + locationTable[RC_GF_KITCHEN_POT_2] = Location::Pot(RC_GF_KITCHEN_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1951, -850), "Kitchen Pot 2", "GF Kitchen Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_POT_2)); + locationTable[RC_GF_NORTH_F1_CARPENTER_POT_1] = Location::Pot(RC_GF_NORTH_F1_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-475, -2622), "North F1 Carpenter Pot 1", "GF North F1 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_POT_1)); + locationTable[RC_GF_NORTH_F1_CARPENTER_POT_2] = Location::Pot(RC_GF_NORTH_F1_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-512, -2621), "North F1 Carpenter Pot 2", "GF North F1 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_POT_2)); + locationTable[RC_GF_NORTH_F1_CARPENTER_POT_3] = Location::Pot(RC_GF_NORTH_F1_CARPENTER_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-511, -2582), "North F1 Carpenter Pot 3", "GF North F1 Carpenter Pot 3", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_POT_3)); + locationTable[RC_GF_NORTH_F2_CARPENTER_POT_1] = Location::Pot(RC_GF_NORTH_F2_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(67, -1975), "North F2 Carpenter Pot 1", "GF North F2 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F2_CARPENTER_POT_1)); + locationTable[RC_GF_NORTH_F2_CARPENTER_POT_2] = Location::Pot(RC_GF_NORTH_F2_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(39, -1943), "North F2 Carpenter Pot 2", "GF North F2 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F2_CARPENTER_POT_2)); + locationTable[RC_GF_SOUTH_F1_CARPENTER_POT_1] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(691, 48), "South F1 Carpenter Pot 1", "GF South F1 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1)); + locationTable[RC_GF_SOUTH_F1_CARPENTER_POT_2] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(691, 16), "South F1 Carpenter Pot 2", "GF South F1 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2)); + locationTable[RC_GF_SOUTH_F1_CARPENTER_POT_3] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(661, 16), "South F1 Carpenter Pot 3", "GF South F1 Carpenter Pot 3", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3)); + locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(26, 524), "South F1 Carpenter Cell Pot 1", "GF South F1 Carpenter Cell Pot 1", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1)); + locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(61, 549), "South F1 Carpenter Cell Pot 2", "GF South F1 Carpenter Cell Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2)); + locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(215, 549), "South F1 Carpenter Cell Pot 3", "GF South F1 Carpenter Cell Pot 3", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3)); + locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(254, 529), "South F1 Carpenter Cell Pot 4", "GF South F1 Carpenter Cell Pot 4", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4)); + locationTable[RC_WASTELAND_NEAR_GS_POT_1] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_1, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(488, -2424), "Near GS Pot 1", "Wasteland Near GS Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_1)); + locationTable[RC_WASTELAND_NEAR_GS_POT_2] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_2, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(485, -2463), "Near GS Pot 2", "Wasteland Near GS Pot 2", RHT_POT_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_2)); + locationTable[RC_WASTELAND_NEAR_GS_POT_3] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_3, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(806, -2426), "Near GS Pot 3", "Wasteland Near GS Pot 3", RHT_POT_GERUDO_FORTRESS, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_3)); + locationTable[RC_WASTELAND_NEAR_GS_POT_4] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_4, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(801, -2460), "Near GS Pot 4", "Wasteland Near GS Pot 4", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_4)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_1] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-60, 27), "Guard House Child Pot 1", "MK Guard House Child Pot 1", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_1)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_2] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-89, 28), "Guard House Child Pot 2", "MK Guard House Child Pot 2", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_2)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_3] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-110, 6), "Guard House Child Pot 3", "MK Guard House Child Pot 3", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_3)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_4] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-58, -7), "Guard House Child Pot 4", "MK Guard House Child Pot 4", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_4)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_5] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-80, -7), "Guard House Child Pot 5", "MK Guard House Child Pot 5", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_5)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_6] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_6, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-65, -45), "Guard House Child Pot 6", "MK Guard House Child Pot 6", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_6)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_7] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_7, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-85, -41), "Guard House Child Pot 7", "MK Guard House Child Pot 7", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_7)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_8] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_8, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-107, -45), "Guard House Child Pot 8", "MK Guard House Child Pot 8", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_8)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_9] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_9, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-66, -79), "Guard House Child Pot 9", "MK Guard House Child Pot 9", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_9)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_10] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_10, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-88, -84), "Guard House Child Pot 10", "MK Guard House Child Pot 10", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_10)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_11] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_11, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(70, 215), "Guard House Child Pot 11", "MK Guard House Child Pot 11", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_11)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_12] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_12, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(68, 148), "Guard House Child Pot 12", "MK Guard House Child Pot 12", RHT_POT_MARKET, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_12)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_13] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_13, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(73, 117), "Guard House Child Pot 13", "MK Guard House Child Pot 13", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_13)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_14] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_14, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(40, 123), "Guard House Child Pot 14", "MK Guard House Child Pot 14", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_14)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_15] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_15, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(43, 89), "Guard House Child Pot 15", "MK Guard House Child Pot 15", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_15)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_16] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_16, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(68, 81), "Guard House Child Pot 16", "MK Guard House Child Pot 16", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_16)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_17] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_17, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(21, 73), "Guard House Child Pot 17", "MK Guard House Child Pot 17", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_17)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_18] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_18, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(64, 45), "Guard House Child Pot 18", "MK Guard House Child Pot 18", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_18)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_19] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_19, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(84, 31), "Guard House Child Pot 19", "MK Guard House Child Pot 19", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_19)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_20] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_20, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(42, 26), "Guard House Child Pot 20", "MK Guard House Child Pot 20", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_20)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_21] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_21, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(20, 34), "Guard House Child Pot 21", "MK Guard House Child Pot 21", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_21)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_22] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_22, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(89, -2), "Guard House Child Pot 22", "MK Guard House Child Pot 22", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_22)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_23] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_23, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(70, -12), "Guard House Child Pot 23", "MK Guard House Child Pot 23", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_23)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_24] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_24, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(42, -5), "Guard House Child Pot 24", "MK Guard House Child Pot 24", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_24)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_25] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_25, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(16, -6), "Guard House Child Pot 25", "MK Guard House Child Pot 25", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_25)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_26] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_26, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(68, -44), "Guard House Child Pot 26", "MK Guard House Child Pot 26", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_26)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_27] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_27, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(37, -40), "Guard House Child Pot 27", "MK Guard House Child Pot 27", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_27)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_28] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_28, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(70, -80), "Guard House Child Pot 28", "MK Guard House Child Pot 28", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_28)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_29] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_29, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(50, -74), "Guard House Child Pot 29", "MK Guard House Child Pot 29", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_29)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_30] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_30, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(28, -79), "Guard House Child Pot 30", "MK Guard House Child Pot 30", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_30)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_31] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_31, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(39, -111), "Guard House Child Pot 31", "MK Guard House Child Pot 31", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_31)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_32] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_32, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(169, 216), "Guard House Child Pot 32", "MK Guard House Child Pot 32", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_32)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_33] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_33, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(168, 166), "Guard House Child Pot 33", "MK Guard House Child Pot 33", RHT_POT_MARKET, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_33)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_34] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_34, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(170, 120), "Guard House Child Pot 34", "MK Guard House Child Pot 34", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_34)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_35] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_35, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(177, 85), "Guard House Child Pot 35", "MK Guard House Child Pot 35", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_35)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_36] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_36, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(155, 39), "Guard House Child Pot 36", "MK Guard House Child Pot 36", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_36)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_37] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_37, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(184, 13), "Guard House Child Pot 37", "MK Guard House Child Pot 37", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_37)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_38] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_38, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(156, -1), "Guard House Child Pot 38", "MK Guard House Child Pot 38", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_38)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_39] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_39, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(181, -33), "Guard House Child Pot 39", "MK Guard House Child Pot 39", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_39)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_40] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_40, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(156, -45), "Guard House Child Pot 40", "MK Guard House Child Pot 40", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_40)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_41] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_41, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(172, -82), "Guard House Child Pot 41", "MK Guard House Child Pot 41", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_41)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_42] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_42, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(170, -120), "Guard House Child Pot 42", "MK Guard House Child Pot 42", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_42)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_43] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_43, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(170, -166), "Guard House Child Pot 43", "MK Guard House Child Pot 43", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_43)); + locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_44] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_44, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(170, -216), "Guard House Child Pot 44", "MK Guard House Child Pot 44", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_44)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_1] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(61, 204), "Guard House Adult Pot 1", "MK Guard House Adult Pot 1", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_1)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_2] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(71, 132), "Guard House Adult Pot 2", "MK Guard House Adult Pot 2", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_2)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_3] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(74, 23), "Guard House Adult Pot 3", "MK Guard House Adult Pot 3", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_3)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_4] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(40, 4), "Guard House Adult Pot 4", "MK Guard House Adult Pot 4", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_4)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_5] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(71, -22), "Guard House Adult Pot 5", "MK Guard House Adult Pot 5", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_5)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_6] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_6, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(44, -151), "Guard House Adult Pot 6", "MK Guard House Adult Pot 6", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_6)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_7] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_7, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(79, -182), "Guard House Adult Pot 7", "MK Guard House Adult Pot 7", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_7)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_8] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_8, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(44, -198), "Guard House Adult Pot 8", "MK Guard House Adult Pot 8", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_8)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_9] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_9, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(168, 210), "Guard House Adult Pot 9", "MK Guard House Adult Pot 9", RHT_POT_MARKET, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_9)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_10] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_10, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(167, -122), "Guard House Adult Pot 10", "MK Guard House Adult Pot 10", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_10)); + locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_11] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_11, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(167, -210), "Guard House Adult Pot 11", "MK Guard House Adult Pot 11", RHT_POT_MARKET, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_11)); + locationTable[RC_MK_BACK_ALLEY_HOUSE_POT_1] = Location::Pot(RC_MK_BACK_ALLEY_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_BACK_ALLEY_HOUSE, TWO_ACTOR_PARAMS(100, 45), "Back Alley House Pot 1", "MK Back Alley House Pot 1", RHT_POT_MARKET, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_BACK_ALLEY_HOUSE_POT_1)); + locationTable[RC_MK_BACK_ALLEY_HOUSE_POT_2] = Location::Pot(RC_MK_BACK_ALLEY_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_BACK_ALLEY_HOUSE, TWO_ACTOR_PARAMS(12, -180), "Back Alley House Pot 2", "MK Back Alley House Pot 2", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_BACK_ALLEY_HOUSE_POT_2)); + locationTable[RC_MK_BACK_ALLEY_HOUSE_POT_3] = Location::Pot(RC_MK_BACK_ALLEY_HOUSE_POT_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_BACK_ALLEY_HOUSE, TWO_ACTOR_PARAMS(-54, -180), "Back Alley House Pot 3", "MK Back Alley House Pot 3", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_BACK_ALLEY_HOUSE_POT_3)); + locationTable[RC_KAK_NEAR_POTION_SHOP_POT_1] = Location::Pot(RC_KAK_NEAR_POTION_SHOP_POT_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(222, -377), "Near Potion Shop Pot 1", "Kak Near Potion Shop Pot 1", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_POTION_SHOP_POT_1)); + locationTable[RC_KAK_NEAR_POTION_SHOP_POT_2] = Location::Pot(RC_KAK_NEAR_POTION_SHOP_POT_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(255, -366), "Near Potion Shop Pot 2", "Kak Near Potion Shop Pot 2", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_POTION_SHOP_POT_2)); + locationTable[RC_KAK_NEAR_POTION_SHOP_POT_3] = Location::Pot(RC_KAK_NEAR_POTION_SHOP_POT_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(284, -356), "Near Potion Shop Pot 3", "Kak Near Potion Shop Pot 3", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_POTION_SHOP_POT_3)); + locationTable[RC_KAK_NEAR_IMPAS_HOUSE_POT_1] = Location::Pot(RC_KAK_NEAR_IMPAS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-384, 1568), "Near Impas House Pot 1", "Kak Near Impas House Pot 1", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_1)); + locationTable[RC_KAK_NEAR_IMPAS_HOUSE_POT_2] = Location::Pot(RC_KAK_NEAR_IMPAS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-384, 1539), "Near Impas House Pot 2", "Kak Near Impas House Pot 2", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_2)); + locationTable[RC_KAK_NEAR_IMPAS_HOUSE_POT_3] = Location::Pot(RC_KAK_NEAR_IMPAS_HOUSE_POT_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-384, 1510), "Near Impas House Pot 3", "Kak Near Impas House Pot 3", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_3)); + locationTable[RC_KAK_NEAR_GUARDS_HOUSE_POT_1] = Location::Pot(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-392, -870), "Near Guards House Pot 1", "Kak Near Guards House Pot 1", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_1)); + locationTable[RC_KAK_NEAR_GUARDS_HOUSE_POT_2] = Location::Pot(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-422, -883), "Near Guards House Pot 2", "Kak Near Guards House Pot 2", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_2)); + locationTable[RC_KAK_NEAR_GUARDS_HOUSE_POT_3] = Location::Pot(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-450, -895), "Near Guards House Pot 3", "Kak Near Guards House Pot 3", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_3)); + locationTable[RC_KAK_NEAR_MEDICINE_SHOP_POT_1] = Location::Pot(RC_KAK_NEAR_MEDICINE_SHOP_POT_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(781, 89), "Near Medicine Shop Pot 1", "Kak Near Medicine Shop Pot 1", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_1)); + locationTable[RC_KAK_NEAR_MEDICINE_SHOP_POT_2] = Location::Pot(RC_KAK_NEAR_MEDICINE_SHOP_POT_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(815, 89), "Near Medicine Shop Pot 2", "Kak Near Medicine Shop Pot 2", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_2)); + locationTable[RC_GY_DAMPES_GRAVE_POT_1] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(-319, -1542), "Dampes Grave Pot 1", "GY Dampes Grave Pot 1", RHT_POT_GRAVEYARD, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_1)); + locationTable[RC_GY_DAMPES_GRAVE_POT_2] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(-319, -1600), "Dampes Grave Pot 2", "GY Dampes Grave Pot 2", RHT_POT_GRAVEYARD, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_2)); + locationTable[RC_GY_DAMPES_GRAVE_POT_3] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(-364, -1571), "Dampes Grave Pot 3", "GY Dampes Grave Pot 3", RHT_POT_GRAVEYARD, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_3)); + locationTable[RC_GY_DAMPES_GRAVE_POT_4] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_4, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(198, -1540), "Dampes Grave Pot 4", "GY Dampes Grave Pot 4", RHT_POT_GRAVEYARD, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_4)); + locationTable[RC_GY_DAMPES_GRAVE_POT_5] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_5, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(198, -1608), "Dampes Grave Pot 5", "GY Dampes Grave Pot 5", RHT_POT_GRAVEYARD, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_5)); + locationTable[RC_GY_DAMPES_GRAVE_POT_6] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_6, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(239, -1577), "Dampes Grave Pot 6", "GY Dampes Grave Pot 6", RHT_POT_GRAVEYARD, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_6)); + locationTable[RC_GC_LOWER_STAIRCASE_POT_1] = Location::Pot(RC_GC_LOWER_STAIRCASE_POT_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-189, 866), "Lower Staircase Pot 1", "GC Lower Staircase Pot 1", RHT_POT_GORON_CITY, RG_DEKU_STICK_1, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_LOWER_STAIRCASE_POT_1)); + locationTable[RC_GC_LOWER_STAIRCASE_POT_2] = Location::Pot(RC_GC_LOWER_STAIRCASE_POT_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-271, 825), "Lower Staircase Pot 2", "GC Lower Staircase Pot 2", RHT_POT_GORON_CITY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_LOWER_STAIRCASE_POT_2)); + locationTable[RC_GC_UPPER_STAIRCASE_POT_1] = Location::Pot(RC_GC_UPPER_STAIRCASE_POT_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1170, 60), "Upper Staircase Pot 1", "GC Upper Staircase Pot 1", RHT_POT_GORON_CITY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_UPPER_STAIRCASE_POT_1)); + locationTable[RC_GC_UPPER_STAIRCASE_POT_2] = Location::Pot(RC_GC_UPPER_STAIRCASE_POT_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1185, 95), "Upper Staircase Pot 2", "GC Upper Staircase Pot 2", RHT_POT_GORON_CITY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_UPPER_STAIRCASE_POT_2)); + locationTable[RC_GC_UPPER_STAIRCASE_POT_3] = Location::Pot(RC_GC_UPPER_STAIRCASE_POT_3, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1200, 63), "Upper Staircase Pot 3", "GC Upper Staircase Pot 3", RHT_POT_GORON_CITY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_UPPER_STAIRCASE_POT_3)); + locationTable[RC_GC_MEDIGORON_POT_1] = Location::Pot(RC_GC_MEDIGORON_POT_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-694, 1196), "Medigoron Pot 1", "GC Medigoron Pot 1", RHT_POT_GORON_CITY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MEDIGORON_POT_1)); + locationTable[RC_GC_DARUNIA_POT_1] = Location::Pot(RC_GC_DARUNIA_POT_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(262, -1210), "Darunia Pot 1", "GC Darunia Pot 1", RHT_POT_GORON_CITY, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_DARUNIA_POT_1)); + locationTable[RC_GC_DARUNIA_POT_2] = Location::Pot(RC_GC_DARUNIA_POT_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(261, -1254), "Darunia Pot 2", "GC Darunia Pot 2", RHT_POT_GORON_CITY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_DARUNIA_POT_2)); + locationTable[RC_GC_DARUNIA_POT_3] = Location::Pot(RC_GC_DARUNIA_POT_3, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(262, -1386), "Darunia Pot 3", "GC Darunia Pot 3", RHT_POT_GORON_CITY, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_DARUNIA_POT_3)); + locationTable[RC_DMC_NEAR_GC_POT_2] = Location::Pot(RC_DMC_NEAR_GC_POT_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1546, 141), "Near GC Pot 2", "DMC Near GC Pot 2", RHT_POT_DEATH_MOUNTAIN_CRATER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_GC_POT_2)); + locationTable[RC_DMC_NEAR_GC_POT_3] = Location::Pot(RC_DMC_NEAR_GC_POT_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1641, -127), "Near GC Pot 3", "DMC Near GC Pot 3", RHT_POT_DEATH_MOUNTAIN_CRATER, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_GC_POT_3)); + locationTable[RC_DMC_NEAR_GC_POT_1] = Location::Pot(RC_DMC_NEAR_GC_POT_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1590, 132), "Near GC Pot 1", "DMC Near GC Pot 1", RHT_POT_DEATH_MOUNTAIN_CRATER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_GC_POT_1)); + locationTable[RC_DMC_NEAR_GC_POT_4] = Location::Pot(RC_DMC_NEAR_GC_POT_4, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1606, -166), "Near GC Pot 4", "DMC Near GC Pot 4", RHT_POT_DEATH_MOUNTAIN_CRATER, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_GC_POT_4)); + locationTable[RC_ZD_NEAR_SHOP_POT_1] = Location::Pot(RC_ZD_NEAR_SHOP_POT_1, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(676, 377), "Near Shop Pot 1", "ZD Near Shop Pot 1", RHT_POT_ZORAS_DOMAIN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_1)); + locationTable[RC_ZD_NEAR_SHOP_POT_2] = Location::Pot(RC_ZD_NEAR_SHOP_POT_2, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(614, 419), "Near Shop Pot 2", "ZD Near Shop Pot 2", RHT_POT_ZORAS_DOMAIN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_2)); + locationTable[RC_ZD_NEAR_SHOP_POT_3] = Location::Pot(RC_ZD_NEAR_SHOP_POT_3, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(289, 415), "Near Shop Pot 3", "ZD Near Shop Pot 3", RHT_POT_ZORAS_DOMAIN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_3)); + locationTable[RC_ZD_NEAR_SHOP_POT_4] = Location::Pot(RC_ZD_NEAR_SHOP_POT_4, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(289, 289), "Near Shop Pot 4", "ZD Near Shop Pot 4", RHT_POT_ZORAS_DOMAIN, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_4)); + locationTable[RC_ZD_NEAR_SHOP_POT_5] = Location::Pot(RC_ZD_NEAR_SHOP_POT_5, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(220, 384), "Near Shop Pot 5", "ZD Near Shop Pot 5", RHT_POT_ZORAS_DOMAIN, RG_DEKU_STICK_1, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_5)); + locationTable[RC_ZF_HIDDEN_CAVE_POT_1] = Location::Pot(RC_ZF_HIDDEN_CAVE_POT_1, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(385, 2587), "Hidden Cave Pot 1", "ZF Hidden Cave Pot 1", RHT_POT_ZORAS_FOUNTAIN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_HIDDEN_CAVE_POT_1)); + locationTable[RC_ZF_HIDDEN_CAVE_POT_2] = Location::Pot(RC_ZF_HIDDEN_CAVE_POT_2, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(418, 2609), "Hidden Cave Pot 2", "ZF Hidden Cave Pot 2", RHT_POT_ZORAS_FOUNTAIN, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_HIDDEN_CAVE_POT_2)); + locationTable[RC_ZF_HIDDEN_CAVE_POT_3] = Location::Pot(RC_ZF_HIDDEN_CAVE_POT_3, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(430, 2568), "Hidden Cave Pot 3", "ZF Hidden Cave Pot 3", RHT_POT_ZORAS_FOUNTAIN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_HIDDEN_CAVE_POT_3)); + locationTable[RC_ZF_NEAR_JABU_POT_1] = Location::Pot(RC_ZF_NEAR_JABU_POT_1, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-1630, 170), "Near Jabu Pot 1", "ZF Near Jabu Pot 1", RHT_POT_ZORAS_FOUNTAIN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_NEAR_JABU_POT_1)); + locationTable[RC_ZF_NEAR_JABU_POT_2] = Location::Pot(RC_ZF_NEAR_JABU_POT_2, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-1550, 170), "Near Jabu Pot 2", "ZF Near Jabu Pot 2", RHT_POT_ZORAS_FOUNTAIN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_NEAR_JABU_POT_2)); + locationTable[RC_ZF_NEAR_JABU_POT_3] = Location::Pot(RC_ZF_NEAR_JABU_POT_3, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-1630, -260), "Near Jabu Pot 3", "ZF Near Jabu Pot 3", RHT_POT_ZORAS_FOUNTAIN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_NEAR_JABU_POT_3)); + locationTable[RC_ZF_NEAR_JABU_POT_4] = Location::Pot(RC_ZF_NEAR_JABU_POT_4, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-1550, -260), "Near Jabu Pot 4", "ZF Near Jabu Pot 4", RHT_POT_ZORAS_FOUNTAIN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_NEAR_JABU_POT_4)); + locationTable[RC_LLR_FRONT_POT_1] = Location::Pot(RC_LLR_FRONT_POT_1, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(667, -3218), "Front Pot 1", "LLR Front Pot 1", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_FRONT_POT_1)); + locationTable[RC_LLR_FRONT_POT_2] = Location::Pot(RC_LLR_FRONT_POT_2, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(667, -3186), "Front Pot 2", "LLR Front Pot 2", RHT_POT_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_FRONT_POT_2)); + locationTable[RC_LLR_FRONT_POT_3] = Location::Pot(RC_LLR_FRONT_POT_3, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(667, -3154), "Front Pot 3", "LLR Front Pot 3", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_FRONT_POT_3)); + locationTable[RC_LLR_FRONT_POT_4] = Location::Pot(RC_LLR_FRONT_POT_4, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(667, -3122), "Front Pot 4", "LLR Front Pot 4", RHT_POT_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_FRONT_POT_4)); + locationTable[RC_LLR_RAIN_SHED_POT_1] = Location::Pot(RC_LLR_RAIN_SHED_POT_1, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(852, 172), "Rain Shed Pot 1", "LLR Rain Shed Pot 1", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_RAIN_SHED_POT_1)); + locationTable[RC_LLR_RAIN_SHED_POT_2] = Location::Pot(RC_LLR_RAIN_SHED_POT_2, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(840, 212), "Rain Shed Pot 2", "LLR Rain Shed Pot 2", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_RAIN_SHED_POT_2)); + locationTable[RC_LLR_RAIN_SHED_POT_3] = Location::Pot(RC_LLR_RAIN_SHED_POT_3, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(872, 219), "Rain Shed Pot 3", "LLR Rain Shed Pot 3", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_RAIN_SHED_POT_3)); + locationTable[RC_LLR_TALONS_HOUSE_POT_1] = Location::Pot(RC_LLR_TALONS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(1255, 47), "Talons House Pot 1", "LLR Talons House Pot 1", RHT_POT_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_TALONS_HOUSE_POT_1)); + locationTable[RC_LLR_TALONS_HOUSE_POT_2] = Location::Pot(RC_LLR_TALONS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(1256, -51), "Talons House Pot 2", "LLR Talons House Pot 2", RHT_POT_LON_LON_RANCH, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_TALONS_HOUSE_POT_2)); + locationTable[RC_LLR_TALONS_HOUSE_POT_3] = Location::Pot(RC_LLR_TALONS_HOUSE_POT_3, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(1256, -78), "Talons House Pot 3", "LLR Talons House Pot 3", RHT_POT_LON_LON_RANCH, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_TALONS_HOUSE_POT_3)); + locationTable[RC_HF_COW_GROTTO_POT_1] = Location::Pot(RC_HF_COW_GROTTO_POT_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3410, -223), "Cow Grotto Pot 1", "HF Cow Grotto Pot 1", RHT_POT_HYRULE_FIELD, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_POT_1)); + locationTable[RC_HF_COW_GROTTO_POT_2] = Location::Pot(RC_HF_COW_GROTTO_POT_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3390, -258), "Cow Grotto Pot 2", "HF Cow Grotto Pot 2", RHT_POT_HYRULE_FIELD, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_POT_2)); + locationTable[RC_HC_STORMS_GROTTO_POT_1] = Location::Pot(RC_HC_STORMS_GROTTO_POT_1, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1843, 1014), "Storms Grotto Pot 1", "HC Storms Grotto Pot 1", RHT_POT_HYRULE_CASTLE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_POT_1)); + locationTable[RC_HC_STORMS_GROTTO_POT_2] = Location::Pot(RC_HC_STORMS_GROTTO_POT_2, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1769, 954), "Storms Grotto Pot 2", "HC Storms Grotto Pot 2", RHT_POT_HYRULE_CASTLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_POT_2)); + locationTable[RC_HC_STORMS_GROTTO_POT_3] = Location::Pot(RC_HC_STORMS_GROTTO_POT_3, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1857, 897), "Storms Grotto Pot 3", "HC Storms Grotto Pot 3", RHT_POT_HYRULE_CASTLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_POT_3)); + locationTable[RC_HC_STORMS_GROTTO_POT_4] = Location::Pot(RC_HC_STORMS_GROTTO_POT_4, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1764, 847), "Storms Grotto Pot 4", "HC Storms Grotto Pot 4", RHT_POT_HYRULE_CASTLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_POT_4)); + + // Dungeon Pots + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check + locationTable[RC_DODONGOS_CAVERN_LIZALFOS_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_LIZALFOS_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2673, -2060), "Lizalfos Pot 3", "Dodongos Cavern Lizalfos Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_3)); + locationTable[RC_DODONGOS_CAVERN_LIZALFOS_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_LIZALFOS_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3526, -2574), "Lizalfos Pot 2", "Dodongos Cavern Lizalfos Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_2)); + locationTable[RC_DODONGOS_CAVERN_LIZALFOS_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_LIZALFOS_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3579, -2574), "Lizalfos Pot 1", "Dodongos Cavern Lizalfos Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_1)); + locationTable[RC_DODONGOS_CAVERN_LIZALFOS_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_LIZALFOS_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2653, -2031), "Lizalfos Pot 4", "Dodongos Cavern Lizalfos Pot 4", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_4)); + locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1708, -471), "Side Room Pot 1", "Dodongos Cavern Side Room Pot 1", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_1)); + locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1746, -424), "Side Room Pot 2", "Dodongos Cavern Side Room Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_2)); + locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2573, -489), "Side Room Pot 3", "Dodongos Cavern Side Room Pot 3", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_3)); + locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2622, -489), "Side Room Pot 4", "Dodongos Cavern Side Room Pot 4", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_4)); + locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3507, -964), "Side Room Pot 5", "Dodongos Cavern Side Room Pot 5", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_5)); + locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3617, -911), "Side Room Pot 6", "Dodongos Cavern Side Room Pot 6", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_6)); + locationTable[RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1846, -1879), "Torch Room Pot 1", "Dodongos Cavern Torch Room Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_1)); + locationTable[RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2050, -1964), "Torch Room Pot 2", "Dodongos Cavern Torch Room Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_2)); + locationTable[RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2281, -1799), "Torch Room Pot 3", "Dodongos Cavern Torch Room Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_3)); + locationTable[RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1836, -1239), "Torch Room Pot 4", "Dodongos Cavern Torch Room Pot 4", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_4)); + locationTable[RC_DODONGOS_CAVERN_STAIRCASE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_STAIRCASE_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2414, -1823), "Staircase Pot 1", "Dodongos Cavern Staircase Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_1)); + locationTable[RC_DODONGOS_CAVERN_STAIRCASE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_STAIRCASE_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2368, -1827), "Staircase Pot 2", "Dodongos Cavern Staircase Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_2)); + locationTable[RC_DODONGOS_CAVERN_STAIRCASE_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_STAIRCASE_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1574, -1831), "Staircase Pot 3", "Dodongos Cavern Staircase Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_3)); + locationTable[RC_DODONGOS_CAVERN_STAIRCASE_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_STAIRCASE_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1528, -1827), "Staircase Pot 4", "Dodongos Cavern Staircase Pot 4", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_4)); + locationTable[RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2704, -483), "Single Eye Pot 1", "Dodongos Cavern Single Eye Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_1)); + locationTable[RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3195, -155), "Single Eye Pot 2", "Dodongos Cavern Single Eye Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_2)); + locationTable[RC_DODONGOS_CAVERN_BLADE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_BLADE_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1656, -531), "Blade Pot 1", "Dodongos Cavern Blade Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_POT_1)); + locationTable[RC_DODONGOS_CAVERN_BLADE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_BLADE_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1831, -593), "Blade Pot 2", "Dodongos Cavern Blade Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_POT_2)); + locationTable[RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3329, -753), "Double Eye Pot 1", "Dodongos Cavern Double Eye Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_1)); + locationTable[RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2705, -1086), "Double Eye Pot 2", "Dodongos Cavern Double Eye Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_2)); + locationTable[RC_DODONGOS_CAVERN_BACK_ROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_BACK_ROOM_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1027, -3704), "Back Room Pot 1", "Dodongos Cavern Back Room Pot 1", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_1)); + locationTable[RC_DODONGOS_CAVERN_BACK_ROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_BACK_ROOM_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(966, -3704), "Back Room Pot 2", "Dodongos Cavern Back Room Pot 2", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_2)); + locationTable[RC_DODONGOS_CAVERN_BACK_ROOM_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_BACK_ROOM_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(125, -3854), "Back Room Pot 3", "Dodongos Cavern Back Room Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_3)); + locationTable[RC_DODONGOS_CAVERN_BACK_ROOM_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_BACK_ROOM_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(78, -3835), "Back Room Pot 4", "Dodongos Cavern Back Room Pot 4", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_4)); + locationTable[RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1295, -3612), "Above Big Octo Pot 1", "Jabu Jabus Belly Above Big Octo Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1)); + locationTable[RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1355, -3612), "Above Big Octo Pot 2", "Jabu Jabus Belly Above Big Octo Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2)); + locationTable[RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3] = Location::Pot(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1422, -3612), "Above Big Octo Pot 3", "Jabu Jabus Belly Above Big Octo Pot 3", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3)); + locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_1, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(-551, 33), "Barinade Pot 1", "Jabu Jabus Belly Barinade Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_1)); + locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_2, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(551, 36), "Barinade Pot 2", "Jabu Jabus Belly Barinade Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_2)); + locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_3] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_3, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(554, -493), "Barinade Pot 3", "Jabu Jabus Belly Barinade Pot 3", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_3)); + locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_4] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_4, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(-543, -496), "Barinade Pot 4", "Jabu Jabus Belly Barinade Pot 4", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_4)); + locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_5] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_5, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(-268, -786), "Barinade Pot 5", "Jabu Jabus Belly Barinade Pot 5", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_5)); + locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_6] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_6, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(279, -761), "Barinade Pot 6", "Jabu Jabus Belly Barinade Pot 6", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_6)); + locationTable[RC_JABU_JABUS_BELLY_BASEMENT_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_BASEMENT_POT_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(703, -2371), "Basement Pot 1", "Jabu Jabus Belly Basement Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_1)); + locationTable[RC_JABU_JABUS_BELLY_BASEMENT_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_BASEMENT_POT_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(645, -2408), "Basement Pot 2", "Jabu Jabus Belly Basement Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_2)); + locationTable[RC_JABU_JABUS_BELLY_BASEMENT_POT_3] = Location::Pot(RC_JABU_JABUS_BELLY_BASEMENT_POT_3, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(650, -2344), "Basement Pot 3", "Jabu Jabus Belly Basement Pot 3", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_3)); + locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1127, -2271), "Two Octorok Pot 1", "Jabu Jabus Belly Two Octorok Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1)); + locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1178, -2272), "Two Octorok Pot 2", "Jabu Jabus Belly Two Octorok Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2)); + locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1150, -2248), "Two Octorok Pot 3", "Jabu Jabus Belly Two Octorok Pot 3", RHT_POT_JABU_JABUS_BELLY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3)); + locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1131, -2221), "Two Octorok Pot 4", "Jabu Jabus Belly Two Octorok Pot 4", RHT_POT_JABU_JABUS_BELLY, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4)); + locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1173, -2227), "Two Octorok Pot 5", "Jabu Jabus Belly Two Octorok Pot 5", RHT_POT_JABU_JABUS_BELLY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5)); + locationTable[RC_FOREST_TEMPLE_LOBBY_POT_1] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(720, -1037), "Lobby Pot 1", "Forest Temple Lobby Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_1)); + locationTable[RC_FOREST_TEMPLE_LOBBY_POT_2] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(675, -989), "Lobby Pot 2", "Forest Temple Lobby Pot 2", RHT_POT_FOREST_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_2)); + locationTable[RC_FOREST_TEMPLE_LOBBY_POT_3] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_3, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(630, -943), "Lobby Pot 3", "Forest Temple Lobby Pot 3", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_3)); + locationTable[RC_FOREST_TEMPLE_LOBBY_POT_4] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_4, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-384, -937), "Lobby Pot 4", "Forest Temple Lobby Pot 4", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_4)); + locationTable[RC_FOREST_TEMPLE_LOBBY_POT_5] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_5, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-429, -981), "Lobby Pot 5", "Forest Temple Lobby Pot 5", RHT_POT_FOREST_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_5)); + locationTable[RC_FOREST_TEMPLE_LOBBY_POT_6] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_6, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-477, -1034), "Lobby Pot 6", "Forest Temple Lobby Pot 6", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_6)); + locationTable[RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1] = Location::Pot(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(90, -3583), "Lower Stalfos Pot 1", "Forest Temple Lower Stalfos Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_1)); + locationTable[RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2] = Location::Pot(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(142, -3583), "Lower Stalfos Pot 2", "Forest Temple Lower Stalfos Pot 2", RHT_POT_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_2)); + locationTable[RC_FOREST_TEMPLE_GREEN_POE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_GREEN_POE_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1647, -1529), "Green Poe Pot 1", "Forest Temple Green Poe Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_1)); + locationTable[RC_FOREST_TEMPLE_GREEN_POE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_GREEN_POE_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1645, -1588), "Green Poe Pot 2", "Forest Temple Green Poe Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_2)); + locationTable[RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1] = Location::Pot(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(32, -3012), "Upper Stalfos Pot 1", "Forest Temple Upper Stalfos Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_1)); + locationTable[RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2] = Location::Pot(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(202, -3012), "Upper Stalfos Pot 2", "Forest Temple Upper Stalfos Pot 2", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_2)); + locationTable[RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3] = Location::Pot(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(30, -3631), "Upper Stalfos Pot 3", "Forest Temple Upper Stalfos Pot 3", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_3)); + locationTable[RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4] = Location::Pot(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(206, -3631), "Upper Stalfos Pot 4", "Forest Temple Upper Stalfos Pot 4", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_4)); + locationTable[RC_FOREST_TEMPLE_BLUE_POE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_BLUE_POE_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(830, -3639), "Blue Poe Pot 1", "Forest Temple Blue Poe Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_1)); + locationTable[RC_FOREST_TEMPLE_BLUE_POE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_BLUE_POE_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(883, -3640), "Blue Poe Pot 2", "Forest Temple Blue Poe Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_2)); + locationTable[RC_FOREST_TEMPLE_BLUE_POE_POT_3] = Location::Pot(RC_FOREST_TEMPLE_BLUE_POE_POT_3, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(941, -3640), "Blue Poe Pot 3", "Forest Temple Blue Poe Pot 3", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_3)); + locationTable[RC_FOREST_TEMPLE_FROZEN_EYE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_FROZEN_EYE_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2312, -874), "Frozen Eye Pot 1", "Forest Temple Frozen Eye Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_1)); + locationTable[RC_FOREST_TEMPLE_FROZEN_EYE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_FROZEN_EYE_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2364, -873), "Frozen Eye Pot 2", "Forest Temple Frozen Eye Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_2)); + locationTable[RC_FIRE_TEMPLE_NEAR_BOSS_POT_1] = Location::Pot(RC_FIRE_TEMPLE_NEAR_BOSS_POT_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1086, -714), "Near Boss Pot 1", "Fire Temple Near Boss Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_1)); + locationTable[RC_FIRE_TEMPLE_NEAR_BOSS_POT_2] = Location::Pot(RC_FIRE_TEMPLE_NEAR_BOSS_POT_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1138, -713), "Near Boss Pot 2", "Fire Temple Near Boss Pot 2", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_2)); + locationTable[RC_FIRE_TEMPLE_NEAR_BOSS_POT_3] = Location::Pot(RC_FIRE_TEMPLE_NEAR_BOSS_POT_3, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1087, -765), "Near Boss Pot 3", "Fire Temple Near Boss Pot 3", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_3)); + locationTable[RC_FIRE_TEMPLE_NEAR_BOSS_POT_4] = Location::Pot(RC_FIRE_TEMPLE_NEAR_BOSS_POT_4, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1139, -766), "Near Boss Pot 4", "Fire Temple Near Boss Pot 4", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_4)); + locationTable[RC_FIRE_TEMPLE_BIG_LAVA_POT_1] = Location::Pot(RC_FIRE_TEMPLE_BIG_LAVA_POT_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2226, -754), "Big Lava Pot 1", "Fire Temple Big Lava Pot 1", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_1)); + locationTable[RC_FIRE_TEMPLE_BIG_LAVA_POT_2] = Location::Pot(RC_FIRE_TEMPLE_BIG_LAVA_POT_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2226, -809), "Big Lava Pot 2", "Fire Temple Big Lava Pot 2", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_2)); + locationTable[RC_FIRE_TEMPLE_BIG_LAVA_POT_3] = Location::Pot(RC_FIRE_TEMPLE_BIG_LAVA_POT_3, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2227, -862), "Big Lava Pot 3", "Fire Temple Big Lava Pot 3", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_3)); + locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2388, 953), "Flame Maze Left Pot 1", "Fire Temple Flame Maze Left Pot 1", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1)); + locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2423, 920), "Flame Maze Left Pot 2", "Fire Temple Flame Maze Left Pot 2", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2)); + locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2442, 715), "Flame Maze Left Pot 3", "Fire Temple Flame Maze Left Pot 3", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3)); + locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2408, 680), "Flame Maze Left Pot 4", "Fire Temple Flame Maze Left Pot 4", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4)); + locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2208, -168), "Flame Maze Right Pot 1", "Fire Temple Flame Maze Right Pot 1", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1)); + locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2253, -167), "Flame Maze Right Pot 2", "Fire Temple Flame Maze Right Pot 2", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2)); + locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2657, -591), "Flame Maze Right Pot 3", "Fire Temple Flame Maze Right Pot 3", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3)); + locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2657, -635), "Flame Maze Right Pot 4", "Fire Temple Flame Maze Right Pot 4", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4)); + locationTable[RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1] = Location::Pot(RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(330, -198), "Main Level 2 Pot 1", "Water Temple Main Level 2 Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_1)); + locationTable[RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2] = Location::Pot(RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(331, -168), "Main Level 2 Pot 2", "Water Temple Main Level 2 Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_2)); + locationTable[RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1] = Location::Pot(RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-241, -1193), "Main Level 1 Pot 1", "Water Temple Main Level 1 Pot 1", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_1)); + locationTable[RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2] = Location::Pot(RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-117, -1192), "Main Level 1 Pot 2", "Water Temple Main Level 1 Pot 2", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_2)); + locationTable[RC_WATER_TEMPLE_TORCH_POT_1] = Location::Pot(RC_WATER_TEMPLE_TORCH_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1123, 62), "Torch Pot 1", "Water Temple Torch Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_TORCH_POT_1)); + locationTable[RC_WATER_TEMPLE_TORCH_POT_2] = Location::Pot(RC_WATER_TEMPLE_TORCH_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1123, 293), "Torch Pot 2", "Water Temple Torch Pot 2", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_TORCH_POT_2)); + locationTable[RC_WATER_TEMPLE_NEAR_COMPASS_POT_1] = Location::Pot(RC_WATER_TEMPLE_NEAR_COMPASS_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1222, -617), "Near Compass Pot 1", "Water Temple Near Compass Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_1)); + locationTable[RC_WATER_TEMPLE_NEAR_COMPASS_POT_2] = Location::Pot(RC_WATER_TEMPLE_NEAR_COMPASS_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1172, -617), "Near Compass Pot 2", "Water Temple Near Compass Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_2)); + locationTable[RC_WATER_TEMPLE_NEAR_COMPASS_POT_3] = Location::Pot(RC_WATER_TEMPLE_NEAR_COMPASS_POT_3, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1122, -617), "Near Compass Pot 3", "Water Temple Near Compass Pot 3", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_3)); + locationTable[RC_WATER_TEMPLE_CENTRAL_BOW_POT_1] = Location::Pot(RC_WATER_TEMPLE_CENTRAL_BOW_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(688, 1008), "Central Bow Pot 1", "Water Temple Central Bow Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_1)); + locationTable[RC_WATER_TEMPLE_CENTRAL_BOW_POT_2] = Location::Pot(RC_WATER_TEMPLE_CENTRAL_BOW_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(631, 1008), "Central Bow Pot 2", "Water Temple Central Bow Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_2)); + locationTable[RC_WATER_TEMPLE_BEHIND_GATE_POT_1] = Location::Pot(RC_WATER_TEMPLE_BEHIND_GATE_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2313, 944), "Behind Gate Pot 1", "Water Temple Behind Gate Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_1)); + locationTable[RC_WATER_TEMPLE_BEHIND_GATE_POT_2] = Location::Pot(RC_WATER_TEMPLE_BEHIND_GATE_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2313, 905), "Behind Gate Pot 2", "Water Temple Behind Gate Pot 2", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_2)); + locationTable[RC_WATER_TEMPLE_BEHIND_GATE_POT_3] = Location::Pot(RC_WATER_TEMPLE_BEHIND_GATE_POT_3, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2314, 808), "Behind Gate Pot 3", "Water Temple Behind Gate Pot 3", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_3)); + locationTable[RC_WATER_TEMPLE_BEHIND_GATE_POT_4] = Location::Pot(RC_WATER_TEMPLE_BEHIND_GATE_POT_4, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2314, 770), "Behind Gate Pot 4", "Water Temple Behind Gate Pot 4", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_4)); + locationTable[RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1] = Location::Pot(RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-28, -3817), "Basement Block Puzzle Pot 1", "Water Temple Basement Block Puzzle Pot 1", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1)); + locationTable[RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2] = Location::Pot(RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(28, -3817), "Basement Block Puzzle Pot 2", "Water Temple Basement Block Puzzle Pot 2", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2)); + locationTable[RC_WATER_TEMPLE_RIVER_POT_1] = Location::Pot(RC_WATER_TEMPLE_RIVER_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2226, -2487), "River Pot 1", "Water Temple River Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_POT_1)); + locationTable[RC_WATER_TEMPLE_RIVER_POT_2] = Location::Pot(RC_WATER_TEMPLE_RIVER_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2184, -2456), "River Pot 2", "Water Temple River Pot 2", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_POT_2)); + locationTable[RC_WATER_TEMPLE_LIKE_LIKE_POT_1] = Location::Pot(RC_WATER_TEMPLE_LIKE_LIKE_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3188, -1628), "Like Like Pot 1", "Water Temple Like Like Pot 1", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_1)); + locationTable[RC_WATER_TEMPLE_LIKE_LIKE_POT_2] = Location::Pot(RC_WATER_TEMPLE_LIKE_LIKE_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3056, -1626), "Like Like Pot 2", "Water Temple Like Like Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_2)); + locationTable[RC_WATER_TEMPLE_BOSS_KEY_POT_1] = Location::Pot(RC_WATER_TEMPLE_BOSS_KEY_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -3031), "Boss Key Pot 1", "Water Temple Boss Key Pot 1", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_1)); + locationTable[RC_WATER_TEMPLE_BOSS_KEY_POT_2] = Location::Pot(RC_WATER_TEMPLE_BOSS_KEY_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1417, -3025), "Boss Key Pot 2", "Water Temple Boss Key Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_2)); + locationTable[RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1806, -344), "Near Dead Hand Pot 1", "Shadow Temple Near Dead Hand Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1)); + locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1721, 61), "Whispering Walls Pot 1", "Shadow Temple Whispering Walls Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1)); + locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1407, 61), "Whispering Walls Pot 2", "Shadow Temple Whispering Walls Pot 2", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2)); + locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1614, 61), "Whispering Walls Pot 3", "Shadow Temple Whispering Walls Pot 3", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3)); + locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1055, -257), "Whispering Walls Pot 4", "Shadow Temple Whispering Walls Pot 4", RHT_POT_SHADOW_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4)); + locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1050, -130), "Whispering Walls Pot 5", "Shadow Temple Whispering Walls Pot 5", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5)); + locationTable[RC_SHADOW_TEMPLE_MAP_CHEST_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MAP_CHEST_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-665, -760), "Map Chest Pot 1", "Shadow Temple Map Chest Pot 1", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_1)); + locationTable[RC_SHADOW_TEMPLE_MAP_CHEST_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-929, -748), "Map Chest Pot 2", "Shadow Temple Map Chest Pot 2", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_2)); + locationTable[RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(614, 3579), "Falling Spikes Pot 1", "Shadow Temple Falling Spikes Pot 1", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_1)); + locationTable[RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(798, 3574), "Falling Spikes Pot 2", "Shadow Temple Falling Spikes Pot 2", RHT_POT_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_2)); + locationTable[RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3] = Location::Pot(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1173, 3707), "Falling Spikes Pot 3", "Shadow Temple Falling Spikes Pot 3", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_3)); + locationTable[RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4] = Location::Pot(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1173, 3605), "Falling Spikes Pot 4", "Shadow Temple Falling Spikes Pot 4", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_4)); + locationTable[RC_SHADOW_TEMPLE_AFTER_WIND_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(4222, -916), "After Wind Pot 1", "Shadow Temple After Wind Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_1)); + locationTable[RC_SHADOW_TEMPLE_AFTER_WIND_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(4549, -922), "After Wind Pot 2", "Shadow Temple After Wind Pot 2", RHT_POT_SHADOW_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_2)); + locationTable[RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4303, -2657), "Spike Walls Pot 1", "Shadow Temple Spike Walls Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SPIKE_WALLS_POT_1)); + locationTable[RC_SHADOW_TEMPLE_FLOORMASTER_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4575, -811), "Floormaster Pot 1", "Shadow Temple Floormaster Pot 1", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_1)); + locationTable[RC_SHADOW_TEMPLE_FLOORMASTER_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4036, -811), "Floormaster Pot 2", "Shadow Temple Floormaster Pot 2", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_2)); + locationTable[RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2400, -1470), "After Boat Pot 1", "Shadow Temple After Boat Pot 1", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_1)); + locationTable[RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2230, -1470), "After Boat Pot 2", "Shadow Temple After Boat Pot 2", RHT_POT_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_2)); + locationTable[RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2859, -497), "After Boat Pot 3", "Shadow Temple After Boat Pot 3", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_3)); + locationTable[RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2624, -492), "After Boat Pot 4", "Shadow Temple After Boat Pot 4", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_4)); + locationTable[RC_SPIRIT_TEMPLE_LOBBY_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_LOBBY_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-181, 233), "Lobby Pot 1", "Spirit Temple Lobby Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_LOBBY_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_LOBBY_POT_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(184, 231), "Lobby Pot 2", "Spirit Temple Lobby Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_ANUBIS_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_ANUBIS_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-975, -1751), "Anubis Pot 1", "Spirit Temple Anubis Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_ANUBIS_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_ANUBIS_POT_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-928, -1827), "Anubis Pot 2", "Spirit Temple Anubis Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_ANUBIS_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_ANUBIS_POT_3, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1211, -1530), "Anubis Pot 3", "Spirit Temple Anubis Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_3)); + locationTable[RC_SPIRIT_TEMPLE_ANUBIS_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_ANUBIS_POT_4, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1055, -1680), "Anubis Pot 4", "Spirit Temple Anubis Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SHIELD, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_4)); + locationTable[RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1101, -1305), "Child Climb Pot 1", "Spirit Temple Child Climb Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1781, 830), "After Sun Block Pot 1", "Spirit Temple After Sun Block Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1617, 830), "After Sun Block Pot 2", "Spirit Temple After Sun Block Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-600, -1213), "Central Chamber Pot 1", "Spirit Temple Central Chamber Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-564, -1180), "Central Chamber Pot 2", "Spirit Temple Central Chamber Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-526, -1213), "Central Chamber Pot 3", "Spirit Temple Central Chamber Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3)); + locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(639, -1224), "Central Chamber Pot 4", "Spirit Temple Central Chamber Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4)); + locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(671, -1179), "Central Chamber Pot 5", "Spirit Temple Central Chamber Pot 5", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5)); + locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(704, -1224), "Central Chamber Pot 6", "Spirit Temple Central Chamber Pot 6", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6)); + locationTable[RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(819, -333), "Beamos Hall Pot 1", "Spirit Temple Beamos Hall Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1)); + locationTable[RC_GANONS_CASTLE_FOREST_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1725, 2336), "Forest Trial Pot 1", "Ganons Castle Forest Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_FOREST_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1892, 2241), "Forest Trial Pot 2", "Ganons Castle Forest Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_FIRE_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1898, -3942), "Fire Trial Pot 2", "Ganons Castle Fire Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_FIRE_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2051, -3855), "Fire Trial Pot 1", "Ganons Castle Fire Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_WATER_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_WATER_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3558, -920), "Water Trial Pot 1", "Ganons Castle Water Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_WATER_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_WATER_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3558, -761), "Water Trial Pot 2", "Ganons Castle Water Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_WATER_TRIAL_POT_3] = Location::Pot(RC_GANONS_CASTLE_WATER_TRIAL_POT_3, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2822, -507), "Water Trial Pot 3", "Ganons Castle Water Trial Pot 3", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_3)); + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1234, -3418), "Shadow Trial Pot 1", "Ganons Castle Shadow Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1621, -3203), "Shadow Trial Pot 2", "Ganons Castle Shadow Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3] = Location::Pot(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2067, -4592), "Shadow Trial Pot 3", "Ganons Castle Shadow Trial Pot 3", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_3)); + locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4] = Location::Pot(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2224, -4506), "Shadow Trial Pot 4", "Ganons Castle Shadow Trial Pot 4", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_4)); + locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1398, 1402), "Spirit Trial Pot 1", "Ganons Castle Spirit Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1237, 1494), "Spirit Trial Pot 2", "Ganons Castle Spirit Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1] = Location::Pot(RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2581, -839), "Light Trial Boulder Pot 1", "Ganons Castle Light Trial Boulder Pot 1", RHT_POT_GANONS_CASTLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1)); + locationTable[RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-3840, -923), "Light Trial Pot 1", "Ganons Castle Light Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-3840, -755), "Light Trial Pot 2", "Ganons Castle Light Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_1] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_1, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-422, -258), "Ganons Tower Pot 1", "Ganons Castle Ganons Tower Pot 1", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_1)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_2] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_2, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-382, -300), "Ganons Tower Pot 2", "Ganons Castle Ganons Tower Pot 2", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_2)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_3] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_3, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-342, -341), "Ganons Tower Pot 3", "Ganons Castle Ganons Tower Pot 3", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_3)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_4] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_4, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-298, -383), "Ganons Tower Pot 4", "Ganons Castle Ganons Tower Pot 4", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_4)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_5] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_5, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-257, -424), "Ganons Tower Pot 5", "Ganons Castle Ganons Tower Pot 5", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_5)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_6] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_6, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-382, -259), "Ganons Tower Pot 6", "Ganons Castle Ganons Tower Pot 6", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_6)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_7] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_7, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-342, -300), "Ganons Tower Pot 7", "Ganons Castle Ganons Tower Pot 7", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_7)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_8] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_8, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-301, -341), "Ganons Tower Pot 8", "Ganons Castle Ganons Tower Pot 8", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_8)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_9] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_9, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-258, -383), "Ganons Tower Pot 9", "Ganons Castle Ganons Tower Pot 9", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_9)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_10] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_10, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(418, -261), "Ganons Tower Pot 10", "Ganons Castle Ganons Tower Pot 10", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_10)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_11] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_11, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(377, -301), "Ganons Tower Pot 11", "Ganons Castle Ganons Tower Pot 11", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_11)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_12] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_12, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(338, -340), "Ganons Tower Pot 12", "Ganons Castle Ganons Tower Pot 12", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_12)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_13] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_13, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(300, -380), "Ganons Tower Pot 13", "Ganons Castle Ganons Tower Pot 13", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_13)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_14] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_14, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(260, -420), "Ganons Tower Pot 14", "Ganons Castle Ganons Tower Pot 14", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_14)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_15] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_15, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(378, -261), "Ganons Tower Pot 15", "Ganons Castle Ganons Tower Pot 15", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_15)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_16] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_16, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(337, -300), "Ganons Tower Pot 16", "Ganons Castle Ganons Tower Pot 16", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_16)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_17] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_17, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(299, -340), "Ganons Tower Pot 17", "Ganons Castle Ganons Tower Pot 17", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_17)); + locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_18] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_18, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(260, -380), "Ganons Tower Pot 18", "Ganons Castle Ganons Tower Pot 18", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_18)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-95, -673), "Basement Pot 1", "Bottom Of The Well Basement Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(75, -598), "Basement Pot 2", "Bottom Of The Well Basement Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(270, -1151), "Basement Pot 3", "Bottom Of The Well Basement Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(566, -1254), "Basement Pot 4", "Bottom Of The Well Basement Pot 4", RHT_POT_BOTTOM_OF_THE_WELL, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_4)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(378, -1089), "Basement Pot 5", "Bottom Of The Well Basement Pot 5", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_5)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(665, -1252), "Basement Pot 6", "Bottom Of The Well Basement Pot 6", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_6)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(566, -1345), "Basement Pot 7", "Bottom Of The Well Basement Pot 7", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_7)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(562, -1304), "Basement Pot 8", "Bottom Of The Well Basement Pot 8", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_8)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(313, -1086), "Basement Pot 9", "Bottom Of The Well Basement Pot 9", RHT_POT_BOTTOM_OF_THE_WELL, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_9)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(618, -1254), "Basement Pot 10", "Bottom Of The Well Basement Pot 10", RHT_POT_BOTTOM_OF_THE_WELL, RG_DEKU_STICK_1, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_10)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(257, -1099), "Basement Pot 11", "Bottom Of The Well Basement Pot 11", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_11)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(296, -1206), "Basement Pot 12", "Bottom Of The Well Basement Pot 12", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_12)); + locationTable[RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-969, 55), "Left Side Pot 1", "Bottom Of The Well Left Side Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-966, 9), "Left Side Pot 2", "Bottom Of The Well Left Side Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-965, -32), "Left Side Pot 3", "Bottom Of The Well Left Side Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-41, 389), "Near Entrance Pot 1", "Bottom Of The Well Near Entrance Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_DEKU_STICK_1, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(36, 389), "Near Entrance Pot 2", "Bottom Of The Well Near Entrance Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(874, -1294), "Fire Keese Pot 1", "Bottom Of The Well Fire Keese Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT] = Location::Pot(RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(3, -1641), "Underwater Pot", "Bottom Of The Well Underwater Pot", RHT_POT_BOTTOM_OF_THE_WELL, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_UNDERWATER_POT)); + locationTable[RC_ICE_CAVERN_HALL_POT_1] = Location::Pot(RC_ICE_CAVERN_HALL_POT_1, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-206, 449), "Hall Pot 1", "Ice Cavern Hall Pot 1", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HALL_POT_1)); + locationTable[RC_ICE_CAVERN_HALL_POT_2] = Location::Pot(RC_ICE_CAVERN_HALL_POT_2, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-203, 492), "Hall Pot 2", "Ice Cavern Hall Pot 2", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HALL_POT_2)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADE_POT_1] = Location::Pot(RC_ICE_CAVERN_SPINNING_BLADE_POT_1, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(433, -732), "Spinning Blade Pot 1", "Ice Cavern Spinning Blade Pot 1", RHT_POT_ICE_CAVERN, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_1)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADE_POT_2] = Location::Pot(RC_ICE_CAVERN_SPINNING_BLADE_POT_2, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(569, -175), "Spinning Blade Pot 2", "Ice Cavern Spinning Blade Pot 2", RHT_POT_ICE_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_2)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADE_POT_3] = Location::Pot(RC_ICE_CAVERN_SPINNING_BLADE_POT_3, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(521, -131), "Spinning Blade Pot 3", "Ice Cavern Spinning Blade Pot 3", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_3)); + locationTable[RC_ICE_CAVERN_NEAR_END_POT_1] = Location::Pot(RC_ICE_CAVERN_NEAR_END_POT_1, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1422, 586), "Near End Pot 1", "Ice Cavern Near End Pot 1", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_POT_1)); + locationTable[RC_ICE_CAVERN_NEAR_END_POT_2] = Location::Pot(RC_ICE_CAVERN_NEAR_END_POT_2, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1488, 676), "Near End Pot 2", "Ice Cavern Near End Pot 2", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_POT_2)); + locationTable[RC_ICE_CAVERN_FROZEN_POT_1] = Location::Pot(RC_ICE_CAVERN_FROZEN_POT_1, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(366, -2036), "Frozen Pot 1", "Ice Cavern Frozen Pot 1", RHT_POT_ICE_CAVERN, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_FROZEN_POT_1)); + + // MQ Dungeon Pots + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2391, -1804), "MQ Staircase Pot 1", "Dodongos Cavern MQ Staircase Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2361, -1161), "MQ Staircase Pot 2", "Dodongos Cavern MQ Staircase Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1525, -1800), "MQ Staircase Pot 3", "Dodongos Cavern MQ Staircase Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1558, -1169), "MQ Staircase Pot 4", "Dodongos Cavern MQ Staircase Pot 4", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1532, -1225), "MQ Torch Puzzle Middle Pot", "Dodongos Cavern MQ Torch Puzzle Middle Pot", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3195, -155), "MQ Big Block Pot 1", "Dodongos Cavern MQ Big Block Pot 1", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2704, -483), "MQ Big Block Pot 2", "Dodongos Cavern MQ Big Block Pot 2", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3869, -811), "MQ Upper Lizalfos Pot 1", "Dodongos Cavern MQ Upper Lizalfos Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3867, -969), "MQ Upper Lizalfos Pot 2", "Dodongos Cavern MQ Upper Lizalfos Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4687, -1071), "MQ Upper Lizalfos Pot 3", "Dodongos Cavern MQ Upper Lizalfos Pot 3", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4693, -1194), "MQ Upper Lizalfos Pot 4", "Dodongos Cavern MQ Upper Lizalfos Pot 4", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3327, -805), "MQ Two Flames Pot 1", "Dodongos Cavern MQ Two Flames Pot 1", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3326, -753), "MQ Two Flames Pot 2", "Dodongos Cavern MQ Two Flames Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1827, -587), "MQ Torch Puzzle Corner Pot", "Dodongos Cavern MQ Torch Puzzle Corner Pot", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1727, -151), "MQ Right Side Pot 1", "Dodongos Cavern MQ Right Side Pot 1", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1815, -154), "MQ Right Side Pot 2", "Dodongos Cavern MQ Right Side Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3442, -469), "MQ Right Side Pot 3", "Dodongos Cavern MQ Right Side Pot 3", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3682, -466), "MQ Right Side Pot 4", "Dodongos Cavern MQ Right Side Pot 4", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1844, -1867), "MQ Poe Room Pot 1", "Dodongos Cavern MQ Poe Room Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2272, -2213), "MQ Poe Room Pot 2", "Dodongos Cavern MQ Poe Room Pot 2", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2240, -1369), "MQ Poe Room Pot 3", "Dodongos Cavern MQ Poe Room Pot 3", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1535, -1299), "MQ Poe Room Pot 4", "Dodongos Cavern MQ Poe Room Pot 4", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(258, -3055), "MQ Before Boss SW Pot", "Dodongos Cavern MQ Before Boss SW Pot", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-265, -2499), "MQ Before Boss NE Pot", "Dodongos Cavern MQ Before Boss NE Pot", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1758, -3194), "MQ Armos Room SE Pot", "Dodongos Cavern MQ Armos SE Pot", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1223, -3197), "MQ Armos Room SW Pot", "Dodongos Cavern MQ Armos SW Pot", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1663, -4311), "MQ Backroom Pot 1", "Dodongos Cavern MQ Backroom Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1648, -4694), "MQ Backroom Pot 2", "Dodongos Cavern MQ Backroom Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1005, -3711), "MQ Armos Room NW Pot", "Dodongos Cavern MQ Armos NW Pot", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1066, -3711), "MQ Armos Room NE Pot", "Dodongos Cavern MQ Armos NE Pot", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-183, -449), "MQ Entrance Pot 1", "Jabu Jabus Belly MQ Entrance Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(202, -62), "MQ Entrance Pot 2", "Jabu Jabus Belly MQ Entrance Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-689, -1800), "MQ Geyser Pot 1", "Jabu Jabus Belly MQ Geyser Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-693, -1614), "MQ Geyser Pot 2", "Jabu Jabus Belly MQ Geyser Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(697, -2318), "MQ Time Block Pot 1", "Jabu Jabus Belly MQ Time Block Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(699, -2445), "MQ Time Block Pot 2", "Jabu Jabus Belly MQ Time Block Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(612, -5932), "MQ Like Likes Pot 1", "Jabu Jabus Belly MQ Like Likes Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(718, -5929), "MQ Like Likes Pot 2", "Jabu Jabus Belly MQ Like Likes Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(1305, -2005), "MQ Before Boss Pot 1", "Jabu Jabus Belly MQ Before Boss Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1)); + locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(675, -989), "MQ Lobby Pot 1", "Forest Temple MQ Lobby Pot 1", RHT_POT_FOREST_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_1)); + locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-429, -981), "MQ Lobby Pot 2", "Forest Temple MQ Lobby Pot 2", RHT_POT_FOREST_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_2)); + locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_3] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(720, -1037), "MQ Lobby Pot 3", "Forest Temple MQ Lobby Pot 3", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_3)); + locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_4] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_4, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-477, -1034), "MQ Lobby Pot 4", "Forest Temple MQ Lobby Pot 4", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_4)); + locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_5] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_5, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(630, -943), "MQ Lobby Pot 5", "Forest Temple MQ Lobby Pot 5", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_5)); + locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_6] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-384, -937), "MQ Lobby Pot 6", "Forest Temple MQ Lobby Pot 6", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_6)); + locationTable[RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(90, -3583), "MQ Wolfos Pot 1", "Forest Temple MQ Wolfos Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_1)); + locationTable[RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(142, -3583), "MQ Wolfos Pot 2", "Forest Temple MQ Wolfos Pot 2", RHT_POT_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_2)); + locationTable[RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(206, -3631), "MQ Upper Stalfos Pot 1", "Forest Temple MQ Upper Stalfos Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1)); + locationTable[RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(32, -3012), "MQ Upper Stalfos Pot 2", "Forest Temple MQ Upper Stalfos Pot 2", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2)); + locationTable[RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3] = Location::Pot(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(30, -3631), "MQ Upper Stalfos Pot 3", "Forest Temple MQ Upper Stalfos Pot 3", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3)); + locationTable[RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4] = Location::Pot(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(202, -3012), "MQ Upper Stalfos Pot 4", "Forest Temple MQ Upper Stalfos Pot 4", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4)); + locationTable[RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(830, -3639), "MQ Blue Poe Pot 1", "Forest Temple MQ Blue Poe Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_1)); + locationTable[RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(941, -3640), "MQ Blue Poe Pot 2", "Forest Temple MQ Blue Poe Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_2)); + locationTable[RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3] = Location::Pot(RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(883, -3640), "MQ Blue Poe Pot 3", "Forest Temple MQ Blue Poe Pot 3", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_3)); + locationTable[RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1647, -1529), "MQ Green Poe Pot 1", "Forest Temple MQ Green Poe Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_1)); + locationTable[RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1645, -1588), "MQ Green Poe Pot 2", "Forest Temple MQ Green Poe Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_2)); + locationTable[RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-461, -1095), "MQ Basement Pot 1", "Forest Temple MQ Basement Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_1)); + locationTable[RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-351, -979), "MQ Basement Pot 2", "Forest Temple MQ Basement Pot 2", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_2)); + locationTable[RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3] = Location::Pot(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-387, -1018), "MQ Basement Pot 3", "Forest Temple MQ Basement Pot 3", RHT_POT_FOREST_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_3)); + locationTable[RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4] = Location::Pot(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-424, -1057), "MQ Basement Pot 4", "Forest Temple MQ Basement Pot 4", RHT_POT_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_4)); + locationTable[RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1873, 2252), "MQ Forest Trial Pot 1", "Ganons Castle MQ Forest Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1726, 2326), "MQ Forest Trial Pot 2", "Ganons Castle MQ Forest Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3544, -931), "MQ Water Trial Pot 1", "Ganons Castle MQ Water Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3541, -755), "MQ Water Trial Pot 2", "Ganons Castle MQ Water Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2073, -4592), "MQ Shadow Trial Pot 1", "Ganons Castle MQ Shadow Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2217, -4516), "MQ Shadow Trial Pot 2", "Ganons Castle MQ Shadow Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1918, -3957), "MQ Fire Trial Pot 1", "Ganons Castle MQ Fire Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2052, -3888), "MQ Fire Trial Pot 2", "Ganons Castle MQ Fire Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-3842, -759), "MQ Light Trial Pot 1", "Ganons Castle MQ Light Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-3845, -933), "MQ Light Trial Pot 2", "Ganons Castle MQ Light Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2)); + locationTable[RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1402, 1414), "MQ Spirit Trial Pot 1", "Ganons Castle MQ Spirit Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1)); + locationTable[RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1256, 1500), "MQ Spirit Trial Pot 2", "Ganons Castle MQ Spirit Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1045, -130), "MQ Whispering Walls Pot 1", "Shadow Temple MQ Whispering Walls Pot 1", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1045, -240), "MQ Whispering Walls Pot 2", "Shadow Temple MQ Whispering Walls Pot 2", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-657, -949), "MQ Entrance Redead Pot 1", "Shadow Temple MQ Entrance Redead Pot 1", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-713, -1016), "MQ Entrance Redead Pot 2", "Shadow Temple MQ Entrance Redead Pot 2", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(614, 3579), "MQ Lower Umbrella W Pot", "Shadow Temple MQ Stone Umbrella Lower West Pot", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(798, 3574), "MQ Lower Umbrella E Pot", "Shadow Temple MQ Stone Umbrella Lower East Pot", RHT_POT_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1173, 3707), "MQ Upper Umbrella S Pot", "Shadow Temple MQ Stone Umbrella Upper South Pot", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_3)); + locationTable[RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1173, 3605), "MQ Upper Umbrella N Pot", "Shadow Temple MQ Stone Umbrella Upper North Pot", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_4)); + locationTable[RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(4222, -916), "MQ Before Boat Pot 1", "Shadow Temple MQ Before Boat Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(4549, -922), "MQ Before Boat Pot 2", "Shadow Temple MQ Before Boat Pot 2", RHT_POT_SHADOW_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2400, -1470), "MQ Before Chasm W Pot", "Shadow Temple MQ Before Chasm West Pot", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2230, -1470), "MQ Before Chasm E Pot", "Shadow Temple MQ Before Chasm East Pot", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2859, -497), "MQ After Chasm W Pot", "Shadow Temple MQ After Chasm West Pot", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_3)); + locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2624, -492), "MQ After Chasm E Pot", "Shadow Temple MQ After Chasm East Pot", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_4)); + locationTable[RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4303, -2657), "MQ Spike Baricade Pot", "Shadow Temple MQ Spike Baricade Pot", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT)); + locationTable[RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4575, -811), "MQ Dead Hand Pot 1", "Shadow Temple MQ Dead Hand Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4036, -811), "MQ Dead Hand Pot 2", "Shadow Temple MQ Dead Hand Pot 2", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(339, -377), "MQ Inner Lobby Pot 1", "Bottom Of The Well MQ Inner Lobby Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(416, -377), "MQ Inner Lobby Pot 2", "Bottom Of The Well MQ Inner Lobby Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(269, -376), "MQ Inner Lobby Pot 3", "Bottom Of The Well MQ Inner Lobby Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(421, -174), "MQ Outer Lobby Pot", "Bottom Of The Well MQ Outer Lobby Pot", RHT_POT_BOTTOM_OF_THE_WELL, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(288, -1240), "MQ East Inner Pot 1", "Bottom Of The Well MQ East Inner Room Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(438, -1234), "MQ East Inner Pot 2", "Bottom Of The Well MQ East Inner Room Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(444, -1114), "MQ East Inner Pot 3", "Bottom Of The Well MQ East Inner Room Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3)); + locationTable[RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-357, 957), "MQ Entrance Pot 1", "Fire Temple MQ Entrance Pot 1", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1)); + locationTable[RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(356, 959), "MQ Entrance Pot 2", "Fire Temple MQ Entrance Pot 2", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2)); + locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(187, -1449), "MQ Before Mini Boss Pot 1", "Fire Temple MQ Before Mini Boss Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1)); + locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(188, -1514), "MQ Before Mini Boss Pot 2", "Fire Temple MQ Before Mini Boss Pot 2", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2)); + locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(487, -1450), "MQ Before Mini Boss Pot 3", "Fire Temple MQ Before Mini Boss Pot 3", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3)); + locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(486, -1515), "MQ Before Mini Boss Pot 4", "Fire Temple MQ Before Mini Boss Pot 4", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4)); + locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(38, -1179), "MQ Before Mini Boss Pot 5", "Fire Temple MQ Before Mini Boss Pot 5", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5)); + locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(42, -1298), "MQ Before Mini Boss Pot 6", "Fire Temple MQ Before Mini Boss Pot 6", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6)); + locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(520, -943), "MQ Before Mini Boss Pot 7", "Fire Temple MQ Before Mini Boss Pot 7", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7)); + locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(35, -946), "MQ Before Mini Boss Pot 8", "Fire Temple MQ Before Mini Boss Pot 8", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1426, -711), "MQ Outside Boss Pot 1", "Fire Temple MQ Outside Boss Pot 1", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1425, -660), "MQ Outside Boss Pot 2", "Fire Temple MQ Outside Boss Pot 2", RHT_POT_FIRE_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1646, -1260), "MQ Lava Room North Pot", "Fire Temple MQ Lava Room North Pot", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2226, -809), "MQ Lava Room High Pot", "Fire Temple MQ Lava Room High Pot", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1634, 1475), "MQ Lava Room South Pot", "Fire Temple MQ Lava Room South Pot", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(845, -1591), "MQ Lava Torch Pot 1", "Fire Temple MQ Lava Torch Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(901, -1593), "MQ Lava Torch Pot 2", "Fire Temple MQ Lava Torch Pot 2", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2)); + locationTable[RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1756, -155), "MQ Above Lava Pot 1", "Fire Temple MQ Above Lava Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1)); + locationTable[RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1819, -82), "MQ Above Lava Pot 2", "Fire Temple MQ Above Lava Pot 2", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2)); + locationTable[RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3] = Location::Pot(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1789, -122), "MQ Above Lava Pot 3", "Fire Temple MQ Above Lava Pot 3", RHT_POT_FIRE_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3)); + locationTable[RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1493, 386), "MQ Flame Wall Pot 1", "Fire Temple MQ Flame Wall Pot 1", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1)); + locationTable[RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1445, 445), "MQ Flame Wall Pot 2", "Fire Temple MQ Flame Wall Pot 2", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2)); + locationTable[RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2217, -163), "MQ Past Fire Maze North Pot", "Fire Temple MQ Past Fire Maze North Pot", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_1)); + locationTable[RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2657, -591), "MQ Past Fire Maze South Pot", "Fire Temple MQ Past Fire Maze South Pot", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_2)); + locationTable[RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1849, -1114), "MQ Fire Maze Northmost Pot", "Fire Temple MQ Fire Maze Northmost Pot", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_3)); + locationTable[RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2110, -646), "MQ Fire Maze North West Pot", "Fire Temple MQ Fire Maze North West Pot", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_4)); + locationTable[RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2319, 838), "MQ South Fire Maze W Pot", "Fire Temple MQ South Fire Maze West Pot", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_5)); + locationTable[RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2285, 803), "MQ South Fire Maze E Pot", "Fire Temple MQ South Fire Maze East Pot", RHT_POT_FIRE_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_6)); + locationTable[RC_ICE_CAVERN_MQ_ENTRANCE_POT] = Location::Pot(RC_ICE_CAVERN_MQ_ENTRANCE_POT, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(248, 2287), "MQ Entrance Pot", "Ice Cavern MQ Entrance Pot", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_ENTRANCE_POT)); + locationTable[RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1] = Location::Pot(RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(51, 718), "MQ First Crystal Pot 1", "Ice Cavern MQ First Crystal Pot 1", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1)); + locationTable[RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2] = Location::Pot(RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(52, 768), "MQ First Crystal Pot 2", "Ice Cavern MQ First Crystal Pot 2", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2)); + locationTable[RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1] = Location::Pot(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(433, -732), "MQ Early Wolfos Pot 1", "Ice Cavern MQ Early Wolfos Pot 1", RHT_POT_ICE_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1)); + locationTable[RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2] = Location::Pot(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(569, -175), "MQ Early Wolfos Pot 2", "Ice Cavern MQ Early Wolfos Pot 2", RHT_POT_ICE_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2)); + locationTable[RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3] = Location::Pot(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(521, -131), "MQ Early Wolfos Pot 3", "Ice Cavern MQ Early Wolfos Pot 3", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3)); + locationTable[RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4] = Location::Pot(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(138, -672), "MQ Early Wolfos Pot 4", "Ice Cavern MQ Early Wolfos Pot 4", RHT_POT_ICE_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4)); + locationTable[RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1] = Location::Pot(RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1352, 639), "MQ Push Block Pot 1", "Ice Cavern MQ Push Block Pot 1", RHT_POT_ICE_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1)); + locationTable[RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2] = Location::Pot(RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1396, 596), "MQ Push Block Pot 2", "Ice Cavern MQ Push Block Pot 2", RHT_POT_ICE_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2)); + locationTable[RC_ICE_CAVERN_MQ_COMPASS_POT_1] = Location::Pot(RC_ICE_CAVERN_MQ_COMPASS_POT_1, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(902, -2720), "MQ Compass Pot 1", "Ice Cavern MQ Compass Pot 1", RHT_POT_ICE_CAVERN, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_1)); + locationTable[RC_ICE_CAVERN_MQ_COMPASS_POT_2] = Location::Pot(RC_ICE_CAVERN_MQ_COMPASS_POT_2, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(451, -2726), "MQ Compass Pot 2", "Ice Cavern MQ Compass Pot 2", RHT_POT_ICE_CAVERN, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-255, 742), "MQ Entrance Pot 1", "Spirit Temple MQ Entrance Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(306, 682), "MQ Entrance Pot 2", "Spirit Temple MQ Entrance Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-297, 687), "MQ Entrance Pot 3", "Spirit Temple MQ Entrance Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3)); + locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(260, 735), "MQ Entrance Pot 4", "Spirit Temple MQ Entrance Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4)); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-894, -50), "MQ Child Slugma Pot", "Spirit Temple MQ Child Slugma Pot", RHT_POT_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT)); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-382, -1256), "MQ Child Gibdo Pot 1", "Spirit Temple MQ Child Gibdo Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-381, -1207), "MQ Child Gibdo Pot 2", "Spirit Temple MQ Child Gibdo Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1035, -1240), "MQ Child Like Like Pot", "Spirit Temple MQ Child Like Like Pot", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT)); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1166, -1931), "MQ Child Stalfos Pot 1", "Spirit Temple MQ Child Stalfos Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-959, -1930), "MQ Child Stalfos Pot 2", "Spirit Temple MQ Child Stalfos Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-853, -1837), "MQ Child Stalfos Pot 3", "Spirit Temple MQ Child Stalfos Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3)); + locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1250, -1852), "MQ Child Stalfos Pot 4", "Spirit Temple MQ Child Stalfos Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(639, -1224), "MQ Statue Room 2F CE Pot", "Spirit Temple MQ Statue 2F Center East Pot", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-521, -1576), "MQ Statue Room 3F E Pot", "Spirit Temple MQ Statue Room 3F East Pot", RHT_POT_SPIRIT_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-595, -1576), "MQ Statue Room 3F W Pot", "Spirit Temple MQ Statue Room 3F West Pot", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_3)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-559, -1209), "MQ Statue Room 2F W Pot", "Spirit Temple MQ Statue 2F West Pot", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_4)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(704, -1224), "MQ Statue Room 2F E Pot", "Spirit Temple MQ Statue 2F Eastmost Pot", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_5)); + locationTable[RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1276, 432), "MQ Sun Blocks Pot 1", "Spirit Temple MQ Sun Blocks Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1635, -446), "MQ Sun Blocks Pot 2", "Spirit Temple MQ Sun Blocks Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(829, 250), "MQ Long Climb Pot 1", "Spirit Temple MQ Long Climb Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(531, 249), "MQ Long Climb Pot 2", "Spirit Temple MQ Long Climb Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(244, -893), "MQ Big Mirror Pot 1", "Spirit Temple MQ Big Mirror Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-122, -741), "MQ Big Mirror Pot 2", "Spirit Temple MQ Big Mirror Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(250, -741), "MQ Big Mirror Pot 3", "Spirit Temple MQ Big Mirror Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-123, -892), "MQ Big Mirror Pot 4", "Spirit Temple MQ Big Mirror Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(781, -841), "MQ Before Mirror Pot 1", "Spirit Temple MQ Before Mirror Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(587, -844), "MQ Before Mirror Pot 2", "Spirit Temple MQ Before Mirror Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1204, -910), "MQ Early Adult Pot 1", "Spirit Temple MQ Early Adult Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1204, -1028), "MQ Early Adult Pot 2", "Spirit Temple MQ Early Adult Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1123, 62), "MQ Lower Torches Pot 1", "Water Temple MQ Lower Torches Pot 1", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1123, 293), "MQ Lower Torches Pot 2", "Water Temple MQ Lower Torches Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1222, -617), "MQ Storage Room A Pot 1", "Water Temple MQ Storage Room A Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1122, -617), "MQ Storage Room A Pot 2", "Water Temple MQ Storage Room A Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1172, -617), "MQ Storage Room A Pot 3", "Water Temple MQ Storage Room A Pot 3", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-989, 255), "MQ GS Storage Room Pot 1", "Water Temple MQ GS Storage Room Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1026, 257), "MQ GS Storage Room Pot 2", "Water Temple MQ GS Storage Room Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3] = Location::Pot(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1062, 256), "MQ GS Storage Room Pot 3", "Water Temple MQ GS Storage Room Pot 3", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(512, 579), "MQ Lizalfos Hall W Pot", "Water Temple MQ Lizalfos Hallway West Pot", RHT_POT_WATER_TEMPLE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(602, 1022), "MQ Lizalfos Hall S Pot", "Water Temple MQ Lizalfos Hallway South Pot", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(789, 947), "MQ Lizalfos Hall SE Pot", "Water Temple MQ Lizalfos Hallway SE Pot", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_3)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(768, 565), "MQ Lizalfos Cage N Pot", "Water Temple MQ Lizalfos Cage North Pot", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_4)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(767, 517), "MQ Lizalfos Cage S Pot", "Water Temple MQ Lizalfos Cage South Pot", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_5)); + locationTable[RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3500, -751), "MQ Stalfos Pit Middle Pot", "Water Temple MQ Stalfos Pit Middle Pot", RHT_POT_WATER_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_3)); + locationTable[RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3500, -686), "MQ Stalfos Pit South Pot", "Water Temple MQ Stalfos Pit South Pot", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_4)); + locationTable[RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3500, -810), "MQ Stalfos Pit North Pot", "Water Temple MQ Stalfos Pit North Pot", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_5)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3188, -1628), "MQ Before Dark Link Pot 1", "Water Temple MQ Before Dark Link Pot 1", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3056, -1626), "MQ Before Dark Link Pot 2", "Water Temple MQ Before Dark Link Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3072, -4024), "MQ After Dark Link Pot 1", "Water Temple MQ After Dark Link Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3169, -4023), "MQ After Dark Link Pot 2", "Water Temple MQ After Dark Link Pot 2", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_RIVER_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_RIVER_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2226, -2487), "MQ River Pot 1", "Water Temple MQ River Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_RIVER_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_RIVER_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2184, -2456), "MQ River Pot 2", "Water Temple MQ River Pot 2", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_BOSS_KEY_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1033, -1569), "MQ Boss Key Pot", "Water Temple MQ Boss Key Pot", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BOSS_KEY_POT)); + locationTable[RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2314, 770), "MQ Lowest GS Pot 1", "Water Temple MQ Lowest GS Pot 1", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2314, 808), "MQ Lowest GS Pot 2", "Water Temple MQ Lowest GS Pot 2", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2313, 944), "MQ Lowest GS Pot 3", "Water Temple MQ Lowest GS Pot 3", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_3)); + locationTable[RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2313, 905), "MQ Lowest GS Pot 4", "Water Temple MQ Lowest GS Pot 4", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_4)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1417, -3025), "MQ Storage Room B Pot 1", "Water Temple MQ Storage Room B Pot 1", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -3031), "MQ Storage Room B Pot 2", "Water Temple MQ Storage Room B Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2)); + locationTable[RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(28, -3817), "MQ Mini Dodongo Pot 1", "Water Temple MQ Mini Dodongo Pot 1", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1)); + locationTable[RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-28, -3817), "MQ Mini Dodongo Pot 2", "Water Temple MQ Mini Dodongo Pot 2", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2)); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-324, -72), "MQ Lobby Left Pot 1", "Gerudo Training Ground MQ Lobby Left Pot 1", RHT_POT_GERUDO_TRAINING_GROUND, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1)); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-324, -177), "MQ Lobby Left Pot 2", "Gerudo Training Ground MQ Lobby Left Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2)); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(199, -79), "MQ Lobby Right Pot 1", "Gerudo Training Ground MQ Lobby Right Pot 1", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1)); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(197, -179), "MQ Lobby Right Pot 2", "Gerudo Training Ground MQ Lobby Right Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2)); +} + +static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterPotLocations); \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/fishsanity.cpp b/soh/soh/Enhancements/randomizer/fishsanity.cpp index 2769faf31..b44e21fc1 100644 --- a/soh/soh/Enhancements/randomizer/fishsanity.cpp +++ b/soh/soh/Enhancements/randomizer/fishsanity.cpp @@ -576,3 +576,58 @@ extern "C" { CLOSE_DISPS(play->state.gfxCtx); } } + +void Rando::StaticData::RegisterFishLocations() { + // Fishing Pond + locationTable[RC_LH_CHILD_FISH_1] = Location::Fish(RC_LH_CHILD_FISH_1, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 100, RAND_INF_CHILD_FISH_1, "Child Pond Fish 1", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_2] = Location::Fish(RC_LH_CHILD_FISH_2, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 101, RAND_INF_CHILD_FISH_2, "Child Pond Fish 2", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_3] = Location::Fish(RC_LH_CHILD_FISH_3, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 102, RAND_INF_CHILD_FISH_3, "Child Pond Fish 3", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_4] = Location::Fish(RC_LH_CHILD_FISH_4, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 103, RAND_INF_CHILD_FISH_4, "Child Pond Fish 4", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_5] = Location::Fish(RC_LH_CHILD_FISH_5, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 104, RAND_INF_CHILD_FISH_5, "Child Pond Fish 5", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_6] = Location::Fish(RC_LH_CHILD_FISH_6, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 105, RAND_INF_CHILD_FISH_6, "Child Pond Fish 6", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_7] = Location::Fish(RC_LH_CHILD_FISH_7, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 106, RAND_INF_CHILD_FISH_7, "Child Pond Fish 7", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_8] = Location::Fish(RC_LH_CHILD_FISH_8, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 107, RAND_INF_CHILD_FISH_8, "Child Pond Fish 8", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_9] = Location::Fish(RC_LH_CHILD_FISH_9, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 108, RAND_INF_CHILD_FISH_9, "Child Pond Fish 9", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_10] = Location::Fish(RC_LH_CHILD_FISH_10, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 109, RAND_INF_CHILD_FISH_10, "Child Pond Fish 10", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_11] = Location::Fish(RC_LH_CHILD_FISH_11, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 110, RAND_INF_CHILD_FISH_11, "Child Pond Fish 11", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_12] = Location::Fish(RC_LH_CHILD_FISH_12, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 111, RAND_INF_CHILD_FISH_12, "Child Pond Fish 12", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_13] = Location::Fish(RC_LH_CHILD_FISH_13, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 112, RAND_INF_CHILD_FISH_13, "Child Pond Fish 13", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_14] = Location::Fish(RC_LH_CHILD_FISH_14, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 113, RAND_INF_CHILD_FISH_14, "Child Pond Fish 14", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_FISH_15] = Location::Fish(RC_LH_CHILD_FISH_15, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 114, RAND_INF_CHILD_FISH_15, "Child Pond Fish 15", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_CHILD_LOACH_1] = Location::Fish(RC_LH_CHILD_LOACH_1, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 115, RAND_INF_CHILD_LOACH_1, "Child Pond Loach 1", RHT_LH_HYRULE_LOACH, RG_NONE); + locationTable[RC_LH_CHILD_LOACH_2] = Location::Fish(RC_LH_CHILD_LOACH_2, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 116, RAND_INF_CHILD_LOACH_2, "Child Pond Loach 2", RHT_LH_HYRULE_LOACH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_1] = Location::Fish(RC_LH_ADULT_FISH_1, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 100, RAND_INF_ADULT_FISH_1, "Adult Pond Fish 1", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_2] = Location::Fish(RC_LH_ADULT_FISH_2, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 101, RAND_INF_ADULT_FISH_2, "Adult Pond Fish 2", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_3] = Location::Fish(RC_LH_ADULT_FISH_3, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 102, RAND_INF_ADULT_FISH_3, "Adult Pond Fish 3", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_4] = Location::Fish(RC_LH_ADULT_FISH_4, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 103, RAND_INF_ADULT_FISH_4, "Adult Pond Fish 4", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_5] = Location::Fish(RC_LH_ADULT_FISH_5, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 104, RAND_INF_ADULT_FISH_5, "Adult Pond Fish 5", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_6] = Location::Fish(RC_LH_ADULT_FISH_6, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 105, RAND_INF_ADULT_FISH_6, "Adult Pond Fish 6", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_7] = Location::Fish(RC_LH_ADULT_FISH_7, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 106, RAND_INF_ADULT_FISH_7, "Adult Pond Fish 7", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_8] = Location::Fish(RC_LH_ADULT_FISH_8, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 107, RAND_INF_ADULT_FISH_8, "Adult Pond Fish 8", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_9] = Location::Fish(RC_LH_ADULT_FISH_9, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 108, RAND_INF_ADULT_FISH_9, "Adult Pond Fish 9", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_10] = Location::Fish(RC_LH_ADULT_FISH_10, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 109, RAND_INF_ADULT_FISH_10, "Adult Pond Fish 10", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_11] = Location::Fish(RC_LH_ADULT_FISH_11, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 110, RAND_INF_ADULT_FISH_11, "Adult Pond Fish 11", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_12] = Location::Fish(RC_LH_ADULT_FISH_12, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 111, RAND_INF_ADULT_FISH_12, "Adult Pond Fish 12", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_13] = Location::Fish(RC_LH_ADULT_FISH_13, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 112, RAND_INF_ADULT_FISH_13, "Adult Pond Fish 13", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_14] = Location::Fish(RC_LH_ADULT_FISH_14, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 113, RAND_INF_ADULT_FISH_14, "Adult Pond Fish 14", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_FISH_15] = Location::Fish(RC_LH_ADULT_FISH_15, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 114, RAND_INF_ADULT_FISH_15, "Adult Pond Fish 15", RHT_LH_POND_FISH, RG_NONE); + locationTable[RC_LH_ADULT_LOACH] = Location::Fish(RC_LH_ADULT_LOACH, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 115, RAND_INF_ADULT_LOACH, "Adult Pond Loach", RHT_LH_HYRULE_LOACH, RG_NONE); + // Grotto fish + locationTable[RC_KF_STORMS_GROTTO_FISH] = Location::GrottoFish(RC_KF_STORMS_GROTTO_FISH, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, 0x12C, RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO, "Storms Grotto Fish", RHT_KF_STORMS_GROTTO_FISH); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_FISH] = Location::GrottoFish(RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, RCQUEST_BOTH, RCAREA_LOST_WOODS, 0x114, RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO, "Near Shortcuts Grotto Fish", RHT_LW_NEAR_SHORTCUTS_GROTTO_FISH); + locationTable[RC_HF_SOUTHEAST_GROTTO_FISH] = Location::GrottoFish(RC_HF_SOUTHEAST_GROTTO_FISH, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, 0x122, RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO, "Southeast Grotto Fish", RHT_HF_SOUTHEAST_GROTTO_FISH); + locationTable[RC_HF_OPEN_GROTTO_FISH] = Location::GrottoFish(RC_HF_OPEN_GROTTO_FISH, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, 0x103, RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO, "Open Grotto Fish", RHT_HF_OPEN_GROTTO_FISH); + locationTable[RC_HF_NEAR_MARKET_GROTTO_FISH] = Location::GrottoFish(RC_HF_NEAR_MARKET_GROTTO_FISH, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, 0x100, RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO, "Near Market Grotto Fish", RHT_HF_NEAR_MARKET_GROTTO_FISH); + locationTable[RC_KAK_OPEN_GROTTO_FISH] = Location::GrottoFish(RC_KAK_OPEN_GROTTO_FISH, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, 0x128, RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO, "Open Grotto Fish", RHT_KAK_OPEN_GROTTO_FISH); + locationTable[RC_DMT_STORMS_GROTTO_FISH] = Location::GrottoFish(RC_DMT_STORMS_GROTTO_FISH, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, 0x157, RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO, "Storms Grotto Fish", RHT_DMT_STORMS_GROTTO_FISH); + locationTable[RC_DMC_UPPER_GROTTO_FISH] = Location::GrottoFish(RC_DMC_UPPER_GROTTO_FISH, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, 0x17A, RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO, "Upper Grotto Fish", RHT_DMC_UPPER_GROTTO_FISH); + locationTable[RC_ZR_OPEN_GROTTO_FISH] = Location::GrottoFish(RC_ZR_OPEN_GROTTO_FISH, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, 0x129, RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO, "Open Grotto Fish", RHT_ZR_OPEN_GROTTO_FISH); + // Zora's Domain fish + locationTable[RC_ZD_FISH_1] = Location::Fish(RC_ZD_FISH_1, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 0, RAND_INF_ZD_FISH_1, "Fish 1", RHT_ZD_FISH, RG_FISH); + locationTable[RC_ZD_FISH_2] = Location::Fish(RC_ZD_FISH_2, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 1, RAND_INF_ZD_FISH_2, "Fish 2", RHT_ZD_FISH, RG_FISH); + locationTable[RC_ZD_FISH_3] = Location::Fish(RC_ZD_FISH_3, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 2, RAND_INF_ZD_FISH_3, "Fish 3", RHT_ZD_FISH, RG_FISH); + locationTable[RC_ZD_FISH_4] = Location::Fish(RC_ZD_FISH_4, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 3, RAND_INF_ZD_FISH_4, "Fish 4", RHT_ZD_FISH, RG_FISH); + locationTable[RC_ZD_FISH_5] = Location::Fish(RC_ZD_FISH_5, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 4, RAND_INF_ZD_FISH_5, "Fish 5", RHT_ZD_FISH, RG_FISH); +} + +static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFishLocations); diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index d35b54a73..f005391d7 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -998,1068 +998,6 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_GC_SHOP_ITEM_7] = Location::Base(RC_GC_SHOP_ITEM_7, RCQUEST_BOTH, RCTYPE_SHOP, ACTOR_EN_GIRLA, SCENE_GORON_SHOP, 0x06, "Shop Item 7", RHT_GC_SHOP_ITEM_7, RG_BUY_RED_POTION_40, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_7), false, 40); locationTable[RC_GC_SHOP_ITEM_8] = Location::Base(RC_GC_SHOP_ITEM_8, RCQUEST_BOTH, RCTYPE_SHOP, ACTOR_EN_GIRLA, SCENE_GORON_SHOP, 0x07, "Shop Item 8", RHT_GC_SHOP_ITEM_8, RG_BUY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_8), false, 10); - /* +--------------+ - | FISHSANITY | - +--------------+ */ - - // Fishing Pond - locationTable[RC_LH_CHILD_FISH_1] = Location::Fish(RC_LH_CHILD_FISH_1, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 100, RAND_INF_CHILD_FISH_1, "Child Pond Fish 1", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_2] = Location::Fish(RC_LH_CHILD_FISH_2, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 101, RAND_INF_CHILD_FISH_2, "Child Pond Fish 2", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_3] = Location::Fish(RC_LH_CHILD_FISH_3, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 102, RAND_INF_CHILD_FISH_3, "Child Pond Fish 3", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_4] = Location::Fish(RC_LH_CHILD_FISH_4, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 103, RAND_INF_CHILD_FISH_4, "Child Pond Fish 4", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_5] = Location::Fish(RC_LH_CHILD_FISH_5, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 104, RAND_INF_CHILD_FISH_5, "Child Pond Fish 5", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_6] = Location::Fish(RC_LH_CHILD_FISH_6, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 105, RAND_INF_CHILD_FISH_6, "Child Pond Fish 6", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_7] = Location::Fish(RC_LH_CHILD_FISH_7, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 106, RAND_INF_CHILD_FISH_7, "Child Pond Fish 7", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_8] = Location::Fish(RC_LH_CHILD_FISH_8, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 107, RAND_INF_CHILD_FISH_8, "Child Pond Fish 8", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_9] = Location::Fish(RC_LH_CHILD_FISH_9, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 108, RAND_INF_CHILD_FISH_9, "Child Pond Fish 9", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_10] = Location::Fish(RC_LH_CHILD_FISH_10, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 109, RAND_INF_CHILD_FISH_10, "Child Pond Fish 10", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_11] = Location::Fish(RC_LH_CHILD_FISH_11, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 110, RAND_INF_CHILD_FISH_11, "Child Pond Fish 11", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_12] = Location::Fish(RC_LH_CHILD_FISH_12, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 111, RAND_INF_CHILD_FISH_12, "Child Pond Fish 12", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_13] = Location::Fish(RC_LH_CHILD_FISH_13, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 112, RAND_INF_CHILD_FISH_13, "Child Pond Fish 13", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_14] = Location::Fish(RC_LH_CHILD_FISH_14, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 113, RAND_INF_CHILD_FISH_14, "Child Pond Fish 14", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_FISH_15] = Location::Fish(RC_LH_CHILD_FISH_15, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 114, RAND_INF_CHILD_FISH_15, "Child Pond Fish 15", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_CHILD_LOACH_1] = Location::Fish(RC_LH_CHILD_LOACH_1, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 115, RAND_INF_CHILD_LOACH_1, "Child Pond Loach 1", RHT_LH_HYRULE_LOACH, RG_NONE); - locationTable[RC_LH_CHILD_LOACH_2] = Location::Fish(RC_LH_CHILD_LOACH_2, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 116, RAND_INF_CHILD_LOACH_2, "Child Pond Loach 2", RHT_LH_HYRULE_LOACH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_1] = Location::Fish(RC_LH_ADULT_FISH_1, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 100, RAND_INF_ADULT_FISH_1, "Adult Pond Fish 1", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_2] = Location::Fish(RC_LH_ADULT_FISH_2, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 101, RAND_INF_ADULT_FISH_2, "Adult Pond Fish 2", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_3] = Location::Fish(RC_LH_ADULT_FISH_3, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 102, RAND_INF_ADULT_FISH_3, "Adult Pond Fish 3", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_4] = Location::Fish(RC_LH_ADULT_FISH_4, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 103, RAND_INF_ADULT_FISH_4, "Adult Pond Fish 4", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_5] = Location::Fish(RC_LH_ADULT_FISH_5, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 104, RAND_INF_ADULT_FISH_5, "Adult Pond Fish 5", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_6] = Location::Fish(RC_LH_ADULT_FISH_6, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 105, RAND_INF_ADULT_FISH_6, "Adult Pond Fish 6", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_7] = Location::Fish(RC_LH_ADULT_FISH_7, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 106, RAND_INF_ADULT_FISH_7, "Adult Pond Fish 7", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_8] = Location::Fish(RC_LH_ADULT_FISH_8, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 107, RAND_INF_ADULT_FISH_8, "Adult Pond Fish 8", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_9] = Location::Fish(RC_LH_ADULT_FISH_9, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 108, RAND_INF_ADULT_FISH_9, "Adult Pond Fish 9", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_10] = Location::Fish(RC_LH_ADULT_FISH_10, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 109, RAND_INF_ADULT_FISH_10, "Adult Pond Fish 10", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_11] = Location::Fish(RC_LH_ADULT_FISH_11, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 110, RAND_INF_ADULT_FISH_11, "Adult Pond Fish 11", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_12] = Location::Fish(RC_LH_ADULT_FISH_12, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 111, RAND_INF_ADULT_FISH_12, "Adult Pond Fish 12", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_13] = Location::Fish(RC_LH_ADULT_FISH_13, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 112, RAND_INF_ADULT_FISH_13, "Adult Pond Fish 13", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_14] = Location::Fish(RC_LH_ADULT_FISH_14, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 113, RAND_INF_ADULT_FISH_14, "Adult Pond Fish 14", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_FISH_15] = Location::Fish(RC_LH_ADULT_FISH_15, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 114, RAND_INF_ADULT_FISH_15, "Adult Pond Fish 15", RHT_LH_POND_FISH, RG_NONE); - locationTable[RC_LH_ADULT_LOACH] = Location::Fish(RC_LH_ADULT_LOACH, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 115, RAND_INF_ADULT_LOACH, "Adult Pond Loach", RHT_LH_HYRULE_LOACH, RG_NONE); - // Grotto fish - locationTable[RC_KF_STORMS_GROTTO_FISH] = Location::GrottoFish(RC_KF_STORMS_GROTTO_FISH, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, 0x12C, RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO, "Storms Grotto Fish", RHT_KF_STORMS_GROTTO_FISH); - locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_FISH] = Location::GrottoFish(RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, RCQUEST_BOTH, RCAREA_LOST_WOODS, 0x114, RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO, "Near Shortcuts Grotto Fish", RHT_LW_NEAR_SHORTCUTS_GROTTO_FISH); - locationTable[RC_HF_SOUTHEAST_GROTTO_FISH] = Location::GrottoFish(RC_HF_SOUTHEAST_GROTTO_FISH, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, 0x122, RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO, "Southeast Grotto Fish", RHT_HF_SOUTHEAST_GROTTO_FISH); - locationTable[RC_HF_OPEN_GROTTO_FISH] = Location::GrottoFish(RC_HF_OPEN_GROTTO_FISH, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, 0x103, RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO, "Open Grotto Fish", RHT_HF_OPEN_GROTTO_FISH); - locationTable[RC_HF_NEAR_MARKET_GROTTO_FISH] = Location::GrottoFish(RC_HF_NEAR_MARKET_GROTTO_FISH, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, 0x100, RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO, "Near Market Grotto Fish", RHT_HF_NEAR_MARKET_GROTTO_FISH); - locationTable[RC_KAK_OPEN_GROTTO_FISH] = Location::GrottoFish(RC_KAK_OPEN_GROTTO_FISH, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, 0x128, RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO, "Open Grotto Fish", RHT_KAK_OPEN_GROTTO_FISH); - locationTable[RC_DMT_STORMS_GROTTO_FISH] = Location::GrottoFish(RC_DMT_STORMS_GROTTO_FISH, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, 0x157, RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO, "Storms Grotto Fish", RHT_DMT_STORMS_GROTTO_FISH); - locationTable[RC_DMC_UPPER_GROTTO_FISH] = Location::GrottoFish(RC_DMC_UPPER_GROTTO_FISH, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, 0x17A, RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO, "Upper Grotto Fish", RHT_DMC_UPPER_GROTTO_FISH); - locationTable[RC_ZR_OPEN_GROTTO_FISH] = Location::GrottoFish(RC_ZR_OPEN_GROTTO_FISH, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, 0x129, RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO, "Open Grotto Fish", RHT_ZR_OPEN_GROTTO_FISH); - // Zora's Domain fish - locationTable[RC_ZD_FISH_1] = Location::Fish(RC_ZD_FISH_1, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 0, RAND_INF_ZD_FISH_1, "Fish 1", RHT_ZD_FISH, RG_FISH); - locationTable[RC_ZD_FISH_2] = Location::Fish(RC_ZD_FISH_2, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 1, RAND_INF_ZD_FISH_2, "Fish 2", RHT_ZD_FISH, RG_FISH); - locationTable[RC_ZD_FISH_3] = Location::Fish(RC_ZD_FISH_3, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 2, RAND_INF_ZD_FISH_3, "Fish 3", RHT_ZD_FISH, RG_FISH); - locationTable[RC_ZD_FISH_4] = Location::Fish(RC_ZD_FISH_4, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 3, RAND_INF_ZD_FISH_4, "Fish 4", RHT_ZD_FISH, RG_FISH); - locationTable[RC_ZD_FISH_5] = Location::Fish(RC_ZD_FISH_5, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 4, RAND_INF_ZD_FISH_5, "Fish 5", RHT_ZD_FISH, RG_FISH); - - - /* +----------------+ - | SHUFFLE POTS | - +----------------+ */ - - // Overworld Pots - // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check - locationTable[RC_KF_LINKS_HOUSE_POT] = Location::Pot(RC_KF_LINKS_HOUSE_POT, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_LINKS_HOUSE, TWO_ACTOR_PARAMS(-118, 51), "Links House Pot", "KF Links House Pot", RHT_POT_KOKIRI_FOREST, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_LINKS_HOUSE_POT)); - locationTable[RC_KF_TWINS_HOUSE_POT_2] = Location::Pot(RC_KF_TWINS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_TWINS_HOUSE, TWO_ACTOR_PARAMS(35, 57), "Twins House Pot 2", "KF Twins House Pot 2", RHT_POT_KOKIRI_FOREST, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_TWINS_HOUSE_POT_2)); - locationTable[RC_KF_TWINS_HOUSE_POT_1] = Location::Pot(RC_KF_TWINS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_TWINS_HOUSE, TWO_ACTOR_PARAMS(33, -55), "Twins House Pot 1", "KF Twins House Pot 1", RHT_POT_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_TWINS_HOUSE_POT_1)); - locationTable[RC_KF_BROTHERS_HOUSE_POT_1] = Location::Pot(RC_KF_BROTHERS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KNOW_IT_ALL_BROS_HOUSE, TWO_ACTOR_PARAMS(-134, -29), "Brothers House Pot 1", "KF Brothers House Pot 1", RHT_POT_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BROTHERS_HOUSE_POT_1)); - locationTable[RC_KF_BROTHERS_HOUSE_POT_2] = Location::Pot(RC_KF_BROTHERS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KNOW_IT_ALL_BROS_HOUSE, TWO_ACTOR_PARAMS(-68, 114), "Brothers House Pot 2", "KF Brothers House Pot 2", RHT_POT_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BROTHERS_HOUSE_POT_2)); - locationTable[RC_GF_BREAK_ROOM_POT_1] = Location::Pot(RC_GF_BREAK_ROOM_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1438, -3629), "Break Room Pot 1", "GF Break Room Pot 1", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_POT_1)); - locationTable[RC_GF_BREAK_ROOM_POT_2] = Location::Pot(RC_GF_BREAK_ROOM_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1403, -3679), "Break Room Pot 2", "GF Break Room Pot 2", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_POT_2)); - locationTable[RC_GF_KITCHEN_POT_1] = Location::Pot(RC_GF_KITCHEN_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1908, -789), "Kitchen Pot 1", "GF Kitchen Pot 1", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_POT_1)); - locationTable[RC_GF_KITCHEN_POT_2] = Location::Pot(RC_GF_KITCHEN_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1951, -850), "Kitchen Pot 2", "GF Kitchen Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_POT_2)); - locationTable[RC_GF_NORTH_F1_CARPENTER_POT_1] = Location::Pot(RC_GF_NORTH_F1_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-475, -2622), "North F1 Carpenter Pot 1", "GF North F1 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_POT_1)); - locationTable[RC_GF_NORTH_F1_CARPENTER_POT_2] = Location::Pot(RC_GF_NORTH_F1_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-512, -2621), "North F1 Carpenter Pot 2", "GF North F1 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_POT_2)); - locationTable[RC_GF_NORTH_F1_CARPENTER_POT_3] = Location::Pot(RC_GF_NORTH_F1_CARPENTER_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-511, -2582), "North F1 Carpenter Pot 3", "GF North F1 Carpenter Pot 3", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_POT_3)); - locationTable[RC_GF_NORTH_F2_CARPENTER_POT_1] = Location::Pot(RC_GF_NORTH_F2_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(67, -1975), "North F2 Carpenter Pot 1", "GF North F2 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F2_CARPENTER_POT_1)); - locationTable[RC_GF_NORTH_F2_CARPENTER_POT_2] = Location::Pot(RC_GF_NORTH_F2_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(39, -1943), "North F2 Carpenter Pot 2", "GF North F2 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F2_CARPENTER_POT_2)); - locationTable[RC_GF_SOUTH_F1_CARPENTER_POT_1] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(691, 48), "South F1 Carpenter Pot 1", "GF South F1 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1)); - locationTable[RC_GF_SOUTH_F1_CARPENTER_POT_2] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(691, 16), "South F1 Carpenter Pot 2", "GF South F1 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2)); - locationTable[RC_GF_SOUTH_F1_CARPENTER_POT_3] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(661, 16), "South F1 Carpenter Pot 3", "GF South F1 Carpenter Pot 3", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3)); - locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(26, 524), "South F1 Carpenter Cell Pot 1", "GF South F1 Carpenter Cell Pot 1", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1)); - locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(61, 549), "South F1 Carpenter Cell Pot 2", "GF South F1 Carpenter Cell Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2)); - locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(215, 549), "South F1 Carpenter Cell Pot 3", "GF South F1 Carpenter Cell Pot 3", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3)); - locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(254, 529), "South F1 Carpenter Cell Pot 4", "GF South F1 Carpenter Cell Pot 4", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4)); - locationTable[RC_WASTELAND_NEAR_GS_POT_1] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_1, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(488, -2424), "Near GS Pot 1", "Wasteland Near GS Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_1)); - locationTable[RC_WASTELAND_NEAR_GS_POT_2] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_2, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(485, -2463), "Near GS Pot 2", "Wasteland Near GS Pot 2", RHT_POT_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_2)); - locationTable[RC_WASTELAND_NEAR_GS_POT_3] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_3, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(806, -2426), "Near GS Pot 3", "Wasteland Near GS Pot 3", RHT_POT_GERUDO_FORTRESS, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_3)); - locationTable[RC_WASTELAND_NEAR_GS_POT_4] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_4, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(801, -2460), "Near GS Pot 4", "Wasteland Near GS Pot 4", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_4)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_1] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-60, 27), "Guard House Child Pot 1", "MK Guard House Child Pot 1", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_1)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_2] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-89, 28), "Guard House Child Pot 2", "MK Guard House Child Pot 2", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_2)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_3] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-110, 6), "Guard House Child Pot 3", "MK Guard House Child Pot 3", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_3)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_4] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-58, -7), "Guard House Child Pot 4", "MK Guard House Child Pot 4", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_4)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_5] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-80, -7), "Guard House Child Pot 5", "MK Guard House Child Pot 5", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_5)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_6] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_6, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-65, -45), "Guard House Child Pot 6", "MK Guard House Child Pot 6", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_6)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_7] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_7, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-85, -41), "Guard House Child Pot 7", "MK Guard House Child Pot 7", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_7)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_8] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_8, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-107, -45), "Guard House Child Pot 8", "MK Guard House Child Pot 8", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_8)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_9] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_9, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-66, -79), "Guard House Child Pot 9", "MK Guard House Child Pot 9", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_9)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_10] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_10, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-88, -84), "Guard House Child Pot 10", "MK Guard House Child Pot 10", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_10)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_11] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_11, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(70, 215), "Guard House Child Pot 11", "MK Guard House Child Pot 11", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_11)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_12] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_12, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(68, 148), "Guard House Child Pot 12", "MK Guard House Child Pot 12", RHT_POT_MARKET, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_12)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_13] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_13, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(73, 117), "Guard House Child Pot 13", "MK Guard House Child Pot 13", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_13)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_14] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_14, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(40, 123), "Guard House Child Pot 14", "MK Guard House Child Pot 14", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_14)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_15] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_15, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(43, 89), "Guard House Child Pot 15", "MK Guard House Child Pot 15", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_15)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_16] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_16, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(68, 81), "Guard House Child Pot 16", "MK Guard House Child Pot 16", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_16)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_17] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_17, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(21, 73), "Guard House Child Pot 17", "MK Guard House Child Pot 17", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_17)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_18] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_18, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(64, 45), "Guard House Child Pot 18", "MK Guard House Child Pot 18", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_18)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_19] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_19, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(84, 31), "Guard House Child Pot 19", "MK Guard House Child Pot 19", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_19)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_20] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_20, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(42, 26), "Guard House Child Pot 20", "MK Guard House Child Pot 20", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_20)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_21] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_21, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(20, 34), "Guard House Child Pot 21", "MK Guard House Child Pot 21", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_21)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_22] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_22, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(89, -2), "Guard House Child Pot 22", "MK Guard House Child Pot 22", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_22)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_23] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_23, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(70, -12), "Guard House Child Pot 23", "MK Guard House Child Pot 23", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_23)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_24] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_24, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(42, -5), "Guard House Child Pot 24", "MK Guard House Child Pot 24", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_24)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_25] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_25, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(16, -6), "Guard House Child Pot 25", "MK Guard House Child Pot 25", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_25)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_26] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_26, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(68, -44), "Guard House Child Pot 26", "MK Guard House Child Pot 26", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_26)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_27] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_27, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(37, -40), "Guard House Child Pot 27", "MK Guard House Child Pot 27", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_27)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_28] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_28, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(70, -80), "Guard House Child Pot 28", "MK Guard House Child Pot 28", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_28)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_29] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_29, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(50, -74), "Guard House Child Pot 29", "MK Guard House Child Pot 29", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_29)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_30] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_30, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(28, -79), "Guard House Child Pot 30", "MK Guard House Child Pot 30", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_30)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_31] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_31, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(39, -111), "Guard House Child Pot 31", "MK Guard House Child Pot 31", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_31)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_32] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_32, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(169, 216), "Guard House Child Pot 32", "MK Guard House Child Pot 32", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_32)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_33] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_33, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(168, 166), "Guard House Child Pot 33", "MK Guard House Child Pot 33", RHT_POT_MARKET, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_33)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_34] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_34, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(170, 120), "Guard House Child Pot 34", "MK Guard House Child Pot 34", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_34)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_35] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_35, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(177, 85), "Guard House Child Pot 35", "MK Guard House Child Pot 35", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_35)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_36] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_36, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(155, 39), "Guard House Child Pot 36", "MK Guard House Child Pot 36", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_36)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_37] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_37, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(184, 13), "Guard House Child Pot 37", "MK Guard House Child Pot 37", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_37)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_38] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_38, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(156, -1), "Guard House Child Pot 38", "MK Guard House Child Pot 38", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_38)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_39] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_39, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(181, -33), "Guard House Child Pot 39", "MK Guard House Child Pot 39", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_39)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_40] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_40, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(156, -45), "Guard House Child Pot 40", "MK Guard House Child Pot 40", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_40)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_41] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_41, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(172, -82), "Guard House Child Pot 41", "MK Guard House Child Pot 41", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_41)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_42] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_42, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(170, -120), "Guard House Child Pot 42", "MK Guard House Child Pot 42", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_42)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_43] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_43, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(170, -166), "Guard House Child Pot 43", "MK Guard House Child Pot 43", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_43)); - locationTable[RC_MK_GUARD_HOUSE_CHILD_POT_44] = Location::Pot(RC_MK_GUARD_HOUSE_CHILD_POT_44, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(170, -216), "Guard House Child Pot 44", "MK Guard House Child Pot 44", RHT_POT_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CHILD_POT_44)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_1] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(61, 204), "Guard House Adult Pot 1", "MK Guard House Adult Pot 1", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_1)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_2] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(71, 132), "Guard House Adult Pot 2", "MK Guard House Adult Pot 2", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_2)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_3] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(74, 23), "Guard House Adult Pot 3", "MK Guard House Adult Pot 3", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_3)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_4] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(40, 4), "Guard House Adult Pot 4", "MK Guard House Adult Pot 4", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_4)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_5] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(71, -22), "Guard House Adult Pot 5", "MK Guard House Adult Pot 5", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_5)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_6] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_6, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(44, -151), "Guard House Adult Pot 6", "MK Guard House Adult Pot 6", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_6)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_7] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_7, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(79, -182), "Guard House Adult Pot 7", "MK Guard House Adult Pot 7", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_7)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_8] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_8, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(44, -198), "Guard House Adult Pot 8", "MK Guard House Adult Pot 8", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_8)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_9] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_9, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(168, 210), "Guard House Adult Pot 9", "MK Guard House Adult Pot 9", RHT_POT_MARKET, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_9)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_10] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_10, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(167, -122), "Guard House Adult Pot 10", "MK Guard House Adult Pot 10", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_10)); - locationTable[RC_MK_GUARD_HOUSE_ADULT_POT_11] = Location::Pot(RC_MK_GUARD_HOUSE_ADULT_POT_11, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(167, -210), "Guard House Adult Pot 11", "MK Guard House Adult Pot 11", RHT_POT_MARKET, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_ADULT_POT_11)); - locationTable[RC_MK_BACK_ALLEY_HOUSE_POT_1] = Location::Pot(RC_MK_BACK_ALLEY_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_BACK_ALLEY_HOUSE, TWO_ACTOR_PARAMS(100, 45), "Back Alley House Pot 1", "MK Back Alley House Pot 1", RHT_POT_MARKET, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_BACK_ALLEY_HOUSE_POT_1)); - locationTable[RC_MK_BACK_ALLEY_HOUSE_POT_2] = Location::Pot(RC_MK_BACK_ALLEY_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_BACK_ALLEY_HOUSE, TWO_ACTOR_PARAMS(12, -180), "Back Alley House Pot 2", "MK Back Alley House Pot 2", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_BACK_ALLEY_HOUSE_POT_2)); - locationTable[RC_MK_BACK_ALLEY_HOUSE_POT_3] = Location::Pot(RC_MK_BACK_ALLEY_HOUSE_POT_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_BACK_ALLEY_HOUSE, TWO_ACTOR_PARAMS(-54, -180), "Back Alley House Pot 3", "MK Back Alley House Pot 3", RHT_POT_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_BACK_ALLEY_HOUSE_POT_3)); - locationTable[RC_KAK_NEAR_POTION_SHOP_POT_1] = Location::Pot(RC_KAK_NEAR_POTION_SHOP_POT_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(222, -377), "Near Potion Shop Pot 1", "Kak Near Potion Shop Pot 1", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_POTION_SHOP_POT_1)); - locationTable[RC_KAK_NEAR_POTION_SHOP_POT_2] = Location::Pot(RC_KAK_NEAR_POTION_SHOP_POT_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(255, -366), "Near Potion Shop Pot 2", "Kak Near Potion Shop Pot 2", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_POTION_SHOP_POT_2)); - locationTable[RC_KAK_NEAR_POTION_SHOP_POT_3] = Location::Pot(RC_KAK_NEAR_POTION_SHOP_POT_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(284, -356), "Near Potion Shop Pot 3", "Kak Near Potion Shop Pot 3", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_POTION_SHOP_POT_3)); - locationTable[RC_KAK_NEAR_IMPAS_HOUSE_POT_1] = Location::Pot(RC_KAK_NEAR_IMPAS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-384, 1568), "Near Impas House Pot 1", "Kak Near Impas House Pot 1", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_1)); - locationTable[RC_KAK_NEAR_IMPAS_HOUSE_POT_2] = Location::Pot(RC_KAK_NEAR_IMPAS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-384, 1539), "Near Impas House Pot 2", "Kak Near Impas House Pot 2", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_2)); - locationTable[RC_KAK_NEAR_IMPAS_HOUSE_POT_3] = Location::Pot(RC_KAK_NEAR_IMPAS_HOUSE_POT_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-384, 1510), "Near Impas House Pot 3", "Kak Near Impas House Pot 3", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_3)); - locationTable[RC_KAK_NEAR_GUARDS_HOUSE_POT_1] = Location::Pot(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-392, -870), "Near Guards House Pot 1", "Kak Near Guards House Pot 1", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_1)); - locationTable[RC_KAK_NEAR_GUARDS_HOUSE_POT_2] = Location::Pot(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-422, -883), "Near Guards House Pot 2", "Kak Near Guards House Pot 2", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_2)); - locationTable[RC_KAK_NEAR_GUARDS_HOUSE_POT_3] = Location::Pot(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-450, -895), "Near Guards House Pot 3", "Kak Near Guards House Pot 3", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_3)); - locationTable[RC_KAK_NEAR_MEDICINE_SHOP_POT_1] = Location::Pot(RC_KAK_NEAR_MEDICINE_SHOP_POT_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(781, 89), "Near Medicine Shop Pot 1", "Kak Near Medicine Shop Pot 1", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_1)); - locationTable[RC_KAK_NEAR_MEDICINE_SHOP_POT_2] = Location::Pot(RC_KAK_NEAR_MEDICINE_SHOP_POT_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(815, 89), "Near Medicine Shop Pot 2", "Kak Near Medicine Shop Pot 2", RHT_POT_KAKARIKO, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_2)); - locationTable[RC_GY_DAMPES_GRAVE_POT_1] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(-319, -1542), "Dampes Grave Pot 1", "GY Dampes Grave Pot 1", RHT_POT_GRAVEYARD, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_1)); - locationTable[RC_GY_DAMPES_GRAVE_POT_2] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(-319, -1600), "Dampes Grave Pot 2", "GY Dampes Grave Pot 2", RHT_POT_GRAVEYARD, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_2)); - locationTable[RC_GY_DAMPES_GRAVE_POT_3] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(-364, -1571), "Dampes Grave Pot 3", "GY Dampes Grave Pot 3", RHT_POT_GRAVEYARD, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_3)); - locationTable[RC_GY_DAMPES_GRAVE_POT_4] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_4, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(198, -1540), "Dampes Grave Pot 4", "GY Dampes Grave Pot 4", RHT_POT_GRAVEYARD, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_4)); - locationTable[RC_GY_DAMPES_GRAVE_POT_5] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_5, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(198, -1608), "Dampes Grave Pot 5", "GY Dampes Grave Pot 5", RHT_POT_GRAVEYARD, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_5)); - locationTable[RC_GY_DAMPES_GRAVE_POT_6] = Location::Pot(RC_GY_DAMPES_GRAVE_POT_6, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(239, -1577), "Dampes Grave Pot 6", "GY Dampes Grave Pot 6", RHT_POT_GRAVEYARD, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_DAMPES_GRAVE_POT_6)); - locationTable[RC_GC_LOWER_STAIRCASE_POT_1] = Location::Pot(RC_GC_LOWER_STAIRCASE_POT_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-189, 866), "Lower Staircase Pot 1", "GC Lower Staircase Pot 1", RHT_POT_GORON_CITY, RG_DEKU_STICK_1, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_LOWER_STAIRCASE_POT_1)); - locationTable[RC_GC_LOWER_STAIRCASE_POT_2] = Location::Pot(RC_GC_LOWER_STAIRCASE_POT_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-271, 825), "Lower Staircase Pot 2", "GC Lower Staircase Pot 2", RHT_POT_GORON_CITY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_LOWER_STAIRCASE_POT_2)); - locationTable[RC_GC_UPPER_STAIRCASE_POT_1] = Location::Pot(RC_GC_UPPER_STAIRCASE_POT_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1170, 60), "Upper Staircase Pot 1", "GC Upper Staircase Pot 1", RHT_POT_GORON_CITY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_UPPER_STAIRCASE_POT_1)); - locationTable[RC_GC_UPPER_STAIRCASE_POT_2] = Location::Pot(RC_GC_UPPER_STAIRCASE_POT_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1185, 95), "Upper Staircase Pot 2", "GC Upper Staircase Pot 2", RHT_POT_GORON_CITY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_UPPER_STAIRCASE_POT_2)); - locationTable[RC_GC_UPPER_STAIRCASE_POT_3] = Location::Pot(RC_GC_UPPER_STAIRCASE_POT_3, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1200, 63), "Upper Staircase Pot 3", "GC Upper Staircase Pot 3", RHT_POT_GORON_CITY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_UPPER_STAIRCASE_POT_3)); - locationTable[RC_GC_MEDIGORON_POT_1] = Location::Pot(RC_GC_MEDIGORON_POT_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-694, 1196), "Medigoron Pot 1", "GC Medigoron Pot 1", RHT_POT_GORON_CITY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MEDIGORON_POT_1)); - locationTable[RC_GC_DARUNIA_POT_1] = Location::Pot(RC_GC_DARUNIA_POT_1, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(262, -1210), "Darunia Pot 1", "GC Darunia Pot 1", RHT_POT_GORON_CITY, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_DARUNIA_POT_1)); - locationTable[RC_GC_DARUNIA_POT_2] = Location::Pot(RC_GC_DARUNIA_POT_2, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(261, -1254), "Darunia Pot 2", "GC Darunia Pot 2", RHT_POT_GORON_CITY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_DARUNIA_POT_2)); - locationTable[RC_GC_DARUNIA_POT_3] = Location::Pot(RC_GC_DARUNIA_POT_3, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(262, -1386), "Darunia Pot 3", "GC Darunia Pot 3", RHT_POT_GORON_CITY, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_DARUNIA_POT_3)); - locationTable[RC_DMC_NEAR_GC_POT_2] = Location::Pot(RC_DMC_NEAR_GC_POT_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1546, 141), "Near GC Pot 2", "DMC Near GC Pot 2", RHT_POT_DEATH_MOUNTAIN_CRATER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_GC_POT_2)); - locationTable[RC_DMC_NEAR_GC_POT_3] = Location::Pot(RC_DMC_NEAR_GC_POT_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1641, -127), "Near GC Pot 3", "DMC Near GC Pot 3", RHT_POT_DEATH_MOUNTAIN_CRATER, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_GC_POT_3)); - locationTable[RC_DMC_NEAR_GC_POT_1] = Location::Pot(RC_DMC_NEAR_GC_POT_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1590, 132), "Near GC Pot 1", "DMC Near GC Pot 1", RHT_POT_DEATH_MOUNTAIN_CRATER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_GC_POT_1)); - locationTable[RC_DMC_NEAR_GC_POT_4] = Location::Pot(RC_DMC_NEAR_GC_POT_4, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-1606, -166), "Near GC Pot 4", "DMC Near GC Pot 4", RHT_POT_DEATH_MOUNTAIN_CRATER, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_GC_POT_4)); - locationTable[RC_ZD_NEAR_SHOP_POT_1] = Location::Pot(RC_ZD_NEAR_SHOP_POT_1, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(676, 377), "Near Shop Pot 1", "ZD Near Shop Pot 1", RHT_POT_ZORAS_DOMAIN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_1)); - locationTable[RC_ZD_NEAR_SHOP_POT_2] = Location::Pot(RC_ZD_NEAR_SHOP_POT_2, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(614, 419), "Near Shop Pot 2", "ZD Near Shop Pot 2", RHT_POT_ZORAS_DOMAIN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_2)); - locationTable[RC_ZD_NEAR_SHOP_POT_3] = Location::Pot(RC_ZD_NEAR_SHOP_POT_3, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(289, 415), "Near Shop Pot 3", "ZD Near Shop Pot 3", RHT_POT_ZORAS_DOMAIN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_3)); - locationTable[RC_ZD_NEAR_SHOP_POT_4] = Location::Pot(RC_ZD_NEAR_SHOP_POT_4, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(289, 289), "Near Shop Pot 4", "ZD Near Shop Pot 4", RHT_POT_ZORAS_DOMAIN, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_4)); - locationTable[RC_ZD_NEAR_SHOP_POT_5] = Location::Pot(RC_ZD_NEAR_SHOP_POT_5, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(220, 384), "Near Shop Pot 5", "ZD Near Shop Pot 5", RHT_POT_ZORAS_DOMAIN, RG_DEKU_STICK_1, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_NEAR_SHOP_POT_5)); - locationTable[RC_ZF_HIDDEN_CAVE_POT_1] = Location::Pot(RC_ZF_HIDDEN_CAVE_POT_1, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(385, 2587), "Hidden Cave Pot 1", "ZF Hidden Cave Pot 1", RHT_POT_ZORAS_FOUNTAIN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_HIDDEN_CAVE_POT_1)); - locationTable[RC_ZF_HIDDEN_CAVE_POT_2] = Location::Pot(RC_ZF_HIDDEN_CAVE_POT_2, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(418, 2609), "Hidden Cave Pot 2", "ZF Hidden Cave Pot 2", RHT_POT_ZORAS_FOUNTAIN, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_HIDDEN_CAVE_POT_2)); - locationTable[RC_ZF_HIDDEN_CAVE_POT_3] = Location::Pot(RC_ZF_HIDDEN_CAVE_POT_3, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(430, 2568), "Hidden Cave Pot 3", "ZF Hidden Cave Pot 3", RHT_POT_ZORAS_FOUNTAIN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_HIDDEN_CAVE_POT_3)); - locationTable[RC_ZF_NEAR_JABU_POT_1] = Location::Pot(RC_ZF_NEAR_JABU_POT_1, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-1630, 170), "Near Jabu Pot 1", "ZF Near Jabu Pot 1", RHT_POT_ZORAS_FOUNTAIN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_NEAR_JABU_POT_1)); - locationTable[RC_ZF_NEAR_JABU_POT_2] = Location::Pot(RC_ZF_NEAR_JABU_POT_2, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-1550, 170), "Near Jabu Pot 2", "ZF Near Jabu Pot 2", RHT_POT_ZORAS_FOUNTAIN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_NEAR_JABU_POT_2)); - locationTable[RC_ZF_NEAR_JABU_POT_3] = Location::Pot(RC_ZF_NEAR_JABU_POT_3, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-1630, -260), "Near Jabu Pot 3", "ZF Near Jabu Pot 3", RHT_POT_ZORAS_FOUNTAIN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_NEAR_JABU_POT_3)); - locationTable[RC_ZF_NEAR_JABU_POT_4] = Location::Pot(RC_ZF_NEAR_JABU_POT_4, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-1550, -260), "Near Jabu Pot 4", "ZF Near Jabu Pot 4", RHT_POT_ZORAS_FOUNTAIN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_NEAR_JABU_POT_4)); - locationTable[RC_LLR_FRONT_POT_1] = Location::Pot(RC_LLR_FRONT_POT_1, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(667, -3218), "Front Pot 1", "LLR Front Pot 1", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_FRONT_POT_1)); - locationTable[RC_LLR_FRONT_POT_2] = Location::Pot(RC_LLR_FRONT_POT_2, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(667, -3186), "Front Pot 2", "LLR Front Pot 2", RHT_POT_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_FRONT_POT_2)); - locationTable[RC_LLR_FRONT_POT_3] = Location::Pot(RC_LLR_FRONT_POT_3, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(667, -3154), "Front Pot 3", "LLR Front Pot 3", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_FRONT_POT_3)); - locationTable[RC_LLR_FRONT_POT_4] = Location::Pot(RC_LLR_FRONT_POT_4, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(667, -3122), "Front Pot 4", "LLR Front Pot 4", RHT_POT_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_FRONT_POT_4)); - locationTable[RC_LLR_RAIN_SHED_POT_1] = Location::Pot(RC_LLR_RAIN_SHED_POT_1, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(852, 172), "Rain Shed Pot 1", "LLR Rain Shed Pot 1", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_RAIN_SHED_POT_1)); - locationTable[RC_LLR_RAIN_SHED_POT_2] = Location::Pot(RC_LLR_RAIN_SHED_POT_2, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(840, 212), "Rain Shed Pot 2", "LLR Rain Shed Pot 2", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_RAIN_SHED_POT_2)); - locationTable[RC_LLR_RAIN_SHED_POT_3] = Location::Pot(RC_LLR_RAIN_SHED_POT_3, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(872, 219), "Rain Shed Pot 3", "LLR Rain Shed Pot 3", RHT_POT_LON_LON_RANCH, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_RAIN_SHED_POT_3)); - locationTable[RC_LLR_TALONS_HOUSE_POT_1] = Location::Pot(RC_LLR_TALONS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(1255, 47), "Talons House Pot 1", "LLR Talons House Pot 1", RHT_POT_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_TALONS_HOUSE_POT_1)); - locationTable[RC_LLR_TALONS_HOUSE_POT_2] = Location::Pot(RC_LLR_TALONS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(1256, -51), "Talons House Pot 2", "LLR Talons House Pot 2", RHT_POT_LON_LON_RANCH, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_TALONS_HOUSE_POT_2)); - locationTable[RC_LLR_TALONS_HOUSE_POT_3] = Location::Pot(RC_LLR_TALONS_HOUSE_POT_3, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(1256, -78), "Talons House Pot 3", "LLR Talons House Pot 3", RHT_POT_LON_LON_RANCH, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_TALONS_HOUSE_POT_3)); - locationTable[RC_HF_COW_GROTTO_POT_1] = Location::Pot(RC_HF_COW_GROTTO_POT_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3410, -223), "Cow Grotto Pot 1", "HF Cow Grotto Pot 1", RHT_POT_HYRULE_FIELD, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_POT_1)); - locationTable[RC_HF_COW_GROTTO_POT_2] = Location::Pot(RC_HF_COW_GROTTO_POT_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3390, -258), "Cow Grotto Pot 2", "HF Cow Grotto Pot 2", RHT_POT_HYRULE_FIELD, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_POT_2)); - locationTable[RC_HC_STORMS_GROTTO_POT_1] = Location::Pot(RC_HC_STORMS_GROTTO_POT_1, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1843, 1014), "Storms Grotto Pot 1", "HC Storms Grotto Pot 1", RHT_POT_HYRULE_CASTLE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_POT_1)); - locationTable[RC_HC_STORMS_GROTTO_POT_2] = Location::Pot(RC_HC_STORMS_GROTTO_POT_2, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1769, 954), "Storms Grotto Pot 2", "HC Storms Grotto Pot 2", RHT_POT_HYRULE_CASTLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_POT_2)); - locationTable[RC_HC_STORMS_GROTTO_POT_3] = Location::Pot(RC_HC_STORMS_GROTTO_POT_3, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1857, 897), "Storms Grotto Pot 3", "HC Storms Grotto Pot 3", RHT_POT_HYRULE_CASTLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_POT_3)); - locationTable[RC_HC_STORMS_GROTTO_POT_4] = Location::Pot(RC_HC_STORMS_GROTTO_POT_4, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1764, 847), "Storms Grotto Pot 4", "HC Storms Grotto Pot 4", RHT_POT_HYRULE_CASTLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_POT_4)); - - // Dungeon Pots - // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check - locationTable[RC_DODONGOS_CAVERN_LIZALFOS_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_LIZALFOS_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2673, -2060), "Lizalfos Pot 3", "Dodongos Cavern Lizalfos Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_3)); - locationTable[RC_DODONGOS_CAVERN_LIZALFOS_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_LIZALFOS_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3526, -2574), "Lizalfos Pot 2", "Dodongos Cavern Lizalfos Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_2)); - locationTable[RC_DODONGOS_CAVERN_LIZALFOS_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_LIZALFOS_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3579, -2574), "Lizalfos Pot 1", "Dodongos Cavern Lizalfos Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_1)); - locationTable[RC_DODONGOS_CAVERN_LIZALFOS_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_LIZALFOS_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2653, -2031), "Lizalfos Pot 4", "Dodongos Cavern Lizalfos Pot 4", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_4)); - locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1708, -471), "Side Room Pot 1", "Dodongos Cavern Side Room Pot 1", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_1)); - locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1746, -424), "Side Room Pot 2", "Dodongos Cavern Side Room Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_2)); - locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2573, -489), "Side Room Pot 3", "Dodongos Cavern Side Room Pot 3", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_3)); - locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2622, -489), "Side Room Pot 4", "Dodongos Cavern Side Room Pot 4", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_4)); - locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3507, -964), "Side Room Pot 5", "Dodongos Cavern Side Room Pot 5", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_5)); - locationTable[RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6] = Location::Pot(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3617, -911), "Side Room Pot 6", "Dodongos Cavern Side Room Pot 6", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_6)); - locationTable[RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1846, -1879), "Torch Room Pot 1", "Dodongos Cavern Torch Room Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_1)); - locationTable[RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2050, -1964), "Torch Room Pot 2", "Dodongos Cavern Torch Room Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_2)); - locationTable[RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2281, -1799), "Torch Room Pot 3", "Dodongos Cavern Torch Room Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_3)); - locationTable[RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1836, -1239), "Torch Room Pot 4", "Dodongos Cavern Torch Room Pot 4", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_4)); - locationTable[RC_DODONGOS_CAVERN_STAIRCASE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_STAIRCASE_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2414, -1823), "Staircase Pot 1", "Dodongos Cavern Staircase Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_1)); - locationTable[RC_DODONGOS_CAVERN_STAIRCASE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_STAIRCASE_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2368, -1827), "Staircase Pot 2", "Dodongos Cavern Staircase Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_2)); - locationTable[RC_DODONGOS_CAVERN_STAIRCASE_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_STAIRCASE_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1574, -1831), "Staircase Pot 3", "Dodongos Cavern Staircase Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_3)); - locationTable[RC_DODONGOS_CAVERN_STAIRCASE_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_STAIRCASE_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1528, -1827), "Staircase Pot 4", "Dodongos Cavern Staircase Pot 4", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_4)); - locationTable[RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2704, -483), "Single Eye Pot 1", "Dodongos Cavern Single Eye Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_1)); - locationTable[RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3195, -155), "Single Eye Pot 2", "Dodongos Cavern Single Eye Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_2)); - locationTable[RC_DODONGOS_CAVERN_BLADE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_BLADE_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1656, -531), "Blade Pot 1", "Dodongos Cavern Blade Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_POT_1)); - locationTable[RC_DODONGOS_CAVERN_BLADE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_BLADE_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1831, -593), "Blade Pot 2", "Dodongos Cavern Blade Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_POT_2)); - locationTable[RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3329, -753), "Double Eye Pot 1", "Dodongos Cavern Double Eye Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_1)); - locationTable[RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2705, -1086), "Double Eye Pot 2", "Dodongos Cavern Double Eye Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_2)); - locationTable[RC_DODONGOS_CAVERN_BACK_ROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_BACK_ROOM_POT_1, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1027, -3704), "Back Room Pot 1", "Dodongos Cavern Back Room Pot 1", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_1)); - locationTable[RC_DODONGOS_CAVERN_BACK_ROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_BACK_ROOM_POT_2, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(966, -3704), "Back Room Pot 2", "Dodongos Cavern Back Room Pot 2", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_2)); - locationTable[RC_DODONGOS_CAVERN_BACK_ROOM_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_BACK_ROOM_POT_3, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(125, -3854), "Back Room Pot 3", "Dodongos Cavern Back Room Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_3)); - locationTable[RC_DODONGOS_CAVERN_BACK_ROOM_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_BACK_ROOM_POT_4, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(78, -3835), "Back Room Pot 4", "Dodongos Cavern Back Room Pot 4", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_4)); - locationTable[RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1295, -3612), "Above Big Octo Pot 1", "Jabu Jabus Belly Above Big Octo Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1)); - locationTable[RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1355, -3612), "Above Big Octo Pot 2", "Jabu Jabus Belly Above Big Octo Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2)); - locationTable[RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3] = Location::Pot(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1422, -3612), "Above Big Octo Pot 3", "Jabu Jabus Belly Above Big Octo Pot 3", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3)); - locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_1, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(-551, 33), "Barinade Pot 1", "Jabu Jabus Belly Barinade Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_1)); - locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_2, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(551, 36), "Barinade Pot 2", "Jabu Jabus Belly Barinade Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_2)); - locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_3] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_3, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(554, -493), "Barinade Pot 3", "Jabu Jabus Belly Barinade Pot 3", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_3)); - locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_4] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_4, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(-543, -496), "Barinade Pot 4", "Jabu Jabus Belly Barinade Pot 4", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_4)); - locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_5] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_5, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(-268, -786), "Barinade Pot 5", "Jabu Jabus Belly Barinade Pot 5", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_5)); - locationTable[RC_JABU_JABUS_BELLY_BARINADE_POT_6] = Location::Pot(RC_JABU_JABUS_BELLY_BARINADE_POT_6, RCQUEST_BOTH, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU_BOSS, TWO_ACTOR_PARAMS(279, -761), "Barinade Pot 6", "Jabu Jabus Belly Barinade Pot 6", RHT_POT_JABU_JABUS_BELLY, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_6)); - locationTable[RC_JABU_JABUS_BELLY_BASEMENT_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_BASEMENT_POT_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(703, -2371), "Basement Pot 1", "Jabu Jabus Belly Basement Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_1)); - locationTable[RC_JABU_JABUS_BELLY_BASEMENT_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_BASEMENT_POT_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(645, -2408), "Basement Pot 2", "Jabu Jabus Belly Basement Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_2)); - locationTable[RC_JABU_JABUS_BELLY_BASEMENT_POT_3] = Location::Pot(RC_JABU_JABUS_BELLY_BASEMENT_POT_3, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(650, -2344), "Basement Pot 3", "Jabu Jabus Belly Basement Pot 3", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_3)); - locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1127, -2271), "Two Octorok Pot 1", "Jabu Jabus Belly Two Octorok Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1)); - locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1178, -2272), "Two Octorok Pot 2", "Jabu Jabus Belly Two Octorok Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2)); - locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1150, -2248), "Two Octorok Pot 3", "Jabu Jabus Belly Two Octorok Pot 3", RHT_POT_JABU_JABUS_BELLY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3)); - locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1131, -2221), "Two Octorok Pot 4", "Jabu Jabus Belly Two Octorok Pot 4", RHT_POT_JABU_JABUS_BELLY, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4)); - locationTable[RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5] = Location::Pot(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1173, -2227), "Two Octorok Pot 5", "Jabu Jabus Belly Two Octorok Pot 5", RHT_POT_JABU_JABUS_BELLY, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5)); - locationTable[RC_FOREST_TEMPLE_LOBBY_POT_1] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(720, -1037), "Lobby Pot 1", "Forest Temple Lobby Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_1)); - locationTable[RC_FOREST_TEMPLE_LOBBY_POT_2] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(675, -989), "Lobby Pot 2", "Forest Temple Lobby Pot 2", RHT_POT_FOREST_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_2)); - locationTable[RC_FOREST_TEMPLE_LOBBY_POT_3] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_3, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(630, -943), "Lobby Pot 3", "Forest Temple Lobby Pot 3", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_3)); - locationTable[RC_FOREST_TEMPLE_LOBBY_POT_4] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_4, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-384, -937), "Lobby Pot 4", "Forest Temple Lobby Pot 4", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_4)); - locationTable[RC_FOREST_TEMPLE_LOBBY_POT_5] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_5, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-429, -981), "Lobby Pot 5", "Forest Temple Lobby Pot 5", RHT_POT_FOREST_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_5)); - locationTable[RC_FOREST_TEMPLE_LOBBY_POT_6] = Location::Pot(RC_FOREST_TEMPLE_LOBBY_POT_6, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-477, -1034), "Lobby Pot 6", "Forest Temple Lobby Pot 6", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOBBY_POT_6)); - locationTable[RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1] = Location::Pot(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(90, -3583), "Lower Stalfos Pot 1", "Forest Temple Lower Stalfos Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_1)); - locationTable[RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2] = Location::Pot(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(142, -3583), "Lower Stalfos Pot 2", "Forest Temple Lower Stalfos Pot 2", RHT_POT_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_2)); - locationTable[RC_FOREST_TEMPLE_GREEN_POE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_GREEN_POE_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1647, -1529), "Green Poe Pot 1", "Forest Temple Green Poe Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_1)); - locationTable[RC_FOREST_TEMPLE_GREEN_POE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_GREEN_POE_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1645, -1588), "Green Poe Pot 2", "Forest Temple Green Poe Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_2)); - locationTable[RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1] = Location::Pot(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(32, -3012), "Upper Stalfos Pot 1", "Forest Temple Upper Stalfos Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_1)); - locationTable[RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2] = Location::Pot(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(202, -3012), "Upper Stalfos Pot 2", "Forest Temple Upper Stalfos Pot 2", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_2)); - locationTable[RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3] = Location::Pot(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(30, -3631), "Upper Stalfos Pot 3", "Forest Temple Upper Stalfos Pot 3", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_3)); - locationTable[RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4] = Location::Pot(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(206, -3631), "Upper Stalfos Pot 4", "Forest Temple Upper Stalfos Pot 4", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_4)); - locationTable[RC_FOREST_TEMPLE_BLUE_POE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_BLUE_POE_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(830, -3639), "Blue Poe Pot 1", "Forest Temple Blue Poe Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_1)); - locationTable[RC_FOREST_TEMPLE_BLUE_POE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_BLUE_POE_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(883, -3640), "Blue Poe Pot 2", "Forest Temple Blue Poe Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_2)); - locationTable[RC_FOREST_TEMPLE_BLUE_POE_POT_3] = Location::Pot(RC_FOREST_TEMPLE_BLUE_POE_POT_3, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(941, -3640), "Blue Poe Pot 3", "Forest Temple Blue Poe Pot 3", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_3)); - locationTable[RC_FOREST_TEMPLE_FROZEN_EYE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_FROZEN_EYE_POT_1, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2312, -874), "Frozen Eye Pot 1", "Forest Temple Frozen Eye Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_1)); - locationTable[RC_FOREST_TEMPLE_FROZEN_EYE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_FROZEN_EYE_POT_2, RCQUEST_VANILLA, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2364, -873), "Frozen Eye Pot 2", "Forest Temple Frozen Eye Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_2)); - locationTable[RC_FIRE_TEMPLE_NEAR_BOSS_POT_1] = Location::Pot(RC_FIRE_TEMPLE_NEAR_BOSS_POT_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1086, -714), "Near Boss Pot 1", "Fire Temple Near Boss Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_1)); - locationTable[RC_FIRE_TEMPLE_NEAR_BOSS_POT_2] = Location::Pot(RC_FIRE_TEMPLE_NEAR_BOSS_POT_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1138, -713), "Near Boss Pot 2", "Fire Temple Near Boss Pot 2", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_2)); - locationTable[RC_FIRE_TEMPLE_NEAR_BOSS_POT_3] = Location::Pot(RC_FIRE_TEMPLE_NEAR_BOSS_POT_3, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1087, -765), "Near Boss Pot 3", "Fire Temple Near Boss Pot 3", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_3)); - locationTable[RC_FIRE_TEMPLE_NEAR_BOSS_POT_4] = Location::Pot(RC_FIRE_TEMPLE_NEAR_BOSS_POT_4, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1139, -766), "Near Boss Pot 4", "Fire Temple Near Boss Pot 4", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_4)); - locationTable[RC_FIRE_TEMPLE_BIG_LAVA_POT_1] = Location::Pot(RC_FIRE_TEMPLE_BIG_LAVA_POT_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2226, -754), "Big Lava Pot 1", "Fire Temple Big Lava Pot 1", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_1)); - locationTable[RC_FIRE_TEMPLE_BIG_LAVA_POT_2] = Location::Pot(RC_FIRE_TEMPLE_BIG_LAVA_POT_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2226, -809), "Big Lava Pot 2", "Fire Temple Big Lava Pot 2", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_2)); - locationTable[RC_FIRE_TEMPLE_BIG_LAVA_POT_3] = Location::Pot(RC_FIRE_TEMPLE_BIG_LAVA_POT_3, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2227, -862), "Big Lava Pot 3", "Fire Temple Big Lava Pot 3", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_3)); - locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2388, 953), "Flame Maze Left Pot 1", "Fire Temple Flame Maze Left Pot 1", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1)); - locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2423, 920), "Flame Maze Left Pot 2", "Fire Temple Flame Maze Left Pot 2", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2)); - locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2442, 715), "Flame Maze Left Pot 3", "Fire Temple Flame Maze Left Pot 3", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3)); - locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2408, 680), "Flame Maze Left Pot 4", "Fire Temple Flame Maze Left Pot 4", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4)); - locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2208, -168), "Flame Maze Right Pot 1", "Fire Temple Flame Maze Right Pot 1", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1)); - locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2253, -167), "Flame Maze Right Pot 2", "Fire Temple Flame Maze Right Pot 2", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2)); - locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2657, -591), "Flame Maze Right Pot 3", "Fire Temple Flame Maze Right Pot 3", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3)); - locationTable[RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4] = Location::Pot(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2657, -635), "Flame Maze Right Pot 4", "Fire Temple Flame Maze Right Pot 4", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4)); - locationTable[RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1] = Location::Pot(RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(330, -198), "Main Level 2 Pot 1", "Water Temple Main Level 2 Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_1)); - locationTable[RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2] = Location::Pot(RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(331, -168), "Main Level 2 Pot 2", "Water Temple Main Level 2 Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_2)); - locationTable[RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1] = Location::Pot(RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-241, -1193), "Main Level 1 Pot 1", "Water Temple Main Level 1 Pot 1", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_1)); - locationTable[RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2] = Location::Pot(RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-117, -1192), "Main Level 1 Pot 2", "Water Temple Main Level 1 Pot 2", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_2)); - locationTable[RC_WATER_TEMPLE_TORCH_POT_1] = Location::Pot(RC_WATER_TEMPLE_TORCH_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1123, 62), "Torch Pot 1", "Water Temple Torch Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_TORCH_POT_1)); - locationTable[RC_WATER_TEMPLE_TORCH_POT_2] = Location::Pot(RC_WATER_TEMPLE_TORCH_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1123, 293), "Torch Pot 2", "Water Temple Torch Pot 2", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_TORCH_POT_2)); - locationTable[RC_WATER_TEMPLE_NEAR_COMPASS_POT_1] = Location::Pot(RC_WATER_TEMPLE_NEAR_COMPASS_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1222, -617), "Near Compass Pot 1", "Water Temple Near Compass Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_1)); - locationTable[RC_WATER_TEMPLE_NEAR_COMPASS_POT_2] = Location::Pot(RC_WATER_TEMPLE_NEAR_COMPASS_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1172, -617), "Near Compass Pot 2", "Water Temple Near Compass Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_2)); - locationTable[RC_WATER_TEMPLE_NEAR_COMPASS_POT_3] = Location::Pot(RC_WATER_TEMPLE_NEAR_COMPASS_POT_3, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1122, -617), "Near Compass Pot 3", "Water Temple Near Compass Pot 3", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_3)); - locationTable[RC_WATER_TEMPLE_CENTRAL_BOW_POT_1] = Location::Pot(RC_WATER_TEMPLE_CENTRAL_BOW_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(688, 1008), "Central Bow Pot 1", "Water Temple Central Bow Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_1)); - locationTable[RC_WATER_TEMPLE_CENTRAL_BOW_POT_2] = Location::Pot(RC_WATER_TEMPLE_CENTRAL_BOW_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(631, 1008), "Central Bow Pot 2", "Water Temple Central Bow Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_2)); - locationTable[RC_WATER_TEMPLE_BEHIND_GATE_POT_1] = Location::Pot(RC_WATER_TEMPLE_BEHIND_GATE_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2313, 944), "Behind Gate Pot 1", "Water Temple Behind Gate Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_1)); - locationTable[RC_WATER_TEMPLE_BEHIND_GATE_POT_2] = Location::Pot(RC_WATER_TEMPLE_BEHIND_GATE_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2313, 905), "Behind Gate Pot 2", "Water Temple Behind Gate Pot 2", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_2)); - locationTable[RC_WATER_TEMPLE_BEHIND_GATE_POT_3] = Location::Pot(RC_WATER_TEMPLE_BEHIND_GATE_POT_3, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2314, 808), "Behind Gate Pot 3", "Water Temple Behind Gate Pot 3", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_3)); - locationTable[RC_WATER_TEMPLE_BEHIND_GATE_POT_4] = Location::Pot(RC_WATER_TEMPLE_BEHIND_GATE_POT_4, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2314, 770), "Behind Gate Pot 4", "Water Temple Behind Gate Pot 4", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_4)); - locationTable[RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1] = Location::Pot(RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-28, -3817), "Basement Block Puzzle Pot 1", "Water Temple Basement Block Puzzle Pot 1", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1)); - locationTable[RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2] = Location::Pot(RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(28, -3817), "Basement Block Puzzle Pot 2", "Water Temple Basement Block Puzzle Pot 2", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2)); - locationTable[RC_WATER_TEMPLE_RIVER_POT_1] = Location::Pot(RC_WATER_TEMPLE_RIVER_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2226, -2487), "River Pot 1", "Water Temple River Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_POT_1)); - locationTable[RC_WATER_TEMPLE_RIVER_POT_2] = Location::Pot(RC_WATER_TEMPLE_RIVER_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2184, -2456), "River Pot 2", "Water Temple River Pot 2", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_POT_2)); - locationTable[RC_WATER_TEMPLE_LIKE_LIKE_POT_1] = Location::Pot(RC_WATER_TEMPLE_LIKE_LIKE_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3188, -1628), "Like Like Pot 1", "Water Temple Like Like Pot 1", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_1)); - locationTable[RC_WATER_TEMPLE_LIKE_LIKE_POT_2] = Location::Pot(RC_WATER_TEMPLE_LIKE_LIKE_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3056, -1626), "Like Like Pot 2", "Water Temple Like Like Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_2)); - locationTable[RC_WATER_TEMPLE_BOSS_KEY_POT_1] = Location::Pot(RC_WATER_TEMPLE_BOSS_KEY_POT_1, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -3031), "Boss Key Pot 1", "Water Temple Boss Key Pot 1", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_1)); - locationTable[RC_WATER_TEMPLE_BOSS_KEY_POT_2] = Location::Pot(RC_WATER_TEMPLE_BOSS_KEY_POT_2, RCQUEST_VANILLA, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1417, -3025), "Boss Key Pot 2", "Water Temple Boss Key Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_2)); - locationTable[RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1806, -344), "Near Dead Hand Pot 1", "Shadow Temple Near Dead Hand Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1)); - locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1721, 61), "Whispering Walls Pot 1", "Shadow Temple Whispering Walls Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1)); - locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1407, 61), "Whispering Walls Pot 2", "Shadow Temple Whispering Walls Pot 2", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2)); - locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1614, 61), "Whispering Walls Pot 3", "Shadow Temple Whispering Walls Pot 3", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3)); - locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1055, -257), "Whispering Walls Pot 4", "Shadow Temple Whispering Walls Pot 4", RHT_POT_SHADOW_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4)); - locationTable[RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5] = Location::Pot(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1050, -130), "Whispering Walls Pot 5", "Shadow Temple Whispering Walls Pot 5", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5)); - locationTable[RC_SHADOW_TEMPLE_MAP_CHEST_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MAP_CHEST_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-665, -760), "Map Chest Pot 1", "Shadow Temple Map Chest Pot 1", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_1)); - locationTable[RC_SHADOW_TEMPLE_MAP_CHEST_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-929, -748), "Map Chest Pot 2", "Shadow Temple Map Chest Pot 2", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_2)); - locationTable[RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(614, 3579), "Falling Spikes Pot 1", "Shadow Temple Falling Spikes Pot 1", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_1)); - locationTable[RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(798, 3574), "Falling Spikes Pot 2", "Shadow Temple Falling Spikes Pot 2", RHT_POT_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_2)); - locationTable[RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3] = Location::Pot(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1173, 3707), "Falling Spikes Pot 3", "Shadow Temple Falling Spikes Pot 3", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_3)); - locationTable[RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4] = Location::Pot(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1173, 3605), "Falling Spikes Pot 4", "Shadow Temple Falling Spikes Pot 4", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_4)); - locationTable[RC_SHADOW_TEMPLE_AFTER_WIND_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(4222, -916), "After Wind Pot 1", "Shadow Temple After Wind Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_1)); - locationTable[RC_SHADOW_TEMPLE_AFTER_WIND_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(4549, -922), "After Wind Pot 2", "Shadow Temple After Wind Pot 2", RHT_POT_SHADOW_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_2)); - locationTable[RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4303, -2657), "Spike Walls Pot 1", "Shadow Temple Spike Walls Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SPIKE_WALLS_POT_1)); - locationTable[RC_SHADOW_TEMPLE_FLOORMASTER_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4575, -811), "Floormaster Pot 1", "Shadow Temple Floormaster Pot 1", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_1)); - locationTable[RC_SHADOW_TEMPLE_FLOORMASTER_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4036, -811), "Floormaster Pot 2", "Shadow Temple Floormaster Pot 2", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_2)); - locationTable[RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2400, -1470), "After Boat Pot 1", "Shadow Temple After Boat Pot 1", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_1)); - locationTable[RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2230, -1470), "After Boat Pot 2", "Shadow Temple After Boat Pot 2", RHT_POT_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_2)); - locationTable[RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2859, -497), "After Boat Pot 3", "Shadow Temple After Boat Pot 3", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_3)); - locationTable[RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4] = Location::Pot(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, RCQUEST_VANILLA, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2624, -492), "After Boat Pot 4", "Shadow Temple After Boat Pot 4", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_4)); - locationTable[RC_SPIRIT_TEMPLE_LOBBY_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_LOBBY_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-181, 233), "Lobby Pot 1", "Spirit Temple Lobby Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_LOBBY_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_LOBBY_POT_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(184, 231), "Lobby Pot 2", "Spirit Temple Lobby Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_ANUBIS_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_ANUBIS_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-975, -1751), "Anubis Pot 1", "Spirit Temple Anubis Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_ANUBIS_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_ANUBIS_POT_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-928, -1827), "Anubis Pot 2", "Spirit Temple Anubis Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_ANUBIS_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_ANUBIS_POT_3, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1211, -1530), "Anubis Pot 3", "Spirit Temple Anubis Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_3)); - locationTable[RC_SPIRIT_TEMPLE_ANUBIS_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_ANUBIS_POT_4, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1055, -1680), "Anubis Pot 4", "Spirit Temple Anubis Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SHIELD, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_4)); - locationTable[RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1101, -1305), "Child Climb Pot 1", "Spirit Temple Child Climb Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1781, 830), "After Sun Block Pot 1", "Spirit Temple After Sun Block Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1617, 830), "After Sun Block Pot 2", "Spirit Temple After Sun Block Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-600, -1213), "Central Chamber Pot 1", "Spirit Temple Central Chamber Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-564, -1180), "Central Chamber Pot 2", "Spirit Temple Central Chamber Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-526, -1213), "Central Chamber Pot 3", "Spirit Temple Central Chamber Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3)); - locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(639, -1224), "Central Chamber Pot 4", "Spirit Temple Central Chamber Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4)); - locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(671, -1179), "Central Chamber Pot 5", "Spirit Temple Central Chamber Pot 5", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5)); - locationTable[RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6] = Location::Pot(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(704, -1224), "Central Chamber Pot 6", "Spirit Temple Central Chamber Pot 6", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6)); - locationTable[RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(819, -333), "Beamos Hall Pot 1", "Spirit Temple Beamos Hall Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1)); - locationTable[RC_GANONS_CASTLE_FOREST_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1725, 2336), "Forest Trial Pot 1", "Ganons Castle Forest Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_FOREST_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1892, 2241), "Forest Trial Pot 2", "Ganons Castle Forest Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_FIRE_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1898, -3942), "Fire Trial Pot 2", "Ganons Castle Fire Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_FIRE_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2051, -3855), "Fire Trial Pot 1", "Ganons Castle Fire Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_WATER_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_WATER_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3558, -920), "Water Trial Pot 1", "Ganons Castle Water Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_WATER_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_WATER_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3558, -761), "Water Trial Pot 2", "Ganons Castle Water Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_WATER_TRIAL_POT_3] = Location::Pot(RC_GANONS_CASTLE_WATER_TRIAL_POT_3, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2822, -507), "Water Trial Pot 3", "Ganons Castle Water Trial Pot 3", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_3)); - locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1234, -3418), "Shadow Trial Pot 1", "Ganons Castle Shadow Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1621, -3203), "Shadow Trial Pot 2", "Ganons Castle Shadow Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3] = Location::Pot(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2067, -4592), "Shadow Trial Pot 3", "Ganons Castle Shadow Trial Pot 3", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_3)); - locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4] = Location::Pot(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2224, -4506), "Shadow Trial Pot 4", "Ganons Castle Shadow Trial Pot 4", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_4)); - locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1398, 1402), "Spirit Trial Pot 1", "Ganons Castle Spirit Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1237, 1494), "Spirit Trial Pot 2", "Ganons Castle Spirit Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1] = Location::Pot(RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2581, -839), "Light Trial Boulder Pot 1", "Ganons Castle Light Trial Boulder Pot 1", RHT_POT_GANONS_CASTLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1)); - locationTable[RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-3840, -923), "Light Trial Pot 1", "Ganons Castle Light Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, RCQUEST_VANILLA, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-3840, -755), "Light Trial Pot 2", "Ganons Castle Light Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_1] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_1, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-422, -258), "Ganons Tower Pot 1", "Ganons Castle Ganons Tower Pot 1", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_1)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_2] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_2, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-382, -300), "Ganons Tower Pot 2", "Ganons Castle Ganons Tower Pot 2", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_2)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_3] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_3, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-342, -341), "Ganons Tower Pot 3", "Ganons Castle Ganons Tower Pot 3", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_3)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_4] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_4, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-298, -383), "Ganons Tower Pot 4", "Ganons Castle Ganons Tower Pot 4", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_4)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_5] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_5, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-257, -424), "Ganons Tower Pot 5", "Ganons Castle Ganons Tower Pot 5", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_5)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_6] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_6, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-382, -259), "Ganons Tower Pot 6", "Ganons Castle Ganons Tower Pot 6", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_6)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_7] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_7, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-342, -300), "Ganons Tower Pot 7", "Ganons Castle Ganons Tower Pot 7", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_7)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_8] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_8, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-301, -341), "Ganons Tower Pot 8", "Ganons Castle Ganons Tower Pot 8", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_8)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_9] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_9, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(-258, -383), "Ganons Tower Pot 9", "Ganons Castle Ganons Tower Pot 9", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_9)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_10] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_10, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(418, -261), "Ganons Tower Pot 10", "Ganons Castle Ganons Tower Pot 10", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_10)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_11] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_11, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(377, -301), "Ganons Tower Pot 11", "Ganons Castle Ganons Tower Pot 11", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_11)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_12] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_12, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(338, -340), "Ganons Tower Pot 12", "Ganons Castle Ganons Tower Pot 12", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_12)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_13] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_13, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(300, -380), "Ganons Tower Pot 13", "Ganons Castle Ganons Tower Pot 13", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_13)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_14] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_14, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(260, -420), "Ganons Tower Pot 14", "Ganons Castle Ganons Tower Pot 14", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_14)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_15] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_15, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(378, -261), "Ganons Tower Pot 15", "Ganons Castle Ganons Tower Pot 15", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_15)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_16] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_16, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(337, -300), "Ganons Tower Pot 16", "Ganons Castle Ganons Tower Pot 16", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_16)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_17] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_17, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(299, -340), "Ganons Tower Pot 17", "Ganons Castle Ganons Tower Pot 17", RHT_POT_GANONS_CASTLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_17)); - locationTable[RC_GANONS_CASTLE_GANONS_TOWER_POT_18] = Location::Pot(RC_GANONS_CASTLE_GANONS_TOWER_POT_18, RCQUEST_BOTH, RCAREA_GANONS_CASTLE, SCENE_GANONS_TOWER, TWO_ACTOR_PARAMS(260, -380), "Ganons Tower Pot 18", "Ganons Castle Ganons Tower Pot 18", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_18)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-95, -673), "Basement Pot 1", "Bottom Of The Well Basement Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_1)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(75, -598), "Basement Pot 2", "Bottom Of The Well Basement Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_2)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(270, -1151), "Basement Pot 3", "Bottom Of The Well Basement Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_3)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(566, -1254), "Basement Pot 4", "Bottom Of The Well Basement Pot 4", RHT_POT_BOTTOM_OF_THE_WELL, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_4)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(378, -1089), "Basement Pot 5", "Bottom Of The Well Basement Pot 5", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_5)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(665, -1252), "Basement Pot 6", "Bottom Of The Well Basement Pot 6", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_6)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(566, -1345), "Basement Pot 7", "Bottom Of The Well Basement Pot 7", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_7)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(562, -1304), "Basement Pot 8", "Bottom Of The Well Basement Pot 8", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_8)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(313, -1086), "Basement Pot 9", "Bottom Of The Well Basement Pot 9", RHT_POT_BOTTOM_OF_THE_WELL, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_9)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(618, -1254), "Basement Pot 10", "Bottom Of The Well Basement Pot 10", RHT_POT_BOTTOM_OF_THE_WELL, RG_DEKU_STICK_1, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_10)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(257, -1099), "Basement Pot 11", "Bottom Of The Well Basement Pot 11", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_11)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12] = Location::Pot(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(296, -1206), "Basement Pot 12", "Bottom Of The Well Basement Pot 12", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_12)); - locationTable[RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-969, 55), "Left Side Pot 1", "Bottom Of The Well Left Side Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1)); - locationTable[RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-966, 9), "Left Side Pot 2", "Bottom Of The Well Left Side Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2)); - locationTable[RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-965, -32), "Left Side Pot 3", "Bottom Of The Well Left Side Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3)); - locationTable[RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-41, 389), "Near Entrance Pot 1", "Bottom Of The Well Near Entrance Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_DEKU_STICK_1, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1)); - locationTable[RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(36, 389), "Near Entrance Pot 2", "Bottom Of The Well Near Entrance Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2)); - locationTable[RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(874, -1294), "Fire Keese Pot 1", "Bottom Of The Well Fire Keese Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1)); - locationTable[RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT] = Location::Pot(RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(3, -1641), "Underwater Pot", "Bottom Of The Well Underwater Pot", RHT_POT_BOTTOM_OF_THE_WELL, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_UNDERWATER_POT)); - locationTable[RC_ICE_CAVERN_HALL_POT_1] = Location::Pot(RC_ICE_CAVERN_HALL_POT_1, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-206, 449), "Hall Pot 1", "Ice Cavern Hall Pot 1", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HALL_POT_1)); - locationTable[RC_ICE_CAVERN_HALL_POT_2] = Location::Pot(RC_ICE_CAVERN_HALL_POT_2, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-203, 492), "Hall Pot 2", "Ice Cavern Hall Pot 2", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_HALL_POT_2)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADE_POT_1] = Location::Pot(RC_ICE_CAVERN_SPINNING_BLADE_POT_1, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(433, -732), "Spinning Blade Pot 1", "Ice Cavern Spinning Blade Pot 1", RHT_POT_ICE_CAVERN, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_1)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADE_POT_2] = Location::Pot(RC_ICE_CAVERN_SPINNING_BLADE_POT_2, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(569, -175), "Spinning Blade Pot 2", "Ice Cavern Spinning Blade Pot 2", RHT_POT_ICE_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_2)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADE_POT_3] = Location::Pot(RC_ICE_CAVERN_SPINNING_BLADE_POT_3, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(521, -131), "Spinning Blade Pot 3", "Ice Cavern Spinning Blade Pot 3", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_3)); - locationTable[RC_ICE_CAVERN_NEAR_END_POT_1] = Location::Pot(RC_ICE_CAVERN_NEAR_END_POT_1, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1422, 586), "Near End Pot 1", "Ice Cavern Near End Pot 1", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_POT_1)); - locationTable[RC_ICE_CAVERN_NEAR_END_POT_2] = Location::Pot(RC_ICE_CAVERN_NEAR_END_POT_2, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1488, 676), "Near End Pot 2", "Ice Cavern Near End Pot 2", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_NEAR_END_POT_2)); - locationTable[RC_ICE_CAVERN_FROZEN_POT_1] = Location::Pot(RC_ICE_CAVERN_FROZEN_POT_1, RCQUEST_VANILLA, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(366, -2036), "Frozen Pot 1", "Ice Cavern Frozen Pot 1", RHT_POT_ICE_CAVERN, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_FROZEN_POT_1)); - - // MQ Dungeon Pots - // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2391, -1804), "MQ Staircase Pot 1", "Dodongos Cavern MQ Staircase Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2361, -1161), "MQ Staircase Pot 2", "Dodongos Cavern MQ Staircase Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1525, -1800), "MQ Staircase Pot 3", "Dodongos Cavern MQ Staircase Pot 3", RHT_POT_DODONGOS_CAVERN, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1558, -1169), "MQ Staircase Pot 4", "Dodongos Cavern MQ Staircase Pot 4", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1532, -1225), "MQ Torch Puzzle Middle Pot", "Dodongos Cavern MQ Torch Puzzle Middle Pot", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3195, -155), "MQ Big Block Pot 1", "Dodongos Cavern MQ Big Block Pot 1", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2704, -483), "MQ Big Block Pot 2", "Dodongos Cavern MQ Big Block Pot 2", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3869, -811), "MQ Upper Lizalfos Pot 1", "Dodongos Cavern MQ Upper Lizalfos Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3867, -969), "MQ Upper Lizalfos Pot 2", "Dodongos Cavern MQ Upper Lizalfos Pot 2", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4687, -1071), "MQ Upper Lizalfos Pot 3", "Dodongos Cavern MQ Upper Lizalfos Pot 3", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4693, -1194), "MQ Upper Lizalfos Pot 4", "Dodongos Cavern MQ Upper Lizalfos Pot 4", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3327, -805), "MQ Two Flames Pot 1", "Dodongos Cavern MQ Two Flames Pot 1", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3326, -753), "MQ Two Flames Pot 2", "Dodongos Cavern MQ Two Flames Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1827, -587), "MQ Torch Puzzle Corner Pot", "Dodongos Cavern MQ Torch Puzzle Corner Pot", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1727, -151), "MQ Right Side Pot 1", "Dodongos Cavern MQ Right Side Pot 1", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1815, -154), "MQ Right Side Pot 2", "Dodongos Cavern MQ Right Side Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3442, -469), "MQ Right Side Pot 3", "Dodongos Cavern MQ Right Side Pot 3", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3682, -466), "MQ Right Side Pot 4", "Dodongos Cavern MQ Right Side Pot 4", RHT_POT_DODONGOS_CAVERN, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1844, -1867), "MQ Poe Room Pot 1", "Dodongos Cavern MQ Poe Room Pot 1", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2272, -2213), "MQ Poe Room Pot 2", "Dodongos Cavern MQ Poe Room Pot 2", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3] = Location::Pot(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2240, -1369), "MQ Poe Room Pot 3", "Dodongos Cavern MQ Poe Room Pot 3", RHT_POT_DODONGOS_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4] = Location::Pot(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1535, -1299), "MQ Poe Room Pot 4", "Dodongos Cavern MQ Poe Room Pot 4", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(258, -3055), "MQ Before Boss SW Pot", "Dodongos Cavern MQ Before Boss SW Pot", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-265, -2499), "MQ Before Boss NE Pot", "Dodongos Cavern MQ Before Boss NE Pot", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1758, -3194), "MQ Armos Room SE Pot", "Dodongos Cavern MQ Armos SE Pot", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1223, -3197), "MQ Armos Room SW Pot", "Dodongos Cavern MQ Armos SW Pot", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1663, -4311), "MQ Backroom Pot 1", "Dodongos Cavern MQ Backroom Pot 1", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2] = Location::Pot(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1648, -4694), "MQ Backroom Pot 2", "Dodongos Cavern MQ Backroom Pot 2", RHT_POT_DODONGOS_CAVERN, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1005, -3711), "MQ Armos Room NW Pot", "Dodongos Cavern MQ Armos NW Pot", RHT_POT_DODONGOS_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT] = Location::Pot(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1066, -3711), "MQ Armos Room NE Pot", "Dodongos Cavern MQ Armos NE Pot", RHT_POT_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_2)); - locationTable[RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-183, -449), "MQ Entrance Pot 1", "Jabu Jabus Belly MQ Entrance Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1)); - locationTable[RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(202, -62), "MQ Entrance Pot 2", "Jabu Jabus Belly MQ Entrance Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2)); - locationTable[RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-689, -1800), "MQ Geyser Pot 1", "Jabu Jabus Belly MQ Geyser Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_1)); - locationTable[RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-693, -1614), "MQ Geyser Pot 2", "Jabu Jabus Belly MQ Geyser Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_2)); - locationTable[RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(697, -2318), "MQ Time Block Pot 1", "Jabu Jabus Belly MQ Time Block Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1)); - locationTable[RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(699, -2445), "MQ Time Block Pot 2", "Jabu Jabus Belly MQ Time Block Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2)); - locationTable[RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(612, -5932), "MQ Like Likes Pot 1", "Jabu Jabus Belly MQ Like Likes Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1)); - locationTable[RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(718, -5929), "MQ Like Likes Pot 2", "Jabu Jabus Belly MQ Like Likes Pot 2", RHT_POT_JABU_JABUS_BELLY, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2)); - locationTable[RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1] = Location::Pot(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(1305, -2005), "MQ Before Boss Pot 1", "Jabu Jabus Belly MQ Before Boss Pot 1", RHT_POT_JABU_JABUS_BELLY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1)); - locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(675, -989), "MQ Lobby Pot 1", "Forest Temple MQ Lobby Pot 1", RHT_POT_FOREST_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_1)); - locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-429, -981), "MQ Lobby Pot 2", "Forest Temple MQ Lobby Pot 2", RHT_POT_FOREST_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_2)); - locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_3] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(720, -1037), "MQ Lobby Pot 3", "Forest Temple MQ Lobby Pot 3", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_3)); - locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_4] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_4, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-477, -1034), "MQ Lobby Pot 4", "Forest Temple MQ Lobby Pot 4", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_4)); - locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_5] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_5, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(630, -943), "MQ Lobby Pot 5", "Forest Temple MQ Lobby Pot 5", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_5)); - locationTable[RC_FOREST_TEMPLE_MQ_LOBBY_POT_6] = Location::Pot(RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-384, -937), "MQ Lobby Pot 6", "Forest Temple MQ Lobby Pot 6", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_6)); - locationTable[RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(90, -3583), "MQ Wolfos Pot 1", "Forest Temple MQ Wolfos Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_1)); - locationTable[RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(142, -3583), "MQ Wolfos Pot 2", "Forest Temple MQ Wolfos Pot 2", RHT_POT_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_2)); - locationTable[RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(206, -3631), "MQ Upper Stalfos Pot 1", "Forest Temple MQ Upper Stalfos Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1)); - locationTable[RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(32, -3012), "MQ Upper Stalfos Pot 2", "Forest Temple MQ Upper Stalfos Pot 2", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2)); - locationTable[RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3] = Location::Pot(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(30, -3631), "MQ Upper Stalfos Pot 3", "Forest Temple MQ Upper Stalfos Pot 3", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3)); - locationTable[RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4] = Location::Pot(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(202, -3012), "MQ Upper Stalfos Pot 4", "Forest Temple MQ Upper Stalfos Pot 4", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4)); - locationTable[RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(830, -3639), "MQ Blue Poe Pot 1", "Forest Temple MQ Blue Poe Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_1)); - locationTable[RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(941, -3640), "MQ Blue Poe Pot 2", "Forest Temple MQ Blue Poe Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_2)); - locationTable[RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3] = Location::Pot(RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(883, -3640), "MQ Blue Poe Pot 3", "Forest Temple MQ Blue Poe Pot 3", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_3)); - locationTable[RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1647, -1529), "MQ Green Poe Pot 1", "Forest Temple MQ Green Poe Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_1)); - locationTable[RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1645, -1588), "MQ Green Poe Pot 2", "Forest Temple MQ Green Poe Pot 2", RHT_POT_FOREST_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_2)); - locationTable[RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1] = Location::Pot(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-461, -1095), "MQ Basement Pot 1", "Forest Temple MQ Basement Pot 1", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_1)); - locationTable[RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2] = Location::Pot(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-351, -979), "MQ Basement Pot 2", "Forest Temple MQ Basement Pot 2", RHT_POT_FOREST_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_2)); - locationTable[RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3] = Location::Pot(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-387, -1018), "MQ Basement Pot 3", "Forest Temple MQ Basement Pot 3", RHT_POT_FOREST_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_3)); - locationTable[RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4] = Location::Pot(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-424, -1057), "MQ Basement Pot 4", "Forest Temple MQ Basement Pot 4", RHT_POT_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_4)); - locationTable[RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1873, 2252), "MQ Forest Trial Pot 1", "Ganons Castle MQ Forest Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1726, 2326), "MQ Forest Trial Pot 2", "Ganons Castle MQ Forest Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3544, -931), "MQ Water Trial Pot 1", "Ganons Castle MQ Water Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3541, -755), "MQ Water Trial Pot 2", "Ganons Castle MQ Water Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2073, -4592), "MQ Shadow Trial Pot 1", "Ganons Castle MQ Shadow Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2217, -4516), "MQ Shadow Trial Pot 2", "Ganons Castle MQ Shadow Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1918, -3957), "MQ Fire Trial Pot 1", "Ganons Castle MQ Fire Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2052, -3888), "MQ Fire Trial Pot 2", "Ganons Castle MQ Fire Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-3842, -759), "MQ Light Trial Pot 1", "Ganons Castle MQ Light Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-3845, -933), "MQ Light Trial Pot 2", "Ganons Castle MQ Light Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2)); - locationTable[RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1] = Location::Pot(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1402, 1414), "MQ Spirit Trial Pot 1", "Ganons Castle MQ Spirit Trial Pot 1", RHT_POT_GANONS_CASTLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1)); - locationTable[RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2] = Location::Pot(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1256, 1500), "MQ Spirit Trial Pot 2", "Ganons Castle MQ Spirit Trial Pot 2", RHT_POT_GANONS_CASTLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2)); - locationTable[RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1045, -130), "MQ Whispering Walls Pot 1", "Shadow Temple MQ Whispering Walls Pot 1", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1)); - locationTable[RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-1045, -240), "MQ Whispering Walls Pot 2", "Shadow Temple MQ Whispering Walls Pot 2", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2)); - locationTable[RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-657, -949), "MQ Entrance Redead Pot 1", "Shadow Temple MQ Entrance Redead Pot 1", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1)); - locationTable[RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-713, -1016), "MQ Entrance Redead Pot 2", "Shadow Temple MQ Entrance Redead Pot 2", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2)); - locationTable[RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(614, 3579), "MQ Lower Umbrella W Pot", "Shadow Temple MQ Stone Umbrella Lower West Pot", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_1)); - locationTable[RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(798, 3574), "MQ Lower Umbrella E Pot", "Shadow Temple MQ Stone Umbrella Lower East Pot", RHT_POT_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_2)); - locationTable[RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1173, 3707), "MQ Upper Umbrella S Pot", "Shadow Temple MQ Stone Umbrella Upper South Pot", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_3)); - locationTable[RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1173, 3605), "MQ Upper Umbrella N Pot", "Shadow Temple MQ Stone Umbrella Upper North Pot", RHT_POT_SHADOW_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_4)); - locationTable[RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(4222, -916), "MQ Before Boat Pot 1", "Shadow Temple MQ Before Boat Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1)); - locationTable[RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(4549, -922), "MQ Before Boat Pot 2", "Shadow Temple MQ Before Boat Pot 2", RHT_POT_SHADOW_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2)); - locationTable[RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2400, -1470), "MQ Before Chasm W Pot", "Shadow Temple MQ Before Chasm West Pot", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_1)); - locationTable[RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2230, -1470), "MQ Before Chasm E Pot", "Shadow Temple MQ Before Chasm East Pot", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_2)); - locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2859, -497), "MQ After Chasm W Pot", "Shadow Temple MQ After Chasm West Pot", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_3)); - locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-2624, -492), "MQ After Chasm E Pot", "Shadow Temple MQ After Chasm East Pot", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_4)); - locationTable[RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT] = Location::Pot(RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4303, -2657), "MQ Spike Baricade Pot", "Shadow Temple MQ Spike Baricade Pot", RHT_POT_SHADOW_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT)); - locationTable[RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1] = Location::Pot(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4575, -811), "MQ Dead Hand Pot 1", "Shadow Temple MQ Dead Hand Pot 1", RHT_POT_SHADOW_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1)); - locationTable[RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2] = Location::Pot(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-4036, -811), "MQ Dead Hand Pot 2", "Shadow Temple MQ Dead Hand Pot 2", RHT_POT_SHADOW_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(339, -377), "MQ Inner Lobby Pot 1", "Bottom Of The Well MQ Inner Lobby Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(416, -377), "MQ Inner Lobby Pot 2", "Bottom Of The Well MQ Inner Lobby Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(269, -376), "MQ Inner Lobby Pot 3", "Bottom Of The Well MQ Inner Lobby Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(421, -174), "MQ Outer Lobby Pot", "Bottom Of The Well MQ Outer Lobby Pot", RHT_POT_BOTTOM_OF_THE_WELL, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(288, -1240), "MQ East Inner Pot 1", "Bottom Of The Well MQ East Inner Room Pot 1", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(438, -1234), "MQ East Inner Pot 2", "Bottom Of The Well MQ East Inner Room Pot 2", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3] = Location::Pot(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(444, -1114), "MQ East Inner Pot 3", "Bottom Of The Well MQ East Inner Room Pot 3", RHT_POT_BOTTOM_OF_THE_WELL, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3)); - locationTable[RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-357, 957), "MQ Entrance Pot 1", "Fire Temple MQ Entrance Pot 1", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1)); - locationTable[RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(356, 959), "MQ Entrance Pot 2", "Fire Temple MQ Entrance Pot 2", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2)); - locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(187, -1449), "MQ Before Mini Boss Pot 1", "Fire Temple MQ Before Mini Boss Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1)); - locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(188, -1514), "MQ Before Mini Boss Pot 2", "Fire Temple MQ Before Mini Boss Pot 2", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2)); - locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(487, -1450), "MQ Before Mini Boss Pot 3", "Fire Temple MQ Before Mini Boss Pot 3", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3)); - locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(486, -1515), "MQ Before Mini Boss Pot 4", "Fire Temple MQ Before Mini Boss Pot 4", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4)); - locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(38, -1179), "MQ Before Mini Boss Pot 5", "Fire Temple MQ Before Mini Boss Pot 5", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5)); - locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(42, -1298), "MQ Before Mini Boss Pot 6", "Fire Temple MQ Before Mini Boss Pot 6", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6)); - locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(520, -943), "MQ Before Mini Boss Pot 7", "Fire Temple MQ Before Mini Boss Pot 7", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7)); - locationTable[RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8] = Location::Pot(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(35, -946), "MQ Before Mini Boss Pot 8", "Fire Temple MQ Before Mini Boss Pot 8", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1426, -711), "MQ Outside Boss Pot 1", "Fire Temple MQ Outside Boss Pot 1", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1425, -660), "MQ Outside Boss Pot 2", "Fire Temple MQ Outside Boss Pot 2", RHT_POT_FIRE_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1646, -1260), "MQ Lava Room North Pot", "Fire Temple MQ Lava Room North Pot", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2226, -809), "MQ Lava Room High Pot", "Fire Temple MQ Lava Room High Pot", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_2)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1634, 1475), "MQ Lava Room South Pot", "Fire Temple MQ Lava Room South Pot", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_3)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(845, -1591), "MQ Lava Torch Pot 1", "Fire Temple MQ Lava Torch Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(901, -1593), "MQ Lava Torch Pot 2", "Fire Temple MQ Lava Torch Pot 2", RHT_POT_FIRE_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2)); - locationTable[RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1756, -155), "MQ Above Lava Pot 1", "Fire Temple MQ Above Lava Pot 1", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1)); - locationTable[RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1819, -82), "MQ Above Lava Pot 2", "Fire Temple MQ Above Lava Pot 2", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2)); - locationTable[RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3] = Location::Pot(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1789, -122), "MQ Above Lava Pot 3", "Fire Temple MQ Above Lava Pot 3", RHT_POT_FIRE_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3)); - locationTable[RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1] = Location::Pot(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1493, 386), "MQ Flame Wall Pot 1", "Fire Temple MQ Flame Wall Pot 1", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1)); - locationTable[RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2] = Location::Pot(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1445, 445), "MQ Flame Wall Pot 2", "Fire Temple MQ Flame Wall Pot 2", RHT_POT_FIRE_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2)); - locationTable[RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2217, -163), "MQ Past Fire Maze North Pot", "Fire Temple MQ Past Fire Maze North Pot", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_1)); - locationTable[RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2657, -591), "MQ Past Fire Maze South Pot", "Fire Temple MQ Past Fire Maze South Pot", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_2)); - locationTable[RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1849, -1114), "MQ Fire Maze Northmost Pot", "Fire Temple MQ Fire Maze Northmost Pot", RHT_POT_FIRE_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_3)); - locationTable[RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2110, -646), "MQ Fire Maze North West Pot", "Fire Temple MQ Fire Maze North West Pot", RHT_POT_FIRE_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_4)); - locationTable[RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2319, 838), "MQ South Fire Maze W Pot", "Fire Temple MQ South Fire Maze West Pot", RHT_POT_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_5)); - locationTable[RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT] = Location::Pot(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2285, 803), "MQ South Fire Maze E Pot", "Fire Temple MQ South Fire Maze East Pot", RHT_POT_FIRE_TEMPLE, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_6)); - locationTable[RC_ICE_CAVERN_MQ_ENTRANCE_POT] = Location::Pot(RC_ICE_CAVERN_MQ_ENTRANCE_POT, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(248, 2287), "MQ Entrance Pot", "Ice Cavern MQ Entrance Pot", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_ENTRANCE_POT)); - locationTable[RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1] = Location::Pot(RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(51, 718), "MQ First Crystal Pot 1", "Ice Cavern MQ First Crystal Pot 1", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1)); - locationTable[RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2] = Location::Pot(RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(52, 768), "MQ First Crystal Pot 2", "Ice Cavern MQ First Crystal Pot 2", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2)); - locationTable[RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1] = Location::Pot(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(433, -732), "MQ Early Wolfos Pot 1", "Ice Cavern MQ Early Wolfos Pot 1", RHT_POT_ICE_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1)); - locationTable[RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2] = Location::Pot(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(569, -175), "MQ Early Wolfos Pot 2", "Ice Cavern MQ Early Wolfos Pot 2", RHT_POT_ICE_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2)); - locationTable[RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3] = Location::Pot(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(521, -131), "MQ Early Wolfos Pot 3", "Ice Cavern MQ Early Wolfos Pot 3", RHT_POT_ICE_CAVERN, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3)); - locationTable[RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4] = Location::Pot(RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(138, -672), "MQ Early Wolfos Pot 4", "Ice Cavern MQ Early Wolfos Pot 4", RHT_POT_ICE_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4)); - locationTable[RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1] = Location::Pot(RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1352, 639), "MQ Push Block Pot 1", "Ice Cavern MQ Push Block Pot 1", RHT_POT_ICE_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1)); - locationTable[RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2] = Location::Pot(RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1396, 596), "MQ Push Block Pot 2", "Ice Cavern MQ Push Block Pot 2", RHT_POT_ICE_CAVERN, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2)); - locationTable[RC_ICE_CAVERN_MQ_COMPASS_POT_1] = Location::Pot(RC_ICE_CAVERN_MQ_COMPASS_POT_1, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(902, -2720), "MQ Compass Pot 1", "Ice Cavern MQ Compass Pot 1", RHT_POT_ICE_CAVERN, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_1)); - locationTable[RC_ICE_CAVERN_MQ_COMPASS_POT_2] = Location::Pot(RC_ICE_CAVERN_MQ_COMPASS_POT_2, RCQUEST_MQ, RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(451, -2726), "MQ Compass Pot 2", "Ice Cavern MQ Compass Pot 2", RHT_POT_ICE_CAVERN, RG_BOMBS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-255, 742), "MQ Entrance Pot 1", "Spirit Temple MQ Entrance Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(306, 682), "MQ Entrance Pot 2", "Spirit Temple MQ Entrance Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-297, 687), "MQ Entrance Pot 3", "Spirit Temple MQ Entrance Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3)); - locationTable[RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(260, 735), "MQ Entrance Pot 4", "Spirit Temple MQ Entrance Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4)); - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-894, -50), "MQ Child Slugma Pot", "Spirit Temple MQ Child Slugma Pot", RHT_POT_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT)); - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-382, -1256), "MQ Child Gibdo Pot 1", "Spirit Temple MQ Child Gibdo Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-381, -1207), "MQ Child Gibdo Pot 2", "Spirit Temple MQ Child Gibdo Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1035, -1240), "MQ Child Like Like Pot", "Spirit Temple MQ Child Like Like Pot", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT)); - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1166, -1931), "MQ Child Stalfos Pot 1", "Spirit Temple MQ Child Stalfos Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-959, -1930), "MQ Child Stalfos Pot 2", "Spirit Temple MQ Child Stalfos Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-853, -1837), "MQ Child Stalfos Pot 3", "Spirit Temple MQ Child Stalfos Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3)); - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1250, -1852), "MQ Child Stalfos Pot 4", "Spirit Temple MQ Child Stalfos Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4)); - locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(639, -1224), "MQ Statue Room 2F CE Pot", "Spirit Temple MQ Statue 2F Center East Pot", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-521, -1576), "MQ Statue Room 3F E Pot", "Spirit Temple MQ Statue Room 3F East Pot", RHT_POT_SPIRIT_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-595, -1576), "MQ Statue Room 3F W Pot", "Spirit Temple MQ Statue Room 3F West Pot", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_3)); - locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-559, -1209), "MQ Statue Room 2F W Pot", "Spirit Temple MQ Statue 2F West Pot", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_4)); - locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(704, -1224), "MQ Statue Room 2F E Pot", "Spirit Temple MQ Statue 2F Eastmost Pot", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_5)); - locationTable[RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1276, 432), "MQ Sun Blocks Pot 1", "Spirit Temple MQ Sun Blocks Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1635, -446), "MQ Sun Blocks Pot 2", "Spirit Temple MQ Sun Blocks Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_DEKU_SEEDS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(829, 250), "MQ Long Climb Pot 1", "Spirit Temple MQ Long Climb Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(531, 249), "MQ Long Climb Pot 2", "Spirit Temple MQ Long Climb Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(244, -893), "MQ Big Mirror Pot 1", "Spirit Temple MQ Big Mirror Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-122, -741), "MQ Big Mirror Pot 2", "Spirit Temple MQ Big Mirror Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(250, -741), "MQ Big Mirror Pot 3", "Spirit Temple MQ Big Mirror Pot 3", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-123, -892), "MQ Big Mirror Pot 4", "Spirit Temple MQ Big Mirror Pot 4", RHT_POT_SPIRIT_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(781, -841), "MQ Before Mirror Pot 1", "Spirit Temple MQ Before Mirror Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(587, -844), "MQ Before Mirror Pot 2", "Spirit Temple MQ Before Mirror Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1204, -910), "MQ Early Adult Pot 1", "Spirit Temple MQ Early Adult Pot 1", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2] = Location::Pot(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1204, -1028), "MQ Early Adult Pot 2", "Spirit Temple MQ Early Adult Pot 2", RHT_POT_SPIRIT_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1123, 62), "MQ Lower Torches Pot 1", "Water Temple MQ Lower Torches Pot 1", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1123, 293), "MQ Lower Torches Pot 2", "Water Temple MQ Lower Torches Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1222, -617), "MQ Storage Room A Pot 1", "Water Temple MQ Storage Room A Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1122, -617), "MQ Storage Room A Pot 2", "Water Temple MQ Storage Room A Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1172, -617), "MQ Storage Room A Pot 3", "Water Temple MQ Storage Room A Pot 3", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3)); - locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-989, 255), "MQ GS Storage Room Pot 1", "Water Temple MQ GS Storage Room Pot 1", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1026, 257), "MQ GS Storage Room Pot 2", "Water Temple MQ GS Storage Room Pot 2", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3] = Location::Pot(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1062, 256), "MQ GS Storage Room Pot 3", "Water Temple MQ GS Storage Room Pot 3", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(512, 579), "MQ Lizalfos Hall W Pot", "Water Temple MQ Lizalfos Hallway West Pot", RHT_POT_WATER_TEMPLE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(602, 1022), "MQ Lizalfos Hall S Pot", "Water Temple MQ Lizalfos Hallway South Pot", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(789, 947), "MQ Lizalfos Hall SE Pot", "Water Temple MQ Lizalfos Hallway SE Pot", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_3)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(768, 565), "MQ Lizalfos Cage N Pot", "Water Temple MQ Lizalfos Cage North Pot", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_4)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(767, 517), "MQ Lizalfos Cage S Pot", "Water Temple MQ Lizalfos Cage South Pot", RHT_POT_WATER_TEMPLE, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_5)); - locationTable[RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3500, -751), "MQ Stalfos Pit Middle Pot", "Water Temple MQ Stalfos Pit Middle Pot", RHT_POT_WATER_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_3)); - locationTable[RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3500, -686), "MQ Stalfos Pit South Pot", "Water Temple MQ Stalfos Pit South Pot", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_4)); - locationTable[RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3500, -810), "MQ Stalfos Pit North Pot", "Water Temple MQ Stalfos Pit North Pot", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_5)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3188, -1628), "MQ Before Dark Link Pot 1", "Water Temple MQ Before Dark Link Pot 1", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3056, -1626), "MQ Before Dark Link Pot 2", "Water Temple MQ Before Dark Link Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3072, -4024), "MQ After Dark Link Pot 1", "Water Temple MQ After Dark Link Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_30, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-3169, -4023), "MQ After Dark Link Pot 2", "Water Temple MQ After Dark Link Pot 2", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_RIVER_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_RIVER_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2226, -2487), "MQ River Pot 1", "Water Temple MQ River Pot 1", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_RIVER_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_RIVER_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2184, -2456), "MQ River Pot 2", "Water Temple MQ River Pot 2", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_BOSS_KEY_POT] = Location::Pot(RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1033, -1569), "MQ Boss Key Pot", "Water Temple MQ Boss Key Pot", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BOSS_KEY_POT)); - locationTable[RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2314, 770), "MQ Lowest GS Pot 1", "Water Temple MQ Lowest GS Pot 1", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2314, 808), "MQ Lowest GS Pot 2", "Water Temple MQ Lowest GS Pot 2", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2313, 944), "MQ Lowest GS Pot 3", "Water Temple MQ Lowest GS Pot 3", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_3)); - locationTable[RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4] = Location::Pot(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2313, 905), "MQ Lowest GS Pot 4", "Water Temple MQ Lowest GS Pot 4", RHT_POT_WATER_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_4)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1417, -3025), "MQ Storage Room B Pot 1", "Water Temple MQ Storage Room B Pot 1", RHT_POT_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -3031), "MQ Storage Room B Pot 2", "Water Temple MQ Storage Room B Pot 2", RHT_POT_WATER_TEMPLE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2)); - locationTable[RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1] = Location::Pot(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(28, -3817), "MQ Mini Dodongo Pot 1", "Water Temple MQ Mini Dodongo Pot 1", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1)); - locationTable[RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2] = Location::Pot(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-28, -3817), "MQ Mini Dodongo Pot 2", "Water Temple MQ Mini Dodongo Pot 2", RHT_POT_WATER_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2)); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-324, -72), "MQ Lobby Left Pot 1", "Gerudo Training Ground MQ Lobby Left Pot 1", RHT_POT_GERUDO_TRAINING_GROUND, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1)); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-324, -177), "MQ Lobby Left Pot 2", "Gerudo Training Ground MQ Lobby Left Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2)); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(199, -79), "MQ Lobby Right Pot 1", "Gerudo Training Ground MQ Lobby Right Pot 1", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1)); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(197, -179), "MQ Lobby Right Pot 2", "Gerudo Training Ground MQ Lobby Right Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2)); - - // Fairies - locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, "Grotto Fairy 1", "SFM Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1)); - locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1801, "Grotto Fairy 2", "SFM Grotto Fairy 2", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2)); - locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1802, "Grotto Fairy 3", "SFM Grotto Fairy 3", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3)); - locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1803, "Grotto Fairy 4", "SFM Grotto Fairy 4", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4)); - locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1804, "Grotto Fairy 5", "SFM Grotto Fairy 5", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5)); - locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1805, "Grotto Fairy 6", "SFM Grotto Fairy 6", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6)); - locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1806, "Grotto Fairy 7", "SFM Grotto Fairy 7", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7)); - locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1807, "Grotto Fairy 8", "SFM Grotto Fairy 8", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8)); - locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0300, "Grotto Fairy 1", "ZR Grotto Fairy 1", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1)); - locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0301, "Grotto Fairy 2", "ZR Grotto Fairy 2", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2)); - locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0302, "Grotto Fairy 3", "ZR Grotto Fairy 3", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3)); - locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0303, "Grotto Fairy 4", "ZR Grotto Fairy 4", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4)); - locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0304, "Grotto Fairy 5", "ZR Grotto Fairy 5", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5)); - locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0305, "Grotto Fairy 6", "ZR Grotto Fairy 6", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6)); - locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0306, "Grotto Fairy 7", "ZR Grotto Fairy 7", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7)); - locationTable[RC_ZR_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_ZR_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_FAIRYS_FOUNTAIN, 0x0307, "Grotto Fairy 8", "ZR Grotto Fairy 8", RHT_ZR_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8)); - locationTable[RC_HF_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F00, "Grotto Fairy 1", "HF Grotto Fairy 1", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_1)); - locationTable[RC_HF_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F01, "Grotto Fairy 2", "HF Grotto Fairy 2", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_2)); - locationTable[RC_HF_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F02, "Grotto Fairy 3", "HF Grotto Fairy 3", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_3)); - locationTable[RC_HF_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F03, "Grotto Fairy 4", "HF Grotto Fairy 4", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_4)); - locationTable[RC_HF_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F04, "Grotto Fairy 5", "HF Grotto Fairy 5", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_5)); - locationTable[RC_HF_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F05, "Grotto Fairy 6", "HF Grotto Fairy 6", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_6)); - locationTable[RC_HF_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F06, "Grotto Fairy 7", "HF Grotto Fairy 7", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_7)); - locationTable[RC_HF_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_HF_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_FAIRYS_FOUNTAIN, 0x0F07, "Grotto Fairy 8", "HF Grotto Fairy 8", RHT_HF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FAIRY_GROTTO_FAIRY_8)); - locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C00, "Grotto Fairy 1", "ZD Grotto Fairy 1", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1)); - locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C01, "Grotto Fairy 2", "ZD Grotto Fairy 2", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2)); - locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C02, "Grotto Fairy 3", "ZD Grotto Fairy 3", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3)); - locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C03, "Grotto Fairy 4", "ZD Grotto Fairy 4", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4)); - locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C04, "Grotto Fairy 5", "ZD Grotto Fairy 5", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5)); - locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C05, "Grotto Fairy 6", "ZD Grotto Fairy 6", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6)); - locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C06, "Grotto Fairy 7", "ZD Grotto Fairy 7", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7)); - locationTable[RC_ZD_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_ZD_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_FAIRYS_FOUNTAIN, 0x1C07, "Grotto Fairy 8", "ZD Grotto Fairy 8", RHT_ZD_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8)); - locationTable[RC_GF_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D00, "Grotto Fairy 1", "GF Grotto Fairy 1", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_1)); - locationTable[RC_GF_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D01, "Grotto Fairy 2", "GF Grotto Fairy 2", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_2)); - locationTable[RC_GF_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D02, "Grotto Fairy 3", "GF Grotto Fairy 3", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_3)); - locationTable[RC_GF_FAIRY_GROTTO_FAIRY_4] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D03, "Grotto Fairy 4", "GF Grotto Fairy 4", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_4)); - locationTable[RC_GF_FAIRY_GROTTO_FAIRY_5] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_5, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D04, "Grotto Fairy 5", "GF Grotto Fairy 5", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_5)); - locationTable[RC_GF_FAIRY_GROTTO_FAIRY_6] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_6, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D05, "Grotto Fairy 6", "GF Grotto Fairy 6", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_6)); - locationTable[RC_GF_FAIRY_GROTTO_FAIRY_7] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_7, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D06, "Grotto Fairy 7", "GF Grotto Fairy 7", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_7)); - locationTable[RC_GF_FAIRY_GROTTO_FAIRY_8] = Location::Fairy(RC_GF_FAIRY_GROTTO_FAIRY_8, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_FAIRYS_FOUNTAIN, 0x1D07, "Grotto Fairy 8", "GF Grotto Fairy 8", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_8)); - - locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x00, "Shield Grave Fairy 1", "Shield Grave Fairy 1", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1)); - locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x01, "Shield Grave Fairy 2", "Shield Grave Fairy 2", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2)); - locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x02, "Shield Grave Fairy 3", "Shield Grave Fairy 3", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3)); - locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x03, "Shield Grave Fairy 4", "Shield Grave Fairy 4", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4)); - locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x04, "Shield Grave Fairy 5", "Shield Grave Fairy 5", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5)); - locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x05, "Shield Grave Fairy 6", "Shield Grave Fairy 6", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6)); - locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x06, "Shield Grave Fairy 7", "Shield Grave Fairy 7", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7)); - locationTable[RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8] = Location::Fairy(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, 0x07, "Shield Grave Fairy 8", "Shield Grave Fairy 8", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8)); - locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_1] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_1, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x00, "Scrubs Fairy 1", "Scrubs Fairy 1", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1)); - locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_2] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_2, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x01, "Scrubs Fairy 2", "Scrubs Fairy 2", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2)); - locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_3] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_3, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x02, "Scrubs Fairy 3", "Scrubs Fairy 3", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3)); - locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_4] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_4, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x03, "Scrubs Fairy 4", "Scrubs Fairy 4", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4)); - locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_5] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_5, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x04, "Scrubs Fairy 5", "Scrubs Fairy 5", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5)); - locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_6] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_6, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x05, "Scrubs Fairy 6", "Scrubs Fairy 6", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6)); - locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_7] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_7, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x06, "Scrubs Fairy 7", "Scrubs Fairy 7", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7)); - locationTable[RC_GANONS_CASTLE_SCRUBS_FAIRY_8] = Location::Fairy(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x07, "Scrubs Fairy 8", "Scrubs Fairy 8", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8)); - locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x00, "MQ Scrubs Fairy 1", "MQ Scrubs Fairy 1", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1)); - locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x01, "MQ Scrubs Fairy 2", "MQ Scrubs Fairy 2", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2)); - locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x02, "MQ Scrubs Fairy 3", "MQ Scrubs Fairy 3", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3)); - locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x03, "MQ Scrubs Fairy 4", "MQ Scrubs Fairy 4", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4)); - locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x04, "MQ Scrubs Fairy 5", "MQ Scrubs Fairy 5", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5)); - locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x05, "MQ Scrubs Fairy 6", "MQ Scrubs Fairy 6", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6)); - locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x06, "MQ Scrubs Fairy 7", "MQ Scrubs Fairy 7", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7)); - locationTable[RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8] = Location::Fairy(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, RCQUEST_MQ, RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, 0x07, "MQ Scrubs Fairy 8", "MQ Scrubs Fairy 8", RHT_GANONS_CASTLE_SCRUBS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8)); - locationTable[RC_COLOSSUS_OASIS_FAIRY_1] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x00, "Oasis Fairy 1", "Oasis Fairy 1", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_1)); - locationTable[RC_COLOSSUS_OASIS_FAIRY_2] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x01, "Oasis Fairy 2", "Oasis Fairy 2", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_2)); - locationTable[RC_COLOSSUS_OASIS_FAIRY_3] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_3, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x02, "Oasis Fairy 3", "Oasis Fairy 3", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_3)); - locationTable[RC_COLOSSUS_OASIS_FAIRY_4] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_4, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x03, "Oasis Fairy 4", "Oasis Fairy 4", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_4)); - locationTable[RC_COLOSSUS_OASIS_FAIRY_5] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_5, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x04, "Oasis Fairy 5", "Oasis Fairy 5", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_5)); - locationTable[RC_COLOSSUS_OASIS_FAIRY_6] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_6, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x05, "Oasis Fairy 6", "Oasis Fairy 6", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_6)); - locationTable[RC_COLOSSUS_OASIS_FAIRY_7] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_7, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x06, "Oasis Fairy 7", "Oasis Fairy 7", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_7)); - locationTable[RC_COLOSSUS_OASIS_FAIRY_8] = Location::Fairy(RC_COLOSSUS_OASIS_FAIRY_8, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x07, "Oasis Fairy 8", "Oasis Fairy 8", RHT_COLOSSUS_OASIS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_OASIS_FAIRY_8)); - - locationTable[RC_ZR_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_ZR_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, 0x0300, "Bean Sprout Fairy 1", "ZR Bean Sprout Fairy 1", RHT_ZR_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BEAN_SPROUT_FAIRY_1)); - locationTable[RC_ZR_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_ZR_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, 0x0301, "Bean Sprout Fairy 2", "ZR Bean Sprout Fairy 2", RHT_ZR_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BEAN_SPROUT_FAIRY_2)); - locationTable[RC_ZR_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_ZR_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, 0x0302, "Bean Sprout Fairy 3", "ZR Bean Sprout Fairy 3", RHT_ZR_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BEAN_SPROUT_FAIRY_3)); - locationTable[RC_KF_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_KF_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, 0x0900, "Bean Sprout Fairy 1", "KF Bean Sprout Fairy 1", RHT_KF_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_SPROUT_FAIRY_1)); - locationTable[RC_KF_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_KF_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, 0x0901, "Bean Sprout Fairy 2", "KF Bean Sprout Fairy 2", RHT_KF_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_SPROUT_FAIRY_2)); - locationTable[RC_KF_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_KF_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, 0x0902, "Bean Sprout Fairy 3", "KF Bean Sprout Fairy 3", RHT_KF_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_SPROUT_FAIRY_3)); - locationTable[RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x0400, "Bean Sprout Near Bridge Fairy 1", "LW Bean Sprout Near Bridge Fairy 1", RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1)); - locationTable[RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x0401, "Bean Sprout Near Bridge Fairy 2", "LW Bean Sprout Near Bridge Fairy 2", RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2)); - locationTable[RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x0402, "Bean Sprout Near Bridge Fairy 3", "LW Bean Sprout Near Bridge Fairy 3", RHT_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3)); - locationTable[RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x1200, "Bean Sprout Near Theatre Fairy 1", "LW Bean Sprout Near Theatre Fairy 1", RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1)); - locationTable[RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x1201, "Bean Sprout Near Theatre Fairy 2", "LW Bean Sprout Near Theatre Fairy 2", RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2)); - locationTable[RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3] = Location::Fairy(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, 0x1202, "Bean Sprout Near Theatre Fairy 3", "LW Bean Sprout Near Theatre Fairy 3", RHT_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3)); - locationTable[RC_LH_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_LH_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, 0x0100, "Bean Sprout Fairy 1", "LH Bean Sprout Fairy 1", RHT_LH_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BEAN_SPROUT_FAIRY_1)); - locationTable[RC_LH_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_LH_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, 0x0101, "Bean Sprout Fairy 2", "LH Bean Sprout Fairy 2", RHT_LH_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BEAN_SPROUT_FAIRY_2)); - locationTable[RC_LH_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_LH_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, 0x0102, "Bean Sprout Fairy 3", "LH Bean Sprout Fairy 3", RHT_LH_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BEAN_SPROUT_FAIRY_3)); - locationTable[RC_GV_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_GV_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, 0x0300, "Bean Sprout Fairy 1", "GV Bean Sprout Fairy 1", RHT_GV_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BEAN_SPROUT_FAIRY_1)); - locationTable[RC_GV_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_GV_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, 0x0301, "Bean Sprout Fairy 2", "GV Bean Sprout Fairy 2", RHT_GV_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BEAN_SPROUT_FAIRY_2)); - locationTable[RC_GV_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_GV_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, 0x0302, "Bean Sprout Fairy 3", "GV Bean Sprout Fairy 3", RHT_GV_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_BEAN_SPROUT_FAIRY_3)); - locationTable[RC_COLOSSUS_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x1800, "Bean Sprout Fairy 1", "Col Bean Sprout Fairy 1", RHT_COLOSSUS_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1)); - locationTable[RC_COLOSSUS_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x1801, "Bean Sprout Fairy 2", "Col Bean Sprout Fairy 2", RHT_COLOSSUS_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2)); - locationTable[RC_COLOSSUS_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, 0x1802, "Bean Sprout Fairy 3", "Col Bean Sprout Fairy 3", RHT_COLOSSUS_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3)); - locationTable[RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, 0x0300, "Bean Sprout Fairy 1", "GY Bean Sprout Fairy 1", RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1)); - locationTable[RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, 0x0301, "Bean Sprout Fairy 2", "GY Bean Sprout Fairy 2", RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2)); - locationTable[RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, 0x0302, "Bean Sprout Fairy 3", "GY Bean Sprout Fairy 3", RHT_GRAVEYARD_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3)); - locationTable[RC_DMC_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_DMC_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 0x0300, "Bean Sprout Fairy 1", "DMC Bean Sprout Fairy 1", RHT_DMC_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BEAN_SPROUT_FAIRY_1)); - locationTable[RC_DMC_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_DMC_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 0x0301, "Bean Sprout Fairy 2", "DMC Bean Sprout Fairy 2", RHT_DMC_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BEAN_SPROUT_FAIRY_2)); - locationTable[RC_DMC_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_DMC_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, 0x0302, "Bean Sprout Fairy 3", "DMC Bean Sprout Fairy 3", RHT_DMC_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_BEAN_SPROUT_FAIRY_3)); - locationTable[RC_DMT_BEAN_SPROUT_FAIRY_1] = Location::Fairy(RC_DMT_BEAN_SPROUT_FAIRY_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0600, "Bean Sprout Fairy 1", "DMT Bean Sprout Fairy 1", RHT_DMT_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BEAN_SPROUT_FAIRY_1)); - locationTable[RC_DMT_BEAN_SPROUT_FAIRY_2] = Location::Fairy(RC_DMT_BEAN_SPROUT_FAIRY_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0601, "Bean Sprout Fairy 2", "DMT Bean Sprout Fairy 2", RHT_DMT_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BEAN_SPROUT_FAIRY_2)); - locationTable[RC_DMT_BEAN_SPROUT_FAIRY_3] = Location::Fairy(RC_DMT_BEAN_SPROUT_FAIRY_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, 0x0602, "Bean Sprout Fairy 3", "DMT Bean Sprout Fairy 3", RHT_DMT_BEAN_SPROUT_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BEAN_SPROUT_FAIRY_3)); - - locationTable[RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -680), "ToT Left Gossip Stone Fairy", "ToT Left Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY)); - locationTable[RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -680), "ToT Left Gossip Stone Big Fairy", "ToT Left Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -615), "ToT Left Center Gossip Stone Fairy", "ToT Left Center Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY)); - locationTable[RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -615), "ToT Left Center Gossip Stone Big Fairy", "ToT Left Center Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -550), "ToT Right Center Gossip Stone Fairy", "ToT Right Center Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY)); - locationTable[RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -550), "ToT Right Center Gossip Stone Big Fairy", "ToT Right Center Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS( 0, -485), "ToT Right Gossip Stone Fairy", "ToT Right Gossip Stone Fairy", RHT_TOT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY)); - locationTable[RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_MARKET, SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, TWO_ACTOR_PARAMS(0x1000, -485), "ToT Right Gossip Stone Big Fairy", "ToT Right Gossip Stone Big Fairy", RHT_TOT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_DMC_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMC_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS( 0, 1656), "Gossip Stone Fairy", "DMC Gossip Stone Fairy", RHT_DMC_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GOSSIP_STONE_FAIRY)); - locationTable[RC_DMC_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMC_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(0x1000, 1656), "Gossip Stone Big Fairy", "DMC Gossip Stone Big Fairy", RHT_DMC_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_DMT_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMT_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS( 0, -3935), "Gossip Stone Fairy", "DMT Gossip Stone Fairy", RHT_DMT_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_GOSSIP_STONE_FAIRY)); - locationTable[RC_DMT_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMT_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(0x1000, -3935), "Gossip Stone Big Fairy", "DMT Gossip Stone Big Fairy", RHT_DMT_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_COLOSSUS_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_COLOSSUS_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS( 0, 1320), "Gossip Stone Fairy", "Col Gossip Stone Fairy", RHT_COLOSSUS_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY)); - locationTable[RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DESERT_COLOSSUS, SCENE_DESERT_COLOSSUS, TWO_ACTOR_PARAMS(0x1000, 1320), "Gossip Stone Big Fairy", "Col Gossip Stone Big Fairy", RHT_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, RCQUEST_VANILLA,RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS( 0, -1520), "Gossip Stone Fairy", "DC Gossip Stone Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY)); - locationTable[RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, RCQUEST_VANILLA,RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(0x1000, -1520), "Gossip Stone Big Fairy", "DC Gossip Stone Big Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS( 0, -916), "MQ Gossip Stone Fairy", "DC MQ Gossip Stone Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY)); - locationTable[RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(0x1000, -916), "MQ Gossip Stone Big Fairy", "DC MQ Gossip Stone Big Fairy", RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_GV_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GV_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS( 0, -2340), "Gossip Stone Fairy", "GV Gossip Stone Fairy", RHT_GV_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_GOSSIP_STONE_FAIRY)); - locationTable[RC_GV_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GV_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(0x1000, -2340), "Gossip Stone Big Fairy", "GV Gossip Stone Big Fairy", RHT_GV_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_GC_MAZE_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GC_MAZE_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS( 0, -1265), "Maze Gossip Stone Fairy", "GC Maze Gossip Stone Fairy", RHT_GC_MAZE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY)); - locationTable[RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(0x1000, -1265), "Maze Gossip Stone Big Fairy", "GC Maze Gossip Stone Big Fairy", RHT_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS( 0, 1496), "Medigoron Gossip Stone Fairy", "GC Medigoron Gossip Stone Fairy", RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY)); - locationTable[RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(0x1000, 1496), "Medigoron Gossip Stone Big Fairy", "GC Medigoron Gossip Stone Big Fairy", RHT_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_GRAVEYARD_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_GRAVEYARD_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS( 0, -75), "Gossip Stone Fairy", "GY Gossip Stone Fairy", RHT_GRAVEYARD_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY)); - locationTable[RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(0x1000, -75), "Gossip Stone Big Fairy", "GY Gossip Stone Big Fairy", RHT_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_HC_MALON_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HC_MALON_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS( 0, 3445), "Malon Gossip Stone Fairy", "HC Malon Gossip Stone Fairy", RHT_HC_MALON_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY)); - locationTable[RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(0x1000, 3445), "Malon Gossip Stone Big Fairy", "HC Malon Gossip Stone Big Fairy", RHT_HC_MALON_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS( 0, 1041), "Rock Wall Gossip Stone Fairy", "HC Rock Wall Gossip Stone Fairy", RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY)); - locationTable[RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(0x1000, 1041), "Rock Wall Gossip Stone Big Fairy", "HC Rock Wall Gossip Stone Big Fairy", RHT_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0xC, 735), "Storms Grotto Gossip Stone Fairy", "HC Storms Grotto Gossip Stone Fairy", RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x100C, 735), "Storms Grotto Gossip Stone Big Fairy", "HC Storms Grotto Gossip Stone Big Fairy", RHT_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS( 0, -2230), "Deku Tree Left Gossip Stone Fairy", "KF Deku Tree Left Gossip Stone Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY)); - locationTable[RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(0x1000, -2230), "Deku Tree Left Gossip Stone Big Fairy", "KF Deku Tree Left Gossip Stone Big Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS( 0, -700), "Deku Tree Right Gossip Stone Fairy", "KF Deku Tree Right Gossip Stone Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY)); - locationTable[RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(0x1000, -700), "Deku Tree Right Gossip Stone Big Fairy", "KF Deku Tree Right Gossip Stone Big Fairy", RHT_KF_DEKU_TREE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_KF_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS( 0, -1223), "Gossip Stone Fairy", "KF Gossip Stone Fairy", RHT_KF_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_GOSSIP_STONE_FAIRY)); - locationTable[RC_KF_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(0x1000, -1223), "Gossip Stone Big Fairy", "KF Gossip Stone Big Fairy", RHT_KF_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x1B, -236), "Storms Gossip Stone Fairy", "KF Storms Gossip Stone Fairy", RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x101B, -236), "Storms Gossip Stone Big Fairy", "KF Storms Gossip Stone Big Fairy", RHT_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_LH_LAB_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LH_LAB_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS( 0, 3212), "Lab Gossip Stone Fairy", "LH Lab Gossip Stone Fairy", RHT_LH_LAB_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY)); - locationTable[RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 3212), "Lab Gossip Stone Big Fairy", "LH Lab Gossip Stone Big Fairy", RHT_LH_LAB_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS( 0, 8395), "Southeast Gossip Stone Fairy", "LH Southeast Gossip Stone Fairy", RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY)); - locationTable[RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 8395), "Southeast Gossip Stone Big Fairy", "LH Southeast Gossip Stone Big Fairy", RHT_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS( 0, 7984), "Southwest Gossip Stone Fairy", "LH Southwest Gossip Stone Fairy", RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY)); - locationTable[RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 7984), "Southwest Gossip Stone Big Fairy", "LH Southwest Gossip Stone Big Fairy", RHT_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_LW_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LW_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS( 0, 2300), "Gossip Stone Fairy", "LW Gossip Stone Fairy", RHT_LW_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GOSSIP_STONE_FAIRY)); - locationTable[RC_LW_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LW_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(0x1000, 2300), "Gossip Stone Big Fairy", "LW Gossip Stone Big Fairy", RHT_LW_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS( 0, 1370), "Maze Lower Gossip Stone Fairy", "SFM Maze Lower Gossip Stone Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY)); - locationTable[RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(0x1000, 1370), "Maze Lower Gossip Stone Big Fairy", "SFM Maze Lower Gossip Stone Big Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS( 0, 740), "Maze Upper Gossip Stone Fairy", "SFM Maze Upper Gossip Stone Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY)); - locationTable[RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(0x1000, 740), "Maze Upper Gossip Stone Big Fairy", "SFM Maze Upper Gossip Stone Big Fairy", RHT_SFM_MAZE_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_SFM_SARIA_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_SFM_SARIA_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS( 0, -2300), "Saria Gossip Stone Fairy", "SFM Saria Gossip Stone Fairy", RHT_SFM_SARIA_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY)); - locationTable[RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_SACRED_FOREST_MEADOW, TWO_ACTOR_PARAMS(0x1000, -2300), "Saria Gossip Stone Big Fairy", "SFM Saria Gossip Stone Big Fairy", RHT_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_ZD_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZD_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS( 0, -1600), "Gossip Stone Fairy", "ZD Gossip Stone Fairy", RHT_ZD_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_GOSSIP_STONE_FAIRY)); - locationTable[RC_ZD_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZD_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(0x1000, -1600), "Gossip Stone Big Fairy", "ZD Gossip Stone Big Fairy", RHT_ZD_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_ZF_FAIRY_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS( 0, 2205), "Fairy Gossip Stone Fairy", "ZF Fairy Gossip Stone Fairy", RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY)); - locationTable[RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(0x1000, 2205), "Fairy Gossip Stone Big Fairy", "ZF Fairy Gossip Stone Big Fairy", RHT_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_ZF_JABU_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZF_JABU_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS( 0, -985), "Jabu Gossip Stone Fairy", "ZF Jabu Gossip Stone Fairy", RHT_ZF_JABU_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY)); - locationTable[RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_FOUNTAIN, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(0x1000, -985), "Jabu Gossip Stone Big Fairy", "ZF Jabu Gossip Stone Big Fairy", RHT_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS( 0, -1070), "Near Grottos Gossip Stone Fairy", "ZR Near Grottos Gossip Stone Fairy", RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY)); - locationTable[RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(0x1000, -1070), "Near Grottos Gossip Stone Big Fairy", "ZR Near Grottos Gossip Stone Big Fairy", RHT_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS( 0, -1650), "Near Domain Gossip Stone Fairy", "ZR Near Domain Gossip Stone Fairy", RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY)); - locationTable[RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(0x1000, -1650), "Near Domain Gossip Stone Big Fairy", "ZR Near Domain Gossip Stone Big Fairy", RHT_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x11, -357), "Cow Grotto Gossip Stone Fairy", "HF Cow Grotto Gossip Stone Fairy", RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1011, -357), "Cow Grotto Gossip Stone Big Fairy", "HF Cow Grotto Gossip Stone Big Fairy", RHT_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x10, -236), "Near Market Gossip Stone Fairy", "HF Near Market Gossip Stone Fairy", RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1010, -236), "Near Market Gossip Stone Big Fairy", "HF Near Market Gossip Stone Big Fairy", RHT_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x14, -236), "Southeast Gossip Stone Fairy", "HF Southeast Gossip Stone Fairy", RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1014, -236), "Southeast Gossip Stone Big Fairy", "HF Southeast Gossip Stone Big Fairy", RHT_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x13, -236), "Open Grotto Gossip Stone Fairy", "HF Open Grotto Gossip Stone Fairy", RHT_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1013, -236), "Open Grotto Gossip Stone Big Fairy", "HF Open Grotto Gossip Stone Big Fairy", RHT_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0xA, -236), "Open Grotto Gossip Stone Fairy", "Kak Open Grotto Gossip Stone Fairy", RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x100A, -236), "Open Grotto Gossip Stone Big Fairy", "Kak Open Grotto Gossip Stone Big Fairy", RHT_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x4, -236), "Open Grotto Gossip Stone Fairy", "ZR Open Grotto Gossip Stone Fairy", RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1004, -236), "Open Grotto Gossip Stone Big Fairy", "ZR Open Grotto Gossip Stone Big Fairy", RHT_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x1A, -236), "Near Shortcuts Gossip Stone Fairy", "LW Near Shortcuts Gossip Stone Fairy", RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x101A, -236), "Near Shortcuts Gossip Stone Big Fairy", "LW Near Shortcuts Gossip Stone Big Fairy", RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x8, -236), "Storms Grotto Gossip Stone Fairy", "DMT Storms Grotto Gossip Stone Fairy", RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1008, -236), "Storms Grotto Gossip Stone Big Fairy", "DMT Storms Grotto Gossip Stone Big Fairy", RHT_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - locationTable[RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY] = Location::Fairy(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS( 0x6, -236), "Upper Grotto Gossip Stone Fairy", "DMC Upper Grotto Gossip Stone Fairy", RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY)); - locationTable[RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG] = Location::Fairy(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1006, -236), "Upper Grotto Gossip Stone Big Fairy", "DMC Upper Grotto Gossip Stone Big Fairy", RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG)); - - locationTable[RC_LH_ISLAND_SUN_FAIRY] = Location::Fairy(RC_LH_ISLAND_SUN_FAIRY, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(0x1000, 7319), "Island Sun's Song Fairy", "Island Sun's Song Fairy", RHT_LH_ISLAND_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_ISLAND_SUN_FAIRY)); - locationTable[RC_HF_POND_STORMS_FAIRY] = Location::Fairy(RC_HF_POND_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(0x1000, 5012), "Pond Song of Storms Fairy", "Pond Song of Storms Fairy", RHT_HF_POND_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_POND_STORMS_FAIRY)); - locationTable[RC_HF_FENCE_GROTTO_STORMS_FAIRY] = Location::Fairy(RC_HF_FENCE_GROTTO_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1000, -308), "Inside Fence Storms Fairy", "Inside Fence Storms Fairy", RHT_HF_FENCE_GROTTO_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FENCE_GROTTO_STORMS_FAIRY)); - locationTable[RC_DMT_FLAG_SUN_FAIRY] = Location::Fairy(RC_DMT_FLAG_SUN_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(0x1000, 464), "Flag Sun's Song Fairy", "Flag Sun's Song Fairy", RHT_DMT_FLAG_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_FLAG_SUN_FAIRY)); - locationTable[RC_DMT_COW_GROTTO_STORMS_FAIRY] = Location::Fairy(RC_DMT_COW_GROTTO_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1000, -311), "Cow Grotto Song of Storms Fairy", "Cow Grotto Song of Storms Fairy", RHT_DMT_COW_GROTTO_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_STORMS_FAIRY)); - locationTable[RC_LW_SHORTCUT_STORMS_FAIRY] = Location::Fairy(RC_LW_SHORTCUT_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(0x1000, -795), "Shortcuts Song of Storms Fairy", "Shortcuts Song of Storms Fairy", RHT_LW_SHORTCUT_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_STORMS_FAIRY)); - locationTable[RC_GF_KITCHEN_SUN_FAIRY] = Location::Fairy(RC_GF_KITCHEN_SUN_FAIRY, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(0x1000, -621), "Kitchen Sun's Song Fairy", "Kitchen Sun's Song Fairy", RHT_GF_KITCHEN_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_SUN_FAIRY)); - locationTable[RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY] = Location::Fairy(RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1000, 741), "Scrub Grotto Sun's Song Fairy", "Scrub Grotto Sun's Song Fairy", RHT_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY)); - locationTable[RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] = Location::Fairy(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_ROYAL_FAMILYS_TOMB, TWO_ACTOR_PARAMS(0x1000, 1476), "Composer's Grave Sun's Song Fairy", "Composer's Grave Sun's Song Fairy", RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY)); - - locationTable[RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY] = Location::Fairy(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1896), "After Boulder Room Sun's Song Fairy", "After Boulder Room Sun's Song Fairy", RHT_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY)); - locationTable[RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY] = Location::Fairy(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -220), "Four Armos Room Sun's Song Fairy", "Four Armos Room Sun's Song Fairy", RHT_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY)); - locationTable[RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, RCQUEST_VANILLA,RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 54), "Beamos Song of Storms Fairy", "Beamos Song of Storms Fairy", RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY)); - locationTable[RC_SHADOW_TEMPLE_PIT_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, RCQUEST_VANILLA,RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 3339), "Pit Room Song of Storms Fairy", "Pit Room Song of Storms Fairy", RHT_SHADOW_TEMPLE_PIT_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY)); - locationTable[RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -127), "Wind Hint Sun's Song Fairy", "Wind Hint Sun's Song Fairy", RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -1531), "Basement Sun's Song Fairy", "Basement Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY)); - locationTable[RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY] = Location::Fairy(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, RCQUEST_VANILLA,RCAREA_ICE_CAVERN, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(0x1000, 1186), "Entrance Song of Storms Fairy", "Ice Cavern Entrance Song of Storms Fairy", RHT_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY)); - locationTable[RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY] = Location::Fairy(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, RCQUEST_VANILLA,RCAREA_GERUDO_TRAINING_GROUND,SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(0x1000, -445), "Entrance Song of Storms Fairy", "GTG Entrance Song of Storms Fairy", RHT_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY)); - locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY] = Location::Fairy(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, RCQUEST_VANILLA,RCAREA_GANONS_CASTLE, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(0x1000, 587), "Spirit Trial Beamos Sun's Song Fairy", "Spirit Trial Beamos Sun's Song Fairy", RHT_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY)); - - locationTable[RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY] = Location::Fairy(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -551), "MQ Lower Loop Stalfos Room Sun's Song Fairy", "MQ Lower Loop Stalfos Room Sun's Song Fairy", RHT_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY)); - locationTable[RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY] = Location::Fairy(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1563), "MQ Lower Loop Behind Iron Knuckle Sun's Song Fairy", "MQ Lower Loop Behind Iron Knuckle Sun's Song Fairy", RHT_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY)); - locationTable[RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY] = Location::Fairy(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -540), "MQ Before Dark Link Pilar Sun's Song Fairy", "MQ Before Dark Link Pilar Sun's Song Fairy", RHT_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY)); - locationTable[RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY] = Location::Fairy(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1501), "MQ Before Dark Link Left Song of Storms Fairy", "MQ Before Dark Link Left Song of Storms Fairy", RHT_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY)); - locationTable[RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY] = Location::Fairy(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -1504), "MQ Before Dark Link Right Sun's Song Fairy", "MQ Before Dark Link Right Sun's Song Fairy", RHT_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY)); - locationTable[RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY] = Location::Fairy(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -220), "MQ Dinalfos Room Sun's Song Fairy", "MQ Dinalfos Room Sun's Song Fairy", RHT_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY)); - locationTable[RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 55), "MQ Beamos Song of Storms Fairy", "MQ Beamos Song of Storms Fairy", RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY)); - locationTable[RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, 3342), "MQ Pit Room Song of Storms Fairy", "MQ Pit Room Song of Storms Fairy", RHT_SHADOW_TEMPLE_PIT_STORM_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY)); - locationTable[RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -127), "MQ Wind Hint Sun's Song Fairy", "MQ Wind Hint Sun's Song Fairy", RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -437), "MQ East Cell Sun's Song Fairy", "MQ East Cell Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -1458), "MQ Basement Sun's Song Fairy", "MQ Basement Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY)); - - // Freestanding Hearts and Rupees - locationTable[RC_KF_BOULDER_RUPEE_2] = Location::Collectable(RC_KF_BOULDER_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-712, 1857), "Boulder Maze Second Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_2)); - locationTable[RC_KF_BOULDER_RUPEE_1] = Location::Collectable(RC_KF_BOULDER_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-1009, 1556), "Boulder Maze First Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_1)); - locationTable[RC_KF_BRIDGE_RUPEE] = Location::Collectable(RC_KF_BRIDGE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(2, -45), "Bridge Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BRIDGE_RUPEE)); - locationTable[RC_KF_BEHIND_MIDOS_RUPEE] = Location::Collectable(RC_KF_BEHIND_MIDOS_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-364, -783), "Behind Mido's House Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEHIND_MIDOS_RUPEE)); - locationTable[RC_KF_SARIAS_ROOF_WEST_HEART] = Location::Collectable(RC_KF_SARIAS_ROOF_WEST_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(451, 810), "Saria's Roof West Heart", RHT_KOKIRI_FOREST_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_ROOF_WEST_HEART)); - locationTable[RC_KF_SARIAS_ROOF_EAST_HEART] = Location::Collectable(RC_KF_SARIAS_ROOF_EAST_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(567, 819), "Saria's Roof East Heart", RHT_KOKIRI_FOREST_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_ROOF_EAST_HEART)); - locationTable[RC_KF_SARIAS_ROOF_NORTH_HEART] = Location::Collectable(RC_KF_SARIAS_ROOF_NORTH_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(509, 725), "Saria's Roof North Heart", RHT_KOKIRI_FOREST_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_ROOF_NORTH_HEART)); - locationTable[RC_KF_SOUTH_GRASS_WEST_RUPEE] = Location::Collectable(RC_KF_SOUTH_GRASS_WEST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-537, 194), "South Grass West Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE)); - locationTable[RC_KF_NORTH_GRASS_WEST_RUPEE] = Location::Collectable(RC_KF_NORTH_GRASS_WEST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(35, -418), "North Grass West Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_NORTH_GRASS_WEST_RUPEE)); - locationTable[RC_KF_NORTH_GRASS_EAST_RUPEE] = Location::Collectable(RC_KF_NORTH_GRASS_EAST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(107, -418), "North Grass East Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_NORTH_GRASS_EAST_RUPEE)); - locationTable[RC_KF_SOUTH_GRASS_EAST_RUPEE] = Location::Collectable(RC_KF_SOUTH_GRASS_EAST_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-459, 181), "South Grass East Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE)); - locationTable[RC_KF_SARIAS_TOP_LEFT_HEART] = Location::Collectable(RC_KF_SARIAS_TOP_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, TWO_ACTOR_PARAMS(45, -52), "Saria's House Top Left Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_TOP_LEFT_HEART)); - locationTable[RC_KF_SARIAS_TOP_RIGHT_HEART] = Location::Collectable(RC_KF_SARIAS_TOP_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, TWO_ACTOR_PARAMS(46, 56), "Saria's House Top Right Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_TOP_RIGHT_HEART)); - locationTable[RC_KF_SARIAS_BOTTOM_LEFT_HEART] = Location::Collectable(RC_KF_SARIAS_BOTTOM_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, TWO_ACTOR_PARAMS(-46, -51), "Saria's House Bottom Left Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART)); - locationTable[RC_KF_SARIAS_BOTTOM_RIGHT_HEART] = Location::Collectable(RC_KF_SARIAS_BOTTOM_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SARIAS_HOUSE, TWO_ACTOR_PARAMS(-46, 57), "Saria's House Bottom Right Heart", RHT_SARIAS_HOUSE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART)); - - locationTable[RC_KF_BEAN_RUPEE_1] = Location::Collectable(RC_KF_BEAN_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1269, -528), "Bean Platform Rupee 1", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_1)); - locationTable[RC_KF_BEAN_RUPEE_2] = Location::Collectable(RC_KF_BEAN_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1269, -567), "Bean Platform Rupee 2", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_2)); - locationTable[RC_KF_BEAN_RUPEE_3] = Location::Collectable(RC_KF_BEAN_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1304, -588), "Bean Platform Rupee 3", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_3)); - locationTable[RC_KF_BEAN_RUPEE_4] = Location::Collectable(RC_KF_BEAN_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1338, -567), "Bean Platform Rupee 4", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_4)); - locationTable[RC_KF_BEAN_RUPEE_5] = Location::Collectable(RC_KF_BEAN_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1338, -528), "Bean Platform Rupee 5", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_5)); - locationTable[RC_KF_BEAN_RUPEE_6] = Location::Collectable(RC_KF_BEAN_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1304, -508), "Bean Platform Rupee 6", RHT_KOKIRI_FOREST_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RUPEE_6)); - locationTable[RC_KF_BEAN_RED_RUPEE] = Location::Collectable(RC_KF_BEAN_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(1304, -548), "Bean Platform Red Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BEAN_RED_RUPEE)); - - locationTable[RC_LW_BOULDER_RUPEE] = Location::Collectable(RC_LW_BOULDER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1720, -2510), "Boulder Rupee", RHT_LOST_WOODS_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_BOULDER_RUPEE)); - locationTable[RC_LW_SHORTCUT_RUPEE_1] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2215, -850), "Underwater Shortcut Rupee 1", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_1)); - locationTable[RC_LW_SHORTCUT_RUPEE_2] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2164, -850), "Underwater Shortcut Rupee 2", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_2)); - locationTable[RC_LW_SHORTCUT_RUPEE_3] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2113, -850), "Underwater Shortcut Rupee 3", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_3)); - locationTable[RC_LW_SHORTCUT_RUPEE_4] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2061, -853), "Underwater Shortcut Rupee 4", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_4)); - locationTable[RC_LW_SHORTCUT_RUPEE_5] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2194, -895), "Underwater Shortcut Rupee 5", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_5)); - locationTable[RC_LW_SHORTCUT_RUPEE_6] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2156, -937), "Underwater Shortcut Rupee 6", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_6)); - locationTable[RC_LW_SHORTCUT_RUPEE_7] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_7, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2193, -813), "Underwater Shortcut Rupee 7", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_7)); - locationTable[RC_LW_SHORTCUT_RUPEE_8] = Location::Collectable(RC_LW_SHORTCUT_RUPEE_8, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(2153, -779), "Underwater Shortcut Rupee 8", RHT_LOST_WOODS_SHORTCUT_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_RUPEE_8)); - - locationTable[RC_LH_FRONT_RUPEE] = Location::Collectable(RC_LH_FRONT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-940, 3968), "Underwater Front Rupee", RHT_LAKE_HYLIA_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_FRONT_RUPEE)); - locationTable[RC_LH_MIDDLE_RUPEE] = Location::Collectable(RC_LH_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-868, 4090), "Underwater Middle Rupee", RHT_LAKE_HYLIA_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_MIDDLE_RUPEE)); - locationTable[RC_LH_BACK_RUPEE] = Location::Collectable(RC_LH_BACK_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-861, 4212), "Underwater Back Rupee", RHT_LAKE_HYLIA_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_BACK_RUPEE)); - locationTable[RC_LH_LAB_FRONT_RUPEE] = Location::Collectable(RC_LH_LAB_FRONT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(68, -207), "Lab Front Rupee", RHT_LABORATORY_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_FRONT_RUPEE)); - locationTable[RC_LH_LAB_LEFT_RUPEE] = Location::Collectable(RC_LH_LAB_LEFT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(-52, -32), "Lab Left Rupee", RHT_LABORATORY_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_LEFT_RUPEE)); - locationTable[RC_LH_LAB_RIGHT_RUPEE] = Location::Collectable(RC_LH_LAB_RIGHT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(-169, -124), "Lab Right Rupee", RHT_LABORATORY_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_RIGHT_RUPEE)); - - locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_1] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(385, -2766), "Dampe's Grave Rupee 1", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1)); - locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_2] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(528, -3216), "Dampe's Grave Rupee 2", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2)); - locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_3] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(753, -4828), "Dampe's Grave Rupee 3", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3)); - locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_4] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(570, -5599), "Dampe's Grave Rupee 4", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4)); - locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_5] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(1461, -5736), "Dampe's Grave Rupee 5", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5)); - locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_6] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2376, -4647), "Dampe's Grave Rupee 6", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6)); - locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_7] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_7, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(2573, -3758), "Dampe's Grave Rupee 7", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7)); - locationTable[RC_GRAVEYARD_DAMPE_RACE_RUPEE_8] = Location::Collectable(RC_GRAVEYARD_DAMPE_RACE_RUPEE_8, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GRAVEYARD, ACTOR_EN_ITEM00, SCENE_WINDMILL_AND_DAMPES_GRAVE, TWO_ACTOR_PARAMS(1511, -3118), "Dampe's Grave Rupee 8", RHT_DAMPES_GRAVE_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8)); - - locationTable[RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-42, 880), "Octorok Grotto Front Left Blue Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE)); - locationTable[RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(58, 803), "Octorok Grotto Back Blue Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE)); - locationTable[RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(90, 910), "Octorok Grotto Front Right Blue Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE)); - locationTable[RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-68, 959), "Octorok Grotto Front Left Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE)); - locationTable[RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(132, 961), "Octorok Grotto Front Right Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE)); - locationTable[RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-38, 768), "Octorok Grotto Back Left Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE)); - locationTable[RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(121, 784), "Octorok Grotto Back Right Green Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE)); - locationTable[RC_GV_OCTOROK_GROTTO_RED_RUPEE] = Location::Collectable(RC_GV_OCTOROK_GROTTO_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_GERUDO_VALLEY, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(32, 852), "Octorok Grotto Red Rupee", RHT_GERUDO_VALLEY_GROTTO_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE)); - - locationTable[RC_DMT_RED_RUPEE] = Location::Collectable(RC_DMT_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-625, -55), "Red Rupee Under Boulder", RHT_DEATH_MOUNTAIN_TRAIL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_RED_RUPEE)); - locationTable[RC_DMT_BLUE_RUPEE] = Location::Collectable(RC_DMT_BLUE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(-1060, -51), "Blue Rupee Under Boulder", RHT_DEATH_MOUNTAIN_TRAIL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_BLUE_RUPEE)); - locationTable[RC_DMT_COW_GROTTO_LEFT_HEART] = Location::Collectable(RC_DMT_COW_GROTTO_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2287, -412), "Cow Grotto Left Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_LEFT_HEART)); - locationTable[RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART] = Location::Collectable(RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2371, -532), "Cow Grotto Middle Left Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART)); - locationTable[RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART] = Location::Collectable(RC_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2449, -534), "Cow Grotto Middle Right Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART)); - locationTable[RC_DMT_COW_GROTTO_RIGHT_HEART] = Location::Collectable(RC_DMT_COW_GROTTO_RIGHT_HEART, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2569, -432), "Cow Grotto Right Heart", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RIGHT_HEART)); - locationTable[RC_DMT_COW_GROTTO_RUPEE_1] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2390, -100), "Cow Grotto Rupee 1", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_1)); - locationTable[RC_DMT_COW_GROTTO_RUPEE_2] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2390, -139), "Cow Grotto Rupee 2", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_2)); - locationTable[RC_DMT_COW_GROTTO_RUPEE_3] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2425, -160), "Cow Grotto Rupee 3", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_3)); - locationTable[RC_DMT_COW_GROTTO_RUPEE_4] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2459, -139), "Cow Grotto Rupee 4", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_4)); - locationTable[RC_DMT_COW_GROTTO_RUPEE_5] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2459, -100), "Cow Grotto Rupee 5", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_5)); - locationTable[RC_DMT_COW_GROTTO_RUPEE_6] = Location::Collectable(RC_DMT_COW_GROTTO_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2425, -80), "Cow Grotto Rupee 6", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RUPEE_6)); - locationTable[RC_DMT_COW_GROTTO_RED_RUPEE] = Location::Collectable(RC_DMT_COW_GROTTO_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_ITEM00, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2425, -120), "Cow Grotto Red Rupee", RHT_DEATH_MOUNTAIN_TRAIL_GROTTO_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_RED_RUPEE)); - - locationTable[RC_DMC_NEAR_PLATFORM_RED_RUPEE] = Location::Collectable(RC_DMC_NEAR_PLATFORM_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(675, -718), "Near Warp Platform Red Rupee", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE)); - locationTable[RC_DMC_MIDDLE_PLATFORM_RED_RUPEE] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1117, -185), "Middle Platform Red Rupee", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE)); - locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1117, -248), "Middle Platform Blue Rupee 1", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1)); - locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1116, -128), "Middle Platform Blue Rupee 2", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2)); - locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1159, -162), "Middle Platform Blue Rupee 3", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3)); - locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1158, -227), "Middle Platform Blue Rupee 4", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4)); - locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1078, -226), "Middle Platform Blue Rupee 5", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5)); - locationTable[RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6] = Location::Collectable(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1078, -164), "Middle Platform Blue Rupee 6", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6)); - locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1087, 454), "Distant Platform Rupee 1", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1)); - locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1087, 415), "Distant Platform Rupee 2", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2)); - locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1122, 395), "Distant Platform Rupee 3", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3)); - locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1156, 415), "Distant Platform Rupee 4", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4)); - locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1156, 454), "Distant Platform Rupee 5", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5)); - locationTable[RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1122, 475), "Distant Platform Rupee 6", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6)); - locationTable[RC_DMC_DISTANT_PLATFORM_RED_RUPEE] = Location::Collectable(RC_DMC_DISTANT_PLATFORM_RED_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(1122, 435), "Distant Platform Red Rupee", RHT_DEATH_MOUNTAIN_CRATER_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE)); - - locationTable[RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(4216, -1464), "Beneath Domain Red Left Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE)); - locationTable[RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(4171, -1436), "Beneath Domain Red Middle Left Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE)); - locationTable[RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(4171, -1376), "Beneath Domain Red Middle Right Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE)); - locationTable[RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE] = Location::Collectable(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(4224, -1339), "Beneath Domain Red Right Rupee", RHT_ZORAS_RIVER_WATERFALL_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE)); - - locationTable[RC_ZF_BOTTOM_NORTH_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTH_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(68, -166), "Bottom North Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE)); - locationTable[RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(172, -35), "Bottom Northeast Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE)); - locationTable[RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(137, 130), "Bottom Southeast Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE)); - locationTable[RC_ZF_BOTTOM_SOUTH_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTH_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-76, 172), "Bottom South Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE)); - locationTable[RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-207, 47), "Bottom Southwest Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE)); - locationTable[RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-173, -132), "Bottom Northwest Inner Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE)); - locationTable[RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(242, -576), "Bottom North Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE)); - locationTable[RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(540, -124), "Bottom Northeast Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE)); - locationTable[RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(397, 318), "Bottom Southeast Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE)); - locationTable[RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-166, 428), "Bottom South Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE)); - locationTable[RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-574, 163), "Bottom Southwest Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE)); - locationTable[RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-464, -389), "Bottom Northwest Middle Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE)); - locationTable[RC_ZF_BOTTOM_NORTH_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTH_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(353, -934), "Bottom North Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE)); - locationTable[RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(1032, -254), "Bottom Northeast Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE)); - locationTable[RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(603, 466), "Bottom Southeast Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE)); - locationTable[RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTH_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-227, 696), "Bottom South Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE)); - locationTable[RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-847, 206), "Bottom Southwest Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE)); - locationTable[RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE] = Location::Collectable(RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ZORAS_FOUNTAIN, TWO_ACTOR_PARAMS(-857, -654), "Bottom Northwest Outer Rupee", RHT_ZORAS_FOUNTAIN_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE)); - - locationTable[RC_DEKU_TREE_LOBBY_LOWER_HEART] = Location::Collectable(RC_DEKU_TREE_LOBBY_LOWER_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-25, -81), "Lobby Lower Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART)); - locationTable[RC_DEKU_TREE_LOBBY_UPPER_HEART] = Location::Collectable(RC_DEKU_TREE_LOBBY_UPPER_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(87, -16), "Lobby Upper Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART)); - locationTable[RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART] = Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-885, -185), "Final Room Left Front Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART)); - locationTable[RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART] = Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-820, -76), "Final Room Left Back Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART)); - locationTable[RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART] = Location::Collectable(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-354, -206), "Final Room Right Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART)); - - locationTable[RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4266, -1575), "Lower Lizalfos Room Lavafall Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART)); - locationTable[RC_DODONGOS_CAVERN_BLADE_ROOM_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2039, -317), "Blade Room Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART)); - locationTable[RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3553, -1962), "Upper Lizalfos Room Left Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART)); - locationTable[RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3580, -2004), "Upper Lizalfos Room Right Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART)); - - locationTable[RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1124, -2855), "West Courtyard Right Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART)); - locationTable[RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1165, -2788), "West Courtyard Left Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART)); - locationTable[RC_FOREST_TEMPLE_WELL_WEST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_WELL_WEST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(307, -1734), "Well East Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART)); - locationTable[RC_FOREST_TEMPLE_WELL_EAST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_WELL_EAST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(251, -1735), "Well West Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART)); - - locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3476, -359), "Fire Pillar Room Left Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART)); - locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3476, -295), "Fire Pillar Room Right Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART)); - locationTable[RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3526, -339), "Fire Pillar Room Back Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART)); - locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1753, -136), "East Central Room Left Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART)); - locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1813, -37), "East Central Room Right Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART)); - locationTable[RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART] = Location::Collectable(RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1783, -91), "East Central Room Middle Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART)); - locationTable[RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(862, -169), "Fire Wall Chase East Pillar Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART)); - locationTable[RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(603, -190), "Fire Wall Chase West Pillar Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART)); - locationTable[RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1381, -1120), "Fire Wall Chase Exit Platform Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART)); - - locationTable[RC_WATER_TEMPLE_RIVER_HEART_1] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_1, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2781, -2515), "River Heart 1", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_1)); - locationTable[RC_WATER_TEMPLE_RIVER_HEART_2] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_2, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2528, -2727), "River Heart 2", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_2)); - locationTable[RC_WATER_TEMPLE_RIVER_HEART_3] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_3, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2436, -3348), "River Heart 3", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_3)); - locationTable[RC_WATER_TEMPLE_RIVER_HEART_4] = Location::Collectable(RC_WATER_TEMPLE_RIVER_HEART_4, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2021, -2937), "River Heart 4", RHT_WATER_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_RIVER_HEART_4)); - - locationTable[RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5676, 1565), "Invisible Blades Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART)); - locationTable[RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5695, 1589), "Invisible Blades Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART)); - locationTable[RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3971, -1716), "Scarecrow Near Ship North Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART)); - locationTable[RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3970, -1560), "Scarecrow Near Ship South Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART)); - locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3471, -884), "After Ship Upper Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART)); - locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3473, -927), "After Ship Upper Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART)); - locationTable[RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3164, -646), "After Ship Lower Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART)); - - locationTable[RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(708, 227), "Adult Climb Left Heart", RHT_SPIRIT_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART)); - locationTable[RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(661, 227), "Adult Climb Right Heart", RHT_SPIRIT_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART)); - - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-67, -748), "Basement Platform Left Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-19, -828), "Basement Platform Back Left Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(47, -805), "Basement Platform Middle Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(94, -762), "Basement Platform Back Right Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE)); - locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(85, -710), "Basement Platform Right Rupee", RHT_BOTTOM_OF_THE_WELL_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE)); - locationTable[RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-1947, -625), "Coffin Room Front Left Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART)); - locationTable[RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-2144, -859), "Coffin Room Middle Right Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART)); - - locationTable[RC_ICE_CAVERN_LOBBY_RUPEE] = Location::Collectable(RC_ICE_CAVERN_LOBBY_RUPEE, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-105, 854), "Lobby Rupee", RHT_ICE_CAVERN_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_LOBBY_RUPEE)); - locationTable[RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART] = Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1171, -2258), "Map Room Left Heart", RHT_ICE_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART)); - locationTable[RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART] = Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1212, -2213), "Map Room Middle Heart", RHT_ICE_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART)); - locationTable[RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART] = Location::Collectable(RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1166, -2173), "Map Room Right Heart", RHT_ICE_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART)); - locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1] = Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1699, -697), "Sliding Block Room Rupee 1", RHT_ICE_CAVERN_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1)); - locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2] = Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1648, -715), "Sliding Block Room Rupee 2", RHT_ICE_CAVERN_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2)); - locationTable[RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3] = Location::Collectable(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1648, -677), "Sliding Block Room Rupee 3", RHT_ICE_CAVERN_RUPEE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3)); - - locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART] = Location::Collectable(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1486, 204), "Beamos South Heart", RHT_GERUDO_TRAINING_GROUNDS_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART)); - locationTable[RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART] = Location::Collectable(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1858, -183), "Beamos East Heart", RHT_GERUDO_TRAINING_GROUNDS_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART)); - - locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1] = Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1855, -3953), "Shadow Trial Heart 1", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1)); - locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2] = Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1844, -4038), "Shadow Trial Heart 2", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2)); - locationTable[RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3] = Location::Collectable(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1827, -4106), "Shadow Trial Heart 3", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3)); - locationTable[RC_GANONS_CASTLE_FIRE_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1636, -3069), "Fire Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART)); - locationTable[RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, RCQUEST_VANILLA, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-517, 592), "Spirit Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART)); - - locationTable[RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1128, 1571), "MQ Compass Room Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART)); - locationTable[RC_DEKU_TREE_MQ_DEKU_BABA_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_DEKU_BABA_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-594, 840), "MQ Deku Baba Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART)); - locationTable[RC_DEKU_TREE_MQ_LOBBY_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_LOBBY_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-22, -88), "MQ Lobby Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_HEART)); - locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1165, 325), "MQ Slingshot Room Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART)); - locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-885, -185), "MQ Final Room Left Front Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART)); - locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-820, -76), "MQ Final Room Left Back Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART)); - locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART] = Location::Collectable(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-354, -206), "MQ Final Room Right Heart", RHT_DEKU_TREE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART)); - - locationTable[RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(4266, -1575), "MQ Lizalfos Room Lavafall Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART)); - locationTable[RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1955, -596), "MQ Torch Room Invisible Heart", RHT_DODONGOS_CAVERN_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART)); - - locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-390, -1695), "MQ Lift Room Underwater Rupee 1", RHT_JABU_JABU_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1)); - locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-487, -1701), "MQ Lift Room Underwater Rupee 2", RHT_JABU_JABU_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2)); - locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-549, -1709), "MQ Lift Room Underwater Rupee 3", RHT_JABU_JABU_RUPEE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3)); - locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-217, -1620), "MQ Lift Room Heart 1", RHT_JABU_JABU_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1)); - locationTable[RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2] = Location::Collectable(RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-206, -1797), "MQ Lift Room Heart 2", RHT_JABU_JABU_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2)); - - locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1124, -2855), "MQ West Courtyard Right Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART)); - locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1157, -2798), "MQ West Courtyard Middle Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART)); - locationTable[RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(-1184, -2744), "MQ West Courtyard Left Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART)); - locationTable[RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(115, -1755), "MQ Well Middle Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART)); - locationTable[RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(15, -1755), "MQ Well West Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART)); - locationTable[RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART] = Location::Collectable(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(215, -1755), "MQ Well East Heart", RHT_FOREST_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART)); - - locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3476, -331), "MQ Fire Pillar Room Left Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART)); - locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART] = Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3502, 320), "MQ Fire Pillar Room Right Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART)); - locationTable[RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART] = Location::Collectable(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(3307, 180), "MQ Fire Pillar Room Lower Heart", RHT_FIRE_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART)); - - locationTable[RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5676, 1565), "MQ Invisible Blades Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART)); - locationTable[RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5695, 1589), "MQ Invisible Blades Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART)); - locationTable[RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3971, -1716), "MQ Scarecrow Near Ship North Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART)); - locationTable[RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3970, -1560), "MQ Scarecrow Near Ship South Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART)); - locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3471, -884), "MQ After Ship Upper Left Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART)); - locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3473, -927), "MQ After Ship Upper Right Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART)); - locationTable[RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART] = Location::Collectable(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(-3164, -646), "MQ After Ship Lower Heart", RHT_SHADOW_TEMPLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART)); - - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1151, -535), "MQ Child Early Left Heart", RHT_SPIRIT_TEMPLE_MQ_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART)); - locationTable[RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART] = Location::Collectable(RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-976, -535), "MQ Child Early Right Heart", RHT_SPIRIT_TEMPLE_MQ_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART)); - - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-1945, -863), "MQ Coffin Room Front Right Invisible Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-83, -350), "MQ Bomb Alcove Left Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-83, -274), "MQ Bomb Alcove Right Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-2143, -621), "MQ Coffin Room Middle Left Invisible Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1083, -1174), "MQ Basement Hallway Front Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1044, -1223), "MQ Basement Hallway Left Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART)); - locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART] = Location::Collectable(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1114, -1223), "MQ Basement Hallway Right Heart", RHT_BOTTOM_OF_THE_WELL_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART)); - - locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1743, -528), "MQ Water Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART)); - locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2506, -1096), "MQ Light Trial Right Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART)); - locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2655, -549), "MQ Light Trial Left Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART)); - // Gossip Stones locationTable[RC_DMC_GOSSIP_STONE] = Location::HintStone(RC_DMC_GOSSIP_STONE, RCQUEST_BOTH, SCENE_DEATH_MOUNTAIN_CRATER, 14341, "Gossip Stone"); locationTable[RC_DMT_GOSSIP_STONE] = Location::HintStone(RC_DMT_GOSSIP_STONE, RCQUEST_BOTH, SCENE_DEATH_MOUNTAIN_TRAIL, 14340, "Gossip Stone"); @@ -2121,10 +1059,14 @@ void Rando::StaticData::InitLocationTable() { // // Init locationNameToEnum locationNameToEnum["Invalid Location"] = RC_UNKNOWN_CHECK; locationNameToEnum["Link's Pocket"] = RC_LINKS_POCKET; +} +void Rando::StaticData::InitHashMaps() { for (auto& location : locationTable) { locationNameToEnum[location.GetName()] = location.GetRandomizerCheck(); - CheckFromActorMultimap.emplace(std::make_tuple((int16_t)location.GetActorID(), (int16_t)location.GetScene(), location.GetActorParams()), location.GetRandomizerCheck()); + CheckFromActorMultimap.emplace( + std::make_tuple((int16_t)location.GetActorID(), (int16_t)location.GetScene(), location.GetActorParams()), + location.GetRandomizerCheck()); } } diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 4a516d72f..852fe3841 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -48,6 +48,11 @@ class StaticData { static std::vector GetOverworldFishLocations(); static std::vector GetOverworldPotLocations(); static std::vector GetOverworldFairyLocations(); + static void RegisterFishLocations(); + static void RegisterFairyLocations(); + static void RegisterPotLocations(); + static void RegisterFreestandingLocations(); + static void InitHashMaps(); static std::array, 17> randomizerFishingPondFish; static std::unordered_map randomizerGrottoFishMap; static std::vector oldVerHintOrder; diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index d128c0eba..bca2693e5 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -393,7 +393,6 @@ OTRGlobals::OTRGlobals() { gRandoContext = Rando::Context::CreateInstance(); Rando::Settings::GetInstance()->AssignContext(gRandoContext); Rando::StaticData::InitItemTable();//RANDOTODO make this not rely on context's logic so it can be initialised in InitStaticData - gRandoContext->AddExcludedOptions(); Rando::Settings::GetInstance()->CreateOptions(); gRandomizer = std::make_shared(); @@ -1166,6 +1165,9 @@ extern "C" void InitOTR() { SohGui::SetupGuiElements(); ShipInit::InitAll(); + + Rando::StaticData::InitHashMaps(); + OTRGlobals::Instance->gRandoContext->AddExcludedOptions(); AudioCollection::Instance = new AudioCollection(); ActorDB::Instance = new ActorDB(); #ifdef __APPLE__ From 8f3711f008003f9e67f5c01556c74a81da5098e4 Mon Sep 17 00:00:00 2001 From: aMannus Date: Sat, 8 Feb 2025 19:08:52 +0100 Subject: [PATCH 26/68] simplify pause menu link (#5013) --- soh/soh/Enhancements/presets.h | 11 - soh/soh/SohGui/SohMenuBar.cpp | 47 +---- soh/soh/config/ConfigMigrators.h | 4 - soh/src/code/z_kaleido_setup.c | 4 +- soh/src/code/z_player_lib.c | 190 ++---------------- .../ovl_kaleido_scope/z_kaleido_equipment.c | 46 +---- .../ovl_kaleido_scope/z_kaleido_scope_PAL.c | 2 +- 7 files changed, 21 insertions(+), 283 deletions(-) diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index b7b7100b9..a0b7e6c24 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -153,8 +153,6 @@ const std::vector enhancementsCvars = { CVAR_ENHANCEMENT("InstantScarecrow"), CVAR_ENHANCEMENT("BlueFireArrows"), CVAR_ENHANCEMENT("SunlightArrows"), - CVAR_ENHANCEMENT("PauseLiveLinkRotation"), - CVAR_ENHANCEMENT("PauseLiveLink"), CVAR_ENHANCEMENT("MinFrameCount"), CVAR_ENHANCEMENT("NewDrops"), CVAR_ENHANCEMENT("DisableBlackBars"), @@ -240,7 +238,6 @@ const std::vector enhancementsCvars = { CVAR_ENHANCEMENT("SceneSpecificDirtPathFix"), CVAR_Z_FIGHTING_MODE, CVAR_ENHANCEMENT("AuthenticLogo"), - CVAR_ENHANCEMENT("PauseLiveLinkRotationSpeed"), CVAR_ENHANCEMENT("BowReticle"), CVAR_ENHANCEMENT("BoomerangFirstPerson"), CVAR_ENHANCEMENT("BoomerangReticle"), @@ -617,9 +614,6 @@ const std::vector vanillaPlusPresetEntries = { PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), - // Pause link animation (0 to 16) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PauseLiveLink"), 1), - // Dynamic Wallet Icon PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DynamicWalletIcon"), 1), // Always show dungeon entrances @@ -692,9 +686,6 @@ const std::vector enhancedPresetEntries = { PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), - // Pause link animation (0 to 16) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PauseLiveLink"), 1), - // Dynamic Wallet Icon PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DynamicWalletIcon"), 1), // Always show dungeon entrances @@ -951,8 +942,6 @@ const std::vector randomizerPresetEntries = { // Color Temple of Time's Medallions PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ToTMedallionsColors"), 1), - // Pause link animation (0 to 16) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PauseLiveLink"), 16), // Frames to wait PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinFrameCount"), 200), diff --git a/soh/soh/SohGui/SohMenuBar.cpp b/soh/soh/SohGui/SohMenuBar.cpp index f1c86bc69..0c974f599 100644 --- a/soh/soh/SohGui/SohMenuBar.cpp +++ b/soh/soh/SohGui/SohMenuBar.cpp @@ -1335,52 +1335,7 @@ void DrawEnhancementsMenu() { UIWidgets::Spacer(0); - if (ImGui::BeginMenu("Animated Link in Pause Menu")) { - ImGui::Text("Rotation"); - UIWidgets::EnhancementRadioButton("Disabled", CVAR_ENHANCEMENT("PauseLiveLinkRotation"), 0); - UIWidgets::EnhancementRadioButton("Rotate Link with D-pad", CVAR_ENHANCEMENT("PauseLiveLinkRotation"), 1); - UIWidgets::Tooltip("Allow you to rotate Link on the Equipment menu with the D-pad\nUse D-pad Up or D-pad Down to reset Link's rotation"); - UIWidgets::EnhancementRadioButton("Rotate Link with C-buttons", CVAR_ENHANCEMENT("PauseLiveLinkRotation"), 2); - UIWidgets::Tooltip("Allow you to rotate Link on the Equipment menu with the C-buttons\nUse C-Up or C-Down to reset Link's rotation"); - UIWidgets::EnhancementRadioButton("Rotate Link with Right Stick", CVAR_ENHANCEMENT("PauseLiveLinkRotation"), 3); - UIWidgets::Tooltip("Allow you to rotate Link on the Equipment menu with the Right Stick\nYou can zoom in by pointing up and reset Link's rotation by pointing down"); - if (CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLinkRotation"), 0) != 0) { - UIWidgets::EnhancementSliderInt("Rotation Speed: %d", "##MinRotationSpeed", CVAR_ENHANCEMENT("PauseLiveLinkRotationSpeed"), 1, 20, "", 1); - } - UIWidgets::PaddedSeparator(); - ImGui::Text("Static loop"); - UIWidgets::EnhancementRadioButton("Disabled", CVAR_ENHANCEMENT("PauseLiveLink"), 0); - UIWidgets::EnhancementRadioButton("Idle (standing)", CVAR_ENHANCEMENT("PauseLiveLink"), 1); - UIWidgets::EnhancementRadioButton("Idle (look around)", CVAR_ENHANCEMENT("PauseLiveLink"), 2); - UIWidgets::EnhancementRadioButton("Idle (belt)", CVAR_ENHANCEMENT("PauseLiveLink"), 3); - UIWidgets::EnhancementRadioButton("Idle (shield)", CVAR_ENHANCEMENT("PauseLiveLink"), 4); - UIWidgets::EnhancementRadioButton("Idle (test sword)", CVAR_ENHANCEMENT("PauseLiveLink"), 5); - UIWidgets::EnhancementRadioButton("Idle (yawn)", CVAR_ENHANCEMENT("PauseLiveLink"), 6); - UIWidgets::EnhancementRadioButton("Battle Stance", CVAR_ENHANCEMENT("PauseLiveLink"), 7); - UIWidgets::EnhancementRadioButton("Walking (no shield)", CVAR_ENHANCEMENT("PauseLiveLink"), 8); - UIWidgets::EnhancementRadioButton("Walking (holding shield)", CVAR_ENHANCEMENT("PauseLiveLink"), 9); - UIWidgets::EnhancementRadioButton("Running (no shield)", CVAR_ENHANCEMENT("PauseLiveLink"), 10); - UIWidgets::EnhancementRadioButton("Running (holding shield)", CVAR_ENHANCEMENT("PauseLiveLink"), 11); - UIWidgets::EnhancementRadioButton("Hand on hip", CVAR_ENHANCEMENT("PauseLiveLink"), 12); - UIWidgets::EnhancementRadioButton("Spin attack charge", CVAR_ENHANCEMENT("PauseLiveLink"), 13); - UIWidgets::EnhancementRadioButton("Look at hand", CVAR_ENHANCEMENT("PauseLiveLink"), 14); - UIWidgets::PaddedSeparator(); - ImGui::Text("Randomize"); - UIWidgets::EnhancementRadioButton("Random", CVAR_ENHANCEMENT("PauseLiveLink"), 15); - UIWidgets::Tooltip("Randomize the animation played each time you open the menu"); - UIWidgets::EnhancementRadioButton("Random cycle", CVAR_ENHANCEMENT("PauseLiveLink"), 16); - UIWidgets::Tooltip("Randomize the animation played on the menu after a certain time"); - UIWidgets::EnhancementRadioButton("Random cycle (Idle)", CVAR_ENHANCEMENT("PauseLiveLink"), 17); - UIWidgets::Tooltip("Randomize the animation played on the menu after a certain time (Idle animations only)"); - if (CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLink"), 0) >= 16) { - UIWidgets::EnhancementSliderInt("Frame to wait: %d", "##MinFrameCount", CVAR_ENHANCEMENT("MinFrameCount"), 1, 1000, "", 0); - } - - ImGui::EndMenu(); - } - - UIWidgets::Spacer(0); - + UIWidgets::PaddedEnhancementCheckbox("Animated Link in Pause Menu", CVAR_ENHANCEMENT("PauseMenuAnimatedLink"), false, false); UIWidgets::PaddedEnhancementCheckbox("Disable LOD", CVAR_ENHANCEMENT("DisableLOD"), true, false); UIWidgets::Tooltip( "Turns off the Level of Detail setting, making models use their higher-poly variants at any distance"); diff --git a/soh/soh/config/ConfigMigrators.h b/soh/soh/config/ConfigMigrators.h index 48e1e708b..ea5f1cf70 100644 --- a/soh/soh/config/ConfigMigrators.h +++ b/soh/soh/config/ConfigMigrators.h @@ -30,7 +30,6 @@ namespace SOH { { MigrationAction::Rename, "gPrevTime", "gGeneral.PrevTime" }, { MigrationAction::Rename, "gSwitchTimeline", "gGeneral.SwitchTimeline" }, { MigrationAction::Rename, "gSpoilerLog", "gGeneral.SpoilerLog" }, - { MigrationAction::Rename, "gPauseTriforce", "gGeneral.PauseTriforce" }, { MigrationAction::Rename, "gRestoreQPA", "gGeneral.RestoreQPA" }, { MigrationAction::Rename, "gFixIceTrapWithBunnyHood", "gGeneral.FixIceTrapWithBunnyHood" }, { MigrationAction::Rename, "gBetterDebugWarpScreenCurrentScene", "gGeneral.BetterDebugWarpScreenCurrentScene" }, @@ -284,9 +283,6 @@ namespace SOH { { MigrationAction::Rename, "gOcarinaGameRoundTwoNotes", "gEnhancements.OcarinaGameRoundTwoNotes" }, { MigrationAction::Rename, "gOcarinaGameStartingNotes", "gEnhancements.OcarinaGameStartingNotes" }, { MigrationAction::Rename, "gOcarinaUnlimitedFailTime", "gEnhancements.OcarinaUnlimitedFailTime" }, - { MigrationAction::Rename, "gPauseLiveLink", "gEnhancements.PauseLiveLink" }, - { MigrationAction::Rename, "gPauseLiveLinkRotation", "gEnhancements.PauseLiveLinkRotation" }, - { MigrationAction::Rename, "gPauseLiveLinkRotationSpeed", "gEnhancements.PauseLiveLinkRotationSpeed" }, { MigrationAction::Rename, "gPauseWarp", "gEnhancements.PauseWarp" }, { MigrationAction::Rename, "gPermanentHeartLoss", "gEnhancements.PermanentHeartLoss" }, { MigrationAction::Rename, "gQuickBongoKill", "gEnhancements.QuickBongoKill" }, diff --git a/soh/src/code/z_kaleido_setup.c b/soh/src/code/z_kaleido_setup.c index 45992279d..c6b5205ef 100644 --- a/soh/src/code/z_kaleido_setup.c +++ b/soh/src/code/z_kaleido_setup.c @@ -27,9 +27,9 @@ void KaleidoSetup_Update(PlayState* play) { gSaveContext.unk_13EE = gSaveContext.unk_13EA; if (CHECK_BTN_ALL(input->cur.button, BTN_L)) - CVarSetInteger(CVAR_GENERAL("PauseTriforce"), 1); + CVarSetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 1); else - CVarSetInteger(CVAR_GENERAL("PauseTriforce"), 0); + CVarSetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0); WREG(16) = -175; diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index 33a8c5bb5..af6062723 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -2101,9 +2101,6 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH]; if ((type == PLAYER_MODELTYPE_SHEATH_18) || (type == PLAYER_MODELTYPE_SHEATH_19)) { dListOffset = playerSwordAndShield[1] * ptrSize; - } else if (type == PLAYER_MODELTYPE_SHEATH_16 && CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLink"), 0)) { - //if (playerSwordAndShield[0] == 1) - //dListOffset = 4; } } else if (limbIndex == PLAYER_LIMB_WAIST) { type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_WAIST]; @@ -2211,8 +2208,8 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, playerSwordAndShield[0] = sword; playerSwordAndShield[1] = shield; - Matrix_SetTranslateRotateYXZ(pos->x - ((CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLink"), 0) && LINK_AGE_IN_YEARS == YEARS_ADULT) ? 25 : 0), - pos->y - (CVarGetInteger(CVAR_GENERAL("PauseTriforce"), 0) ? 16 : 0), pos->z, rot); + Matrix_SetTranslateRotateYXZ(pos->x - ((CVarGetInteger(CVAR_ENHANCEMENT("PauseMenuAnimatedLink"), 0) && LINK_AGE_IN_YEARS == YEARS_ADULT) ? 25 : 0), + pos->y - (CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0) ? 16 : 0), pos->z, rot); Matrix_Scale(scale * (mirrorWorldActive ? -1 : 1), scale, scale, MTXMODE_APPLY); gSPSegment(POLY_OPA_DISP++, 0x04, gameplayKeep); @@ -2231,7 +2228,7 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, Player_DrawImpl(play, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount, 0, tunic, boots, 0, Player_OverrideLimbDrawPause, NULL, &playerSwordAndShield); - if (CVarGetInteger(CVAR_GENERAL("PauseTriforce"), 0)) { + if (CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0)) { Matrix_SetTranslateRotateYXZ(pos->x - (LINK_AGE_IN_YEARS == YEARS_ADULT ? 25 : 0), pos->y + 280 + (LINK_AGE_IN_YEARS == YEARS_ADULT ? 48 : 0), pos->z, rot); @@ -2255,11 +2252,6 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, CLOSE_DISPS(play->state.gfxCtx); } -uintptr_t SelectedAnim = 0; // Current Animaiton on the menu -s16 EquipedStance; // Link's current mode (Two handed, One handed...) -s16 FrameCountSinceLastAnim = 0; // Time since last animation -s16 MinFrameCount; // Frame to wait before checking if we need to change the animation - void Player_DrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime, Vec3f* pos, Vec3s* rot, f32 scale, s32 sword, s32 tunic, s32 shield, s32 boots) { Input* p1Input = &play->state.input[0]; @@ -2269,35 +2261,19 @@ void Player_DrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime, Vec3f* Vec3s* srcTable; s32 i; bool canswitchrnd = false; - s16 SelectedMode = CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLink"), 0); - MinFrameCount = CVarGetInteger(CVAR_ENHANCEMENT("MinFrameCount"), 200); gSegments[4] = VIRTUAL_TO_PHYSICAL(segment + 0x3800); gSegments[6] = VIRTUAL_TO_PHYSICAL(segment + 0x8800); - uintptr_t* PauseMenuAnimSet[15][4] = { - { 0, 0, 0, 0 }, // 0 = none - // IDLE // Two Handed // No shield // Kid Hylian Shield - { gPlayerAnim_link_normal_wait, gPlayerAnim_link_fighter_wait_long, gPlayerAnim_link_normal_wait_free, gPlayerAnim_link_normal_wait_free }, // Idle - { gPlayerAnim_link_normal_waitF_typeA_20f, gPlayerAnim_link_normal_waitF_typeA_20f, gPlayerAnim_link_normal_waitF_typeA_20f, gPlayerAnim_link_normal_waitF_typeA_20f }, // Idle look around - { gPlayerAnim_link_waitF_itemA_20f, gPlayerAnim_link_waitF_itemA_20f, gPlayerAnim_link_waitF_itemA_20f, gPlayerAnim_link_waitF_itemA_20f }, // Idle Belt - { gPlayerAnim_link_wait_itemC_20f, gPlayerAnim_link_wait_itemC_20f, gPlayerAnim_link_wait_itemC_20f, gPlayerAnim_link_wait_itemC_20f }, // Idle shield adjust - { gPlayerAnim_link_wait_itemD1_20f, gPlayerAnim_link_wait_itemD2_20f, gPlayerAnim_link_wait_itemD1_20f, gPlayerAnim_link_wait_itemD1_20f }, // Idle test sword - { gPlayerAnim_link_waitF_typeD_20f, gPlayerAnim_link_waitF_typeD_20f, gPlayerAnim_link_waitF_typeD_20f, gPlayerAnim_link_waitF_typeD_20f }, // Idle yawn - { gPlayerAnim_link_anchor_waitR, gPlayerAnim_link_fighter_waitR_long, gPlayerAnim_link_anchor_waitR, gPlayerAnim_link_anchor_waitR }, // Battle Stance - { gPlayerAnim_link_normal_walk_free, gPlayerAnim_link_fighter_walk_long, gPlayerAnim_link_normal_walk_free, gPlayerAnim_link_normal_walk_free }, // Walking (No shield) - { gPlayerAnim_link_normal_walk, gPlayerAnim_link_fighter_walk_long, gPlayerAnim_link_normal_walk, gPlayerAnim_link_normal_walk }, // Walking (Holding shield) - { gPlayerAnim_link_normal_run, gPlayerAnim_link_fighter_run_long, gPlayerAnim_link_normal_run, gPlayerAnim_link_normal_run }, // Running (No shield) - { gPlayerAnim_link_normal_run_free, gPlayerAnim_link_fighter_run_long, gPlayerAnim_link_normal_run_free, gPlayerAnim_link_normal_run_free }, // Running (Holding shield) - { gPlayerAnim_link_normal_talk_free_wait, gPlayerAnim_link_normal_talk_free_wait, gPlayerAnim_link_normal_talk_free_wait, gPlayerAnim_link_normal_talk_free_wait }, // Hand on hip - { gPlayerAnim_link_fighter_power_kiru_wait, gPlayerAnim_link_fighter_Lpower_kiru_wait, gPlayerAnim_link_fighter_power_kiru_wait, gPlayerAnim_link_fighter_power_kiru_wait }, // Spin Charge - { gPlayerAnim_link_demo_look_hand_wait, gPlayerAnim_link_demo_look_hand_wait, gPlayerAnim_link_demo_look_hand_wait, gPlayerAnim_link_demo_look_hand_wait }, // Look at hand + uintptr_t* PauseMenuAnimSet[4] = { + // IDLE // Two Handed // No shield // Kid Hylian Shield + gPlayerAnim_link_normal_wait, gPlayerAnim_link_fighter_wait_long, gPlayerAnim_link_normal_wait_free, gPlayerAnim_link_normal_wait_free }; - s16 AnimArraySize = ARRAY_COUNT(PauseMenuAnimSet); - if (CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLink"), 0) || CVarGetInteger(CVAR_GENERAL("PauseTriforce"), 0)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("PauseMenuAnimatedLink"), 0) || CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0)) { uintptr_t anim = 0; // Initialise anim + s16 EquipedStance; if (CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) >= EQUIP_VALUE_SWORD_BIGGORON) { EquipedStance = 1; } else if (CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SWORD_NONE) { @@ -2308,159 +2284,17 @@ void Player_DrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime, Vec3f* // Link is idle so revert to 0 EquipedStance = 0; } - if (SelectedMode == 16) { - // Apply Random function - s16 SwitchAtFrame = 0; - s16 CurAnimDuration = 0; - if (FrameCountSinceLastAnim == 0) { - // When opening Kaleido this will be passed one time - SelectedAnim = rand() % (AnimArraySize - 0); - if (SelectedAnim == 0) { - // prevent loading 0 that would result to a crash. - SelectedAnim = 1; - } - } else if (FrameCountSinceLastAnim >= 1) { - SwitchAtFrame = Animation_GetLastFrame(PauseMenuAnimSet[SelectedAnim][EquipedStance]); - CurAnimDuration = Animation_GetLastFrame(PauseMenuAnimSet[SelectedAnim][EquipedStance]); - if (SwitchAtFrame < MinFrameCount) { - // Animation frame count is lower than minimal wait time then we wait for another round. - // This will be looped to always add current animation time if that still lower than minimum time - while (SwitchAtFrame < MinFrameCount) { - SwitchAtFrame = SwitchAtFrame + CurAnimDuration; - } - } else if (CurAnimDuration >= MinFrameCount) { - // Since we have more (or same) animation time than min duration we set the wait time to animation - // time. - SwitchAtFrame = CurAnimDuration; - } - if (FrameCountSinceLastAnim >= SwitchAtFrame) { - SelectedAnim = rand() % (AnimArraySize - 0); - if (SelectedAnim == 0) { - // prevent loading 0 that would result to a crash. - SelectedAnim = 1; - } - FrameCountSinceLastAnim = 1; - } - anim = PauseMenuAnimSet[SelectedAnim][EquipedStance]; - } - FrameCountSinceLastAnim++; - } else if (SelectedMode == 17) { - // Apply Random function - s16 SwitchAtFrame = 0; - s16 CurAnimDuration = 0; - s16 LastAnim; - if (FrameCountSinceLastAnim == 0) { - // When opening Kaleido this will be passed one time - SelectedAnim = (rand() % (6 - 1 + 1)) + 1; - if (SelectedAnim == 0) { - // prevent loading 0 that would result to a crash. - SelectedAnim = 1; - } - } else if (FrameCountSinceLastAnim >= 1) { - SwitchAtFrame = Animation_GetLastFrame(PauseMenuAnimSet[SelectedAnim][EquipedStance]); - CurAnimDuration = Animation_GetLastFrame(PauseMenuAnimSet[SelectedAnim][EquipedStance]); - if (SwitchAtFrame < MinFrameCount) { - // Animation frame count is lower than minimal wait time then we wait for another round. - // This will be looped to always add current animation time if that still lower than minimum time - while (SwitchAtFrame < MinFrameCount) { - SwitchAtFrame = SwitchAtFrame + CurAnimDuration; - } - } else if (CurAnimDuration >= MinFrameCount) { - // Since we have more (or same) animation time than min duration we set the wait time to animation - // time. - SwitchAtFrame = CurAnimDuration; - } - if (FrameCountSinceLastAnim >= SwitchAtFrame) { - LastAnim = SelectedAnim; - if (LastAnim==1) { - if ((CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) != EQUIP_VALUE_SWORD_NONE) && (CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE)) { // if the player has a sword and shield equipped - if ((LINK_AGE_IN_YEARS == YEARS_ADULT) || (CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SHIELD_DEKU)) { // if he's an adult or a kid with the deku shield - SelectedAnim = (rand() % (6 - 2 + 1)) + 2; // select any 5 animations that aren't the default standing anim - } else { //else if he's a child with a shield that isn't the deku shield - s16 randval = (rand() % (5 - 2 + 1)) + 2; // 4 animations - if (randval==4) { //if its the shield anim - SelectedAnim==6; // set to yawn anim - } else { - SelectedAnim=randval; - } - } - } else if ((CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) != EQUIP_VALUE_SWORD_NONE) && (CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SHIELD_NONE)) { // if the player has a sword equipped but no shield - s16 randval = (rand() % (5 - 2 + 1)) + 2; // 4 animations - if (randval==4) { //if its the shield anim - SelectedAnim==6; // set to yawn anim - } else { - SelectedAnim=randval; - } - } else if ((CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) && (CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE)) { //if the player has a shield equipped but no sword - if ((LINK_AGE_IN_YEARS == YEARS_ADULT) || (CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SHIELD_DEKU)) {// if he's an adult or a kid with the deku shield - s16 randval = (rand() % (5 - 2 + 1)) + 2; // 4 animations - if (randval==5) { //if its the sword anim - SelectedAnim==6; // set to yawn anim - } else { - SelectedAnim=randval; - } - } else { - s16 randval = (rand() % (4 - 2 + 1)) + 2; // 3 animations - if (randval==4) { //if its the shield anim - SelectedAnim==6; // set to yawn anim - } else { - SelectedAnim=randval; - } - } - } else if ((CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) && (CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SHIELD_NONE)) { // if the player has no sword or shield equipped - s16 randval = (rand() % (4 - 2 + 1)) + 2; // 3 animations - if (randval==4) { //if its the shield anim - SelectedAnim==6; // set to yawn anim - } else { - SelectedAnim=randval; - } - } - } else { - SelectedAnim = 1; - } - if (SelectedAnim == 0) { - // prevent loading 0 that would result to a crash. Also makes sure default idle is every other anim - SelectedAnim = 1; - } - FrameCountSinceLastAnim = 1; - } - anim = PauseMenuAnimSet[SelectedAnim][EquipedStance]; - } - FrameCountSinceLastAnim++; - } else if (SelectedMode == 15) { - // When opening Kaleido this will be passed one time - if (FrameCountSinceLastAnim < 1) { - SelectedAnim = rand() % (AnimArraySize - 0); - FrameCountSinceLastAnim++; - if (SelectedAnim == 0) { - // prevent loading 0 that would result to a crash. - SelectedAnim = 1; - } - FrameCountSinceLastAnim = 1; - } - if (CHECK_BTN_ALL(p1Input->press.button, BTN_B) || CHECK_BTN_ALL(p1Input->press.button, BTN_START)) { - FrameCountSinceLastAnim = 0; - } - anim = PauseMenuAnimSet[SelectedAnim][EquipedStance]; - } else if (SelectedMode < 16) { - // Not random so we place our CVar as SelectedAnim - SelectedAnim = SelectedMode; - anim = PauseMenuAnimSet[SelectedAnim][EquipedStance]; - } - anim = PauseMenuAnimSet[SelectedAnim][EquipedStance]; - - //anim = gPlayerAnim_link_wait_itemD2_20f; // Use for biggoron sword? - - if (CVarGetInteger(CVAR_GENERAL("PauseTriforce"), 0)) { + if (!CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0)) { + anim = PauseMenuAnimSet[EquipedStance]; + } else { anim = gPlayerAnim_link_magic_kaze2; sword = 0; shield = 0; } if (skelAnime->animation != anim) { - LinkAnimation_Change(play, skelAnime, anim, 1.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_LOOP, - -6.0f); + LinkAnimation_Change(play, skelAnime, anim, 1.0f, 0.0f, Animation_GetLastFrame(anim), ANIMMODE_LOOP, -6.0f); } LinkAnimation_Update(play, skelAnime); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c index bef08b08a..5fd8aa2b5 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c @@ -125,26 +125,18 @@ void KaleidoScope_DrawAButton(PlayState* play, Vtx* vtx, int16_t xTranslate, int CLOSE_DISPS(play->state.gfxCtx); } -Vec3s link_kaleido_rot = { 0, 32300, 0 }; // Default rotation link face us. - void KaleidoScope_DrawPlayerWork(PlayState* play) { PauseContext* pauseCtx = &play->pauseCtx; Vec3f pos; - //Vec3s rot; // Removed for not having it use din the function + Vec3s rot; f32 scale; - Input* input = &play->state.input[0]; - s16 RotationSpeed = 150 * CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLinkRotationSpeed"), 0); - u8 AllowStickRotation = (CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLinkRotation"), 0) == 3) ? true : false; - u8 AllowCRotation = (CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLinkRotation"), 0) == 2) ? true : false; - u8 AllowDPadRotation = (CVarGetInteger(CVAR_ENHANCEMENT("PauseLiveLinkRotation"), 0) == 1) ? true : false; - if (LINK_AGE_IN_YEARS == YEARS_CHILD) { pos.x = 2.0f; pos.y = -130.0f; pos.z = -150.0f; scale = 0.046f; - } else if (CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) != EQUIP_VALUE_SWORD_MASTER && !CVarGetInteger(CVAR_GENERAL("PauseTriforce"), 0)) { + } else if (CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) != EQUIP_VALUE_SWORD_MASTER && !CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0)) { pos.x = 25.0f; pos.y = -228.0f; pos.z = 60.0f; @@ -156,38 +148,10 @@ void KaleidoScope_DrawPlayerWork(PlayState* play) { scale = 0.047f; } - link_kaleido_rot.x = link_kaleido_rot.z = 0; - - if ((AllowDPadRotation && CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) || // rotate - (AllowCRotation && CHECK_BTN_ALL(input->cur.button, BTN_CLEFT))) { - link_kaleido_rot.y = link_kaleido_rot.y - RotationSpeed; - } else if ((AllowDPadRotation && CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) || - (AllowCRotation && CHECK_BTN_ALL(input->cur.button, BTN_CRIGHT))) { - link_kaleido_rot.y = link_kaleido_rot.y + RotationSpeed; - } else if (AllowStickRotation && input->cur.right_stick_x * 10.0f != 0) { - link_kaleido_rot.y = link_kaleido_rot.y + (input->cur.right_stick_x * 10.0f * (((f32)RotationSpeed) / 600.0f)); - } - - if ((AllowDPadRotation && CHECK_BTN_ALL(input->press.button, BTN_DUP)) || // reset rotation - (AllowDPadRotation && CHECK_BTN_ALL(input->press.button, BTN_DDOWN))) { - link_kaleido_rot.y = 32300; - } else if ((AllowCRotation && CHECK_BTN_ALL(input->press.button, BTN_CUP)) || - (AllowCRotation && CHECK_BTN_ALL(input->press.button, BTN_CDOWN))) { - link_kaleido_rot.y = 32300; - } else if (AllowStickRotation && input->cur.right_stick_y * 10.0f < -1200) { - link_kaleido_rot.y = 32300; - } - - if (AllowStickRotation && input->cur.right_stick_y * 10.0f > 0) { // Zoom in - scale = scale + input->cur.right_stick_y * 10.0f * .00005f; - pos.y = pos.y - input->cur.right_stick_y * 10.0f * 0.25f; - } - - - link_kaleido_rot.x = 0; - gsSPSetFB(play->state.gfxCtx->polyOpa.p++, gPauseLinkFrameBuffer); - Player_DrawPause(play, pauseCtx->playerSegment, &pauseCtx->playerSkelAnime, &pos, &link_kaleido_rot, scale, + rot.y = 32300; + rot.x = rot.z = 0; + Player_DrawPause(play, pauseCtx->playerSegment, &pauseCtx->playerSkelAnime, &pos, &rot, scale, SWORD_EQUIP_TO_PLAYER(CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD)), TUNIC_EQUIP_TO_PLAYER(CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC)), SHIELD_EQUIP_TO_PLAYER(CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD)), diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c index e76576f85..97ac28ca4 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c @@ -4550,7 +4550,7 @@ void KaleidoScope_Update(PlayState* play) R_UPDATE_RATE = 3; R_PAUSE_MENU_MODE = 0; - CVarSetInteger(CVAR_GENERAL("PauseTriforce"), 0); + CVarSetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0); func_800981B8(&play->objectCtx); func_800418D0(&play->colCtx, play); From 14a14bb7efa3538231b5128812beab0d3c289c36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Sat, 8 Feb 2025 18:09:18 +0000 Subject: [PATCH 27/68] DC logic: more mud walls (#5019) A few mud walls in DC logic still used SmashOrBlast, preventing alternative blue fire trick logic --- .../dungeons/dodongos_cavern.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp index d6798523b..e961a5c08 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp @@ -35,7 +35,7 @@ void RegionTable_Init_DodongosCavern() { //Exits Entrance(RR_DODONGOS_CAVERN_BEGINNING, []{return true;}), Entrance(RR_DODONGOS_CAVERN_LOBBY_SWITCH, []{return logic->IsAdult;}), - Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET);});}), + Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}), Entrance(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return HasAccessTo(RR_DODONGOS_CAVERN_LOBBY_SWITCH);}), Entrance(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return HasAccessTo(RR_DODONGOS_CAVERN_FAR_BRIDGE);}), Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, []{return Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return logic->HasExplosives();});}), @@ -61,7 +61,7 @@ void RegionTable_Init_DodongosCavern() { //Exits Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), //Shield seems to be in logic to drop a pot on their head as they hit you to blow up the wall - Entrance(RR_DODONGOS_CAVERN_SE_ROOM, []{return Here(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return logic->BlastOrSmash() || logic->CanAttack() || (logic->TakeDamage() && logic->CanShield());});}), + Entrance(RR_DODONGOS_CAVERN_SE_ROOM, []{return Here(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return logic->CanBreakMudWalls() || logic->CanAttack() || (logic->TakeDamage() && logic->CanShield());});}), Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, []{return true;}), }); @@ -102,7 +102,7 @@ void RegionTable_Init_DodongosCavern() { //Exits Entrance(RR_DODONGOS_CAVERN_LOBBY_SWITCH, []{return logic->HasFireSourceWithTorch();}), Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM, []{return Here(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET);});}), + Entrance(RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM, []{return Here(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}), }); areaTable[RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM] = Region("Dodongos Cavern Near Dodongo Room", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { @@ -117,7 +117,7 @@ void RegionTable_Init_DodongosCavern() { //Exits Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, []{return logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRCASE) && logic->CanUse(RG_FAIRY_BOW));}), - Entrance(RR_DODONGOS_CAVERN_COMPASS_ROOM, []{return Here(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET);});}), + Entrance(RR_DODONGOS_CAVERN_COMPASS_ROOM, []{return Here(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}), }); areaTable[RR_DODONGOS_CAVERN_STAIRS_UPPER] = Region("Dodongos Cavern Stairs Upper", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { @@ -154,8 +154,8 @@ void RegionTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, true), }, { //Exits - Entrance(RR_DODONGOS_CAVERN_2F_SIDE_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->BlastOrSmash() || (ctx->GetTrickOption(RT_DC_SCRUB_ROOM) && logic->HasItem(RG_GORONS_BRACELET));});}), - Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET);});}), + Entrance(RR_DODONGOS_CAVERN_2F_SIDE_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->CanBreakMudWalls() || (ctx->GetTrickOption(RT_DC_SCRUB_ROOM) && logic->HasItem(RG_GORONS_BRACELET));});}), + Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}), Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, []{return (logic->IsAdult && ctx->GetTrickOption(RT_DC_JUMP)) || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanJumpslash());}), }); @@ -214,7 +214,7 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_FAR_BRIDGE] = Region("Dodongos Cavern Far Bridge", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return logic->BlastOrSmash();})), + LOCATION(RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return logic->CanBreakMudWalls();})), }, { //Exits Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), @@ -227,7 +227,7 @@ void RegionTable_Init_DodongosCavern() { }, {}, { //Exits Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_BACK_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOSS_AREA, []{return logic->BlastOrSmash();});}), + Entrance(RR_DODONGOS_CAVERN_BACK_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOSS_AREA, []{return logic->CanBreakMudWalls();});}), Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}), }); @@ -250,7 +250,7 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_BEGINNING] = Region("Dodongos Cavern MQ Beginning", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, []{return true;}), - Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return Here(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET);});}), + Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return Here(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}), }); areaTable[RR_DODONGOS_CAVERN_MQ_LOBBY] = Region("Dodongos Cavern MQ Lobby", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { From 6abf30aa2f9fa5dee9710eda6479a592aeceed57 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Sat, 8 Feb 2025 10:12:13 -0800 Subject: [PATCH 28/68] document vb shoulds (#5004) --- .../game-interactor/GameInteractor.h | 477 +---- .../vanilla-behavior/GIVanillaBehavior.h | 1851 +++++++++++++++++ 2 files changed, 1852 insertions(+), 476 deletions(-) create mode 100644 soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.h b/soh/soh/Enhancements/game-interactor/GameInteractor.h index 889ba7f1c..8c6be086f 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor.h @@ -5,6 +5,7 @@ #include "libultraship/libultraship.h" #include "GameInteractionEffect.h" +#include "vanilla-behavior/GIVanillaBehavior.h" #include "soh/Enhancements/item-tables/ItemTableTypes.h" #include @@ -63,482 +64,6 @@ typedef enum { /* */ GI_TP_DEST_PRELUDE = ENTR_TEMPLE_OF_TIME_WARP_PAD, } GITeleportDestinations; -typedef enum { - // Vanilla condition: gSaveContext.showTitleCard - VB_SHOW_TITLE_CARD, - // Opt: *EnWonderTalk2 - VB_WONDER_TALK, - // Opt: *ElfMsg - VB_NAVI_TALK, - // Vanilla condition: INFTABLE_GREETED_BY_SARIA - VB_NOT_BE_GREETED_BY_SARIA, - // Opt: *EnMd - VB_MIDO_SPAWN, - // Opt: *EnMd - // Vanilla condition: EnMd->interactInfo.talkState == NPC_TALK_STATE_ACTION - // Note: When overriding this, ensure you're not in the intro cutscene as Mido's path has not been loaded - VB_MOVE_MIDO_IN_KOKIRI_FOREST, - // Opt: *EnMd - // Vanilla condition: CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) - VB_MIDO_CONSIDER_DEKU_TREE_DEAD, - // Opt: *ObjDekujr - // Vanilla condition: CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST) - VB_DEKU_JR_CONSIDER_FOREST_TEMPLE_FINISHED, - // Opt: *EnKo - // Vanilla condition: CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) - VB_OPEN_KOKIRI_FOREST, - // Opt: *EnOwl - // Vanilla condition: EnOwl->actor.xzDistToPlayer < targetDist - VB_OWL_INTERACTION, - // Vanilla condition: EVENTCHKINF_TALON_RETURNED_FROM_CASTLE - VB_MALON_RETURN_FROM_CASTLE, - // Vanilla condition: CUR_UPG_VALUE(UPG_STRENGTH) <= 0 - VB_BE_ELIGIBLE_FOR_DARUNIAS_JOY_REWARD, - /* Vanilla condition: - ``` - LINK_IS_ADULT && - (gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_TEMPLE_OF_TIME) && - CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && - CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) && - !Flags_GetEventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS); - ``` - */ - VB_BE_ELIGIBLE_FOR_LIGHT_ARROWS, - // Vanilla condition: !CHECK_QUEST_ITEM(QUEST_SONG_SARIA) - VB_BE_ELIGIBLE_FOR_SARIAS_SONG, - // Vanilla condition: CHECK_QUEST_ITEM(QUEST_SONG_EPONA) - VB_MALON_ALREADY_TAUGHT_EPONAS_SONG, - // Vanilla condition: CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_IRON) && !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER) - VB_BE_ELIGIBLE_FOR_SERENADE_OF_WATER, - // Vanilla condition: (!CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_IRON) && !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER)) && LINK_IS_ADULT - VB_SHIEK_PREPARE_TO_GIVE_SERENADE_OF_WATER, - // Vanilla condition: !EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT and EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP - VB_BE_ELIGIBLE_FOR_PRELUDE_OF_LIGHT, - VB_BE_ELIGIBLE_FOR_RAINBOW_BRIDGE, - /* Vanilla Condition: - ``` - LINK_IS_ADULT && - gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_FRONT_GATE && - Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP) && - Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP) && - Flags_GetEventChkInf(EVENTCHKINF_USED_WATER_TEMPLE_BLUE_WARP) && - !Flags_GetEventChkInf(EVENTCHKINF_BONGO_BONGO_ESCAPED_FROM_WELL); - ``` - */ - VB_BE_ELIGIBLE_FOR_NOCTURNE_OF_SHADOW, - // Opt: *EnGo2 - VB_GORON_LINK_BE_SCARED, - // Vanilla condition: CUR_CAPACITY(UPG_BOMB_BAG) >= 20 && this->waypoint > 7 && this->waypoint < 12 - VB_BE_ELIGIBLE_FOR_CHILD_ROLLING_GORON_REWARD, - // Vanilla condition: !CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON) - VB_BE_ELIGIBLE_FOR_GIANTS_KNIFE_PURCHASE, - // Opt: *EnMs - // Vanilla condition: gSaveContext.rupees >= sPrices[BEANS_BOUGHT] - VB_BE_ELIGIBLE_FOR_MAGIC_BEANS_PURCHASE, - // Opt: *EnItem00 - // Vanilla condition: Flags_GetCollectible(play, this->collectibleFlag) - VB_ITEM00_DESPAWN, - // Opt: *ItemBHeart - // Vanilla condition: Flags_GetCollectible(play, 0x1F) - VB_ITEM_B_HEART_DESPAWN, - // Opt: *EnTk - // Vanilla condition: gSaveContext.dayTime <= 0xC000 || gSaveContext.dayTime >= 0xE000 || LINK_IS_ADULT || play->sceneNum != SCENE_GRAVEYARD - VB_DAMPE_IN_GRAVEYARD_DESPAWN, - // Opt: *EnTk - // Vanilla condition: this->validDigHere == 1 - VB_BE_VALID_GRAVEDIGGING_SPOT, - // Opt: *EnTk - // Vanilla condition: this->currentReward == 3 - VB_BE_DAMPE_GRAVEDIGGING_GRAND_PRIZE, - // Opt: *EnTk - // Vanilla condition: !Flags_GetItemGetInf(ITEMGETINF_1C) - VB_DAMPE_GRAVEDIGGING_GRAND_PRIZE_BE_HEART_PIECE, - // Opt: *EnShopnuts - /* Vanilla Condition: - ``` - ((this->actor.params == 0x0002) && (Flags_GetItemGetInf(ITEMGETINF_DEKU_SCRUB_HEART_PIECE))) || - ((this->actor.params == 0x0009) && (Flags_GetInfTable(INFTABLE_BOUGHT_STICK_UPGRADE))) || - ((this->actor.params == 0x000A) && (Flags_GetInfTable(INFTABLE_BOUGHT_NUT_UPGRADE))) - ``` - */ - VB_BUSINESS_SCRUB_DESPAWN, - // Opt: *EnCow - // Vanilla condition: play->sceneNum == SCENE_LINKS_HOUSE && (!LINK_IS_ADULT || !Flags_GetEventChkInf(EVENTCHKINF_WON_COW_IN_MALONS_RACE)) - VB_DESPAWN_HORSE_RACE_COW, - // Opt: *EnHs - // Vanilla condition: Flags_GetItemGetInf(ITEMGETINF_30) - VB_DESPAWN_GROG, - // Opt: *EnKo - // Vanilla condition: (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_ODD_POTION) ? true : false; - VB_SPAWN_LW_FADO, - // Opt: *EnMk - VB_PLAY_EYEDROP_CREATION_ANIM, - // Opt: *EnDs - VB_PLAY_ODD_POTION_ANIM, - // Opt: *EnMk - // Vanilla condition: INV_CONTENT(ITEM_ODD_MUSHROOM) == ITEM_EYEDROPS - VB_USE_EYEDROP_DIALOGUE, - // Opt: *EnMk - // Vanilla condition: Flags_GetItemGetInf(ITEMGETINF_30) - VB_OFFER_BLUE_POTION, - VB_GRANNY_SAY_INSUFFICIENT_RUPEES, - VB_GRANNY_TAKE_MONEY, - // Vanilla condition: Inventory_HasEmptyBottle() == 0 - VB_NEED_BOTTLE_FOR_GRANNYS_ITEM, - // Opt: *EnNiwLady - VB_SET_CUCCO_COUNT, - // Opt: *EnKz - // Vanilla condition: CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE) - VB_KING_ZORA_THANK_CHILD, - // Opt: *EnKz - // Vanilla condition: this->actor.textId == 0x401A - VB_BE_ABLE_TO_EXCHANGE_RUTOS_LETTER, - // Opt: *EnKz - // Vanilla condition: Flags_GetEventChkInf(EVENTCHKINF_KING_ZORA_MOVED) - VB_KING_ZORA_BE_MOVED, - // Opt: *EnKz, - // Vanilla condition: CHECK_OWNED_EQUIP(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_ZORA) - VB_KING_ZORA_TUNIC_CHECK, - // Vanilla condition: gSaveState.bgsFlag - VB_BIGGORON_CONSIDER_TRADE_COMPLETE, - // Vanilla condition: gSaveState.bgsFlag - VB_BIGGORON_CONSIDER_SWORD_COLLECTED, - // Vanilla condition: Environment_GetBgsDayCount() >= 3 - VB_BIGGORON_CONSIDER_SWORD_FORGED, - // Vanilla condition: CHECK_QUEST_ITEM(QUEST_MEDALLION_FIRE) - VB_GORONS_CONSIDER_FIRE_TEMPLE_FINISHED, - // Vanilla condition: CHECK_QUEST_ITEM(QUEST_GORON_RUBY) - VB_GORONS_CONSIDER_DODONGOS_CAVERN_FINISHED, - // Opt: *uint16_t - // Vanilla condition: false - VB_OVERRIDE_LINK_THE_GORON_DIALOGUE, - // Vanilla condition: CHECK_OWNED_EQUIP(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_GORON) - VB_GORONS_CONSIDER_TUNIC_COLLECTED, - // Opt: *EnSyatekiMan - // Vanilla condition: (this->getItemId == GI_QUIVER_40) || (this->getItemId == GI_QUIVER_50) - VB_BE_ELIGIBLE_FOR_ADULT_SHOOTING_GAME_REWARD, - // Opt: *EnOkarinaTag - // Vanilla condition: !Flags_GetEventChkInf(EVENTCHKINF_OPENED_THE_DOOR_OF_TIME) - VB_BE_ELIGIBLE_TO_OPEN_DOT, - // Opt: *BgDyYoseizo - // Vanilla condition: see soh/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c - VB_BE_ELIGIBLE_FOR_GREAT_FAIRY_REWARD, - // Vanilla condition: see CheckCarpentersFreed in z_en_ge1 and z_en_ge2 - VB_GERUDOS_BE_FRIENDLY, - // Vanilla condition: switch - VB_GTG_GATE_BE_OPEN, - // Opt: *s16 (item id) - /* Vanilla condition: - In one case: - ``` - true - ``` - In the other case: - ``` - (i == ITEM_STICK) || - (i == ITEM_NUT) || - (i == ITEM_BOMB) || - (i == ITEM_BOW) || - ( - (i >= ITEM_BOW_ARROW_FIRE) && - (i <= ITEM_BOW_ARROW_LIGHT) - ) || - (i == ITEM_SLINGSHOT) || - (i == ITEM_BOMBCHU) || - (i == ITEM_BEAN) - ``` - */ - VB_DRAW_AMMO_COUNT, - // Opt: *ObjTsubo - VB_POT_SETUP_DRAW, - VB_POT_DROP_ITEM, - // Opt: *ActorDoorShutter - VB_LOCK_BOSS_DOOR, - // Vanilla condition: true - VB_HAVE_OCARINA_NOTE_D4, - // Vanilla condition: true - VB_HAVE_OCARINA_NOTE_D5, - // Vanilla condition: true - VB_HAVE_OCARINA_NOTE_F4, - // Vanilla condition: true - VB_HAVE_OCARINA_NOTE_B4, - // Vanilla condition: true - VB_HAVE_OCARINA_NOTE_A4, - // Vanilla condition: false - VB_SKIP_SCARECROWS_SONG, - // Vanilla condition: true - VB_RENDER_RUPEE_COUNTER, - // Vanilla condition: true - VB_RENDER_KEY_COUNTER, - // Vanilla condition: true - VB_SPAWN_HEART_CONTAINER, - // Vanilla condition: true - VB_BE_ABLE_TO_OPEN_DOORS, - // Vanilla condition: true - VB_REVERT_SPOILING_ITEMS, - // Vanilla condition: Flags_GetEventChkInf(EVENTCHKINF_USED_DODONGOS_CAVERN_BLUE_WARP) || BREG(2) - VB_BE_ABLE_TO_PLAY_BOMBCHU_BOWLING, - // Vanilla condition: true - VB_BE_ABLE_TO_SAVE, - // Vanilla condition: true - VB_TRANSITION_TO_SAVE_SCREEN_ON_DEATH, - // Vanilla condition: true - VB_RENDER_YES_ON_CONTINUE_PROMPT, - // Vanilla condition: CHECK_BTN_ALL(input->press.button, BTN_START) - VB_CLOSE_PAUSE_MENU, - VB_KALEIDO_UNPAUSE_CLOSE, - // Vanilla condition: true - VB_SPAWN_BLUE_WARP, - // Vanilla condition: this->warpTimer > sWarpTimerTarget && gSaveContext.nextCutsceneIndex == 0xFFEF - VB_BLUE_WARP_APPLY_ENTRANCE_AND_CUTSCENE, - // Vanilla condition: SurfaceType_GetSlope(&play->colCtx, poly, bgId) == 2 - // Opt: int (original next entrance index) - VB_SET_VOIDOUT_FROM_SURFACE, - // Vanilla condition: this->collider.base.acFlags & 2 - VB_BG_BREAKWALL_BREAK, - // Vanilla condition: true - VB_GANON_HEAL_BEFORE_FIGHT, - VB_FREEZE_LINK_FOR_BLOCK_THROW, - VB_MOVE_THROWN_ACTOR, - // Opt: *EnFr - // Vanilla condition: this->reward == GI_NONE - VB_FROGS_GO_TO_IDLE, - // Vanilla condition: var >= gSaveContext.health) && (gSaveContext.health > 0 - VB_HEALTH_METER_BE_CRITICAL, - VB_CONSUME_SMALL_KEY, - // Vanilla condition: gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0 - VB_NOT_HAVE_SMALL_KEY, - // Vanilla condition: !Flags_GetSwitch(play, this->actor.params & 0x3F) - VB_DOOR_BE_LOCKED, - // Vanilla condition: ((doorActor->params >> 7) & 7) == 3 - VB_DOOR_PLAY_SCENE_TRANSITION, - - /*** Play Cutscenes ***/ - - VB_PLAY_TRANSITION_CS, - VB_PLAY_GORON_FREE_CS, - VB_PLAY_FIRE_ARROW_CS, - // Vanilla condition: INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE - VB_SPAWN_FIRE_ARROW, - // Opt: s32 entranceIndex - VB_ALLOW_ENTRANCE_CS_FOR_EITHER_AGE, - // Opt: s32 flag/EventChkInf, s32 entranceIndex - VB_PLAY_ENTRANCE_CS, - // Opt: *cutsceneId - VB_PLAY_ONEPOINT_CS, - // Opt: *actor - VB_PLAY_ONEPOINT_ACTOR_CS, - // Opt: *BgTreemouth - VB_PLAY_DEKU_TREE_INTRO_CS, - // Vanilla condition: !EventChkInf except for spirit & shadow temple which are !medallion, and Jabu which always is true - VB_PLAY_BLUE_WARP_CS, - VB_PLAY_DARUNIAS_JOY_CS, - VB_PLAY_SHIEK_BLOCK_MASTER_SWORD_CS, - // Vanilla condition: !EVENTCHKINF_PULLED_MASTER_SWORD_FROM_PEDESTAL - VB_PLAY_PULL_MASTER_SWORD_CS, - VB_PLAY_DROP_FISH_FOR_JABU_CS, - // Opt: *EnKz - VB_PLAY_MWEEP_CS, - // Vanilla condition: player->getItemId == GI_GAUNTLETS_SILVER - VB_PLAY_NABOORU_CAPTURED_CS, - VB_PLAY_ZELDAS_LULLABY_CS, - // Opt: *EnSa - VB_PLAY_SARIAS_SONG_CS, - VB_PLAY_PRELUDE_OF_LIGHT_CS, - VB_PLAY_MINUET_OF_FOREST_CS, - VB_PLAY_BOLERO_OF_FIRE_CS, - VB_PLAY_SERENADE_OF_WATER_CS, - VB_PLAY_EYEDROPS_CS, - // Opt: *EnOkarinaTag - VB_PLAY_DRAIN_WELL_CS, - // Opt: *EnOkarinaTag - // Vanilla condition: !CHECK_QUEST_ITEM(QUEST_SONG_SUN) - VB_PLAY_SUNS_SONG_CS, - // Opt: *EnOkarinaTag - VB_PLAY_ROYAL_FAMILY_TOMB_CS, - VB_PLAY_ROYAL_FAMILY_TOMB_EXPLODE, - // Opt: *EnOkarinaTag - VB_PLAY_DOOR_OF_TIME_CS, - VB_PLAY_RAINBOW_BRIDGE_CS, - // Opt: *EnBox - VB_PLAY_SLOW_CHEST_CS, - //*Opt f32 sFishOnHandLength - // Vanilla condition: (s16)sFishingRecordLength < (s16)sFishOnHandLength - VB_SHOULD_CHECK_FOR_FISHING_RECORD, - //*Opt f32 sFishOnHandLength - // Vanilla condition is implied from previous code that could be bypassed by above hook - VB_SHOULD_SET_FISHING_RECORD, - //*Opt *s32 getItemId - VB_SHOULD_GIVE_VANILLA_FISHING_PRIZE, - VB_GIVE_RANDO_FISHING_PRIZE, - VB_PLAY_THROW_ANIMATION, - VB_INFLICT_VOID_DAMAGE, - // Vanilla condition: Close enough & various cutscene checks - // Opt: *EnRu1 - VB_PLAY_CHILD_RUTO_INTRO, - // Vanilla condition: !INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE && in the big okto room - // Opt: *EnRu1 - VB_RUTO_WANT_TO_BE_TOSSED_TO_SAPPHIRE, - // Vanilla condition: Landed on the platform in the big okto room - // Opt: *EnRu1 - VB_RUTO_RUN_TO_SAPPHIRE, - // Vanilla condition: !Flags_GetInfTable(INFTABLE_145) - // Opt: *EnRu1 - VB_RUTO_BE_CONSIDERED_NOT_KIDNAPPED, - - - /*** Give Items ***/ - - VB_SHORT_CIRCUIT_GIVE_ITEM_PROCESS, - VB_FREEZE_ON_SKULL_TOKEN, - // Opt: *EnBox - VB_GIVE_ITEM_FROM_CHEST, - // Opt: ItemID - VB_GIVE_ITEM_FROM_BLUE_WARP, - // Opt: *EnItem00 - VB_GIVE_ITEM_FROM_ITEM_00, - // Opt: *EnSi - VB_GIVE_ITEM_SKULL_TOKEN, - // Opt: *EnCow - VB_GIVE_ITEM_FROM_COW, - // Opt: *EnDns - VB_GIVE_ITEM_FROM_BUSINESS_SCRUB, - // Opt: *EnMk - VB_GIVE_ITEM_FROM_LAB_DIVE, - // Opt: *EnDs - VB_GIVE_ITEM_FROM_GRANNYS_SHOP, - // Opt: *EnNiwLady - VB_GIVE_ITEM_FROM_ANJU_AS_CHILD, - // Opt: *EnNiwLady - VB_GIVE_ITEM_FROM_ANJU_AS_ADULT, - // Opt: *EnGo2 - VB_GIVE_ITEM_FROM_GORON, - // Opt: *EnGb - VB_GIVE_ITEM_FROM_POE_COLLECTOR, - // Opt: *EnJs - VB_CHECK_RANDO_PRICE_OF_CARPET_SALESMAN, - VB_GIVE_ITEM_FROM_CARPET_SALESMAN, - VB_GIVE_BOMBCHUS_FROM_CARPET_SALESMAN, - // Opt: *EnGm - VB_CHECK_RANDO_PRICE_OF_MEDIGORON, - VB_GIVE_ITEM_FROM_MEDIGORON, - // Opt: *EnMs - VB_GIVE_ITEM_FROM_MAGIC_BEAN_SALESMAN, - // Opt: *EnSkj - VB_GIVE_ITEM_FROM_OCARINA_MEMORY_GAME, - // Opt: *EnSkj - VB_GIVE_ITEM_FROM_SKULL_KID_SARIAS_SONG, - VB_GIVE_ITEM_FROM_MAN_ON_ROOF, - // Opt: *EnSyatekiMan - VB_GIVE_ITEM_FROM_SHOOTING_GALLERY, - // Opt: *EnExItem - VB_GIVE_ITEM_FROM_TARGET_IN_WOODS, - // Opt: *EnTa - VB_GIVE_ITEM_FROM_TALONS_CHICKENS, - // Opt: *EnDivingGame - VB_GIVE_ITEM_FROM_DIVING_MINIGAME, - // Opt: *EnGe1 - VB_GIVE_ITEM_FROM_HORSEBACK_ARCHERY, - // Opt: *EnSth - VB_GIVE_ITEM_FROM_SKULLTULA_REWARD, - // Opt: *EnHy - VB_GIVE_ITEM_FROM_LOST_DOG, - // Opt: *EnBomBowlPit - VB_GIVE_ITEM_FROM_BOMBCHU_BOWLING, - - VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD, - - VB_GIVE_ITEM_FAIRY_OCARINA, - VB_GIVE_ITEM_WEIRD_EGG, - VB_GIVE_ITEM_LIGHT_ARROW, - VB_GIVE_ITEM_STRENGTH_1, - VB_GIVE_ITEM_ZELDAS_LETTER, - VB_GIVE_ITEM_MASTER_SWORD, - VB_GIVE_ITEM_OCARINA_OF_TIME, - VB_GIVE_ITEM_KOKIRI_EMERALD, - VB_GIVE_ITEM_GORON_RUBY, - VB_GIVE_ITEM_ZORA_SAPPHIRE, - VB_GIVE_ITEM_LIGHT_MEDALLION, - VB_GIVE_ITEM_FOREST_MEDALLION, - VB_GIVE_ITEM_FIRE_MEDALLION, - VB_GIVE_ITEM_WATER_MEDALLION, - VB_GIVE_ITEM_SPIRIT_MEDALLION, - VB_GIVE_ITEM_SHADOW_MEDALLION, - - /*** Give Songs ***/ - - VB_GIVE_ITEM_ZELDAS_LULLABY, - VB_GIVE_ITEM_SARIAS_SONG, - VB_GIVE_ITEM_EPONAS_SONG, - VB_GIVE_ITEM_SUNS_SONG, - VB_GIVE_ITEM_SONG_OF_TIME, - VB_GIVE_ITEM_SONG_OF_STORMS, - VB_GIVE_ITEM_MINUET_OF_FOREST, - VB_GIVE_ITEM_BOLERO_OF_FIRE, - VB_GIVE_ITEM_SERENADE_OF_WATER, - VB_GIVE_ITEM_REQUIEM_OF_SPIRIT, - VB_GIVE_ITEM_NOCTURNE_OF_SHADOW, - VB_GIVE_ITEM_PRELUDE_OF_LIGHT, - - /*** Adult Trade ***/ - // Opt: *EnNiwLady - VB_TRADE_POCKET_CUCCO, - // Opt: *EnHs - VB_TRADE_COJIRO, - // Opt: *EnDs - VB_TRADE_ODD_MUSHROOM, - // Opt: *EnKo - VB_TRADE_ODD_POTION, - // Opt: *EnToryo - VB_TRADE_SAW, - // Opt: *EnKz, - VB_ADULT_KING_ZORA_ITEM_GIVE, - // Opt: *EnMk - VB_TRADE_FROG, - - VB_TRADE_TIMER_ODD_MUSHROOM, - VB_TRADE_TIMER_FROG, - VB_TRADE_TIMER_EYEDROPS, - - /*** Fixes ***/ - // Vanilla condition: false - VB_FIX_SAW_SOFTLOCK, - - /*** Cheats? ***/ - VB_DEKU_STICK_BE_ON_FIRE, - VB_DEKU_STICK_BREAK, - VB_DEKU_STICK_BURN_DOWN, - VB_DEKU_STICK_BURN_OUT, - VB_DEKU_UPDATE_BURNING_DEKU_STICK, - - /*** Quick Boss Deaths ***/ - // Vanilla condition: true; Opt: *BossGanondrof - VB_PHANTOM_GANON_DEATH_SCENE, - // Opt: *EnIk - VB_NABOORU_KNUCKLE_DEATH_SCENE, - - /*** Fishsanity ***/ - // Vanilla condition: Actor is ACTOR_EN_ELF, ACTOR_EN_FISH, ACTOR_EN_ICE_HONO, or ACTOR_EN_INSECT - // Opt: *Actor - VB_BOTTLE_ACTOR, - - /*** Shuffle Fairies ***/ - // Opt: *EnElf - VB_SPAWN_FOUNTAIN_FAIRIES, - VB_FAIRY_HEAL, - // Opt: *ObjBean - VB_SPAWN_BEAN_STALK_FAIRIES, - // Opt: *ShotSun - VB_SPAWN_SONG_FAIRY, - // Opt: *EnGs - VB_SPAWN_GOSSIP_STONE_FAIRY, - - /*** Equippable tunics and boots ***/ - VB_CHANGE_HELD_ITEM_AND_USE_ITEM, - VB_ITEM_ACTION_BE_NONE, - VB_EXECUTE_PLAYER_ACTION_FUNC, -} GIVanillaBehavior; - #ifdef __cplusplus extern "C" { #endif diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h new file mode 100644 index 000000000..4974baf5b --- /dev/null +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -0,0 +1,1851 @@ +typedef enum { + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnKz` + VB_ADULT_KING_ZORA_ITEM_GIVE, + + // #### `result` + // ```c + // requiredAge == 2 + // ``` + // #### `args` + // - `int32_t` (entrance index) (promoted from `uint16_t` by va_arg) + VB_ALLOW_ENTRANCE_CS_FOR_EITHER_AGE, + + // #### `result` + // ```c + // this->actor.textId == 0x401A + // ``` + // #### `args` + // - `*EnKz` + VB_BE_ABLE_TO_EXCHANGE_RUTOS_LETTER, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_BE_ABLE_TO_OPEN_DOORS, + + // #### `result` + // ```c + // (Flags_GetEventChkInf(EVENTCHKINF_USED_DODONGOS_CAVERN_BLUE_WARP)) || BREG(2) + // ``` + // #### `args` + // - None + VB_BE_ABLE_TO_PLAY_BOMBCHU_BOWLING, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_BE_ABLE_TO_SAVE, + + // #### `result` + // ```c + // this->currentReward == 3 + // ``` + // #### `args` + // - `*EnTk` + VB_BE_DAMPE_GRAVEDIGGING_GRAND_PRIZE, + + // #### `result` + // ```c + // (this->getItemId == GI_QUIVER_40) || (this->getItemId == GI_QUIVER_50) + // ``` + // #### `args` + // - `*EnSyatekiMan` + VB_BE_ELIGIBLE_FOR_ADULT_SHOOTING_GAME_REWARD, + + // #### `result` + // ```c + // CUR_CAPACITY(UPG_BOMB_BAG) >= 20 + // ``` + // #### `args` + // - `*EnGo2` + VB_BE_ELIGIBLE_FOR_CHILD_ROLLING_GORON_REWARD, + + // #### `result` + // ```c + // CUR_UPG_VALUE(UPG_STRENGTH) <= 0 + // ``` + // #### `args` + // - None + VB_BE_ELIGIBLE_FOR_DARUNIAS_JOY_REWARD, + + // #### `result` + // ```c + // !CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON) + // ``` + // #### `args` + // - None + VB_BE_ELIGIBLE_FOR_GIANTS_KNIFE_PURCHASE, + + // #### `result` + // See `isEligible` logic in + // ```c + // BgDyYoseizo_CheckMagicAcquired() + // ``` + // #### `args` + // - `*BgDyYoseizo` + VB_BE_ELIGIBLE_FOR_GREAT_FAIRY_REWARD, + + // #### `result` + // ```c + // CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && + // CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) && + // LINK_IS_ADULT && + // !Flags_GetEventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS) && + // (gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_TEMPLE_OF_TIME) + // ``` + // #### `args` + // - None + VB_BE_ELIGIBLE_FOR_LIGHT_ARROWS, + + // #### `result` + // ```c + // gSaveContext.rupees >= sPrices[BEANS_BOUGHT] + // ``` + // #### `args` + // - `*EnMs` + VB_BE_ELIGIBLE_FOR_MAGIC_BEANS_PURCHASE, + + // #### `result` + // ```c + // (gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_FRONT_GATE) && + // LINK_IS_ADULT && + // Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP) && + // Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP) && + // Flags_GetEventChkInf(EVENTCHKINF_USED_WATER_TEMPLE_BLUE_WARP) && + // !Flags_GetEventChkInf(EVENTCHKINF_BONGO_BONGO_ESCAPED_FROM_WELL) + // ``` + // #### `args` + // - None + VB_BE_ELIGIBLE_FOR_NOCTURNE_OF_SHADOW, + + // #### `result` + // ```c + // !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP) + // ``` + // #### `args` + // - None + VB_BE_ELIGIBLE_FOR_PRELUDE_OF_LIGHT, + + // #### `result` + // ```c + // CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && + // CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) && + // (INV_CONTENT(ITEM_ARROW_LIGHT) == ITEM_ARROW_LIGHT) && + // CheckPlayerPosition(player, play) + // ``` + // #### `args` + // - None + VB_BE_ELIGIBLE_FOR_RAINBOW_BRIDGE, + + // #### `result` + // ```c + // !CHECK_QUEST_ITEM(QUEST_SONG_SARIA) + // ``` + // #### `args` + // - None + VB_BE_ELIGIBLE_FOR_SARIAS_SONG, + + // #### `result` + // ```c + // CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_IRON) && !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER) + // ``` + // #### `args` + // - None + VB_BE_ELIGIBLE_FOR_SERENADE_OF_WATER, + + // #### `result` + // ```c + // !Flags_GetEventChkInf(EVENTCHKINF_OPENED_THE_DOOR_OF_TIME) + // ``` + // #### `args` + // - `*EnOkarinaTag` + VB_BE_ELIGIBLE_TO_OPEN_DOT, + + // #### `result` + // ```c + // this->validDigHere == 1 + // ``` + // #### `args` + // - `*EnTk` + VB_BE_VALID_GRAVEDIGGING_SPOT, + + // #### `result` + // ```c + // this->collider.base.acFlags & 2 || blueFireArrowHit + // ``` + // #### `args` + // - None + VB_BG_BREAKWALL_BREAK, + + // #### `result` + // ```c + // gSaveContext.bgsFlag + // ``` + // #### `args` + // - None + VB_BIGGORON_CONSIDER_SWORD_COLLECTED, + + // #### `result` + // ```c + // Environment_GetBgsDayCount() >= 3 + // ``` + // #### `args` + // - None + VB_BIGGORON_CONSIDER_SWORD_FORGED, + + // #### `result` + // ```c + // gSaveContext.bgsFlag + // ``` + // #### `args` + // - None + VB_BIGGORON_CONSIDER_TRADE_COMPLETE, + + // # UNUSED + VB_BLUE_WARP_APPLY_ENTRANCE_AND_CUTSCENE, + + // #### `result` + // Actor is ACTOR_EN_ELF, ACTOR_EN_FISH, ACTOR_EN_ICE_HONO, or ACTOR_EN_INSECT + // ```c + // i < ARRAY_COUNT(sBottleCatchInfo) + // ``` + // #### `args` + // - `*Actor` (interactRangeActor) + VB_BOTTLE_ACTOR, + + // #### `result` + // ```c + // ((this->actor.params == DNS_TYPE_HEART_PIECE) && (Flags_GetItemGetInf(ITEMGETINF_DEKU_SCRUB_HEART_PIECE))) || + // ((this->actor.params == DNS_TYPE_DEKU_STICK_UPGRADE) && (Flags_GetInfTable(INFTABLE_BOUGHT_STICK_UPGRADE))) || + // ((this->actor.params == DNS_TYPE_DEKU_NUT_UPGRADE) && (Flags_GetInfTable(INFTABLE_BOUGHT_NUT_UPGRADE))) + // ``` + // #### `args` + // - `*EnShopnuts` + VB_BUSINESS_SCRUB_DESPAWN, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `int32_t` (item) + VB_CHANGE_HELD_ITEM_AND_USE_ITEM, + + // #### `result` + // ```c + // gSaveContext.rupees < 200 + // ``` + // #### `args` + // - `*EnJs` + VB_CHECK_RANDO_PRICE_OF_CARPET_SALESMAN, + + // #### `result` + // ```c + // gSaveContext.rupees < 200 + // ``` + // #### `args` + // - `*EnGm` + VB_CHECK_RANDO_PRICE_OF_MEDIGORON, + + // #### `result` + // ```c + // CHECK_BTN_ALL(input->press.button, BTN_START) + // ``` + // #### `args` + // - None + VB_CLOSE_PAUSE_MENU, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnDoor` + VB_CONSUME_SMALL_KEY, + + // #### `result` + // ```c + // !Flags_GetItemGetInf(ITEMGETINF_1C) + // ``` + // #### `args` + // - `*EnTk` + VB_DAMPE_GRAVEDIGGING_GRAND_PRIZE_BE_HEART_PIECE, + + // #### `result` + // ```c + // gSaveContext.dayTime <= 0xC000 || gSaveContext.dayTime >= 0xE000 || LINK_IS_ADULT || play->sceneNum != SCENE_GRAVEYARD + // ``` + // #### `args` + // - `*EnTk` + VB_DAMPE_IN_GRAVEYARD_DESPAWN, + + // #### `result` + // ```c + // CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST) + // ``` + // #### `args` + // - `*ObjDekujr` + VB_DEKU_JR_CONSIDER_FOREST_TEMPLE_FINISHED, + + // #### `result` + // ```c + // this->unk_860 != 0 + // ``` + // #### `args` + // - None + VB_DEKU_STICK_BE_ON_FIRE, + + // #### `result` + // ```c + // AMMO(ITEM_STICK) != 0 + // ``` + // #### `args` + // - None + VB_DEKU_STICK_BREAK, + + // #### `result` + // ```c + // this->unk_860 < 20 + // ``` + // #### `args` + // - None + VB_DEKU_STICK_BURN_DOWN, + + // #### `result` + // ##### In `Player_UpdateBurningDekuStick` + // ```c + // this->unk_85C == 0.0f + // ``` + // ##### Also in `Player_UpdateBurningDekuStick` + // ```c + // DECR(this->unk_860) == 0; + // ``` + // #### `args` + // - None + VB_DEKU_STICK_BURN_OUT, + + // # UNUSED + VB_DEKU_UPDATE_BURNING_DEKU_STICK, + + // #### `result` + // ```c + // Flags_GetItemGetInf(ITEMGETINF_30) + // ``` + // #### `args` + // - `*EnHs` + VB_DESPAWN_GROG, + + // #### `result` + // ```c + // play->sceneNum == SCENE_LINKS_HOUSE && (!LINK_IS_ADULT || !Flags_GetEventChkInf(EVENTCHKINF_WON_COW_IN_MALONS_RACE) + // ``` + // #### `args` + // - `*EnCow` + VB_DESPAWN_HORSE_RACE_COW, + + // #### `result` + // ```c + // !Flags_GetSwitch(play, this->actor.params & 0x3F) + // ``` + // #### `args` + // - `*EnDoor` + VB_DOOR_BE_LOCKED, + + // #### `result` + // ```c + // ((doorActor->params >> 7) & 7) == 3 + // ``` + // #### `args` + // - `*Actor` + VB_DOOR_PLAY_SCENE_TRANSITION, + + // #### `result` + // In `Interface_DrawAmmoCount`: + // ```c + // (i == ITEM_STICK) || + // (i == ITEM_NUT) || + // (i == ITEM_BOMB) || + // (i == ITEM_BOW) || + // ( + // (i >= ITEM_BOW_ARROW_FIRE) && + // (i <= ITEM_BOW_ARROW_LIGHT) + // ) || + // (i == ITEM_SLINGSHOT) || + // (i == ITEM_BOMBCHU) || + // (i == ITEM_BEAN) + // ``` + // In `KaleidoScope_DrawAmmoCount`: + // ```c + // true + // ``` + // #### `args` + // - `*int16_t` (item id) + VB_DRAW_AMMO_COUNT, + + // #### `result` + // ```c + // !(this->stateFlags3 & PLAYER_STATE3_PAUSE_ACTION_FUNC) + // ``` + // #### `args` + // - `*Input` + VB_EXECUTE_PLAYER_ACTION_FUNC, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnElf` + VB_FAIRY_HEAL, + + // #### `result` + // ```c + // false + // ``` + // #### `args` + // - None + VB_FIX_SAW_SOFTLOCK, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*BgHeavyBlock` + VB_FREEZE_LINK_FOR_BLOCK_THROW, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_FREEZE_ON_SKULL_TOKEN, + + // #### `result` + // ```c + // this->reward == GI_NONE + // ``` + // #### `args` + // - `*EnFr` + VB_FROGS_GO_TO_IDLE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GANON_HEAL_BEFORE_FIGHT, + + // #### `result` + // See logic in + // ```c + // EnGe1_CheckCarpentersFreed() + // ``` + // and + // ```c + // EnGe2_CheckCarpentersFreed() + // ``` + // #### `args` + // - None + VB_GERUDOS_BE_FRIENDLY, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnJs` + VB_GIVE_BOMBCHUS_FROM_CARPET_SALESMAN, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_BOLERO_OF_FIRE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_EPONAS_SONG, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_FAIRY_OCARINA, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_FIRE_MEDALLION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_FOREST_MEDALLION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnNiwLady` + VB_GIVE_ITEM_FROM_ANJU_AS_ADULT, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnNiwLady` + VB_GIVE_ITEM_FROM_ANJU_AS_CHILD, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `int32_t` (ItemID) + VB_GIVE_ITEM_FROM_BLUE_WARP, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnBomBowlPit` + VB_GIVE_ITEM_FROM_BOMBCHU_BOWLING, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnDns` + VB_GIVE_ITEM_FROM_BUSINESS_SCRUB, + + // #### `result` + // ```c + // false + // ``` + // #### `args` + // - `*EnJs` + VB_GIVE_ITEM_FROM_CARPET_SALESMAN, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnBox` + VB_GIVE_ITEM_FROM_CHEST, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnCow` + VB_GIVE_ITEM_FROM_COW, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*Actor` (EnDivingGame - &this->actor) + VB_GIVE_ITEM_FROM_DIVING_MINIGAME, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // ##### In `EnGo2_GetItem` + // - `*EnGo2` + // ##### Everywhere else + // - None + VB_GIVE_ITEM_FROM_GORON, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnDs` + VB_GIVE_ITEM_FROM_GRANNYS_SHOP, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGe1` + VB_GIVE_ITEM_FROM_HORSEBACK_ARCHERY, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnItem00` + VB_GIVE_ITEM_FROM_ITEM_00, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnMk` + VB_GIVE_ITEM_FROM_LAB_DIVE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnHy` + VB_GIVE_ITEM_FROM_LOST_DOG, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnMs` + VB_GIVE_ITEM_FROM_MAGIC_BEAN_SALESMAN, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_FROM_MAN_ON_ROOF, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGm` + VB_GIVE_ITEM_FROM_MEDIGORON, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnSkj` + VB_GIVE_ITEM_FROM_OCARINA_MEMORY_GAME, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGb` + VB_GIVE_ITEM_FROM_POE_COLLECTOR, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnSyatekiMan` + VB_GIVE_ITEM_FROM_SHOOTING_GALLERY, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnSkj` + VB_GIVE_ITEM_FROM_SKULL_KID_SARIAS_SONG, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnSth` + VB_GIVE_ITEM_FROM_SKULLTULA_REWARD, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*Actor` (EnTa - &this->actor) + VB_GIVE_ITEM_FROM_TALONS_CHICKENS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*Actor` (EnExItem - &this->actor) + VB_GIVE_ITEM_FROM_TARGET_IN_WOODS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD, + + // # UNUSED + VB_GIVE_ITEM_GORON_RUBY, + + // # UNUSED + VB_GIVE_ITEM_KOKIRI_EMERALD, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_LIGHT_ARROW, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_LIGHT_MEDALLION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_MASTER_SWORD, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_MINUET_OF_FOREST, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_NOCTURNE_OF_SHADOW, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_OCARINA_OF_TIME, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_PRELUDE_OF_LIGHT, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_REQUIEM_OF_SPIRIT, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_SARIAS_SONG, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_SERENADE_OF_WATER, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_SHADOW_MEDALLION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnSi` + VB_GIVE_ITEM_SKULL_TOKEN, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_SONG_OF_STORMS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_SONG_OF_TIME, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_SPIRIT_MEDALLION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_STRENGTH_1, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_SUNS_SONG, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_WATER_MEDALLION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_WEIRD_EGG, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_ZELDAS_LETTER, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_GIVE_ITEM_ZELDAS_LULLABY, + + // # UNUSED + VB_GIVE_ITEM_ZORA_SAPPHIRE, + + // #### `result` + // ```c + // false + // ``` + // #### `args` + // - `*VBFishingData` + VB_GIVE_RANDO_FISHING_PRIZE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGo2` + VB_GORON_LINK_BE_SCARED, + + // #### `result` + // ```c + // CHECK_QUEST_ITEM(QUEST_GORON_RUBY) + // ``` + // #### `args` + // - None + VB_GORONS_CONSIDER_DODONGOS_CAVERN_FINISHED, + + // #### `result` + // ```c + // CHECK_QUEST_ITEM(QUEST_MEDALLION_FIRE) + // ``` + // #### `args` + // - None + VB_GORONS_CONSIDER_FIRE_TEMPLE_FINISHED, + + // #### `result` + // ```c + // CHECK_OWNED_EQUIP(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_GORON) + // ``` + // #### `args` + // - None + VB_GORONS_CONSIDER_TUNIC_COLLECTED, + + // #### `result` + // ```c + // gSaveContext.rupees < 100 + // ``` + // #### `args` + // - `NULL` + VB_GRANNY_SAY_INSUFFICIENT_RUPEES, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnDs` + VB_GRANNY_TAKE_MONEY, + + // #### `result` + // ```c + // Flags_GetSwitch(play, this->dyna.actor.params & 0x3F) + // ``` + // #### `args` + // - None + VB_GTG_GATE_BE_OPEN, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_HAVE_OCARINA_NOTE_A4, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_HAVE_OCARINA_NOTE_B4, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_HAVE_OCARINA_NOTE_D4, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_HAVE_OCARINA_NOTE_D5, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_HAVE_OCARINA_NOTE_F4, + + // #### `result` + // ```c + // var >= gSaveContext.health && gSaveContext.health > 0 + // ``` + // #### `args` + // - None + VB_HEALTH_METER_BE_CRITICAL, + + // #### `result` + // ```c + // (respawnFlag == 1) || (respawnFlag == -1) + // ``` + // #### `args` + // - `int32_t` (respawnFlag) + VB_INFLICT_VOID_DAMAGE, + + // #### `result` + // ```c + // item >= ITEM_NONE_FE + // ``` + // #### `args` + // - `int32_t` (item) + VB_ITEM_ACTION_BE_NONE, + + // #### `result` + // ```c + // Flags_GetCollectible(play, 0x1F) + // ``` + // #### `args` + // - `*ItemBHeart` + VB_ITEM_B_HEART_DESPAWN, + + // #### `result` + // ```c + // Flags_GetCollectible(play, this->collectibleFlag) + // ``` + // #### `args` + // - `*EnItem00` + VB_ITEM00_DESPAWN, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_KALEIDO_UNPAUSE_CLOSE, + + // #### `result` + // ```c + // Flags_GetEventChkInf(EVENTCHKINF_KING_ZORA_MOVED) + // ``` + // #### `args` + // - `*EnKz` + VB_KING_ZORA_BE_MOVED, + + // #### `result` + // ```c + // CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE) + // ``` + // #### `args` + // - `*EnKz` + VB_KING_ZORA_THANK_CHILD, + + // #### `result` + // ```c + // CHECK_OWNED_EQUIP(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_ZORA) + // ``` + // #### `args` + // - `*EnKz` + VB_KING_ZORA_TUNIC_CHECK, + + // #### `result` + // ```c + // !Flags_GetSwitch(play, this->dyna.actor.params & 0x3F) + // ``` + // #### `args` + // - `*DoorShutter` + VB_LOCK_BOSS_DOOR, + + // #### `result` + // ```c + // CHECK_QUEST_ITEM(QUEST_SONG_EPONA) + // ``` + // #### `args` + // - None + VB_MALON_ALREADY_TAUGHT_EPONAS_SONG, + + // #### `result` + // ```c + // Flags_GetEventChkInf(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE) + // ``` + // #### `args` + // - None + VB_MALON_RETURN_FROM_CASTLE, + + // #### `result` + // ```c + // CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) + // ``` + // #### `args` + // - `*EnMd` + VB_MIDO_CONSIDER_DEKU_TREE_DEAD, + + // #### `result` + // ```c + // EnMd_ShouldSpawn(this, play) + // ``` + // #### `args` + // - `*EnMd` + VB_MIDO_SPAWN, + + // #### `result` + // ```c + // this->interactInfo.talkState == NPC_TALK_STATE_ACTION + // ``` + // #### `args` + // - `*EnMd` + // + // ### Note: + // When overriding this, ensure you're not in the intro cutscene as Mido's path has not been loaded + VB_MOVE_MIDO_IN_KOKIRI_FOREST, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*Actor` + VB_MOVE_THROWN_ACTOR, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnIk` + VB_NABOORU_KNUCKLE_DEATH_SCENE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*ElfMsg` + VB_NAVI_TALK, + + // #### `result` + // ```c + // Inventory_HasEmptyBottle() == 0 + // ``` + // #### `args` + // - None + VB_NEED_BOTTLE_FOR_GRANNYS_ITEM, + + // #### `result` + // ```c + // Flags_GetInfTable(INFTABLE_GREETED_BY_SARIA) + // ``` + // #### `args` + // - None + VB_NOT_BE_GREETED_BY_SARIA, + + // #### `result` + // ```c + // gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0 + // ``` + // #### `args` + // - `*EnDoor` + VB_NOT_HAVE_SMALL_KEY, + + // #### `result` + // ```c + // Flags_GetItemGetInf(ITEMGETINF_30) + // ``` + // #### `args` + // - `*EnDs` + VB_OFFER_BLUE_POTION, + + // #### `result` + // ```c + // CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) + // ``` + // #### `args` + // - `*EnKo` + VB_OPEN_KOKIRI_FOREST, + + // #### `result` + // ```c + // false + // ``` + // #### `args` + // - `*uint16_t` (overrideTextId) + VB_OVERRIDE_LINK_THE_GORON_DIALOGUE, + + // #### `result` + // ```c + // this->actor.xzDistToPlayer < targetDist + // ``` + // #### `args` + // - `*EnOwl` + VB_OWL_INTERACTION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*BossGanondrof` + VB_PHANTOM_GANON_DEATH_SCENE, + + // #### `result` + // ##### In `DoorWarp1_ChildWarpOut` - `SCENE_DODONGOS_CAVERN_BOSS` + // ```c + // !Flags_GetEventChkInf(EVENTCHKINF_USED_DODONGOS_CAVERN_BLUE_WARP) + // ``` + // ##### In `DoorWarp1_ChildWarpOut` - `SCENE_DEKU_TREE_BOSS` + // ```c + // !Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_KOKIRI_EMERALD_DEKU_TREE_DEAD) + // ``` + // ##### In `DoorWarp1_RutoWarpOut` + // ```c + // true + // ``` + // ##### In `DoorWarp1_AdultWarpOut` - `SCENE_FOREST_TEMPLE_BOSS` + // ```c + // !Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP) + // ``` + // ##### In `DoorWarp1_AdultWarpOut` - `SCENE_FIRE_TEMPLE_BOSS` + // ```c + // !Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP) + // ``` + // ##### In `DoorWarp1_AdultWarpOut` - `SCENE_WATER_TEMPLE_BOSS` + // ```c + // !Flags_GetEventChkInf(EVENTCHKINF_USED_WATER_TEMPLE_BLUE_WARP) + // ``` + // ##### In `DoorWarp1_AdultWarpOut` - `SCENE_SPIRIT_TEMPLE_BOSS` + // ```c + // !CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) + // ``` + // ##### In `DoorWarp1_AdultWarpOut` - `SCENE_SHADOW_TEMPLE_BOSS` + // ```c + // !CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) + // ``` + // #### `args` + // - `int32_t` (EVENTCHKINF / RAND_INF_DUNGEONS_DONE) + VB_PLAY_BLUE_WARP_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_BOLERO_OF_FIRE_CS, + + // #### `result` + // Close enough & various cutscene checks + // ```c + // (func_80AEC5FC(this, play)) && (!Play_InCsMode(play)) && + // (!(player->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER))) && + // (player->actor.bgCheckFlags & 1) + // ``` + // #### `args` + // - `*EnRu1` + VB_PLAY_CHILD_RUTO_INTRO, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_DARUNIAS_JOY_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*BgTreemouth` + VB_PLAY_DEKU_TREE_INTRO_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnOkarinaTag` + VB_PLAY_DOOR_OF_TIME_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnOkarinaTag` + VB_PLAY_DRAIN_WELL_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_DROP_FISH_FOR_JABU_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // ##### In `z_demo.c`: + // - `int32_t` (entranceCutscene->flag) (promoted from `uint8_t` by va_arg) + // - `int32_t` (entranceCutscene->entrance) (promoted from `uint16_t` by va_arg) + // ##### In `z_bg_breakwall.c` and `z_bg_toki_swd.c`: + // - `int32_t` (EVENTCHKINF) + // - `int32_t` (gSaveContext.entranceIndex) + VB_PLAY_ENTRANCE_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // ##### When called from `z_en_ds.c` + // - `*EnDs` + // ##### When called from `z_en_mk.c` + // - `*EnMk` + VB_PLAY_EYEDROP_CREATION_ANIM, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_EYEDROPS_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_FIRE_ARROW_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_GORON_FREE_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_MINUET_OF_FOREST_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_MWEEP_CS, + + // #### `result` + // ```c + // this->getItemId == GI_GAUNTLETS_SILVER + // ``` + // #### `args` + // - None + VB_PLAY_NABOORU_CAPTURED_CS, + + // # UNUSED + VB_PLAY_ODD_POTION_ANIM, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*Actor` + VB_PLAY_ONEPOINT_ACTOR_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*int16_t` (cutscene id) + VB_PLAY_ONEPOINT_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_PRELUDE_OF_LIGHT_CS, + + // #### `result` + // ##### In `z_demo.c` - `Cutscene_Command_Terminator` (setting `shouldSkipCommand`) + // ```c + // true + // ``` + // ##### In `z_demo.c` - `Cutscene_Command_Terminator` (inside if block and switch) + // ```c + // !Flags_GetEventChkInf(EVENTCHKINF_PULLED_MASTER_SWORD_FROM_PEDESTAL) + // ``` + // #### `args` + // - None + VB_PLAY_PULL_MASTER_SWORD_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_RAINBOW_BRIDGE_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnOkarinaTag` + VB_PLAY_ROYAL_FAMILY_TOMB_CS, + + // #### `result` + // ```c + // play->csCtx.state != 0 && play->csCtx.npcActions[3] != NULL && play->csCtx.npcActions[3]->action == 2 + // ``` + // #### `args` + // - `*BgSpot02Objects` + VB_PLAY_ROYAL_FAMILY_TOMB_EXPLODE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnSa` + VB_PLAY_SARIAS_SONG_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_SERENADE_OF_WATER_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_SHIEK_BLOCK_MASTER_SWORD_CS, + + // #### `result` + // ```c + // (giEntry.itemId != ITEM_NONE) && (giEntry.gi >= 0) && (Item_CheckObtainability(giEntry.itemId) == ITEM_NONE) + // ``` + // #### `args` + // - `*EnBox` + VB_PLAY_SLOW_CHEST_CS, + + // #### `result` + // ```c + // !CHECK_QUEST_ITEM(QUEST_SONG_SUN) + // ``` + // #### `args` + // - `*EnOkarinaTag` + VB_PLAY_SUNS_SONG_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*LinkAnimationHeader` + VB_PLAY_THROW_ANIMATION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_PLAY_TRANSITION_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*DemoIm` + VB_PLAY_ZELDAS_LULLABY_CS, + + // #### `result` + // ```c + // (dropParams >= ITEM00_RUPEE_GREEN) && (dropParams <= ITEM00_BOMBS_SPECIAL) + // ``` + // #### `args` + // - `*ObjTsubo` + VB_POT_DROP_ITEM, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*ObjTsubo` + VB_POT_SETUP_DRAW, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_RENDER_KEY_COUNTER, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_RENDER_RUPEE_COUNTER, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `**Gfx` (`&POLY_KAL_DISP`) + VB_RENDER_YES_ON_CONTINUE_PROMPT, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_REVERT_SPOILING_ITEMS, + + // #### `result` + // ```c + // !Flags_GetInfTable(INFTABLE_145) + // ``` + // #### `args` + // - `*EnRu1` + VB_RUTO_BE_CONSIDERED_NOT_KIDNAPPED, + + // #### `result` + // Landed on the platform in the big okto room + // ```c + // dynaPolyActor != NULL && dynaPolyActor->actor.id == ACTOR_BG_BDAN_OBJECTS && + // dynaPolyActor->actor.params == 0 && !Player_InCsMode(play) && play->msgCtx.msgLength == 0 + // ``` + // #### `args` + // - `*EnRu1` + // - `*DynaPolyActor` + VB_RUTO_RUN_TO_SAPPHIRE, + + // #### `result` + // in the big okto room and flag + // ```c + // !Flags_GetInfTable(INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE) && (func_80AEB124(play) != 0) + // ``` + // #### `args` + // - `*EnRu1` + VB_RUTO_WANT_TO_BE_TOSSED_TO_SAPPHIRE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnNiwLady` + VB_SET_CUCCO_COUNT, + + // #### `result` + // ```c + // SurfaceType_GetSlope(&play->colCtx, poly, bgId) == 2 + // ``` + // #### `args` + // - `*int16_t` - original next entrance index (`play->setupExitList[exitIndex - 1]`) + VB_SET_VOIDOUT_FROM_SURFACE, + + // #### `result` + // ```c + // (!CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_IRON) && !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER)) && LINK_IS_ADULT + // ``` + // #### `args` + // - None + VB_SHIEK_PREPARE_TO_GIVE_SERENADE_OF_WATER, + + // #### `result` + // ```c + // false + // ``` + // #### `args` + // - None + VB_SHORT_CIRCUIT_GIVE_ITEM_PROCESS, + + // #### `result` + // ```c + // (s16)sFishingRecordLength < (s16)sFishOnHandLength + // ``` + // #### `args` + // - `*f32` (sFishOnHandLength) + VB_SHOULD_CHECK_FOR_FISHING_RECORD, + + // #### `result` + // ##### In `Fishing_HandleOwnerDialog` - `LINK_AGE_CHILD` + // ```c + // (sFishingRecordLength >= 50.0f) && !(HIGH_SCORE(HS_FISHING) & HS_FISH_PRIZE_CHILD) + // ``` + // ##### In `Fishing_HandleOwnerDialog` - `!LINK_AGE_CHILD` + // ```c + // (sFishingRecordLength >= 60.0f) && !(HIGH_SCORE(HS_FISHING) & HS_FISH_PRIZE_ADULT) + // ``` + // #### `args` + // - `*VBFishingData` + VB_SHOULD_GIVE_VANILLA_FISHING_PRIZE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*VBFishingData` + VB_SHOULD_SET_FISHING_RECORD, + + // #### `result` + // ```c + // gSaveContext.showTitleCard + // ``` + // #### `args` + // - None + VB_SHOW_TITLE_CARD, + + // #### `result` + // ```c + // false + // ``` + // #### `args` + // - None + VB_SKIP_SCARECROWS_SONG, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*ObjBean` + VB_SPAWN_BEAN_STALK_FAIRIES, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // ##### In `z_boss_dodongo.c`: + // - `*BossDodongo` + // + // ##### In `z_boss_fd2.c` + // - `*BossFd2` + // + // ##### In `z_boss_ganondrof.c`: + // - `*BossGanondrof` + // + // ##### In `z_boss_goma.c`: + // - `*BossGoma` + // + // ##### In `z_boss_mo.c`: + // - `*BossMo` + // + // ##### In `z_boss_sst.c`: + // - `*BossSst` + // + // ##### In `z_boss_tw.c`: + // - `*BossTw` + // + // ##### In `z_boss_va.c`: + // - `*BossVa` + VB_SPAWN_BLUE_WARP, + + // #### `result` + // ```c + // INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE + // ``` + // #### `args` + // - None + VB_SPAWN_FIRE_ARROW, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnElf` + VB_SPAWN_FOUNTAIN_FAIRIES, + + // #### `result` + // ```c + // this->unk_19D & 1 + // ``` + // #### `args` + // - `*EnGs` + VB_SPAWN_GOSSIP_STONE_FAIRY, + + // #### `result` + // ##### In `BossFd_Fly` (`case BOSSFD_SKULL_BURN`) + // ```c + // this->timers[0] == 7 + // ``` + // ##### Everywhere else + // ```c + // true + // ``` + // #### `args` + // - None + VB_SPAWN_HEART_CONTAINER, + + // #### `result` + // ```c + // (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_ODD_POTION) ? true : false + // ``` + // #### `args` + // - `*EnKo` + VB_SPAWN_LW_FADO, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*ShotSun` + VB_SPAWN_SONG_FAIRY, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnHs` + VB_TRADE_COJIRO, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnMk` + VB_TRADE_FROG, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnDs` + VB_TRADE_ODD_MUSHROOM, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnKo` + VB_TRADE_ODD_POTION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnNiwLady` + VB_TRADE_POCKET_CUCCO, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnToryo` + VB_TRADE_SAW, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnMk` + VB_TRADE_TIMER_EYEDROPS, + + // #### `result` + // ```c + // INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_FROG) + // ``` + // #### `args` + // - None + VB_TRADE_TIMER_FROG, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - None + VB_TRADE_TIMER_ODD_MUSHROOM, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*PauseContext` + VB_TRANSITION_TO_SAVE_SCREEN_ON_DEATH, + + // #### `result` + // ```c + // INV_CONTENT(ITEM_ODD_MUSHROOM) == ITEM_EYEDROPS + // ``` + // #### `args` + // - `*EnMk` + VB_USE_EYEDROP_DIALOGUE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnWonderTalk2` + VB_WONDER_TALK, +} GIVanillaBehavior; From c11887edcd3d50d2854c14792ec1743800fc4666 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Sat, 8 Feb 2025 22:06:31 -0800 Subject: [PATCH 29/68] bump lus (#5026) --- libultraship | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libultraship b/libultraship index e641b3777..74f1c35cd 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit e641b3777cbefb18a9cf4b95353d650b3a2abf65 +Subproject commit 74f1c35cd3bfa4f9e746c85234b8cb716c592a54 From 8ce5c46531f54ffc51d043f3e9b6b9ec11e12014 Mon Sep 17 00:00:00 2001 From: Spodi Date: Sun, 9 Feb 2025 07:07:02 +0100 Subject: [PATCH 30/68] Remove "Jitter Fix" option (#5020) This was just confusing for users. --- soh/soh/OTRGlobals.cpp | 3 --- soh/soh/SohGui/SohMenuBar.cpp | 10 ---------- 2 files changed, 13 deletions(-) diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index bca2693e5..6b5afb0c3 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -1438,9 +1438,6 @@ extern "C" void Graph_ProcessGfxCommands(Gfx* commands) { wnd->SetTargetFps(fps); } - int threshold = CVarGetInteger(CVAR_SETTING("ExtraLatencyThreshold"), 80); - wnd->SetMaximumFrameLatency(threshold > 0 && target_fps >= threshold ? 2 : 1); - // When the gfx debugger is active, only run with the final mtx if (GfxDebuggerIsDebugging()) { mtx_replacements.clear(); diff --git a/soh/soh/SohGui/SohMenuBar.cpp b/soh/soh/SohGui/SohMenuBar.cpp index 0c974f599..bd39b2563 100644 --- a/soh/soh/SohGui/SohMenuBar.cpp +++ b/soh/soh/SohGui/SohMenuBar.cpp @@ -478,16 +478,6 @@ void DrawSettingsMenu() { } UIWidgets::Tooltip("Matches interpolation value to the game window's current refresh rate."); - if (Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() == Ship::WindowBackend::FAST3D_DXGI_DX11) { - UIWidgets::PaddedEnhancementSliderInt(CVarGetInteger(CVAR_SETTING("ExtraLatencyThreshold"), 80) == 0 ? "Jitter fix: Off" : "Jitter fix: >= %d FPS", - "##ExtraLatencyThreshold", CVAR_SETTING("ExtraLatencyThreshold"), 0, 360, "", 80, true, true, false); - UIWidgets::Tooltip( - "(For DirectX backend only)\n\n" - "When Interpolation FPS (Frame Rate) setting is at least this threshold, add one frame of delay (e.g. 16.6 ms for 60 FPS) in order to avoid jitter." - "This setting allows the CPU to work on one frame while GPU works on the previous frame.\n" - "This setting should be used when your computer is too slow to do CPU + GPU work in time."); - } - UIWidgets::PaddedSeparator(true, true, 3.0f, 3.0f); ImGui::Text("ImGui Menu Scale"); From 0177690b5430d98defc38ac0e272d78c5a6c1b47 Mon Sep 17 00:00:00 2001 From: aMannus Date: Sun, 9 Feb 2025 09:34:02 +0100 Subject: [PATCH 31/68] Remove potion values (#5021) --- soh/soh/Enhancements/mods.cpp | 25 ---- soh/soh/Enhancements/presets.h | 23 ---- .../randomizer/ShuffleFairies.cpp | 2 +- soh/soh/SohGui/SohMenuBar.cpp | 89 ------------- soh/soh/config/ConfigMigrators.h | 23 ---- .../actors/ovl_player_actor/z_player.c | 125 +++--------------- 6 files changed, 18 insertions(+), 269 deletions(-) diff --git a/soh/soh/Enhancements/mods.cpp b/soh/soh/Enhancements/mods.cpp index c5b59eac7..bbfcf1052 100644 --- a/soh/soh/Enhancements/mods.cpp +++ b/soh/soh/Enhancements/mods.cpp @@ -1161,30 +1161,6 @@ void RegisterCustomSkeletons() { }); } -#define FAIRY_FLAG_BIG (1 << 9) - - -void RegisterFairyCustomization() { - REGISTER_VB_SHOULD(VB_FAIRY_HEAL, { - EnElf* enElf = va_arg(args, EnElf*); - // Don't trigger if fairy is shuffled - if (!IS_RANDO || !OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_FAIRIES) || enElf->sohFairyIdentity.randomizerInf == RAND_INF_MAX) { - if (CVarGetInteger(CVAR_ENHANCEMENT("FairyEffect"), 0) && !(enElf->fairyFlags & FAIRY_FLAG_BIG)) - { - if (CVarGetInteger(CVAR_ENHANCEMENT("FairyPercentRestore"), 0)) - { - Health_ChangeBy(gPlayState, (gSaveContext.healthCapacity * CVarGetInteger(CVAR_ENHANCEMENT("FairyHealth"), 100) / 100 + 15) / 16 * 16); - } - else - { - Health_ChangeBy(gPlayState, CVarGetInteger(CVAR_ENHANCEMENT("FairyHealth"), 8) * 16); - } - *should = false; - } - } - }); -} - void InitMods() { BossRush_RegisterHooks(); RandomizerRegisterHooks(); @@ -1217,6 +1193,5 @@ void InitMods() { RegisterHurtContainerModeHandler(); RegisterPauseMenuHooks(); RandoKaleido_RegisterHooks(); - RegisterFairyCustomization(); RegisterCustomSkeletons(); } diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index a0b7e6c24..d61ff6ade 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -105,29 +105,6 @@ const std::vector enhancementsCvars = { CVAR_ENHANCEMENT("GoronPot"), CVAR_ENHANCEMENT("FullHealthSpawn"), CVAR_ENHANCEMENT("DampeWin"), - CVAR_ENHANCEMENT("RedPotionEffect"), - CVAR_ENHANCEMENT("RedPotionHealth"), - CVAR_ENHANCEMENT("RedPercentRestore"), - CVAR_ENHANCEMENT("GreenPotionEffect"), - CVAR_ENHANCEMENT("GreenPotionMana"), - CVAR_ENHANCEMENT("GreenPercentRestore"), - CVAR_ENHANCEMENT("BluePotionEffects"), - CVAR_ENHANCEMENT("BluePotionHealth"), - CVAR_ENHANCEMENT("BlueHealthPercentRestore"), - CVAR_ENHANCEMENT("BluePotionMana"), - CVAR_ENHANCEMENT("BlueManaPercentRestore"), - CVAR_ENHANCEMENT("MilkEffect"), - CVAR_ENHANCEMENT("MilkHealth"), - CVAR_ENHANCEMENT("MilkPercentRestore"), - CVAR_ENHANCEMENT("SeparateHalfMilkEffect"), - CVAR_ENHANCEMENT("HalfMilkHealth"), - CVAR_ENHANCEMENT("HalfMilkPercentRestore"), - CVAR_ENHANCEMENT("FairyEffect"), - CVAR_ENHANCEMENT("FairyHealth"), - CVAR_ENHANCEMENT("FairyPercentRestore"), - CVAR_ENHANCEMENT("FairyReviveEffect"), - CVAR_ENHANCEMENT("FairyReviveHealth"), - CVAR_ENHANCEMENT("FairyRevivePercentRestore"), CVAR_ENHANCEMENT("CustomizeFishing"), CVAR_ENHANCEMENT("InstantFishing"), CVAR_ENHANCEMENT("GuaranteeFishingBite"), diff --git a/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp b/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp index c2416c95a..c8f044bd8 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp @@ -83,7 +83,7 @@ void ShuffleFairies_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_end(args); - // Grant item when picking up fairy. If randomized, disable healing effect. + // Grant item when picking up fairy. if (id == VB_FAIRY_HEAL) { EnElf* enElf = (EnElf*)(actor); if (enElf->sohFairyIdentity.randomizerInf && enElf->sohFairyIdentity.randomizerInf != RAND_INF_MAX) { diff --git a/soh/soh/SohGui/SohMenuBar.cpp b/soh/soh/SohGui/SohMenuBar.cpp index bd39b2563..e6337dae6 100644 --- a/soh/soh/SohGui/SohMenuBar.cpp +++ b/soh/soh/SohGui/SohMenuBar.cpp @@ -926,95 +926,6 @@ void DrawEnhancementsMenu() { if (ImGui::BeginMenu("Difficulty Options")) { - if (ImGui::BeginMenu("Potion Values")) - { - UIWidgets::EnhancementCheckbox("Change Red Potion Effect", CVAR_ENHANCEMENT("RedPotionEffect")); - UIWidgets::Tooltip("Enable the following changes to the amount of health restored by Red Potions"); - bool disabledRedPotion = !CVarGetInteger(CVAR_ENHANCEMENT("RedPotionEffect"), 0); - static const char* disabledTooltipRedPotion = "This option is disabled because \"Change Red Potion Effect\" is turned off"; - UIWidgets::EnhancementSliderInt("Red Potion Health: %d", "##REDPOTIONHEALTH", CVAR_ENHANCEMENT("RedPotionHealth"), 1, 100, "", 0, true, disabledRedPotion, disabledTooltipRedPotion); - UIWidgets::Tooltip("Changes the amount of health restored by Red Potions"); - UIWidgets::EnhancementCheckbox("Red Potion Percent Restore", CVAR_ENHANCEMENT("RedPercentRestore"), disabledRedPotion, disabledTooltipRedPotion); - UIWidgets::Tooltip("Toggles from Red Potions restoring a fixed amount of health to a percent of the player's current max health"); - - ImGui::Separator(); - - UIWidgets::EnhancementCheckbox("Change Green Potion Effect", CVAR_ENHANCEMENT("GreenPotionEffect")); - UIWidgets::Tooltip("Enable the following changes to the amount of mana restored by Green Potions"); - bool disabledGreenPotion = !CVarGetInteger(CVAR_ENHANCEMENT("GreenPotionEffect"), 0); - static const char* disabledTooltipGreenPotion = "This option is disabled because \"Change Green Potion Effect\" is turned off"; - UIWidgets::EnhancementSliderInt("Green Potion Mana: %d", "##GREENPOTIONMANA", CVAR_ENHANCEMENT("GreenPotionMana"), 1, 100, "", 0, true, disabledGreenPotion, disabledTooltipGreenPotion); - UIWidgets::Tooltip("Changes the amount of mana restored by Green Potions, base max mana is 48, max upgraded mana is 96"); - UIWidgets::EnhancementCheckbox("Green Potion Percent Restore", CVAR_ENHANCEMENT("GreenPercentRestore"), disabledGreenPotion, disabledTooltipGreenPotion); - UIWidgets::Tooltip("Toggles from Green Potions restoring a fixed amount of mana to a percent of the player's current max mana"); - - ImGui::Separator(); - - UIWidgets::EnhancementCheckbox("Change Blue Potion Effects", CVAR_ENHANCEMENT("BluePotionEffects")); - UIWidgets::Tooltip("Enable the following changes to the amount of health and mana restored by Blue Potions"); - bool disabledBluePotion = !CVarGetInteger(CVAR_ENHANCEMENT("BluePotionEffects"), 0); - static const char* disabledTooltipBluePotion = "This option is disabled because \"Change Blue Potion Effects\" is turned off"; - UIWidgets::EnhancementSliderInt("Blue Potion Health: %d", "##BLUEPOTIONHEALTH", CVAR_ENHANCEMENT("BluePotionHealth"), 1, 100, "", 0, true, disabledBluePotion, disabledTooltipBluePotion); - UIWidgets::Tooltip("Changes the amount of health restored by Blue Potions"); - UIWidgets::EnhancementCheckbox("Blue Potion Health Percent Restore", CVAR_ENHANCEMENT("BlueHealthPercentRestore"), disabledBluePotion, disabledTooltipBluePotion); - UIWidgets::Tooltip("Toggles from Blue Potions restoring a fixed amount of health to a percent of the player's current max health"); - - ImGui::Separator(); - - UIWidgets::EnhancementSliderInt("Blue Potion Mana: %d", "##BLUEPOTIONMANA", CVAR_ENHANCEMENT("BluePotionMana"), 1, 100, "", 0, true, disabledBluePotion, disabledTooltipBluePotion); - UIWidgets::Tooltip("Changes the amount of mana restored by Blue Potions, base max mana is 48, max upgraded mana is 96"); - UIWidgets::EnhancementCheckbox("Blue Potion Mana Percent Restore", CVAR_ENHANCEMENT("BlueManaPercentRestore"), disabledBluePotion, disabledTooltipBluePotion); - UIWidgets::Tooltip("Toggles from Blue Potions restoring a fixed amount of mana to a percent of the player's current max mana"); - - ImGui::Separator(); - - UIWidgets::EnhancementCheckbox("Change Milk Effect", CVAR_ENHANCEMENT("MilkEffect")); - UIWidgets::Tooltip("Enable the following changes to the amount of health restored by Milk"); - bool disabledMilk = !CVarGetInteger(CVAR_ENHANCEMENT("MilkEffect"), 0); - static const char* disabledTooltipMilk = "This option is disabled because \"Change Milk Effect\" is turned off"; - UIWidgets::EnhancementSliderInt("Milk Health: %d", "##MILKHEALTH", CVAR_ENHANCEMENT("MilkHealth"), 1, 100, "", 0, true, disabledMilk, disabledTooltipMilk); - UIWidgets::Tooltip("Changes the amount of health restored by Milk"); - UIWidgets::EnhancementCheckbox("Milk Percent Restore", CVAR_ENHANCEMENT("MilkPercentRestore"), disabledMilk, disabledTooltipMilk); - UIWidgets::Tooltip("Toggles from Milk restoring a fixed amount of health to a percent of the player's current max health"); - - ImGui::Separator(); - - UIWidgets::EnhancementCheckbox("Separate Half Milk Effect", CVAR_ENHANCEMENT("SeparateHalfMilkEffect"), disabledMilk, disabledTooltipMilk); - UIWidgets::Tooltip("Enable the following changes to the amount of health restored by Half Milk\nIf this is disabled, Half Milk will behave the same as Full Milk."); - bool disabledHalfMilk = disabledMilk || !CVarGetInteger(CVAR_ENHANCEMENT("SeparateHalfMilkEffect"), 0); - static const char* disabledTooltipHalfMilk = "This option is disabled because \"Separate Half Milk Effect\" is turned off"; - UIWidgets::EnhancementSliderInt("Half Milk Health: %d", "##HALFMILKHEALTH", CVAR_ENHANCEMENT("HalfMilkHealth"), 1, 100, "", 0, true, disabledHalfMilk, disabledTooltipHalfMilk); - UIWidgets::Tooltip("Changes the amount of health restored by Half Milk"); - UIWidgets::EnhancementCheckbox("Half Milk Percent Restore", CVAR_ENHANCEMENT("HalfMilkPercentRestore"), disabledHalfMilk, disabledTooltipHalfMilk); - UIWidgets::Tooltip("Toggles from Half Milk restoring a fixed amount of health to a percent of the player's current max health"); - - ImGui::Separator(); - - UIWidgets::EnhancementCheckbox("Change Fairy Effect", CVAR_ENHANCEMENT("FairyEffect")); - UIWidgets::Tooltip("Enable the following changes to the amount of health restored by Fairies"); - bool disabledFairy = !CVarGetInteger(CVAR_ENHANCEMENT("FairyEffect"), 0); - static const char* disabledTooltipFairy = "This option is disabled because \"Change Fairy Effect\" is turned off"; - UIWidgets::EnhancementSliderInt("Fairy: %d", "##FAIRYHEALTH", CVAR_ENHANCEMENT("FairyHealth"), 1, 100, "", 0, true, disabledFairy, disabledTooltipFairy); - UIWidgets::Tooltip("Changes the amount of health restored by Fairies"); - UIWidgets::EnhancementCheckbox("Fairy Percent Restore", CVAR_ENHANCEMENT("FairyPercentRestore"), disabledFairy, disabledTooltipFairy); - UIWidgets::Tooltip("Toggles from Fairies restoring a fixed amount of health to a percent of the player's current max health"); - - ImGui::Separator(); - - UIWidgets::EnhancementCheckbox("Change Fairy Revive Effect", CVAR_ENHANCEMENT("FairyReviveEffect")); - UIWidgets::Tooltip("Enable the following changes to the amount of health restored by Fairy Revivals"); - bool disabledFairyRevive = !CVarGetInteger(CVAR_ENHANCEMENT("FairyReviveEffect"), 0); - static const char* disabledTooltipFairyRevive = "This option is disabled because \"Change Fairy Revive Effect\" is turned off"; - UIWidgets::EnhancementSliderInt("Fairy Revival: %d", "##FAIRYREVIVEHEALTH", CVAR_ENHANCEMENT("FairyReviveHealth"), 1, 100, "", 0, true, disabledFairyRevive, disabledTooltipFairyRevive); - UIWidgets::Tooltip("Changes the amount of health restored by Fairy Revivals"); - UIWidgets::EnhancementCheckbox("Fairy Revive Percent Restore", CVAR_ENHANCEMENT("FairyRevivePercentRestore"), disabledFairyRevive, disabledTooltipFairyRevive); - UIWidgets::Tooltip("Toggles from Fairy Revivals restoring a fixed amount of health to a percent of the player's current max health"); - - ImGui::EndMenu(); - } - - UIWidgets::Spacer(0); - if (ImGui::BeginMenu("Shooting Gallery")) { UIWidgets::EnhancementCheckbox("Customize Behavior", CVAR_ENHANCEMENT("CustomizeShootingGallery")); UIWidgets::Tooltip("Turn on/off changes to the shooting gallery behavior"); diff --git a/soh/soh/config/ConfigMigrators.h b/soh/soh/config/ConfigMigrators.h index ea5f1cf70..3a566f493 100644 --- a/soh/soh/config/ConfigMigrators.h +++ b/soh/soh/config/ConfigMigrators.h @@ -149,11 +149,6 @@ namespace SOH { { MigrationAction::Rename, "gBetterFW", "gEnhancements.BetterFarore" }, { MigrationAction::Rename, "gBetterOwl", "gEnhancements.BetterOwl" }, { MigrationAction::Rename, "gBlueFireArrows", "gEnhancements.BlueFireArrows" }, - { MigrationAction::Rename, "gBlueHealthPercentRestore", "gEnhancements.BlueHealthPercentRestore" }, - { MigrationAction::Rename, "gBlueManaPercentRestore", "gEnhancements.BlueManaPercentRestore" }, - { MigrationAction::Rename, "gBluePotionEffects", "gEnhancements.BluePotionEffects" }, - { MigrationAction::Rename, "gBluePotionHealth", "gEnhancements.BluePotionHealth" }, - { MigrationAction::Rename, "gBluePotionMana", "gEnhancements.BluePotionMana" }, { MigrationAction::Rename, "gBombchuBowlingAmmunition", "gEnhancements.BombchuBowlingAmmo" }, { MigrationAction::Rename, "gBombchuBowlingNoBigCucco", "gEnhancements.BombchuBowlingNoBigCucco" }, { MigrationAction::Rename, "gBombchuBowlingNoSmallCucco", "gEnhancements.BombchuBowlingNoSmallCucco" }, @@ -205,12 +200,6 @@ namespace SOH { { MigrationAction::Rename, "gEnemySpawnsOverWaterboxes", "gEnhancements.EnemySpawnsOverWaterboxes" }, { MigrationAction::Rename, "gEquipmentCanBeRemoved", "gEnhancements.EquipmentCanBeRemoved" }, { MigrationAction::Rename, "gFPSGauntlets", "gEnhancements.FirstPersonGauntlets" }, - { MigrationAction::Rename, "gFairyEffect", "gEnhancements.FairyEffect" }, - { MigrationAction::Rename, "gFairyHealth", "gEnhancements.FairyHealth" }, - { MigrationAction::Rename, "gFairyPercentRestore", "gEnhancements.FairyPercentRestore" }, - { MigrationAction::Rename, "gFairyReviveEffect", "gEnhancements.FairyReviveEffect" }, - { MigrationAction::Rename, "gFairyReviveHealth", "gEnhancements.FairyReviveHealth" }, - { MigrationAction::Rename, "gFairyRevivePercentRestore", "gEnhancements.FairyRevivePercentRestore" }, { MigrationAction::Rename, "gFallDamageMul", "gEnhancements.FallDamageMult" }, { MigrationAction::Rename, "gFastBoomerang", "gEnhancements.FastBoomerang" }, { MigrationAction::Rename, "gFastChests", "gEnhancements.FastChests" }, @@ -235,14 +224,9 @@ namespace SOH { { MigrationAction::Rename, "gGerudoWarriorClothingFix", "gEnhancements.GerudoWarriorClothingFix" }, { MigrationAction::Rename, "gGoronPot", "gEnhancements.GoronPot" }, { MigrationAction::Rename, "gGravediggingTourFix", "gEnhancements.GravediggingTourFix" }, - { MigrationAction::Rename, "gGreenPercentRestore", "gEnhancements.GreenPercentRestore" }, - { MigrationAction::Rename, "gGreenPotionEffect", "gEnhancements.GreenPotionEffect" }, - { MigrationAction::Rename, "gGreenPotionMana", "gEnhancements.GreenPotionMana" }, { MigrationAction::Rename, "gGsCutscene", "gEnhancements.GSCutscene" }, { MigrationAction::Rename, "gGuaranteeFishingBite", "gEnhancements.GuaranteeFishingBite" }, { MigrationAction::Rename, "gGuardVision", "gEnhancements.GuardVision" }, - { MigrationAction::Rename, "gHalfMilkHealth", "gEnhancements.HalfMilkHealth" }, - { MigrationAction::Rename, "gHalfMilkPercentRestore", "gEnhancements.HalfMilkPercentRestore" }, { MigrationAction::Rename, "gHideBunnyHood", "gEnhancements.HideBunnyHood" }, { MigrationAction::Rename, "gHookshotableReticle", "gEnhancements.HookshotableReticle" }, { MigrationAction::Rename, "gHoverFishing", "gEnhancements.HoverFishing" }, @@ -259,9 +243,6 @@ namespace SOH { { MigrationAction::Rename, "gMMBunnyHood", "gEnhancements.MMBunnyHood" }, { MigrationAction::Rename, "gMarketSneak", "gEnhancements.MarketSneak" }, { MigrationAction::Rename, "gMaskSelect", "gEnhancements.MaskSelect" }, - { MigrationAction::Rename, "gMilkEffect", "gEnhancements.MilkEffect" }, - { MigrationAction::Rename, "gMilkHealth", "gEnhancements.MilkHealth" }, - { MigrationAction::Rename, "gMilkPercentRestore", "gEnhancements.MilkPercentRestore" }, { MigrationAction::Rename, "gMinFrameCount", "gEnhancements.MinFrameCount" }, { MigrationAction::Rename, "gMinimalUI", "gEnhancements.MinimalUI" }, { MigrationAction::Rename, "gMirroredWorldMode", "gEnhancements.MirroredWorldMode" }, @@ -291,16 +272,12 @@ namespace SOH { { MigrationAction::Rename, "gRandomizedEnemies", "gEnhancements.RandomizedEnemies" }, { MigrationAction::Rename, "gRandomizedEnemySizes", "gEnhancements.RandomizedEnemySizes" }, { MigrationAction::Rename, "gRedGanonBlood", "gEnhancements.RedGanonBlood" }, - { MigrationAction::Rename, "gRedPercentRestore", "gEnhancements.RedPercentRestore" }, - { MigrationAction::Rename, "gRedPotionEffect", "gEnhancements.RedPotionEffect" }, - { MigrationAction::Rename, "gRedPotionHealth", "gEnhancements.RedPotionHealth" }, { MigrationAction::Rename, "gRememberSaveLocation", "gEnhancements.RememberSaveLocation" }, { MigrationAction::Rename, "gRemoveExplosiveLimit", "gEnhancements.RemoveExplosiveLimit" }, { MigrationAction::Rename, "gRestoreRBAValues", "gEnhancements.RestoreRBAValues" }, { MigrationAction::Rename, "gRupeeDash", "gEnhancements.RupeeDash" }, { MigrationAction::Rename, "gSceneSpecificDirtPathFix", "gEnhancements.SceneSpecificDirtPathFix" }, { MigrationAction::Rename, "gSeparateArrows", "gEnhancements.SeparateArrows" }, - { MigrationAction::Rename, "gSeparateHalfMilkEffect", "gEnhancements.SeparateHalfMilkEffect" }, { MigrationAction::Rename, "gShadowTag", "gEnhancements.ShadowTag" }, { MigrationAction::Rename, "gShowDoorLocksOnBothSides", "gEnhancements.ShowDoorLocksOnBothSides" }, { MigrationAction::Rename, "gSilverRupeeJingleExtend", "gEnhancements.SilverRupeeJingleExtend" }, diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 77b4a7e27..8141a8942 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -9468,16 +9468,7 @@ void func_80843AE8(PlayState* play, Player* this) { LinkAnimation_Change(play, &this->skelAnime, &gPlayerAnim_link_derth_rebirth, 1.0f, 99.0f, Animation_GetLastFrame(&gPlayerAnim_link_derth_rebirth), ANIMMODE_ONCE, 0.0f); } - if (CVarGetInteger(CVAR_ENHANCEMENT("FairyReviveEffect"), 0)) { - if (CVarGetInteger(CVAR_ENHANCEMENT("FairyRevivePercentRestore"), 0)) { - gSaveContext.healthAccumulator = - (gSaveContext.healthCapacity * CVarGetInteger(CVAR_ENHANCEMENT("FairyReviveHealth"), 100) / 100 + 15) / 16 * 16; - } else { - gSaveContext.healthAccumulator = CVarGetInteger(CVAR_ENHANCEMENT("FairyReviveHealth"), 20) * 16; - } - } else { - gSaveContext.healthAccumulator = 0x140; - } + gSaveContext.healthAccumulator = 0x140; this->av2.actionVar2 = -1; } } else if (gSaveContext.healthAccumulator == 0) { @@ -14481,13 +14472,13 @@ void Player_Action_8084E9AC(Player* this, PlayState* play) { } } -static u8 D_808549FC[] = { - 0x01, 0x03, 0x02, 0x04, 0x04, -}; - void Player_Action_8084EAC0(Player* this, PlayState* play) { if (LinkAnimation_Update(play, &this->skelAnime)) { if (this->av2.actionVar2 == 0) { + static u8 D_808549FC[] = { + 0x01, 0x03, 0x02, 0x04, 0x04, + }; + if (this->itemAction == PLAYER_IA_BOTTLE_POE) { s32 rand = Rand_S16Offset(-1, 3); @@ -14507,98 +14498,25 @@ void Player_Action_8084EAC0(Player* this, PlayState* play) { } else { s32 sp28 = D_808549FC[this->itemAction - PLAYER_IA_BOTTLE_POTION_RED]; - if (CVarGetInteger(CVAR_ENHANCEMENT("RedPotionEffect"), 0) && this->itemAction == PLAYER_IA_BOTTLE_POTION_RED) { - if (CVarGetInteger(CVAR_ENHANCEMENT("RedPercentRestore"), 0)) { - gSaveContext.healthAccumulator = - (gSaveContext.healthCapacity * CVarGetInteger(CVAR_ENHANCEMENT("RedPotionHealth"), 100) / 100 + 15) / 16 * 16; - } else { - gSaveContext.healthAccumulator = CVarGetInteger(CVAR_ENHANCEMENT("RedPotionHealth"), 20) * 16; - } - } else if (CVarGetInteger(CVAR_ENHANCEMENT("BluePotionEffects"), 0) && - this->itemAction == PLAYER_IA_BOTTLE_POTION_BLUE) { - if (CVarGetInteger(CVAR_ENHANCEMENT("BlueHealthPercentRestore"), 0)) { - gSaveContext.healthAccumulator = - (gSaveContext.healthCapacity * CVarGetInteger(CVAR_ENHANCEMENT("BluePotionHealth"), 100) / 100 + 15) / 16 * 16; - } else { - gSaveContext.healthAccumulator = CVarGetInteger(CVAR_ENHANCEMENT("BluePotionHealth"), 20) * 16; - } + if (sp28 & 1) { + gSaveContext.healthAccumulator = 0x140; + } - if (CVarGetInteger(CVAR_ENHANCEMENT("BlueManaPercentRestore"), 0)) { - if (gSaveContext.magicState != MAGIC_STATE_ADD) { - Magic_Fill(play); - } + if (sp28 & 2) { + Magic_Fill(play); + } - Magic_RequestChange(play, - (gSaveContext.magicLevel * 48 * CVarGetInteger(CVAR_ENHANCEMENT("BluePotionMana"), 100) / 100 + 15) / - 16 * 16, - MAGIC_ADD); - } else { - if (gSaveContext.magicState != MAGIC_STATE_ADD) { - Magic_Fill(play); - } - - Magic_RequestChange(play, CVarGetInteger(CVAR_ENHANCEMENT("BluePotionMana"), 100), MAGIC_ADD); - ; - } - } else if (CVarGetInteger(CVAR_ENHANCEMENT("GreenPotionEffect"), 0) && - this->itemAction == PLAYER_IA_BOTTLE_POTION_GREEN) { - if (CVarGetInteger(CVAR_ENHANCEMENT("GreenPercentRestore"), 0)) { - if (gSaveContext.magicState != MAGIC_STATE_ADD) { - Magic_Fill(play); - } - - Magic_RequestChange(play, - (gSaveContext.magicLevel * 48 * CVarGetInteger(CVAR_ENHANCEMENT("GreenPotionMana"), 100) / 100 + 15) / - 16 * 16, - MAGIC_ADD); - } else { - if (gSaveContext.magicState != MAGIC_STATE_ADD) { - Magic_Fill(play); - } - - Magic_RequestChange(play, CVarGetInteger(CVAR_ENHANCEMENT("GreenPotionMana"), 100), MAGIC_ADD); - ; - } - } else if (CVarGetInteger(CVAR_ENHANCEMENT("MilkEffect"), 0) && (this->itemAction == PLAYER_IA_BOTTLE_MILK_FULL || - this->itemAction == PLAYER_IA_BOTTLE_MILK_HALF)) { - if (CVarGetInteger(CVAR_ENHANCEMENT("MilkPercentRestore"), 0)) { - gSaveContext.healthAccumulator = - (gSaveContext.healthCapacity * CVarGetInteger(CVAR_ENHANCEMENT("MilkHealth"), 100) / 100 + 15) / 16 * 16; - } else { - gSaveContext.healthAccumulator = CVarGetInteger(CVAR_ENHANCEMENT("MilkHealth"), 5) * 16; - } - if (CVarGetInteger(CVAR_ENHANCEMENT("SeparateHalfMilkEffect"), 0) && - this->itemAction == PLAYER_IA_BOTTLE_MILK_HALF) { - if (CVarGetInteger(CVAR_ENHANCEMENT("HalfMilkPercentRestore"), 0)) { - gSaveContext.healthAccumulator = - (gSaveContext.healthCapacity * CVarGetInteger(CVAR_ENHANCEMENT("HalfMilkHealth"), 100) / 100 + 15) / 16 * - 16; - } else { - gSaveContext.healthAccumulator = CVarGetInteger(CVAR_ENHANCEMENT("HalfMilkHealth"), 5) * 16; - } - } - } else { - if (sp28 & 1) { - gSaveContext.healthAccumulator = 0x140; - } - - if (sp28 & 2) { - Magic_Fill(play); - } - - if (sp28 & 4) { - gSaveContext.healthAccumulator = 0x50; - } + if (sp28 & 4) { + gSaveContext.healthAccumulator = 0x50; } } Player_AnimPlayLoopAdjusted(play, this, &gPlayerAnim_link_bottle_drink_demo_wait); this->av2.actionVar2 = 1; - return; + } else { + func_8083C0E8(this, play); + func_8005B1A4(Play_GetCamera(play, 0)); } - - func_8083C0E8(this, play); - func_8005B1A4(Play_GetCamera(play, 0)); } else if (this->av2.actionVar2 == 1) { if ((gSaveContext.healthAccumulator == 0) && (gSaveContext.magicState != MAGIC_STATE_FILL)) { Player_AnimChangeOnceMorphAdjusted(play, this, &gPlayerAnim_link_bottle_drink_demo_end); @@ -14724,16 +14642,7 @@ void Player_Action_8084EED8(Player* this, PlayState* play) { Player_PlaySfx(this, NA_SE_EV_BOTTLE_CAP_OPEN); Player_PlaySfx(this, NA_SE_EV_FIATY_HEAL - SFX_FLAG); } else if (LinkAnimation_OnFrame(&this->skelAnime, 47.0f)) { - if (CVarGetInteger(CVAR_ENHANCEMENT("FairyEffect"), 0)) { - if (CVarGetInteger(CVAR_ENHANCEMENT("FairyPercentRestore"), 0)) { - gSaveContext.healthAccumulator = - (gSaveContext.healthCapacity * CVarGetInteger(CVAR_ENHANCEMENT("FairyHealth"), 100) / 100 + 15) / 16 * 16; - } else { - gSaveContext.healthAccumulator = CVarGetInteger(CVAR_ENHANCEMENT("FairyHealth"), 8) * 16; - } - } else { - gSaveContext.healthAccumulator = 0x140; - } + gSaveContext.healthAccumulator = 0x140; } } From 29cecd8502d3a5d7a60c41dd5a9ccec616017bef Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Sun, 9 Feb 2025 08:49:56 -0800 Subject: [PATCH 32/68] fix dark link softlock (#5027) --- soh/soh/Enhancements/AssignableTunicsAndBoots.cpp | 13 +++++++++++-- .../vanilla-behavior/GIVanillaBehavior.h | 1 + soh/src/overlays/actors/ovl_player_actor/z_player.c | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp b/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp index a7e210b95..3a52312c9 100644 --- a/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp +++ b/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp @@ -94,10 +94,19 @@ void RegisterAssignableTunicsBoots() { return; } - Input* input = va_arg(args, Input*); - Player* player = GET_PLAYER(gPlayState); + Player* player = va_arg(args, Player*); + + // if we're not dealing with the actual player, we're probably + // dealing with dark link, don't do any tunics/boots stuff, just + // run the vanilla action func + if (player->actor.id != ACTOR_PLAYER) { + return; + } *should = false; + + Input* input = va_arg(args, Input*); + player->actionFunc(player, gPlayState); UseTunicBoots(player, gPlayState, input); }); diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index 4974baf5b..56679f976 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -398,6 +398,7 @@ typedef enum { // !(this->stateFlags3 & PLAYER_STATE3_PAUSE_ACTION_FUNC) // ``` // #### `args` + // - `*Player` // - `*Input` VB_EXECUTE_PLAYER_ACTION_FUNC, diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 8141a8942..3db05d94e 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -12166,7 +12166,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { sUseHeldItem = sHeldItemButtonIsHeldDown = 0; sSavedCurrentMask = this->currentMask; - if (GameInteractor_Should(VB_EXECUTE_PLAYER_ACTION_FUNC, !(this->stateFlags3 & PLAYER_STATE3_PAUSE_ACTION_FUNC), input)) { + if (GameInteractor_Should(VB_EXECUTE_PLAYER_ACTION_FUNC, !(this->stateFlags3 & PLAYER_STATE3_PAUSE_ACTION_FUNC), this, input)) { this->actionFunc(this, play); } From a7f837014f0fc7eb8e4ec75dca49efad34fa9c99 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Sun, 9 Feb 2025 09:58:27 -0800 Subject: [PATCH 33/68] fix dark link not getting hit when stunned (#5028) in https://github.com/HarbourMasters/Shipwright/pull/3280 both `0x00400000` and `0x04000000` were replaced with `PLAYER_STATE1_SHIELDING`. `0x00400000` is `PLAYER_STATE1_SHIELDING`, but `0x04000000` is `PLAYER_STATE1_DAMAGED` this fixes the spots in `z_en_torch2` where we had `PLAYER_STATE1_SHIELDING` where it should have been `PLAYER_STATE1_DAMAGED` --- soh/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/soh/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c b/soh/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c index 0b6f16c59..378e93bb6 100644 --- a/soh/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c +++ b/soh/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c @@ -608,7 +608,7 @@ void EnTorch2_Update(Actor* thisx, PlayState* play2) { sDeathFlag = false; } if ((this->invincibilityTimer == 0) && (this->actor.colChkInfo.health != 0) && - (this->cylinder.base.acFlags & AC_HIT) && !(this->stateFlags1 & PLAYER_STATE1_SHIELDING) && + (this->cylinder.base.acFlags & AC_HIT) && !(this->stateFlags1 & PLAYER_STATE1_DAMAGED) && !(this->meleeWeaponQuads[0].base.atFlags & AT_HIT) && !(this->meleeWeaponQuads[1].base.atFlags & AT_HIT)) { if (!Actor_ApplyDamage(&this->actor)) { @@ -660,7 +660,7 @@ void EnTorch2_Update(Actor* thisx, PlayState* play2) { this->stateFlags3 &= ~PLAYER_STATE3_PAUSE_ACTION_FUNC; } else { this->stateFlags3 |= PLAYER_STATE3_PAUSE_ACTION_FUNC; - this->stateFlags1 &= ~PLAYER_STATE1_SHIELDING; + this->stateFlags1 &= ~PLAYER_STATE1_DAMAGED; this->invincibilityTimer = 0; input->press.stick_x = input->press.stick_y = 0; /*! @bug From ac72ebaaa331000e84293f53d84c94774538ea82 Mon Sep 17 00:00:00 2001 From: Garrett Cox Date: Tue, 11 Feb 2025 08:56:48 -0600 Subject: [PATCH 34/68] Fix issue with pause buffer input window not applying correctly to closing save prompt state and move code around to be in order of operations (#4975) --- .../Restorations/PauseBufferInputs.cpp | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/soh/soh/Enhancements/Restorations/PauseBufferInputs.cpp b/soh/soh/Enhancements/Restorations/PauseBufferInputs.cpp index 4604c00ca..373d481ef 100644 --- a/soh/soh/Enhancements/Restorations/PauseBufferInputs.cpp +++ b/soh/soh/Enhancements/Restorations/PauseBufferInputs.cpp @@ -25,20 +25,22 @@ static u16 pauseInputs = 0; #define PAUSE_STATE_OFF 0 #define PAUSE_STATE_OPENING_1 2 #define PAUSE_STATE_UNPAUSE_SETUP 18 +#define PAUSE_STATE_SAVEPROMPT 7 void RegisterPauseBufferInputs() { COND_VB_SHOULD(VB_KALEIDO_UNPAUSE_CLOSE, CVAR_BUFFER_VALUE || CVAR_INCLUDE_VALUE, { Input* input = &gPlayState->state.input[0]; - // Store all inputs that were pressed during the buffer window - pauseInputs |= input->press.button; - - // If the user opts to include held inputs in the buffer window, store the held inputs, minus the held inputs when the pause menu was opened + // STEP #3: If the user opts to include held inputs in the buffer window, store the currnently held inputs, minus + // the held inputs when the pause menu was opened. This only applies to the first frame of the buffer window if (CVAR_INCLUDE_VALUE && inputBufferTimer == 0) { pauseInputs |= input->cur.button & ~prePauseInputs; prePauseInputs = 0; } + // STEP #4: Store all inputs that were pressed during the buffer window + pauseInputs |= input->press.button; + // Wait a specified number of frames before continuing the unpause inputBufferTimer++; if (inputBufferTimer < CVAR_BUFFER_VALUE) { @@ -54,10 +56,21 @@ void RegisterPauseBufferInputs() { Input* input = &gPlayState->state.input[0]; PauseContext* pauseCtx = &gPlayState->pauseCtx; - // if the input buffer timer is not 0 and the pause state is off, then the player just unpaused - if (inputBufferTimer != 0 && pauseCtx->state == PAUSE_STATE_OFF) { - inputBufferTimer = 0; + // STEP #1: If the user opts to include held inputs in the buffer window, store the held inputs at the beginning + // of the pause process, minus the START input + if (pauseCtx->state == PAUSE_STATE_OPENING_1 && CVAR_INCLUDE_VALUE) { + prePauseInputs = input->cur.button & ~BTN_START; + } + // STEP #2: The unpause process has begun, so let's reset the input buffer timer + if (pauseCtx->state == PAUSE_STATE_UNPAUSE_SETUP || ( + pauseCtx->state == PAUSE_STATE_SAVEPROMPT && (pauseCtx->unk_1EC == 2 || pauseCtx->unk_1EC == 5) + )) { + inputBufferTimer = 0; + } + + // STEP #5: If the input buffer timer is not 0 and the pause state is off, then the player just unpaused + if (inputBufferTimer != 0 && pauseCtx->state == PAUSE_STATE_OFF) { // If the user opts into easy frame advance, remove START input if (CVAR_FRAME_ADVANCE_VALUE) { pauseInputs &= ~BTN_START; @@ -65,17 +78,10 @@ void RegisterPauseBufferInputs() { // So we need to re-apply the inputs that were pressed during the buffer window input->press.button |= pauseInputs; - } - // Reset the timer and stored inputs at the beginning of the unpause process - if (pauseCtx->state == PAUSE_STATE_UNPAUSE_SETUP && pauseCtx->unk_1F4 != 160.0f) { - inputBufferTimer = 0; + // Reset the used variables pauseInputs = 0; - } - - // If the user opts to include held inputs in the buffer window, store the held inputs at the beginning of the pause process, minus the START input - if (pauseCtx->state == PAUSE_STATE_OPENING_1 && CVAR_INCLUDE_VALUE) { - prePauseInputs = input->cur.button & ~BTN_START; + inputBufferTimer = 0; } }); } From f5fa0f4e00c010afa99b7ba074d3463fa8bae695 Mon Sep 17 00:00:00 2001 From: Sarge-117 <108380086+Sarge-117@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:18:16 -0800 Subject: [PATCH 35/68] fix typo (#5036) --- soh/soh/Enhancements/randomizer/3drando/hint_list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp index fd1f5ae4d..3081d4863 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp @@ -2393,7 +2393,7 @@ void StaticData::HintTable_Init() { /*french*/ "J'admire ce que tu as fait à l'Île Koholint... Toi et moi, nous devrions faire équipe!")); // /*spanish*/Después de lo que le hiciste a la Isla Koholint, ¿cómo te atreves a llamarme malvado? - hintTextTable[RHT_GANON_JOKE10] = HintText(CustomMessage("Today, let's begin down&'The Hero is Defeated' timeline.", + hintTextTable[RHT_GANON_JOKE11] = HintText(CustomMessage("Today, let's begin down&'The Hero is Defeated' timeline.", /*german*/ "", /*french*/ "Si tu me vaincs, Hyrule sera englouti... mais si tu meurs, on aura A Link to the Past, le meilleur opus " "de la série!")); From 46c6d2f5261f78a22365549494db1cfef2625164 Mon Sep 17 00:00:00 2001 From: Archez Date: Tue, 11 Feb 2025 16:36:12 -0500 Subject: [PATCH 36/68] Restore pause link drawing behavior to use the work buffer (#5038) --- soh/src/code/z_player_lib.c | 44 ++++++++++++------- .../ovl_kaleido_scope/z_kaleido_equipment.c | 9 +++- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index af6062723..dd15a4932 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -2141,12 +2141,11 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, // Note: the viewport x and y values are overwritten below, before usage static Vp viewport = { (PAUSE_EQUIP_PLAYER_WIDTH / 2) << 2, (PAUSE_EQUIP_PLAYER_HEIGHT / 2) << 2, G_MAXZ / 2, 0, (PAUSE_EQUIP_PLAYER_WIDTH / 2) << 2, (PAUSE_EQUIP_PLAYER_HEIGHT / 2) << 2, G_MAXZ / 2, 0 }; - static Lights1 lights1 = gdSPDefLights1(80, 80, 80, 255, 255, 255, 84, 84, 172); + static Lights1 lights1 = gdSPDefLights1(80, 80, 80, 255, 255, 255, 84, 84, -84); static Vec3f lightDir = { 89.8f, 0.0f, 89.8f }; u8 playerSwordAndShield[2]; Gfx* opaRef; Gfx* xluRef; - Gfx* kalRef; u16 perspNorm; Mtx* perspMtx = Graph_Alloc(play->state.gfxCtx, sizeof(Mtx)); Mtx* lookAtMtx = Graph_Alloc(play->state.gfxCtx, sizeof(Mtx)); @@ -2155,8 +2154,18 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, OPEN_DISPS(play->state.gfxCtx); + opaRef = POLY_OPA_DISP; + POLY_OPA_DISP++; + + xluRef = POLY_XLU_DISP; + POLY_XLU_DISP++; + + gSPDisplayList(WORK_DISP++, POLY_OPA_DISP); + gSPDisplayList(WORK_DISP++, POLY_XLU_DISP); + if (mirrorWorldActive) { gSPSetExtraGeometryMode(POLY_OPA_DISP++, G_EX_INVERT_CULLING); + gSPSetExtraGeometryMode(POLY_XLU_DISP++, G_EX_INVERT_CULLING); } gSPSegment(POLY_OPA_DISP++, 0x00, NULL); @@ -2170,7 +2179,14 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_PERSP | G_CYC_FILL | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); - gSPLoadGeometryMode(POLY_OPA_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH); + + // Also matches if some of the previous graphics commands are moved inside this block too. Possible macro? + if (1) { + s32 pad[2]; + + gSPLoadGeometryMode(POLY_OPA_DISP++, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH); + } + gDPSetScissor(POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, width, height); gSPClipRatio(POLY_OPA_DISP++, FRUSTRATIO_1); @@ -2192,8 +2208,8 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, gDPSetDepthImage(POLY_OPA_DISP++, depthFrameBuffer); - viewport.vp.vscale[0] = viewport.vp.vtrans[0] = width * 2; - viewport.vp.vscale[1] = viewport.vp.vtrans[1] = height * 2; + viewport.vp.vscale[0] = viewport.vp.vtrans[0] = width * ((1 << 2) / 2); + viewport.vp.vscale[1] = viewport.vp.vtrans[1] = height * ((1 << 2) / 2); gSPViewport(POLY_OPA_DISP++, &viewport); guPerspective(perspMtx, &perspNorm, fovy, (f32)width / (f32)height, 10.0f, 4000.0f, 1.0f); @@ -2226,28 +2242,26 @@ void Player_DrawPauseImpl(PlayState* play, void* gameplayKeep, void* linkObject, gSPSegment(POLY_OPA_DISP++, 0x0C, gCullBackDList); Player_DrawImpl(play, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount, 0, tunic, boots, 0, - Player_OverrideLimbDrawPause, NULL, &playerSwordAndShield); - - if (CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0)) { + Player_OverrideLimbDrawPause, NULL, &playerSwordAndShield); + if (CVarGetInteger(CVAR_GENERAL("PauseMenuAnimatedLinkTriforce"), 0)) { Matrix_SetTranslateRotateYXZ(pos->x - (LINK_AGE_IN_YEARS == YEARS_ADULT ? 25 : 0), pos->y + 280 + (LINK_AGE_IN_YEARS == YEARS_ADULT ? 48 : 0), pos->z, rot); Matrix_Scale(scale * (mirrorWorldActive ? -1 : 1), scale * 1, scale * 1, MTXMODE_APPLY); - Gfx* ohNo = POLY_XLU_DISP; - POLY_XLU_DISP = POLY_OPA_DISP; - Pause_DrawTriforceSpot(play, 1); - - POLY_OPA_DISP = POLY_XLU_DISP; - POLY_XLU_DISP = ohNo; } if (mirrorWorldActive) { gSPClearExtraGeometryMode(POLY_OPA_DISP++, G_EX_INVERT_CULLING); + gSPClearExtraGeometryMode(POLY_XLU_DISP++, G_EX_INVERT_CULLING); } - POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP++); + gSPEndDisplayList(POLY_OPA_DISP++); + gSPEndDisplayList(POLY_XLU_DISP++); + + gSPBranchList(opaRef, POLY_OPA_DISP); + gSPBranchList(xluRef, POLY_XLU_DISP); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c index 5fd8aa2b5..5ed5bdbaa 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c @@ -148,7 +148,10 @@ void KaleidoScope_DrawPlayerWork(PlayState* play) { scale = 0.047f; } - gsSPSetFB(play->state.gfxCtx->polyOpa.p++, gPauseLinkFrameBuffer); + // SOH [Port] Draw the pause Link on a separate framebuffer starting in the work buffer + OPEN_DISPS(play->state.gfxCtx); + gsSPSetFB(WORK_DISP++, gPauseLinkFrameBuffer); + rot.y = 32300; rot.x = rot.z = 0; Player_DrawPause(play, pauseCtx->playerSegment, &pauseCtx->playerSkelAnime, &pos, &rot, scale, @@ -156,7 +159,9 @@ void KaleidoScope_DrawPlayerWork(PlayState* play) { TUNIC_EQUIP_TO_PLAYER(CUR_EQUIP_VALUE(EQUIP_TYPE_TUNIC)), SHIELD_EQUIP_TO_PLAYER(CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD)), BOOTS_EQUIP_TO_PLAYER(CUR_EQUIP_VALUE(EQUIP_TYPE_BOOTS))); - gsSPResetFB(play->state.gfxCtx->polyOpa.p++); + + gsSPResetFB(WORK_DISP++); + CLOSE_DISPS(play->state.gfxCtx); } void KaleidoScope_DrawEquipment(PlayState* play) { From 37fd39c7b500b7742d8e4a0f3df80053760a4fed Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Wed, 12 Feb 2025 06:32:40 -0800 Subject: [PATCH 37/68] shipinit dont show master sword (#4989) * Initial Commit * Added full functionality for both Hylian and Mirror * Included Format * Removed Format * Pedestal Cutscene * Much Less OnGameUpdating * Fix function call * use enums * move animation skip to vb should * move taking out master sword to put in pedestal check into vb should * move the rest of it over * extra newline was bugging me * update on `"IS_RANDO"` and use `COND`s * make new "uncategorized" section for VB enum * move shoulds to new file * move vb rsk checks into conds --------- Co-authored-by: Patrick12115 Co-authored-by: Malkierian --- .../Enhancements/cosmetics/NoMasterSword.cpp | 113 ++++++++++++++++++ .../vanilla-behavior/GIVanillaBehavior.h | 16 +++ .../actors/ovl_player_actor/z_player.c | 6 +- 3 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 soh/soh/Enhancements/cosmetics/NoMasterSword.cpp diff --git a/soh/soh/Enhancements/cosmetics/NoMasterSword.cpp b/soh/soh/Enhancements/cosmetics/NoMasterSword.cpp new file mode 100644 index 000000000..4d4b26715 --- /dev/null +++ b/soh/soh/Enhancements/cosmetics/NoMasterSword.cpp @@ -0,0 +1,113 @@ +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/ShipInit.hpp" +#include "soh/OTRGlobals.h" +#include "soh/ResourceManagerHelpers.h" +#include "objects/object_link_boy/object_link_boy.h" + +extern "C" { +#include "functions.h" +#include "macros.h" +#include "variables.h" + +extern PlayState* gPlayState; +extern void Player_StartMode_Idle(PlayState*, Player*); +extern u8 Randomizer_GetSettingValue(RandomizerSettingKey); +} + +void UpdateNoMSPatch() { + // Condition for patching + bool shouldPatch = (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER && + gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BGS && + gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KNIFE && + (gSaveContext.equips.buttonItems[0] != ITEM_FISHING_POLE || + (!CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER) && + !CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON) && + !CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)))); + + if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MASTER_SWORD) && shouldPatch) { + // Patching if conditions are met + for (int i = 43; i <= 46; i++) { + std::string patchName = "adultNoMS." + std::to_string(1) + "." + std::to_string(i); + ResourceMgr_PatchGfxByName(gLinkAdultHylianShieldSwordAndSheathFarDL, patchName.c_str(), i, gsDPNoOp()); + } + for (int i = 62; i <= 150; i++) { + std::string patchName = "adultNoMS." + std::to_string(2) + "." + std::to_string(i); + ResourceMgr_PatchGfxByName(gLinkAdultMirrorShieldSwordAndSheathNearDL, patchName.c_str(), i, gsDPNoOp()); + } + for (int i = 61; i <= 118; i++) { + std::string patchName = "adultNoMS." + std::to_string(3) + "." + std::to_string(i); + ResourceMgr_PatchGfxByName(gLinkAdultMirrorShieldSwordAndSheathFarDL, patchName.c_str(), i, gsDPNoOp()); + } + ResourceMgr_PatchGfxByName(gLinkAdultHylianShieldSwordAndSheathNearDL, "adultNoMSHylianShield1", 75, gsSPEndDisplayList()); + ResourceMgr_PatchGfxByName(gLinkAdultHylianShieldSwordAndSheathFarDL, "adultNoMSHylianShield2", 71, gsSPEndDisplayList()); + ResourceMgr_PatchGfxByName(gLinkAdultMasterSwordAndSheathNearDL, "adultNoMasterSword1", 2, gsSPEndDisplayList()); + ResourceMgr_PatchGfxByName(gLinkAdultMasterSwordAndSheathFarDL, "adultNoMasterSword2", 2, gsSPEndDisplayList()); + } else { + // Unpatching if conditions are not met + for (int i = 43; i <= 46; i++) { + std::string patchName = "adultNoMS." + std::to_string(1) + "." + std::to_string(i); + ResourceMgr_UnpatchGfxByName(gLinkAdultHylianShieldSwordAndSheathFarDL, patchName.c_str()); + } + for (int i = 62; i <= 150; i++) { + std::string patchName = "adultNoMS." + std::to_string(2) + "." + std::to_string(i); + ResourceMgr_UnpatchGfxByName(gLinkAdultMirrorShieldSwordAndSheathNearDL, patchName.c_str()); + } + for (int i = 61; i <= 118; i++) { + std::string patchName = "adultNoMS." + std::to_string(3) + "." + std::to_string(i); + ResourceMgr_UnpatchGfxByName(gLinkAdultMirrorShieldSwordAndSheathFarDL, patchName.c_str()); + } + ResourceMgr_UnpatchGfxByName(gLinkAdultHylianShieldSwordAndSheathNearDL, "adultNoMSHylianShield1"); + ResourceMgr_UnpatchGfxByName(gLinkAdultHylianShieldSwordAndSheathFarDL, "adultNoMSHylianShield2"); + ResourceMgr_UnpatchGfxByName(gLinkAdultMasterSwordAndSheathNearDL, "adultNoMasterSword1"); + ResourceMgr_UnpatchGfxByName(gLinkAdultMasterSwordAndSheathFarDL, "adultNoMasterSword2"); + } +} + +// copied from z_player (right above Player_StartMode_TimeTravel) +static Vec3f D_808546F4 = { -1.0f, 69.0f, 20.0f }; + +#define MASTER_SWORD_SHUFFLED (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MASTER_SWORD) != 0) + +void RegisterNoMasterSword() { + // don't show link taking out master sword to put in pedestal when we don't have a master sword + COND_VB_SHOULD(VB_SHOW_MASTER_SWORD_TO_PLACE_IN_PEDESTAL, IS_RANDO && MASTER_SWORD_SHUFFLED, { + // if the vanilla condition is false respect it + if (!*should) { + return; + } + + if (!CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER)) { + *should = false; + } + }); + + // skip post pedestal animation when we don't have a master sword + COND_VB_SHOULD(VB_EXECUTE_PLAYER_STARTMODE_FUNC, IS_RANDO && MASTER_SWORD_SHUFFLED, { + int32_t startMode = va_arg(args, int32_t); + Player* player = GET_PLAYER(gPlayState); + + if (startMode == PLAYER_START_MODE_TIME_TRAVEL && !CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER)) { + // don't run the vanilla startMode func + *should = false; + + // position link correctly + Math_Vec3f_Copy(&player->actor.world.pos, &D_808546F4); + player->yaw = player->actor.shape.rot.y = -0x8000; + + // execute the idle startMode func + Player_StartMode_Idle(gPlayState, player); + } + }); + + COND_HOOK(OnPlayerUpdate, IS_RANDO, []{ + static uint16_t lastItemOnB = gSaveContext.equips.buttonItems[0]; + if (lastItemOnB != gSaveContext.equips.buttonItems[0]) { + UpdateNoMSPatch(); + lastItemOnB = gSaveContext.equips.buttonItems[0]; + } + }); + + COND_HOOK(OnSceneSpawnActors, IS_RANDO, UpdateNoMSPatch); +} + +static RegisterShipInitFunc initFunc(RegisterNoMasterSword, { "IS_RANDO" }); diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index 56679f976..e1457db4a 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -402,6 +402,14 @@ typedef enum { // - `*Input` VB_EXECUTE_PLAYER_ACTION_FUNC, + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `int32_t` (startMode) + VB_EXECUTE_PLAYER_STARTMODE_FUNC, + // #### `result` // ```c // true @@ -1647,6 +1655,14 @@ typedef enum { // - `*VBFishingData` VB_SHOULD_SET_FISHING_RECORD, + // #### `result` + // ```c + // (interactedActor->id == ACTOR_BG_TOKI_SWD) && LINK_IS_ADULT + // ``` + // #### `args` + // - None + VB_SHOW_MASTER_SWORD_TO_PLACE_IN_PEDESTAL, + // #### `result` // ```c // gSaveContext.showTitleCard diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 3db05d94e..d8475c75d 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -7381,7 +7381,7 @@ s32 Player_ActionHandler_2(Player* this, PlayState* play) { } if ((this->heldActor == NULL) || Player_HoldsHookshot(this)) { - if ((interactedActor->id == ACTOR_BG_TOKI_SWD) && LINK_IS_ADULT) { + if (GameInteractor_Should(VB_SHOW_MASTER_SWORD_TO_PLACE_IN_PEDESTAL, (interactedActor->id == ACTOR_BG_TOKI_SWD) && LINK_IS_ADULT)) { s32 sp24 = this->itemAction; this->itemAction = PLAYER_IA_NONE; @@ -10853,7 +10853,9 @@ void Player_Init(Actor* thisx, PlayState* play2) { } } - sStartModeFuncs[startMode](play, this); + if (GameInteractor_Should(VB_EXECUTE_PLAYER_STARTMODE_FUNC, true, startMode)) { + sStartModeFuncs[startMode](play, this); + } if (startMode != PLAYER_START_MODE_NOTHING) { if ((gSaveContext.gameMode == 0) || (gSaveContext.gameMode == 3)) { From 126c3b532fccd5be62094614fb80ea5c274dd788 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:21:43 -0500 Subject: [PATCH 38/68] fix loop order + reorder case for clarity (#5044) --- .../Enhancements/randomizer/hook_handlers.cpp | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index e323e810a..a9e1947fd 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -1467,6 +1467,18 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } break; } + case VB_HAVE_OCARINA_NOTE_A4: { + if (!Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT)) { + *should = false; + } + break; + } + case VB_HAVE_OCARINA_NOTE_B4: { + if (!Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT)) { + *should = false; + } + break; + } case VB_HAVE_OCARINA_NOTE_D4: { if (!Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_A)) { *should = false; @@ -1485,21 +1497,9 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } break; } - case VB_HAVE_OCARINA_NOTE_B4: { - if (!Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT)) { - *should = false; - } - break; - } - case VB_HAVE_OCARINA_NOTE_A4: { - if (!Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT)) { - *should = false; - } - break; - } case VB_SKIP_SCARECROWS_SONG: { int ocarinaButtonCount = 0; - for (int i = VB_HAVE_OCARINA_NOTE_D4; i <= VB_HAVE_OCARINA_NOTE_A4; i++) { + for (int i = VB_HAVE_OCARINA_NOTE_A4; i <= VB_HAVE_OCARINA_NOTE_F4; i++) { if (GameInteractor_Should((GIVanillaBehavior)i, true)) { ocarinaButtonCount++; } From 499a23e9a3cef42e7630955bece51843398ae786 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:22:00 -0500 Subject: [PATCH 39/68] restore night lock + remove interior lock (#5048) --- soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp b/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp index 96bb9823c..33e264bd4 100644 --- a/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp +++ b/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp @@ -32,8 +32,8 @@ std::map lookupTable = { {{ SCENE_BACK_ALLEY_NIGHT, 2495 }, RAND_INF_BOMBCHU_SHOP_UNLOCKED }, {{ SCENE_BACK_ALLEY_DAY, 447 }, RAND_INF_RICHARDS_HOUSE_UNLOCKED }, {{ SCENE_BACK_ALLEY_NIGHT, 447 }, RAND_INF_RICHARDS_HOUSE_UNLOCKED }, - {{ SCENE_BACK_ALLEY_HOUSE, 447 }, RAND_INF_ALLEY_HOUSE_UNLOCKED }, {{ SCENE_BACK_ALLEY_DAY, 1665 }, RAND_INF_ALLEY_HOUSE_UNLOCKED }, + {{ SCENE_BACK_ALLEY_NIGHT, 1471 }, RAND_INF_ALLEY_HOUSE_UNLOCKED }, {{ SCENE_KAKARIKO_VILLAGE, 6801 }, RAND_INF_KAK_BAZAAR_UNLOCKED }, // Adult Night {{ SCENE_KAKARIKO_VILLAGE, 6591 }, RAND_INF_KAK_BAZAAR_UNLOCKED }, // Adult Day {{ SCENE_KAKARIKO_VILLAGE, 6813 }, RAND_INF_KAK_BAZAAR_UNLOCKED }, // Child Day From 297a056dfff2cf7bd31693d21d691c63bc0cbd54 Mon Sep 17 00:00:00 2001 From: Miles Acquaviva Date: Wed, 12 Feb 2025 15:28:17 -0500 Subject: [PATCH 40/68] Created and implemented PosType enum (#5046) * Created and implemented PosType enum * fixed formatting --------- Co-authored-by: link5669 --- mods/custom_mod_files_go_here.txt | 0 .../cosmetics/CosmeticsEditor.cpp | 64 +- .../Enhancements/cosmetics/cosmeticsTypes.h | 9 + soh/src/code/z_actor.c | 65 +- soh/src/code/z_lifemeter.c | 113 +-- soh/src/code/z_map_exp.c | 91 +-- soh/src/code/z_map_mark.c | 25 +- soh/src/code/z_parameter.c | 703 +++++++++--------- .../actors/ovl_player_actor/z_player.c | 11 +- .../misc/ovl_kaleido_scope/z_kaleido_item.c | 42 +- 10 files changed, 570 insertions(+), 553 deletions(-) create mode 100644 mods/custom_mod_files_go_here.txt diff --git a/mods/custom_mod_files_go_here.txt b/mods/custom_mod_files_go_here.txt new file mode 100644 index 000000000..e69de29bb diff --git a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp index c07abd646..16fb2bed4 100644 --- a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp +++ b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp @@ -196,7 +196,7 @@ static std::map cosmeticOptions = { COSMETIC_OPTION("Link.Hair", "Hair", COSMETICS_GROUP_LINK, ColorRGBA8(255, 173, 27, 255), false, true, true), COSMETIC_OPTION("Link.Linen", "Linen", COSMETICS_GROUP_LINK, ColorRGBA8(255, 255, 255, 255), false, true, true), COSMETIC_OPTION("Link.Boots", "Boots", COSMETICS_GROUP_LINK, ColorRGBA8( 93, 44, 18, 255), false, true, true), - + COSMETIC_OPTION("MirrorShield.Body", "Body", COSMETICS_GROUP_MIRRORSHIELD, ColorRGBA8(215, 0, 0, 255), false, true, false), COSMETIC_OPTION("MirrorShield.Mirror", "Mirror", COSMETICS_GROUP_MIRRORSHIELD, ColorRGBA8(255, 255, 255, 255), false, true, true), COSMETIC_OPTION("MirrorShield.Emblem", "Emblem", COSMETICS_GROUP_MIRRORSHIELD, ColorRGBA8(205, 225, 255, 255), false, true, true), @@ -214,7 +214,7 @@ static std::map cosmeticOptions = { COSMETIC_OPTION("Gloves.SilverGauntlets", "Silver Gauntlets", COSMETICS_GROUP_GLOVES, ColorRGBA8(255, 255, 255, 255), false, true, false), COSMETIC_OPTION("Gloves.GoldenGauntlets", "Golden Gauntlets", COSMETICS_GROUP_GLOVES, ColorRGBA8(254, 207, 15, 255), false, true, false), COSMETIC_OPTION("Gloves.GauntletsGem", "Gauntlets Gem", COSMETICS_GROUP_GLOVES, ColorRGBA8(255, 60, 100, 255), false, true, true), - + COSMETIC_OPTION("Equipment.BoomerangBody", "Boomerang Body", COSMETICS_GROUP_EQUIPMENT, ColorRGBA8(160, 100, 0, 255), false, true, false), COSMETIC_OPTION("Equipment.BoomerangGem", "Boomerang Gem", COSMETICS_GROUP_EQUIPMENT, ColorRGBA8(255, 50, 150, 255), false, true, true), /* Todo (Cosmetics): Broken, need a better way to grayscale @@ -288,7 +288,7 @@ static std::map cosmeticOptions = { //COSMETIC_OPTION("Key.ChestGameSmallBody", "Chest Game Key", COSMETICS_GROUP_SMALL_KEYS, ColorRGBA8(255, 255, 255, 255), false, true, false), //COSMETIC_OPTION("Key.ChestGameEmblem", "Chest Game Key Emblem", COSMETICS_GROUP_SMALL_KEYS, ColorRGBA8(255, 0, 0, 255), false, true, true), COSMETIC_OPTION("Key.Skeleton", "Skeleton Key", COSMETICS_GROUP_SMALL_KEYS, ColorRGBA8(255, 255, 170, 255), false, true, false), - + COSMETIC_OPTION("HUD.AButton", "A Button", COSMETICS_GROUP_HUD, ColorRGBA8( 90, 90, 255, 255), false, true, false), COSMETIC_OPTION("HUD.BButton", "B Button", COSMETICS_GROUP_HUD, ColorRGBA8( 0, 150, 0, 255), false, true, false), COSMETIC_OPTION("HUD.CButtons", "C Buttons", COSMETICS_GROUP_HUD, ColorRGBA8(255, 160, 0, 255), false, true, false), @@ -329,7 +329,7 @@ static std::map cosmeticOptions = { MESSAGE_COSMETIC_OPTION("Yellow.Wooden", "Message Yellow (Wooden) Color", 255, 255, 30), MESSAGE_COSMETIC_OPTION("Black", "Message Black Color", 0, 0, 0), - #undef MESSAGE_COSMETIC_OPTION +#undef MESSAGE_COSMETIC_OPTION COSMETIC_OPTION("Kaleido.ItemSelA", "Item Select Color", COSMETICS_GROUP_KALEIDO, ColorRGBA8( 10, 50, 80, 255), false, true, true), COSMETIC_OPTION("Kaleido.ItemSelB", "Item Select Color B", COSMETICS_GROUP_KALEIDO, ColorRGBA8( 70, 100, 130, 255), false, true, true), @@ -345,7 +345,7 @@ static std::map cosmeticOptions = { COSMETIC_OPTION("Kaleido.MapSelDunB", "Map Dungeon Color B", COSMETICS_GROUP_KALEIDO, ColorRGBA8(140, 60, 60, 255), false, true, true), COSMETIC_OPTION("Kaleido.MapSelDunC", "Map Dungeon Color C", COSMETICS_GROUP_KALEIDO, ColorRGBA8(140, 60, 60, 255), false, true, true), COSMETIC_OPTION("Kaleido.MapSelDunD", "Map Dungeon Color D", COSMETICS_GROUP_KALEIDO, ColorRGBA8( 80, 40, 30, 255), false, true, true), - + COSMETIC_OPTION("Kaleido.QuestStatusA", "Quest Status Color", COSMETICS_GROUP_KALEIDO, ColorRGBA8( 80, 80, 50, 255), false, true, true), COSMETIC_OPTION("Kaleido.QuestStatusB", "Quest Status Color B", COSMETICS_GROUP_KALEIDO, ColorRGBA8(120, 120, 70, 255), false, true, true), COSMETIC_OPTION("Kaleido.QuestStatusC", "Quest Status Color C", COSMETICS_GROUP_KALEIDO, ColorRGBA8(120, 120, 70, 255), false, true, true), @@ -355,14 +355,14 @@ static std::map cosmeticOptions = { COSMETIC_OPTION("Kaleido.MapSelectB", "Map Color B", COSMETICS_GROUP_KALEIDO, ColorRGBA8(140, 60, 60, 255), false, true, true), COSMETIC_OPTION("Kaleido.MapSelectC", "Map Color C", COSMETICS_GROUP_KALEIDO, ColorRGBA8(140, 60, 60, 255), false, true, true), COSMETIC_OPTION("Kaleido.MapSelectD", "Map Color D", COSMETICS_GROUP_KALEIDO, ColorRGBA8( 80, 40, 30, 255), false, true, true), - + COSMETIC_OPTION("Kaleido.SaveA", "Save Color", COSMETICS_GROUP_KALEIDO, ColorRGBA8( 50, 50, 50, 255), false, true, true), COSMETIC_OPTION("Kaleido.SaveB", "Save Color B", COSMETICS_GROUP_KALEIDO, ColorRGBA8(110, 110, 110, 255), false, true, true), COSMETIC_OPTION("Kaleido.SaveC", "Save Color C", COSMETICS_GROUP_KALEIDO, ColorRGBA8(110, 110, 110, 255), false, true, true), COSMETIC_OPTION("Kaleido.SaveD", "Save Color D", COSMETICS_GROUP_KALEIDO, ColorRGBA8( 50, 50, 50, 255), false, true, true), - + COSMETIC_OPTION("Kaleido.NamePanel", "Name Panel", COSMETICS_GROUP_KALEIDO, ColorRGBA8( 90, 100, 130, 255), true, true, true), - + COSMETIC_OPTION("Title.FileChoose", "File Choose", COSMETICS_GROUP_TITLE, ColorRGBA8(100, 150, 255, 255), false, true, false), COSMETIC_OPTION("Title.NintendoLogo", "Nintendo Logo", COSMETICS_GROUP_TITLE, ColorRGBA8( 0, 0, 255, 255), false, true, true), COSMETIC_OPTION("Title.N64LogoRed", "N64 Red", COSMETICS_GROUP_TITLE, ColorRGBA8(150, 0, 0, 255), false, true, true), @@ -375,7 +375,7 @@ static std::map cosmeticOptions = { COSMETIC_OPTION("Title.FireSecondary", "Title Fire Secondary", COSMETICS_GROUP_TITLE, ColorRGBA8(255, 100, 0, 255), false, true, true), */ COSMETIC_OPTION("Title.Copyright", "Copyright Text", COSMETICS_GROUP_TITLE, ColorRGBA8(255, 255, 255, 255), true, true, false), - + COSMETIC_OPTION("Arrows.NormalPrimary", "Normal Primary", COSMETICS_GROUP_ARROWS, ColorRGBA8( 0, 150, 0, 0), false, true, false), COSMETIC_OPTION("Arrows.NormalSecondary", "Normal Secondary", COSMETICS_GROUP_ARROWS, ColorRGBA8(255, 255, 170, 255), false, true, true), COSMETIC_OPTION("Arrows.FirePrimary", "Fire Primary", COSMETICS_GROUP_ARROWS, ColorRGBA8(255, 200, 0, 0), false, true, false), @@ -384,14 +384,14 @@ static std::map cosmeticOptions = { COSMETIC_OPTION("Arrows.IceSecondary", "Ice Secondary", COSMETICS_GROUP_ARROWS, ColorRGBA8(255, 255, 255, 255), false, true, true), COSMETIC_OPTION("Arrows.LightPrimary", "Light Primary", COSMETICS_GROUP_ARROWS, ColorRGBA8(255, 255, 0, 255), false, true, false), COSMETIC_OPTION("Arrows.LightSecondary", "Light Secondary", COSMETICS_GROUP_ARROWS, ColorRGBA8(255, 255, 170, 0), false, true, true), - + COSMETIC_OPTION("Magic.DinsPrimary", "Din's Primary", COSMETICS_GROUP_MAGIC, ColorRGBA8(255, 200, 0, 255), false, true, false), COSMETIC_OPTION("Magic.DinsSecondary", "Din's Secondary", COSMETICS_GROUP_MAGIC, ColorRGBA8(255, 0, 0, 255), false, true, true), COSMETIC_OPTION("Magic.FaroresPrimary", "Farore's Primary", COSMETICS_GROUP_MAGIC, ColorRGBA8(255, 255, 0, 255), false, true, false), COSMETIC_OPTION("Magic.FaroresSecondary", "Farore's Secondary", COSMETICS_GROUP_MAGIC, ColorRGBA8(100, 200, 0, 255), false, true, true), COSMETIC_OPTION("Magic.NayrusPrimary", "Nayru's Primary", COSMETICS_GROUP_MAGIC, ColorRGBA8(170, 255, 255, 255), false, true, false), COSMETIC_OPTION("Magic.NayrusSecondary", "Nayru's Secondary", COSMETICS_GROUP_MAGIC, ColorRGBA8( 0, 100, 255, 255), false, true, true), - + COSMETIC_OPTION("SpinAttack.Level1Primary", "Level 1 Primary", COSMETICS_GROUP_SPIN_ATTACK, ColorRGBA8(170, 255, 255, 255), false, true, true), COSMETIC_OPTION("SpinAttack.Level1Secondary", "Level 1 Secondary", COSMETICS_GROUP_SPIN_ATTACK, ColorRGBA8( 0, 100, 255, 255), false, true, false), COSMETIC_OPTION("SpinAttack.Level2Primary", "Level 2 Primary", COSMETICS_GROUP_SPIN_ATTACK, ColorRGBA8(255, 255, 170, 255), false, true, true), @@ -419,7 +419,7 @@ static std::map cosmeticOptions = { COSMETIC_OPTION("Navi.EnemySecondary", "Enemy Secondary", COSMETICS_GROUP_NAVI, ColorRGBA8(200, 155, 0, 0), false, true, true), COSMETIC_OPTION("Navi.PropsPrimary", "Props Primary", COSMETICS_GROUP_NAVI, ColorRGBA8( 0, 255, 0, 255), false, true, false), COSMETIC_OPTION("Navi.PropsSecondary", "Props Secondary", COSMETICS_GROUP_NAVI, ColorRGBA8( 0, 255, 0, 0), false, true, true), - + COSMETIC_OPTION("Ivan.IdlePrimary", "Ivan Idle Primary", COSMETICS_GROUP_IVAN, ColorRGBA8(255, 255, 255, 255), false, true, false), COSMETIC_OPTION("Ivan.IdleSecondary", "Ivan Idle Secondary", COSMETICS_GROUP_IVAN, ColorRGBA8( 0, 255, 0, 255), false, true, true), @@ -493,11 +493,11 @@ void SetMarginAll(const char* ButtonName, bool SetActivated) { for (auto cvarName : MarginCvarList) { std::string cvarPosType = std::string(cvarName).append(".PosType"); std::string cvarNameMargins = std::string(cvarName).append(".UseMargins"); - if (CVarGetInteger(cvarPosType.c_str(),0) <= 2 && SetActivated) { //Our element is not Hidden or Non anchor + if (CVarGetInteger(cvarPosType.c_str(),0) <= ANCHOR_RIGHT && SetActivated) { //Our element is not Hidden or Non anchor for (int i = 0; i < arrayLengthNonMargin; i++) { - if ((strcmp(cvarName, MarginCvarNonAnchor[i]) == 0) && (CVarGetInteger(cvarPosType.c_str(), 0) == 0)) { //Our element is both in original position and do not have anchor by default so we skip it. + if ((strcmp(cvarName, MarginCvarNonAnchor[i]) == 0) && (CVarGetInteger(cvarPosType.c_str(), 0) == ORIGINAL_LOCATION)) { //Our element is both in original position and do not have anchor by default so we skip it. CVarSetInteger(cvarNameMargins.c_str(), false); //force set off - } else if ((strcmp(cvarName, MarginCvarNonAnchor[i]) == 0) && (CVarGetInteger(cvarPosType.c_str(), 0) != 0)) { //Our element is not in original position regarless it has no anchor by default since player made it anchored we can toggle margins + } else if ((strcmp(cvarName, MarginCvarNonAnchor[i]) == 0) && (CVarGetInteger(cvarPosType.c_str(), 0) != ORIGINAL_LOCATION)) { //Our element is not in original position regarless it has no anchor by default since player made it anchored we can toggle margins CVarSetInteger(cvarNameMargins.c_str(), SetActivated); } else if (strcmp(cvarName, MarginCvarNonAnchor[i]) != 0) { //Our elements has an anchor by default so regarless of it's position right now that okay to toggle margins. CVarSetInteger(cvarNameMargins.c_str(), SetActivated); @@ -548,7 +548,7 @@ void CosmeticsUpdateTick() { CVarSetColor(cosmeticOption.cvar, newColor); } // If we don't want the rainbow color on items to be synced, offset the index for each item in the loop. - // Technically this would work if you replaced "60" with 1 but the hue would be so close it's + // Technically this would work if you replaced "60" with 1 but the hue would be so close it's // indistinguishable, 60 gives us a big enough gap to notice the difference. if (!CVarGetInteger(CVAR_COSMETIC("RainbowSync"), 0)) { index += static_cast(60 * rainbowSpeed); @@ -561,7 +561,7 @@ void CosmeticsUpdateTick() { } } -/* +/* This is called every time a color is changed in the UI, and every frame to update colors that have rainbow mode enabled The columns/arguments for PATCH_GFX are as follows: 1. Display List: This should be a valid display list pointer, if you have errors listing one here make sure to include the appropriate header file up top @@ -577,7 +577,7 @@ void ApplyOrResetCustomGfxPatches(bool manualChange) { PATCH_GFX(sInnerCylinderDL, "Magic_FaroresPrimary1", magicFaroresPrimary.changedCvar, 24, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); PATCH_GFX(sOuterCylinderDL, "Magic_FaroresPrimary2", magicFaroresPrimary.changedCvar, 24, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } - + static CosmeticOption& magicFaroresSecondary = cosmeticOptions.at("Magic.FaroresSecondary"); if (manualChange || CVarGetInteger(magicFaroresSecondary.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(magicFaroresSecondary.cvar, magicFaroresSecondary.defaultColor); @@ -610,7 +610,7 @@ void ApplyOrResetCustomGfxPatches(bool manualChange) { PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair2", linkHair.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair3", linkHair.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair4", linkHair.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - + if (manualChange) { PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair5", linkHair.changedCvar, 46, gsSPGrayscale(true)); PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair6", linkHair.changedCvar, 54, gsSPGrayscale(false)); @@ -873,7 +873,7 @@ void ApplyOrResetCustomGfxPatches(bool manualChange) { PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronHilt10", swordsBiggoronHilt.changedCvar, 38, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronHilt11", swordsBiggoronHilt.changedCvar, 118, gsSPGrayscale(false)); } - } + } */ static CosmeticOption& glovesGoronBracelet = cosmeticOptions.at("Gloves.GoronBracelet"); if (manualChange || CVarGetInteger(glovesGoronBracelet.rainbowCvar, 0)) { @@ -1015,7 +1015,7 @@ void ApplyOrResetCustomGfxPatches(bool manualChange) { PATCH_GFX(gLinkAdultLeftHandHoldingHammerNearDL, "Equipment_HammerHandle5", equipmentHammerHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); PATCH_GFX(gLinkAdultLeftHandHoldingHammerFarDL, "Equipment_HammerHandle6", equipmentHammerHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } - + static CosmeticOption& equipmentHookshotChain = cosmeticOptions.at("Equipment.HookshotChain"); if (manualChange || CVarGetInteger(equipmentHookshotChain.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentHookshotChain.cvar, equipmentHookshotChain.defaultColor); @@ -1070,7 +1070,7 @@ void ApplyOrResetCustomGfxPatches(bool manualChange) { PATCH_GFX(gGiGreenRupeeInnerColorDL, "Consumable_GreenRupee2", consumableGreenRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); PATCH_GFX(gGiGreenRupeeOuterColorDL, "Consumable_GreenRupee3", consumableGreenRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); PATCH_GFX(gGiGreenRupeeOuterColorDL, "Consumable_GreenRupee4", consumableGreenRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); - + // Greg Bridge if (Randomizer_GetSettingValue(RSK_RAINBOW_BRIDGE) == RO_BRIDGE_GREG) { ResourceMgr_PatchGfxByName(gRainbowBridgeDL, "RainbowBridge_StartGrayscale", 2, gsSPGrayscale(true)); @@ -1215,8 +1215,8 @@ void ApplyOrResetCustomGfxPatches(bool manualChange) { extern "C" Color_RGBA8 CosmeticsEditor_GetDefaultValue(const char* id) { return Color_RGBA8 { (uint8_t)(cosmeticOptions[id].defaultColor.r * 255.0f), - (uint8_t)(cosmeticOptions[id].defaultColor.g * 255.0f), - (uint8_t)(cosmeticOptions[id].defaultColor.b * 255.0f), + (uint8_t)(cosmeticOptions[id].defaultColor.g * 255.0f), + (uint8_t)(cosmeticOptions[id].defaultColor.b * 255.0f), (uint8_t)(cosmeticOptions[id].defaultColor.a * 255.0f) }; } @@ -1380,9 +1380,9 @@ void Draw_Placements(){ DrawPositionsRadioBoxes(CVAR_COSMETIC("HUD.VisualSoA")); s16 Min_X_VSOA = 0; s16 Max_X_VSOA = static_cast(ImGui::GetWindowViewport()->Size.x / 2); - if(CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == 2){ + if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_RIGHT){ Max_X_VSOA = 290; - } else if(CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == 4){ + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == HIDDEN){ Min_X_VSOA = static_cast(ImGui::GetWindowViewport()->Size.x / 2) * -1; } DrawPositionSlider(CVAR_COSMETIC("HUD.VisualSoA"), 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), Min_X_VSOA, Max_X_VSOA); @@ -1406,9 +1406,9 @@ void Draw_Placements(){ DrawPositionsRadioBoxes(CVAR_COSMETIC("HUD.Dpad")); s16 Min_X_Dpad = 0; s16 Max_X_Dpad = static_cast(ImGui::GetWindowViewport()->Size.x / 2); - if(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 2){ + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_RIGHT) { Max_X_Dpad = 290; - } else if(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 4){ + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == HIDDEN) { Min_X_Dpad = static_cast(ImGui::GetWindowViewport()->Size.x / 2) * -1; } DrawPositionSlider(CVAR_COSMETIC("HUD.Dpad"), 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), Min_X_Dpad, Max_X_Dpad); @@ -1486,7 +1486,7 @@ void DrawSillyTab() { UIWidgets::PaddedSeparator(true, true, 2.0f, 2.0f); if (UIWidgets::EnhancementCheckbox("Let It Snow", CVAR_GENERAL("LetItSnow"))) { - Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); + Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } UIWidgets::Tooltip("Makes snow fall, changes chest texture colors to red and green, etc, for December holidays.\nWill reset on restart outside of December 23-25."); @@ -1873,7 +1873,7 @@ void CosmeticsEditorWindow::ApplyDungeonKeyColors() { CVarSetColor(cosmeticOptions["Key.GanonsBossGem"].cvar, { 255, 0, 0, 255 }); CVarSetInteger(cosmeticOptions["Key.GanonsBossGem"].changedCvar, 1); cosmeticOptions["Key.GanonsBossGem"].currentColor = { 255 / 255.0f, 0, 0, 255 / 255.0f }; - + // Bottom of the Well CVarSetColor(cosmeticOptions["Key.WellSmallBody"].cvar, { 227, 110, 255, 255 }); CVarSetInteger(cosmeticOptions["Key.WellSmallBody"].changedCvar, 1); @@ -1885,7 +1885,7 @@ void CosmeticsEditorWindow::ApplyDungeonKeyColors() { CVarSetInteger(cosmeticOptions["Key.GTGSmallBody"].changedCvar, 1); cosmeticOptions["Key.GTGSmallBody"].currentColor = { 221 / 255.0f, 212 / 255.0f, 60 / 255.0f, 255 / 255.0f }; ResetColor(cosmeticOptions.at("Key.GTGSmallEmblem")); - + // Gerudo Fortress CVarSetColor(cosmeticOptions["Key.FortSmallBody"].cvar, { 255, 255, 255, 255 }); CVarSetInteger(cosmeticOptions["Key.FortSmallBody"].changedCvar, 1); @@ -1958,7 +1958,7 @@ void CosmeticsEditorWindow::DrawElement() { } Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } - + if (ImGui::Button("Rainbow All", ImVec2(ImGui::GetContentRegionAvail().x / 2, 30.0f))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { if ( diff --git a/soh/soh/Enhancements/cosmetics/cosmeticsTypes.h b/soh/soh/Enhancements/cosmetics/cosmeticsTypes.h index 14f06552d..7fc454117 100644 --- a/soh/soh/Enhancements/cosmetics/cosmeticsTypes.h +++ b/soh/soh/Enhancements/cosmetics/cosmeticsTypes.h @@ -8,3 +8,12 @@ typedef enum { ENEMYHEALTH_ANCHOR_TOP, ENEMYHEALTH_ANCHOR_BOTTOM, } EnemyHealthBarAnchorType; + +typedef enum { + ORIGINAL_LOCATION, + ANCHOR_LEFT, + ANCHOR_RIGHT, + ANCHOR_NONE, + HIDDEN, + ANCHOR_TO_LIFE_METER +} PosType; diff --git a/soh/src/code/z_actor.c b/soh/src/code/z_actor.c index 5a5dc328e..6d5f9b3b6 100644 --- a/soh/src/code/z_actor.c +++ b/soh/src/code/z_actor.c @@ -8,6 +8,7 @@ #include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" #include "objects/object_bdoor/object_bdoor.h" #include "soh/frame_interpolation.h" +#include "soh/Enhancements/cosmetics/cosmeticsTypes.h" #include "soh/Enhancements/enemyrandomizer.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" @@ -365,7 +366,7 @@ void func_8002BF60(TargetContext* targetCtx, Actor* actor, s32 actorCategory, Pl } else { sNaviColorList[ACTORCAT_PLAYER].outer = defaultIdleSecondaryColor; } - + if (CVarGetInteger(CVAR_COSMETIC("Navi.NPCPrimary.Changed"), 0)) { sNaviColorList[ACTORCAT_NPC].inner = CVarGetColor(CVAR_COSMETIC("Navi.NPCPrimary.Value"), defaultNPCPrimaryColor); } else { @@ -625,7 +626,7 @@ void func_8002C7BC(TargetContext* targetCtx, Player* player, Actor* actorArg, Pl } lockOnSfxId = CHECK_FLAG_ALL(actorArg->flags, ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_HOSTILE) ? NA_SE_SY_LOCK_ON - : NA_SE_SY_LOCK_ON_HUMAN; + : NA_SE_SY_LOCK_ON_HUMAN; Sfx_PlaySfxCentered(lockOnSfxId); } @@ -834,7 +835,7 @@ void func_8002CDE4(PlayState* play, TitleCardContext* titleCtx) { void TitleCard_InitBossName(PlayState* play, TitleCardContext* titleCtx, void* texture, s16 x, s16 y, u8 width, u8 height, s16 hasTranslation) { static char newName[512]; - + if (gSaveContext.language != LANGUAGE_ENG) { size_t length = strlen(texture); strcpy(newName, texture); @@ -864,7 +865,7 @@ void TitleCard_InitBossName(PlayState* play, TitleCardContext* titleCtx, void* t void TitleCard_InitPlaceName(PlayState* play, TitleCardContext* titleCtx, void* texture, s32 x, s32 y, s32 width, s32 height, s32 delay) { SceneTableEntry* loadedScene = play->loadedScene; - // size_t size = loadedScene->titleFile.vromEnd - loadedScene->titleFile.vromStart; + // size_t size = loadedScene->titleFile.vromEnd - loadedScene->titleFile.vromStart; switch (play->sceneNum) { case SCENE_DEKU_TREE: texture = gDekuTreeTitleCardENGTex; @@ -1093,7 +1094,7 @@ void TitleCard_Update(PlayState* play, TitleCardContext* titleCtx) { if (titleCtx->durationTimer == 80) { GameInteractor_ExecuteOnPresentTitleCard(); } - + if (DECR(titleCtx->durationTimer) == 0) { Math_StepToS(&titleCtx->alpha, 0, 30); Math_StepToS(&titleCtx->intensityR, 0, 70); @@ -1127,15 +1128,15 @@ void TitleCard_Draw(PlayState* play, TitleCardContext* titleCtx) { s16 TitleCard_PosY = titleCtx->y; if (TitleCard_PosType_Checker != 0) { TitleCard_PosY = TitleCard_PosY_Modifier; - if (TitleCard_PosType_Checker == 1) {//Anchor Left - if (TitleCard_Margin_Checker != 0) {TitleCard_MarginX = CVarGetInteger(CVAR_COSMETIC("HUD.Margin.L"), 0)*-1;}; - TitleCard_PosX = OTRGetDimensionFromLeftEdge(TitleCard_PosX_Modifier+TitleCard_MarginX)-11; - } else if (TitleCard_PosType_Checker == 2) {//Anchor Right + if (TitleCard_PosType_Checker == ANCHOR_LEFT) { + if (TitleCard_Margin_Checker != 0) {TitleCard_MarginX = CVarGetInteger(CVAR_COSMETIC("HUD.Margin.L"), 0) * -1;}; + TitleCard_PosX = OTRGetDimensionFromLeftEdge(TitleCard_PosX_Modifier + TitleCard_MarginX) - 11; + } else if (TitleCard_PosType_Checker == ANCHOR_RIGHT) { if (TitleCard_Margin_Checker != 0) {TitleCard_MarginX = CVarGetInteger(CVAR_COSMETIC("HUD.Margin.R"), 0);}; - TitleCard_PosX = OTRGetDimensionFromRightEdge(TitleCard_PosX_Modifier+TitleCard_MarginX); - } else if (TitleCard_PosType_Checker == 3) {//Anchor None + TitleCard_PosX = OTRGetDimensionFromRightEdge(TitleCard_PosX_Modifier + TitleCard_MarginX); + } else if (TitleCard_PosType_Checker == ANCHOR_NONE) { TitleCard_PosX = TitleCard_PosX_Modifier; - } else if (TitleCard_PosType_Checker == 4) {//Hidden + } else if (TitleCard_PosType_Checker == HIDDEN) { TitleCard_PosX = -9999; } } @@ -1156,7 +1157,7 @@ void TitleCard_Draw(PlayState* play, TitleCardContext* titleCtx) { width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPWideTextureRectangle(OVERLAY_DISP++, titleX, titleY, ((doubleWidth * 2) + titleX) - 4, titleY + (height * 4), - G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); height = titleCtx->height - height; @@ -1987,7 +1988,7 @@ u32 Actor_HasParent(Actor* actor, PlayState* play) { * Uses the given `GetItemEntry` to prepare the player to receive an item via the animation * where Link holds an item over his head. This function does not require an actor for giving * the player an item, instead setting the player as their own interactRangeActor and getItemDirection. - * + * * \param play the Global Context * \param getItemEntry the GetItemEntry for the item you want the player to receive. * \return true if the player can receive an item, false if not. @@ -1995,12 +1996,12 @@ u32 Actor_HasParent(Actor* actor, PlayState* play) { s32 GiveItemEntryWithoutActor(PlayState* play, GetItemEntry getItemEntry) { Player* player = GET_PLAYER(play); - if (!(player->stateFlags1 & + if (!(player->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL | PLAYER_STATE1_FIRST_PERSON | PLAYER_STATE1_CLIMBING_LADDER)) && - Player_GetExplosiveHeld(player) < 0) { - if (((player->heldActor != NULL) && ((getItemEntry.getItemId > GI_NONE) && (getItemEntry.getItemId < GI_MAX)) || - (IS_RANDO && (getItemEntry.getItemId > RG_NONE) && (getItemEntry.getItemId < RG_MAX))) || + Player_GetExplosiveHeld(player) < 0) { + if (((player->heldActor != NULL) && ((getItemEntry.getItemId > GI_NONE) && (getItemEntry.getItemId < GI_MAX)) || + (IS_RANDO && (getItemEntry.getItemId > RG_NONE) && (getItemEntry.getItemId < RG_MAX))) || (!(player->stateFlags1 & (PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE)))) { if ((getItemEntry.getItemId != GI_NONE)) { player->getItemEntry = getItemEntry; @@ -2034,14 +2035,14 @@ s32 GiveItemEntryWithoutActor(PlayState* play, GetItemEntry getItemEntry) { s32 GiveItemEntryFromActor(Actor* actor, PlayState* play, GetItemEntry getItemEntry, f32 xzRange, f32 yRange) { Player* player = GET_PLAYER(play); - if (!(player->stateFlags1 & + if (!(player->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL | PLAYER_STATE1_FIRST_PERSON | PLAYER_STATE1_CLIMBING_LADDER)) && - Player_GetExplosiveHeld(player) < 0) { - if ((((player->heldActor != NULL) || (actor == player->talkActor)) && - ((!IS_RANDO && ((getItemEntry.getItemId > GI_NONE) && (getItemEntry.getItemId < GI_MAX))) || - (IS_RANDO && ((getItemEntry.getItemId > RG_NONE) && (getItemEntry.getItemId < RG_MAX))))) || - (!(player->stateFlags1 & (PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE)))) { + Player_GetExplosiveHeld(player) < 0) { + if ((((player->heldActor != NULL) || (actor == player->talkActor)) && + ((!IS_RANDO && ((getItemEntry.getItemId > GI_NONE) && (getItemEntry.getItemId < GI_MAX))) || + (IS_RANDO && ((getItemEntry.getItemId > RG_NONE) && (getItemEntry.getItemId < RG_MAX))))) || + (!(player->stateFlags1 & (PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE)))) { if ((actor->xzDistToPlayer < xzRange) && (fabsf(actor->yDistToPlayer) < yRange)) { s16 yawDiff = actor->yawTowardsPlayer - player->actor.shape.rot.y; s32 absYawDiff = ABS(yawDiff); @@ -2078,11 +2079,11 @@ s32 GiveItemEntryFromActorWithFixedRange(Actor* actor, PlayState* play, GetItemE s32 Actor_OfferGetItem(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 yRange) { Player* player = GET_PLAYER(play); - if (!(player->stateFlags1 & + if (!(player->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL | PLAYER_STATE1_FIRST_PERSON | PLAYER_STATE1_CLIMBING_LADDER)) && - Player_GetExplosiveHeld(player) < 0) { - if ((((player->heldActor != NULL) || (actor == player->talkActor)) && + Player_GetExplosiveHeld(player) < 0) { + if ((((player->heldActor != NULL) || (actor == player->talkActor)) && ((!IS_RANDO && ((getItemId > GI_NONE) && (getItemId < GI_MAX))) || (IS_RANDO && ((getItemId > RG_NONE) && (getItemId < RG_MAX))))) || (!(player->stateFlags1 & (PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_IN_CUTSCENE)))) { if ((actor->xzDistToPlayer < xzRange) && (fabsf(actor->yDistToPlayer) < yRange)) { @@ -2153,7 +2154,7 @@ s32 Actor_IsMounted(PlayState* play, Actor* horse) { u32 Actor_SetRideActor(PlayState* play, Actor* horse, s32 mountSide) { Player* player = GET_PLAYER(play); - if (!(player->stateFlags1 & + if (!(player->stateFlags1 & (PLAYER_STATE1_DEAD | PLAYER_STATE1_CARRYING_ACTOR | PLAYER_STATE1_CHARGING_SPIN_ATTACK | PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_JUMPING | PLAYER_STATE1_FREEFALL | PLAYER_STATE1_FIRST_PERSON | PLAYER_STATE1_CLIMBING_LADDER))) { player->rideActor = horse; @@ -2203,7 +2204,7 @@ void Player_PlaySfx(Actor* actor, u16 sfxId) { Audio_PlaySoundGeneral(sfxId, &actor->projectedPos, 4, &gSfxDefaultFreqAndVolScale , &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); } else { freqMultiplier = CVarGetFloat(CVAR_AUDIO("LinkVoiceFreqMultiplier"), 1.0); - if (freqMultiplier <= 0) { + if (freqMultiplier <= 0) { freqMultiplier = 1; } // Authentic behavior uses D_801333E0 for both freqScale and a4 @@ -2802,7 +2803,7 @@ void Actor_DrawLensOverlay(GraphicsContext* gfxCtx) { gSPWideTextureRectangle(POLY_XLU_DISP++, 0, 0, w, SCREEN_HEIGHT << 2, G_TX_RENDERTILE, LENS_MASK_OFFSET_S << 5, LENS_MASK_OFFSET_T << 5, (1 << 10) * (SCREEN_WIDTH - 2 * LENS_MASK_OFFSET_S) / SCREEN_WIDTH, - (1 << 10) * (SCREEN_HEIGHT - 2 * LENS_MASK_OFFSET_T) / SCREEN_HEIGHT); + (1 << 10) * (SCREEN_HEIGHT - 2 * LENS_MASK_OFFSET_T) / SCREEN_HEIGHT); gDPPipeSync(POLY_XLU_DISP++); CLOSE_DISPS(gfxCtx); } @@ -3422,7 +3423,7 @@ void Actor_SpawnTransitionActors(PlayState* play, ActorContext* actorCtx) { Actor* Actor_SpawnEntry(ActorContext* actorCtx, ActorEntry* actorEntry, PlayState* play) { gMapLoading = 1; Actor* ret = Actor_Spawn(actorCtx, play, actorEntry->id, actorEntry->pos.x, actorEntry->pos.y, actorEntry->pos.z, - actorEntry->rot.x, actorEntry->rot.y, actorEntry->rot.z, actorEntry->params, true); + actorEntry->rot.x, actorEntry->rot.y, actorEntry->rot.z, actorEntry->params, true); gMapLoading = 0; return ret; @@ -4803,7 +4804,7 @@ Actor* func_800358DC(Actor* actor, Vec3f* spawnPos, Vec3s* spawnRot, f32* arg3, spawnedEnPart = (EnPart*)Actor_SpawnAsChild(&play->actorCtx, actor, play, ACTOR_EN_PART, spawnPos->x, spawnPos->y, - spawnPos->z, spawnRot->x, spawnRot->y, actor->objBankIndex, params); + spawnPos->z, spawnRot->x, spawnRot->y, actor->objBankIndex, params); if (spawnedEnPart != NULL) { spawnedEnPart->actor.scale = actor->scale; spawnedEnPart->actor.speedXZ = arg3[0]; diff --git a/soh/src/code/z_lifemeter.c b/soh/src/code/z_lifemeter.c index 5f09e6b3f..726e8d44d 100644 --- a/soh/src/code/z_lifemeter.c +++ b/soh/src/code/z_lifemeter.c @@ -2,6 +2,7 @@ #include "textures/parameter_static/parameter_static.h" #include "soh/frame_interpolation.h" #include "soh/OTRGlobals.h" +#include "soh/Enhancements/cosmetics/cosmeticsTypes.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" s16 Top_LM_Margin = 0; @@ -343,15 +344,17 @@ s16 getHealthMeterXOffset() { else X_Margins = 0; - if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == 1) {//Anchor Left - return OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+X_Margins+70.0f); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == 2) {//Anchor Right + if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) != ORIGINAL_LOCATION) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == ANCHOR_LEFT) { + return OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+X_Margins + + 70.0f); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == ANCHOR_RIGHT) { X_Margins = Right_LM_Margin; - return OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+X_Margins+70.0f); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == 3) {//Anchor None - return CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+70.0f;; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == 4) {//Hidden + return OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+X_Margins + + 70.0f); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == ANCHOR_NONE) { + return CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0) + 70.0f; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == HIDDEN) { return -9999; } } else { @@ -366,8 +369,8 @@ s16 getHealthMeterYOffset() { else Y_Margins = 0; - f32 HeartsScale = 0.7f; - if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) != 0) { + f32 HeartsScale = 0.7f; + if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) != ORIGINAL_LOCATION) { HeartsScale = CVarGetFloat(CVAR_COSMETIC("HUD.HeartsCount.Scale"), 0.7f); return CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosY"), 0)+Y_Margins+(HeartsScale*15); } else { @@ -398,8 +401,8 @@ void HealthMeter_Draw(PlayState* play) { s32 curCombineModeSet = 0; u8* curBgImgLoaded = NULL; s32 ddHeartCountMinusOne = gSaveContext.isDoubleDefenseAcquired ? totalHeartCount - 1 : -1; - f32 HeartsScale = 0.7f; - if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) != 0) { + f32 HeartsScale = 0.7f; + if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) != ORIGINAL_LOCATION) { HeartsScale = CVarGetFloat(CVAR_COSMETIC("HUD.HeartsCount.Scale"), 0.7f); } static u32 epoch = 0; @@ -412,41 +415,41 @@ void HealthMeter_Draw(PlayState* play) { } curColorSet = -1; -/* - s16 X_Margins; - s16 Y_Margins; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Hearts.UseMargins"), 0) != 0) { - X_Margins = Left_LM_Margin; - Y_Margins = (Top_LM_Margin*-1); - } else { - X_Margins = 0; - Y_Margins = 0; - } - s16 PosX_original = OTRGetDimensionFromLeftEdge(0.0f)+X_Margins; - s16 PosY_original = 0.0f+Y_Margins; - if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) != 0) { - offsetY = CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosY"), 0)+Y_Margins+(HeartsScale*15); - if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == 1) {//Anchor Left - offsetX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+X_Margins+70.0f); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == 2) {//Anchor Right - X_Margins = Right_LM_Margin; - offsetX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+X_Margins+70.0f); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == 3) {//Anchor None - offsetX = CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+70.0f; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == 4) {//Hidden - offsetX = -9999; + /* + s16 X_Margins; + s16 Y_Margins; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Hearts.UseMargins"), 0) != 0) { + X_Margins = Left_LM_Margin; + Y_Margins = (Top_LM_Margin*-1); + } else { + X_Margins = 0; + Y_Margins = 0; } - } else { - offsetY = PosY_original; - offsetX = PosX_original; - } -*/ + s16 PosX_original = OTRGetDimensionFromLeftEdge(0.0f)+X_Margins; + s16 PosY_original = 0.0f+Y_Margins; + if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) != ORIGINAL_LOCATION) { + offsetY = CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosY"), 0)+Y_Margins+(HeartsScale*15); + if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == ANCHOR_LEFT) { + offsetX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+X_Margins+70.0f); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == ANCHOR_RIGHT) { + X_Margins = Right_LM_Margin; + offsetX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+X_Margins+70.0f); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == ANCHOR_NONE) { + offsetX = CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosX"), 0)+70.0f; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.HeartsCount.PosType"), 0) == HIDDEN) { + offsetX = -9999; + } + } else { + offsetY = PosY_original; + offsetX = PosX_original; + } + */ offsetX = PosX_anchor = getHealthMeterXOffset(); offsetY = getHealthMeterYOffset(); for (i = 0; i < totalHeartCount; i++) { FrameInterpolation_RecordOpenChild("HealthMeter Heart", i); - + if ((ddHeartCountMinusOne < 0) || (i > ddHeartCountMinusOne)) { if (i < fullHeartCount) { if (curColorSet != 0) { @@ -574,7 +577,7 @@ void HealthMeter_Draw(PlayState* play) { (s32)((temp2 + temp1) * 4), (s32)((temp3 + temp1) * 4), G_TX_RENDERTILE, 0, 0, (s32)temp4, (s32)temp4);*/ Mtx* matrix = Graph_Alloc(gfxCtx, sizeof(Mtx)); - Matrix_SetTranslateScaleMtx2(matrix, + Matrix_SetTranslateScaleMtx2(matrix, HeartsScale, //Scale X HeartsScale, //Scale Y HeartsScale, //Scale Z @@ -603,22 +606,22 @@ void HealthMeter_Draw(PlayState* play) { { Mtx* matrix = Graph_Alloc(gfxCtx, sizeof(Mtx)); - + if (CVarGetInteger(CVAR_ENHANCEMENT("NoHUDHeartAnimation"), 0)) { Matrix_SetTranslateScaleMtx2(matrix, - HeartsScale, // Scale X - HeartsScale, // Scale Y - HeartsScale, // Scale Z - -130 + offsetX, // Pos X - (-94 + offsetY) * -1, // Pos Y - 0.0f); + HeartsScale, // Scale X + HeartsScale, // Scale Y + HeartsScale, // Scale Z + -130 + offsetX, // Pos X + (-94 + offsetY) * -1, // Pos Y + 0.0f); } else { Matrix_SetTranslateScaleMtx2(matrix, HeartsScale + (HeartsScale / 3) - ((HeartsScale / 3) * sp144), - HeartsScale + (HeartsScale / 3) - ((HeartsScale / 3) * sp144), - HeartsScale + (HeartsScale / 3) - ((HeartsScale / 3) * sp144), - -130 + offsetX, // Pos X - (-94 + offsetY) * -1, // Pos Y - 0.0f); + HeartsScale + (HeartsScale / 3) - ((HeartsScale / 3) * sp144), + HeartsScale + (HeartsScale / 3) - ((HeartsScale / 3) * sp144), + -130 + offsetX, // Pos X + (-94 + offsetY) * -1, // Pos Y + 0.0f); } gSPMatrix(OVERLAY_DISP++, matrix, G_MTX_MODELVIEW | G_MTX_LOAD); @@ -633,7 +636,7 @@ void HealthMeter_Draw(PlayState* play) { offsetX = PosX_anchor; offsetY += 10.0f; } - + FrameInterpolation_RecordCloseChild(); } diff --git a/soh/src/code/z_map_exp.c b/soh/src/code/z_map_exp.c index be358f075..49af7a654 100644 --- a/soh/src/code/z_map_exp.c +++ b/soh/src/code/z_map_exp.c @@ -6,6 +6,7 @@ #include "textures/map_grand_static/map_grand_static.h" #include #include "soh/OTRGlobals.h" +#include "soh/Enhancements/cosmetics/cosmeticsTypes.h" MapData* gMapData; @@ -414,7 +415,7 @@ void Map_InitData(PlayState* play, s16 room) { osSyncPrintf(VT_RST); sEntranceIconMapIndex = extendedMapIndex; //DmaMgr_SendRequest1(interfaceCtx->mapSegment, - //(uintptr_t)_map_grand_staticSegmentRomStart + gMapData->owMinimapTexOffset[extendedMapIndex], + //(uintptr_t)_map_grand_staticSegmentRomStart + gMapData->owMinimapTexOffset[extendedMapIndex], //gMapData->owMinimapTexSize[mapIndex], __FILE__, __LINE__); if (sEntranceIconMapIndex < 24) { @@ -448,8 +449,8 @@ void Map_InitData(PlayState* play, s16 room) { mapIndex, VREG(30)); osSyncPrintf(VT_RST); //DmaMgr_SendRequest1(play->interfaceCtx.mapSegment, - //(uintptr_t)_map_i_staticSegmentRomStart + - //((gMapData->dgnMinimapTexIndexOffset[mapIndex] + room) * 0xFF0), + //(uintptr_t)_map_i_staticSegmentRomStart + + //((gMapData->dgnMinimapTexIndexOffset[mapIndex] + room) * 0xFF0), //0xFF0, __FILE__, __LINE__); play->interfaceCtx.mapSegment[0] = ResourceGetDataByName( @@ -617,7 +618,7 @@ void Minimap_DrawCompassIcons(PlayState* play) { s16 X_Margins_Minimap; s16 Y_Margins_Minimap; if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 0) {X_Margins_Minimap = Right_MM_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_Minimap = Right_MM_Margin;}; Y_Margins_Minimap = Bottom_MM_Margin; } else { X_Margins_Minimap = 0; @@ -657,18 +658,18 @@ void Minimap_DrawCompassIcons(PlayState* play) { tempZ /= R_COMPASS_SCALE_Y; s16 tempXOffset = R_COMPASS_OFFSET_X + (CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0) ? mirrorOffset : 0); - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != ORIGINAL_LOCATION) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Left_MM_Margin;}; Matrix_Translate( - OTRGetDimensionFromLeftEdge((tempXOffset + (X_Margins_Minimap*10) + tempX + (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)*10)) / 10.0f), + OTRGetDimensionFromLeftEdge((tempXOffset + (X_Margins_Minimap*10) + tempX + (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)*10)) /10.0f), (R_COMPASS_OFFSET_Y + ((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Right_MM_Margin;}; Matrix_Translate( OTRGetDimensionFromRightEdge((tempXOffset + (X_Margins_Minimap*10) + tempX + (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)*10)) / 10.0f), (R_COMPASS_OFFSET_Y +((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_NONE) { Matrix_Translate( (tempXOffset + tempX + (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)*10) / 10.0f), (R_COMPASS_OFFSET_Y + ((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW); @@ -691,18 +692,18 @@ void Minimap_DrawCompassIcons(PlayState* play) { tempZ = sPlayerInitialPosZ; tempX /= R_COMPASS_SCALE_X * (CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0) ? -1 : 1); tempZ /= R_COMPASS_SCALE_Y; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != ORIGINAL_LOCATION) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Left_MM_Margin;}; Matrix_Translate( - OTRGetDimensionFromLeftEdge((tempXOffset + (X_Margins_Minimap*10) + tempX + (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)*10)) / 10.0f), - (R_COMPASS_OFFSET_Y + ((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 2) {//Anchor Right + OTRGetDimensionFromLeftEdge((tempXOffset + (X_Margins_Minimap * 10) + tempX + (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0) * 10)) / 10.0f), + (R_COMPASS_OFFSET_Y + ((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0) * 10) * -1)) /10.0f, 0.0f, MTXMODE_NEW); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Right_MM_Margin;}; Matrix_Translate( - OTRGetDimensionFromRightEdge((tempXOffset + (X_Margins_Minimap*10) + tempX + (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)*10)) / 10.0f), - (R_COMPASS_OFFSET_Y +((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 3) {//Anchor None + OTRGetDimensionFromRightEdge((tempXOffset + (X_Margins_Minimap*10) + tempX + (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0) * 10)) / 10.0f), + (R_COMPASS_OFFSET_Y +((Y_Margins_Minimap*10)*-1) - tempZ + ((CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0) * 10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_NONE) { Matrix_Translate( (tempXOffset + tempX + (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)*10) / 10.0f), (R_COMPASS_OFFSET_Y - tempZ + ((CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)*10)*-1)) / 10.0f, 0.0f, MTXMODE_NEW); @@ -744,7 +745,7 @@ void Minimap_Draw(PlayState* play) { s16 X_Margins_Minimap; s16 Y_Margins_Minimap; if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 0) {X_Margins_Minimap = Right_MM_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_Minimap = Right_MM_Margin;}; Y_Margins_Minimap = Bottom_MM_Margin; } else { X_Margins_Minimap = 0; @@ -762,7 +763,7 @@ void Minimap_Draw(PlayState* play) { case SCENE_SHADOW_TEMPLE: case SCENE_BOTTOM_OF_THE_WELL: case SCENE_ICE_CAVERN: - if (!R_MINIMAP_DISABLED && CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != 4) { // Not Hidden + if (!R_MINIMAP_DISABLED && CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != HIDDEN) { Gfx_SetupDL_39Overlay(play->state.gfxCtx); gDPSetCombineLERP(OVERLAY_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); @@ -777,15 +778,15 @@ void Minimap_Draw(PlayState* play) { s16 dgnMiniMapX = OTRGetRectDimensionFromRightEdge(R_DGN_MINIMAP_X + X_Margins_Minimap); s16 dgnMiniMapY = R_DGN_MINIMAP_Y + Y_Margins_Minimap; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != 0) { - dgnMiniMapY = R_DGN_MINIMAP_Y+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)+Y_Margins_Minimap; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != ORIGINAL_LOCATION) { + dgnMiniMapY = R_DGN_MINIMAP_Y + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)+Y_Margins_Minimap; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Left_MM_Margin;}; - dgnMiniMapX = OTRGetDimensionFromLeftEdge(R_DGN_MINIMAP_X+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)+X_Margins_Minimap); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 2) {//Anchor Right + dgnMiniMapX = OTRGetDimensionFromLeftEdge(R_DGN_MINIMAP_X + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)+X_Margins_Minimap); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Right_MM_Margin;}; - dgnMiniMapX = OTRGetDimensionFromRightEdge(R_DGN_MINIMAP_X+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)+X_Margins_Minimap); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 3) {//Anchor None + dgnMiniMapX = OTRGetDimensionFromRightEdge(R_DGN_MINIMAP_X + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0) +X_Margins_Minimap); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_NONE) { dgnMiniMapX = CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0); } } @@ -797,8 +798,8 @@ void Minimap_Draw(PlayState* play) { } gSPWideTextureRectangle(OVERLAY_DISP++, dgnMiniMapX << 2, dgnMiniMapY << 2, - (dgnMiniMapX + 96) << 2, (dgnMiniMapY + 85) << 2, G_TX_RENDERTILE, - sValue, 0, 1 << 10, 1 << 10); + (dgnMiniMapX + 96) << 2, (dgnMiniMapY + 85) << 2, G_TX_RENDERTILE, + sValue, 0, 1 << 10, 1 << 10); } if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, mapIndex)) { @@ -854,15 +855,15 @@ void Minimap_Draw(PlayState* play) { s16 oWMiniMapX = OTRGetRectDimensionFromRightEdge(R_OW_MINIMAP_X + X_Margins_Minimap); s16 oWMiniMapY = R_OW_MINIMAP_Y + Y_Margins_Minimap; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != ORIGINAL_LOCATION) { oWMiniMapY = R_OW_MINIMAP_Y+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)+Y_Margins_Minimap; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Left_MM_Margin;}; oWMiniMapX = OTRGetDimensionFromLeftEdge(R_OW_MINIMAP_X+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)+X_Margins_Minimap); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Right_MM_Margin;}; - oWMiniMapX = OTRGetDimensionFromRightEdge(R_OW_MINIMAP_X+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)+X_Margins_Minimap); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 3) {//Anchor None + oWMiniMapX = OTRGetDimensionFromRightEdge(R_OW_MINIMAP_X + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0) +X_Margins_Minimap); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_NONE) { oWMiniMapX = CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0); } } @@ -874,7 +875,7 @@ void Minimap_Draw(PlayState* play) { } gSPWideTextureRectangle(OVERLAY_DISP++, oWMiniMapX << 2, oWMiniMapY << 2, - (oWMiniMapX + gMapData->owMinimapWidth[mapIndex]) << 2, + (oWMiniMapX + gMapData->owMinimapWidth[mapIndex]) << 2, (oWMiniMapY + gMapData->owMinimapHeight[mapIndex]) << 2, G_TX_RENDERTILE, sValue, 0, 1 << 10, 1 << 10); @@ -902,15 +903,15 @@ void Minimap_Draw(PlayState* play) { s16 entranceX = OTRGetRectDimensionFromRightEdge(newX + X_Margins_Minimap); s16 entranceY = newY + Y_Margins_Minimap; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != ORIGINAL_LOCATION) { entranceY = newY + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0) + Y_Margins_Minimap; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 1) { // Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Left_MM_Margin;}; entranceX = OTRGetRectDimensionFromLeftEdge(newX + X_Margins_Minimap + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 2) { // Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Right_MM_Margin;}; entranceX = OTRGetRectDimensionFromRightEdge(newX + X_Margins_Minimap + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 3) { // Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_NONE) { entranceX = newX + X_Margins_Minimap + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0); } } @@ -925,8 +926,8 @@ void Minimap_Draw(PlayState* play) { //! @bug UB: sEntranceIconMapIndex can be up to 23 and is accessing owEntranceFlag which is size 20 if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) || ((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) && - ((gSaveContext.infTable[26] & gBitFlags[gMapData->owEntranceFlag[mapIndex]]) || - CVarGetInteger(CVAR_ENHANCEMENT("AlwaysShowDungeonMinimapIcon"), 0)))) { + ((gSaveContext.infTable[26] & gBitFlags[gMapData->owEntranceFlag[mapIndex]]) || + CVarGetInteger(CVAR_ENHANCEMENT("AlwaysShowDungeonMinimapIcon"), 0)))) { gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, iconSize, iconSize, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); @@ -938,22 +939,22 @@ void Minimap_Draw(PlayState* play) { s16 origX = CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0) ? 256 : 270; s16 entranceX = OTRGetRectDimensionFromRightEdge(origX + X_Margins_Minimap); s16 entranceY = 154 + Y_Margins_Minimap; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != ORIGINAL_LOCATION) { entranceY = 154 + Y_Margins_Minimap + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0); - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Left_MM_Margin;}; entranceX = OTRGetRectDimensionFromLeftEdge(origX + X_Margins_Minimap + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap = Right_MM_Margin;}; entranceX = OTRGetRectDimensionFromRightEdge(origX + X_Margins_Minimap + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_NONE) { entranceX = origX + X_Margins_Minimap + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0); } } // Ice Cavern entrance icon if ((play->sceneNum == SCENE_ZORAS_FOUNTAIN) && ((gSaveContext.infTable[26] & gBitFlags[9]) || - CVarGetInteger(CVAR_ENHANCEMENT("AlwaysShowDungeonMinimapIcon"), 0))) { + CVarGetInteger(CVAR_ENHANCEMENT("AlwaysShowDungeonMinimapIcon"), 0))) { gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, iconSize, iconSize, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); diff --git a/soh/src/code/z_map_mark.c b/soh/src/code/z_map_mark.c index 1831b8fdd..65e1bd1b1 100644 --- a/soh/src/code/z_map_mark.c +++ b/soh/src/code/z_map_mark.c @@ -3,6 +3,7 @@ #include "textures/parameter_static/parameter_static.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" +#include "soh/Enhancements/cosmetics/cosmeticsTypes.h" typedef struct { /* 0x00 */ void* texture; @@ -72,9 +73,9 @@ void MapMark_Init(PlayState* play) { } //sLoadedMarkDataTable = gMapMarkDataTableVanilla; //sLoadedMarkDataTable = (void*)(uintptr_t)( - //(overlay->vramTable != NULL) - //? (void*)((uintptr_t)overlay->vramTable - ((intptr_t)overlay->vramStart - (intptr_t)overlay->loadedRamAddr)) - //: NULL); + //(overlay->vramTable != NULL) + //? (void*)((uintptr_t)overlay->vramTable - ((intptr_t)overlay->vramStart - (intptr_t)overlay->loadedRamAddr)) + //: NULL); } void MapMark_ClearPointers(PlayState* play) { @@ -106,7 +107,7 @@ void MapMark_DrawForDungeon(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); while (true) { - if (mapMarkIconData->markType == MAP_MARK_NONE) { + if (mapMarkIconData->markType == MAP_MARK_NONE) { break; } @@ -123,7 +124,7 @@ void MapMark_DrawForDungeon(PlayState* play) { s32 X_Margins_Minimap_ic; s32 Y_Margins_Minimap_ic; if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 0) {X_Margins_Minimap_ic = Right_MC_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_Minimap_ic = Right_MC_Margin;}; Y_Margins_Minimap_ic = Bottom_MC_Margin; } else { X_Margins_Minimap_ic = 0; @@ -148,9 +149,9 @@ void MapMark_DrawForDungeon(PlayState* play) { //Minimap chest / boss icon const s32 PosX_Minimap_ori = GREG(94) + OTRGetRectDimensionFromRightEdge(markPointX+X_Margins_Minimap_ic) + 204; const s32 PosY_Minimap_ori = GREG(95) + markPoint->y + Y_Margins_Minimap_ic + 140; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != 0) { - rectTop = (markPoint->y + Y_Margins_Minimap_ic + 140 + CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)); - if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) != ORIGINAL_LOCATION) { + rectTop = (markPoint->y + Y_Margins_Minimap_ic + 140+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosY"), 0)); + if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap_ic = Left_MC_Margin;}; if (play->sceneNum == SCENE_DEKU_TREE || play->sceneNum == SCENE_DODONGOS_CAVERN || play->sceneNum == SCENE_JABU_JABU || play->sceneNum == SCENE_FOREST_TEMPLE || play->sceneNum == SCENE_FIRE_TEMPLE || play->sceneNum == SCENE_WATER_TEMPLE || @@ -160,12 +161,12 @@ void MapMark_DrawForDungeon(PlayState* play) { } else { rectLeft = OTRGetRectDimensionFromLeftEdge(markPointX+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)+204+X_Margins_Minimap_ic); } - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.UseMargins"), 0) != 0) {X_Margins_Minimap_ic = Right_MC_Margin;}; - rectLeft = OTRGetRectDimensionFromRightEdge(markPointX+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)+204+X_Margins_Minimap_ic); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 3) {//Anchor None + rectLeft = OTRGetRectDimensionFromRightEdge(markPointX+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0) + 204 +X_Margins_Minimap_ic); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == ANCHOR_NONE) { rectLeft = markPointX+CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosX"), 0)+204+X_Margins_Minimap_ic; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Minimap.PosType"), 0) == HIDDEN) { rectLeft = -9999; } } else { diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index 39c6e111d..a696292ef 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -838,7 +838,7 @@ void func_80083108(PlayState* play) { // Check for the player being swordless in rando (no item on B and swordless flag set) // Child is always assumed due to not finding kokiri sword yet. Adult is only checked with MS shuffle on. u8 randoIsSwordless = IS_RANDO && (LINK_IS_CHILD || Randomizer_GetSettingValue(RSK_SHUFFLE_MASTER_SWORD)) && - gSaveContext.equips.buttonItems[0] == ITEM_NONE && Flags_GetInfTable(INFTABLE_SWORDLESS); + gSaveContext.equips.buttonItems[0] == ITEM_NONE && Flags_GetInfTable(INFTABLE_SWORDLESS); u8 randoWasSwordlessBefore = IS_RANDO && gSaveContext.buttonStatus[0] == SWORDLESS_STATUS; u8 randoCanTrackSwordless = randoIsSwordless && !randoWasSwordlessBefore; @@ -912,7 +912,7 @@ void func_80083108(PlayState* play) { Interface_ChangeAlpha(12); } } - // Don't hide the HUD in the Chamber of Sages when in Boss Rush. + // Don't hide the HUD in the Chamber of Sages when in Boss Rush. } else if (play->sceneNum == SCENE_CHAMBER_OF_THE_SAGES && !IS_BOSS_RUSH) { Interface_ChangeAlpha(1); } else if (play->sceneNum == SCENE_FISHING_POND) { @@ -964,8 +964,8 @@ void func_80083108(PlayState* play) { } else if (msgCtx->msgMode == MSGMODE_NONE) { if (GameInteractor_PacifistModeActive()) { gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = - gSaveContext.buttonStatus[3] = gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = - gSaveContext.buttonStatus[7] = gSaveContext.buttonStatus[8] = BTN_DISABLED; + gSaveContext.buttonStatus[3] = gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = + gSaveContext.buttonStatus[7] = gSaveContext.buttonStatus[8] = BTN_DISABLED; } else if ((Player_GetEnvironmentalHazard(play) >= 2) && (Player_GetEnvironmentalHazard(play) < 5)) { if (gSaveContext.buttonStatus[0] != BTN_DISABLED) { sp28 = 1; @@ -1178,7 +1178,7 @@ void func_80083108(PlayState* play) { && (gSaveContext.equips.buttonItems[i] <= ITEM_MASK_TRUTH)) { gSaveContext.buttonStatus[BUTTON_STATUS_INDEX(i)] = BTN_ENABLED; } else if ((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) && - (gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK)) { + (gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK)) { if (gSaveContext.buttonStatus[BUTTON_STATUS_INDEX(i)] == BTN_ENABLED) { sp28 = 1; } @@ -1422,7 +1422,7 @@ Gfx* Gfx_TextureIA8(Gfx* displayListHead, void* texture, s16 textureWidth, s16 t G_TX_NOLOD); gSPWideTextureRectangle(displayListHead++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, - (rectTop + rectHeight) << 2, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); + (rectTop + rectHeight) << 2, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); return displayListHead; } @@ -1434,7 +1434,7 @@ Gfx* Gfx_TextureI8(Gfx* displayListHead, void* texture, s16 textureWidth, s16 te G_TX_NOLOD); gSPWideTextureRectangle(displayListHead++, rectLeft << 2, rectTop << 2, (rectLeft + rectWidth) << 2, - (rectTop + rectHeight) << 2, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); + (rectTop + rectHeight) << 2, G_TX_RENDERTILE, 0, 0, dsdx, dtdy); return displayListHead; } @@ -1483,13 +1483,13 @@ void Rando_Inventory_SwapAgeEquipment(void) { gSaveContext.equips.cButtonSlots[1] = SLOT_BOMB; gSaveContext.equips.cButtonSlots[2] = SLOT_OCARINA; gSaveContext.equips.equipment = (EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4)) | - (EQUIP_VALUE_SHIELD_HYLIAN << (EQUIP_TYPE_SHIELD * 4)) | - (EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4)) | - (EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4)); + (EQUIP_VALUE_SHIELD_HYLIAN << (EQUIP_TYPE_SHIELD * 4)) | + (EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4)) | + (EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4)); // In Master Sword Shuffle we want to override the equip of the master sword from the vanilla code // First check we have the Master sword in our inventory, and if not, then unequip - if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_MASTER_SWORD) && + if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_MASTER_SWORD) && !CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER)) { gSaveContext.equips.equipment &= (u16) ~(0xF << (EQUIP_TYPE_SWORD * 4)); gSaveContext.equips.buttonItems[0] = ITEM_NONE; @@ -1524,7 +1524,7 @@ void Rando_Inventory_SwapAgeEquipment(void) { } // In Master Sword Shuffle we want to set the swordless flag if no item is on the B button - if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_MASTER_SWORD) && + if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_MASTER_SWORD) && gSaveContext.equips.buttonItems[0] == ITEM_NONE) { Flags_SetInfTable(INFTABLE_SWORDLESS); } @@ -1648,9 +1648,9 @@ void Inventory_SwapAgeEquipment(void) { gSaveContext.equips.cButtonSlots[1] = SLOT_BOMB; gSaveContext.equips.cButtonSlots[2] = SLOT_OCARINA; gSaveContext.equips.equipment = (EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4)) | - (EQUIP_VALUE_SHIELD_HYLIAN << (EQUIP_TYPE_SHIELD * 4)) | - (EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4)) | - (EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4)); + (EQUIP_VALUE_SHIELD_HYLIAN << (EQUIP_TYPE_SHIELD * 4)) | + (EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4)) | + (EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4)); // Set the dpad to nothing gSaveContext.equips.buttonItems[4] = ITEM_NONE; gSaveContext.equips.buttonItems[5] = ITEM_NONE; @@ -1881,14 +1881,14 @@ u8 Return_Item(u8 itemID, ModIndex modId, ItemID returnItem) { /** * @brief Adds the given item to Link's inventory. - * + * * NOTE: This function has been edited to be safe to use with a NULL play. * If you need to add to this function, be sure you check if the play is not * NULL before doing any operations requiring it. - * - * @param play - * @param item - * @return u8 + * + * @param play + * @param item + * @return u8 */ u8 Item_Give(PlayState* play, u8 item) { //prevents getting sticks without the bag in case something got missed @@ -1987,7 +1987,7 @@ u8 Item_Give(PlayState* play, u8 item) { if (item == ITEM_SWORD_BGS) { gSaveContext.swordHealth = 8; - if (ALL_EQUIP_VALUE(EQUIP_TYPE_SWORD) == + if (ALL_EQUIP_VALUE(EQUIP_TYPE_SWORD) == ((1 << EQUIP_INV_SWORD_KOKIRI) | (1 << EQUIP_INV_SWORD_MASTER) | (1 << EQUIP_INV_SWORD_BIGGORON) | (1 << EQUIP_INV_SWORD_BROKENGIANTKNIFE))) { @@ -2000,7 +2000,7 @@ u8 Item_Give(PlayState* play, u8 item) { } } } - + } else if (item == ITEM_SWORD_MASTER) { gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER; gSaveContext.equips.equipment &= (u16) ~(0xF << (EQUIP_TYPE_SWORD * 4)); @@ -2495,7 +2495,7 @@ u8 Item_CheckObtainability(u8 item) { return ITEM_NONE; } } - + if ((item >= ITEM_SONG_MINUET) && (item <= ITEM_SONG_STORMS)) { return ITEM_NONE; } else if ((item >= ITEM_MEDALLION_FOREST) && (item <= ITEM_MEDALLION_LIGHT)) { @@ -2759,8 +2759,8 @@ bool Inventory_HatchPocketCucco(PlayState* play) { return Inventory_ReplaceItem(play, ITEM_POCKET_EGG, ITEM_POCKET_CUCCO); } - if (!PLAYER_HAS_SHUFFLED_ADULT_TRADE_ITEM(ITEM_POCKET_EGG)) { - return 0; + if (!PLAYER_HAS_SHUFFLED_ADULT_TRADE_ITEM(ITEM_POCKET_EGG)) { + return 0; } gSaveContext.ship.quest.data.randomizer.adultTradeItems &= ~ADULT_TRADE_FLAG(ITEM_POCKET_EGG); @@ -2798,7 +2798,7 @@ void Interface_LoadActionLabel(InterfaceContext* interfaceCtx, u16 action, s16 l } doAction = newName[loadOffset]; } - + char* segment = interfaceCtx->doActionSegment[loadOffset]; interfaceCtx->doActionSegment[loadOffset] = action != DO_ACTION_NONE ? doAction : gEmptyTexture; gSegments[7] = interfaceCtx->doActionSegment[loadOffset]; @@ -2865,7 +2865,7 @@ void Interface_LoadActionLabelB(PlayState* play, u16 action) { } interfaceCtx->unk_1FC = action; - + char* segment = interfaceCtx->doActionSegment[1]; interfaceCtx->doActionSegment[1] = action != DO_ACTION_NONE ? doAction : gEmptyTexture; osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK); @@ -2890,7 +2890,7 @@ s32 Health_ChangeBy(PlayState* play, s16 healthChange) { if (healthChange < 0) { gSaveContext.health = 0; } - + return 0; } @@ -2961,7 +2961,7 @@ void Rupees_ChangeBy(s16 rupeeChange) { void GameplayStats_UpdateAmmoUsed(s16 item, s16 ammoUsed) { - switch (item) { + switch (item) { case ITEM_STICK: gSaveContext.ship.stats.count[COUNT_AMMO_USED_STICK] += ammoUsed; break; @@ -3457,34 +3457,34 @@ void Interface_DrawMagicBar(PlayState* play) { s16 PosX_MidEnd; s16 rMagicFillX; s32 lineLength = CVarGetInteger(CVAR_COSMETIC("HUD.Hearts.LineLength"), 10); - if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) != ORIGINAL_LOCATION) { magicBarY = CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosY"), 0)+Y_Margins; - if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.UseMargins"), 0) != 0) {X_Margins = Left_HUD_Margin;}; PosX_Start = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins); rMagicBarX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins); PosX_MidEnd = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins+8); rMagicFillX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins+8); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.UseMargins"), 0) != 0) {X_Margins = Right_HUD_Margin;}; PosX_Start = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins); rMagicBarX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins); PosX_MidEnd = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins+8); rMagicFillX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins+8); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == ANCHOR_NONE) { PosX_Start = CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins; rMagicBarX = CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins; PosX_MidEnd = CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins+8; rMagicFillX = CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0)+X_Margins+8; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == 4) {//hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == HIDDEN) { PosX_Start = -9999; rMagicBarX = -9999; PosX_MidEnd = -9999; rMagicFillX = -9999; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == 5) {//Anchor To life meter + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosType"), 0) == ANCHOR_TO_LIFE_METER) { magicBarY = R_MAGIC_BAR_SMALL_Y-2 + - magicDrop*(lineLength == 0 ? 0 : (gSaveContext.healthCapacity-1)/(0x10*lineLength)) + - CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosY"), 0) + getHealthMeterYOffset(); + magicDrop*(lineLength == 0 ? 0 : (gSaveContext.healthCapacity-1)/(0x10*lineLength)) + + CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosY"), 0) + getHealthMeterYOffset(); s16 xPushover = CVarGetInteger(CVAR_COSMETIC("HUD.MagicBar.PosX"), 0) + getHealthMeterXOffset() + R_MAGIC_BAR_X-1; PosX_Start = xPushover; rMagicBarX = xPushover; @@ -3534,8 +3534,8 @@ void Interface_DrawMagicBar(PlayState* play) { G_TX_NOLOD, G_TX_NOLOD); gSPWideTextureRectangle(OVERLAY_DISP++, rMagicFillX << 2, (magicBarY + 3) << 2, - (rMagicFillX + gSaveContext.magic) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, - 0, 1 << 10, 1 << 10); + (rMagicFillX + gSaveContext.magic) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); // Fill the rest of the bar with the normal magic color gDPPipeSync(OVERLAY_DISP++); @@ -3565,8 +3565,8 @@ void Interface_DrawMagicBar(PlayState* play) { G_TX_NOLOD, G_TX_NOLOD); gSPWideTextureRectangle(OVERLAY_DISP++, rMagicFillX << 2, (magicBarY + 3) << 2, - (rMagicFillX + gSaveContext.magic) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, - 0, 1 << 10, 1 << 10); + (rMagicFillX + gSaveContext.magic) << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, + 0, 1 << 10, 1 << 10); } } @@ -3844,12 +3844,12 @@ void Interface_DrawItemButtons(PlayState* play) { s16 Y_Margins_BtnB; s16 BBtn_Size = 32; int BBtnScaled = BBtn_Size * 0.95f; - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != ORIGINAL_LOCATION) { BBtnScaled = BBtn_Size * CVarGetFloat(CVAR_COSMETIC("HUD.BButton.Scale"), 0.95f); } int BBtn_factor = (1 << 10) * BBtn_Size / BBtnScaled; if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 0) {X_Margins_BtnB = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_BtnB = Right_HUD_Margin;}; Y_Margins_BtnB = (Top_HUD_Margin*-1); } else { X_Margins_BtnB = 0; @@ -3859,18 +3859,18 @@ void Interface_DrawItemButtons(PlayState* play) { s16 PosY_BtnB_ori = R_ITEM_BTN_Y(0)+Y_Margins_BtnB; s16 PosX_BtnB; s16 PosY_BtnB; - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != 0) { - PosY_BtnB = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosY"), 0)+Y_Margins_BtnB; - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != ORIGINAL_LOCATION) { + PosY_BtnB = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosY"), 0) + Y_Margins_BtnB; + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) {X_Margins_BtnB = Left_HUD_Margin;}; - PosX_BtnB = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 2) {//Anchor Right + PosX_BtnB = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0) + X_Margins_BtnB); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) {X_Margins_BtnB = Right_HUD_Margin;}; - PosX_BtnB = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 3) {//Anchor None + PosX_BtnB = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0) + X_Margins_BtnB); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_NONE) { PosX_BtnB = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 4) {//Hidden - PosX_BtnB = -9999; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == HIDDEN) { + PosX_BtnB = -9999; } } else { PosY_BtnB = PosY_BtnB_ori; @@ -3880,7 +3880,7 @@ void Interface_DrawItemButtons(PlayState* play) { s16 X_Margins_StartBtn; s16 Y_Margins_StartBtn; if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == ORIGINAL_LOCATION) { X_Margins_StartBtn = Right_HUD_Margin; }; Y_Margins_StartBtn = Top_HUD_Margin*-1; @@ -3891,7 +3891,7 @@ void Interface_DrawItemButtons(PlayState* play) { s16 StartBtn_Icon_H = 32; s16 StartBtn_Icon_W = 32; float Start_BTN_Scale = 0.75f; - if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) != ORIGINAL_LOCATION) { Start_BTN_Scale = CVarGetFloat(CVAR_COSMETIC("HUD.StartButton.Scale"), 0.75f); } int StartBTN_H_Scaled = StartBtn_Icon_H * Start_BTN_Scale; @@ -3904,18 +3904,18 @@ void Interface_DrawItemButtons(PlayState* play) { s16 StartBTN_Label_H = DO_ACTION_TEX_HEIGHT(); s16 PosX_StartBtn; s16 PosY_StartBtn; - if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) != 0) { - PosY_StartBtn = CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosY"), 0)-(Start_BTN_Scale*13)+Y_Margins_StartBtn; - if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) != ORIGINAL_LOCATION) { + PosY_StartBtn = CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosY"), 0) - (Start_BTN_Scale*13)+Y_Margins_StartBtn; + if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.UseMargins"), 0) != 0) {X_Margins_StartBtn = Left_HUD_Margin;}; - PosX_StartBtn = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosX"), 0)-(Start_BTN_Scale*13)+X_Margins_StartBtn); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == 2) {//Anchor Right + PosX_StartBtn = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosX"), 0)-(Start_BTN_Scale * 13) + X_Margins_StartBtn); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.UseMargins"), 0) != 0) {X_Margins_StartBtn = Right_HUD_Margin;}; - PosX_StartBtn = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosX"), 0)-(Start_BTN_Scale*13)+X_Margins_StartBtn); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == 3) {//Anchor None + PosX_StartBtn = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosX"), 0)-(Start_BTN_Scale * 13) + X_Margins_StartBtn); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == ANCHOR_NONE) { PosX_StartBtn = CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == 4) {//Hidden - PosX_StartBtn = -9999; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.StartButton.PosType"), 0) == HIDDEN) { + PosX_StartBtn = -9999; } } else { StartBTN_H_Scaled = StartBtn_Icon_H * 0.75f; @@ -3935,29 +3935,29 @@ void Interface_DrawItemButtons(PlayState* play) { s16 Y_Margins_CU; s16 Y_Margins_CD; if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 0) {X_Margins_CL = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CL = Right_HUD_Margin;}; Y_Margins_CL = (Top_HUD_Margin*-1); } else { X_Margins_CL = 0; Y_Margins_CL = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 0) {X_Margins_CR = Right_HUD_Margin;}; - Y_Margins_CR = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CR = Right_HUD_Margin;}; + Y_Margins_CR = (Top_HUD_Margin * -1); } else { X_Margins_CR = 0; Y_Margins_CR = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == 0) {X_Margins_CU = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CU = Right_HUD_Margin;}; Y_Margins_CU = (Top_HUD_Margin*-1); } else { X_Margins_CU = 0; Y_Margins_CU = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 0) {X_Margins_CD = Right_HUD_Margin;}; - Y_Margins_CD = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CD = Right_HUD_Margin;}; + Y_Margins_CD = (Top_HUD_Margin * -1); } else { X_Margins_CD = 0; Y_Margins_CD = 0; @@ -3976,21 +3976,21 @@ void Interface_DrawItemButtons(PlayState* play) { s16 C_Left_BTN_Size = 32; float CLeftScale = CVarGetFloat(CVAR_COSMETIC("HUD.CLeftButton.Scale"), 0.87f); int CLeftScaled = C_Left_BTN_Size * 0.87f; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != ORIGINAL_LOCATION) { CLeftScaled = C_Left_BTN_Size * CLeftScale; } int CLeft_factor = (1 << 10) * C_Left_BTN_Size / CLeftScaled; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != 0) { - C_Left_BTN_Pos[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosY"), 0)+Y_Margins_CL; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != ORIGINAL_LOCATION) { + C_Left_BTN_Pos[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosY"), 0) + Y_Margins_CL; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Left_HUD_Margin;}; - C_Left_BTN_Pos[0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 2) {//Anchor Right + C_Left_BTN_Pos[0] =OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0) + X_Margins_CL); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Right_HUD_Margin;}; - C_Left_BTN_Pos[0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 3) {//Anchor None + C_Left_BTN_Pos[0] =OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0) + X_Margins_CL); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_NONE) { C_Left_BTN_Pos[0] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == HIDDEN) { C_Left_BTN_Pos[0] = -9999; } } else { @@ -4001,21 +4001,21 @@ void Interface_DrawItemButtons(PlayState* play) { s16 C_Right_BTN_Size = 32; float CRightScale = CVarGetFloat(CVAR_COSMETIC("HUD.CRightButton.Scale"), 0.87f); int CRightScaled = C_Right_BTN_Size * 0.87f; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != ORIGINAL_LOCATION) { CRightScaled = C_Right_BTN_Size * CRightScale; } int CRight_factor = (1 << 10) * C_Right_BTN_Size / CRightScaled; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != 0) { - C_Right_BTN_Pos[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosY"), 0)+Y_Margins_CR; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != ORIGINAL_LOCATION) { + C_Right_BTN_Pos[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosY"), 0) + Y_Margins_CR; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Left_HUD_Margin;}; - C_Right_BTN_Pos[0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 2) {//Anchor Right + C_Right_BTN_Pos[0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0) + X_Margins_CR); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Right_HUD_Margin;}; - C_Right_BTN_Pos[0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 3) {//Anchor None + C_Right_BTN_Pos[0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0) + X_Margins_CR); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_NONE) { C_Right_BTN_Pos[0] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == HIDDEN) { C_Right_BTN_Pos[0] = -9999; } } else { @@ -4026,21 +4026,21 @@ void Interface_DrawItemButtons(PlayState* play) { s16 C_Up_BTN_Size = 32; int CUpScaled = C_Up_BTN_Size * 0.5f; float CUpScale = CVarGetFloat(CVAR_COSMETIC("HUD.CUpButton.Scale"), 0.5f); - if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) != ORIGINAL_LOCATION) { CUpScaled = C_Up_BTN_Size * CUpScale; } int CUp_factor = (1 << 10) * C_Up_BTN_Size / CUpScaled; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) != 0) { - C_Up_BTN_Pos[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosY"), 0)+Y_Margins_CU; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) != ORIGINAL_LOCATION) { + C_Up_BTN_Pos[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosY"), 0) + Y_Margins_CU; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.UseMargins"), 0) != 0) {X_Margins_CU = Left_HUD_Margin;}; - C_Up_BTN_Pos[0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosX"), 0)+X_Margins_CU); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == 2) {//Anchor Right + C_Up_BTN_Pos[0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosX"), 0) + X_Margins_CU); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.UseMargins"), 0) != 0) {X_Margins_CU = Right_HUD_Margin;}; - C_Up_BTN_Pos[0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosX"), 0)+X_Margins_CU); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == 3) {//Anchor None + C_Up_BTN_Pos[0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosX"), 0) + X_Margins_CU); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == ANCHOR_NONE) { C_Up_BTN_Pos[0] = CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.PosType"), 0) == HIDDEN) { C_Up_BTN_Pos[0] = -9999; } } else { @@ -4050,23 +4050,23 @@ void Interface_DrawItemButtons(PlayState* play) { //C Button down s16 C_Down_BTN_Size = 32; float CDownScale = CVarGetFloat(CVAR_COSMETIC("HUD.CDownButton.Scale"), 0.87f); - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ORIGINAL_LOCATION) { CDownScale = 0.87f; } int CDownScaled = C_Down_BTN_Size * CDownScale; int CDown_factor = (1 << 10) * C_Down_BTN_Size / CDownScaled; int PositionAdjustment = CDownScaled/2; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != 0) { - C_Down_BTN_Pos[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosY"), 0)+Y_Margins_CD; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != ORIGINAL_LOCATION) { + C_Down_BTN_Pos[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosY"), 0) + Y_Margins_CD; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Left_HUD_Margin;}; - C_Down_BTN_Pos[0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 2) {//Anchor Right + C_Down_BTN_Pos[0] = (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0) + X_Margins_CD); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Right_HUD_Margin;}; - C_Down_BTN_Pos[0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 3) {//Anchor None + C_Down_BTN_Pos[0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0) + X_Margins_CD); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_NONE) { C_Down_BTN_Pos[0] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == HIDDEN) { C_Down_BTN_Pos[0] = -9999; } } else { @@ -4089,21 +4089,21 @@ void Interface_DrawItemButtons(PlayState* play) { gDPPipeSync(OVERLAY_DISP++); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, interfaceCtx->cLeftAlpha); gSPWideTextureRectangle(OVERLAY_DISP++, C_Left_BTN_Pos[0] << 2, C_Left_BTN_Pos[1] << 2, - (C_Left_BTN_Pos[0] + R_ITEM_BTN_WIDTH(1)) << 2, + (C_Left_BTN_Pos[0] + R_ITEM_BTN_WIDTH(1)) << 2, (C_Left_BTN_Pos[1] + R_ITEM_BTN_WIDTH(1)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(1) << 1, R_ITEM_BTN_DD(1) << 1); // C-Down Button Color & Texture gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, interfaceCtx->cDownAlpha); gSPWideTextureRectangle(OVERLAY_DISP++, C_Down_BTN_Pos[0] << 2, C_Down_BTN_Pos[1] << 2, - (C_Down_BTN_Pos[0] + R_ITEM_BTN_WIDTH(2)) << 2, + (C_Down_BTN_Pos[0] + R_ITEM_BTN_WIDTH(2)) << 2, (C_Down_BTN_Pos[1] + R_ITEM_BTN_WIDTH(2)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(2) << 1, R_ITEM_BTN_DD(2) << 1); // C-Right Button Color & Texture gDPSetPrimColor(OVERLAY_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, interfaceCtx->cRightAlpha); gSPWideTextureRectangle(OVERLAY_DISP++, C_Right_BTN_Pos[0] << 2, C_Right_BTN_Pos[1] << 2, - (C_Right_BTN_Pos[0] + R_ITEM_BTN_WIDTH(3)) << 2, + (C_Right_BTN_Pos[0] + R_ITEM_BTN_WIDTH(3)) << 2, (C_Right_BTN_Pos[1] + R_ITEM_BTN_WIDTH(3)) << 2, G_TX_RENDERTILE, 0, 0, R_ITEM_BTN_DD(3) << 1, R_ITEM_BTN_DD(3) << 1); @@ -4114,8 +4114,8 @@ void Interface_DrawItemButtons(PlayState* play) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, startButtonColor.r, startButtonColor.g, startButtonColor.b, interfaceCtx->startAlpha); gSPWideTextureRectangle(OVERLAY_DISP++, PosX_StartBtn << 2, PosY_StartBtn << 2, - (PosX_StartBtn + StartBTN_W_Scaled) << 2, (PosY_StartBtn + StartBTN_H_Scaled) << 2, - G_TX_RENDERTILE, 0, 0, StartBTN_W_factor, StartBTN_H_factor); + (PosX_StartBtn + StartBTN_W_Scaled) << 2, (PosY_StartBtn + StartBTN_H_Scaled) << 2, + G_TX_RENDERTILE, 0, 0, StartBTN_W_factor, StartBTN_H_factor); gDPPipeSync(OVERLAY_DISP++); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->startAlpha); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); @@ -4129,7 +4129,7 @@ void Interface_DrawItemButtons(PlayState* play) { gDPPipeSync(OVERLAY_DISP++); gSPSetGeometryMode(OVERLAY_DISP++, G_CULL_BACK); gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, - PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->startAlpha); gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); Matrix_Translate(PosX_StartBtn-160+((Start_BTN_Scale+Start_BTN_Scale/3)*11.5f), (PosY_StartBtn-120+((Start_BTN_Scale+Start_BTN_Scale/3)*11.5f)) * -1, 1.0f, MTXMODE_NEW); @@ -4195,22 +4195,22 @@ void Interface_DrawItemButtons(PlayState* play) { s16 Y_Margins_CR; s16 Y_Margins_CD; if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 0) {X_Margins_CL = Right_HUD_Margin;}; - Y_Margins_CL = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CL = Right_HUD_Margin;}; + Y_Margins_CL = (Top_HUD_Margin * -1); } else { X_Margins_CL = 0; Y_Margins_CL = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 0) {X_Margins_CR = Right_HUD_Margin;}; - Y_Margins_CR = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CR = Right_HUD_Margin;}; + Y_Margins_CR = (Top_HUD_Margin * -1); } else { X_Margins_CR = 0; Y_Margins_CR = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 0) {X_Margins_CD = Right_HUD_Margin;}; - Y_Margins_CD = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CD = Right_HUD_Margin;}; + Y_Margins_CD = (Top_HUD_Margin * -1); } else { X_Margins_CD = 0; Y_Margins_CD = 0; @@ -4226,18 +4226,18 @@ void Interface_DrawItemButtons(PlayState* play) { { R_ITEM_ICON_X(3)+X_Margins_CR, R_ITEM_ICON_Y(3)+Y_Margins_CR }, }; s16 ItemIconPos[3][2]; //(X,Y) - //C button Left - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != 0) { - ItemIconPos[0][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosY"), 0)+Y_Margins_CL; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 1) {//Anchor Left + // C button Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[0][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosY"), 0) + Y_Margins_CL; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Left_HUD_Margin;}; - ItemIconPos[0][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[0][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0) + X_Margins_CL); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Right_HUD_Margin;}; - ItemIconPos[0][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 3) {//Anchor None + ItemIconPos[0][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0) + X_Margins_CL); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_NONE) { ItemIconPos[0][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == HIDDEN) { ItemIconPos[0][0] = -9999; } } else { @@ -4245,17 +4245,17 @@ void Interface_DrawItemButtons(PlayState* play) { ItemIconPos[0][1] = ItemIconPos_ori[0][1]; } //C Button down - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != 0) { - ItemIconPos[1][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosY"), 0)+Y_Margins_CD; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[1][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosY"), 0) + Y_Margins_CD; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Left_HUD_Margin;}; - ItemIconPos[1][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[1][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0) + X_Margins_CD); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Right_HUD_Margin;}; - ItemIconPos[1][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 3) {//Anchor None + ItemIconPos[1][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0) + X_Margins_CD); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_NONE) { ItemIconPos[1][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == HIDDEN) { ItemIconPos[1][0] = -9999; } } else { @@ -4263,17 +4263,17 @@ void Interface_DrawItemButtons(PlayState* play) { ItemIconPos[1][1] = ItemIconPos_ori[1][1]; } //C button Right - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != 0) { - ItemIconPos[2][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosY"), 0)+Y_Margins_CR; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[2][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosY"), 0) + Y_Margins_CR; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Left_HUD_Margin;}; - ItemIconPos[2][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[2][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0) + X_Margins_CR); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Right_HUD_Margin;}; - ItemIconPos[2][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 3) {//Anchor None + ItemIconPos[2][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0) + X_Margins_CR); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_NONE) { ItemIconPos[2][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == HIDDEN) { ItemIconPos[2][0] = -9999; } } else { @@ -4324,36 +4324,36 @@ void Interface_DrawItemIconTexture(PlayState* play, void* texture, s16 button) { s16 X_Margins_DPad_Items; s16 Y_Margins_DPad_Items; if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 0) {X_Margins_BtnB = Right_HUD_Margin;}; - Y_Margins_BtnB = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_BtnB = Right_HUD_Margin;}; + Y_Margins_BtnB = (Top_HUD_Margin * -1); } else { X_Margins_BtnB = 0; Y_Margins_BtnB = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 0) {X_Margins_CL = Right_HUD_Margin;}; - Y_Margins_CL = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CL = Right_HUD_Margin;}; + Y_Margins_CL = (Top_HUD_Margin * -1); } else { X_Margins_CL = 0; Y_Margins_CL = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 0) {X_Margins_CR = Right_HUD_Margin;}; - Y_Margins_CR = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CR = Right_HUD_Margin;}; + Y_Margins_CR = (Top_HUD_Margin * -1); } else { X_Margins_CR = 0; Y_Margins_CR = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 0) {X_Margins_CD = Right_HUD_Margin;}; - Y_Margins_CD = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CD = Right_HUD_Margin;}; + Y_Margins_CD = (Top_HUD_Margin * -1); } else { X_Margins_CD = 0; Y_Margins_CD = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 0) {X_Margins_DPad_Items = Right_HUD_Margin;}; - Y_Margins_DPad_Items = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_DPad_Items = Right_HUD_Margin;}; + Y_Margins_DPad_Items = (Top_HUD_Margin * -1); } else { X_Margins_DPad_Items = 0; Y_Margins_DPad_Items = 0; @@ -4385,30 +4385,30 @@ void Interface_DrawItemIconTexture(PlayState* play, void* texture, s16 button) { {23, 8},//Right }; //(X,Y) Used with custom position to place it properly. s16 ItemIconPos[8][2]; //(X,Y) - //DPadItems - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) != 0) { - ItemIconPos[4][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[0][1];//Up - ItemIconPos[5][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[1][1];//Down - ItemIconPos[6][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[2][1];//Left - ItemIconPos[7][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[3][1];//Right - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 1) {//Anchor Left + // DPadItems + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[4][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0) + Y_Margins_DPad_Items + DPad_ItemsOffset[0][1]; // Up + ItemIconPos[5][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0) + Y_Margins_DPad_Items + DPad_ItemsOffset[1][1]; // Down + ItemIconPos[6][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0) + Y_Margins_DPad_Items + DPad_ItemsOffset[2][1]; // Left + ItemIconPos[7][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0) + Y_Margins_DPad_Items + DPad_ItemsOffset[3][1]; // Right + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) {X_Margins_DPad_Items = Left_HUD_Margin;}; - ItemIconPos[4][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[0][0]); - ItemIconPos[5][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[1][0]); - ItemIconPos[6][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[2][0]); - ItemIconPos[7][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[3][0]); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[4][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[0][0]); + ItemIconPos[5][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[1][0]); + ItemIconPos[6][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[2][0]); + ItemIconPos[7][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[3][0]); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) {X_Margins_DPad_Items = Right_HUD_Margin;}; - ItemIconPos[4][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[0][0]); - ItemIconPos[5][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[1][0]); - ItemIconPos[6][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[2][0]); - ItemIconPos[7][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[3][0]); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 3) {//Anchor None + ItemIconPos[4][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[0][0]); + ItemIconPos[5][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[1][0]); + ItemIconPos[6][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[2][0]); + ItemIconPos[7][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[3][0]); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_NONE) { ItemIconPos[4][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[0][0]; ItemIconPos[5][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[1][0]; ItemIconPos[6][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[2][0]; ItemIconPos[7][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[3][0]; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == HIDDEN) { ItemIconPos[4][0] = -9999; ItemIconPos[5][0] = -9999; ItemIconPos[6][0] = -9999; @@ -4424,36 +4424,36 @@ void Interface_DrawItemIconTexture(PlayState* play, void* texture, s16 button) { ItemIconPos[6][1] = ItemIconPos_ori[6][1]; ItemIconPos[7][1] = ItemIconPos_ori[7][1]; } - //B Button - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != 0) { - ItemIconPos[0][1] = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosY"), 0)+Y_Margins_BtnB; - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 1) {//Anchor Left + // B Button + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[0][1] = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosY"), 0) + Y_Margins_BtnB; + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) {X_Margins_BtnB = Left_HUD_Margin;}; - ItemIconPos[0][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[0][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0) + X_Margins_BtnB); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) {X_Margins_BtnB = Right_HUD_Margin;}; - ItemIconPos[0][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 3) {//Anchor None + ItemIconPos[0][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0) + X_Margins_BtnB); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_NONE) { ItemIconPos[0][0] = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 4) {//Hidden - ItemIconPos[0][0] = -9999; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == HIDDEN) { + ItemIconPos[0][0] = -9999; } } else { ItemIconPos[0][0] = OTRGetRectDimensionFromRightEdge(ItemIconPos_ori[0][0]); ItemIconPos[0][1] = ItemIconPos_ori[0][1]; } - //C button Left - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != 0) { - ItemIconPos[1][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosY"), 0)+Y_Margins_CL; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 1) {//Anchor Left + // C button Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[1][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosY"), 0) + Y_Margins_CL; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Left_HUD_Margin;}; - ItemIconPos[1][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[1][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0) + X_Margins_CL); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Right_HUD_Margin;}; - ItemIconPos[1][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 3) {//Anchor None + ItemIconPos[1][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0) + X_Margins_CL); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_NONE) { ItemIconPos[1][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == HIDDEN) { ItemIconPos[1][0] = -9999; } } else { @@ -4461,17 +4461,17 @@ void Interface_DrawItemIconTexture(PlayState* play, void* texture, s16 button) { ItemIconPos[1][1] = ItemIconPos_ori[1][1]; } //C Button down - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != 0) { - ItemIconPos[2][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosY"), 0)+Y_Margins_CD; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[2][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosY"), 0) + Y_Margins_CD; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Left_HUD_Margin;}; - ItemIconPos[2][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[2][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0) + X_Margins_CD); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Right_HUD_Margin;}; - ItemIconPos[2][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 3) {//Anchor None + ItemIconPos[2][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0) + X_Margins_CD); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_NONE) { ItemIconPos[2][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == HIDDEN) { ItemIconPos[2][0] = -9999; } } else { @@ -4479,17 +4479,17 @@ void Interface_DrawItemIconTexture(PlayState* play, void* texture, s16 button) { ItemIconPos[2][1] = ItemIconPos_ori[2][1]; } //C button Right - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != 0) { - ItemIconPos[3][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosY"), 0)+Y_Margins_CR; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[3][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosY"), 0) + Y_Margins_CR; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Left_HUD_Margin;}; - ItemIconPos[3][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[3][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0) + X_Margins_CR); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Right_HUD_Margin;}; - ItemIconPos[3][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 3) {//Anchor None + ItemIconPos[3][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0) + X_Margins_CR); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_NONE) { ItemIconPos[3][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == HIDDEN) { ItemIconPos[3][0] = -9999; } } else { @@ -4501,9 +4501,9 @@ void Interface_DrawItemIconTexture(PlayState* play, void* texture, s16 button) { G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPWideTextureRectangle(OVERLAY_DISP++, ItemIconPos[button][0] << 2, ItemIconPos[button][1] << 2, - (ItemIconPos[button][0] + gItemIconWidth[button]) << 2, - (ItemIconPos[button][1] + gItemIconWidth[button]) << 2, G_TX_RENDERTILE, 0, 0, - gItemIconDD[button] << 1, gItemIconDD[button] << 1); + (ItemIconPos[button][0] + gItemIconWidth[button]) << 2, + (ItemIconPos[button][1] + gItemIconWidth[button]) << 2, G_TX_RENDERTILE, 0, 0, + gItemIconDD[button] << 1, gItemIconDD[button] << 1); CLOSE_DISPS(play->state.gfxCtx); } @@ -4533,36 +4533,36 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) { s16 X_Margins_DPad_Items; s16 Y_Margins_DPad_Items; if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 0) {X_Margins_BtnB = Right_HUD_Margin;}; - Y_Margins_BtnB = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_BtnB = Right_HUD_Margin;}; + Y_Margins_BtnB = (Top_HUD_Margin * -1); } else { X_Margins_BtnB = 0; Y_Margins_BtnB = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 0) {X_Margins_CL = Right_HUD_Margin;}; - Y_Margins_CL = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CL = Right_HUD_Margin;}; + Y_Margins_CL = (Top_HUD_Margin * -1); } else { X_Margins_CL = 0; Y_Margins_CL = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 0) {X_Margins_CR = Right_HUD_Margin;}; - Y_Margins_CR = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CR = Right_HUD_Margin;}; + Y_Margins_CR = (Top_HUD_Margin * -1); } else { X_Margins_CR = 0; Y_Margins_CR = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 0) {X_Margins_CD = Right_HUD_Margin;}; - Y_Margins_CD = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CD = Right_HUD_Margin;}; + Y_Margins_CD = (Top_HUD_Margin * -1); } else { X_Margins_CD = 0; Y_Margins_CD = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 0) {X_Margins_DPad_Items = Right_HUD_Margin;}; - Y_Margins_DPad_Items = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_DPad_Items = Right_HUD_Margin;}; + Y_Margins_DPad_Items = (Top_HUD_Margin * -1); } else { X_Margins_DPad_Items = 0; Y_Margins_DPad_Items = 0; @@ -4585,29 +4585,29 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) { {23,19},//Right }; //(X,Y) Used with custom position to place it properly. //DPadItems - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) != ORIGINAL_LOCATION) { ItemIconPos[4][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[0][1];//Up ItemIconPos[5][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[1][1];//Down ItemIconPos[6][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[2][1];//Left ItemIconPos[7][1] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[3][1];//Right - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) {X_Margins_DPad_Items = Left_HUD_Margin;}; - ItemIconPos[4][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[0][0]); - ItemIconPos[5][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[1][0]); - ItemIconPos[6][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[2][0]); - ItemIconPos[7][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[3][0]); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[4][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0) +X_Margins_DPad_Items + DPad_ItemsOffset[0][0]); + ItemIconPos[5][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0) +X_Margins_DPad_Items + DPad_ItemsOffset[1][0]); + ItemIconPos[6][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0) +X_Margins_DPad_Items + DPad_ItemsOffset[2][0]); + ItemIconPos[7][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0) +X_Margins_DPad_Items + DPad_ItemsOffset[3][0]); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) {X_Margins_DPad_Items = Right_HUD_Margin;}; - ItemIconPos[4][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[0][0]); - ItemIconPos[5][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[1][0]); - ItemIconPos[6][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[2][0]); - ItemIconPos[7][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[3][0]); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 3) {//Anchor None - ItemIconPos[4][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[0][0]; - ItemIconPos[5][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[1][0]; - ItemIconPos[6][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[2][0]; - ItemIconPos[7][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[3][0]; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 4) {//Hidden + ItemIconPos[4][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[0][0]); + ItemIconPos[5][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[1][0]); + ItemIconPos[6][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[2][0]); + ItemIconPos[7][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items + DPad_ItemsOffset[3][0]); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_NONE) { + ItemIconPos[4][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0) + DPad_ItemsOffset[0][0]; + ItemIconPos[5][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0) + DPad_ItemsOffset[1][0]; + ItemIconPos[6][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0) + DPad_ItemsOffset[2][0]; + ItemIconPos[7][0] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0) + DPad_ItemsOffset[3][0]; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == HIDDEN) { ItemIconPos[4][0] = -9999; ItemIconPos[5][0] = -9999; ItemIconPos[6][0] = -9999; @@ -4626,35 +4626,35 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) { //B Button s16 PosX_adjust = 1; s16 PosY_adjust = 17; - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != 0) { - ItemIconPos[0][1] = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosY"), 0)+Y_Margins_BtnB+PosY_adjust; - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[0][1] = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosY"), 0) + Y_Margins_BtnB + PosY_adjust; + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) {X_Margins_BtnB = Left_HUD_Margin;}; - ItemIconPos[0][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[0][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) {X_Margins_BtnB = Right_HUD_Margin;}; - ItemIconPos[0][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 3) {//Anchor None - ItemIconPos[0][0] = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+PosX_adjust; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 4) {//Hidden - ItemIconPos[0][0] = -9999; + ItemIconPos[0][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_NONE) { + ItemIconPos[0][0] = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0) + PosX_adjust; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == HIDDEN) { + ItemIconPos[0][0] = -9999; } } else { ItemIconPos[0][0] = OTRGetRectDimensionFromRightEdge(ItemIconPos_ori[0][0]); ItemIconPos[0][1] = ItemIconPos_ori[0][1]; } //C button Left - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != 0) { - ItemIconPos[1][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosY"), 0)+Y_Margins_CL+PosY_adjust; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[1][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosY"), 0) + Y_Margins_CL + PosY_adjust; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Left_HUD_Margin;}; - ItemIconPos[1][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[1][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Right_HUD_Margin;}; - ItemIconPos[1][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 3) {//Anchor None - ItemIconPos[1][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+PosX_adjust; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 4) {//Hidden + ItemIconPos[1][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_NONE) { + ItemIconPos[1][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0) + PosX_adjust; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == HIDDEN) { ItemIconPos[1][0] = -9999; } } else { @@ -4662,17 +4662,17 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) { ItemIconPos[1][1] = ItemIconPos_ori[1][1]; } //C Button down - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != 0) { - ItemIconPos[2][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosY"), 0)+Y_Margins_CD+PosY_adjust; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[2][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosY"), 0) + Y_Margins_CD + PosY_adjust; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Left_HUD_Margin;}; - ItemIconPos[2][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[2][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Right_HUD_Margin;}; - ItemIconPos[2][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 3) {//Anchor None - ItemIconPos[2][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+PosX_adjust; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 4) {//Hidden + ItemIconPos[2][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_NONE) { + ItemIconPos[2][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0) + PosX_adjust; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == HIDDEN) { ItemIconPos[2][0] = -9999; } } else { @@ -4680,17 +4680,17 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) { ItemIconPos[2][1] = ItemIconPos_ori[2][1]; } //C button Right - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != 0) { - ItemIconPos[3][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosY"), 0)+Y_Margins_CR+PosY_adjust; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != ORIGINAL_LOCATION) { + ItemIconPos[3][1] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosY"), 0) + Y_Margins_CR + PosY_adjust; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Left_HUD_Margin;}; - ItemIconPos[3][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 2) {//Anchor Right + ItemIconPos[3][0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0) +X_Margins_CR + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Right_HUD_Margin;}; - ItemIconPos[3][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 3) {//Anchor None - ItemIconPos[3][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+PosX_adjust; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 4) {//Hidden + ItemIconPos[3][0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0) +X_Margins_CR + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_NONE) { + ItemIconPos[3][0] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0) + PosX_adjust; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == HIDDEN) { ItemIconPos[3][0] = -9999; } } else { @@ -5038,25 +5038,25 @@ void Interface_Draw(PlayState* play) { s16 X_Margins_RC; s16 Y_Margins_RC; if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == 0) {X_Margins_RC = Left_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_RC = Left_HUD_Margin;}; Y_Margins_RC = Bottom_HUD_Margin; } else { X_Margins_RC = 0; Y_Margins_RC = 0; } - s16 PosX_RC_ori = OTRGetRectDimensionFromLeftEdge(26+X_Margins_RC); + s16 PosX_RC_ori = OTRGetRectDimensionFromLeftEdge(26 + X_Margins_RC); s16 PosY_RC_ori = 206+Y_Margins_RC; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) != 0) { - PosY_RC = CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosY"), 0)+Y_Margins_RC; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) != ORIGINAL_LOCATION) { + PosY_RC = CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosY"), 0) + Y_Margins_RC; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.UseMargins"), 0) != 0) {X_Margins_RC = Left_HUD_Margin;}; PosX_RC = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosX"), 0)+X_Margins_RC); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.UseMargins"), 0) != 0) {X_Margins_RC = Right_HUD_Margin;}; PosX_RC = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosX"), 0)+X_Margins_RC); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == ANCHOR_NONE) { PosX_RC = CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Rupees.PosType"), 0) == HIDDEN) { PosX_RC = -9999; } } else { @@ -5087,7 +5087,7 @@ void Interface_Draw(PlayState* play) { s16 X_Margins_SKC; s16 Y_Margins_SKC; if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == 0) {X_Margins_SKC = Left_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_SKC = Left_HUD_Margin;}; Y_Margins_SKC = Bottom_HUD_Margin; } else { X_Margins_SKC = 0; @@ -5097,17 +5097,18 @@ void Interface_Draw(PlayState* play) { s16 PosY_SKC_ori = 190+Y_Margins_SKC; s16 PosX_SKC; s16 PosY_SKC; - if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) != 0) { - PosY_SKC = CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosY"), 0)+Y_Margins_SKC; - if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) != ORIGINAL_LOCATION) { + PosY_SKC = CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosY"), 0) + Y_Margins_SKC; + if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.UseMargins"), 0) != 0) {X_Margins_SKC = Left_HUD_Margin;}; - PosX_SKC = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosX"), 0)+X_Margins_SKC); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == 2) {//Anchor Right + PosX_SKC = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosX"), 0) + X_Margins_SKC); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.UseMargins"), 0) != 0) {X_Margins_SKC = Right_HUD_Margin;}; - PosX_SKC = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosX"), 0)+X_Margins_SKC); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == 3) {//Anchor None + PosX_SKC = OTRGetDimensionFromRightEdge( + CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosX"), 0) + X_Margins_SKC); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == ANCHOR_NONE) { PosX_SKC = CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.SmallKey.PosType"), 0) == HIDDEN) { PosX_SKC = -9999; } } else { @@ -5126,7 +5127,7 @@ void Interface_Draw(PlayState* play) { gDPPipeSync(OVERLAY_DISP++); gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); gDPSetCombineLERP(OVERLAY_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, - TEXEL0, 0, PRIMITIVE, 0); + TEXEL0, 0, PRIMITIVE, 0); interfaceCtx->counterDigits[2] = 0; interfaceCtx->counterDigits[3] = gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex]; @@ -5264,29 +5265,29 @@ void Interface_Draw(PlayState* play) { PosY_adjust = 6; PosX_adjust = -10; } - + s16 BbtnPosX; s16 BbtnPosY; s16 X_Margins_BtnB_label; s16 Y_Margins_BtnB_label; if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 0) {X_Margins_BtnB_label = Right_HUD_Margin;}; - Y_Margins_BtnB_label = (Top_HUD_Margin*-1); + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_BtnB_label = Right_HUD_Margin;}; + Y_Margins_BtnB_label = (Top_HUD_Margin * -1); } else { X_Margins_BtnB_label = 0; Y_Margins_BtnB_label = 0; } - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != 0) { - BbtnPosY = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosY"), 0)+Y_Margins_BtnB_label+PosY_adjust; - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) != ORIGINAL_LOCATION) { + BbtnPosY = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosY"), 0) + Y_Margins_BtnB_label + PosY_adjust; + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) {X_Margins_BtnB_label = Left_HUD_Margin;}; - BbtnPosX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB_label+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 2) {//Anchor Right + BbtnPosX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB_label + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) {X_Margins_BtnB_label = Right_HUD_Margin;}; - BbtnPosX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+X_Margins_BtnB_label+PosX_adjust); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 3) {//Anchor None - BbtnPosX = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0)+PosX_adjust; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 4) {//Hidden + BbtnPosX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0) +X_Margins_BtnB_label + PosX_adjust); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ANCHOR_NONE) { + BbtnPosX = CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosX"), 0) + PosX_adjust; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == HIDDEN) { BbtnPosX = -9999; } } else { @@ -5360,23 +5361,23 @@ void Interface_Draw(PlayState* play) { s16 X_Margins_Dpad; s16 Y_Margins_Dpad; if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 0) {X_Margins_Dpad = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_Dpad = Right_HUD_Margin;}; Y_Margins_Dpad = (Top_HUD_Margin*-1); } else { Y_Margins_Dpad = 0; X_Margins_Dpad = 0; } - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) != 0) { - DpadPosY = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_Dpad; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) != ORIGINAL_LOCATION) { + DpadPosY = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0) + Y_Margins_Dpad; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) {X_Margins_Dpad = Left_HUD_Margin;}; DpadPosX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_Dpad); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) {X_Margins_Dpad = Right_HUD_Margin;}; DpadPosX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_Dpad); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_NONE) { DpadPosX = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == HIDDEN) { DpadPosX = -9999; } } else { @@ -5460,21 +5461,21 @@ void Interface_Draw(PlayState* play) { s16 PosY_BtnA; s16 rAIconX; s16 rAIconY; - if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) != ORIGINAL_LOCATION) { PosY_BtnA = CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosY"), 0)+Y_Margins_BtnA; rAIconY = 98.0f - PosY_BtnA; - if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.UseMargins"), 0) != 0) {X_Margins_BtnA = Left_HUD_Margin;}; - PosX_BtnA = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0)+X_Margins_BtnA); - rAIconX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0)+X_Margins_BtnA); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) == 2) {//Anchor Right + PosX_BtnA = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0) + X_Margins_BtnA); + rAIconX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0) + X_Margins_BtnA); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.UseMargins"), 0) != 0) {X_Margins_BtnA = Right_HUD_Margin;}; - PosX_BtnA = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0)+X_Margins_BtnA); - rAIconX= OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0)+X_Margins_BtnA); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) == 3) {//Anchor None + PosX_BtnA = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0) + X_Margins_BtnA); + rAIconX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0) + X_Margins_BtnA); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) == ANCHOR_NONE) { PosX_BtnA = CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0); rAIconX = CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.PosType"), 0) == HIDDEN) { PosX_BtnA = -9999; rAIconX = -9999; } @@ -5578,17 +5579,17 @@ void Interface_Draw(PlayState* play) { s16 CarrotsPosX = ZREG(14); s16 CarrotsPosY = ZREG(15); s16 CarrotsMargins_X = 0; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) != ORIGINAL_LOCATION) { CarrotsPosY = CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosY"), 0); - if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.UseMargins"), 0) != 0) {CarrotsMargins_X = Left_HUD_Margin;}; - CarrotsPosX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosX"), 0)+CarrotsMargins_X); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) == 2) {//Anchor Right + CarrotsPosX = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosX"), 0) + CarrotsMargins_X); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.UseMargins"), 0) != 0) {CarrotsMargins_X = Right_HUD_Margin;}; - CarrotsPosX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosX"), 0)+CarrotsMargins_X); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) == 3) {//Anchor None + CarrotsPosX = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosX"), 0) + CarrotsMargins_X); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) == ANCHOR_NONE) { CarrotsPosX = CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Carrots.PosType"), 0) == HIDDEN) { CarrotsPosX = -9999; } } @@ -5601,31 +5602,31 @@ void Interface_Draw(PlayState* play) { } gSPWideTextureRectangle(OVERLAY_DISP++, svar5 << 2, CarrotsPosY << 2, (svar5 + 16) << 2, - (CarrotsPosY + 16) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + (CarrotsPosY + 16) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } } } else { // Score for the Horseback Archery s32 X_Margins_Archery; if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == 0) {X_Margins_Archery = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_Archery = Right_HUD_Margin;}; } else { X_Margins_Archery = 0; } s16 ArcheryPos_Y = ZREG(15); s16 ArcheryPos_X = OTRGetRectDimensionFromRightEdge(WREG(32)+X_Margins_Archery); - if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) != ORIGINAL_LOCATION) { ArcheryPos_Y = CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosY"), 0); - if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.UseMargins"), 0) != 0) {X_Margins_Archery = Left_HUD_Margin;}; - ArcheryPos_X = OTRGetRectDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosX"), 0)+X_Margins_Archery); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == 2) {//Anchor Right + ArcheryPos_X = OTRGetRectDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosX"), 0) + X_Margins_Archery); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.UseMargins"), 0) != 0) {X_Margins_Archery = Right_HUD_Margin;}; - ArcheryPos_X = OTRGetRectDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosX"), 0)+X_Margins_Archery); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == 3) {//Anchor None - ArcheryPos_X = CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosX"), 0)+204+X_Margins_Archery; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == 4) {//Hidden + ArcheryPos_X = OTRGetRectDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosX"), 0) + X_Margins_Archery); + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == ANCHOR_NONE) { + ArcheryPos_X = CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosX"), 0) + 204 + X_Margins_Archery; + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.ArcheryScore.PosType"), 0) == HIDDEN) { ArcheryPos_X = -9999; } } @@ -5651,7 +5652,7 @@ void Interface_Draw(PlayState* play) { if (sHBAScoreDigits[svar1] != 0 || (svar2 != 0) || (svar1 >= 3)) { OVERLAY_DISP = Gfx_TextureI8( OVERLAY_DISP, digitTextures[sHBAScoreDigits[svar1]], 8, 16, ArcheryPos_X, - (ArcheryPos_Y - 2), digitWidth[0], VREG(42), VREG(43) << 1, VREG(43) << 1); + (ArcheryPos_Y - 2), digitWidth[0], VREG(42), VREG(43) << 1, VREG(43) << 1); ArcheryPos_X += 9; svar2++; } @@ -6048,25 +6049,25 @@ void Interface_Draw(PlayState* play) { gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 0); s32 X_Margins_Timer; if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == 0) {X_Margins_Timer = Left_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_Timer = Left_HUD_Margin;}; } else { X_Margins_Timer = 0; } svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[svar6]+X_Margins_Timer); svar2 = gSaveContext.timerY[svar6]; - if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) != ORIGINAL_LOCATION) { svar2 = (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosY"), 0)); - if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.UseMargins"), 0) != 0) {X_Margins_Timer = Left_HUD_Margin;}; svar5 = OTRGetRectDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosX"), 0)+X_Margins_Timer); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.UseMargins"), 0) != 0) {X_Margins_Timer = Right_HUD_Margin;}; svar5 = OTRGetRectDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosX"), 0)+X_Margins_Timer); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == ANCHOR_NONE) { svar5 = CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosX"), 0)+204+X_Margins_Timer; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == 4) {//Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Timers.PosType"), 0) == HIDDEN) { svar5 = -9999; - } + } } OVERLAY_DISP = @@ -6094,7 +6095,7 @@ void Interface_Draw(PlayState* play) { for (svar1 = 0; svar1 < 5; svar1++) { // clang-format off //svar5 = svar5 + 8; - //svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[svar6]); + //svar5 = OTRGetRectDimensionFromLeftEdge(gSaveContext.timerX[svar6]); OVERLAY_DISP = Gfx_TextureI8(OVERLAY_DISP, digitTextures[timerDigits[svar1]], 8, 16, svar5 + timerDigitLeftPos[svar1], svar2, digitWidth[svar1], VREG(42), VREG(43) << 1, @@ -6127,27 +6128,27 @@ void Interface_DrawTotalGameplayTimer(PlayState* play) { s32 X_Margins_Timer = 0; if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == ORIGINAL_LOCATION) { X_Margins_Timer = Left_HUD_Margin; }; } s32 rectLeftOri = OTRGetRectDimensionFromLeftEdge(24 + X_Margins_Timer); s32 rectTopOri = 73; - if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) != ORIGINAL_LOCATION) { rectTopOri = (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosY"), 0)); - if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == 1) { // Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.UseMargins"), 0) != 0) { X_Margins_Timer = Left_HUD_Margin; }; rectLeftOri = OTRGetRectDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosX"), 0) + X_Margins_Timer); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == 2) { // Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.UseMargins"), 0) != 0) { X_Margins_Timer = Right_HUD_Margin; }; rectLeftOri = OTRGetRectDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosX"), 0) + X_Margins_Timer); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == 3) { // Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == ANCHOR_NONE) { rectLeftOri = CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosX"), 0) + 204 + X_Margins_Timer; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == 4) { // Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.IGT.PosType"), 0) == HIDDEN) { rectLeftOri = -9999; } } @@ -6238,7 +6239,7 @@ void Interface_Update(PlayState* play) { Left_HUD_Margin = CVarGetInteger(CVAR_COSMETIC("HUD.Margin.L"), 0); Right_HUD_Margin = CVarGetInteger(CVAR_COSMETIC("HUD.Margin.R"), 0); Bottom_HUD_Margin = CVarGetInteger(CVAR_COSMETIC("HUD.Margin.B"), 0); - + GameInteractor_ExecuteOnInterfaceUpdate(); if (CHECK_BTN_ALL(debugInput->press.button, BTN_DLEFT)) { diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index d8475c75d..f939d5030 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -26,6 +26,7 @@ #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/randomizer/randomizer_entrance.h" #include +#include "soh/Enhancements/cosmetics/cosmeticsTypes.h" #include "soh/Enhancements/enhancementTypes.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/randomizer/randomizer_grotto.h" @@ -11700,7 +11701,7 @@ void Player_DetectRumbleSecrets(Player* this) { s16 X_Margins_VSOA; s16 Y_Margins_VSOA; if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ORIGINAL_LOCATION) { X_Margins_VSOA = Left_Margins; }; Y_Margins_VSOA = Top_Margins; @@ -11714,19 +11715,19 @@ void Player_DetectRumbleSecrets(Player* this) { s16 PosY_VSOA; if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) != 0) { PosY_VSOA = CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosY"), 0) + Y_Margins_VSOA; - if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == 1) { // Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.UseMargins"), 0) != 0) { X_Margins_VSOA = Left_Margins; }; PosX_VSOA = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosX"), 0) + X_Margins_VSOA); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == 2) { // Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.UseMargins"), 0) != 0) { X_Margins_VSOA = Right_Margins; }; PosX_VSOA = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosX"), 0) + X_Margins_VSOA); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == 3) { // Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_NONE) { PosX_VSOA = CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosX"), 0); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == 4) { // Hidden + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == HIDDEN) { PosX_VSOA = -9999; } } else { diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c index 91051f5f3..b0843b5ee 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c @@ -883,35 +883,35 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { s16 X_Margins_DPad_Items; s16 Y_Margins_DPad_Items; if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == 0) {X_Margins_BtnB = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.BButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_BtnB = Right_HUD_Margin;}; Y_Margins_BtnB = (Top_HUD_Margin*-1); } else { X_Margins_BtnB = 0; Y_Margins_BtnB = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 0) {X_Margins_CL = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CL = Right_HUD_Margin;}; Y_Margins_CL = (Top_HUD_Margin*-1); } else { X_Margins_CL = 0; Y_Margins_CL = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 0) {X_Margins_CR = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CR = Right_HUD_Margin;}; Y_Margins_CR = (Top_HUD_Margin*-1); } else { X_Margins_CR = 0; Y_Margins_CR = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 0) {X_Margins_CD = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_CD = Right_HUD_Margin;}; Y_Margins_CD = (Top_HUD_Margin*-1); } else { X_Margins_CD = 0; Y_Margins_CD = 0; } if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) { - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 0) {X_Margins_DPad_Items = Right_HUD_Margin;}; + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ORIGINAL_LOCATION) {X_Margins_DPad_Items = Right_HUD_Margin;}; Y_Margins_DPad_Items = (Top_HUD_Margin*-1); } else { X_Margins_DPad_Items = 0; @@ -934,24 +934,24 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { }; //(X,Y) Used with custom position to place it properly. //DPadItems - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) != ORIGINAL_LOCATION) { sCButtonPosY[3] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[0][1];//Up sCButtonPosY[4] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[1][1];//Down sCButtonPosY[5] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[2][1];//Left sCButtonPosY[6] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosY"), 0)+Y_Margins_DPad_Items+DPad_ItemsOffset[3][1];//Right - if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) {X_Margins_DPad_Items = Left_HUD_Margin;}; sCButtonPosX[3] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[0][0]); sCButtonPosX[4] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[1][0]); sCButtonPosX[5] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[2][0]); sCButtonPosX[6] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[3][0]); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.UseMargins"), 0) != 0) {X_Margins_DPad_Items = Right_HUD_Margin;}; sCButtonPosX[3] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[0][0]); sCButtonPosX[4] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[1][0]); sCButtonPosX[5] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[2][0]); sCButtonPosX[6] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+X_Margins_DPad_Items+DPad_ItemsOffset[3][0]); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosType"), 0) == ANCHOR_NONE) { sCButtonPosX[3] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[0][0]; sCButtonPosX[4] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[1][0]; sCButtonPosX[5] = CVarGetInteger(CVAR_COSMETIC("HUD.Dpad.PosX"), 0)+DPad_ItemsOffset[2][0]; @@ -968,15 +968,15 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { sCButtonPosY[6] = ItemIconPos_ori[6][1]; } //C button Left - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) != ORIGINAL_LOCATION) { sCButtonPosY[0] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosY"), 0)+Y_Margins_CL; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Left_HUD_Margin;}; sCButtonPosX[0] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.UseMargins"), 0) != 0) {X_Margins_CL = Right_HUD_Margin;}; sCButtonPosX[0] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0)+X_Margins_CL); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0) == ANCHOR_NONE) { sCButtonPosX[0] = CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.PosX"), 0); } } else { @@ -984,15 +984,15 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { sCButtonPosY[0] = ItemIconPos_ori[0][1]; } //C Button down - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) != ORIGINAL_LOCATION) { sCButtonPosY[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosY"), 0)+Y_Margins_CD; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Left_HUD_Margin;}; sCButtonPosX[1] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.UseMargins"), 0) != 0) {X_Margins_CD = Right_HUD_Margin;}; sCButtonPosX[1] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0)+X_Margins_CD); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosType"), 0) == ANCHOR_NONE) { sCButtonPosX[1] = CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.PosX"), 0); } } else { @@ -1000,15 +1000,15 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { sCButtonPosY[1] = ItemIconPos_ori[1][1]; } //C button Right - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != 0) { + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) != ORIGINAL_LOCATION) { sCButtonPosY[2] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosY"), 0)+Y_Margins_CR; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 1) {//Anchor Left + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_LEFT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Left_HUD_Margin;}; sCButtonPosX[2] = OTRGetDimensionFromLeftEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 2) {//Anchor Right + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_RIGHT) { if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.UseMargins"), 0) != 0) {X_Margins_CR = Right_HUD_Margin;}; sCButtonPosX[2] = OTRGetDimensionFromRightEdge(CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0)+X_Margins_CR); - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == 3) {//Anchor None + } else if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosType"), 0) == ANCHOR_NONE) { sCButtonPosX[2] = CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.PosX"), 0); } } else { From 135c2e8217f9bc28223b1d62bff764e7705862b2 Mon Sep 17 00:00:00 2001 From: Archez Date: Wed, 12 Feb 2025 15:30:06 -0500 Subject: [PATCH 41/68] Remove POLY_KAL and restore POLY_OPA for kaleido (#5041) --- soh/include/functions.h | 2 - soh/include/macros.h | 4 - soh/include/z64.h | 3 - .../vanilla-behavior/GIVanillaBehavior.h | 2 +- soh/soh/Enhancements/kaleido.cpp | 4 +- soh/src/code/graph.c | 5 +- soh/src/code/z_play.c | 1 - soh/src/code/z_rcp.c | 20 -- soh/src/code/z_view.c | 8 - .../ovl_kaleido_scope/z_kaleido_collect.c | 150 ++++---- .../misc/ovl_kaleido_scope/z_kaleido_debug.c | 46 +-- .../ovl_kaleido_scope/z_kaleido_equipment.c | 100 +++--- .../misc/ovl_kaleido_scope/z_kaleido_item.c | 92 ++--- .../ovl_kaleido_scope/z_kaleido_map_PAL.c | 210 +++++------ .../ovl_kaleido_scope/z_kaleido_scope_PAL.c | 336 +++++++++--------- .../misc/ovl_kaleido_scope/z_lmap_mark.c | 16 +- 16 files changed, 479 insertions(+), 520 deletions(-) diff --git a/soh/include/functions.h b/soh/include/functions.h index 64d7026e1..8f902c5a8 100644 --- a/soh/include/functions.h +++ b/soh/include/functions.h @@ -1213,12 +1213,10 @@ Gfx* Gfx_SetupDL_66(Gfx* gfx); Gfx* func_800947AC(Gfx* gfx); void Gfx_SetupDL_42Opa(GraphicsContext* gfxCtx); void Gfx_SetupDL_42Overlay(GraphicsContext* gfxCtx); -void Gfx_SetupDL_42Kal(GraphicsContext* gfxCtx); void Gfx_SetupDL_27Xlu(GraphicsContext* gfxCtx); void Gfx_SetupDL_60NoCDXlu(GraphicsContext* gfxCtx); void Gfx_SetupDL_61Xlu(GraphicsContext* gfxCtx); void Gfx_SetupDL_56Ptr(Gfx** gfxp); -void Gfx_SetupDL_39Kal(GraphicsContext* gfxp); Gfx* Gfx_BranchTexScroll(Gfx** gfxp, u32 x, u32 y, s32 width, s32 height); Gfx* func_80094E78(GraphicsContext* gfxCtx, u32 x, u32 y); Gfx* Gfx_TexScroll(GraphicsContext* gfxCtx, u32 x, u32 y, s32 width, s32 height); diff --git a/soh/include/macros.h b/soh/include/macros.h index acff90f19..302e3755d 100644 --- a/soh/include/macros.h +++ b/soh/include/macros.h @@ -192,10 +192,6 @@ extern GraphicsContext* __gfxCtx; #define WORK_DISP __gfxCtx->work.p #define POLY_OPA_DISP __gfxCtx->polyOpa.p #define POLY_XLU_DISP __gfxCtx->polyXlu.p -// #region SOH [General] -// Upstream TODO: Document reasoning for these only existing in SoH -#define POLY_KAL_DISP __gfxCtx->polyKal.p -// #endregion #define OVERLAY_DISP __gfxCtx->overlay.p // __gfxCtx shouldn't be used directly. diff --git a/soh/include/z64.h b/soh/include/z64.h index 7cd99372d..882d3dd9a 100644 --- a/soh/include/z64.h +++ b/soh/include/z64.h @@ -97,7 +97,6 @@ typedef struct { /* 0x00000 */ u16 headMagic; // GFXPOOL_HEAD_MAGIC /* 0x00008 */ Gfx polyOpaBuffer[0x2FC0]; /* 0x0BF08 */ Gfx polyXluBuffer[0x1000]; - /* 0x0BF08 */ Gfx polyKalBuffer[0x1000]; /* 0x0FF08 */ Gfx overlayBuffer[0x800]; /* 0x11F08 */ Gfx workBuffer[0x100]; /* 0x11308 */ Gfx unusedBuffer[0x40]; @@ -144,7 +143,6 @@ typedef struct OSScTask { typedef struct GraphicsContext { /* 0x0000 */ Gfx* polyOpaBuffer; // Pointer to "Zelda 0" /* 0x0004 */ Gfx* polyXluBuffer; // Pointer to "Zelda 1" - /* 0xXXX */ Gfx* polyKalBuffer; // Pointer to "Rome" /* 0x0008 */ char unk_008[0x08]; // Unused, could this be pointers to "Zelda 2" / "Zelda 3" /* 0x0010 */ Gfx* overlayBuffer; // Pointer to "Zelda 4" /* 0x0014 */ u32 unk_014; @@ -163,7 +161,6 @@ typedef struct GraphicsContext { /* 0x02A8 */ TwoHeadGfxArena overlay; // "Zelda 4" /* 0x02B8 */ TwoHeadGfxArena polyOpa; // "Zelda 0" /* 0x02C8 */ TwoHeadGfxArena polyXlu; // "Zelda 1" - /* 0x0XXX */ TwoHeadGfxArena polyKal; // When in Rome... /* 0x02D8 */ u32 gfxPoolIdx; /* 0x02DC */ u16* curFrameBuffer; /* 0x02E0 */ char unk_2E0[0x04]; diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index e1457db4a..96453dff8 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -1555,7 +1555,7 @@ typedef enum { // true // ``` // #### `args` - // - `**Gfx` (`&POLY_KAL_DISP`) + // - `**Gfx` (`&POLY_OPA_DISP`) VB_RENDER_YES_ON_CONTINUE_PROMPT, // #### `result` diff --git a/soh/soh/Enhancements/kaleido.cpp b/soh/soh/Enhancements/kaleido.cpp index 8d578168c..4cddeef43 100644 --- a/soh/soh/Enhancements/kaleido.cpp +++ b/soh/soh/Enhancements/kaleido.cpp @@ -242,7 +242,7 @@ namespace Rando { } mEntryDl.push_back(gsSPEndDisplayList()); - gSPDisplayList(POLY_KAL_DISP++, mEntryDl.data()); + gSPDisplayList(POLY_OPA_DISP++, mEntryDl.data()); CLOSE_DISPS(play->state.gfxCtx); } @@ -466,4 +466,4 @@ namespace Rando { void RandoKaleido_RegisterHooks() { GameInteractor::Instance->RegisterGameHook(RandoKaleido_UpdateMiscCollectibles); -} \ No newline at end of file +} diff --git a/soh/src/code/graph.c b/soh/src/code/graph.c index c55417d93..06d84aa3b 100644 --- a/soh/src/code/graph.c +++ b/soh/src/code/graph.c @@ -112,13 +112,11 @@ void Graph_InitTHGA(GraphicsContext* gfxCtx) { pool->tailMagic = GFXPOOL_TAIL_MAGIC; THGA_Ct(&gfxCtx->polyOpa, pool->polyOpaBuffer, sizeof(pool->polyOpaBuffer)); THGA_Ct(&gfxCtx->polyXlu, pool->polyXluBuffer, sizeof(pool->polyXluBuffer)); - THGA_Ct(&gfxCtx->polyKal, pool->polyKalBuffer, sizeof(pool->polyKalBuffer)); THGA_Ct(&gfxCtx->overlay, pool->overlayBuffer, sizeof(pool->overlayBuffer)); THGA_Ct(&gfxCtx->work, pool->workBuffer, sizeof(pool->workBuffer)); gfxCtx->polyOpaBuffer = pool->polyOpaBuffer; gfxCtx->polyXluBuffer = pool->polyXluBuffer; - gfxCtx->polyKalBuffer = pool->polyKalBuffer; gfxCtx->overlayBuffer = pool->overlayBuffer; gfxCtx->workBuffer = pool->workBuffer; @@ -335,8 +333,7 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) { gSPBranchList(WORK_DISP++, gfxCtx->polyOpaBuffer); gSPBranchList(POLY_OPA_DISP++, gfxCtx->polyXluBuffer); - gSPBranchList(POLY_XLU_DISP++, gfxCtx->polyKalBuffer); - gSPBranchList(POLY_KAL_DISP++, gfxCtx->overlayBuffer); + gSPBranchList(POLY_XLU_DISP++, gfxCtx->overlayBuffer); gDPPipeSync(OVERLAY_DISP++); gDPFullSync(OVERLAY_DISP++); gSPEndDisplayList(OVERLAY_DISP++); diff --git a/soh/src/code/z_play.c b/soh/src/code/z_play.c index 8d35a33c4..0b6db75b1 100644 --- a/soh/src/code/z_play.c +++ b/soh/src/code/z_play.c @@ -1365,7 +1365,6 @@ void Play_Draw(PlayState* play) { if ((HREG(80) != 10) || (HREG(82) != 0)) { POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); POLY_XLU_DISP = Play_SetFog(play, POLY_XLU_DISP); - POLY_KAL_DISP = Play_SetFog(play, POLY_KAL_DISP); func_800AA460(&play->view, play->view.fovy, play->view.zNear, play->lightCtx.fogFar); func_800AAA50(&play->view, 15); diff --git a/soh/src/code/z_rcp.c b/soh/src/code/z_rcp.c index 767772949..22e2fe2be 100644 --- a/soh/src/code/z_rcp.c +++ b/soh/src/code/z_rcp.c @@ -1187,14 +1187,6 @@ void Gfx_SetupDL_39Opa(GraphicsContext* gfxCtx) { CLOSE_DISPS(gfxCtx); } -void Gfx_SetupDL_39Kal(GraphicsContext* gfxCtx) { - OPEN_DISPS(gfxCtx); - - POLY_KAL_DISP = Gfx_SetupDL_39(POLY_KAL_DISP); - - CLOSE_DISPS(gfxCtx); -} - void Gfx_SetupDL_39Overlay(GraphicsContext* gfxCtx) { OPEN_DISPS(gfxCtx); @@ -1298,14 +1290,6 @@ void Gfx_SetupDL_42Opa(GraphicsContext* gfxCtx) { CLOSE_DISPS(gfxCtx); } -void Gfx_SetupDL_42Kal(GraphicsContext* gfxCtx) { - OPEN_DISPS(gfxCtx); - - gSPDisplayList(POLY_KAL_DISP++, sSetupDL[SETUPDL_42]); - - CLOSE_DISPS(gfxCtx); -} - void Gfx_SetupDL_42Overlay(GraphicsContext* gfxCtx) { OPEN_DISPS(gfxCtx); @@ -1469,26 +1453,22 @@ void Gfx_SetupFrame(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b) { // Set up the RDP render state for rectangles in FILL mode gSPDisplayList(POLY_OPA_DISP++, sFillSetupDL); gSPDisplayList(POLY_XLU_DISP++, sFillSetupDL); - gSPDisplayList(POLY_KAL_DISP++, sFillSetupDL); gSPDisplayList(OVERLAY_DISP++, sFillSetupDL); // Set the scissor region to the full screen gDPSetScissor(POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight); gDPSetScissor(POLY_XLU_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight); - gDPSetScissor(POLY_KAL_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight); gDPSetScissor(OVERLAY_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight); // Set up the framebuffer, primitives will be drawn here gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); gDPSetColorImage(POLY_XLU_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); - gDPSetColorImage(POLY_KAL_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); gDPSetColorImage(OVERLAY_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); // Set up the z-buffer gDPSetDepthImage(POLY_OPA_DISP++, gZBuffer); gDPSetDepthImage(POLY_XLU_DISP++, gZBuffer); - gDPSetDepthImage(POLY_KAL_DISP++, gZBuffer); gDPSetDepthImage(OVERLAY_DISP++, gZBuffer); if ((R_PAUSE_MENU_MODE < 2) && (gTrnsnUnkState < 2)) { diff --git a/soh/src/code/z_view.c b/soh/src/code/z_view.c index 2c18466f2..5799c23a8 100644 --- a/soh/src/code/z_view.c +++ b/soh/src/code/z_view.c @@ -188,8 +188,6 @@ void func_800AA550(View* view) { gDPSetScissor(POLY_OPA_DISP++, G_SC_NON_INTERLACE, ulx, uly, lrx, lry); gDPPipeSync(POLY_XLU_DISP++); gDPSetScissor(POLY_XLU_DISP++, G_SC_NON_INTERLACE, ulx, uly, lrx, lry); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetScissor(POLY_KAL_DISP++, G_SC_NON_INTERLACE, ulx, uly, lrx, lry); CLOSE_DISPS(gfxCtx); } @@ -312,7 +310,6 @@ s32 func_800AAA9C(View* view) { gSPViewport(POLY_OPA_DISP++, vp); gSPViewport(POLY_XLU_DISP++, vp); - gSPViewport(POLY_KAL_DISP++, vp); projection = Graph_Alloc(gfxCtx, sizeof(Mtx)); projectionFlipped = Graph_Alloc(gfxCtx, sizeof(Mtx)); @@ -451,8 +448,6 @@ s32 func_800AAA9C(View* view) { gSPMatrix(POLY_OPA_DISP++, projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPPerspNormalize(POLY_XLU_DISP++, view->normal); gSPMatrix(POLY_XLU_DISP++, projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); - gSPPerspNormalize(POLY_KAL_DISP++, view->normal); - gSPMatrix(POLY_KAL_DISP++, projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); Matrix_MtxFToMtx(viewingF.mf, viewing); @@ -478,7 +473,6 @@ s32 func_800AAA9C(View* view) { } gSPMatrix(POLY_OPA_DISP++, viewing, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); gSPMatrix(POLY_XLU_DISP++, viewing, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); - gSPMatrix(POLY_KAL_DISP++, viewing, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); FrameInterpolation_RecordCloseChild(); CLOSE_DISPS(gfxCtx); @@ -502,7 +496,6 @@ s32 func_800AB0A8(View* view) { gSPViewport(POLY_OPA_DISP++, vp); gSPViewport(POLY_XLU_DISP++, vp); - gSPViewport(POLY_KAL_DISP++, vp); gSPViewport(OVERLAY_DISP++, vp); projection = Graph_Alloc(gfxCtx, sizeof(Mtx)); @@ -516,7 +509,6 @@ s32 func_800AB0A8(View* view) { gSPMatrix(POLY_OPA_DISP++, projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(POLY_XLU_DISP++, projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); - gSPMatrix(POLY_KAL_DISP++, projection, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); CLOSE_DISPS(gfxCtx); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c index e4f2e65ef..e7b04ed22 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c @@ -339,9 +339,9 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); D_8082A0FC--; @@ -377,10 +377,10 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { } if (CHECK_QUEST_ITEM(sp218)) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, D_8082A0D8[sp218], D_8082A0E4[sp218], D_8082A0F0[sp218], 0); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetEnvColor(POLY_OPA_DISP++, D_8082A0D8[sp218], D_8082A0E4[sp218], D_8082A0F0[sp218], 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); KaleidoScope_DrawQuadTextureRGBA32(gfxCtx, gItemIcons[ITEM_MEDALLION_FOREST + sp218], 24, 24, 0); } @@ -393,11 +393,11 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 255); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); - gDPLoadTextureBlock(POLY_KAL_DISP++, gSongNoteTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, + gDPLoadTextureBlock(POLY_OPA_DISP++, gSongNoteTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 24, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); for (sp218 = 0; sp218 < QUEST_KOKIRI_EMERALD - QUEST_SONG_MINUET; sp218++, sp21A += 4) { @@ -416,31 +416,31 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { pauseCtx->questVtx[sp21A + 2].v.ob[1] - 4; } - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, D_8082A164[sp218], D_8082A17C[sp218], D_8082A194[sp218], + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_8082A164[sp218], D_8082A17C[sp218], D_8082A194[sp218], pauseCtx->alpha); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 255); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); for (sp218 = 0; sp218 < 3; sp218++, sp21A += 4) { if (CHECK_QUEST_ITEM(sp218 + 0x12)) { - gSPVertex(POLY_KAL_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); KaleidoScope_DrawQuadTextureRGBA32(gfxCtx, gItemIcons[ITEM_KOKIRI_EMERALD + sp218], 24, 24, 0); } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); for (sp218 = 0; sp218 < 3; sp218++, sp21A += 4) { if (CHECK_QUEST_ITEM(sp218 + 0x15)) { - gSPVertex(POLY_KAL_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); KaleidoScope_DrawQuadTextureRGBA32(gfxCtx, gItemIcons[ITEM_STONE_OF_AGONY + sp218], 24, 24, 0); } } @@ -482,28 +482,28 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { } if ((gSaveContext.inventory.questItems >> 0x1C) != 0) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); if ((pauseCtx->state == 4) || (pauseCtx->state == 0x12)) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, D_8082A070[0][0], D_8082A070[0][1], D_8082A070[0][2], + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_8082A070[0][0], D_8082A070[0][1], D_8082A070[0][2], pauseCtx->alpha); } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, D_8082A104, D_8082A108, D_8082A10C, D_8082A110); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_8082A104, D_8082A108, D_8082A10C, D_8082A110); } - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 255); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8( - POLY_KAL_DISP, gItemIcons[0x79 + (((gSaveContext.inventory.questItems & 0xF0000000) & 0xF0000000) >> 0x1C)], + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8( + POLY_OPA_DISP, gItemIcons[0x79 + (((gSaveContext.inventory.questItems & 0xF0000000) & 0xF0000000) >> 0x1C)], 48, 48, 0); } if (pauseCtx->state == 6) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); sp21A += 4; if ((pauseCtx->cursorSpecialPos == 0) && (sp216 >= 6) && (sp216 < 0x12)) { @@ -544,33 +544,33 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { pauseCtx->questVtx[sp21A + 2].v.ob[1] = pauseCtx->questVtx[sp21A + 3].v.ob[1] = pauseCtx->questVtx[sp21A + 0].v.ob[1] - 12; - gDPPipeSync(POLY_KAL_DISP++); + gDPPipeSync(POLY_OPA_DISP++); s16 Notes_alpha = D_8082A150[sp218]; if (D_8082A124[sp218] == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, Notes_alpha); } else { if (D_8082A124[sp218] == OCARINA_NOTE_D5) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b, Notes_alpha); } else if (D_8082A124[sp218] == OCARINA_NOTE_B4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, Notes_alpha); } else if (D_8082A124[sp218] == OCARINA_NOTE_A4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, Notes_alpha); } else if (D_8082A124[sp218] == OCARINA_NOTE_F4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, Notes_alpha); } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cButtonsColor.r, cButtonsColor.g, cButtonsColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cButtonsColor.r, cButtonsColor.g, cButtonsColor.b, Notes_alpha); } } - gDPSetEnvColor(POLY_KAL_DISP++, 10, 10, 10, 0); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 10, 10, 10, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); - gDPLoadTextureBlock(POLY_KAL_DISP++, D_8082A130[D_8082A124[sp218]], G_IM_FMT_IA, G_IM_SIZ_8b, 16, + gDPLoadTextureBlock(POLY_OPA_DISP++, D_8082A130[D_8082A124[sp218]], G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } } } else if (((pauseCtx->unk_1E4 >= 4) && (pauseCtx->unk_1E4 <= 6)) || (pauseCtx->unk_1E4 == 8)) { @@ -584,38 +584,38 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { pauseCtx->questVtx[sp21A + 2].v.ob[1] = pauseCtx->questVtx[sp21A + 3].v.ob[1] = pauseCtx->questVtx[sp21A + 0].v.ob[1] - 12; - gDPPipeSync(POLY_KAL_DISP++); + gDPPipeSync(POLY_OPA_DISP++); if (pauseCtx->unk_1E4 == 8) { s16 Notes_alpha = 200; if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, Notes_alpha); } else { if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_D5) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b, Notes_alpha); } else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_B4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, Notes_alpha); } else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_A4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, Notes_alpha); } else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_F4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, Notes_alpha); } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cButtonsColor.r, cButtonsColor.g, cButtonsColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cButtonsColor.r, cButtonsColor.g, cButtonsColor.b, Notes_alpha); } } } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 150, 150, 150, 150); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 150, 150, 150); } - gDPSetEnvColor(POLY_KAL_DISP++, 10, 10, 10, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 10, 10, 10, 0); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); - gDPLoadTextureBlock(POLY_KAL_DISP++, D_8082A130[gOcarinaSongNotes[sp224].notesIdx[phi_s3]], G_IM_FMT_IA, + gDPLoadTextureBlock(POLY_OPA_DISP++, D_8082A130[gOcarinaSongNotes[sp224].notesIdx[phi_s3]], G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } if (pauseCtx->unk_1E4 != 8) { @@ -651,34 +651,34 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { pauseCtx->questVtx[sp21A + 2].v.ob[1] = pauseCtx->questVtx[sp21A + 3].v.ob[1] = pauseCtx->questVtx[sp21A + 0].v.ob[1] - 12; - gDPPipeSync(POLY_KAL_DISP++); + gDPPipeSync(POLY_OPA_DISP++); s16 Notes_alpha = D_8082A150[phi_s3]; if (D_8082A124[phi_s3] == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, Notes_alpha); } else { if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_D5) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b, Notes_alpha); } else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_B4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, Notes_alpha); } else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_A4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, Notes_alpha); } else if (gOcarinaSongNotes[sp224].notesIdx[phi_s3] == OCARINA_NOTE_F4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, Notes_alpha); } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cButtonsColor.r, cButtonsColor.g, cButtonsColor.b, Notes_alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cButtonsColor.r, cButtonsColor.g, cButtonsColor.b, Notes_alpha); } } - gDPSetEnvColor(POLY_KAL_DISP++, 10, 10, 10, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 10, 10, 10, 0); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[sp21A], 4, 0); - gDPLoadTextureBlock(POLY_KAL_DISP++, D_8082A130[D_8082A124[phi_s3]], G_IM_FMT_IA, G_IM_SIZ_8b, 16, + gDPLoadTextureBlock(POLY_OPA_DISP++, D_8082A130[D_8082A124[phi_s3]], G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } if (pauseCtx->unk_1E4 == 4) { @@ -700,10 +700,10 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { } if (CHECK_QUEST_ITEM(QUEST_SKULL_TOKEN)) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); sp208[0] = sp208[1] = 0; sp208[2] = gSaveContext.inventory.gsTokens; @@ -718,25 +718,25 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { sp208[2] -= 10; } - gSPVertex(POLY_KAL_DISP++, &pauseCtx->questVtx[164], 24, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->questVtx[164], 24, 0); for (phi_s3 = 0, sp218 = 0, sp21A = 0; phi_s3 < 2; phi_s3++) { if (phi_s3 == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 0, 0, 0, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, pauseCtx->alpha); } else if (gSaveContext.inventory.gsTokens == 100) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 200, 50, 50, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 200, 50, 50, pauseCtx->alpha); } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); } phi_s0 = 0; for (sp21A = 0; sp21A < 3; sp21A++, sp218 += 4) { if ((sp21A >= 2) || (sp208[sp21A] != 0) || (phi_s0 != 0)) { - gDPLoadTextureBlock(POLY_KAL_DISP++, digitTextures[sp208[sp21A]], G_IM_FMT_I, + gDPLoadTextureBlock(POLY_OPA_DISP++, digitTextures[sp208[sp21A]], G_IM_FMT_I, G_IM_SIZ_8b, 8, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, sp218, sp218 + 2, sp218 + 3, sp218 + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, sp218, sp218 + 2, sp218 + 3, sp218 + 1, 0); phi_s0 = 1; } diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.c index d2050bc80..d715c2211 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.c @@ -84,10 +84,10 @@ extern const char* digitTextures[]; void KaleidoScope_DrawDigit(PlayState* play, s32 digit, s32 rectLeft, s32 rectTop) { OPEN_DISPS(play->state.gfxCtx); - gDPLoadTextureBlock(POLY_KAL_DISP++, digitTextures[digit], G_IM_FMT_I, G_IM_SIZ_8b, 8, 16, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, digitTextures[digit], G_IM_FMT_I, G_IM_SIZ_8b, 8, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(POLY_KAL_DISP++, rectLeft << 2, rectTop << 2, (rectLeft + 8) << 2, (rectTop + 16) << 2, + gSPTextureRectangle(POLY_OPA_DISP++, rectLeft << 2, rectTop << 2, (rectLeft + 8) << 2, (rectTop + 16) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); CLOSE_DISPS(play->state.gfxCtx); @@ -115,17 +115,17 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { pauseCtx->stickRelX = input->rel.stick_x; pauseCtx->stickRelY = input->rel.stick_y; - Gfx_SetupDL_39Kal(play->state.gfxCtx); + Gfx_SetupDL_39Opa(play->state.gfxCtx); - gDPSetRenderMode(POLY_KAL_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 0, 0, 0, 220); - gDPFillRectangle(POLY_KAL_DISP++, 24, 12, 298, 228); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineLERP(POLY_KAL_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, + gDPSetRenderMode(POLY_OPA_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, 220); + gDPFillRectangle(POLY_OPA_DISP++, 24, 12, 298, 228); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); - gfxRef = POLY_KAL_DISP; + gfxRef = POLY_OPA_DISP; gfx = Graph_GfxPlusOne(gfxRef); gSPDisplayList(OVERLAY_DISP++, gfx); @@ -133,17 +133,17 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { gSPEndDisplayList(gfx++); Graph_BranchDlist(gfxRef, gfx); - POLY_KAL_DISP = gfx; + POLY_OPA_DISP = gfx; - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 0, 0, 255); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 0, 0, 255); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); // Current Health Quarter (X / 4) KaleidoScope_DrawDigit(play, (gSaveContext.health % 0x10) / 4, 194, 15); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); // Rupees spD8[0] = spD8[1] = spD8[2] = 0; @@ -622,19 +622,19 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { } // Draws a highlight on the selected section - gDPPipeSync(POLY_KAL_DISP++); - gDPSetRenderMode(POLY_KAL_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 0, 0, 200, 120); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetRenderMode(POLY_OPA_DISP++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 200, 120); if (curSection == 0) { - gDPFillRectangle(POLY_KAL_DISP++, sSectionPositions[curSection][0], sSectionPositions[curSection][1], + gDPFillRectangle(POLY_OPA_DISP++, sSectionPositions[curSection][0], sSectionPositions[curSection][1], sSectionPositions[curSection][0] + 45, sSectionPositions[curSection][1] + 16); } else if ((curSection >= 0x1B) || (curSection == 0x5B)) { - gDPFillRectangle(POLY_KAL_DISP++, sSectionPositions[curSection][0] - 2, sSectionPositions[curSection][1], + gDPFillRectangle(POLY_OPA_DISP++, sSectionPositions[curSection][0] - 2, sSectionPositions[curSection][1], sSectionPositions[curSection][0] + 14, sSectionPositions[curSection][1] + 16); } else { - gDPFillRectangle(POLY_KAL_DISP++, sSectionPositions[curSection][0] - 4, sSectionPositions[curSection][1], + gDPFillRectangle(POLY_OPA_DISP++, sSectionPositions[curSection][0] - 4, sSectionPositions[curSection][1], sSectionPositions[curSection][0] + 24, sSectionPositions[curSection][1] + 16); } diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c index 5ed5bdbaa..9fa91cbdf 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c @@ -42,10 +42,10 @@ void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u OPEN_DISPS(play->state.gfxCtx); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_POINT); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); curTexture = source; remainingSize = width * height * 2; @@ -58,7 +58,7 @@ void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u vtxIndex = 80; - gDPSetTileCustom(POLY_KAL_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, textureHeight, 0, G_TX_NOMIRROR | G_TX_CLAMP, + gDPSetTileCustom(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, textureHeight, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); remainingSize -= textureSize; @@ -70,15 +70,15 @@ void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u pauseCtx->equipVtx[vtxIndex + 3].v.ob[1] -= 80; for (i = 0; i < textureCount; i++) { - gSPVertex(POLY_KAL_DISP++, &pauseCtx->equipVtx[vtxIndex], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->equipVtx[vtxIndex], 4, 0); - gDPSetTextureImage(POLY_KAL_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, curTexture); + gDPSetTextureImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, curTexture); - gDPLoadSync(POLY_KAL_DISP++); - gDPLoadTile(POLY_KAL_DISP++, G_TX_LOADTILE, 0, 0, (width - 1) << 2, (textureHeight - 1) << 2); + gDPLoadSync(POLY_OPA_DISP++); + gDPLoadTile(POLY_OPA_DISP++, G_TX_LOADTILE, 0, 0, (width - 1) << 2, (textureHeight - 1) << 2); - gDPSetTextureImageFB(POLY_KAL_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, gPauseLinkFrameBuffer); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gDPSetTextureImageFB(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, gPauseLinkFrameBuffer); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); curTexture += textureSize; @@ -87,7 +87,7 @@ void KaleidoScope_DrawEquipmentImage(PlayState* play, void* source, u32 width, u textureHeight = remainingSize / (s32)(width * 2); remainingSize -= textureSize; - gDPSetTileCustom(POLY_KAL_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, textureHeight, 0, + gDPSetTileCustom(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, textureHeight, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); } @@ -107,7 +107,7 @@ void KaleidoScope_DrawAButton(PlayState* play, Vtx* vtx, int16_t xTranslate, int Matrix_Push(); Matrix_Translate(xTranslate, yTranslate, 0, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Color_RGB8 aButtonColor = { 0, 100, 255 }; if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.Changed"), 0)) { aButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.AButton.Value"), aButtonColor); @@ -115,13 +115,13 @@ void KaleidoScope_DrawAButton(PlayState* play, Vtx* vtx, int16_t xTranslate, int aButtonColor = (Color_RGB8){ 0, 255, 100 }; } - gSPVertex(POLY_KAL_DISP++, vtx, 4, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, pauseCtx->alpha); - gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, + gSPVertex(POLY_OPA_DISP++, vtx, 4, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, pauseCtx->alpha); + gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); Matrix_Pop(); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); CLOSE_DISPS(play->state.gfxCtx); } @@ -188,16 +188,16 @@ void KaleidoScope_DrawEquipment(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, ZREG(39), ZREG(40), ZREG(41), pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, ZREG(43), ZREG(44), ZREG(45), 0); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, ZREG(39), ZREG(40), ZREG(41), pauseCtx->alpha); + gDPSetEnvColor(POLY_OPA_DISP++, ZREG(43), ZREG(44), ZREG(45), 0); for (i = 0, j = 64; i < 4; i++, j += 4) { if (CUR_EQUIP_VALUE(i) != 0) { - gDPPipeSync(POLY_KAL_DISP++); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->equipVtx[j], 4, 0); + gDPPipeSync(POLY_OPA_DISP++); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->equipVtx[j], 4, 0); - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, gEquippedItemOutlineTex, 32, 32, 0); + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0); } } @@ -720,11 +720,11 @@ void KaleidoScope_DrawEquipment(PlayState* play) { Gfx_SetupDL_42Opa(play->state.gfxCtx); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); for (rowStart = 0, j = 0, temp = 0, i = 0; i < 4; i++, rowStart += 4, j += 16) { - gSPVertex(POLY_KAL_DISP++, &pauseCtx->equipVtx[j], 16, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->equipVtx[j], 16, 0); bool drawGreyItems = !CVarGetInteger(CVAR_CHEAT("TimelessEquipment"), 0); if (LINK_AGE_IN_YEARS == YEARS_CHILD) { point = CUR_UPG_VALUE(sChildUpgrades[i]); @@ -735,20 +735,20 @@ void KaleidoScope_DrawEquipment(PlayState* play) { ((sChildUpgradeItemBases[i] + CUR_UPG_VALUE(sChildUpgrades[i]) - 1) == ITEM_GAUNTLETS_SILVER || (sChildUpgradeItemBases[i] + CUR_UPG_VALUE(sChildUpgrades[i]) - 1) == ITEM_GAUNTLETS_GOLD)) || (CVarGetInteger(CVAR_ENHANCEMENT("ToggleStrength"), 0) && CVarGetInteger(CVAR_ENHANCEMENT("StrengthDisabled"), 0) && sChildUpgrades[i] == UPG_STRENGTH)) { - gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255); - gSPGrayscale(POLY_KAL_DISP++, true); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 109, 109, 109, 255); + gSPGrayscale(POLY_OPA_DISP++, true); } KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIcons[sChildUpgradeItemBases[i] + point - 1], 32, 32, 0); - gSPGrayscale(POLY_KAL_DISP++, false); + gSPGrayscale(POLY_OPA_DISP++, false); } } else { if ((i == 0) && (CUR_UPG_VALUE(sAdultUpgrades[i]) == 0)) { // If the player doesn't have the bow, load the current slingshot ammo upgrade instead. if (drawGreyItems) { - gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255); // Grey Out Slingshot Bullet Bags - gSPGrayscale(POLY_KAL_DISP++, true); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 109, 109, 109, 255); // Grey Out Slingshot Bullet Bags + gSPGrayscale(POLY_OPA_DISP++, true); } KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIcons[sChildUpgradeItemBases[i] + CUR_UPG_VALUE(sChildUpgrades[i]) - 1], 32, 32, 0); - gSPGrayscale(POLY_KAL_DISP++, false); + gSPGrayscale(POLY_OPA_DISP++, false); } else if (CUR_UPG_VALUE(sAdultUpgrades[i]) != 0) { // Grey Out the Goron Bracelet when Not Randomized and Toggle Strength Option is off // Grey Out Strength Upgrades when Disabled and the Toggle Strength Option is on @@ -756,11 +756,11 @@ void KaleidoScope_DrawEquipment(PlayState* play) { (((sAdultUpgradeItemBases[i] + CUR_UPG_VALUE(sAdultUpgrades[i]) - 1) == ITEM_BRACELET && !(IS_RANDO) && !CVarGetInteger(CVAR_ENHANCEMENT("ToggleStrength"), 0)))) || (CVarGetInteger(CVAR_ENHANCEMENT("ToggleStrength"), 0) && CVarGetInteger(CVAR_ENHANCEMENT("StrengthDisabled"), 0) && sAdultUpgrades[i] == UPG_STRENGTH)) { - gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255); - gSPGrayscale(POLY_KAL_DISP++, true); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 109, 109, 109, 255); + gSPGrayscale(POLY_OPA_DISP++, true); } KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIcons[sAdultUpgradeItemBases[i] + CUR_UPG_VALUE(sAdultUpgrades[i]) - 1], 32, 32, 0); - gSPGrayscale(POLY_KAL_DISP++, false); + gSPGrayscale(POLY_OPA_DISP++, false); } } // Draw inventory screen icons @@ -769,8 +769,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { int itemId = ITEM_SWORD_KOKIRI + temp; bool age_restricted = !CHECK_AGE_REQ_ITEM(itemId); if (age_restricted) { - gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255); - gSPGrayscale(POLY_KAL_DISP++, true); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 109, 109, 109, 255); + gSPGrayscale(POLY_OPA_DISP++, true); } if (((u32)i == 0) && (k == 2) && (gSaveContext.bgsFlag != 0)) { KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIconSwordBiggoronTex, 32, 32, point); @@ -779,7 +779,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } else if (gBitFlags[bit] & gSaveContext.inventory.equipment) { KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIcons[itemId], 32, 32, point); } - gSPGrayscale(POLY_KAL_DISP++, false); + gSPGrayscale(POLY_OPA_DISP++, false); } } @@ -808,19 +808,19 @@ void KaleidoScope_DrawEquipment(PlayState* play) { //KaleidoScope_ProcessPlayerPreRender(play); } - // gSPInvalidateTexCache(POLY_KAL_DISP++, 0); - gSPInvalidateTexCache(POLY_KAL_DISP++, pauseCtx->iconItemSegment); - //gSPInvalidateTexCache(POLY_KAL_DISP++, pauseCtx->iconItem24Segment); - gSPInvalidateTexCache(POLY_KAL_DISP++, pauseCtx->nameSegment); + // gSPInvalidateTexCache(POLY_OPA_DISP++, 0); + gSPInvalidateTexCache(POLY_OPA_DISP++, pauseCtx->iconItemSegment); + //gSPInvalidateTexCache(POLY_OPA_DISP++, pauseCtx->iconItem24Segment); + gSPInvalidateTexCache(POLY_OPA_DISP++, pauseCtx->nameSegment); - //gSPSegment(POLY_KAL_DISP++, 0x07, pauseCtx->playerSegment); - gSPSegment(POLY_KAL_DISP++, 0x08, pauseCtx->iconItemSegment); - gSPSegment(POLY_KAL_DISP++, 0x09, pauseCtx->iconItem24Segment); - gSPSegment(POLY_KAL_DISP++, 0x0A, pauseCtx->nameSegment); - gSPSegment(POLY_KAL_DISP++, 0x0B, play->interfaceCtx.mapSegment); - //gSPSegment(POLY_KAL_DISP++, 0x0C, pauseCtx->iconItemAltSegment); + //gSPSegment(POLY_OPA_DISP++, 0x07, pauseCtx->playerSegment); + gSPSegment(POLY_OPA_DISP++, 0x08, pauseCtx->iconItemSegment); + gSPSegment(POLY_OPA_DISP++, 0x09, pauseCtx->iconItem24Segment); + gSPSegment(POLY_OPA_DISP++, 0x0A, pauseCtx->nameSegment); + gSPSegment(POLY_OPA_DISP++, 0x0B, play->interfaceCtx.mapSegment); + //gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment); - Gfx_SetupDL_42Kal(play->state.gfxCtx); + Gfx_SetupDL_42Opa(play->state.gfxCtx); KaleidoScope_DrawEquipmentImage(play, pauseCtx->playerSegment, PAUSE_EQUIP_PLAYER_WIDTH, PAUSE_EQUIP_PLAYER_HEIGHT); if (gUpgradeMasks[0]) {} diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c index b0843b5ee..6e8a42803 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c @@ -52,22 +52,22 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, ammo = AMMO(item); - gDPPipeSync(POLY_KAL_DISP++); + gDPPipeSync(POLY_OPA_DISP++); if (!CHECK_AGE_REQ_SLOT(SLOT(item))) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 100, 100, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 100, 100, pauseCtx->alpha); } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); if (ammo == 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 130, 130, 130, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 130, 130, 130, pauseCtx->alpha); } else if ((item == ITEM_BOMB && AMMO(item) == CUR_CAPACITY(UPG_BOMB_BAG)) || (item == ITEM_BOW && AMMO(item) == CUR_CAPACITY(UPG_QUIVER)) || (item == ITEM_SLINGSHOT && AMMO(item) == CUR_CAPACITY(UPG_BULLET_BAG)) || (item == ITEM_STICK && AMMO(item) == CUR_CAPACITY(UPG_STICKS)) || (item == ITEM_NUT && AMMO(item) == CUR_CAPACITY(UPG_NUTS)) || (item == ITEM_BOMBCHU && ammo == 50) || (item == ITEM_BEAN && ammo == 15)) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 120, 255, 0, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 120, 255, 0, pauseCtx->alpha); } } @@ -75,25 +75,25 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, ammo -= 10; } - gDPPipeSync(POLY_KAL_DISP++); + gDPPipeSync(POLY_OPA_DISP++); if (i != 0) { - gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[((CVarGetInteger(CVAR_ENHANCEMENT("BetterAmmoRendering"), 0) ? sAllAmmoVtxOffset[slot] : sAmmoVtxOffset[slot]) + 31) * 4], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[((CVarGetInteger(CVAR_ENHANCEMENT("BetterAmmoRendering"), 0) ? sAllAmmoVtxOffset[slot] : sAmmoVtxOffset[slot]) + 31) * 4], 4, 0); - gDPLoadTextureBlock(POLY_KAL_DISP++, ((u8*)_gAmmoDigit0Tex[i]), G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, ((u8*)_gAmmoDigit0Tex[i]), G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } - gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[((CVarGetInteger(CVAR_ENHANCEMENT("BetterAmmoRendering"), 0) ? sAllAmmoVtxOffset[slot] : sAmmoVtxOffset[slot]) + 32) * 4], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[((CVarGetInteger(CVAR_ENHANCEMENT("BetterAmmoRendering"), 0) ? sAllAmmoVtxOffset[slot] : sAmmoVtxOffset[slot]) + 32) * 4], 4, 0); - gDPLoadTextureBlock(POLY_KAL_DISP++, ((u8*)_gAmmoDigit0Tex[ammo]), G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, ((u8*)_gAmmoDigit0Tex[ammo]), G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); CLOSE_DISPS(gfxCtx); } @@ -195,7 +195,7 @@ void KaleidoScope_DrawItemCycleExtras(PlayState* play, u8 slot, u8 canCycle, u8 Matrix_Scale(finalScale, finalScale, 1.0f, MTXMODE_APPLY); } - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); // Render A button indicator when hovered and not cycling if (!isCycling && sSlotCycleActiveAnimTimer[slot] == 0 && pauseCtx->cursorSlot[PAUSE_ITEM] == slot && @@ -207,48 +207,48 @@ void KaleidoScope_DrawItemCycleExtras(PlayState* play, u8 slot, u8 canCycle, u8 aButtonColor = (Color_RGB8){ 0, 255, 100 }; } - gSPVertex(POLY_KAL_DISP++, sCycleAButtonVtx, 4, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, pauseCtx->alpha); - gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, + gSPVertex(POLY_OPA_DISP++, sCycleAButtonVtx, 4, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, pauseCtx->alpha); + gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } // Render a dark circle behind the extra items when cycling if (isCycling) { - gSPVertex(POLY_KAL_DISP++, sCycleCircleVtx, 8, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 0, 0, 0, pauseCtx->alpha * (1.0f - animScale)); - gDPLoadTextureBlock_4b(POLY_KAL_DISP++, gPausePromptCursorTex, G_IM_FMT_I, 48, 48, 0, + gSPVertex(POLY_OPA_DISP++, sCycleCircleVtx, 8, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, pauseCtx->alpha * (1.0f - animScale)); + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gPausePromptCursorTex, G_IM_FMT_I, 48, 48, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); if (showLeftItem) { - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } if (showRightItem) { - gSP1Quadrangle(POLY_KAL_DISP++, 4, 6, 7, 5, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); } } // Render left and right items - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gSPVertex(POLY_KAL_DISP++, sCycleExtraItemVtx, 8, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gSPVertex(POLY_OPA_DISP++, sCycleExtraItemVtx, 8, 0); if (showLeftItem) { if (!CHECK_AGE_REQ_ITEM(leftItem)) { - gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255); - gSPGrayscale(POLY_KAL_DISP++, true); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 109, 109, 109, 255); + gSPGrayscale(POLY_OPA_DISP++, true); } KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIcons[leftItem], 32, 32, 0); - gSPGrayscale(POLY_KAL_DISP++, false); + gSPGrayscale(POLY_OPA_DISP++, false); } if (showRightItem) { if (!CHECK_AGE_REQ_ITEM(rightItem)) { - gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255); - gSPGrayscale(POLY_KAL_DISP++, true); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 109, 109, 109, 255); + gSPGrayscale(POLY_OPA_DISP++, true); } KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIcons[rightItem], 32, 32, 4); - gSPGrayscale(POLY_KAL_DISP++, false); + gSPGrayscale(POLY_OPA_DISP++, false); } Matrix_Pop(); @@ -431,7 +431,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { Gfx_SetupDL_42Opa(play->state.gfxCtx); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); pauseCtx->cursorColorSet = 0; pauseCtx->nameColorSet = 0; @@ -714,29 +714,29 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); for (i = 0, j = 24 * 4; i < ARRAY_COUNT(gSaveContext.equips.cButtonSlots); i++, j += 4) { if ((gSaveContext.equips.buttonItems[i + 1] != ITEM_NONE) && !((gSaveContext.equips.buttonItems[i + 1] >= ITEM_SHIELD_DEKU) && (gSaveContext.equips.buttonItems[i + 1] <= ITEM_BOOTS_HOVER))) { - gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[j], 4, 0); - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, gEquippedItemOutlineTex, 32, 32, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j], 4, 0); + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0); } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); for (i = j = 0; i < 24; i++, j += 4) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); if (gSaveContext.inventory.items[i] != ITEM_NONE) { if ((pauseCtx->unk_1E4 == 0) && (pauseCtx->pageIndex == PAUSE_ITEM) && (pauseCtx->cursorSpecialPos == 0)) { if (CHECK_AGE_REQ_SLOT(i)) { if ((sEquipState == 2) && (i == 3)) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, magicArrowEffectsR[pauseCtx->equipTargetItem - 0xBF], + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, magicArrowEffectsR[pauseCtx->equipTargetItem - 0xBF], magicArrowEffectsG[pauseCtx->equipTargetItem - 0xBF], magicArrowEffectsB[pauseCtx->equipTargetItem - 0xBF], pauseCtx->alpha); @@ -767,16 +767,16 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { } } - gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[j + 0], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j + 0], 4, 0); int itemId = gSaveContext.inventory.items[i]; bool not_acquired = !CHECK_AGE_REQ_ITEM(itemId); if (not_acquired) { - gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255); - gSPGrayscale(POLY_KAL_DISP++, true); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 109, 109, 109, 255); + gSPGrayscale(POLY_OPA_DISP++, true); } KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIcons[itemId], 32, 32, 0); - gSPGrayscale(POLY_KAL_DISP++, false); + gSPGrayscale(POLY_OPA_DISP++, false); } } @@ -784,8 +784,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { KaleidoScope_DrawCursor(play, PAUSE_ITEM); } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); u8 gBetterAmmoRendering = CVarGetInteger(CVAR_ENHANCEMENT("BetterAmmoRendering"), 0); @@ -1188,4 +1188,4 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { pauseCtx->equipAnimAlpha = 255; } } -} \ No newline at end of file +} diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.c index 0730f6b12..3c37b565f 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.c @@ -220,80 +220,80 @@ void KaleidoScope_DrawDungeonMap(PlayState* play, GraphicsContext* gfxCtx) { } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[68], 16, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[68], 16, 0); - gDPLoadTextureBlock(POLY_KAL_DISP++, dungeonTitleTexs[gSaveContext.mapIndex+(10*gSaveContext.language)], G_IM_FMT_IA, G_IM_SIZ_8b, 96, 16, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, dungeonTitleTexs[gSaveContext.mapIndex+(10*gSaveContext.language)], G_IM_FMT_IA, G_IM_SIZ_8b, 96, 16, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); for (i = 0, j = 4; i < 3; i++, j += 4) { if (CHECK_DUNGEON_ITEM(i, gSaveContext.mapIndex)) { - gDPLoadTextureBlock(POLY_KAL_DISP++, dungeonItemTexs[i], G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 24, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, dungeonItemTexs[i], G_IM_FMT_RGBA, G_IM_SIZ_32b, 24, 24, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, j, j + 2, j + 3, j + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 200, pauseCtx->alpha); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[84], 32, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[84], 32, 0); for (i = j = 0; i < 8; i++, j += 4) { if ((gSaveContext.sceneFlags[gSaveContext.mapIndex].floors & gBitFlags[i]) || CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex)) { if (i != (pauseCtx->dungeonMapSlot - 3)) { - gDPLoadTextureBlock(POLY_KAL_DISP++, floorIconTexs[gMapData->floorID[interfaceCtx->unk_25A][i]], + gDPLoadTextureBlock(POLY_OPA_DISP++, floorIconTexs[gMapData->floorID[interfaceCtx->unk_25A][i]], G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, j, j + 2, j + 3, j + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } } } j = (pauseCtx->dungeonMapSlot - 3) * 4; - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 150, 150, 255, pauseCtx->alpha); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 150, 255, pauseCtx->alpha); - gDPLoadTextureBlock(POLY_KAL_DISP++, + gDPLoadTextureBlock(POLY_OPA_DISP++, floorIconTexs[gMapData->floorID[interfaceCtx->unk_25A][pauseCtx->dungeonMapSlot - 3]], G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, j, j + 2, j + 3, j + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); pauseCtx->mapPageVtx[124].v.ob[0] = pauseCtx->mapPageVtx[126].v.ob[0] = pauseCtx->mapPageVtx[124].v.ob[0] + 2; pauseCtx->mapPageVtx[125].v.ob[0] = pauseCtx->mapPageVtx[127].v.ob[0] = pauseCtx->mapPageVtx[124].v.ob[0] + 19; pauseCtx->mapPageVtx[124].v.ob[1] = pauseCtx->mapPageVtx[125].v.ob[1] = pauseCtx->mapPageVtx[124].v.ob[1] - 2; pauseCtx->mapPageVtx[126].v.ob[1] = pauseCtx->mapPageVtx[127].v.ob[1] = pauseCtx->mapPageVtx[124].v.ob[1] - 19; - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[116], 12, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[116], 12, 0); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); pauseCtx->mapPageVtx[116].v.ob[1] = pauseCtx->mapPageVtx[117].v.ob[1] = pauseCtx->offsetY - (VREG(30) * 14) + 49; pauseCtx->mapPageVtx[118].v.ob[1] = pauseCtx->mapPageVtx[119].v.ob[1] = pauseCtx->mapPageVtx[116].v.ob[1] - 16; - gDPLoadTextureBlock(POLY_KAL_DISP++, gDungeonMapLinkHeadTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, gDungeonMapLinkHeadTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.mapIndex) && (gMapData->skullFloorIconY[gSaveContext.mapIndex] != -99)) { @@ -301,14 +301,14 @@ void KaleidoScope_DrawDungeonMap(PlayState* play, GraphicsContext* gfxCtx) { gMapData->skullFloorIconY[gSaveContext.mapIndex] + pauseCtx->offsetY; pauseCtx->mapPageVtx[122].v.ob[1] = pauseCtx->mapPageVtx[123].v.ob[1] = pauseCtx->mapPageVtx[120].v.ob[1] - 16; - gDPLoadTextureBlock(POLY_KAL_DISP++, gDungeonMapSkullTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, gDungeonMapSkullTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 4, 6, 7, 5, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); } - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); if (GET_GS_FLAGS(gSaveContext.mapIndex) == gAreaGsFlags[gSaveContext.mapIndex]) { KaleidoScope_DrawQuadTextureRGBA32(gfxCtx, gQuestIconGoldSkulltulaTex, 24, 24, 8); @@ -339,13 +339,13 @@ void KaleidoScope_DrawDungeonMap(PlayState* play, GraphicsContext* gfxCtx) { } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_POINT); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); // Use a unique palette address per frame so the renderer/shader can cache all variations - gDPLoadTLUT_pal16(POLY_KAL_DISP++, 0, interfaceCtx->mapPalettesPulse[palettePulseIdx]); - gDPSetTextureLUT(POLY_KAL_DISP++, G_TT_RGBA16); + gDPLoadTLUT_pal16(POLY_OPA_DISP++, 0, interfaceCtx->mapPalettesPulse[palettePulseIdx]); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); u8 mirroredWorld = CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0); u8 mirrorMode = mirroredWorld ? G_TX_MIRROR : G_TX_NOMIRROR; @@ -356,31 +356,31 @@ void KaleidoScope_DrawDungeonMap(PlayState* play, GraphicsContext* gfxCtx) { } } - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[60], 8, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60], 8, 0); - gDPLoadTextureBlock_4b(POLY_KAL_DISP++, interfaceCtx->mapSegmentName[0], G_IM_FMT_CI, MAP_48x85_TEX_WIDTH, + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, interfaceCtx->mapSegmentName[0], G_IM_FMT_CI, MAP_48x85_TEX_WIDTH, MAP_48x85_TEX_HEIGHT, 0, G_TX_WRAP | mirrorMode, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); // Swap vertices to render left half on the right and vice-versa if (mirroredWorld) { - gSP1Quadrangle(POLY_KAL_DISP++, 4, 6, 7, 5, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); } else { - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } - gDPLoadTextureBlock_4b(POLY_KAL_DISP++, interfaceCtx->mapSegmentName[1], G_IM_FMT_CI, MAP_48x85_TEX_WIDTH, + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, interfaceCtx->mapSegmentName[1], G_IM_FMT_CI, MAP_48x85_TEX_WIDTH, MAP_48x85_TEX_HEIGHT, 0, G_TX_WRAP | mirrorMode, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); if (mirroredWorld) { - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } else { - gSP1Quadrangle(POLY_KAL_DISP++, 4, 6, 7, 5, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 4, 6, 7, 5, 0); } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_BILERP); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); CLOSE_DISPS(gfxCtx); } @@ -546,55 +546,55 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { // Use matrix scaling to flip the entire overworld map for mirror world if (mirroredWorld) { // Invert culling to counter act the matrix flip - gSPSetExtraGeometryMode(POLY_KAL_DISP++, G_EX_INVERT_CULLING); + gSPSetExtraGeometryMode(POLY_OPA_DISP++, G_EX_INVERT_CULLING); Matrix_Push(); Matrix_Scale(-1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Matrix_Pop(); } - gDPPipeSync(POLY_KAL_DISP++); + gDPPipeSync(POLY_OPA_DISP++); if (HREG(15) == 0) { - gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_POINT); + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); - gDPLoadTLUT_pal256(POLY_KAL_DISP++, gWorldMapImageTLUT); - gDPSetTextureLUT(POLY_KAL_DISP++, G_TT_RGBA16); + gDPLoadTLUT_pal256(POLY_OPA_DISP++, gWorldMapImageTLUT); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[188], 32, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[188], 32, 0); for (j = t = i = 0; i < 8; i++, t++, j += 4) { - gDPLoadMultiTile(POLY_KAL_DISP++, gWorldMapImageTex, 0, G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 216, 128, 0, t * 9, 216 - 1, + gDPLoadMultiTile(POLY_OPA_DISP++, gWorldMapImageTex, 0, G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 216, 128, 0, t * 9, 216 - 1, (t + 1) * 9 - 1, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gDPSetTileSize(POLY_KAL_DISP++, G_TX_RENDERTILE, 0, 0, (216 - 1) << G_TEXTURE_IMAGE_FRAC, (9 - 1) << G_TEXTURE_IMAGE_FRAC); + gDPSetTileSize(POLY_OPA_DISP++, G_TX_RENDERTILE, 0, 0, (216 - 1) << G_TEXTURE_IMAGE_FRAC, (9 - 1) << G_TEXTURE_IMAGE_FRAC); - gSP1Quadrangle(POLY_KAL_DISP++, j, j + 2, j + 3, j + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[220], 28, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[220], 28, 0); for (j = i = 0; i < 6; i++, t++, j += 4) { - gDPLoadMultiTile(POLY_KAL_DISP++, gWorldMapImageTex, 0, G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 216, 128, + gDPLoadMultiTile(POLY_OPA_DISP++, gWorldMapImageTex, 0, G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 216, 128, 0, t * 9, 216 - 1, (t + 1) * 9 - 1, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gDPSetTileSize(POLY_KAL_DISP++, G_TX_RENDERTILE, 0, 0, (216 - 1) << G_TEXTURE_IMAGE_FRAC, + gDPSetTileSize(POLY_OPA_DISP++, G_TX_RENDERTILE, 0, 0, (216 - 1) << G_TEXTURE_IMAGE_FRAC, (9 - 1) << G_TEXTURE_IMAGE_FRAC); - gSP1Quadrangle(POLY_KAL_DISP++, j, j + 2, j + 3, j + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } - gDPLoadMultiTile(POLY_KAL_DISP++, gWorldMapImageTex, 0, G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 216, 128, 0, + gDPLoadMultiTile(POLY_OPA_DISP++, gWorldMapImageTex, 0, G_TX_RENDERTILE, G_IM_FMT_CI, G_IM_SIZ_8b, 216, 128, 0, t * 9, 216 - 1, (t * 9 + 2) - 1, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gDPSetTileSize(POLY_KAL_DISP++, G_TX_RENDERTILE, 0, 0, (216 - 1) << G_TEXTURE_IMAGE_FRAC, + gDPSetTileSize(POLY_OPA_DISP++, G_TX_RENDERTILE, 0, 0, (216 - 1) << G_TEXTURE_IMAGE_FRAC, (2 - 1) << G_TEXTURE_IMAGE_FRAC); - gSP1Quadrangle(POLY_KAL_DISP++, j, j + 2, j + 3, j + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } else if (HREG(15) == 1) { - Gfx* gfx = POLY_KAL_DISP; + Gfx* gfx = POLY_OPA_DISP; gSPLoadUcodeL(gfx++, ucode_s2dex); @@ -603,7 +603,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { gSPLoadUcode(gfx++, SysUcode_GetUCode()); - POLY_KAL_DISP = gfx; + POLY_OPA_DISP = gfx; } if (HREG(15) == 2) { @@ -613,33 +613,33 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { } if (ZREG(38) == 0) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_BILERP); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); Gfx_SetupDL_42Opa(gfxCtx); - gDPSetCombineLERP(POLY_KAL_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 235, 235, 235, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 235, 235, 235, pauseCtx->alpha); for (k = 0; k < 15; k += 8) { - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[60 + k * 4], 32, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60 + k * 4], 32, 0); for (j = i = 0; i < 8; i++, j += 4) { if (!(gSaveContext.worldMapAreaData & gBitFlags[cloudFlagNums[k + i]])) { - gDPLoadTextureBlock_4b(POLY_KAL_DISP++, cloudTexs[k + i], G_IM_FMT_I, D_8082AAEC[k + i], + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, cloudTexs[k + i], G_IM_FMT_I, D_8082AAEC[k + i], D_8082AB2C[k + i], 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, j, j + 2, j + 3, j + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } } } } if (gSaveContext.worldMapArea < 22) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_POINT); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_POINT); pauseCtx->mapPageVtx[172].v.ob[0] = pauseCtx->mapPageVtx[174].v.ob[0] = areaBoxPosX[((void)0, gSaveContext.worldMapArea)]; @@ -659,20 +659,20 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { pauseCtx->mapPageVtx[174].v.tc[1] = pauseCtx->mapPageVtx[175].v.tc[1] = areaBoxHeights[((void)0, gSaveContext.worldMapArea)] << 5; - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[172], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[172], 4, 0); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 255, 255, pauseCtx->alpha); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 255, 255, pauseCtx->alpha); - gDPLoadTextureBlock_4b(POLY_KAL_DISP++, areaBoxTexs[((void)0, (gSaveContext.worldMapArea))], G_IM_FMT_IA, + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, areaBoxTexs[((void)0, (gSaveContext.worldMapArea))], G_IM_FMT_IA, areaBoxWidths[((void)0, (gSaveContext.worldMapArea))], areaBoxHeights[((void)0, (gSaveContext.worldMapArea))], 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_BILERP); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); } stepR = ABS(pointPulsePrimColor[0] - pointPrimColors[pointPulseStage][0]) / pointPulseTimer; @@ -727,29 +727,29 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { Gfx_SetupDL_42Opa(gfxCtx); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPLoadTextureBlock(POLY_KAL_DISP++, gWorldMapDotTex, G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0, G_TX_WRAP | G_TX_NOMIRROR, + gDPLoadTextureBlock(POLY_OPA_DISP++, gWorldMapDotTex, G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); for (j = t = i = 0; i < 12; i++, t++, j += 4) { if (pauseCtx->worldMapPoints[i] != 0) { - gDPPipeSync(POLY_KAL_DISP++); + gDPPipeSync(POLY_OPA_DISP++); if (pauseCtx->worldMapPoints[i] == 1) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, pointPrimColors[0][0], pointPrimColors[0][1], + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, pointPrimColors[0][0], pointPrimColors[0][1], pointPrimColors[0][2], pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, pointEnvColors[0][0], pointEnvColors[0][1], pointEnvColors[0][2], 0); + gDPSetEnvColor(POLY_OPA_DISP++, pointEnvColors[0][0], pointEnvColors[0][1], pointEnvColors[0][2], 0); } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, pointPulsePrimColor[0], pointPulsePrimColor[1], + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, pointPulsePrimColor[0], pointPulsePrimColor[1], pointPulsePrimColor[2], pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, pointPulseEnvColor[0], pointPulseEnvColor[1], pointPulseEnvColor[2], 0); + gDPSetEnvColor(POLY_OPA_DISP++, pointPulseEnvColor[0], pointPulseEnvColor[1], pointPulseEnvColor[2], 0); } - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[124 + i * 4], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[124 + i * 4], 4, 0); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } } @@ -768,47 +768,47 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { } } - gSPVertex(POLY_KAL_DISP++, &pauseCtx->mapPageVtx[176], 16, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[176], 16, 0); if (pauseCtx->tradeQuestLocation != 0xFF) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, pointPulsePrimColor[0], 0, pauseCtx->alpha); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, pointPulsePrimColor[0], 0, pauseCtx->alpha); - gDPLoadTextureBlock(POLY_KAL_DISP++, gWorldMapArrowTex, G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, gWorldMapArrowTex, G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); } if (gSaveContext.worldMapArea < 22) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 150, 255, 255, pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 150, 255, 255, pauseCtx->alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, pauseCtx->nameSegment + 0x400, 80, 32, 4); + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, pauseCtx->nameSegment + 0x400, 80, 32, 4); } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineLERP(POLY_KAL_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 0, 0, 0, pauseCtx->alpha); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, pauseCtx->alpha); - gDPLoadTextureBlock_4b(POLY_KAL_DISP++, currentPosTitleTexs[gSaveContext.language], G_IM_FMT_I, 64, 8, 0, + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, currentPosTitleTexs[gSaveContext.language], G_IM_FMT_I, 64, 8, 0, G_TX_WRAP | mirrorMode, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 8, 10, 11, 9, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 8, 10, 11, 9, 0); - gDPPipeSync(POLY_KAL_DISP++); + gDPPipeSync(POLY_OPA_DISP++); if (mirroredWorld) { // Revert the inversion - gSPClearExtraGeometryMode(POLY_KAL_DISP++, G_EX_INVERT_CULLING); + gSPClearExtraGeometryMode(POLY_OPA_DISP++, G_EX_INVERT_CULLING); } CLOSE_DISPS(gfxCtx); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c index 97ac28ca4..f6dab7003 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c @@ -997,10 +997,10 @@ void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, u16 specialPos) { void KaleidoScope_DrawQuadTextureRGBA32(GraphicsContext* gfxCtx, void* texture, u16 width, u16 height, u16 point) { OPEN_DISPS(gfxCtx); - gDPLoadTextureBlock(POLY_KAL_DISP++, texture, G_IM_FMT_RGBA, G_IM_SIZ_32b, width, height, 0, + gDPLoadTextureBlock(POLY_OPA_DISP++, texture, G_IM_FMT_RGBA, G_IM_SIZ_32b, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, point, point + 2, point + 3, point + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, point, point + 2, point + 3, point + 1, 0); CLOSE_DISPS(gfxCtx); } @@ -1147,25 +1147,25 @@ void KaleidoScope_DrawCursor(PlayState* play, u16 pageIndex) { s16 i; s16 j; - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, sCursorColors[pauseCtx->cursorColorSet >> 2].r, + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, sCursorColors[pauseCtx->cursorColorSet >> 2].r, sCursorColors[pauseCtx->cursorColorSet >> 2].g, sCursorColors[pauseCtx->cursorColorSet >> 2].b, 255); - gDPSetEnvColor(POLY_KAL_DISP++, D_8082AB8C, D_8082AB90, D_8082AB94, 255); - gSPVertex(POLY_KAL_DISP++, pauseCtx->cursorVtx, 16, 0); + gDPSetEnvColor(POLY_OPA_DISP++, D_8082AB8C, D_8082AB90, D_8082AB94, 255); + gSPVertex(POLY_OPA_DISP++, pauseCtx->cursorVtx, 16, 0); for (i = j = 0; i < 4; i++, j += 4) { - gDPLoadTextureBlock_4b(POLY_KAL_DISP++, sCursorTexs[i], G_IM_FMT_IA, 16, 16, 0, + gDPLoadTextureBlock_4b(POLY_OPA_DISP++, sCursorTexs[i], G_IM_FMT_IA, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, j, j + 2, j + 3, j + 1, 0); + gSP1Quadrangle(POLY_OPA_DISP++, j, j + 2, j + 3, j + 1, 0); } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 255); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); } CLOSE_DISPS(play->state.gfxCtx); @@ -1381,78 +1381,78 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(-pauseCtx->unk_1F4 / 100.0f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->itemPageVtx, + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, sSelectItemTexs[gSaveContext.language]); KaleidoScope_DrawItemSelect(play); } if (pauseCtx->pageIndex != PAUSE_EQUIP) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); Matrix_Translate(-(f32)WREG(3) / 100.0f, (f32)WREG(2) / 100.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateZ(pauseCtx->unk_1F8 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(1.57f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->equipPageVtx, + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->equipPageVtx, sEquipmentTexs[gSaveContext.language]); KaleidoScope_DrawEquipment(play); } if (pauseCtx->pageIndex != PAUSE_QUEST) { - gDPPipeSync(POLY_KAL_DISP++); - gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_BILERP); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); Matrix_Translate(0.0f, (f32)WREG(2) / 100.0f, (f32)WREG(3) / 100.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(pauseCtx->unk_200 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(3.14f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (pauseCtx->randoQuestMode) { - POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->saveVtx, + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sSaveTexs[gSaveContext.language]); RandoKaleido_DrawMiscCollectibles(play); } else { - POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->questPageVtx, + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx, sQuestStatusTexs[gSaveContext.language]); KaleidoScope_DrawQuestStatus(play, gfxCtx); } } if (pauseCtx->pageIndex != PAUSE_MAP) { - gDPPipeSync(POLY_KAL_DISP++); + gDPPipeSync(POLY_OPA_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); Matrix_Translate((f32)WREG(3) / 100.0f, (f32)WREG(2) / 100.0f, 0.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateZ(-pauseCtx->unk_1FC / 100.0f, MTXMODE_APPLY); Matrix_RotateY(-1.57f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_KAL_DISP = - KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]); + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]); if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(play, gfxCtx); Gfx_SetupDL_42Opa(gfxCtx); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if (CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, gSaveContext.mapIndex)) { PauseMapMark_Draw(play); @@ -1462,8 +1462,8 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); switch (pauseCtx->pageIndex) { case PAUSE_ITEM: @@ -1471,10 +1471,10 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(-pauseCtx->unk_1F4 / 100.0f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->itemPageVtx, + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->itemPageVtx, sSelectItemTexs[gSaveContext.language]); KaleidoScope_DrawItemSelect(play); @@ -1486,17 +1486,17 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateZ(-pauseCtx->unk_1FC / 100.0f, MTXMODE_APPLY); Matrix_RotateY(-1.57f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_KAL_DISP = - KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]); + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->mapPageVtx, sMapTexs[gSaveContext.language]); if (sInDungeonScene) { KaleidoScope_DrawDungeonMap(play, gfxCtx); Gfx_SetupDL_42Opa(gfxCtx); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); if (pauseCtx->cursorSpecialPos == 0) { KaleidoScope_DrawCursor(play, PAUSE_MAP); @@ -1511,22 +1511,22 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { break; case PAUSE_QUEST: - gDPSetTextureFilter(POLY_KAL_DISP++, G_TF_BILERP); + gDPSetTextureFilter(POLY_OPA_DISP++, G_TF_BILERP); Matrix_Translate(0.0f, (f32)WREG(2) / 100.0f, (f32)WREG(3) / 100.0f, MTXMODE_NEW); Matrix_Scale(0.78f, 0.78f, 0.78f, MTXMODE_APPLY); Matrix_RotateX(pauseCtx->unk_200 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(3.14f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if (pauseCtx->randoQuestMode) { - POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->saveVtx, + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sSaveTexs[gSaveContext.language]); RandoKaleido_DrawMiscCollectibles(play); } else { - POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->questPageVtx, + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->questPageVtx, sQuestStatusTexs[gSaveContext.language]); KaleidoScope_DrawQuestStatus(play, gfxCtx); } @@ -1542,10 +1542,10 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateZ(pauseCtx->unk_1F8 / 100.0f, MTXMODE_APPLY); Matrix_RotateY(1.57f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->equipPageVtx, + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->equipPageVtx, sEquipmentTexs[gSaveContext.language]); KaleidoScope_DrawEquipment(play); @@ -1562,7 +1562,7 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { if ((pauseCtx->state == 7) || ((pauseCtx->state >= 8) && (pauseCtx->state < 0x12))) { KaleidoScope_UpdatePrompt(play); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); if (!pauseCtx->pageIndex) { // pageIndex == PAUSE_ITEM pauseCtx->unk_1F4 = pauseCtx->unk_204 + 314.0f; @@ -1593,81 +1593,81 @@ void KaleidoScope_DrawPages(PlayState* play, GraphicsContext* gfxCtx) { Matrix_RotateY(1.57f, MTXMODE_APPLY); } - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); if ((pauseCtx->state >= 8) && (pauseCtx->state <= 0x11)) { - POLY_KAL_DISP = KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->saveVtx, sGameOverTexs); + POLY_OPA_DISP = KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sGameOverTexs); } else { - POLY_KAL_DISP = - KaleidoScope_DrawPageSections(POLY_KAL_DISP, pauseCtx->saveVtx, sSaveTexs[gSaveContext.language]); + POLY_OPA_DISP = + KaleidoScope_DrawPageSections(POLY_OPA_DISP, pauseCtx->saveVtx, sSaveTexs[gSaveContext.language]); } - gSPVertex(POLY_KAL_DISP++, &pauseCtx->saveVtx[60], 32, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->saveVtx[60], 32, 0); if (((pauseCtx->state == 7) && (pauseCtx->unk_1EC < 4)) || (pauseCtx->state == 0xE)) { - POLY_KAL_DISP = - KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sSavePromptTexs[gSaveContext.language], 152, 16, 0); + POLY_OPA_DISP = + KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sSavePromptTexs[gSaveContext.language], 152, 16, 0); - gDPSetCombineLERP(POLY_KAL_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, VREG(61)); //Save prompt cursor colour + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, VREG(61)); //Save prompt cursor colour if (pauseCtx->promptChoice == 0) { - gSPDisplayList(POLY_KAL_DISP++, gPromptCursorLeftDL); + gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL); } else { - gSPDisplayList(POLY_KAL_DISP++, gPromptCursorRightDL); + gSPDisplayList(POLY_OPA_DISP++, gPromptCursorRightDL); } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - POLY_KAL_DISP = - KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48, 16, 12); + POLY_OPA_DISP = + KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48, 16, 12); - POLY_KAL_DISP = - KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48, 16, 16); + POLY_OPA_DISP = + KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48, 16, 16); } else if (((pauseCtx->state == 7 && pauseCtx->unk_1EC >= 4) || pauseCtx->state == 0xF) && !CVarGetInteger(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 0)) { - POLY_KAL_DISP = - KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sSaveConfirmationTexs[gSaveContext.language], 152, 16, 0); + POLY_OPA_DISP = + KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sSaveConfirmationTexs[gSaveContext.language], 152, 16, 0); } else if ((pauseCtx->state != 7) || (pauseCtx->unk_1EC < 4)) { if ((pauseCtx->state != 0xF) && ((pauseCtx->state == 0x10) || (pauseCtx->state == 0x11))) { - POLY_KAL_DISP = - KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sContinuePromptTexs[gSaveContext.language], 152, 16, 0); + POLY_OPA_DISP = + KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sContinuePromptTexs[gSaveContext.language], 152, 16, 0); - gDPSetCombineLERP(POLY_KAL_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, + gDPSetCombineLERP(POLY_OPA_DISP++, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0, 1, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, VREG(61)); //Continue prompt cursor colour + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, VREG(61)); //Continue prompt cursor colour if (pauseCtx->promptChoice == 0) { - gSPDisplayList(POLY_KAL_DISP++, gPromptCursorLeftDL); + gSPDisplayList(POLY_OPA_DISP++, gPromptCursorLeftDL); } else { - gSPDisplayList(POLY_KAL_DISP++, gPromptCursorRightDL); + gSPDisplayList(POLY_OPA_DISP++, gPromptCursorRightDL); } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA, G_CC_MODULATEIA); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - if (GameInteractor_Should(VB_RENDER_YES_ON_CONTINUE_PROMPT, true, &POLY_KAL_DISP)) { - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8( - POLY_KAL_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48, 16, 12); + if (GameInteractor_Should(VB_RENDER_YES_ON_CONTINUE_PROMPT, true, &POLY_OPA_DISP)) { + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8( + POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][0], 48, 16, 12); } - POLY_KAL_DISP = - KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48, 16, 16); + POLY_OPA_DISP = + KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPromptChoiceTexs[gSaveContext.language][1], 48, 16, 16); } } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); if ((pauseCtx->state != 0x10) && (pauseCtx->state != 0x11)) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 0, pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 0, pauseCtx->alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); } } @@ -1882,49 +1882,49 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[10].v.tc[1] = pauseCtx->infoPanelVtx[11].v.tc[1] = pauseCtx->infoPanelVtx[14].v.tc[1] = pauseCtx->infoPanelVtx[15].v.tc[1] = 0x400; - gDPSetCombineMode(POLY_KAL_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); Matrix_Translate(0.0f, 0.0f, -144.0f, MTXMODE_NEW); Matrix_Scale(1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); const Color_RGBA8 namePanelColor = CVarGetColor(CVAR_COSMETIC("Kaleido.NamePanel.Value"), (Color_RGBA8){90,100,130,255}); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, namePanelColor.r, namePanelColor.g, namePanelColor.b, namePanelColor.a); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, namePanelColor.r, namePanelColor.g, namePanelColor.b, namePanelColor.a); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[0], 16, 0); - gSPDisplayList(POLY_KAL_DISP++, gItemNamePanelDL); + gSPDisplayList(POLY_OPA_DISP++, gItemNamePanelDL); if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) == 0) { // Restore the misplace gDPSetPrimColor - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 90, 100, 130, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 90, 100, 130, 255); } if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) && (pauseCtx->unk_1E4 == 0)) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6); } else { if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) != 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 180, 210, 255, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 255); } } - gSPDisplayList(POLY_KAL_DISP++, gLButtonIconDL); + gSPDisplayList(POLY_OPA_DISP++, gLButtonIconDL); if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) == 0) { //Restore the misplace gDPSetPrimColor - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 180, 210, 255, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 255); } if ((pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) && (pauseCtx->unk_1E4 == 0)) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, D_808321A0, D_808321A2, D_808321A4, D_808321A6); } else { if (CVarGetInteger(CVAR_ENHANCEMENT("FixMenuLR"), 0) != 0) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 180, 210, 255, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 180, 210, 255, 255); } } - gSPDisplayList(POLY_KAL_DISP++, gRButtonIconDL); + gSPDisplayList(POLY_OPA_DISP++, gRButtonIconDL); if (pauseCtx->cursorSpecialPos != 0) { j = (pauseCtx->cursorSpecialPos * 4) - 32; @@ -1941,10 +1941,10 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[18].v.tc[1] = pauseCtx->infoPanelVtx[19].v.tc[1] = 0x200; - gDPPipeSync(POLY_KAL_DISP++); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, + gDPPipeSync(POLY_OPA_DISP++); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPSetEnvColor(POLY_KAL_DISP++, 20, 30, 40, 0); + gDPSetEnvColor(POLY_OPA_DISP++, 20, 30, 40, 0); if ((pauseCtx->state == 6) && (pauseCtx->namedItem != PAUSE_ITEM_NONE) && (pauseCtx->nameDisplayTimer < WREG(89)) && (!pauseCtx->unk_1E4 || (pauseCtx->unk_1E4 == 2) || ((pauseCtx->unk_1E4 >= 4) && (pauseCtx->unk_1E4 <= 7)) || @@ -1959,15 +1959,15 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 0x1000; - gSPVertex(POLY_KAL_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 4, 0); if (pauseCtx->nameColorSet == 1) { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 70, 70, 70, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 70, 70, 70, 255); } else { - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); } - POLY_KAL_DISP = KaleidoScope_QuadTextureIA4(POLY_KAL_DISP, pauseCtx->nameSegment, 128, 16, 0); + POLY_OPA_DISP = KaleidoScope_QuadTextureIA4(POLY_OPA_DISP, pauseCtx->nameSegment, 128, 16, 0); } if (pauseCtx->pageIndex == PAUSE_MAP && CVarGetInteger(CVAR_DEVELOPER_TOOLS("SkulltulaDebugEnabled"), 0) != 0) { @@ -1999,13 +1999,13 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[25].v.tc[0] = pauseCtx->infoPanelVtx[27].v.tc[0] = 0x300; - gDPPipeSync(POLY_KAL_DISP++); - gSPVertex(POLY_KAL_DISP++, &pauseCtx->infoPanelVtx[24], 4, 0); + gDPPipeSync(POLY_OPA_DISP++); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[24], 4, 0); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gQuestIconGoldSkulltulaTex, 24, 24, 0); } @@ -2018,7 +2018,7 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[22].v.tc[1] = pauseCtx->infoPanelVtx[23].v.tc[1] = 0x200; - gSPVertex(POLY_KAL_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0); + gSPVertex(POLY_OPA_DISP++, &pauseCtx->infoPanelVtx[16], 8, 0); if (pauseCtx->state == 7) { pauseCtx->infoPanelVtx[16].v.ob[0] = pauseCtx->infoPanelVtx[18].v.ob[0] = WREG(61 + gSaveContext.language); @@ -2036,15 +2036,15 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADE0[gSaveContext.language] << 5; - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, 255); - //gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL);//This is changed to load the texture only so we can prim color it. - gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, 255); + //gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL);//This is changed to load the texture only so we can prim color it. + gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sToDecideTextures[gSaveContext.language], + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sToDecideTextures[gSaveContext.language], D_8082ADE0[gSaveContext.language], 16, 4); } else if (pauseCtx->cursorSpecialPos != 0) { if ((pauseCtx->state == 6) && (pauseCtx->unk_1E4 == 0)) { @@ -2055,15 +2055,15 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[17].v.tc[0] = pauseCtx->infoPanelVtx[19].v.tc[0] = 0x1000; - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 200, 0, 255); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 200, 0, 255); if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8( - POLY_KAL_DISP, D_8082AD78[pauseCtx->pageIndex][gSaveContext.language], 128, 16, 0); + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8( + POLY_OPA_DISP, D_8082AD78[pauseCtx->pageIndex][gSaveContext.language], 128, 16, 0); } else { - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8( - POLY_KAL_DISP, D_8082ADA8[pauseCtx->pageIndex][gSaveContext.language], 128, 16, 0); + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8( + POLY_OPA_DISP, D_8082ADA8[pauseCtx->pageIndex][gSaveContext.language], 128, 16, 0); } } } else { @@ -2106,25 +2106,25 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { int width_crop = icon_w_crop * 1.0f; //Adjust Width with scale int height_factor = (1 << 10) * icon_h / height; int width_factor = (1 << 10) * icon_w / width; - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cButtonsColor.r, cButtonsColor.g, cButtonsColor.b, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cButtonsColor.r, cButtonsColor.g, cButtonsColor.b, 255); for (s16 i=0; i < 3; i++) { if (i == 0) { icon_x_offset = width_crop*3-3; - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, 255); } else if (i == 1) { icon_x_offset = width_crop*2-3; - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, 255); } else if (i == 2) { icon_x_offset = width_crop; - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, 255); } - gDPLoadTextureBlock(POLY_KAL_DISP++, gCBtnSymbolsTex, G_IM_FMT_IA, G_IM_SIZ_8b, icon_w, icon_h, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - //gSPScisTextureRectangle(POLY_KAL_DISP++,PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, (PosY + height) << 2, G_TX_RENDERTILE, 0, 0, width_factor, height_factor); - gSPWideTextureRectangle(POLY_KAL_DISP++, PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, (PosY + height) << 2, G_TX_WRAP, 0, 0, width_factor, height_factor); + gDPLoadTextureBlock(POLY_OPA_DISP++, gCBtnSymbolsTex, G_IM_FMT_IA, G_IM_SIZ_8b, icon_w, icon_h, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + //gSPScisTextureRectangle(POLY_OPA_DISP++,PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, (PosY + height) << 2, G_TX_RENDERTILE, 0, 0, width_factor, height_factor); + gSPWideTextureRectangle(POLY_OPA_DISP++, PosX << 2, PosY << 2, (PosX + icon_x_offset) << 2, (PosY + height) << 2, G_TX_WRAP, 0, 0, width_factor, height_factor); } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sToEquipTextures[gSaveContext.language], + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sToEquipTextures[gSaveContext.language], D_8082ADD8[gSaveContext.language], 16, 4); } else if ((pauseCtx->pageIndex == PAUSE_MAP) && sInDungeonScene) { @@ -2153,15 +2153,15 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { pauseCtx->infoPanelVtx[21].v.tc[0] = pauseCtx->infoPanelVtx[23].v.tc[0] = D_8082ADE8[gSaveContext.language] << 5; - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, 255); - //gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL); - gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, 255); + //gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sPlayMelodyTextures[gSaveContext.language], + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sPlayMelodyTextures[gSaveContext.language], D_8082ADE8[gSaveContext.language], 16, 4); } } else if (pauseCtx->pageIndex == PAUSE_EQUIP) { @@ -2186,15 +2186,15 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { return; } - //gSPDisplayList(POLY_KAL_DISP++, gAButtonIconDL); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, 255); - gDPLoadTextureBlock(POLY_KAL_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); - gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0); + //gSPDisplayList(POLY_OPA_DISP++, gAButtonIconDL); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, aButtonColor.r, aButtonColor.g, aButtonColor.b, 255); + gDPLoadTextureBlock(POLY_OPA_DISP++, gABtnSymbolTex, G_IM_FMT_IA, G_IM_SIZ_8b, 24, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 4, 4, G_TX_NOLOD, G_TX_NOLOD); + gSP1Quadrangle(POLY_OPA_DISP++, 0, 2, 3, 1, 0); - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); - POLY_KAL_DISP = KaleidoScope_QuadTextureIA8(POLY_KAL_DISP, sToEquipTextures[gSaveContext.language], + POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, sToEquipTextures[gSaveContext.language], D_8082ADD8[gSaveContext.language], 16, 4); } } @@ -3188,39 +3188,39 @@ void KaleidoScope_DrawGameOver(PlayState* play) { Gfx_SetupDL_39Opa(gfxCtx); - gDPSetCycleType(POLY_KAL_DISP++, G_CYC_2CYCLE); - gDPSetRenderMode(POLY_KAL_DISP++, G_RM_PASS, G_RM_XLU_SURF2); - gDPSetCombineLERP(POLY_KAL_DISP++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, TEXEL0, PRIMITIVE, ENVIRONMENT, + gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE); + gDPSetRenderMode(POLY_OPA_DISP++, G_RM_PASS, G_RM_XLU_SURF2); + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, 0, 0, 0, TEXEL0, PRIMITIVE, ENVIRONMENT, COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 80, D_8082AB8C, D_8082AB90, D_8082AB94, D_8082AB98); - gDPSetEnvColor(POLY_KAL_DISP++, D_8082AB9C, D_8082ABA0, D_8082ABA4, 255); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 80, D_8082AB8C, D_8082AB90, D_8082AB94, D_8082AB98); + gDPSetEnvColor(POLY_OPA_DISP++, D_8082AB9C, D_8082ABA0, D_8082ABA4, 255); VREG(89) -= 2; - gDPLoadMultiBlock(POLY_KAL_DISP++, gGameOverP1Tex, 0, 0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, + gDPLoadMultiBlock(POLY_OPA_DISP++, gGameOverP1Tex, 0, 0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gDPLoadMultiBlock(POLY_KAL_DISP++, gGameOverMaskTex, 256, 1, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, + gDPLoadMultiBlock(POLY_OPA_DISP++, gGameOverMaskTex, 256, 1, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, 5, G_TX_NOLOD, G_TX_NOLOD); - gDPSetTileSize(POLY_KAL_DISP++, 1, 0, VREG(89) & 0x7F, 252, (VREG(89) & 0x7F) + 0x7C); + gDPSetTileSize(POLY_OPA_DISP++, 1, 0, VREG(89) & 0x7F, 252, (VREG(89) & 0x7F) + 0x7C); - gSPTextureRectangle(POLY_KAL_DISP++, VREG(87) << 2, VREG(88) << 2, (VREG(87) + 64) << 2, (VREG(88) + 32) << 2, + gSPTextureRectangle(POLY_OPA_DISP++, VREG(87) << 2, VREG(88) << 2, (VREG(87) + 64) << 2, (VREG(88) + 32) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); - gDPLoadMultiBlock(POLY_KAL_DISP++, gGameOverP2Tex, 0, 0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, + gDPLoadMultiBlock(POLY_OPA_DISP++, gGameOverP2Tex, 0, 0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(POLY_KAL_DISP++, (VREG(87) + 64) << 2, VREG(88) << 2, (VREG(87) + 128) << 2, + gSPTextureRectangle(POLY_OPA_DISP++, (VREG(87) + 64) << 2, VREG(88) << 2, (VREG(87) + 128) << 2, (VREG(88) + 32) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); - gDPLoadMultiBlock(POLY_KAL_DISP++, gGameOverP3Tex, 0, 0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, + gDPLoadMultiBlock(POLY_OPA_DISP++, gGameOverP3Tex, 0, 0, G_IM_FMT_IA, G_IM_SIZ_8b, 64, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(POLY_KAL_DISP++, (VREG(87) + 128) << 2, VREG(88) << 2, (VREG(87) + 192) << 2, + gSPTextureRectangle(POLY_OPA_DISP++, (VREG(87) + 128) << 2, VREG(88) << 2, (VREG(87) + 192) << 2, (VREG(88) + 32) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); CLOSE_DISPS(gfxCtx); @@ -3236,24 +3236,24 @@ void KaleidoScope_Draw(PlayState* play) { pauseCtx->stickRelX = input->rel.stick_x; pauseCtx->stickRelY = input->rel.stick_y; - //gSPSegment(POLY_KAL_DISP++, 0x02, interfaceCtx->parameterSegment); - gSPSegment(POLY_KAL_DISP++, 0x07, pauseCtx->playerSegment); - //gSPSegment(POLY_KAL_DISP++, 0x08, pauseCtx->iconItemSegment); - //gSPSegment(POLY_KAL_DISP++, 0x09, pauseCtx->iconItem24Segment); - gSPSegment(POLY_KAL_DISP++, 0x0A, pauseCtx->nameSegment); - //gSPSegment(POLY_KAL_DISP++, 0x0C, pauseCtx->iconItemAltSegment); - //gSPSegment(POLY_KAL_DISP++, 0x0D, pauseCtx->iconItemLangSegment); + //gSPSegment(POLY_OPA_DISP++, 0x02, interfaceCtx->parameterSegment); + gSPSegment(POLY_OPA_DISP++, 0x07, pauseCtx->playerSegment); + //gSPSegment(POLY_OPA_DISP++, 0x08, pauseCtx->iconItemSegment); + //gSPSegment(POLY_OPA_DISP++, 0x09, pauseCtx->iconItem24Segment); + gSPSegment(POLY_OPA_DISP++, 0x0A, pauseCtx->nameSegment); + //gSPSegment(POLY_OPA_DISP++, 0x0C, pauseCtx->iconItemAltSegment); + //gSPSegment(POLY_OPA_DISP++, 0x0D, pauseCtx->iconItemLangSegment); if (pauseCtx->debugState == 0) { KaleidoScope_SetView(pauseCtx, pauseCtx->eye.x, pauseCtx->eye.y, pauseCtx->eye.z); - Gfx_SetupDL_42Kal(play->state.gfxCtx); + Gfx_SetupDL_42Opa(play->state.gfxCtx); KaleidoScope_InitVertices(play, play->state.gfxCtx); KaleidoScope_DrawPages(play, play->state.gfxCtx); - Gfx_SetupDL_42Kal(play->state.gfxCtx); - gDPSetCombineLERP(POLY_KAL_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, + Gfx_SetupDL_42Opa(play->state.gfxCtx); + gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); KaleidoScope_SetView(pauseCtx, 0.0f, 0.0f, 64.0f); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_lmap_mark.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_lmap_mark.c index d4b3da6a9..15df2d77e 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_lmap_mark.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_lmap_mark.c @@ -90,9 +90,9 @@ void PauseMapMark_DrawForDungeon(PlayState* play) { Matrix_Translate(-36.0f, 21.0f, 0.0f, MTXMODE_APPLY); } - gDPPipeSync(POLY_KAL_DISP++); - gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, 255); - gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 255); + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); markPoint = &mapMarkData->points[0]; for (i = 0; i < mapMarkData->count; i++) { @@ -125,8 +125,8 @@ void PauseMapMark_DrawForDungeon(PlayState* play) { if (display) { markInfo = &sMapMarkInfoTable[mapMarkData->markType]; - gDPPipeSync(POLY_KAL_DISP++); - gDPLoadTextureBlock(POLY_KAL_DISP++, markInfo->texture, markInfo->imageFormat, G_IM_SIZ_MARK, + gDPPipeSync(POLY_OPA_DISP++); + gDPLoadTextureBlock(POLY_OPA_DISP++, markInfo->texture, markInfo->imageFormat, G_IM_SIZ_MARK, markInfo->textureWidth, markInfo->textureHeight, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); @@ -136,12 +136,12 @@ void PauseMapMark_DrawForDungeon(PlayState* play) { Matrix_Push(); Matrix_Translate(GREG(92) + markPoint->x + mirrorOffset, GREG(93) + markPoint->y, 0.0f, MTXMODE_APPLY); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); - gSPMatrix(POLY_KAL_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), + gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Matrix_Pop(); - gSPVertex(POLY_KAL_DISP++, mapMarkData->vtx, mapMarkData->vtxCount, 0); - gSP1Quadrangle(POLY_KAL_DISP++, 1, 3, 2, 0, 0); + gSPVertex(POLY_OPA_DISP++, mapMarkData->vtx, mapMarkData->vtxCount, 0); + gSP1Quadrangle(POLY_OPA_DISP++, 1, 3, 2, 0, 0); } markPoint++; From 266792599ed3a30ede2111ab9621100b42e8dd53 Mon Sep 17 00:00:00 2001 From: Archez Date: Wed, 12 Feb 2025 15:32:28 -0500 Subject: [PATCH 42/68] Add hilite setup calls around all custom GI draws (#5043) --- soh/soh/Enhancements/randomizer/ShuffleFairies.cpp | 4 +++- soh/soh/Enhancements/randomizer/fishsanity.cpp | 2 ++ soh/soh/Enhancements/randomizer/hook_handlers.cpp | 5 +++++ soh/src/code/z_en_item00.c | 6 ++++++ soh/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c | 3 +++ soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c | 3 +++ soh/src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 3 +++ 7 files changed, 25 insertions(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp b/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp index c8f044bd8..d771c58f3 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp @@ -18,6 +18,8 @@ void ShuffleFairies_DrawRandomizedItem(EnElf* enElf, PlayState* play) { } Matrix_Push(); Matrix_Scale(37.5, 37.5, 37.5, MTXMODE_APPLY); + func_8002EBCC(&enElf->actor, play, 0); + func_8002ED80(&enElf->actor, play, 0); EnItem00_CustomItemsParticles(&enElf->actor, play, randoGetItem); GetItemEntry_Draw(play, randoGetItem); Matrix_Pop(); @@ -404,4 +406,4 @@ void Rando::StaticData::RegisterFairyLocations() { locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -1458), "MQ Basement Sun's Song Fairy", "MQ Basement Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY)); } -static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFairyLocations); \ No newline at end of file +static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFairyLocations); diff --git a/soh/soh/Enhancements/randomizer/fishsanity.cpp b/soh/soh/Enhancements/randomizer/fishsanity.cpp index b44e21fc1..f07546de9 100644 --- a/soh/soh/Enhancements/randomizer/fishsanity.cpp +++ b/soh/soh/Enhancements/randomizer/fishsanity.cpp @@ -548,6 +548,8 @@ extern "C" { Matrix_Push(); Matrix_Scale(30.0, 30.0, 30.0, MTXMODE_APPLY); + func_8002EBCC(actor, play, 0); + func_8002ED80(actor, play, 0); EnItem00_CustomItemsParticles(actor, play, randoItem); GetItemEntry_Draw(play, randoItem); diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index a9e1947fd..cba64059a 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -381,6 +381,7 @@ void EnExItem_DrawRandomizedItem(EnExItem* enExItem, PlayState* play) { if (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0)) { randoGetItem = GET_ITEM_MYSTERY; } + func_8002EBCC(&enExItem->actor, play, 0); func_8002ED80(&enExItem->actor, play, 0); EnItem00_CustomItemsParticles(&enExItem->actor, play, randoGetItem); GetItemEntry_Draw(play, randoGetItem); @@ -412,6 +413,8 @@ void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play) { enItem00->actor.params != ITEM00_SOH_GIVE_ITEM_ENTRY) { randoItem = GET_ITEM_MYSTERY; } + func_8002EBCC(&enItem00->actor, play, 0); + func_8002ED80(&enItem00->actor, play, 0); EnItem00_CustomItemsParticles(&enItem00->actor, play, randoItem); GetItemEntry_Draw(play, randoItem); } @@ -421,6 +424,8 @@ void ItemBHeart_DrawRandomizedItem(ItemBHeart* itemBHeart, PlayState* play) { if (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0)) { randoItem = GET_ITEM_MYSTERY; } + func_8002EBCC(&itemBHeart->actor, play, 0); + func_8002ED80(&itemBHeart->actor, play, 0); EnItem00_CustomItemsParticles(&itemBHeart->actor, play, randoItem); GetItemEntry_Draw(play, randoItem); } diff --git a/soh/src/code/z_en_item00.c b/soh/src/code/z_en_item00.c index ecdf89316..9a9c60bfa 100644 --- a/soh/src/code/z_en_item00.c +++ b/soh/src/code/z_en_item00.c @@ -997,6 +997,12 @@ void EnItem00_Draw(Actor* thisx, PlayState* play) { EnItem00* this = (EnItem00*)thisx; f32 mtxScale; + // Setup Hilites for 3D drops + if (CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0)) { + func_8002EBCC(&this->actor, play, 0); + func_8002ED80(&this->actor, play, 0); + } + if (!(this->unk_156 & this->unk_158)) { switch (this->actor.params) { case ITEM00_RUPEE_GREEN: diff --git a/soh/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c b/soh/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c index a97d67612..6e6413651 100644 --- a/soh/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c +++ b/soh/src/overlays/actors/ovl_En_Ex_Ruppy/z_en_ex_ruppy.c @@ -389,6 +389,9 @@ void EnExRuppy_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0)) { + func_8002EBCC(&this->actor, play, 0); + func_8002ED80(&this->actor, play, 0); + // purple/gold rupees need less scaling f32 mtxScale = this->colorIdx >= 3 ? 17.5f : 25.0f; Matrix_Scale(mtxScale, mtxScale, mtxScale, MTXMODE_APPLY); diff --git a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c index c38b83560..15a5ba19e 100644 --- a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c +++ b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c @@ -481,6 +481,9 @@ void EnGSwitch_DrawRupee(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); if (CVarGetInteger(CVAR_ENHANCEMENT("NewDrops"), 0)) { + func_8002EBCC(&this->actor, play, 0); + func_8002ED80(&this->actor, play, 0); + // purple/gold/silver rupees need less scaling f32 mtxScale = this->colorIdx >= 3 ? 17.5f : 25.0f; Matrix_Scale(mtxScale, mtxScale, mtxScale, MTXMODE_APPLY); diff --git a/soh/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/soh/src/overlays/actors/ovl_En_GirlA/z_en_girla.c index 611fbab18..f66201e55 100644 --- a/soh/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/soh/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -1428,6 +1428,9 @@ void EnGirlA_Draw(Actor* thisx, PlayState* play) { } if (this->actor.params == SI_RANDOMIZED_ITEM) { + // Set all hilites for randomized items + func_80A3C498(&this->actor, play, 0); + ShopItemIdentity shopItemIdentity = Randomizer_IdentifyShopItem(play->sceneNum, this->randoSlotIndex); GetItemEntry getItemEntry = (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0) && this->actor.params == SI_RANDOMIZED_ITEM) ? GetItemMystery() : Randomizer_GetItemFromKnownCheckWithoutObtainabilityCheck(shopItemIdentity.randomizerCheck, shopItemIdentity.ogItemId); From d4b9e8c835296bcc9fd20c47fe97167418e21ba9 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 12 Feb 2025 15:42:58 -0500 Subject: [PATCH 43/68] Remove locations from pool that are not shuffled. (#5023) * Cleanup of unshuffled locations from pool/spoiler * Removes unshuffled scrubs from the location pool * Fix some instances of weird spacing * Actually remove placement of vanilla freestandings * Cleans up some now unnecessary code. * Minor Optimization of PlaceItemsForType * Fixes some grammer and spelling * Another grammar fix --- .../randomizer/3drando/item_pool.cpp | 231 +--- soh/soh/Enhancements/randomizer/context.cpp | 81 +- soh/soh/Enhancements/randomizer/context.h | 1 + soh/soh/Enhancements/randomizer/dungeon.cpp | 1204 +---------------- soh/soh/Enhancements/randomizer/dungeon.h | 18 +- .../Enhancements/randomizer/hook_handlers.cpp | 9 +- .../Enhancements/randomizer/randomizerTypes.h | 2 +- 7 files changed, 92 insertions(+), 1454 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index a2699cb65..ac79e860a 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -471,72 +471,6 @@ void PlaceJunkInExcludedLocation(const RandomizerCheck il) { SPDLOG_ERROR("ERROR: No Junk to Place!!!"); } -static void PlaceVanillaDekuScrubItems(bool junkOneTimeScrubs) { - auto ctx = Rando::Context::GetInstance(); - if (junkOneTimeScrubs){ - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_GROTTO_FRONT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_DEKU_SCRUB_GROTTO, RG_BLUE_RUPEE, false, true); - } - - ctx->PlaceItemInLocation(RC_ZR_DEKU_SCRUB_GROTTO_REAR, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_ZR_DEKU_SCRUB_GROTTO_FRONT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_SFM_DEKU_SCRUB_GROTTO_REAR, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_SFM_DEKU_SCRUB_GROTTO_FRONT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_LH_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_LH_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_GV_DEKU_SCRUB_GROTTO_REAR, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_GV_DEKU_SCRUB_GROTTO_FRONT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RG_BUY_DEKU_STICK_1, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_GROTTO_REAR, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_DMC_DEKU_SCRUB, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_DMC_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_GC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_GC_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_LLR_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, false, true); - - //Dungeon Scrubs - if (ctx->GetDungeon(Rando::DEKU_TREE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_DEKU_TREE_MQ_DEKU_SCRUB, RG_BUY_DEKU_SHIELD, false, true); - } - if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ()) { - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, RG_BUY_DEKU_STICK_1, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, RG_BUY_DEKU_SHIELD, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, RG_RED_POTION_REFILL, - false, true); - } else { - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, RG_BUY_DEKU_STICK_1, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, RG_BUY_DEKU_SHIELD, false, true); - } - if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsVanilla()) { - ctx->PlaceItemInLocation(RC_JABU_JABUS_BELLY_DEKU_SCRUB, RG_BUY_DEKU_NUTS_5, false, true); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, RG_BUY_ARROWS_30, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, RG_BUY_DEKU_NUTS_5, false, true); - } else { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, RG_GREEN_POTION_REFILL, false, true); - } -} - static void PlaceVanillaMapsAndCompasses() { auto ctx = Rando::Context::GetInstance(); for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { @@ -558,143 +492,11 @@ static void PlaceVanillaBossKeys() { dungeon->PlaceVanillaBossKey(); } } -// TODO: This feels like it could be moved to Dungeons class and probably shorten -// a few function call chains. Needs investigation. -static void PlaceVanillaBeehiveRupees() { - auto ctx = Rando::Context::GetInstance(); - ctx->PlaceItemInLocation(RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - - ctx->PlaceItemInLocation(RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_SFM_STORMS_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LLR_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMT_COW_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_GC_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMC_HAMMER_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_STORMS_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZD_BEHIND_KING_ZORA_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LH_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_COLOSSUS_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); -} - -static void PlaceVanillaCowMilk() { - auto ctx = Rando::Context::GetInstance(); - ctx->PlaceItemInLocation(RC_KF_LINKS_HOUSE_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_HF_COW_GROTTO_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_GV_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_KAK_IMPAS_HOUSE_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_DMT_COW_GROTTO_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_LLR_STABLES_LEFT_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_LLR_STABLES_RIGHT_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_LLR_TOWER_LEFT_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_LLR_TOWER_RIGHT_COW, RG_MILK, false, true); - - if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsMQ()) { - ctx->PlaceItemInLocation(RC_JABU_JABUS_BELLY_MQ_COW, RG_MILK, false, true); +static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, bool dungeonActive) { + if (!(overworldActive || dungeonActive)) { + return; } -} - -static void PlaceVanillaOverworldFish() { - auto ctx = Rando::Context::GetInstance(); - for (auto rc : Rando::StaticData::GetOverworldFishLocations()) { - ctx->PlaceItemInLocation(rc, RG_FISH, false, true); - } -} - -static void PlaceVanillaFairies() { - auto ctx = Rando::Context::GetInstance(); - for (auto rc : Rando::StaticData::GetOverworldFairyLocations()) { - ctx->PlaceItemInLocation(rc, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_1, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_2, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_3, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_4, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_5, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_6, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_7, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ()) { - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::WATER_TEMPLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ()) { - ctx->PlaceItemInLocation(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla()) { - ctx->PlaceItemInLocation(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla()) { - ctx->PlaceItemInLocation(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, GetJunkItem(), false, true); - } -} - -static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, bool dungeonActive, bool placeVanilla) { for (RandomizerCheck rc : ctx->GetLocations(ctx->allLocations, rctype)) { auto loc = Rando::StaticData::GetLocation(rc); @@ -702,8 +504,6 @@ static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, if (loc->IsOverworld()) { if (overworldActive) { AddItemToMainPool(loc->GetVanillaItem()); - } else if (placeVanilla) { - ctx->PlaceItemInLocation(rc, loc->GetVanillaItem(), false, true); } } else { if (dungeonActive) { @@ -723,8 +523,6 @@ static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, } } } - } else if (placeVanilla) { - ctx->PlaceItemInLocation(rc, loc->GetVanillaItem(), false, true); } } } @@ -905,8 +703,6 @@ void GenerateItemPool() { //32 total beehive locations AddItemToMainPool(RG_RED_RUPEE, 23); AddItemToMainPool(RG_BLUE_RUPEE, 9); - } else { - PlaceVanillaBeehiveRupees(); } if (ctx->GetOption(RSK_SHUFFLE_COWS)) { @@ -918,8 +714,6 @@ void GenerateItemPool() { if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsMQ()) { AddItemToMainPool(GetJunkItem()); } - } else { - PlaceVanillaCowMilk(); } // Shuffle Pots @@ -927,9 +721,7 @@ void GenerateItemPool() { ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_ALL); bool dungeonPotsActive = ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_DUNGEONS) || ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_ALL); - if (overworldPotsActive || dungeonPotsActive) { - PlaceItemsForType(RCTYPE_POT, overworldPotsActive, dungeonPotsActive, false); - } + PlaceItemsForType(RCTYPE_POT, overworldPotsActive, dungeonPotsActive); auto fsMode = ctx->GetOption(RSK_FISHSANITY); if (fsMode.IsNot(RO_FISHSANITY_OFF)) { @@ -953,8 +745,6 @@ void GenerateItemPool() { if (fsMode.Is(RO_FISHSANITY_OVERWORLD) || fsMode.Is(RO_FISHSANITY_BOTH)) { for (uint8_t i = 0; i < Rando::StaticData::GetOverworldFishLocations().size(); i++) AddItemToMainPool(GetJunkItem()); - } else { - PlaceVanillaOverworldFish(); } if (fsMode.Is(RO_FISHSANITY_HYRULE_LOACH)) { @@ -962,9 +752,6 @@ void GenerateItemPool() { } else { ctx->PlaceItemInLocation(RC_LH_HYRULE_LOACH, RG_PURPLE_RUPEE, false, true); } - } else { - PlaceVanillaOverworldFish(); - ctx->PlaceItemInLocation(RC_LH_HYRULE_LOACH, RG_PURPLE_RUPEE, false, true); } if (ctx->GetOption(RSK_SHUFFLE_FISHING_POLE)) { @@ -1333,8 +1120,6 @@ void GenerateItemPool() { for (int i = 0; i < extra; i++) { AddItemToMainPool(GetJunkItem()); } - } else { - PlaceVanillaFairies(); } //Scrubsanity @@ -1377,19 +1162,13 @@ void GenerateItemPool() { AddItemToMainPool(RG_DEKU_SEEDS_30); } } - } else { - PlaceVanillaDekuScrubItems(ctx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_OFF)); } - // RANDOTODO: Don't add freestanding locations to the seed at all in the first place so this check - // can be put back in place, and not place the vanilla items in PlaceItemsForType. bool overworldFreeStandingActive = ctx->GetOption(RSK_SHUFFLE_FREESTANDING).Is(RO_SHUFFLE_FREESTANDING_OVERWORLD) || ctx->GetOption(RSK_SHUFFLE_FREESTANDING).Is(RO_SHUFFLE_FREESTANDING_ALL); bool dungeonFreeStandingActive = ctx->GetOption(RSK_SHUFFLE_FREESTANDING).Is(RO_SHUFFLE_FREESTANDING_DUNGEONS) || ctx->GetOption(RSK_SHUFFLE_FREESTANDING).Is(RO_SHUFFLE_FREESTANDING_ALL); - //if (overworldFreeStandingActive || dungeonFreeStandingActive) { - PlaceItemsForType(RCTYPE_FREESTANDING, overworldFreeStandingActive, dungeonFreeStandingActive, true); - //} + PlaceItemsForType(RCTYPE_FREESTANDING, overworldFreeStandingActive, dungeonFreeStandingActive); AddItemsToPool(ItemPool, alwaysItems); AddItemsToPool(ItemPool, dungeonRewards); diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index cd4914aaf..d2eb4f2e1 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -98,6 +98,10 @@ ItemLocation* Context::GetItemLocation(size_t locKey) { return &itemLocationTable[static_cast(locKey)]; } +bool Context::IsLocationShuffled(const RandomizerCheck locKey) { + return itemLocationTable[locKey].GetPlacedRandomizerGet() != RG_NONE; +} + ItemOverride& Context::GetItemOverride(RandomizerCheck locKey) { if (!overrides.contains(locKey)) { overrides.emplace(locKey, ItemOverride()); @@ -156,36 +160,73 @@ void Context::GenerateLocationPool() { if (mOptions[RSK_TRIFORCE_HUNT]) { AddLocation(RC_TRIFORCE_COMPLETED); } - AddLocations(StaticData::GetOverworldLocations()); - - if (mOptions[RSK_FISHSANITY].IsNot(RO_FISHSANITY_OFF)) { - AddLocations(mFishsanity->GetFishsanityLocations().first); + for (Location& location : StaticData::GetLocationTable()) { + // skip RCs that shouldn't be in the pool for any reason (i.e. settings, unsupported check type, etc.) + // TODO: Exclude checks for some of the older shuffles from the pool too i.e. Frog Songs, Scrubs, etc.) + if (location.GetRandomizerCheck() == RC_UNKNOWN_CHECK || + location.GetRandomizerCheck() == RC_TRIFORCE_COMPLETED || // already in pool + location.GetRCType() == RCTYPE_CHEST_GAME || // not supported yet + location.GetRCType() == RCTYPE_STATIC_HINT || // can't have items + location.GetRCType() == RCTYPE_GOSSIP_STONE || // can't have items + (location.GetRCType() == RCTYPE_SCRUB && mOptions[RSK_SHUFFLE_SCRUBS].Is(RO_SCRUBS_OFF)) || + (location.GetRCType() == RCTYPE_SCRUB && mOptions[RSK_SHUFFLE_SCRUBS].Is(RO_SCRUBS_ONE_TIME_ONLY) && !( + location.GetRandomizerCheck() == RC_LW_DEKU_SCRUB_GROTTO_FRONT || + location.GetRandomizerCheck() == RC_LW_DEKU_SCRUB_NEAR_BRIDGE || + location.GetRandomizerCheck() == RC_HF_DEKU_SCRUB_GROTTO + )) || + (location.GetRCType() == RCTYPE_COW && mOptions[RSK_SHUFFLE_COWS].Is(RO_GENERIC_OFF)) || + (location.GetRCType() == RCTYPE_FISH && mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_OFF)) || + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OFF)) || + (location.GetRCType() == RCTYPE_FAIRY && !mOptions[RSK_SHUFFLE_FAIRIES]) || + (location.GetRCType() == RCTYPE_FREESTANDING && + mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OFF)) || + (location.GetRCType() == RCTYPE_BEEHIVE && !mOptions[RSK_SHUFFLE_BEEHIVES])) { + continue; + } + if (location.IsOverworld()) { + // Skip stuff that is shuffled to dungeon only, i.e. tokens, pots, etc., or other checks that + // should not have a shuffled item. + if ((location.GetRCType() == RCTYPE_FREESTANDING && mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_DUNGEONS)) || + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_DUNGEONS))) { + continue; + } + // If we've gotten past all the conditions where an overworld location should not be + // shuffled, add it to the pool. + AddLocation(location.GetRandomizerCheck()); + } else { // is a dungeon check + auto* dungeon = GetDungeon(location.GetArea() - RCAREA_DEKU_TREE); + if (location.GetQuest() == RCQUEST_BOTH || (location.GetQuest() == RCQUEST_MQ) == dungeon->IsMQ()) { + if ((location.GetRCType() == RCTYPE_FREESTANDING && + mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OVERWORLD)) || + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OVERWORLD))) { + continue; + } + // also add to that dungeon's location list. + AddLocation(location.GetRandomizerCheck(), &dungeon->locations); + AddLocation(location.GetRandomizerCheck()); + } + } } - - if (mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OVERWORLD) || - mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_ALL)) { - AddLocations(StaticData::GetOverworldPotLocations()); - } - - AddLocations(StaticData::GetAllDungeonLocations()); } void Context::AddExcludedOptions() { - AddLocations(StaticData::GetOverworldLocations(), &everyPossibleLocation); - for (const auto dungeon : mDungeons->GetDungeonList()) { - AddLocations(dungeon->GetEveryLocation(), &everyPossibleLocation); - } - for (const RandomizerCheck rc : everyPossibleLocation) { + for (auto& loc : StaticData::GetLocationTable()) { + // Checks of these types don't have items, skip them. + if (loc.GetRandomizerCheck() == RC_UNKNOWN_CHECK || + loc.GetRandomizerCheck() == RC_TRIFORCE_COMPLETED || loc.GetRCType() == RCTYPE_CHEST_GAME || + loc.GetRCType() == RCTYPE_STATIC_HINT || loc.GetRCType() == RCTYPE_GOSSIP_STONE) { + continue; + } + AddLocation(loc.GetRandomizerCheck(), &everyPossibleLocation); bool alreadyAdded = false; - Location* loc = StaticData::GetLocation(rc); - for (Option* location : Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc->GetArea())) + for (Option* location : Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc.GetArea())) { - if (location->GetName() == loc->GetExcludedOption()->GetName()) { + if (location->GetName() == loc.GetExcludedOption()->GetName()) { alreadyAdded = true; } } if (!alreadyAdded) { - Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc->GetArea()).push_back(loc->GetExcludedOption()); + Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc.GetArea()).push_back(loc.GetExcludedOption()); } } } diff --git a/soh/soh/Enhancements/randomizer/context.h b/soh/soh/Enhancements/randomizer/context.h index cc71609eb..b90f251c7 100644 --- a/soh/soh/Enhancements/randomizer/context.h +++ b/soh/soh/Enhancements/randomizer/context.h @@ -41,6 +41,7 @@ class Context { void AddHint(const RandomizerHint hintId, const Hint hint); ItemLocation* GetItemLocation(RandomizerCheck locKey); ItemLocation* GetItemLocation(size_t locKey); + bool IsLocationShuffled(RandomizerCheck locKey); ItemOverride& GetItemOverride(RandomizerCheck locKey); ItemOverride& GetItemOverride(size_t locKey); void PlaceItemInLocation(RandomizerCheck locKey, RandomizerGet item, bool applyEffectImmediately = false, diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 423c8666e..8b749faf8 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -8,16 +8,10 @@ namespace Rando { DungeonInfo::DungeonInfo(std::string name_, const RandomizerHintTextKey hintKey_, const RandomizerGet map_, const RandomizerGet compass_, const RandomizerGet smallKey_, const RandomizerGet keyRing_, const RandomizerGet bossKey_, RandomizerArea area_, const uint8_t vanillaKeyCount_, const uint8_t mqKeyCount_, - const RandomizerSettingKey mqSetting_, - std::vector vanillaLocations_, std::vector mqLocations_, - std::vector vanillaPots_, std::vector mqPots_, - std::vector sharedLocations_, std::vector bossRoomLocations_) + const RandomizerSettingKey mqSetting_) : name(std::move(name_)), hintKey(hintKey_), map(map_), compass(compass_), smallKey(smallKey_), keyRing(keyRing_), bossKey(bossKey_), area(area_), vanillaKeyCount(vanillaKeyCount_), mqKeyCount(mqKeyCount_), - mqSetting(mqSetting_), - vanillaLocations(std::move(vanillaLocations_)), mqLocations(std::move(mqLocations_)), - vanillaPots(std::move(vanillaPots_)), mqPots(std::move(mqPots_)), - sharedLocations(std::move(sharedLocations_)), bossRoomLocations(std::move(bossRoomLocations_)) { + mqSetting(mqSetting_) { } DungeonInfo::DungeonInfo() : hintKey(RHT_NONE), map(RG_NONE), compass(RG_NONE), smallKey(RG_NONE), keyRing(RG_NONE), bossKey(RG_NONE) {} @@ -147,1212 +141,42 @@ void DungeonInfo::PlaceVanillaSmallKeys() const { // Gets the chosen dungeon locations for a playthrough (so either MQ or Vanilla) std::vector DungeonInfo::GetDungeonLocations() const { - auto locations = masterQuest ? mqLocations : vanillaLocations; - if (Context::GetInstance()->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_DUNGEONS) || - Context::GetInstance()->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_ALL)) { - auto potLocations = masterQuest ? mqPots : vanillaPots; - AddElementsToPool(locations, potLocations); - } - AddElementsToPool(locations, sharedLocations); - AddElementsToPool(locations, bossRoomLocations); - return locations; -} - -// Gets all dungeon locations (MQ + Vanilla) -std::vector DungeonInfo::GetEveryLocation() const { - auto locations = vanillaLocations; - AddElementsToPool(locations, mqLocations); - AddElementsToPool(locations, vanillaPots); - AddElementsToPool(locations, mqPots); - AddElementsToPool(locations, sharedLocations); - AddElementsToPool(locations, bossRoomLocations); return locations; } Dungeons::Dungeons() { dungeonList[DEKU_TREE] = - DungeonInfo("Deku Tree", RHT_DEKU_TREE, RG_DEKU_TREE_MAP, RG_DEKU_TREE_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DEKU_TREE, 0, 0, RSK_MQ_DEKU_TREE, - { - // Vanilla Locations - RC_DEKU_TREE_MAP_CHEST, - RC_DEKU_TREE_COMPASS_CHEST, - RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, - RC_DEKU_TREE_BASEMENT_CHEST, - RC_DEKU_TREE_SLINGSHOT_CHEST, - RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, - RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM, - RC_DEKU_TREE_GS_BASEMENT_GATE, - RC_DEKU_TREE_GS_BASEMENT_VINES, - RC_DEKU_TREE_GS_COMPASS_ROOM, - RC_DEKU_TREE_LOBBY_LOWER_HEART, - RC_DEKU_TREE_LOBBY_UPPER_HEART, - RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, - RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, - RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, - }, - { - // MQ Locations - RC_DEKU_TREE_MQ_MAP_CHEST, - RC_DEKU_TREE_MQ_COMPASS_CHEST, - RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, - RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, - RC_DEKU_TREE_MQ_BASEMENT_CHEST, - RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, - RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, - RC_DEKU_TREE_MQ_DEKU_SCRUB, - RC_DEKU_TREE_MQ_GS_LOBBY, - RC_DEKU_TREE_MQ_GS_PAST_BOULDER_VINES, - RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, - RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, - RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, - RC_DEKU_TREE_MQ_DEKU_BABA_HEART, - RC_DEKU_TREE_MQ_LOBBY_HEART, - RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, - RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, - RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, - RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, - }, - {}, {}, {}, - { - // Boss Room Locations - RC_DEKU_TREE_QUEEN_GOHMA_HEART, - RC_QUEEN_GOHMA, - }); + DungeonInfo("Deku Tree", RHT_DEKU_TREE, RG_DEKU_TREE_MAP, RG_DEKU_TREE_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DEKU_TREE, 0, 0, RSK_MQ_DEKU_TREE); dungeonList[DODONGOS_CAVERN] = DungeonInfo("Dodongo's Cavern", RHT_DODONGOS_CAVERN, RG_DODONGOS_CAVERN_MAP, - RG_DODONGOS_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DODONGOS_CAVERN, 0, 0, RSK_MQ_DODONGOS_CAVERN, - { - // Vanilla Locations - RC_DODONGOS_CAVERN_MAP_CHEST, - RC_DODONGOS_CAVERN_COMPASS_CHEST, - RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, - RC_DODONGOS_CAVERN_BOMB_BAG_CHEST, - RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, - RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, - RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, - RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, - RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, - RC_DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS, - RC_DODONGOS_CAVERN_GS_SCARECROW, - RC_DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS, - RC_DODONGOS_CAVERN_GS_BACK_ROOM, - RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS, - RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, - RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, - RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, - RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, - RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, - RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, - }, - { - // MQ Locations - RC_DODONGOS_CAVERN_MQ_MAP_CHEST, - RC_DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST, - RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST, - RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, - RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST, - RC_DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST, - RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, - RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, - RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, - RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, - RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, - RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, - RC_DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM, - RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, - RC_DODONGOS_CAVERN_MQ_GS_BACK_AREA, - RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, - RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, - RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, - RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, - }, - { - // Vanilla Pots - RC_DODONGOS_CAVERN_LIZALFOS_POT_1, - RC_DODONGOS_CAVERN_LIZALFOS_POT_2, - RC_DODONGOS_CAVERN_LIZALFOS_POT_3, - RC_DODONGOS_CAVERN_LIZALFOS_POT_4, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6, - RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1, - RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2, - RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3, - RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4, - RC_DODONGOS_CAVERN_STAIRCASE_POT_1, - RC_DODONGOS_CAVERN_STAIRCASE_POT_2, - RC_DODONGOS_CAVERN_STAIRCASE_POT_3, - RC_DODONGOS_CAVERN_STAIRCASE_POT_4, - RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1, - RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2, - RC_DODONGOS_CAVERN_BLADE_POT_1, - RC_DODONGOS_CAVERN_BLADE_POT_2, - RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1, - RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, - RC_DODONGOS_CAVERN_BACK_ROOM_POT_1, - RC_DODONGOS_CAVERN_BACK_ROOM_POT_2, - RC_DODONGOS_CAVERN_BACK_ROOM_POT_3, - RC_DODONGOS_CAVERN_BACK_ROOM_POT_4, - }, - { - // MQ Pots - RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, - RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, - RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, - RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, - RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1, - RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2, - RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, - RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, - RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, - RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, - RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, - RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, - RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT, - RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT, - RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, - RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, - RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1, - RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2, - RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, - RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, - RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, - RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, - RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT, - RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT, - RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT, - RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT, - RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT, - RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT, - RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, - RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, - }, - {}, - { - // Boss Room Locations - RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST, - RC_DODONGOS_CAVERN_KING_DODONGO_HEART, - RC_KING_DODONGO, - }); + RG_DODONGOS_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DODONGOS_CAVERN, 0, 0, RSK_MQ_DODONGOS_CAVERN); dungeonList[JABU_JABUS_BELLY] = DungeonInfo("Jabu Jabu's Belly", RHT_JABU_JABUS_BELLY, RG_JABU_JABUS_BELLY_MAP, - RG_JABU_JABUS_BELLY_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_JABU_JABUS_BELLY, 0, 0, RSK_MQ_JABU_JABU, - { - // Vanilla Locations - RC_JABU_JABUS_BELLY_MAP_CHEST, - RC_JABU_JABUS_BELLY_COMPASS_CHEST, - RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, - RC_JABU_JABUS_BELLY_DEKU_SCRUB, - RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, - RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, - RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, - RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, - }, - { - // MQ Locations - RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, - RC_JABU_JABUS_BELLY_MQ_MAP_CHEST, - RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, - RC_JABU_JABUS_BELLY_MQ_COMPASS_CHEST, - RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST, - RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, - RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST, - RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, - RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, - RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, - RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, - RC_JABU_JABUS_BELLY_MQ_COW, - RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, - RC_JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM, - RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, - RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, - RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, - RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, - RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, - RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, - RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, - }, - { - // Vanilla Pots - RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, - RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2, - RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, - RC_JABU_JABUS_BELLY_BASEMENT_POT_1, - RC_JABU_JABUS_BELLY_BASEMENT_POT_2, - RC_JABU_JABUS_BELLY_BASEMENT_POT_3, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, - - // Shared Pots so in both vanilla and MQ - RC_JABU_JABUS_BELLY_BARINADE_POT_1, - RC_JABU_JABUS_BELLY_BARINADE_POT_2, - RC_JABU_JABUS_BELLY_BARINADE_POT_3, - RC_JABU_JABUS_BELLY_BARINADE_POT_4, - RC_JABU_JABUS_BELLY_BARINADE_POT_5, - RC_JABU_JABUS_BELLY_BARINADE_POT_6, - }, - { - // MQ Pots - RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, - RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, - RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, - RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, - RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, - RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, - RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, - RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, - RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, - - // Shared Pots so in both vanilla and MQ - RC_JABU_JABUS_BELLY_BARINADE_POT_1, - RC_JABU_JABUS_BELLY_BARINADE_POT_2, - RC_JABU_JABUS_BELLY_BARINADE_POT_3, - RC_JABU_JABUS_BELLY_BARINADE_POT_4, - RC_JABU_JABUS_BELLY_BARINADE_POT_5, - RC_JABU_JABUS_BELLY_BARINADE_POT_6, - }, - {}, - { - // Boss Room Locations - RC_JABU_JABUS_BELLY_BARINADE_HEART, - RC_BARINADE, - }); + RG_JABU_JABUS_BELLY_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_JABU_JABUS_BELLY, 0, 0, RSK_MQ_JABU_JABU); dungeonList[FOREST_TEMPLE] = DungeonInfo("Forest Temple", RHT_FOREST_TEMPLE, RG_FOREST_TEMPLE_MAP, RG_FOREST_TEMPLE_COMPASS, - RG_FOREST_TEMPLE_SMALL_KEY, RG_FOREST_TEMPLE_KEY_RING, RG_FOREST_TEMPLE_BOSS_KEY, RA_FOREST_TEMPLE, 5, 6, RSK_MQ_FOREST_TEMPLE, - { - // Vanilla Locations - RC_FOREST_TEMPLE_FIRST_ROOM_CHEST, - RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST, - RC_FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST, - RC_FOREST_TEMPLE_MAP_CHEST, - RC_FOREST_TEMPLE_WELL_CHEST, - RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST, - RC_FOREST_TEMPLE_EYE_SWITCH_CHEST, - RC_FOREST_TEMPLE_BOSS_KEY_CHEST, - RC_FOREST_TEMPLE_FLOORMASTER_CHEST, - RC_FOREST_TEMPLE_BOW_CHEST, - RC_FOREST_TEMPLE_RED_POE_CHEST, - RC_FOREST_TEMPLE_BLUE_POE_CHEST, - RC_FOREST_TEMPLE_BASEMENT_CHEST, - RC_FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD, - RC_FOREST_TEMPLE_GS_FIRST_ROOM, - RC_FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD, - RC_FOREST_TEMPLE_GS_LOBBY, - RC_FOREST_TEMPLE_GS_BASEMENT, - RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, - RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, - RC_FOREST_TEMPLE_WELL_WEST_HEART, - RC_FOREST_TEMPLE_WELL_EAST_HEART, - }, - { - // MQ Locations - RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, - RC_FOREST_TEMPLE_MQ_WOLFOS_CHEST, - RC_FOREST_TEMPLE_MQ_BOW_CHEST, - RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST, - RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST, - RC_FOREST_TEMPLE_MQ_WELL_CHEST, - RC_FOREST_TEMPLE_MQ_MAP_CHEST, - RC_FOREST_TEMPLE_MQ_COMPASS_CHEST, - RC_FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST, - RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST, - RC_FOREST_TEMPLE_MQ_REDEAD_CHEST, - RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, - RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM, - RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, - RC_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, - RC_FOREST_TEMPLE_MQ_GS_WELL, - RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, - RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, - RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, - RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, - RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, - RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, - }, - { - // Vanilla Pots - RC_FOREST_TEMPLE_LOBBY_POT_1, - RC_FOREST_TEMPLE_LOBBY_POT_2, - RC_FOREST_TEMPLE_LOBBY_POT_3, - RC_FOREST_TEMPLE_LOBBY_POT_4, - RC_FOREST_TEMPLE_LOBBY_POT_5, - RC_FOREST_TEMPLE_LOBBY_POT_6, - RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1, - RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, - RC_FOREST_TEMPLE_GREEN_POE_POT_1, - RC_FOREST_TEMPLE_GREEN_POE_POT_2, - RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1, - RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2, - RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3, - RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4, - RC_FOREST_TEMPLE_BLUE_POE_POT_1, - RC_FOREST_TEMPLE_BLUE_POE_POT_2, - RC_FOREST_TEMPLE_BLUE_POE_POT_3, - RC_FOREST_TEMPLE_FROZEN_EYE_POT_1, - RC_FOREST_TEMPLE_FROZEN_EYE_POT_2, - }, - { - // MQ Pots - RC_FOREST_TEMPLE_MQ_LOBBY_POT_1, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_2, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_3, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_4, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_5, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, - RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1, - RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, - RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, - RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, - RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, - RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, - RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1, - RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2, - RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3, - RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1, - RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, - RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1, - RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2, - RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3, - RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, - }, - {}, - { - // Boss Room Locations - RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, - RC_PHANTOM_GANON, - }); + RG_FOREST_TEMPLE_SMALL_KEY, RG_FOREST_TEMPLE_KEY_RING, RG_FOREST_TEMPLE_BOSS_KEY, RA_FOREST_TEMPLE, 5, 6, RSK_MQ_FOREST_TEMPLE); dungeonList[FIRE_TEMPLE] = DungeonInfo("Fire Temple", RHT_FIRE_TEMPLE, RG_FIRE_TEMPLE_MAP, RG_FIRE_TEMPLE_COMPASS, - RG_FIRE_TEMPLE_SMALL_KEY, RG_FIRE_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_BOSS_KEY, RA_FIRE_TEMPLE, 8, 5, RSK_MQ_FIRE_TEMPLE, - { - // Vanilla Locations - RC_FIRE_TEMPLE_NEAR_BOSS_CHEST, - RC_FIRE_TEMPLE_FLARE_DANCER_CHEST, - RC_FIRE_TEMPLE_BOSS_KEY_CHEST, - RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, - RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST, - RC_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST, - RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST, - RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST, - RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST, - RC_FIRE_TEMPLE_SCARECROW_CHEST, - RC_FIRE_TEMPLE_MAP_CHEST, - RC_FIRE_TEMPLE_COMPASS_CHEST, - RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST, - RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST, - RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM, - RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP, - RC_FIRE_TEMPLE_GS_BOULDER_MAZE, - RC_FIRE_TEMPLE_GS_SCARECROW_TOP, - RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB, - RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, - RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, - RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, - RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, - RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, - RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, - RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, - RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, - RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, - }, - { - // MQ Locations - RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, - RC_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST, - RC_FIRE_TEMPLE_MQ_COMPASS_CHEST, - RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, - RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, - RC_FIRE_TEMPLE_MQ_CHEST_ON_FIRE, - RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, - RC_FIRE_TEMPLE_MQ_MAP_CHEST, - RC_FIRE_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, - RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, - RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY, - RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE, - RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER, - RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, - RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, - RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, - RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, - RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, - RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, - RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, - RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_FIRE_TEMPLE_NEAR_BOSS_POT_1, - RC_FIRE_TEMPLE_NEAR_BOSS_POT_2, - RC_FIRE_TEMPLE_NEAR_BOSS_POT_3, - RC_FIRE_TEMPLE_NEAR_BOSS_POT_4, - RC_FIRE_TEMPLE_BIG_LAVA_POT_1, - RC_FIRE_TEMPLE_BIG_LAVA_POT_2, - RC_FIRE_TEMPLE_BIG_LAVA_POT_3, - RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1, - RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2, - RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3, - RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, - RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1, - RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, - RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, - RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, - }, - { - // MQ Pots - RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, - RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, - RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, - RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, - RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT, - RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT, - RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, - RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, - RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2, - RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, - RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, - RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, - RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, - RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, - RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, - RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, - RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT, - RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, - }, - {}, - { - // Boos Room Locations - RC_FIRE_TEMPLE_VOLVAGIA_HEART, - RC_VOLVAGIA, - }); + RG_FIRE_TEMPLE_SMALL_KEY, RG_FIRE_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_BOSS_KEY, RA_FIRE_TEMPLE, 8, 5, RSK_MQ_FIRE_TEMPLE); dungeonList[WATER_TEMPLE] = DungeonInfo("Water Temple", RHT_WATER_TEMPLE, RG_WATER_TEMPLE_MAP, RG_WATER_TEMPLE_COMPASS, - RG_WATER_TEMPLE_SMALL_KEY, RG_WATER_TEMPLE_KEY_RING, RG_WATER_TEMPLE_BOSS_KEY, RA_WATER_TEMPLE, 6, 2, RSK_MQ_WATER_TEMPLE, - { - // Vanilla Locations - RC_WATER_TEMPLE_MAP_CHEST, - RC_WATER_TEMPLE_COMPASS_CHEST, - RC_WATER_TEMPLE_TORCHES_CHEST, - RC_WATER_TEMPLE_DRAGON_CHEST, - RC_WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST, - RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST, - RC_WATER_TEMPLE_CRACKED_WALL_CHEST, - RC_WATER_TEMPLE_BOSS_KEY_CHEST, - RC_WATER_TEMPLE_LONGSHOT_CHEST, - RC_WATER_TEMPLE_RIVER_CHEST, - RC_WATER_TEMPLE_GS_BEHIND_GATE, - RC_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM, - RC_WATER_TEMPLE_GS_CENTRAL_PILLAR, - RC_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST, - RC_WATER_TEMPLE_GS_RIVER, - RC_WATER_TEMPLE_RIVER_HEART_1, - RC_WATER_TEMPLE_RIVER_HEART_2, - RC_WATER_TEMPLE_RIVER_HEART_3, - RC_WATER_TEMPLE_RIVER_HEART_4, - }, - { - // MQ Locations - RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, - RC_WATER_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, - RC_WATER_TEMPLE_MQ_COMPASS_CHEST, - RC_WATER_TEMPLE_MQ_MAP_CHEST, - RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, - RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH, - RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, - RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, - RC_WATER_TEMPLE_MQ_GS_RIVER, - RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, - RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, - RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, - RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, - RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, - RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, - RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, - RC_WATER_TEMPLE_TORCH_POT_1, - RC_WATER_TEMPLE_TORCH_POT_2, - RC_WATER_TEMPLE_NEAR_COMPASS_POT_1, - RC_WATER_TEMPLE_NEAR_COMPASS_POT_2, - RC_WATER_TEMPLE_NEAR_COMPASS_POT_3, - RC_WATER_TEMPLE_CENTRAL_BOW_POT_1, - RC_WATER_TEMPLE_CENTRAL_BOW_POT_2, - RC_WATER_TEMPLE_BEHIND_GATE_POT_1, - RC_WATER_TEMPLE_BEHIND_GATE_POT_2, - RC_WATER_TEMPLE_BEHIND_GATE_POT_3, - RC_WATER_TEMPLE_BEHIND_GATE_POT_4, - RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1, - RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, - RC_WATER_TEMPLE_RIVER_POT_1, - RC_WATER_TEMPLE_RIVER_POT_2, - RC_WATER_TEMPLE_LIKE_LIKE_POT_1, - RC_WATER_TEMPLE_LIKE_LIKE_POT_2, - RC_WATER_TEMPLE_BOSS_KEY_POT_1, - RC_WATER_TEMPLE_BOSS_KEY_POT_2, - }, - { - // MQ Pots - RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, - RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, - RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, - RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, - RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, - RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, - RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, - RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT, - RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT, - RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT, - RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, - RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, - RC_WATER_TEMPLE_MQ_RIVER_POT_1, - RC_WATER_TEMPLE_MQ_RIVER_POT_2, - RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, - RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, - RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, - RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, - RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, - RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, - RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, - RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, - RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, - RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, - RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, - RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, - }, - {}, - { - // Boss Room Locations - RC_WATER_TEMPLE_MORPHA_HEART, - RC_MORPHA, - }); + RG_WATER_TEMPLE_SMALL_KEY, RG_WATER_TEMPLE_KEY_RING, RG_WATER_TEMPLE_BOSS_KEY, RA_WATER_TEMPLE, 6, 2, RSK_MQ_WATER_TEMPLE); dungeonList[SPIRIT_TEMPLE] = DungeonInfo("Spirit Temple", RHT_SPIRIT_TEMPLE, RG_SPIRIT_TEMPLE_MAP, RG_SPIRIT_TEMPLE_COMPASS, - RG_SPIRIT_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_BOSS_KEY, RA_SPIRIT_TEMPLE, 5, 7, RSK_MQ_SPIRIT_TEMPLE, - { - // Vanilla Locations - RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, - RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, - RC_SPIRIT_TEMPLE_COMPASS_CHEST, - RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, - RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, - RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, - RC_SPIRIT_TEMPLE_MAP_CHEST, - RC_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST, - RC_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST, - RC_SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST, - RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, - RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, - RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, - RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, - RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, - RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST, - RC_SPIRIT_TEMPLE_TOPMOST_CHEST, - RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, - RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, - RC_SPIRIT_TEMPLE_GS_LOBBY, - RC_SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM, - RC_SPIRIT_TEMPLE_GS_METAL_FENCE, - RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, - RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, - RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, - RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, - }, - { - // MQ Locations - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST, - RC_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST, - RC_SPIRIT_TEMPLE_MQ_MAP_CHEST, - RC_SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST, - RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, - RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST, - RC_SPIRIT_TEMPLE_MQ_COMPASS_CHEST, - RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, - RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, - RC_SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST, - RC_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST, - RC_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST, - RC_SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST, - RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, - RC_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST, - RC_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, - RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, - RC_SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM, - RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST, - RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH, - RC_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM, - RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, - RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, - RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_SPIRIT_TEMPLE_LOBBY_POT_1, - RC_SPIRIT_TEMPLE_LOBBY_POT_2, - RC_SPIRIT_TEMPLE_ANUBIS_POT_1, - RC_SPIRIT_TEMPLE_ANUBIS_POT_2, - RC_SPIRIT_TEMPLE_ANUBIS_POT_3, - RC_SPIRIT_TEMPLE_ANUBIS_POT_4, - RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, - RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, - RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, - RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, - }, - { - // MQ Pots - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, - RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, - RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, - RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, - RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT, - RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1, - RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2, - RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3, - RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, - RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, - RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT, - RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT, - RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, - RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, - RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, - RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, - RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, - RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, - RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, - RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, - RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, - RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, - RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1, - RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, - RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, - RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, - }, - { - // Shared Locations - RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, - RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, - }, - { - // Boss Room Locations - RC_SPIRIT_TEMPLE_TWINROVA_HEART, - RC_TWINROVA, - }); + RG_SPIRIT_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_BOSS_KEY, RA_SPIRIT_TEMPLE, 5, 7, RSK_MQ_SPIRIT_TEMPLE); dungeonList[SHADOW_TEMPLE] = DungeonInfo("Shadow Temple", RHT_SHADOW_TEMPLE, RG_SHADOW_TEMPLE_MAP, RG_SHADOW_TEMPLE_COMPASS, - RG_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_BOSS_KEY, RA_SHADOW_TEMPLE, 5, 6, RSK_MQ_SHADOW_TEMPLE, - { - // Vanilla Locations - RC_SHADOW_TEMPLE_MAP_CHEST, - RC_SHADOW_TEMPLE_HOVER_BOOTS_CHEST, - RC_SHADOW_TEMPLE_COMPASS_CHEST, - RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, - RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, - RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, - RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, - RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, - RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, - RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, - RC_SHADOW_TEMPLE_WIND_HINT_CHEST, - RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, - RC_SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST, - RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, - RC_SHADOW_TEMPLE_BOSS_KEY_CHEST, - RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, - RC_SHADOW_TEMPLE_FREESTANDING_KEY, - RC_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT, - RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, - RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, - RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, - RC_SHADOW_TEMPLE_GS_NEAR_SHIP, - RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, - RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, - RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, - RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, - RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, - RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, - RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, - RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, - RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, - RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, - }, - { - // MQ Locations - RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST, - RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, - RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, - RC_SHADOW_TEMPLE_MQ_MAP_CHEST, - RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, - RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST, - RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST, - RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, - RC_SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST, - RC_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST, - RC_SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST, - RC_SHADOW_TEMPLE_MQ_WIND_HINT_CHEST, - RC_SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST, - RC_SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST, - RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST, - RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, - RC_SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM, - RC_SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM, - RC_SHADOW_TEMPLE_MQ_GS_AFTER_WIND, - RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, - RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, - RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, - RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, - RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, - RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, - RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, - RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, - RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, - RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, - RC_SHADOW_TEMPLE_MAP_CHEST_POT_1, - RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, - RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, - RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, - RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, - RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, - RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, - RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, - RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, - RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, - RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, - RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1, - RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, - RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, - RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, - }, - { - // MQ Pots - RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, - RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, - RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, - RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, - RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT, - RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT, - RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, - RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT, - RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1, - RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2, - RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT, - RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT, - RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT, - RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT, - RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, - RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, - RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, - }, - {}, - { - // Boss Room Locations - RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, - RC_BONGO_BONGO, - }); + RG_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_BOSS_KEY, RA_SHADOW_TEMPLE, 5, 6, RSK_MQ_SHADOW_TEMPLE); dungeonList[BOTTOM_OF_THE_WELL] = DungeonInfo( "Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, RG_BOTTOM_OF_THE_WELL_MAP, RG_BOTTOM_OF_THE_WELL_COMPASS, - RG_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_KEY_RING, RG_NONE, RA_BOTTOM_OF_THE_WELL, 3, 2, RSK_MQ_BOTTOM_OF_THE_WELL, - { - // Vanilla Locations - RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, - RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, - RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, - RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST, - RC_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST, - RC_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST, - RC_BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST, - RC_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST, - RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, - RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, - RC_BOTTOM_OF_THE_WELL_MAP_CHEST, - RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST, - RC_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST, - RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY, - RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE, - RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, - RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE, - RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART, - RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, - RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, - }, - { - // MQ Locations - RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, - RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, - RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, - RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, - RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, - RC_BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT, - RC_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, - RC_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, - RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, - RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, - RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1, - RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2, - RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, - RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, - RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, - RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, - RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, - }, - { - // MQ Pots - RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, - RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, - RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, - RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, - RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, - RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, - RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, - }, - {}, {}); + RG_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_KEY_RING, RG_NONE, RA_BOTTOM_OF_THE_WELL, 3, 2, RSK_MQ_BOTTOM_OF_THE_WELL); dungeonList[ICE_CAVERN] = DungeonInfo("Ice Cavern", RHT_ICE_CAVERN, RG_ICE_CAVERN_MAP, RG_ICE_CAVERN_COMPASS, - RG_NONE, RG_NONE, RG_NONE, RA_ICE_CAVERN, 0, 0, RSK_MQ_ICE_CAVERN, - { - // Vanilla Locations - RC_ICE_CAVERN_MAP_CHEST, - RC_ICE_CAVERN_COMPASS_CHEST, - RC_ICE_CAVERN_IRON_BOOTS_CHEST, - RC_ICE_CAVERN_FREESTANDING_POH, - RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM, - RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, - RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, - RC_ICE_CAVERN_LOBBY_RUPEE, - RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, - RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, - RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, - RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, - RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, - RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, - RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, - }, - { - // MQ Locations - RC_ICE_CAVERN_MQ_IRON_BOOTS_CHEST, - RC_ICE_CAVERN_MQ_COMPASS_CHEST, - RC_ICE_CAVERN_MQ_MAP_CHEST, - RC_ICE_CAVERN_MQ_FREESTANDING_POH, - RC_ICE_CAVERN_MQ_GS_SCARECROW, - RC_ICE_CAVERN_MQ_GS_ICE_BLOCK, - RC_ICE_CAVERN_MQ_GS_RED_ICE, - }, - { - // Vanilla Pots - RC_ICE_CAVERN_HALL_POT_1, - RC_ICE_CAVERN_HALL_POT_2, - RC_ICE_CAVERN_SPINNING_BLADE_POT_1, - RC_ICE_CAVERN_SPINNING_BLADE_POT_2, - RC_ICE_CAVERN_SPINNING_BLADE_POT_3, - RC_ICE_CAVERN_NEAR_END_POT_1, - RC_ICE_CAVERN_NEAR_END_POT_2, - RC_ICE_CAVERN_FROZEN_POT_1, - }, - { - // MQ Pots - RC_ICE_CAVERN_MQ_ENTRANCE_POT, - RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, - RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2, - RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1, - RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2, - RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3, - RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4, - RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1, - RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, - RC_ICE_CAVERN_MQ_COMPASS_POT_1, - RC_ICE_CAVERN_MQ_COMPASS_POT_2, - }, - { - // Shared Locations - RC_SHEIK_IN_ICE_CAVERN, - }, - {}); + RG_NONE, RG_NONE, RG_NONE, RA_ICE_CAVERN, 0, 0, RSK_MQ_ICE_CAVERN); dungeonList[GERUDO_TRAINING_GROUND] = DungeonInfo("Gerudo Training Ground", RHT_GERUDO_TRAINING_GROUND, RG_NONE, RG_NONE, - RG_GERUDO_TRAINING_GROUND_SMALL_KEY, RG_GERUDO_TRAINING_GROUND_KEY_RING, RG_NONE, RA_GERUDO_TRAINING_GROUND, 9, 3, RSK_MQ_GTG, - { - // Vanilla Locations - RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, - RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, - RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, - RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, - RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST, - RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, - RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST, - RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, - RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, - RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, - RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, - RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST, - RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, - RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, - RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST, - RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, - RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, - RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, - RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, - }, - { - // MQ Locations - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST, - }, - {}, - { - // MQ Pots - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1, - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, - }, {}, {}); + RG_GERUDO_TRAINING_GROUND_SMALL_KEY, RG_GERUDO_TRAINING_GROUND_KEY_RING, RG_NONE, RA_GERUDO_TRAINING_GROUND, 9, 3, RSK_MQ_GTG); dungeonList[GANONS_CASTLE] = DungeonInfo("Ganon's Castle", RHT_GANONS_CASTLE, RG_NONE, RG_NONE, RG_GANONS_CASTLE_SMALL_KEY, - RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, RA_GANONS_CASTLE, 2, 3, RSK_MQ_GANONS_CASTLE, - { - // Vanilla Locations - RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, - RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, - RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, - RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST, - RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, - RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, - RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST, - RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, - RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, - RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, - RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, - RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, - RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, - RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, - RC_GANONS_CASTLE_FIRE_TRIAL_HEART, - RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, - RC_GANONS_CASTLE_SCRUBS_FAIRY_1, - RC_GANONS_CASTLE_SCRUBS_FAIRY_2, - RC_GANONS_CASTLE_SCRUBS_FAIRY_3, - RC_GANONS_CASTLE_SCRUBS_FAIRY_4, - RC_GANONS_CASTLE_SCRUBS_FAIRY_5, - RC_GANONS_CASTLE_SCRUBS_FAIRY_6, - RC_GANONS_CASTLE_SCRUBS_FAIRY_7, - RC_GANONS_CASTLE_SCRUBS_FAIRY_8, - RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, - }, - { - // MQ Locations - RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST, - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST, - RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST, - RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, - RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, - }, - { - // Vanilla Pots - RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, - RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, - RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, - RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, - RC_GANONS_CASTLE_WATER_TRIAL_POT_1, - RC_GANONS_CASTLE_WATER_TRIAL_POT_2, - RC_GANONS_CASTLE_WATER_TRIAL_POT_3, - RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1, - RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, - RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, - RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, - RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, - RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, - RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, - RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, - RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, - - // Shared Pots so in both vanilla and MQ - RC_GANONS_CASTLE_GANONS_TOWER_POT_1, - RC_GANONS_CASTLE_GANONS_TOWER_POT_2, - RC_GANONS_CASTLE_GANONS_TOWER_POT_3, - RC_GANONS_CASTLE_GANONS_TOWER_POT_4, - RC_GANONS_CASTLE_GANONS_TOWER_POT_5, - RC_GANONS_CASTLE_GANONS_TOWER_POT_6, - RC_GANONS_CASTLE_GANONS_TOWER_POT_7, - RC_GANONS_CASTLE_GANONS_TOWER_POT_8, - RC_GANONS_CASTLE_GANONS_TOWER_POT_9, - RC_GANONS_CASTLE_GANONS_TOWER_POT_10, - RC_GANONS_CASTLE_GANONS_TOWER_POT_11, - RC_GANONS_CASTLE_GANONS_TOWER_POT_12, - RC_GANONS_CASTLE_GANONS_TOWER_POT_13, - RC_GANONS_CASTLE_GANONS_TOWER_POT_14, - RC_GANONS_CASTLE_GANONS_TOWER_POT_15, - RC_GANONS_CASTLE_GANONS_TOWER_POT_16, - RC_GANONS_CASTLE_GANONS_TOWER_POT_17, - RC_GANONS_CASTLE_GANONS_TOWER_POT_18, - }, - { - // MQ Pots - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, - - // Shared Pots so in both vanilla and MQ - RC_GANONS_CASTLE_GANONS_TOWER_POT_1, - RC_GANONS_CASTLE_GANONS_TOWER_POT_2, - RC_GANONS_CASTLE_GANONS_TOWER_POT_3, - RC_GANONS_CASTLE_GANONS_TOWER_POT_4, - RC_GANONS_CASTLE_GANONS_TOWER_POT_5, - RC_GANONS_CASTLE_GANONS_TOWER_POT_6, - RC_GANONS_CASTLE_GANONS_TOWER_POT_7, - RC_GANONS_CASTLE_GANONS_TOWER_POT_8, - RC_GANONS_CASTLE_GANONS_TOWER_POT_9, - RC_GANONS_CASTLE_GANONS_TOWER_POT_10, - RC_GANONS_CASTLE_GANONS_TOWER_POT_11, - RC_GANONS_CASTLE_GANONS_TOWER_POT_12, - RC_GANONS_CASTLE_GANONS_TOWER_POT_13, - RC_GANONS_CASTLE_GANONS_TOWER_POT_14, - RC_GANONS_CASTLE_GANONS_TOWER_POT_15, - RC_GANONS_CASTLE_GANONS_TOWER_POT_16, - RC_GANONS_CASTLE_GANONS_TOWER_POT_17, - RC_GANONS_CASTLE_GANONS_TOWER_POT_18, - }, - { - // Shared Locations - RC_GANONS_TOWER_BOSS_KEY_CHEST, - RC_GANON, - }, - {}); + RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, RA_GANONS_CASTLE, 2, 3, RSK_MQ_GANONS_CASTLE); } Dungeons::~Dungeons() = default; diff --git a/soh/soh/Enhancements/randomizer/dungeon.h b/soh/soh/Enhancements/randomizer/dungeon.h index c8ecd247e..5d26036eb 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.h +++ b/soh/soh/Enhancements/randomizer/dungeon.h @@ -12,11 +12,7 @@ class DungeonInfo { public: DungeonInfo(std::string name_, RandomizerHintTextKey hintKey_, RandomizerGet map_, RandomizerGet compass_, RandomizerGet smallKey_, RandomizerGet keyRing_, RandomizerGet bossKey_, RandomizerArea area_, - uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, RandomizerSettingKey mqSetting_, - std::vector vanillaLocations_, std::vector mqLocations_, - std::vector vanillaPots_, std::vector mqPots_, - std::vector sharedLocations_, - std::vector bossRoomLocations_); + uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, RandomizerSettingKey mqSetting_); DungeonInfo(); ~DungeonInfo(); @@ -43,7 +39,7 @@ class DungeonInfo { void PlaceVanillaBossKey() const; void PlaceVanillaSmallKeys() const; std::vector GetDungeonLocations() const; - std::vector GetEveryLocation() const; + std::vector locations; private: std::string name; @@ -60,12 +56,6 @@ class DungeonInfo { uint8_t mqKeyCount{}; bool masterQuest = false; bool hasKeyRing = false; - std::vector vanillaLocations; - std::vector mqLocations; - std::vector vanillaPots; - std::vector mqPots; - std::vector sharedLocations; - std::vector bossRoomLocations; }; typedef enum { @@ -79,8 +69,8 @@ typedef enum { SHADOW_TEMPLE, BOTTOM_OF_THE_WELL, ICE_CAVERN, - GANONS_CASTLE, - GERUDO_TRAINING_GROUND + GERUDO_TRAINING_GROUND, + GANONS_CASTLE } DungeonKey; class Dungeons { diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index cba64059a..da2281894 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -232,7 +232,7 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) { if (rc == RC_UNKNOWN_CHECK) return; auto loc = Rando::Context::GetInstance()->GetItemLocation(rc); - if (loc == nullptr || loc->HasObtained()) return; + if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) return; SPDLOG_INFO("Queuing RC: {}", static_cast(rc)); randomizerQueuedChecks.push(rc); @@ -250,7 +250,7 @@ void RandomizerOnSceneFlagSetHandler(int16_t sceneNum, int16_t flagType, int16_t if (rc == RC_UNKNOWN_CHECK) return; auto loc = Rando::Context::GetInstance()->GetItemLocation(rc); - if (loc == nullptr || loc->HasObtained()) return; + if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) return; SPDLOG_INFO("Queuing RC: {}", static_cast(rc)); randomizerQueuedChecks.push(rc); @@ -813,7 +813,10 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_GIVE_ITEM_FROM_CHEST: { EnBox* chest = va_arg(args, EnBox*); RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor(chest->dyna.actor.id, gPlayState->sceneNum, chest->dyna.actor.params); - + if (!OTRGlobals::Instance->gRandoContext->IsLocationShuffled(rc)) { + break; + } + // if this is a treasure chest game chest then set the appropriate rando inf RandomizerSetChestGameRandomizerInf(rc); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index dabfedac7..550f2b1af 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5342,7 +5342,7 @@ typedef enum { //Scrubsanity settings (off, affordable, expensive, random) typedef enum { RO_SCRUBS_OFF, - RO_SCRUBS_MAJOR_ONLY, + RO_SCRUBS_ONE_TIME_ONLY, RO_SCRUBS_ALL, } RandoOptionScrubsanity; From 0ce9807df64d8dc497ea5132546d27cf7e65dfc5 Mon Sep 17 00:00:00 2001 From: Archez Date: Wed, 12 Feb 2025 15:52:18 -0500 Subject: [PATCH 44/68] ShipInit and move ValueViewer rendering out of src (#5039) --- soh/soh/Enhancements/debugger/colViewer.h | 7 +--- soh/soh/Enhancements/debugger/valueViewer.cpp | 39 ++++++++++++++++++- soh/soh/Enhancements/debugger/valueViewer.h | 8 ---- soh/src/code/graph.c | 24 ------------ 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/soh/soh/Enhancements/debugger/colViewer.h b/soh/soh/Enhancements/debugger/colViewer.h index 5252bc950..b4807e873 100644 --- a/soh/soh/Enhancements/debugger/colViewer.h +++ b/soh/soh/Enhancements/debugger/colViewer.h @@ -2,11 +2,6 @@ #include -#ifdef __cplusplus -extern "C" -#endif -void DrawColViewer(); - typedef enum { COLVIEW_DISABLED, COLVIEW_SOLID, @@ -23,4 +18,4 @@ class ColViewerWindow : public Ship::GuiWindow { void UpdateElement() override {}; }; -#endif \ No newline at end of file +#endif diff --git a/soh/soh/Enhancements/debugger/valueViewer.cpp b/soh/soh/Enhancements/debugger/valueViewer.cpp index 088e69713..7d09dfb63 100644 --- a/soh/soh/Enhancements/debugger/valueViewer.cpp +++ b/soh/soh/Enhancements/debugger/valueViewer.cpp @@ -1,6 +1,7 @@ #include "valueViewer.h" #include "soh/SohGui/UIWidgets.hpp" #include "soh/OTRGlobals.h" +#include "soh/ShipInit.hpp" extern "C" { #include @@ -14,6 +15,10 @@ void GfxPrint_SetPos(GfxPrint* printer, s32 x, s32 y); s32 GfxPrint_Printf(GfxPrint* printer, const char* fmt, ...); } +#define CVAR_NAME CVAR_DEVELOPER_TOOLS("ValueViewerEnablePrinting") +#define CVAR_DEFAULT 0 +#define CVAR_VALUE CVarGetInteger(CVAR_NAME, CVAR_DEFAULT) + ImVec4 WHITE = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); std::vector valueTable = { @@ -104,8 +109,40 @@ extern "C" void ValueViewer_Draw(GfxPrint* printer) { } } +extern "C" void ValueViewer_SetupDraw() { + OPEN_DISPS(gGameState->gfxCtx); + + Gfx* gfx; + Gfx* polyOpa; + GfxPrint printer; + + polyOpa = POLY_OPA_DISP; + gfx = Graph_GfxPlusOne(polyOpa); + gSPDisplayList(OVERLAY_DISP++, gfx); + + GfxPrint_Init(&printer); + GfxPrint_Open(&printer, gfx); + + ValueViewer_Draw(&printer); + + gfx = GfxPrint_Close(&printer); + GfxPrint_Destroy(&printer); + + gSPEndDisplayList(gfx++); + Graph_BranchDlist(polyOpa, gfx); + POLY_OPA_DISP = gfx; + + CLOSE_DISPS(gGameState->gfxCtx); +} + +void RegisterValueViewerHooks() { + COND_HOOK(OnGameFrameUpdate, CVAR_VALUE, []() { ValueViewer_SetupDraw(); }); +} + +RegisterShipInitFunc initFunc(RegisterValueViewerHooks, { CVAR_NAME }); + void ValueViewerWindow::DrawElement() { - UIWidgets::PaddedEnhancementCheckbox("Enable Printing", CVAR_DEVELOPER_TOOLS("ValueViewerEnablePrinting")); + UIWidgets::PaddedEnhancementCheckbox("Enable Printing", CVAR_NAME); ImGui::BeginGroup(); static int selectedElement = -1; diff --git a/soh/soh/Enhancements/debugger/valueViewer.h b/soh/soh/Enhancements/debugger/valueViewer.h index 747d39018..e93491fa5 100644 --- a/soh/soh/Enhancements/debugger/valueViewer.h +++ b/soh/soh/Enhancements/debugger/valueViewer.h @@ -42,12 +42,4 @@ class ValueViewerWindow : public Ship::GuiWindow { void UpdateElement() override {}; }; -extern "C" { -#include #endif - -void ValueViewer_Draw(GfxPrint* printer); - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/soh/src/code/graph.c b/soh/src/code/graph.c index 06d84aa3b..51f8fcd17 100644 --- a/soh/src/code/graph.c +++ b/soh/src/code/graph.c @@ -6,8 +6,6 @@ #include #include -#include "soh/Enhancements/debugger/colViewer.h" -#include "soh/Enhancements/debugger/valueViewer.h" #include "soh/Enhancements/gameconsole.h" #include "soh/OTRGlobals.h" #include "libultraship/bridge.h" @@ -300,28 +298,6 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) { OPEN_DISPS(gfxCtx); - if (CVarGetInteger(CVAR_DEVELOPER_TOOLS("ValueViewerEnablePrinting"), 0)) { - Gfx* gfx; - Gfx* polyOpa; - GfxPrint printer; - - polyOpa = POLY_OPA_DISP; - gfx = Graph_GfxPlusOne(polyOpa); - gSPDisplayList(OVERLAY_DISP++, gfx); - - GfxPrint_Init(&printer); - GfxPrint_Open(&printer, gfx); - - ValueViewer_Draw(&printer); - - gfx = GfxPrint_Close(&printer); - GfxPrint_Destroy(&printer); - - gSPEndDisplayList(gfx++); - Graph_BranchDlist(polyOpa, gfx); - POLY_OPA_DISP = gfx; - } - gDPNoOpString(WORK_DISP++, "WORK_DISP 終了", 0); gDPNoOpString(POLY_OPA_DISP++, "POLY_OPA_DISP 終了", 0); gDPNoOpString(POLY_XLU_DISP++, "POLY_XLU_DISP 終了", 0); From f7d6a4713993b2b462b59697c53bd0f6c939f0dc Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Thu, 13 Feb 2025 04:09:58 -0500 Subject: [PATCH 45/68] Fix issues leftover from PR #5023 (#5054) --- soh/soh/Enhancements/randomizer/context.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index d2eb4f2e1..9ae705295 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -174,8 +174,17 @@ void Context::GenerateLocationPool() { location.GetRandomizerCheck() == RC_LW_DEKU_SCRUB_NEAR_BRIDGE || location.GetRandomizerCheck() == RC_HF_DEKU_SCRUB_GROTTO )) || + (location.GetRCType() == RCTYPE_ADULT_TRADE && mOptions[RSK_SHUFFLE_ADULT_TRADE].Is(RO_GENERIC_OFF)) || (location.GetRCType() == RCTYPE_COW && mOptions[RSK_SHUFFLE_COWS].Is(RO_GENERIC_OFF)) || - (location.GetRCType() == RCTYPE_FISH && mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_OFF)) || + (location.GetRandomizerCheck() == RC_LH_HYRULE_LOACH && mOptions[RSK_FISHSANITY].IsNot(RO_FISHSANITY_HYRULE_LOACH)) || + (location.GetRCType() == RCTYPE_FISH && ( + mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_OFF) || + (mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_OVERWORLD) && location.GetScene() == SCENE_FISHING_POND) || + (mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_POND) && (location.GetScene() != SCENE_FISHING_POND || + (mOptions[RSK_FISHSANITY_AGE_SPLIT].Is(RO_GENERIC_OFF) && ( + location.GetRandomizerCheck() >= RC_LH_ADULT_FISH_1 && location.GetRandomizerCheck() <= RC_LH_ADULT_LOACH)) + )) + )) || (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OFF)) || (location.GetRCType() == RCTYPE_FAIRY && !mOptions[RSK_SHUFFLE_FAIRIES]) || (location.GetRCType() == RCTYPE_FREESTANDING && From dbf7fcf7756b04b3782f65b5ce5d490ab946bbe2 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 13 Feb 2025 04:10:27 -0500 Subject: [PATCH 46/68] explicitly exclude ganon + triforce completed (#5050) --- .../Enhancements/randomizer/randomizer_check_tracker.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index 0b5178621..a84922ba7 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -80,7 +80,6 @@ bool initialized; bool doAreaScroll; bool previousShowHidden = false; bool hideShopUnshuffledChecks = true; -bool hideTriforceCompleted = true; bool alwaysShowGS = false; std::map startingShopItem = { { SCENE_KOKIRI_SHOP, RC_KF_SHOP_ITEM_1 }, @@ -1192,8 +1191,6 @@ void LoadSettings() { showLinksPocket = IS_RANDO ? // don't show Link's Pocket if not randomizer, or if rando and pocket is disabled OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_LINKS_POCKET) != RO_LINKS_POCKET_NOTHING :false; - hideTriforceCompleted = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT) != RO_GENERIC_ON : false; if (IS_RANDO) { switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_TOKENS)) { @@ -1300,7 +1297,8 @@ bool IsCheckShuffled(RandomizerCheck rc) { OTRGlobals::Instance->gRandoContext->IsQuestOfLocationActive(rc) && (loc->GetRCType() != RCTYPE_SHOP || (showShops && OTRGlobals::Instance->gRandomizer->IdentifyShopItem(loc->GetScene(), loc->GetActorParams() + 1).enGirlAShopItem == 50)) && - (rc != RC_TRIFORCE_COMPLETED || !hideTriforceCompleted) && + (rc != RC_TRIFORCE_COMPLETED) && + (rc != RC_GANON) && (loc->GetRCType() != RCTYPE_SCRUB || showScrubs || (showMajorScrubs && (rc == RC_LW_DEKU_SCRUB_NEAR_BRIDGE || // The 3 scrubs that are always randomized From 668040562fae802d7e416d15e6201585d9d075aa Mon Sep 17 00:00:00 2001 From: aMannus Date: Fri, 14 Feb 2025 21:29:22 +0100 Subject: [PATCH 47/68] Autosave Overhaul (#5022) * Autosave interval based * Move to save on soft reset, remove adjustable interval * Use new BeforeExitGame hook to prevent non-existent data problems * Fix check tracker crash, remove BeforeExitGame hook * update comment --- soh/include/functions.h | 1 - soh/soh/Enhancements/Autosave.cpp | 78 ++++++++++++++++++ soh/soh/Enhancements/Autosave.h | 4 + soh/soh/Enhancements/debugconsole.cpp | 1 - soh/soh/Enhancements/enhancementTypes.h | 9 -- soh/soh/Enhancements/mods.cpp | 82 ------------------- soh/soh/Enhancements/presets.h | 5 +- .../Enhancements/randomizer/randomizer.cpp | 4 + .../randomizer/randomizer_check_tracker.cpp | 4 +- soh/soh/SohGui/SohGui.cpp | 1 - soh/soh/SohGui/SohMenuBar.cpp | 12 ++- soh/soh/config/ConfigMigrators.h | 1 - soh/src/code/z_play.c | 8 -- 13 files changed, 96 insertions(+), 114 deletions(-) create mode 100644 soh/soh/Enhancements/Autosave.cpp create mode 100644 soh/soh/Enhancements/Autosave.h diff --git a/soh/include/functions.h b/soh/include/functions.h index 8f902c5a8..147500c66 100644 --- a/soh/include/functions.h +++ b/soh/include/functions.h @@ -1073,7 +1073,6 @@ uint16_t Interface_DrawTextLine(GraphicsContext* gfx, char text[], int16_t x, in u8 Item_Give(PlayState* play, u8 item); u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry); u8 Item_CheckObtainability(u8 item); -void PerformAutosave(PlayState* play, u8 item); void Inventory_DeleteItem(u16 item, u16 invSlot); s32 Inventory_ReplaceItem(PlayState* play, u16 oldItem, u16 newItem); s32 Inventory_HasEmptyBottle(void); diff --git a/soh/soh/Enhancements/Autosave.cpp b/soh/soh/Enhancements/Autosave.cpp new file mode 100644 index 000000000..74b548dab --- /dev/null +++ b/soh/soh/Enhancements/Autosave.cpp @@ -0,0 +1,78 @@ +#include +#include "soh/Enhancements/game-interactor/GameInteractor.h" +#include "soh/Notification/Notification.h" +#include "soh/ShipInit.hpp" +#include "soh/SaveManager.h" + +extern "C" { +extern PlayState* gPlayState; +#include "functions.h" +#include "variables.h" +} + +static uint64_t lastSaveTimestamp = GetUnixTimestamp(); + +#define CVAR_AUTOSAVE_NAME CVAR_ENHANCEMENT("Autosave") +#define CVAR_AUTOSAVE_DEFAULT AUTOSAVE_OFF +#define CVAR_AUTOSAVE_VALUE CVarGetInteger(CVAR_AUTOSAVE_NAME, CVAR_AUTOSAVE_DEFAULT) +#define THREE_MINUTES_IN_UNIX 3 * 60000 + +typedef enum { + AUTOSAVE_OFF, + AUTOSAVE_ON, +} AutosaveOptions; + +bool Autosave_CanSave() { + + // Don't save when in title screen + // Don't save the first 60 frames to not save the magic meter when it's still in the animation of filling it. + // Don't save in Ganon's fight and chamber of sages because of master sword and remember save location issues. + if (!GameInteractor::IsSaveLoaded(true) || gPlayState->gameplayFrames < 60 || + gPlayState->sceneNum == SCENE_GANON_BOSS || gPlayState->sceneNum == SCENE_CHAMBER_OF_THE_SAGES) { + return false; + } + + return true; +} + +void Autosave_PerformSave() { + Play_PerformSave(gPlayState); + + // Send notification + Notification::Emit({ + .message = "Game autosaved", + }); +} + +void Autosave_IntervalSave() { + // Check if the interval has passed in minutes. + uint64_t currentTimestamp = GetUnixTimestamp(); + if ((currentTimestamp - lastSaveTimestamp) < THREE_MINUTES_IN_UNIX) { + return; + } + + // If save available to create, do it and reset the interval. + // Interval gets extra check for being paused to avoid rare issues like bypassing shop + // rupees draining after buying an item. Since the interval can just retry until it + // passes, it can use more conditions without hampering the player experience. + if (Autosave_CanSave() && !GameInteractor::IsGameplayPaused()) { + + // Reset timestamp, set icon timer to show autosave icon for 5 seconds (100 frames) + lastSaveTimestamp = currentTimestamp; + + Autosave_PerformSave(); + } +} + +void Autosave_SoftResetSave() { + if (Autosave_CanSave()) { + Autosave_PerformSave(); + } +} + +void RegisterAutosave() { + COND_HOOK(GameInteractor::OnGameFrameUpdate, CVAR_AUTOSAVE_VALUE, Autosave_IntervalSave); + COND_HOOK(GameInteractor::OnExitGame, CVAR_AUTOSAVE_VALUE, [](int32_t fileNum) { Autosave_SoftResetSave(); }); +} + +static RegisterShipInitFunc initFunc(RegisterAutosave, { CVAR_AUTOSAVE_NAME }); diff --git a/soh/soh/Enhancements/Autosave.h b/soh/soh/Enhancements/Autosave.h new file mode 100644 index 000000000..202fcde4f --- /dev/null +++ b/soh/soh/Enhancements/Autosave.h @@ -0,0 +1,4 @@ +typedef enum { + AUTOSAVE_OFF, + AUTOSAVE_ON, +} AutosaveOptions; diff --git a/soh/soh/Enhancements/debugconsole.cpp b/soh/soh/Enhancements/debugconsole.cpp index 7037f9b0a..5df00dfab 100644 --- a/soh/soh/Enhancements/debugconsole.cpp +++ b/soh/soh/Enhancements/debugconsole.cpp @@ -208,7 +208,6 @@ static bool ResetHandler(std::shared_ptr Console, std::vectorrunning = false; GameInteractor::Instance->ExecuteHooks(gSaveContext.fileNum); diff --git a/soh/soh/Enhancements/enhancementTypes.h b/soh/soh/Enhancements/enhancementTypes.h index 4b2f825f5..db96a7700 100644 --- a/soh/soh/Enhancements/enhancementTypes.h +++ b/soh/soh/Enhancements/enhancementTypes.h @@ -52,15 +52,6 @@ typedef enum { ENEMY_RANDOMIZER_RANDOM_SEEDED, } EnemyRandomizerMode; -typedef enum { - AUTOSAVE_OFF, - AUTOSAVE_LOCATION_AND_MAJOR_ITEMS, - AUTOSAVE_LOCATION_AND_ALL_ITEMS, - AUTOSAVE_LOCATION, - AUTOSAVE_MAJOR_ITEMS, - AUTOSAVE_ALL_ITEMS -} AutosaveType; - typedef enum { BOOTSEQUENCE_DEFAULT, BOOTSEQUENCE_AUTHENTIC, diff --git a/soh/soh/Enhancements/mods.cpp b/soh/soh/Enhancements/mods.cpp index bbfcf1052..e6777644e 100644 --- a/soh/soh/Enhancements/mods.cpp +++ b/soh/soh/Enhancements/mods.cpp @@ -135,87 +135,6 @@ void RegisterOcarinaTimeTravel() { }); } -void AutoSave(GetItemEntry itemEntry) { - u8 item = itemEntry.itemId; - bool performSave = false; - // Don't autosave immediately after buying items from shops to prevent getting them for free! - // Don't autosave in the Chamber of Sages since resuming from that map breaks the game - // Don't autosave during the Ganon fight when picking up the Master Sword - if ((CVarGetInteger(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_OFF) != AUTOSAVE_OFF) && (gPlayState != NULL) && (gSaveContext.ship.pendingSale == ITEM_NONE) && - (gPlayState->gameplayFrames > 60 && gSaveContext.cutsceneIndex < 0xFFF0) && (gPlayState->sceneNum != SCENE_GANON_BOSS) && (gPlayState->sceneNum != SCENE_CHAMBER_OF_THE_SAGES)) { - if (((CVarGetInteger(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_OFF) == AUTOSAVE_LOCATION_AND_ALL_ITEMS) || (CVarGetInteger(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_OFF) == AUTOSAVE_ALL_ITEMS)) && (item != ITEM_NONE)) { - // Autosave for all items - performSave = true; - - } else if (((CVarGetInteger(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_OFF) == AUTOSAVE_LOCATION_AND_MAJOR_ITEMS) || (CVarGetInteger(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_OFF) == AUTOSAVE_MAJOR_ITEMS)) && (item != ITEM_NONE)) { - // Autosave for major items - if (itemEntry.modIndex == 0) { - switch (item) { - case ITEM_STICK: - case ITEM_NUT: - case ITEM_BOMB: - case ITEM_BOW: - case ITEM_SEEDS: - case ITEM_FISHING_POLE: - case ITEM_MAGIC_SMALL: - case ITEM_MAGIC_LARGE: - case ITEM_INVALID_4: - case ITEM_INVALID_5: - case ITEM_INVALID_6: - case ITEM_INVALID_7: - case ITEM_HEART: - case ITEM_RUPEE_GREEN: - case ITEM_RUPEE_BLUE: - case ITEM_RUPEE_RED: - case ITEM_RUPEE_PURPLE: - case ITEM_RUPEE_GOLD: - case ITEM_INVALID_8: - case ITEM_STICKS_5: - case ITEM_STICKS_10: - case ITEM_NUTS_5: - case ITEM_NUTS_10: - case ITEM_BOMBS_5: - case ITEM_BOMBS_10: - case ITEM_BOMBS_20: - case ITEM_BOMBS_30: - case ITEM_ARROWS_SMALL: - case ITEM_ARROWS_MEDIUM: - case ITEM_ARROWS_LARGE: - case ITEM_SEEDS_30: - case ITEM_NONE: - break; - case ITEM_BOMBCHU: - case ITEM_BOMBCHUS_5: - case ITEM_BOMBCHUS_20: - if (!CVarGetInteger(CVAR_ENHANCEMENT("EnableBombchuDrops"), 0)) { - performSave = true; - } - break; - default: - performSave = true; - break; - } - } else if (itemEntry.modIndex == 1 && item != RG_ICE_TRAP) { - performSave = true; - } - } else if (CVarGetInteger(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_OFF) == AUTOSAVE_LOCATION_AND_MAJOR_ITEMS || - CVarGetInteger(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_OFF) == AUTOSAVE_LOCATION_AND_ALL_ITEMS || - CVarGetInteger(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_OFF) == AUTOSAVE_LOCATION) { - performSave = true; - } - if (performSave) { - Play_PerformSave(gPlayState); - performSave = false; - } - } -} - -void RegisterAutoSave() { - GameInteractor::Instance->RegisterGameHook([](GetItemEntry itemEntry) { AutoSave(itemEntry); }); - GameInteractor::Instance->RegisterGameHook([](GetItemEntry itemEntry) { AutoSave(itemEntry); }); - GameInteractor::Instance->RegisterGameHook([](int32_t sceneNum) { AutoSave(GET_ITEM_NONE); }); -} - void RegisterRupeeDash() { GameInteractor::Instance->RegisterGameHook([]() { if (!CVarGetInteger(CVAR_ENHANCEMENT("RupeeDash"), 0)) { @@ -1168,7 +1087,6 @@ void InitMods() { TimeSavers_Register(); RegisterTTS(); RegisterOcarinaTimeTravel(); - RegisterAutoSave(); RegisterDaytimeGoldSkultullas(); RegisterRupeeDash(); RegisterShadowTag(); diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index d61ff6ade..83b0e94d5 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -157,7 +157,6 @@ const std::vector enhancementsCvars = { CVAR_ENHANCEMENT("GSCutscene"), CVAR_ENHANCEMENT("RestoreRBAValues"), CVAR_ENHANCEMENT("SkipSaveConfirmation"), - CVAR_ENHANCEMENT("Autosave"), CVAR_ENHANCEMENT("DisableCritWiggle"), CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), CVAR_ENHANCEMENT("SkipArrowAnimation"), @@ -754,7 +753,7 @@ const std::vector enhancedPresetEntries = { PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AnubisFix"), 1), // Autosave - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_LOCATION_AND_MAJOR_ITEMS), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("Autosave"), 1), // Bombchu shop doesn't sell out, and 10 bombchus cost 99 instead of 100 PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterBombchuShopping"), 1), @@ -887,7 +886,7 @@ const std::vector randomizerPresetEntries = { PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AnubisFix"), 1), // Autosave - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_LOCATION_AND_MAJOR_ITEMS), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("Autosave"), 1), // Customize Fishing Behaviour PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeFishing"), 1), diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index d1ca49162..44831c7c0 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -39,6 +39,7 @@ #include "soh/util.h" #include "fishsanity.h" #include "randomizerTypes.h" +#include "soh/Notification/Notification.h" extern std::map rcAreaNames; @@ -4105,6 +4106,9 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { gSaveContext.ship.stats.gameComplete = 1; Flags_SetRandomizerInf(RAND_INF_GRANT_GANONS_BOSSKEY); Play_PerformSave(play); + Notification::Emit({ + .message = "Game autosaved", + }); GameInteractor_SetTriforceHuntCreditsWarpActive(true); } diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index a84922ba7..e3b07b672 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -1382,7 +1382,9 @@ void UpdateAllAreas() { } void UpdateAreas(RandomizerCheckArea area) { - areasFullyChecked[area] = areaChecksGotten[area] == checksByArea.find(area)->second.size(); + if (checksByArea.contains(area)) { + areasFullyChecked[area] = areaChecksGotten[area] == checksByArea.find(area)->second.size(); + } } void UpdateAllOrdering() { diff --git a/soh/soh/SohGui/SohGui.cpp b/soh/soh/SohGui/SohGui.cpp index 84a44b052..8d7a4ba45 100644 --- a/soh/soh/SohGui/SohGui.cpp +++ b/soh/soh/SohGui/SohGui.cpp @@ -64,7 +64,6 @@ namespace SohGui { static const char* subPowers[8] = { allPowers[0], allPowers[1], allPowers[2], allPowers[3], allPowers[4], allPowers[5], allPowers[6], allPowers[7] }; static const char* subSubPowers[7] = { allPowers[0], allPowers[1], allPowers[2], allPowers[3], allPowers[4], allPowers[5], allPowers[6] }; static const char* zFightingOptions[3] = { "Disabled", "Consistent Vanish", "No Vanish" }; - static const char* autosaveLabels[6] = { "Off", "New Location + Major Item", "New Location + Any Item", "New Location", "Major Item", "Any Item" }; static const char* bonkDamageValues[8] = { "No Damage", "0.25 Heart", diff --git a/soh/soh/SohGui/SohMenuBar.cpp b/soh/soh/SohGui/SohMenuBar.cpp index e6337dae6..bad852f7a 100644 --- a/soh/soh/SohGui/SohMenuBar.cpp +++ b/soh/soh/SohGui/SohMenuBar.cpp @@ -45,6 +45,7 @@ #include "soh/Enhancements/randomizer/Plandomizer.h" #include "soh/Enhancements/TimeDisplay/TimeDisplay.h" #include "soh/AboutWindow.h" +#include "soh/Enhancements/Autosave.h" // FA icons are kind of wonky, if they worked how I expected them to the "+ 2.0f" wouldn't be needed, but // they don't work how I expect them to so I added that because it looked good when I eyeballed it @@ -104,7 +105,6 @@ static const char* imguiScaleOptions[4] = { "Small", "Normal", "Large", "X-Large static const char* subPowers[8] = { allPowers[0], allPowers[1], allPowers[2], allPowers[3], allPowers[4], allPowers[5], allPowers[6], allPowers[7] }; static const char* subSubPowers[7] = { allPowers[0], allPowers[1], allPowers[2], allPowers[3], allPowers[4], allPowers[5], allPowers[6] }; static const char* zFightingOptions[3] = { "Disabled", "Consistent Vanish", "No Vanish" }; - static const char* autosaveLabels[6] = { "Off", "New Location + Major Item", "New Location + Any Item", "New Location", "Major Item", "Any Item" }; static const char* bootSequenceLabels[3] = { "Default", "Authentic", "File Select" }; static const char* DebugSaveFileModes[3] = { "Off", "Vanilla", "Maxed" }; static const char* DekuStickCheat[3] = { "Normal", "Unbreakable", "Unbreakable + Always on Fire" }; @@ -1569,13 +1569,11 @@ void DrawEnhancementsMenu() { ImGui::EndMenu(); } - UIWidgets::PaddedSeparator(false, true); + UIWidgets::PaddedSeparator(); - // Autosave enum value of 1 is the default in presets and the old checkbox "on" state for backwards compatibility - UIWidgets::PaddedText("Autosave", false, true); - UIWidgets::EnhancementCombobox(CVAR_ENHANCEMENT("Autosave"), autosaveLabels, AUTOSAVE_OFF); - UIWidgets::Tooltip("Automatically save the game when changing locations and/or obtaining items\n" - "Major items exclude rupees and health/magic/ammo refills (but include bombchus unless bombchu drops are enabled)"); + UIWidgets::EnhancementCheckbox("Autosave", CVAR_ENHANCEMENT("Autosave")); + UIWidgets::Tooltip("Save the game automatically on a 3 minute interval and when soft-resetting the game.\n\n" + "The interval autosave will wait if the game is paused in any way (dialogue, pause screen up, cutscenes)."); UIWidgets::PaddedSeparator(true, true, 2.0f, 2.0f); diff --git a/soh/soh/config/ConfigMigrators.h b/soh/soh/config/ConfigMigrators.h index 3a566f493..29cbb0774 100644 --- a/soh/soh/config/ConfigMigrators.h +++ b/soh/soh/config/ConfigMigrators.h @@ -145,7 +145,6 @@ namespace SOH { { MigrationAction::Rename, "gAskToEquip", "gEnhancements.AskToEquip" }, { MigrationAction::Rename, "gAssignableTunicsAndBoots", "gEnhancements.AssignableTunicsAndBoots" }, { MigrationAction::Rename, "gAuthenticLogo", "gEnhancements.AuthenticLogo" }, - { MigrationAction::Rename, "gAutosave", "gEnhancements.Autosave" }, { MigrationAction::Rename, "gBetterFW", "gEnhancements.BetterFarore" }, { MigrationAction::Rename, "gBetterOwl", "gEnhancements.BetterOwl" }, { MigrationAction::Rename, "gBlueFireArrows", "gEnhancements.BlueFireArrows" }, diff --git a/soh/src/code/z_play.c b/soh/src/code/z_play.c index 0b6db75b1..115369171 100644 --- a/soh/src/code/z_play.c +++ b/soh/src/code/z_play.c @@ -2206,13 +2206,5 @@ void Play_PerformSave(PlayState* play) { // Restore temp B values back gSaveContext.equips.buttonItems[0] = prevB; gSaveContext.buttonStatus[0] = prevStatus; - - uint8_t triforceHuntCompleted = - IS_RANDO && - gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected == (Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED) + 1) && - Randomizer_GetSettingValue(RSK_TRIFORCE_HUNT); - if (CVarGetInteger(CVAR_ENHANCEMENT("Autosave"), AUTOSAVE_OFF) != AUTOSAVE_OFF || triforceHuntCompleted) { - Overlay_DisplayText(3.0f, "Game Saved"); - } } } From 6df5abc30b177bc3cdf2d1f86aa0b7ddc5610edc Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Fri, 14 Feb 2025 15:30:11 -0500 Subject: [PATCH 48/68] Fix ER + Fishsanity settings combos (#5061) --- soh/soh/Enhancements/randomizer/3drando/fill.cpp | 2 +- soh/soh/Enhancements/randomizer/context.cpp | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index 9c2bff044..ff3413e98 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -602,7 +602,7 @@ void ValidateEntrances(bool checkPoeCollectorAccess, bool checkOtherEntranceAcce auto message = "Location " + Rando::StaticData::GetLocation(ctx->GetItemLocation(loc)->GetRandomizerCheck())->GetName() + " not reachable\n"; - SPDLOG_DEBUG(message); + LUSLOG_DEBUG("%s", message.c_str()); #ifndef ENABLE_DEBUG break; #endif diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 9ae705295..ba9ab6d2c 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -178,12 +178,14 @@ void Context::GenerateLocationPool() { (location.GetRCType() == RCTYPE_COW && mOptions[RSK_SHUFFLE_COWS].Is(RO_GENERIC_OFF)) || (location.GetRandomizerCheck() == RC_LH_HYRULE_LOACH && mOptions[RSK_FISHSANITY].IsNot(RO_FISHSANITY_HYRULE_LOACH)) || (location.GetRCType() == RCTYPE_FISH && ( - mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_OFF) || + mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_OFF) || mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_HYRULE_LOACH) || (mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_OVERWORLD) && location.GetScene() == SCENE_FISHING_POND) || - (mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_POND) && (location.GetScene() != SCENE_FISHING_POND || - (mOptions[RSK_FISHSANITY_AGE_SPLIT].Is(RO_GENERIC_OFF) && ( - location.GetRandomizerCheck() >= RC_LH_ADULT_FISH_1 && location.GetRandomizerCheck() <= RC_LH_ADULT_LOACH)) - )) + (mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_POND) && location.GetScene() != SCENE_FISHING_POND) || + ((mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_POND) || mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_BOTH)) && + (mOptions[RSK_FISHSANITY_AGE_SPLIT].Is(RO_GENERIC_OFF) && ( + location.GetRandomizerCheck() >= RC_LH_ADULT_FISH_1 && location.GetRandomizerCheck() <= RC_LH_ADULT_LOACH) + ) + ) )) || (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OFF)) || (location.GetRCType() == RCTYPE_FAIRY && !mOptions[RSK_SHUFFLE_FAIRIES]) || From 20a9f4190659c2108437a798d87605e86e8c49ef Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Fri, 14 Feb 2025 12:32:25 -0800 Subject: [PATCH 49/68] remove unused `VB_SHOULD`s (#5056) * remove an unused should * another unused * remove more unused * one more * remove case * more cases for unused shoulds --- soh/soh/Enhancements/boss-rush/BossRush.cpp | 7 ------- .../vanilla-behavior/GIVanillaBehavior.h | 18 ------------------ .../Enhancements/randomizer/hook_handlers.cpp | 3 --- 3 files changed, 28 deletions(-) diff --git a/soh/soh/Enhancements/boss-rush/BossRush.cpp b/soh/soh/Enhancements/boss-rush/BossRush.cpp index 96220f057..aabe5d67a 100644 --- a/soh/soh/Enhancements/boss-rush/BossRush.cpp +++ b/soh/soh/Enhancements/boss-rush/BossRush.cpp @@ -522,13 +522,6 @@ void BossRush_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li } break; } - // Replace the blue warp transitions with ones that lead back to the chamber of sages - case VB_BLUE_WARP_APPLY_ENTRANCE_AND_CUTSCENE: { - DoorWarp1* blueWarp = va_arg(args, DoorWarp1*); - BossRush_HandleBlueWarp(gPlayState, blueWarp->actor.world.pos.x, blueWarp->actor.world.pos.z); - *should = false; - break; - } // Spawn clean blue warps (no ruto, adult animation, etc) case VB_SPAWN_BLUE_WARP: { switch (gPlayState->sceneNum) { diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index 96453dff8..a9118c776 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -212,9 +212,6 @@ typedef enum { // - None VB_BIGGORON_CONSIDER_TRADE_COMPLETE, - // # UNUSED - VB_BLUE_WARP_APPLY_ENTRANCE_AND_CUTSCENE, - // #### `result` // Actor is ACTOR_EN_ELF, ACTOR_EN_FISH, ACTOR_EN_ICE_HONO, or ACTOR_EN_INSECT // ```c @@ -335,9 +332,6 @@ typedef enum { // - None VB_DEKU_STICK_BURN_OUT, - // # UNUSED - VB_DEKU_UPDATE_BURNING_DEKU_STICK, - // #### `result` // ```c // Flags_GetItemGetInf(ITEMGETINF_30) @@ -730,12 +724,6 @@ typedef enum { // - None VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD, - // # UNUSED - VB_GIVE_ITEM_GORON_RUBY, - - // # UNUSED - VB_GIVE_ITEM_KOKIRI_EMERALD, - // #### `result` // ```c // true @@ -904,9 +892,6 @@ typedef enum { // - None VB_GIVE_ITEM_ZELDAS_LULLABY, - // # UNUSED - VB_GIVE_ITEM_ZORA_SAPPHIRE, - // #### `result` // ```c // false @@ -1390,9 +1375,6 @@ typedef enum { // - None VB_PLAY_NABOORU_CAPTURED_CS, - // # UNUSED - VB_PLAY_ODD_POTION_ANIM, - // #### `result` // ```c // true diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index da2281894..5eee3541a 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -1667,9 +1667,6 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_GIVE_ITEM_STRENGTH_1: case VB_GIVE_ITEM_ZELDAS_LETTER: case VB_GIVE_ITEM_OCARINA_OF_TIME: - case VB_GIVE_ITEM_KOKIRI_EMERALD: - case VB_GIVE_ITEM_GORON_RUBY: - case VB_GIVE_ITEM_ZORA_SAPPHIRE: case VB_GIVE_ITEM_LIGHT_MEDALLION: case VB_GIVE_ITEM_FOREST_MEDALLION: case VB_GIVE_ITEM_FIRE_MEDALLION: From 169a3d742d09188a0591fc047b1b252d8cb01a8f Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Fri, 14 Feb 2025 21:59:02 -0800 Subject: [PATCH 50/68] make `cmake_minimum_required` consistent between root `CMakeLists.txt` and `soh/CMakeLists.txt` (#5066) also remove some version checks that don't apply anymore --- CMakeLists.txt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index edbe5b44b..3437ef3fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.26.0 FATAL_ERROR) set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE) set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use") @@ -195,8 +195,7 @@ find_package(Python3 COMPONENTS Interpreter) # Target to generate OTRs add_custom_target( ExtractAssets - # CMake versions prior to 3.17 do not have the rm command, use remove instead for older versions - COMMAND ${CMAKE_COMMAND} -E $,remove,rm> -f oot.otr oot-mq.otr soh.otr + COMMAND ${CMAKE_COMMAND} -E rm -f oot.otr oot-mq.otr soh.otr COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$" --non-interactive --xml-root ../soh/assets/xml --custom-otr-file soh.otr "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}" COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter @@ -217,8 +216,7 @@ add_custom_target( # Target to generate only soh.otr add_custom_target( GenerateSohOtr - # CMake versions prior to 3.17 do not have the rm command, use remove instead for older versions - COMMAND ${CMAKE_COMMAND} -E $,remove,rm> -f soh.otr + COMMAND ${CMAKE_COMMAND} -E rm -f soh.otr COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$" --norom --custom-otr-file soh.otr "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}" COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DONLYSOHOTR=On -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter From 2645a5fce27379981d939499af40299b4c0484f3 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Sat, 15 Feb 2025 12:58:26 -0800 Subject: [PATCH 51/68] bump lus (#5065) --- libultraship | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libultraship b/libultraship index 74f1c35cd..f776531ab 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 74f1c35cd3bfa4f9e746c85234b8cb716c592a54 +Subproject commit f776531abf74db98f8d9c7da64e9a21590af65ad From 6f22c05eec784ba68c649876d82cdaffc9cfde6b Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Sat, 15 Feb 2025 23:25:30 -0800 Subject: [PATCH 52/68] pin linuxdeploy (#5070) * test forked linuxdeploy * pin version --- CMake/Packaging.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMake/Packaging.cmake b/CMake/Packaging.cmake index 907f8da76..e809e32ab 100644 --- a/CMake/Packaging.cmake +++ b/CMake/Packaging.cmake @@ -60,7 +60,7 @@ if (NOT LINUXDEPLOY_EXECUTABLE) message(STATUS "Downloading linuxdeploy") set(LINUXDEPLOY_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy) file(DOWNLOAD - https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage + https://github.com/linuxdeploy/linuxdeploy/releases/download/1-alpha-20240109-1/linuxdeploy-x86_64.AppImage ${LINUXDEPLOY_EXECUTABLE} INACTIVITY_TIMEOUT 10 LOG ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/download.log From 489cd84faa2c4a5ecf47bca2067a4abdf473d4ab Mon Sep 17 00:00:00 2001 From: aMannus Date: Mon, 17 Feb 2025 23:43:51 +0100 Subject: [PATCH 53/68] Clean up autosave header (#5077) --- soh/soh/Enhancements/Autosave.h | 4 ---- soh/soh/SohGui/SohMenuBar.cpp | 1 - 2 files changed, 5 deletions(-) delete mode 100644 soh/soh/Enhancements/Autosave.h diff --git a/soh/soh/Enhancements/Autosave.h b/soh/soh/Enhancements/Autosave.h deleted file mode 100644 index 202fcde4f..000000000 --- a/soh/soh/Enhancements/Autosave.h +++ /dev/null @@ -1,4 +0,0 @@ -typedef enum { - AUTOSAVE_OFF, - AUTOSAVE_ON, -} AutosaveOptions; diff --git a/soh/soh/SohGui/SohMenuBar.cpp b/soh/soh/SohGui/SohMenuBar.cpp index bad852f7a..053ed9e13 100644 --- a/soh/soh/SohGui/SohMenuBar.cpp +++ b/soh/soh/SohGui/SohMenuBar.cpp @@ -45,7 +45,6 @@ #include "soh/Enhancements/randomizer/Plandomizer.h" #include "soh/Enhancements/TimeDisplay/TimeDisplay.h" #include "soh/AboutWindow.h" -#include "soh/Enhancements/Autosave.h" // FA icons are kind of wonky, if they worked how I expected them to the "+ 2.0f" wouldn't be needed, but // they don't work how I expect them to so I added that because it looked good when I eyeballed it From cc25c96385cecbfd08bd17687df18ed32cdeecf6 Mon Sep 17 00:00:00 2001 From: Miles Acquaviva Date: Mon, 17 Feb 2025 20:03:55 -0500 Subject: [PATCH 54/68] Added and implemented TrailType enum (#5059) * added TrailType enum * fixed build, moved declaration * added enhancement comment * Apply suggestions from code review --------- Co-authored-by: link5669 --- soh/include/z64effect.h | 18 +++++++++++++++--- soh/src/code/z_eff_blure.c | 18 +++++++++--------- soh/src/code/z_player_lib.c | 4 ++-- .../overlays/actors/ovl_En_Arrow/z_en_arrow.c | 8 ++++---- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- .../overlays/actors/ovl_En_Boom/z_en_boom.c | 2 +- .../actors/ovl_player_actor/z_player.c | 2 +- 7 files changed, 33 insertions(+), 21 deletions(-) diff --git a/soh/include/z64effect.h b/soh/include/z64effect.h index d1d6b3329..6804e0981 100644 --- a/soh/include/z64effect.h +++ b/soh/include/z64effect.h @@ -14,6 +14,18 @@ struct PlayState; #define TOTAL_EFFECT_COUNT SPARK_COUNT + BLURE_COUNT + SHIELD_PARTICLE_COUNT +typedef enum { + TRAIL_TYPE_REST, + TRAIL_TYPE_SWORDS, + TRAIL_TYPE_BOOMERANG, + TRAIL_TYPE_BOMBCHU, + TRAIL_TYPE_KOKIRI_SWORD, + TRAIL_TYPE_MASTER_SWORD, + TRAIL_TYPE_BIGGORON_SWORD, + TRAIL_TYPE_STICK, + TRAIL_TYPE_HAMMER +} TrailType; //SOH [Enhancements] + typedef struct { /* 0x00 */ u8 active; /* 0x01 */ u8 unk_01; @@ -73,7 +85,7 @@ typedef struct { /* 0x194 */ s32 elemDuration; /* 0x198 */ s32 unkFlag; /* 0x19C */ s32 calcMode; - /* 0x1A0 */ u8 trailType; // 1 is swords, 2 is boomerang, 3 is bombchu, 0 is rest + /* 0x1A0 */ TrailType trailType; //SOH [Enhancements] } EffectBlureInit1; // size = 0x1A0 typedef struct { @@ -90,7 +102,7 @@ typedef struct { /* 0x1B */ u8 mode4Param; /* 0x1C */ Color_RGBA8 altPrimColor; // used with drawMode 1 /* 0x20 */ Color_RGBA8 altEnvColor; // used with drawMode 1 - /* 0x1A0 */ u8 trailType; // 1 is swords, 2 is boomerang, 3 is bombchu, 4 is stick, 0 is rest + /* 0x1A0 */ TrailType trailType; //SOH [Enhancements] } EffectBlureInit2; // size = 0x24 typedef struct { @@ -110,7 +122,7 @@ typedef struct { /* 0x1A1 */ u8 drawMode; // 0: simple; 1: simple with alt colors; 2+: smooth /* 0x1A2 */ Color_RGBA8 altPrimColor; // used with drawMode 1 /* 0x1A6 */ Color_RGBA8 altEnvColor; // used with drawMode 1 - /* 0x1A0 */ u8 trailType; // 1 is default swords, 2 is boomerang, 3 is bombchu, 0 is rest. 4 is Kokiri, 5 is Master, 6 is BGS, 7 is Stick, 8 is Hammer. + /* 0x1A0 */ TrailType trailType; //SOH [Enhancements] } EffectBlure; // size = 0x1AC typedef struct { diff --git a/soh/src/code/z_eff_blure.c b/soh/src/code/z_eff_blure.c index 82e50fc65..f5716dc16 100644 --- a/soh/src/code/z_eff_blure.c +++ b/soh/src/code/z_eff_blure.c @@ -206,8 +206,8 @@ s32 EffectBlure_Update(void* thisx) { static u8 changed = 0; u8 reset = 0; - switch (this->trailType) { //there HAS to be a better way to do this. - case 2: + switch (this->trailType) { + case TRAIL_TYPE_BOOMERANG: if (CVarGetInteger(CVAR_COSMETIC("Trails.Boomerang.Changed"), 0)) { color = CVarGetColor(CVAR_COSMETIC("Trails.Boomerang.Value"), (Color_RGBA8){ 255, 255, 100, 255 }); changed = 1; @@ -216,7 +216,7 @@ s32 EffectBlure_Update(void* thisx) { reset = 1; } break; - case 3: + case TRAIL_TYPE_BOMBCHU: if (CVarGetInteger(CVAR_COSMETIC("Trails.Bombchu.Changed"), 0)) { color = CVarGetColor(CVAR_COSMETIC("Trails.Bombchu.Value"), (Color_RGBA8){ 250, 0, 0, 255 }); this->p1StartColor.r = color.r; @@ -247,7 +247,7 @@ s32 EffectBlure_Update(void* thisx) { this->p2EndColor.b = color.b * 0.4f; } break; - case 4: + case TRAIL_TYPE_KOKIRI_SWORD: if (CVarGetInteger(CVAR_COSMETIC("Trails.KokiriSword.Changed"), 0)) { color = CVarGetColor(CVAR_COSMETIC("Trails.KokiriSword.Value"), (Color_RGBA8){ 255, 255, 255, 255 }); changed = 1; @@ -256,7 +256,7 @@ s32 EffectBlure_Update(void* thisx) { reset = 1; } break; - case 5: + case TRAIL_TYPE_MASTER_SWORD: if (CVarGetInteger(CVAR_COSMETIC("Trails.MasterSword.Changed"), 0)) { color = CVarGetColor(CVAR_COSMETIC("Trails.MasterSword.Value"), (Color_RGBA8){ 255, 255, 255, 255 }); changed = 1; @@ -265,7 +265,7 @@ s32 EffectBlure_Update(void* thisx) { reset = 1; } break; - case 6: + case TRAIL_TYPE_BIGGORON_SWORD: if (CVarGetInteger(CVAR_COSMETIC("Trails.BiggoronSword.Changed"), 0)) { color = CVarGetColor(CVAR_COSMETIC("Trails.BiggoronSword.Value"), (Color_RGBA8){ 255, 255, 255, 255 }); changed = 1; @@ -274,7 +274,7 @@ s32 EffectBlure_Update(void* thisx) { reset = 1; } break; - case 7: + case TRAIL_TYPE_STICK: if (CVarGetInteger(CVAR_COSMETIC("Trails.Stick.Changed"), 0)) { color = CVarGetColor(CVAR_COSMETIC("Trails.Stick.Value"), (Color_RGBA8){ 255, 255, 255, 255 }); changed = 1; @@ -283,7 +283,7 @@ s32 EffectBlure_Update(void* thisx) { reset = 1; } break; - case 8: + case TRAIL_TYPE_HAMMER: if (CVarGetInteger(CVAR_COSMETIC("Trails.Hammer.Changed"), 0)) { color = CVarGetColor(CVAR_COSMETIC("Trails.Hammer.Value"), (Color_RGBA8){ 255, 255, 255, 255 }); changed = 1; @@ -316,7 +316,7 @@ s32 EffectBlure_Update(void* thisx) { } // Don't override boomerang and bombchu trail durations - if (this->trailType != 2 && this->trailType != 3) { + if (this->trailType != TRAIL_TYPE_BOOMERANG && this->trailType != TRAIL_TYPE_BOMBCHU) { if (CVarGetInteger(CVAR_COSMETIC("Trails.Duration.Changed"), 0)) { this->elemDuration = CVarGetInteger(CVAR_COSMETIC("Trails.Duration.Value"), 4); } diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index dd15a4932..9d4b55091 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -1748,7 +1748,7 @@ f32 sMeleeWeaponLengths[] = { }; f32 sSwordTypes[] = { - 0, 5, 4, 6, 0, 8, + TRAIL_TYPE_REST, TRAIL_TYPE_MASTER_SWORD, TRAIL_TYPE_KOKIRI_SWORD, TRAIL_TYPE_BIGGORON_SWORD, TRAIL_TYPE_REST, TRAIL_TYPE_HAMMER, }; Gfx* sBottleDLists[] = { gLinkAdultBottleDL, gLinkChildBottleDL }; @@ -1821,7 +1821,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve D_80126080.x = this->unk_85C * 5000.0f; func_80090A28(this, sp124); if (this->meleeWeaponState != 0) { - EffectBlure_ChangeType(Effect_GetByIndex(this->meleeWeaponEffectIndex), 7); // stick sword type + EffectBlure_ChangeType(Effect_GetByIndex(this->meleeWeaponEffectIndex), TRAIL_TYPE_STICK); func_800906D4(play, this, sp124); } else { Math_Vec3f_Copy(&this->meleeWeaponInfo[0].tip, &sp124[0]); diff --git a/soh/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/soh/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index 8a62ff4ba..f6822ed49 100644 --- a/soh/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/soh/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -64,19 +64,19 @@ void EnArrow_SetupAction(EnArrow* this, EnArrowActionFunc actionFunc) { void EnArrow_Init(Actor* thisx, PlayState* play) { static EffectBlureInit2 blureNormal = { 0, 4, 0, { 0, 255, 200, 255 }, { 0, 255, 255, 255 }, { 0, 255, 200, 0 }, { 0, 255, 255, 0 }, 16, - 0, 1, 0, { 255, 255, 170, 255 }, { 0, 150, 0, 0 }, 0, + 0, 1, 0, { 255, 255, 170, 255 }, { 0, 150, 0, 0 }, TRAIL_TYPE_REST, }; static EffectBlureInit2 blureFire = { 0, 4, 0, { 0, 255, 200, 255 }, { 0, 255, 255, 255 }, { 0, 255, 200, 0 }, { 0, 255, 255, 0 }, 16, - 0, 1, 0, { 255, 200, 0, 255 }, { 255, 0, 0, 0 }, 0, + 0, 1, 0, { 255, 200, 0, 255 }, { 255, 0, 0, 0 }, TRAIL_TYPE_REST, }; static EffectBlureInit2 blureIce = { 0, 4, 0, { 0, 255, 200, 255 }, { 0, 255, 255, 255 }, { 0, 255, 200, 0 }, { 0, 255, 255, 0 }, 16, - 0, 1, 0, { 170, 255, 255, 255 }, { 0, 100, 255, 0 }, 0, + 0, 1, 0, { 170, 255, 255, 255 }, { 0, 100, 255, 0 }, TRAIL_TYPE_REST, }; static EffectBlureInit2 blureLight = { 0, 4, 0, { 0, 255, 200, 255 }, { 0, 255, 255, 255 }, { 0, 255, 200, 0 }, { 0, 255, 255, 0 }, 16, - 0, 1, 0, { 255, 255, 170, 255 }, { 255, 255, 0, 0 }, 0, + 0, 1, 0, { 255, 255, 170, 255 }, { 255, 255, 0, 0 }, TRAIL_TYPE_REST, }; static u32 dmgFlags[] = { 0x00000800, 0x00000020, 0x00000020, 0x00000800, 0x00001000, diff --git a/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c index e0b2bd7cb..12fbbbde9 100644 --- a/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c +++ b/soh/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c @@ -85,7 +85,7 @@ void EnBomChu_Init(Actor* thisx, PlayState* play) { blureInit.elemDuration = 16; blureInit.unkFlag = 0; blureInit.calcMode = 0; - blureInit.trailType = 3; + blureInit.trailType = TRAIL_TYPE_BOMBCHU; Effect_Add(play, &this->blure1Index, EFFECT_BLURE1, 0, 0, &blureInit); Effect_Add(play, &this->blure2Index, EFFECT_BLURE1, 0, 0, &blureInit); diff --git a/soh/src/overlays/actors/ovl_En_Boom/z_en_boom.c b/soh/src/overlays/actors/ovl_En_Boom/z_en_boom.c index 6f4d00084..85eae391e 100644 --- a/soh/src/overlays/actors/ovl_En_Boom/z_en_boom.c +++ b/soh/src/overlays/actors/ovl_En_Boom/z_en_boom.c @@ -89,7 +89,7 @@ void EnBoom_Init(Actor* thisx, PlayState* play) { blure.elemDuration = 8; blure.unkFlag = 0; blure.calcMode = 0; - blure.trailType = 2; + blure.trailType = TRAIL_TYPE_BOOMERANG; Effect_Add(play, &this->effectIndex, EFFECT_BLURE1, 0, 0, &blure); diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index f939d5030..1c9d5a688 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -10696,7 +10696,7 @@ static InitChainEntry sInitChain[] = { static EffectBlureInit2 blureSword = { 0, 8, 0, { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, 4, - 0, 2, 0, { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, 1, + 0, 2, 0, { 255, 255, 255, 255 }, { 255, 255, 255, 64 }, TRAIL_TYPE_SWORDS, }; static Vec3s sSkeletonBaseTransl = { -57, 3377, 0 }; From 3d7da51fc718e2dee4d3ae48e05f891b739d67f5 Mon Sep 17 00:00:00 2001 From: Archez Date: Mon, 17 Feb 2025 20:33:36 -0500 Subject: [PATCH 55/68] Remove committed mods folder (#5082) --- mods/custom_mod_files_go_here.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mods/custom_mod_files_go_here.txt diff --git a/mods/custom_mod_files_go_here.txt b/mods/custom_mod_files_go_here.txt deleted file mode 100644 index e69de29bb..000000000 From 75f33a00d82c06224f0baba1175dead1e81279e9 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Wed, 19 Feb 2025 19:08:24 -0500 Subject: [PATCH 56/68] Remove Right-Stick Aiming from Enhancement Presets (#5086) --- soh/soh/Enhancements/presets.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index 83b0e94d5..329fbcdc8 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -565,8 +565,6 @@ const std::vector vanillaPlusPresetEntries = { PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), // Prevent Dropped Ocarina Inputs PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), - // Right Stick Aiming - PRESET_ENTRY_S32(CVAR_SETTING("Controls.RightStickAim"), 1), // Text Speed (1 to 5) PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), @@ -637,8 +635,6 @@ const std::vector enhancedPresetEntries = { PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), // Prevent Dropped Ocarina Inputs PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), - // Right Stick Aiming - PRESET_ENTRY_S32(CVAR_SETTING("Controls.RightStickAim"), 1), // Text Speed (1 to 5) PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), @@ -770,8 +766,6 @@ const std::vector randomizerPresetEntries = { PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), // Prevent Dropped Ocarina Inputs PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), - // Right Stick Aiming - PRESET_ENTRY_S32(CVAR_SETTING("Controls.RightStickAim"), 1), // Text Speed (1 to 5) PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), From b6e2a995f10d37d20a842511a97f50d9f1ef7a5a Mon Sep 17 00:00:00 2001 From: Jordan Longstaff Date: Wed, 19 Feb 2025 20:22:56 -0500 Subject: [PATCH 57/68] Use VB hook to fix Deku Nut upgrade bug (#5047) * Use VB hook to fix Deku Nut upgrade bug * Use constexpr, remove unused extern * Separate IS_RANDO out of value macro * Restore mask check in hook * Call VB hook in SkipMiscInteractions hook * Mask of Truth hook not registered in rando --- .../Enhancements/Fixes/DekuNutUpgradeFix.cpp | 43 +++++++++++++++++++ .../vanilla-behavior/GIVanillaBehavior.h | 16 +++++++ .../Enhancements/timesaver_hook_handlers.cpp | 4 +- soh/soh/SohGui/SohMenuBar.cpp | 5 ++- soh/src/code/z_parameter.c | 2 +- .../actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c | 5 ++- 6 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 soh/soh/Enhancements/Fixes/DekuNutUpgradeFix.cpp diff --git a/soh/soh/Enhancements/Fixes/DekuNutUpgradeFix.cpp b/soh/soh/Enhancements/Fixes/DekuNutUpgradeFix.cpp new file mode 100644 index 000000000..2e095c59f --- /dev/null +++ b/soh/soh/Enhancements/Fixes/DekuNutUpgradeFix.cpp @@ -0,0 +1,43 @@ +#include +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/ShipInit.hpp" +#include "functions.h" +#include "macros.h" +#include "variables.h" +#include "z64save.h" + +extern "C" PlayState* gPlayState; + +static constexpr int32_t CVAR_NUT_UPGRADE_FIX_DEFAULT = 0; +#define CVAR_NUT_UPGRADE_FIX_NAME CVAR_ENHANCEMENT("DekuNutUpgradeFix") +#define CVAR_NUT_UPGRADE_FIX_VALUE CVarGetInteger(CVAR_NUT_UPGRADE_FIX_NAME, CVAR_NUT_UPGRADE_FIX_DEFAULT) + +void DekuNutUpgradeFixAtForestStage(bool* should) { + // This check is needed because of an intentional fallthrough at the source + if (Player_GetMask(gPlayState) == PLAYER_MASK_SKULL) { + return; + } + + s32 expectedNutUpgrades = (INV_CONTENT(ITEM_NUT) == ITEM_NUT ? 1 : 0) + + (Flags_GetInfTable(INFTABLE_BOUGHT_NUT_UPGRADE) ? 1 : 0) + + (Flags_GetItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE) ? 1 : 0); + s32 actualNutUpgrades = CUR_UPG_VALUE(UPG_NUTS); + + if (expectedNutUpgrades != actualNutUpgrades) { + Flags_UnsetItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE); + *should = true; + } +} + +void DekuNutUpgradeSetByPoachersSaw(bool* should) { + *should = false; +} + +void RegisterDekuNutUpgradeFix() { + COND_VB_SHOULD(VB_POACHERS_SAW_SET_DEKU_NUT_UPGRADE_FLAG, CVAR_NUT_UPGRADE_FIX_VALUE || IS_RANDO, + { DekuNutUpgradeSetByPoachersSaw(should); }); + COND_VB_SHOULD(VB_DEKU_SCRUBS_REACT_TO_MASK_OF_TRUTH, CVAR_NUT_UPGRADE_FIX_VALUE && !IS_RANDO, + { DekuNutUpgradeFixAtForestStage(should); }); +} + +static RegisterShipInitFunc initFunc(RegisterDekuNutUpgradeFix, { CVAR_NUT_UPGRADE_FIX_NAME, "IS_RANDO" }); diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index a9118c776..1157f3c75 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -287,6 +287,14 @@ typedef enum { // - `*EnTk` VB_DAMPE_IN_GRAVEYARD_DESPAWN, + // #### `result` + // ```c + // !Flags_GetItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE) && (Player_GetMask(play) != PLAYER_MASK_SKULL) + // ``` + // #### `args` + // - None + VB_DEKU_SCRUBS_REACT_TO_MASK_OF_TRUTH, + // #### `result` // ```c // CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST) @@ -1500,6 +1508,14 @@ typedef enum { // - `*DemoIm` VB_PLAY_ZELDAS_LULLABY_CS, + // #### `result` + // ```c + // item == ITEM_SAW + // ``` + // #### `args` + // - None + VB_POACHERS_SAW_SET_DEKU_NUT_UPGRADE_FLAG, + // #### `result` // ```c // (dropParams >= ITEM00_RUPEE_GREEN) && (dropParams <= ITEM00_BOMBS_SPECIAL) diff --git a/soh/soh/Enhancements/timesaver_hook_handlers.cpp b/soh/soh/Enhancements/timesaver_hook_handlers.cpp index d4675621f..eee2a0e9b 100644 --- a/soh/soh/Enhancements/timesaver_hook_handlers.cpp +++ b/soh/soh/Enhancements/timesaver_hook_handlers.cpp @@ -92,7 +92,9 @@ void EnDntDemo_JudgeSkipToReward(EnDntDemo* enDntDemo, PlayState* play) { return; } case PLAYER_MASK_TRUTH: { - Flags_SetItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE); + if (GameInteractor_Should(VB_DEKU_SCRUBS_REACT_TO_MASK_OF_TRUTH, true)) { + Flags_SetItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE); + } return; } default: { diff --git a/soh/soh/SohGui/SohMenuBar.cpp b/soh/soh/SohGui/SohMenuBar.cpp index 053ed9e13..5fd7324fb 100644 --- a/soh/soh/SohGui/SohMenuBar.cpp +++ b/soh/soh/SohGui/SohMenuBar.cpp @@ -1335,7 +1335,10 @@ void DrawEnhancementsMenu() { UIWidgets::PaddedEnhancementCheckbox("Fix the Gravedigging Tour Glitch", CVAR_ENHANCEMENT("GravediggingTourFix"), true, false, SaveManager::Instance->IsRandoFile(), "This setting is always enabled in randomizer files", UIWidgets::CheckboxGraphics::Checkmark); UIWidgets::Tooltip("Fixes a bug where the Gravedigging Tour Heart Piece disappears if the area reloads"); - UIWidgets::PaddedEnhancementCheckbox("Fix Deku Nut upgrade", CVAR_ENHANCEMENT("DekuNutUpgradeFix"), true, false); + UIWidgets::PaddedEnhancementCheckbox( + "Fix Deku Nut upgrade", CVAR_ENHANCEMENT("DekuNutUpgradeFix"), true, false, IS_RANDO, + "This setting is forcefully enabled when you are playing a randomizer.", + UIWidgets::CheckboxGraphics::Checkmark); UIWidgets::Tooltip("Prevents the Forest Stage Deku Nut upgrade from becoming unobtainable after receiving the Poacher's Saw"); UIWidgets::PaddedEnhancementCheckbox("Fix Navi text HUD position", CVAR_ENHANCEMENT("NaviTextFix"), true, false); UIWidgets::Tooltip("Correctly centers the Navi text prompt on the HUD's C-Up button"); diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index a696292ef..a331e4ace 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -2442,7 +2442,7 @@ u8 Item_Give(PlayState* play, u8 item) { } return Return_Item(item, MOD_NONE, ITEM_NONE); } else if ((item >= ITEM_WEIRD_EGG) && (item <= ITEM_CLAIM_CHECK)) { - if ((item == ITEM_SAW) && CVarGetInteger(CVAR_ENHANCEMENT("DekuNutUpgradeFix"), 0) == 0) { + if (GameInteractor_Should(VB_POACHERS_SAW_SET_DEKU_NUT_UPGRADE_FLAG, item == ITEM_SAW)) { Flags_SetItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE); } diff --git a/soh/src/overlays/actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c b/soh/src/overlays/actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c index f9328d729..05cda9db4 100644 --- a/soh/src/overlays/actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c +++ b/soh/src/overlays/actors/ovl_En_Dnt_Demo/z_en_dnt_demo.c @@ -10,6 +10,7 @@ #include "overlays/actors/ovl_En_Dnt_Nomal/z_en_dnt_nomal.h" #include "vt.h" #include "soh/OTRGlobals.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #define FLAGS 0 @@ -165,7 +166,9 @@ void EnDntDemo_Judge(EnDntDemo* this, PlayState* play) { break; } case PLAYER_MASK_TRUTH: - if (!Flags_GetItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE) && (Player_GetMask(play) != PLAYER_MASK_SKULL)) { + if (GameInteractor_Should(VB_DEKU_SCRUBS_REACT_TO_MASK_OF_TRUTH, + !Flags_GetItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE) && + (Player_GetMask(play) != PLAYER_MASK_SKULL))) { Audio_PlaySoundGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); this->prize = DNT_PRIZE_NUTS; From 49c5e19041112273d4a5c5fdc1609c48ec6866ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Fri, 21 Feb 2025 03:37:57 +0000 Subject: [PATCH 58/68] Fix rando generation crash (#5076) Assertion failed in CreateChildAltarHints because all 3 stones were placed on fairies/beehives while those were disabled Fix: consolidate on Context building settings dependant location lists. Overworld vs Dungeon should not operate so differently --- .../Enhancements/randomizer/3drando/fill.cpp | 4 +-- .../Enhancements/randomizer/3drando/hints.cpp | 14 ++++---- soh/soh/Enhancements/randomizer/context.cpp | 1 + soh/soh/Enhancements/randomizer/context.h | 1 + .../Enhancements/randomizer/fishsanity.cpp | 2 +- .../overworld/castle_grounds.cpp | 2 +- .../Enhancements/randomizer/location_list.cpp | 32 ------------------- soh/soh/Enhancements/randomizer/static_data.h | 2 -- 8 files changed, 12 insertions(+), 46 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index ff3413e98..351c57fd2 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -1077,7 +1077,7 @@ static void RandomizeDungeonItems() { //Randomize Any Dungeon and Overworld pools AssumedFill(anyDungeonItems, anyDungeonLocations, true); - AssumedFill(overworldItems, Rando::StaticData::GetOverworldLocations(), true); + AssumedFill(overworldItems, ctx->overworldLocations, true); //Randomize maps and compasses after since they're not advancement items for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { @@ -1086,7 +1086,7 @@ static void RandomizeDungeonItems() { AssumedFill(mapAndCompassItems, anyDungeonLocations, true); } else if (ctx->GetOption(RSK_SHUFFLE_MAPANDCOMPASS).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { auto mapAndCompassItems = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){return i == dungeon->GetMap() || i == dungeon->GetCompass();}); - AssumedFill(mapAndCompassItems, Rando::StaticData::GetOverworldLocations(), true); + AssumedFill(mapAndCompassItems, ctx->overworldLocations, true); } } } diff --git a/soh/soh/Enhancements/randomizer/3drando/hints.cpp b/soh/soh/Enhancements/randomizer/3drando/hints.cpp index b9e9f4688..932b97316 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hints.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hints.cpp @@ -695,15 +695,13 @@ std::vector FindItemsAndMarkHinted(std::vector i void CreateChildAltarHint() { auto ctx = Rando::Context::GetInstance(); - if (!ctx->GetHint(RH_ALTAR_CHILD)->IsEnabled()){ + if (!ctx->GetHint(RH_ALTAR_CHILD)->IsEnabled() && ctx->GetOption(RSK_TOT_ALTAR_HINT)){ std::vector stoneLocs = {}; - if (ctx->GetOption(RSK_TOT_ALTAR_HINT)) { - //force marking the rewards as hinted if they are at the end of dungeons as they can be inferred - if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON) || ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_VANILLA)) { - stoneLocs = FindItemsAndMarkHinted({RG_KOKIRI_EMERALD, RG_GORON_RUBY, RG_ZORA_SAPPHIRE}, {}); - } else { - stoneLocs = FindItemsAndMarkHinted({RG_KOKIRI_EMERALD, RG_GORON_RUBY, RG_ZORA_SAPPHIRE}, {RC_ALTAR_HINT_CHILD}); - } + //force marking the rewards as hinted if they are at the end of dungeons as they can be inferred + if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON) || ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_VANILLA)) { + stoneLocs = FindItemsAndMarkHinted({RG_KOKIRI_EMERALD, RG_GORON_RUBY, RG_ZORA_SAPPHIRE}, {}); + } else { + stoneLocs = FindItemsAndMarkHinted({RG_KOKIRI_EMERALD, RG_GORON_RUBY, RG_ZORA_SAPPHIRE}, {RC_ALTAR_HINT_CHILD}); } std::vector stoneAreas = {}; for (auto loc : stoneLocs){ diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index ba9ab6d2c..9fcf71d55 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -203,6 +203,7 @@ void Context::GenerateLocationPool() { } // If we've gotten past all the conditions where an overworld location should not be // shuffled, add it to the pool. + AddLocation(location.GetRandomizerCheck(), &overworldLocations); AddLocation(location.GetRandomizerCheck()); } else { // is a dungeon check auto* dungeon = GetDungeon(location.GetArea() - RCAREA_DEKU_TREE); diff --git a/soh/soh/Enhancements/randomizer/context.h b/soh/soh/Enhancements/randomizer/context.h index b90f251c7..bd6bc1735 100644 --- a/soh/soh/Enhancements/randomizer/context.h +++ b/soh/soh/Enhancements/randomizer/context.h @@ -47,6 +47,7 @@ class Context { void PlaceItemInLocation(RandomizerCheck locKey, RandomizerGet item, bool applyEffectImmediately = false, bool setHidden = false); std::vector allLocations; + std::vector overworldLocations; void AddLocation(RandomizerCheck loc, std::vector* destination = nullptr); template void AddLocations(const Container& locations, std::vector* destination = nullptr); diff --git a/soh/soh/Enhancements/randomizer/fishsanity.cpp b/soh/soh/Enhancements/randomizer/fishsanity.cpp index f07546de9..9da52ddc2 100644 --- a/soh/soh/Enhancements/randomizer/fishsanity.cpp +++ b/soh/soh/Enhancements/randomizer/fishsanity.cpp @@ -229,7 +229,7 @@ namespace Rando { if (ageSplit && !IsFish(&mCurrPondFish.second) && tableEntry.second != RC_UNKNOWN_CHECK && (!Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(tableEntry.second)) || i == pondCount - 1)) { - mCurrPondFish.second = mCurrPondFish.second = GetPondFish(params, true); + mCurrPondFish.second = GetPondFish(params, true); } } } diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp index 6a3069b18..c4dcf4f02 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp @@ -5,7 +5,7 @@ using namespace Rando; void RegionTable_Init_CastleGrounds() { //With multi-area support {RA_CASTLE_GROUNDS} is not strictly required anymore, as any interior here could inherit both - //{RA_HYRULE_CASTLE} and {RA_OUTSIDE_GANONS_CASTLE}, but an setting to merge the latter 2 into the former may be preffered + //{RA_HYRULE_CASTLE} and {RA_OUTSIDE_GANONS_CASTLE}, but a setting to merge the latter 2 into the former may be preferred areaTable[RR_CASTLE_GROUNDS] = Region("Castle Grounds", "Castle Grounds", {RA_CASTLE_GROUNDS}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(RR_THE_MARKET, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index f005391d7..b4e26c84a 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -33,16 +33,6 @@ std::vector Rando::StaticData::GetOverworldFishLocations() { return overworldFishLocations; } -std::vector Rando::StaticData::GetOverworldPotLocations() { - std::vector overworldPotLocations = {}; - for (Location& location : locationTable) { - if (location.GetRCType() == RCTYPE_POT && location.IsOverworld() && location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { - overworldPotLocations.push_back(location.GetRandomizerCheck()); - } - } - return overworldPotLocations; -} - std::vector Rando::StaticData::GetStaticHintLocations() { std::vector staticHintLocations = {}; for (Location& location : locationTable) { @@ -103,28 +93,6 @@ std::vector Rando::StaticData::GetShopLocations() { return shopLocations; } -std::vector Rando::StaticData::GetOverworldLocations() { - //RANDOTODO better way of filling the initial location pool, among other things. - std::vector overworldLocations = {}; - auto ctx = Rando::Context::GetInstance(); - for (Location& location : locationTable) { - if ( - location.IsOverworld() && - location.GetRandomizerCheck() != RC_UNKNOWN_CHECK && - location.GetRandomizerCheck() != RC_TRIFORCE_COMPLETED && //not really an overworld check - location.GetRCType() != RCTYPE_FISH && // temp fix while locations are properly sorted out - location.GetRCType() != RCTYPE_POT && // Same as fish - location.GetRCType() != RCTYPE_CHEST_GAME && //this is supposed to be excluded - (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE) || location.GetRCType() != RCTYPE_ADULT_TRADE) && //trade is handled elsewhere in location pool - location.GetRCType() != RCTYPE_STATIC_HINT && - location.GetRCType() != RCTYPE_GOSSIP_STONE //don't put items on hints - ) { - overworldLocations.push_back(location.GetRandomizerCheck()); - } - } - return overworldLocations; -} - std::vector Rando::StaticData::GetAllDungeonLocations() { auto ctx = Rando::Context::GetInstance(); std::vector dungeonLocations; diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 852fe3841..8936294a2 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -35,7 +35,6 @@ class StaticData { static std::unordered_map PopulateTranslationMap(std::unordered_map input); static std::unordered_map PopulateTranslationMap(std::unordered_map input); static std::multimap, RandomizerCheck> CheckFromActorMultimap; - static std::vector GetOverworldLocations(); static std::vector GetAllDungeonLocations(); static std::vector dungeonRewardLocations; static std::vector GetShopLocations(); @@ -46,7 +45,6 @@ class StaticData { static std::vector GetStaticHintLocations(); static std::vector GetPondFishLocations(); static std::vector GetOverworldFishLocations(); - static std::vector GetOverworldPotLocations(); static std::vector GetOverworldFairyLocations(); static void RegisterFishLocations(); static void RegisterFairyLocations(); From acdb2dd32499ccb3983bdc696a33a318a599e8ea Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Thu, 20 Feb 2025 20:48:11 -0800 Subject: [PATCH 59/68] bump lus (#5092) --- libultraship | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libultraship b/libultraship index f776531ab..02bb77ef2 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit f776531abf74db98f8d9c7da64e9a21590af65ad +Subproject commit 02bb77ef253e2de0969fd2cb36ad2e870677d18d From 51310db68fc66725f5720e6d7aa7dcda0b17b8fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Tue, 25 Feb 2025 08:11:46 +0000 Subject: [PATCH 60/68] ShuffleCows.cpp (#5093) --- .../Enhancements/randomizer/ShuffleCows.cpp | 74 +++++++++++++++++++ .../Enhancements/randomizer/hook_handlers.cpp | 54 -------------- .../Enhancements/randomizer/location_list.cpp | 12 --- soh/soh/Enhancements/randomizer/static_data.h | 1 + soh/soh/OTRGlobals.cpp | 2 +- 5 files changed, 76 insertions(+), 67 deletions(-) create mode 100644 soh/soh/Enhancements/randomizer/ShuffleCows.cpp diff --git a/soh/soh/Enhancements/randomizer/ShuffleCows.cpp b/soh/soh/Enhancements/randomizer/ShuffleCows.cpp new file mode 100644 index 000000000..5fc86f76d --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleCows.cpp @@ -0,0 +1,74 @@ +#include +#include "static_data.h" + +extern "C" { +#include "src/overlays/actors/ovl_En_Cow/z_en_cow.h" +extern PlayState* gPlayState; +} + +void EnCow_MoveForRandomizer(EnCow* enCow, PlayState* play) { + bool moved = false; + + // Don't reposition the tail + if (enCow->actor.params != 0) { + return; + } + + if (play->sceneNum == SCENE_LON_LON_BUILDINGS && enCow->actor.world.pos.x == -108 && + enCow->actor.world.pos.z == -65) { + // Move left cow in lon lon tower + enCow->actor.world.pos.x = -229.0f; + enCow->actor.world.pos.z = 157.0f; + enCow->actor.shape.rot.y = 15783.0f; + moved = true; + } else if (play->sceneNum == SCENE_STABLE && enCow->actor.world.pos.x == -3 && enCow->actor.world.pos.z == -254) { + // Move right cow in lon lon stable + enCow->actor.world.pos.x += 119.0f; + moved = true; + } + + if (moved) { + // Reposition collider + func_809DEE9C(enCow); + } +} + +void RegisterShuffleCows() { + bool shouldRegister = IS_RANDO && Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_COWS).Get(); + + COND_VB_SHOULD(VB_GIVE_ITEM_FROM_COW, shouldRegister, { + EnCow* enCow = va_arg(args, EnCow*); + CowIdentity cowIdentity = OTRGlobals::Instance->gRandomizer->IdentifyCow(gPlayState->sceneNum, enCow->actor.world.pos.x, enCow->actor.world.pos.z); + // Has this cow already rewarded an item? + if (!Flags_GetRandomizerInf(cowIdentity.randomizerInf)) { + Flags_SetRandomizerInf(cowIdentity.randomizerInf); + // setting the ocarina mode here prevents intermittent issues + // with the item get not triggering until walking away + gPlayState->msgCtx.ocarinaMode = OCARINA_MODE_00; + *should = false; + } + }); + + COND_VB_SHOULD(VB_DESPAWN_HORSE_RACE_COW, shouldRegister, { + EnCow* enCow = va_arg(args, EnCow*); + // If this is a cow we have to move, then move it now. + EnCow_MoveForRandomizer(enCow, gPlayState); + }); +} + +static RegisterShipInitFunc initFunc(RegisterShuffleCows, { "IS_RANDO" }); + +void Rando::StaticData::RegisterCowLocations() { + locationTable[RC_KF_LINKS_HOUSE_COW] = Location::Base(RC_KF_LINKS_HOUSE_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_LINKS_HOUSE, 0x00, "Links House Cow", RHT_KF_LINKS_HOUSE_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_KF_LINKS_HOUSE_COW)); + locationTable[RC_HF_COW_GROTTO_COW] = Location::Base(RC_HF_COW_GROTTO_COW, RCQUEST_BOTH, RCTYPE_COW, RCAREA_HYRULE_FIELD, ACTOR_EN_COW, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3485, -291), "Cow Grotto Cow", RHT_HF_COW_GROTTO_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_HF_COW_GROTTO_COW)); + locationTable[RC_LLR_STABLES_LEFT_COW] = Location::Base(RC_LLR_STABLES_LEFT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_STABLE, TWO_ACTOR_PARAMS(-122, -254), "Stables Left Cow", RHT_LLR_STABLES_LEFT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_STABLES_LEFT_COW)); + locationTable[RC_LLR_STABLES_RIGHT_COW] = Location::Base(RC_LLR_STABLES_RIGHT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_STABLE, TWO_ACTOR_PARAMS(116, -254), "Stables Right Cow", RHT_LLR_STABLES_RIGHT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_STABLES_RIGHT_COW)); + locationTable[RC_LLR_TOWER_LEFT_COW] = Location::Base(RC_LLR_TOWER_LEFT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(-229, 157), "Tower Left Cow", RHT_LLR_TOWER_LEFT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_TOWER_LEFT_COW)); + locationTable[RC_LLR_TOWER_RIGHT_COW] = Location::Base(RC_LLR_TOWER_RIGHT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(-142, -140), "Tower Right Cow", RHT_LLR_TOWER_RIGHT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_TOWER_RIGHT_COW)); + locationTable[RC_KAK_IMPAS_HOUSE_COW] = Location::Base(RC_KAK_IMPAS_HOUSE_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_IMPAS_HOUSE, 0x00, "Impas House Cow", RHT_KAK_IMPAS_HOUSE_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_KAK_IMPAS_HOUSE_COW)); + locationTable[RC_DMT_COW_GROTTO_COW] = Location::Base(RC_DMT_COW_GROTTO_COW, RCQUEST_BOTH, RCTYPE_COW, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_COW, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2444, -471), "Cow Grotto Cow", RHT_DMT_COW_GROTTO_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_DMT_COW_GROTTO_COW)); + locationTable[RC_GV_COW] = Location::Base(RC_GV_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_GERUDO_VALLEY, 0x00, "Cow", RHT_GV_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_GV_COW)); + locationTable[RC_JABU_JABUS_BELLY_MQ_COW] = Location::Base(RC_JABU_JABUS_BELLY_MQ_COW, RCQUEST_MQ, RCTYPE_COW, ACTOR_EN_COW, SCENE_JABU_JABU, 0x00, "MQ Cow", RHT_JABU_JABUS_BELLY_MQ_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_JABU_JABUS_BELLY_MQ_COW)); +} + +static RegisterShipInitFunc registerFunc(Rando::StaticData::RegisterCowLocations); \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index 5eee3541a..e236666f6 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -26,7 +26,6 @@ extern "C" { #include "soh/Enhancements/randomizer/randomizer_grotto.h" #include "src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.h" #include "src/overlays/actors/ovl_En_Si/z_en_si.h" -#include "src/overlays/actors/ovl_En_Cow/z_en_cow.h" #include "src/overlays/actors/ovl_En_Shopnuts/z_en_shopnuts.h" #include "src/overlays/actors/ovl_En_Dns/z_en_dns.h" #include "src/overlays/actors/ovl_En_Gb/z_en_gb.h" @@ -512,33 +511,6 @@ void ItemEtcetera_UpdateRandomizedFireArrow(ItemEtcetera* itemEtcetera, PlayStat } } -void EnCow_MoveForRandomizer(EnCow* enCow, PlayState* play) { - bool moved = false; - - // Don't reposition the tail - if (enCow->actor.params != 0) { - return; - } - - // Move left cow in lon lon tower - if (play->sceneNum == SCENE_LON_LON_BUILDINGS && enCow->actor.world.pos.x == -108 && - enCow->actor.world.pos.z == -65) { - enCow->actor.world.pos.x = -229.0f; - enCow->actor.world.pos.z = 157.0f; - enCow->actor.shape.rot.y = 15783.0f; - moved = true; - // Move right cow in lon lon stable - } else if (play->sceneNum == SCENE_STABLE && enCow->actor.world.pos.x == -3 && enCow->actor.world.pos.z == -254) { - enCow->actor.world.pos.x += 119.0f; - moved = true; - } - - if (moved) { - // Reposition collider - func_809DEE9C(enCow); - } -} - u8 EnDs_RandoCanGetGrannyItem() { return (RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS || RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL) && @@ -1060,23 +1032,6 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l *should = !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SARIAS_SONG); break; } - case VB_GIVE_ITEM_FROM_COW: { - if (!RAND_GET_OPTION(RSK_SHUFFLE_COWS)) { - break; - } - EnCow* enCow = va_arg(args, EnCow*); - CowIdentity cowIdentity = OTRGlobals::Instance->gRandomizer->IdentifyCow(gPlayState->sceneNum, enCow->actor.world.pos.x, enCow->actor.world.pos.z); - // Has this cow already rewarded an item? - if (Flags_GetRandomizerInf(cowIdentity.randomizerInf)) { - break; - } - Flags_SetRandomizerInf(cowIdentity.randomizerInf); - // setting the ocarina mode here prevents intermittent issues - // with the item get not triggering until walking away - gPlayState->msgCtx.ocarinaMode = OCARINA_MODE_00; - *should = false; - break; - } case VB_GIVE_ITEM_FROM_GRANNYS_SHOP: { if (!EnDs_RandoCanGetGrannyItem()) { break; @@ -1257,15 +1212,6 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l *should = false; break; } - case VB_DESPAWN_HORSE_RACE_COW: { - if (!RAND_GET_OPTION(RSK_SHUFFLE_COWS)) { - break; - } - EnCow* enCow = va_arg(args, EnCow*); - // If this is a cow we have to move, then move it now. - EnCow_MoveForRandomizer(enCow, gPlayState); - break; - } case VB_BUSINESS_SCRUB_DESPAWN: { EnShopnuts* enShopnuts = va_arg(args, EnShopnuts*); s16 respawnData = gSaveContext.respawn[RESPAWN_MODE_RETURN].data & ((1 << 8) - 1); diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index b4e26c84a..1e0b3a7d1 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -874,18 +874,6 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE] = Location::Base(RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_GERUDO_VALLEY, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2262, 0xF0), "Deku Scrub Grotto Beehive", RHT_BEEHIVE_SCRUB_PAIR_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_GV_DEKU_SCRUB_GROTTO)); locationTable[RC_COLOSSUS_GROTTO_BEEHIVE] = Location::Base(RC_COLOSSUS_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_DESERT_COLOSSUS, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2262, 0xFD), "Grotto Beehive", RHT_BEEHIVE_SCRUB_PAIR_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_COLOSSUS_GROTTO)); - // Cows - locationTable[RC_KF_LINKS_HOUSE_COW] = Location::Base(RC_KF_LINKS_HOUSE_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_LINKS_HOUSE, 0x00, "Links House Cow", RHT_KF_LINKS_HOUSE_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_KF_LINKS_HOUSE_COW)); - locationTable[RC_HF_COW_GROTTO_COW] = Location::Base(RC_HF_COW_GROTTO_COW, RCQUEST_BOTH, RCTYPE_COW, RCAREA_HYRULE_FIELD, ACTOR_EN_COW, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3485, -291), "Cow Grotto Cow", RHT_HF_COW_GROTTO_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_HF_COW_GROTTO_COW)); - locationTable[RC_LLR_STABLES_LEFT_COW] = Location::Base(RC_LLR_STABLES_LEFT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_STABLE, TWO_ACTOR_PARAMS(-122, -254), "Stables Left Cow", RHT_LLR_STABLES_LEFT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_STABLES_LEFT_COW)); - locationTable[RC_LLR_STABLES_RIGHT_COW] = Location::Base(RC_LLR_STABLES_RIGHT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_STABLE, TWO_ACTOR_PARAMS(116, -254), "Stables Right Cow", RHT_LLR_STABLES_RIGHT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_STABLES_RIGHT_COW)); - locationTable[RC_LLR_TOWER_LEFT_COW] = Location::Base(RC_LLR_TOWER_LEFT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(-229, 157), "Tower Left Cow", RHT_LLR_TOWER_LEFT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_TOWER_LEFT_COW)); - locationTable[RC_LLR_TOWER_RIGHT_COW] = Location::Base(RC_LLR_TOWER_RIGHT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_LON_LON_BUILDINGS, TWO_ACTOR_PARAMS(-142, -140), "Tower Right Cow", RHT_LLR_TOWER_RIGHT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_TOWER_RIGHT_COW)); - locationTable[RC_KAK_IMPAS_HOUSE_COW] = Location::Base(RC_KAK_IMPAS_HOUSE_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_IMPAS_HOUSE, 0x00, "Impas House Cow", RHT_KAK_IMPAS_HOUSE_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_KAK_IMPAS_HOUSE_COW)); - locationTable[RC_DMT_COW_GROTTO_COW] = Location::Base(RC_DMT_COW_GROTTO_COW, RCQUEST_BOTH, RCTYPE_COW, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_COW, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2444, -471), "Cow Grotto Cow", RHT_DMT_COW_GROTTO_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_DMT_COW_GROTTO_COW)); - locationTable[RC_GV_COW] = Location::Base(RC_GV_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_GERUDO_VALLEY, 0x00, "Cow", RHT_GV_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_GV_COW)); - locationTable[RC_JABU_JABUS_BELLY_MQ_COW] = Location::Base(RC_JABU_JABUS_BELLY_MQ_COW, RCQUEST_MQ, RCTYPE_COW, ACTOR_EN_COW, SCENE_JABU_JABU, 0x00, "MQ Cow", RHT_JABU_JABUS_BELLY_MQ_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_JABU_JABUS_BELLY_MQ_COW)); - /*------------------------------- --- SHOPS --- 8 6 2 4 diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 8936294a2..a456089a3 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -46,6 +46,7 @@ class StaticData { static std::vector GetPondFishLocations(); static std::vector GetOverworldFishLocations(); static std::vector GetOverworldFairyLocations(); + static void RegisterCowLocations(); static void RegisterFishLocations(); static void RegisterFairyLocations(); static void RegisterPotLocations(); diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 6b5afb0c3..dc745b0b5 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2254,7 +2254,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { messageEntry = OTRGlobals::Instance->gRandomizer->GetGoronMessage(choice); } else if (textId == TEXT_FROGS_UNDERWATER && ctx->GetOption(RSK_FROGS_HINT)) { - messageEntry = ctx->GetHint(RH_FROGS_HINT)->GetHintMessage(MF_AUTO_FORMAT), TEXTBOX_TYPE_BLUE; + messageEntry = ctx->GetHint(RH_FROGS_HINT)->GetHintMessage(MF_AUTO_FORMAT); } else if ( Randomizer_GetSettingValue(RSK_LOACH_HINT) && From f023a46a5d5ef8e969427dbd694366f06fb078b7 Mon Sep 17 00:00:00 2001 From: Archez Date: Tue, 25 Feb 2025 03:13:17 -0500 Subject: [PATCH 61/68] Use gamemode enum (#5089) * Use gamemode enum * update console command for file_select --- soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp | 2 +- soh/soh/Enhancements/debugconsole.cpp | 13 +++++++------ .../Enhancements/randomizer/randomizer_entrance.c | 2 +- soh/src/code/graph.c | 2 +- soh/src/code/z_camera.c | 2 +- soh/src/code/z_construct.c | 2 +- soh/src/code/z_demo.c | 14 +++++++------- soh/src/code/z_kankyo.c | 6 +++--- soh/src/code/z_parameter.c | 2 +- soh/src/code/z_player_lib.c | 2 +- soh/src/overlays/actors/ovl_En_Light/z_en_light.c | 2 +- soh/src/overlays/actors/ovl_En_Mag/z_en_mag.c | 6 +++--- soh/src/overlays/actors/ovl_En_Mm/z_en_mm.c | 2 +- .../ovl_En_Okarina_Effect/z_en_okarina_effect.c | 2 +- .../overlays/actors/ovl_player_actor/z_player.c | 2 +- .../gamestates/ovl_file_choose/z_file_choose.c | 5 +---- .../overlays/gamestates/ovl_opening/z_opening.c | 2 +- soh/src/overlays/gamestates/ovl_title/z_title.c | 2 +- 18 files changed, 34 insertions(+), 36 deletions(-) diff --git a/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp b/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp index d478f8fc3..2d750ab5d 100644 --- a/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp +++ b/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp @@ -205,7 +205,7 @@ void OnZTitleUpdateSkipToFileSelect(void* gameState) { gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.natureAmbienceId = 0xFF; - gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; + gSaveContext.gameMode = GAMEMODE_FILE_SELECT; titleContext->state.running = false; SET_NEXT_GAMESTATE(&titleContext->state, FileChoose_Init, FileChooseContext); diff --git a/soh/soh/Enhancements/debugconsole.cpp b/soh/soh/Enhancements/debugconsole.cpp index 5df00dfab..67547437d 100644 --- a/soh/soh/Enhancements/debugconsole.cpp +++ b/soh/soh/Enhancements/debugconsole.cpp @@ -146,7 +146,7 @@ static bool SetPlayerHealthHandler(std::shared_ptr Console, const static bool LoadSceneHandler(std::shared_ptr Console, const std::vector&, std::string* output) { gSaveContext.respawnFlag = 0; gSaveContext.seqId = 0xFF; - gSaveContext.gameMode = 0; + gSaveContext.gameMode = GAMEMODE_NORMAL; return 0; } @@ -489,13 +489,14 @@ static bool FWHandler(std::shared_ptr Console, const std::vector< } static bool FileSelectHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { - if (gPlayState != nullptr) { - SET_NEXT_GAMESTATE(&gPlayState->state, FileChoose_Init, FileChooseContext); - gPlayState->state.running = 0; - } else { - ERROR_MESSAGE("gPlayState == nullptr"); + if (gGameState == nullptr) { + ERROR_MESSAGE("gGameState == nullptr"); return 1; } + + gSaveContext.gameMode = GAMEMODE_FILE_SELECT; + SET_NEXT_GAMESTATE(gGameState, FileChoose_Init, FileChooseContext); + gGameState->running = false; return 0; } diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance.c b/soh/soh/Enhancements/randomizer/randomizer_entrance.c index fdb1f6809..3ad26b1f6 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance.c +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance.c @@ -440,7 +440,7 @@ void Entrance_SetWarpSongEntrance(void) { // have to force the grotto return afterwards Grotto_ForceGrottoReturnOnSpecialEntrance(); - if (gSaveContext.gameMode != 0) { + if (gSaveContext.gameMode != GAMEMODE_NORMAL) { // During DHWW the cutscene must play at the destination gSaveContext.respawnFlag = -3; } else if (gSaveContext.respawnFlag == -3) { diff --git a/soh/src/code/graph.c b/soh/src/code/graph.c index 51f8fcd17..be5ee994d 100644 --- a/soh/src/code/graph.c +++ b/soh/src/code/graph.c @@ -412,7 +412,7 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) { { if (CHECK_BTN_ALL(gameState->input[0].press.button, BTN_Z) && CHECK_BTN_ALL(gameState->input[0].cur.button, BTN_L | BTN_R)) { - gSaveContext.gameMode = 0; + gSaveContext.gameMode = GAMEMODE_NORMAL; SET_NEXT_GAMESTATE(gameState, Select_Init, SelectContext); gameState->running = false; } diff --git a/soh/src/code/z_camera.c b/soh/src/code/z_camera.c index 6551d6347..7167daceb 100644 --- a/soh/src/code/z_camera.c +++ b/soh/src/code/z_camera.c @@ -7589,7 +7589,7 @@ Vec3s Camera_Update(Camera* camera) { } if (camera->status == CAM_STAT_ACTIVE) { - if ((gSaveContext.gameMode != 0) && (gSaveContext.gameMode != 3)) { + if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_END_CREDITS)) { sCameraInterfaceFlags = 0; Camera_UpdateInterface(sCameraInterfaceFlags); } else if ((D_8011D3F0 != 0) && (camera->thisIdx == MAIN_CAM)) { diff --git a/soh/src/code/z_construct.c b/soh/src/code/z_construct.c index 960088cba..065c6f413 100644 --- a/soh/src/code/z_construct.c +++ b/soh/src/code/z_construct.c @@ -479,7 +479,7 @@ void Regs_InitDataImpl(void) { WREG(94) = 3; WREG(95) = 6; - if (gSaveContext.gameMode == 0) { + if (gSaveContext.gameMode == GAMEMODE_NORMAL) { R_TEXTBOX_X = 52; R_TEXTBOX_Y = 36; VREG(2) = 214; diff --git a/soh/src/code/z_demo.c b/soh/src/code/z_demo.c index 9821b8d26..c079d0064 100644 --- a/soh/src/code/z_demo.c +++ b/soh/src/code/z_demo.c @@ -510,8 +510,8 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB bool debugCsSkip = (CHECK_BTN_ALL(play->state.input[0].press.button, BTN_START) && (gSaveContext.fileNum != 0xFEDC) && CVarGetInteger(CVAR_DEVELOPER_TOOLS("DebugEnabled"), 0)); - if ((gSaveContext.gameMode != 0) && (gSaveContext.gameMode != 3) && (play->sceneNum != SCENE_HYRULE_FIELD) && - (csCtx->frames > 20) && + if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (gSaveContext.gameMode != GAMEMODE_END_CREDITS) && + (play->sceneNum != SCENE_HYRULE_FIELD) && (csCtx->frames > 20) && (CHECK_BTN_ALL(play->state.input[0].press.button, BTN_A) || CHECK_BTN_ALL(play->state.input[0].press.button, BTN_B) || CHECK_BTN_ALL(play->state.input[0].press.button, BTN_START)) && @@ -575,7 +575,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB osSyncPrintf("\n分岐先指定!!=[%d]番", cmd->base); // "Future fork designation=No. [%d]" - if ((gSaveContext.gameMode != 0) && (csCtx->frames != cmd->startFrame)) { + if ((gSaveContext.gameMode != GAMEMODE_NORMAL) && (csCtx->frames != cmd->startFrame)) { gSaveContext.unk_13E7 = 1; } @@ -908,7 +908,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB play->transitionType = TRANS_TYPE_FADE_WHITE; break; case 54: - gSaveContext.gameMode = 3; + gSaveContext.gameMode = GAMEMODE_END_CREDITS; Audio_SetSoundBanksMute(0x6F); play->linkAgeOnLoad = 1; play->nextEntranceIndex = ENTR_GERUDO_VALLEY_EAST_EXIT; @@ -1288,7 +1288,7 @@ void Cutscene_Command_Terminator(PlayState* play, CutsceneContext* csCtx, CsCmdB gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; break; case 117: - gSaveContext.gameMode = 3; + gSaveContext.gameMode = GAMEMODE_END_CREDITS; Audio_SetSoundBanksMute(0x6F); play->linkAgeOnLoad = 0; play->nextEntranceIndex = ENTR_HYRULE_FIELD_PAST_BRIDGE_SPAWN; @@ -2080,7 +2080,7 @@ void func_80068DC0(PlayState* play, CutsceneContext* csCtx) { osSyncPrintf("\n\n\n\n\nやっぱりここかいな"); // "Right here, huh" gSaveContext.cutsceneIndex = 0; - gSaveContext.gameMode = 0; + gSaveContext.gameMode = GAMEMODE_NORMAL; if (D_8015FCC8 != 0) { switch (gSaveContext.entranceIndex) { @@ -2203,7 +2203,7 @@ void Cutscene_HandleConditionalTriggers(PlayState* play) { return; } - if ((gSaveContext.gameMode == 0) && (gSaveContext.respawnFlag <= 0) && (gSaveContext.cutsceneIndex < 0xFFF0)) { + if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.respawnFlag <= 0) && (gSaveContext.cutsceneIndex < 0xFFF0)) { if ((gSaveContext.entranceIndex == ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE) && !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_REQUIEM_OF_SPIRIT)) { Flags_SetEventChkInf(EVENTCHKINF_LEARNED_REQUIEM_OF_SPIRIT); gSaveContext.entranceIndex = ENTR_DESERT_COLOSSUS_EAST_EXIT; diff --git a/soh/src/code/z_kankyo.c b/soh/src/code/z_kankyo.c index 6e3736b77..df5decc4a 100644 --- a/soh/src/code/z_kankyo.c +++ b/soh/src/code/z_kankyo.c @@ -895,7 +895,7 @@ void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContex EnvLightSettings* lightSettingsList = play->envCtx.lightSettingsList; s32 adjustment; - if ((((void)0, gSaveContext.gameMode) != 0) && (((void)0, gSaveContext.gameMode) != 3)) { + if ((((void)0, gSaveContext.gameMode) != GAMEMODE_NORMAL) && (((void)0, gSaveContext.gameMode) != GAMEMODE_END_CREDITS)) { func_800AA16C(play); } @@ -925,9 +925,9 @@ void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContex } if ((pauseCtx->state == 0) && (gameOverCtx->state == GAMEOVER_INACTIVE)) { - if (((msgCtx->msgLength == 0) && (msgCtx->msgMode == 0)) || (((void)0, gSaveContext.gameMode) == 3)) { + if (((msgCtx->msgLength == 0) && (msgCtx->msgMode == 0)) || (((void)0, gSaveContext.gameMode) == GAMEMODE_END_CREDITS)) { if ((envCtx->unk_1A == 0) && !FrameAdvance_IsEnabled(play) && - (play->transitionMode == TRANS_MODE_OFF || ((void)0, gSaveContext.gameMode) != 0)) { + (play->transitionMode == TRANS_MODE_OFF || ((void)0, gSaveContext.gameMode) != GAMEMODE_NORMAL)) { if (IS_DAY || gTimeIncrement >= 0x190) { gSaveContext.dayTime += gTimeIncrement; diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index a331e4ace..1daa29fb9 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -3215,7 +3215,7 @@ void Interface_UpdateMagicBar(PlayState* play) { case MAGIC_STATE_FILL: gSaveContext.magic += 4; - if (gSaveContext.gameMode == 0 && gSaveContext.sceneSetupIndex < 4) { + if (gSaveContext.gameMode == GAMEMODE_NORMAL && gSaveContext.sceneSetupIndex < 4) { Audio_PlaySoundGeneral(NA_SE_SY_GAUGE_UP - SFX_FLAG, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); } diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index 9d4b55091..bf7189616 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -1131,7 +1131,7 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL if (((CVarGetInteger(CVAR_ENHANCEMENT("FirstPersonGauntlets"), 0) && LINK_IS_ADULT) || (overrideLimbDraw != Player_OverrideLimbDrawGameplayFirstPerson)) && (overrideLimbDraw != Player_OverrideLimbDrawGameplayCrawling) && - (gSaveContext.gameMode != 3)) { + (gSaveContext.gameMode != GAMEMODE_END_CREDITS)) { if (LINK_IS_ADULT) { s32 strengthUpgrade = CUR_UPG_VALUE(UPG_STRENGTH); diff --git a/soh/src/overlays/actors/ovl_En_Light/z_en_light.c b/soh/src/overlays/actors/ovl_En_Light/z_en_light.c index d7f9772d6..ca5cdaa0d 100644 --- a/soh/src/overlays/actors/ovl_En_Light/z_en_light.c +++ b/soh/src/overlays/actors/ovl_En_Light/z_en_light.c @@ -50,7 +50,7 @@ void EnLight_Init(Actor* thisx, PlayState* play) { EnLight* this = (EnLight*)thisx; s16 yOffset; - if (gSaveContext.gameMode == 3) { + if (gSaveContext.gameMode == GAMEMODE_END_CREDITS) { // special case for the credits yOffset = (this->actor.params < 0) ? 1 : 40; Lights_PointNoGlowSetInfo(&this->lightInfo, this->actor.world.pos.x, yOffset + (s16)this->actor.world.pos.y, diff --git a/soh/src/overlays/actors/ovl_En_Mag/z_en_mag.c b/soh/src/overlays/actors/ovl_En_Mag/z_en_mag.c index 558a18796..0ea4a2e25 100644 --- a/soh/src/overlays/actors/ovl_En_Mag/z_en_mag.c +++ b/soh/src/overlays/actors/ovl_En_Mag/z_en_mag.c @@ -251,7 +251,7 @@ void EnMag_UpdateMq(Actor* thisx, PlayState* play) { Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); - gSaveContext.gameMode = 2; + gSaveContext.gameMode = GAMEMODE_FILE_SELECT; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_BLACK; } @@ -411,7 +411,7 @@ void EnMag_UpdateVanilla(Actor* thisx, PlayState* play) { Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); - gSaveContext.gameMode = 2; + gSaveContext.gameMode = GAMEMODE_FILE_SELECT; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_FADE_BLACK; } @@ -1065,4 +1065,4 @@ void EnMag_Draw(Actor* thisx, PlayState* play) { POLY_OPA_DISP = gfx; CLOSE_DISPS(play->state.gfxCtx); -} \ No newline at end of file +} diff --git a/soh/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/soh/src/overlays/actors/ovl_En_Mm/z_en_mm.c index e72a174f8..c3a27994f 100644 --- a/soh/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/soh/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -463,7 +463,7 @@ void func_80AAE294(EnMm* this, PlayState* play) { dustPos.y = this->actor.world.pos.y; dustPos.z = this->actor.world.pos.z; - if (gSaveContext.gameMode != 3) { + if (gSaveContext.gameMode != GAMEMODE_END_CREDITS) { func_80033480(play, &dustPos, 50.0f, 2, 350, 20, 0); } diff --git a/soh/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c b/soh/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c index 0d3519e3d..5bde1af54 100644 --- a/soh/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c +++ b/soh/src/overlays/actors/ovl_En_Okarina_Effect/z_en_okarina_effect.c @@ -73,7 +73,7 @@ void EnOkarinaEffect_ManageStorm(EnOkarinaEffect* this, PlayState* play) { Flags_UnsetEnv(play, 5); // clear storms env flag if (((play->pauseCtx.state == 0) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->msgCtx.msgLength == 0) && (!FrameAdvance_IsEnabled(play)) && - ((play->transitionMode == TRANS_MODE_OFF) || (gSaveContext.gameMode != 0))) || + ((play->transitionMode == TRANS_MODE_OFF) || (gSaveContext.gameMode != GAMEMODE_NORMAL))) || (this->timer >= 250)) { if (play->envCtx.indoors || play->envCtx.unk_1F != 1) { this->timer--; diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 1c9d5a688..1d9c89212 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -10859,7 +10859,7 @@ void Player_Init(Actor* thisx, PlayState* play2) { } if (startMode != PLAYER_START_MODE_NOTHING) { - if ((gSaveContext.gameMode == 0) || (gSaveContext.gameMode == 3)) { + if ((gSaveContext.gameMode == GAMEMODE_NORMAL) || (gSaveContext.gameMode == GAMEMODE_END_CREDITS)) { this->naviActor = Player_SpawnFairy(play, this, &thisx->world.pos, &D_80854778, FAIRY_NAVI); if (gSaveContext.dogParams != 0) { gSaveContext.dogParams |= 0x8000; diff --git a/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c index 6b2d0546f..664a9dcfc 100644 --- a/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c +++ b/soh/src/overlays/gamestates/ovl_file_choose/z_file_choose.c @@ -3112,7 +3112,7 @@ void FileChoose_LoadGame(GameState* thisx) { Audio_PlaySoundGeneral(NA_SE_SY_FSEL_DECIDE_L, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); gSaveContext.fileNum = this->buttonIndex; - gSaveContext.gameMode = 0; + gSaveContext.gameMode = GAMEMODE_NORMAL; if ((this->buttonIndex == FS_BTN_SELECT_FILE_1 && CVarGetInteger(CVAR_DEVELOPER_TOOLS("DebugEnabled"), 0)) || this->buttonIndex == 0xFF) { if (this->buttonIndex == 0xFF) { @@ -3737,7 +3737,4 @@ void FileChoose_Init(GameState* thisx) { Font_LoadOrderedFont(&this->font); Audio_QueueSeqCmd(0xF << 28 | SEQ_PLAYER_BGM_MAIN << 24 | 0xA); func_800F5E18(SEQ_PLAYER_BGM_MAIN, NA_BGM_FILE_SELECT, 0, 7, 1); - - // Originally this was only set when transitioning from the title screen, but gSkipLogoTitle skips that process so we're ensuring it's set here - gSaveContext.gameMode = GAMEMODE_FILE_SELECT; } diff --git a/soh/src/overlays/gamestates/ovl_opening/z_opening.c b/soh/src/overlays/gamestates/ovl_opening/z_opening.c index 3ecd61fca..7898e8aed 100644 --- a/soh/src/overlays/gamestates/ovl_opening/z_opening.c +++ b/soh/src/overlays/gamestates/ovl_opening/z_opening.c @@ -9,7 +9,7 @@ void Sram_InitDebugSave(void); void Opening_SetupTitleScreen(OpeningContext* this) { - gSaveContext.gameMode = 1; + gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; this->state.running = false; gSaveContext.linkAge = 0; gSaveContext.fileNum = 0xFF; diff --git a/soh/src/overlays/gamestates/ovl_title/z_title.c b/soh/src/overlays/gamestates/ovl_title/z_title.c index 544fb6884..239ee9d3d 100644 --- a/soh/src/overlays/gamestates/ovl_title/z_title.c +++ b/soh/src/overlays/gamestates/ovl_title/z_title.c @@ -137,7 +137,7 @@ void Title_Main(GameState* thisx) { if (this->exit) { gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.natureAmbienceId = 0xFF; - gSaveContext.gameMode = 1; + gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; this->state.running = false; SET_NEXT_GAMESTATE(&this->state, Opening_Init, OpeningContext); } From 5fcdf74f5cc92be3244d820cd1a37f5619a4600b Mon Sep 17 00:00:00 2001 From: Archez Date: Tue, 25 Feb 2025 03:13:31 -0500 Subject: [PATCH 62/68] Exclude debug file and cutscene map from auto save (#5088) * Exclude debug file and cutscene map from auto save * Remove ganon's lair from auto save exclusion --- soh/soh/Enhancements/Autosave.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/soh/soh/Enhancements/Autosave.cpp b/soh/soh/Enhancements/Autosave.cpp index 74b548dab..faa5ee8dd 100644 --- a/soh/soh/Enhancements/Autosave.cpp +++ b/soh/soh/Enhancements/Autosave.cpp @@ -24,11 +24,11 @@ typedef enum { bool Autosave_CanSave() { - // Don't save when in title screen + // Don't save when in title screen or debug file // Don't save the first 60 frames to not save the magic meter when it's still in the animation of filling it. - // Don't save in Ganon's fight and chamber of sages because of master sword and remember save location issues. - if (!GameInteractor::IsSaveLoaded(true) || gPlayState->gameplayFrames < 60 || - gPlayState->sceneNum == SCENE_GANON_BOSS || gPlayState->sceneNum == SCENE_CHAMBER_OF_THE_SAGES) { + // Don't save in Chamber of Sages and the Cutscene map because of remember save location and cutscene item gives. + if (!GameInteractor::IsSaveLoaded(false) || gPlayState->gameplayFrames < 60 || + gPlayState->sceneNum == SCENE_CHAMBER_OF_THE_SAGES || gPlayState->sceneNum == SCENE_CUTSCENE_MAP) { return false; } From 66844fb22037a5e7ec3910ee0d06fc18e1122cc7 Mon Sep 17 00:00:00 2001 From: Archez Date: Tue, 25 Feb 2025 03:14:27 -0500 Subject: [PATCH 63/68] Fix crash with scene logging paths (#5081) --- .../resource/logging/SceneCommandLoggers.cpp | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/soh/soh/resource/logging/SceneCommandLoggers.cpp b/soh/soh/resource/logging/SceneCommandLoggers.cpp index 805de9be0..22e7420c2 100644 --- a/soh/soh/resource/logging/SceneCommandLoggers.cpp +++ b/soh/soh/resource/logging/SceneCommandLoggers.cpp @@ -24,9 +24,18 @@ #include "soh/resource/type/scenecommand/SetTransitionActorList.h" #include "soh/resource/type/scenecommand/SetWindSettings.h" #include "spdlog/spdlog.h" +#include namespace SOH { +const char* TrimOTRSignature(const char* fileName) { + static const char* sOTRSignature = "__OTR__"; + if (strncmp(fileName, sOTRSignature, strlen(sOTRSignature)) == 0) { + return fileName + 7; + } + return fileName; +} + void LogEndMarkerAsXML(std::shared_ptr resource) { std::shared_ptr endMarker = std::static_pointer_cast(resource); @@ -292,12 +301,12 @@ void LogMeshAsXML(std::shared_ptr resource) { for (int i = 0; i < setMesh->meshHeader.polygon0.num; i += 1) { tinyxml2::XMLElement* polygon = doc.NewElement("Polygon"); polygon->SetAttribute("PolyType", "0"); - polygon->SetAttribute("MeshOpa", setMesh->opaPaths[i].c_str()); - polygon->SetAttribute("MeshXlu", setMesh->xluPaths[i].c_str()); + polygon->SetAttribute("MeshOpa", TrimOTRSignature(dlist->opa ? (char*)dlist->opa : "")); + polygon->SetAttribute("MeshXlu", TrimOTRSignature(dlist->xlu ? (char*)dlist->xlu : "")); root->InsertEndChild(polygon); + dlist += 1; } - dlist += 1; } else if (setMesh->meshHeader.base.type == 1) { root->SetAttribute("PolyNum", "1"); tinyxml2::XMLElement* polygon = doc.NewElement("Polygon"); @@ -313,8 +322,10 @@ void LogMeshAsXML(std::shared_ptr resource) { polygon->SetAttribute("PolyType", "0"); - polygon->SetAttribute("MeshOpa", setMesh->opaPaths[0].c_str()); - polygon->SetAttribute("MeshXlu", setMesh->xluPaths[0].c_str()); + PolygonDlist* dlist = (PolygonDlist*)setMesh->meshHeader.polygon1.dlist; + + polygon->SetAttribute("MeshOpa", TrimOTRSignature(dlist->opa ? (char*)dlist->opa : "")); + polygon->SetAttribute("MeshXlu", TrimOTRSignature(dlist->xlu ? (char*)dlist->xlu : "")); root->InsertEndChild(polygon); @@ -325,7 +336,7 @@ void LogMeshAsXML(std::shared_ptr resource) { if (setMesh->meshHeader.polygon1.format == 1) { bgImage->SetAttribute("Unknown_00", image->unk_00); bgImage->SetAttribute("Id", image->id); - bgImage->SetAttribute("ImagePath", setMesh->imagePaths[i].c_str()); + bgImage->SetAttribute("ImagePath", TrimOTRSignature((char*)setMesh->meshHeader.polygon1.single.source)); bgImage->SetAttribute("Unknown_0C", setMesh->meshHeader.polygon1.single.unk_0C); bgImage->SetAttribute("TLUT", setMesh->meshHeader.polygon1.single.tlut); bgImage->SetAttribute("Width", setMesh->meshHeader.polygon1.single.width); @@ -337,7 +348,7 @@ void LogMeshAsXML(std::shared_ptr resource) { } else { bgImage->SetAttribute("Unknown_00", image->unk_00); bgImage->SetAttribute("Id", image->id); - bgImage->SetAttribute("ImagePath", setMesh->imagePaths[i].c_str()); + bgImage->SetAttribute("ImagePath", TrimOTRSignature((char*)image->source)); bgImage->SetAttribute("Unknown_0C", image->unk_0C); bgImage->SetAttribute("TLUT", image->tlut); bgImage->SetAttribute("Width", image->width); @@ -363,8 +374,8 @@ void LogMeshAsXML(std::shared_ptr resource) { polygon->SetAttribute("PosZ", dlist->pos.z); polygon->SetAttribute("Unknown", dlist->unk_06); - polygon->SetAttribute("MeshOpa", setMesh->opaPaths[i].c_str()); - polygon->SetAttribute("MeshXlu", setMesh->xluPaths[i].c_str()); + polygon->SetAttribute("MeshOpa", TrimOTRSignature(dlist->opa ? (char*)dlist->opa : "")); + polygon->SetAttribute("MeshXlu", TrimOTRSignature(dlist->xlu ? (char*)dlist->xlu : "")); root->InsertEndChild(polygon); dlist += 1; @@ -606,4 +617,4 @@ void LogWindSettingsAsXML(std::shared_ptr resource) { SPDLOG_INFO("{}: {}", resource->GetInitData()->Path, printer.CStr()); } -} //namespace SOH \ No newline at end of file +} //namespace SOH From e516f45e2322b93e2d8c8a1737c1d68b2796362d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Tue, 25 Feb 2025 08:30:05 +0000 Subject: [PATCH 64/68] logic: allow finding big poe in bottle for reward logic (#5075) * logic: allow finding big poe in bottle for reward logic only applies when big poe count is set to 1 * Allow multiple big poe bottles for when big poe requirement > 1 --- .../randomizer/location_access/overworld/market.cpp | 2 +- soh/soh/Enhancements/randomizer/logic.cpp | 6 +++++- soh/soh/Enhancements/randomizer/logic.h | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp index 0b010c8a7..af406f8bf 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp @@ -39,7 +39,7 @@ void RegionTable_Init_Market() { EventAccess(&logic->CanEmptyBigPoes, []{return logic->IsAdult;}), }, { //Locations - LOCATION(RC_MARKET_10_BIG_POES, logic->IsAdult && logic->BigPoeKill), + LOCATION(RC_MARKET_10_BIG_POES, logic->IsAdult && (logic->BigPoeKill || logic->BigPoes > ctx->GetOption(RSK_BIG_POE_COUNT).Get())), LOCATION(RC_MARKET_GS_GUARD_HOUSE, logic->IsChild), LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_1, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_2, logic->IsChild && logic->CanBreakPots()), diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index fa9c8d8e5..9e1b1cf85 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -1694,6 +1694,9 @@ namespace Rando { if (BottleRandomizerGetToItemID.contains(randoGet)) { itemId = BottleRandomizerGetToItemID[randoGet]; } + if (randoGet == RG_BOTTLE_WITH_BIG_POE) { + BigPoes++; + } mSaveContext->inventory.items[slot] = itemId; } break; case RG_RUTOS_LETTER: @@ -2255,7 +2258,8 @@ namespace Rando { IsChild = false; IsAdult = false; //CanPlantBean = false; - BigPoeKill = false; + BigPoeKill = false; + BigPoes = 0; BaseHearts = ctx->GetOption(RSK_STARTING_HEARTS).Get() + 1; diff --git a/soh/soh/Enhancements/randomizer/logic.h b/soh/soh/Enhancements/randomizer/logic.h index ea9d51801..77d6b2573 100644 --- a/soh/soh/Enhancements/randomizer/logic.h +++ b/soh/soh/Enhancements/randomizer/logic.h @@ -36,7 +36,6 @@ class Logic { // Adult logic bool FreedEpona = false; - //bool BigPoe = false; //unused // Trade Quest Events bool WakeUpAdultTalon = false; @@ -101,6 +100,7 @@ class Logic { bool IsChild = false; bool IsAdult = false; bool BigPoeKill = false; + uint8_t BigPoes = 0; uint8_t BaseHearts = 0; // Bridge and LACS Requirements From db41c6513b409e9fca95b1c5fe1d9cc5ef35f7ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Tue, 25 Feb 2025 09:25:45 +0000 Subject: [PATCH 65/68] Move boss kill logic into CanKillEnemy (#5000) * Move boss kill logic into CanKillEnemy Added hammer as being able to defeat Morpha * add hammer vs gohma, king dodongo, & twinrova --- .../location_access/dungeons/deku_tree.cpp | 2 +- .../dungeons/dodongos_cavern.cpp | 2 +- .../location_access/dungeons/fire_temple.cpp | 2 +- .../dungeons/forest_temple.cpp | 2 +- .../dungeons/jabujabus_belly.cpp | 2 +- .../dungeons/shadow_temple.cpp | 6 +---- .../dungeons/spirit_temple.cpp | 2 +- .../location_access/dungeons/water_temple.cpp | 2 +- soh/soh/Enhancements/randomizer/logic.cpp | 25 +++++++++++++++++++ .../Enhancements/randomizer/randomizerTypes.h | 8 ++++++ 10 files changed, 41 insertions(+), 12 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp index 9d3febe36..2500e4996 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp @@ -350,7 +350,7 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_BOSS_ROOM] = Region("Deku Tree Boss Room", "Deku Tree", {}, NO_DAY_NIGHT_CYCLE, { // Events - EventAccess(&logic->DekuTreeClear, []{return logic->DekuTreeClear || (logic->HasBossSoul(RG_GOHMA_SOUL) && (logic->CanJumpslashExceptHammer() && (logic->CanUse(RG_NUTS) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->HookshotOrBoomerang())));}), + EventAccess(&logic->DekuTreeClear, []{return logic->DekuTreeClear || logic->CanKillEnemy(RE_GOHMA);}), }, { // Locations LOCATION(RC_QUEEN_GOHMA, logic->DekuTreeClear), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp index e961a5c08..bb5e1754f 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp @@ -528,7 +528,7 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_BOSS_ROOM] = Region("Dodongos Cavern Boss Room", "Dodongos Cavern", {}, NO_DAY_NIGHT_CYCLE, { // Events - EventAccess(&logic->DodongosCavernClear, []{return logic->DodongosCavernClear || (logic->HasBossSoul(RG_KING_DODONGO_SOUL) && (Here(RR_DODONGOS_CAVERN_BOSS_ROOM, []{return logic->HasExplosives() || (logic->CanUse(RG_MEGATON_HAMMER) && ctx->GetTrickOption(RT_DC_HAMMER_FLOOR));}) && (logic->CanUse(RG_BOMB_BAG) || logic->HasItem(RG_GORONS_BRACELET)) && logic->CanJumpslashExceptHammer())); /*todo add chu kill to tricks*/}), + EventAccess(&logic->DodongosCavernClear, []{return logic->DodongosCavernClear || (Here(RR_DODONGOS_CAVERN_BOSS_ROOM, []{return logic->HasExplosives() || (logic->CanUse(RG_MEGATON_HAMMER) && ctx->GetTrickOption(RT_DC_HAMMER_FLOOR));}) && logic->CanKillEnemy(RE_KING_DODONGO)); /*todo add chu kill to tricks*/}), }, { // Locations LOCATION(RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST, true), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp index 429d84667..1e7214a3d 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp @@ -705,7 +705,7 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_BOSS_ROOM] = Region("Fire Temple Boss Room", "Fire Temple", {}, NO_DAY_NIGHT_CYCLE, { // Events - EventAccess(&logic->FireTempleClear, []{return logic->FireTempleClear || (logic->HasBossSoul(RG_VOLVAGIA_SOUL) && (logic->FireTimer() >= 64 && logic->CanUse(RG_MEGATON_HAMMER)));}), + EventAccess(&logic->FireTempleClear, []{return logic->FireTempleClear || (logic->FireTimer() >= 64 && logic->CanKillEnemy(RE_VOLVAGIA));}), }, { // Locations LOCATION(RC_FIRE_TEMPLE_VOLVAGIA_HEART, logic->FireTempleClear), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp index 87f738b90..c9f4ebc23 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp @@ -600,7 +600,7 @@ void RegionTable_Init_ForestTemple() { areaTable[RR_FOREST_TEMPLE_BOSS_ROOM] = Region("Forest Temple Boss Room", "Forest Temple", {}, NO_DAY_NIGHT_CYCLE, { // Events - EventAccess(&logic->ForestTempleClear, []{return logic->ForestTempleClear || (logic->HasBossSoul(RG_PHANTOM_GANON_SOUL) && ((logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))));}), + EventAccess(&logic->ForestTempleClear, []{return logic->ForestTempleClear || logic->CanKillEnemy(RE_PHANTOM_GANON);}), }, { // Locations LOCATION(RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, logic->ForestTempleClear), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp index fe043caa3..fa9c7b085 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp @@ -341,7 +341,7 @@ void RegionTable_Init_JabuJabusBelly() { areaTable[RR_JABU_JABUS_BELLY_BOSS_ROOM] = Region("Jabu Jabus Belly Boss Room", "Jabu Jabus Belly", {}, NO_DAY_NIGHT_CYCLE, { // Events //todo: add pot kill trick - EventAccess(&logic->JabuJabusBellyClear, []{return logic->JabuJabusBellyClear || (logic->HasBossSoul(RG_BARINADE_SOUL) && (logic->CanUse(RG_BOOMERANG) && logic->CanJumpslashExceptHammer()));}), + EventAccess(&logic->JabuJabusBellyClear, []{return logic->JabuJabusBellyClear || logic->CanKillEnemy(RE_BARINADE);}), }, { // Locations LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_1, logic->CanBreakPots()), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp index 1267e2408..bdcf8a4fa 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp @@ -399,11 +399,7 @@ void RegionTable_Init_ShadowTemple() { areaTable[RR_SHADOW_TEMPLE_BOSS_ROOM] = Region("Shadow Temple Boss Room", "Shadow Temple", {}, NO_DAY_NIGHT_CYCLE, { // Events - EventAccess(&logic->ShadowTempleClear, []{ - return logic->ShadowTempleClear || (logic->HasBossSoul(RG_BONGO_BONGO_SOUL) && ((logic->CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_BONGO)) && - (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && - (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || ctx->GetTrickOption(RT_SHADOW_BONGO)))); - }), + EventAccess(&logic->ShadowTempleClear, []{return logic->ShadowTempleClear || logic->CanKillEnemy(RE_BONGO_BONGO);}), }, { // Locations LOCATION(RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, logic->ShadowTempleClear), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp index 3d8e26cd6..e3d00ccf3 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp @@ -544,7 +544,7 @@ void RegionTable_Init_SpiritTemple() { areaTable[RR_SPIRIT_TEMPLE_BOSS_ROOM] = Region("Spirit Temple Boss Room", "Spirit Temple", {}, NO_DAY_NIGHT_CYCLE, { // Events - EventAccess(&logic->SpiritTempleClear, []{return logic->SpiritTempleClear || (logic->HasBossSoul(RG_TWINROVA_SOUL) && (logic->CanUse(RG_MIRROR_SHIELD) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))));}), + EventAccess(&logic->SpiritTempleClear, []{return logic->SpiritTempleClear || logic->CanKillEnemy(RE_TWINROVA);}), }, { // Locations LOCATION(RC_SPIRIT_TEMPLE_TWINROVA_HEART, logic->SpiritTempleClear), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp index 318a5eb64..4d2fbb9bf 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp @@ -725,7 +725,7 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_BOSS_ROOM] = Region("Water Temple Boss Room", "Water Temple", {}, NO_DAY_NIGHT_CYCLE, { // Events - EventAccess(&logic->WaterTempleClear, []{return logic->WaterTempleClear || (logic->HasBossSoul(RG_MORPHA_SOUL) && (logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))));}), + EventAccess(&logic->WaterTempleClear, []{return logic->WaterTempleClear || logic->CanKillEnemy(RE_MORPHA);}), }, { // Locations LOCATION(RC_WATER_TEMPLE_MORPHA_HEART, logic->WaterTempleClear), diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 9e1b1cf85..5e5389dd4 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -673,6 +673,31 @@ namespace Rando { case RE_BIG_OCTO: //If chasing octo is annoying but with rolls you can catch him, and you need rang to get into this room without shenanigains anyway. Bunny makes it free return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_STICKS) || CanUse(RG_MASTER_SWORD); + case RE_GOHMA: + return HasBossSoul(RG_GOHMA_SOUL) && CanJumpslash() && + (CanUse(RG_NUTS) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || HookshotOrBoomerang()); + case RE_KING_DODONGO: + return HasBossSoul(RG_KING_DODONGO_SOUL) && CanJumpslash() && + (CanUse(RG_BOMB_BAG) || HasItem(RG_GORONS_BRACELET)); + case RE_BARINADE: + return HasBossSoul(RG_BARINADE_SOUL) && CanUse(RG_BOOMERANG) && CanJumpslashExceptHammer(); + case RE_PHANTOM_GANON: + return HasBossSoul(RG_PHANTOM_GANON_SOUL) && + (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)) && + (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT)); + case RE_VOLVAGIA: + return HasBossSoul(RG_VOLVAGIA_SOUL) && CanUse(RG_MEGATON_HAMMER); + case RE_MORPHA: + return HasBossSoul(RG_MORPHA_SOUL) && CanUse(RG_HOOKSHOT) && + (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER)); + case RE_BONGO_BONGO: + return HasBossSoul(RG_BONGO_BONGO_SOUL) && + (CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_BONGO)) && + (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)) && + (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || ctx->GetTrickOption(RT_SHADOW_BONGO)); + case RE_TWINROVA: + return HasBossSoul(RG_TWINROVA_SOUL) && CanUse(RG_MIRROR_SHIELD) && + (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER)); case RE_GANONDORF: // RANDOTODO: Trick to use hammer (no jumpslash) or stick (only jumpslash) instead of a sword to reflect the energy ball // and either of them regardless of jumpslashing to damage and kill ganondorf diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 550f2b1af..155b31db1 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5732,6 +5732,14 @@ typedef enum { RE_BIG_OCTO, RE_GERUDO_WARRIOR, RE_GIBDO, + RE_GOHMA, + RE_KING_DODONGO, + RE_BARINADE, + RE_PHANTOM_GANON, + RE_VOLVAGIA, + RE_MORPHA, + RE_BONGO_BONGO, + RE_TWINROVA, RE_GANONDORF, RE_GANON, RE_DARK_LINK, From 06387060d6b3434eae7d65f12f651d495444af2c Mon Sep 17 00:00:00 2001 From: Pepe20129 <72659707+Pepe20129@users.noreply.github.com> Date: Tue, 25 Feb 2025 12:09:01 +0100 Subject: [PATCH 66/68] Trade cleanup (#4971) * Move adult trade to flags * Move child trade to flags * Fix vanilla * Address review * Rename `trade_shuffle` to `ShuffleTradeItems` * Fix mac build * Update GIVanillaBehavior.h * Update z_kankyo.c * Update z_en_heishi2.c --- soh/include/z64save.h | 1 - .../Enhancements/debugger/debugSaveEditor.cpp | 27 -------- .../Enhancements/debugger/debugSaveEditor.h | 24 +++++++ .../GameInteractor_HookTable.h | 1 + .../game-interactor/GameInteractor_Hooks.cpp | 4 ++ .../game-interactor/GameInteractor_Hooks.h | 2 +- .../vanilla-behavior/GIVanillaBehavior.h | 5 ++ .../randomizer/ShuffleTradeItems.c | 51 ++++++++++++++ .../randomizer/ShuffleTradeItems.h | 11 +++ .../randomizer/adult_trade_shuffle.c | 33 --------- .../randomizer/adult_trade_shuffle.h | 13 ---- .../Enhancements/randomizer/hook_handlers.cpp | 68 ++++++++++++++----- soh/soh/Enhancements/randomizer/logic.cpp | 31 ++------- soh/soh/Enhancements/randomizer/logic.h | 2 - .../Enhancements/randomizer/randomizer_inf.h | 24 +++++++ soh/soh/Enhancements/randomizer/savefile.cpp | 18 +++-- soh/soh/SaveManager.cpp | 8 --- soh/src/code/z_kankyo.c | 3 + soh/src/code/z_parameter.c | 20 ++++-- soh/src/code/z_play.c | 1 + soh/src/code/z_scene_table.c | 3 +- soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c | 1 - soh/src/overlays/actors/ovl_En_Go/z_en_go.c | 1 - soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c | 1 - .../actors/ovl_En_Heishi2/z_en_heishi2.c | 4 +- soh/src/overlays/actors/ovl_En_Hs/z_en_hs.c | 1 - soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c | 1 - soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c | 1 - soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c | 1 - .../actors/ovl_En_Niw_Lady/z_en_niw_lady.c | 1 - .../overlays/actors/ovl_En_Toryo/z_en_toryo.c | 1 - .../misc/ovl_kaleido_scope/z_kaleido_item.c | 48 +++++++++---- 32 files changed, 246 insertions(+), 165 deletions(-) create mode 100644 soh/soh/Enhancements/randomizer/ShuffleTradeItems.c create mode 100644 soh/soh/Enhancements/randomizer/ShuffleTradeItems.h delete mode 100644 soh/soh/Enhancements/randomizer/adult_trade_shuffle.c delete mode 100644 soh/soh/Enhancements/randomizer/adult_trade_shuffle.h diff --git a/soh/include/z64save.h b/soh/include/z64save.h index f59271212..f7873031f 100644 --- a/soh/include/z64save.h +++ b/soh/include/z64save.h @@ -160,7 +160,6 @@ typedef struct { #pragma region SoH typedef struct ShipRandomizerSaveContextData { - u16 adultTradeItems; u8 triforcePiecesCollected; } ShipRandomizerSaveContextData; diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index 962f50bd6..b9858aff4 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -19,7 +19,6 @@ extern "C" { #include "functions.h" #include "macros.h" #include "soh/cvar_prefixes.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" extern PlayState* gPlayState; #include "textures/icon_item_static/icon_item_static.h" @@ -414,22 +413,6 @@ void DrawInfoTab() { void DrawBGSItemFlag(uint8_t itemID) { const ItemMapEntry& slotEntry = itemMapping[itemID]; ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), ImVec2(32.0f, 32.0f), ImVec2(0, 0), ImVec2(1, 1)); - ImGui::SameLine(); - int tradeIndex = itemID - ITEM_POCKET_EGG; - bool hasItem = (gSaveContext.ship.quest.data.randomizer.adultTradeItems & (1 << tradeIndex)) != 0; - bool shouldHaveItem = hasItem; - ImGui::Checkbox(("##adultTradeFlag" + std::to_string(itemID)).c_str(), &shouldHaveItem); - if (hasItem != shouldHaveItem) { - if (shouldHaveItem) { - gSaveContext.ship.quest.data.randomizer.adultTradeItems |= (1 << tradeIndex); - if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_NONE) { - INV_CONTENT(ITEM_TRADE_ADULT) = ITEM_POCKET_EGG + tradeIndex; - } - } else { - gSaveContext.ship.quest.data.randomizer.adultTradeItems &= ~(1 << tradeIndex); - Inventory_ReplaceItem(gPlayState, itemID, Randomizer_GetNextAdultTradeItem()); - } - } } void DrawInventoryTab() { @@ -476,9 +459,6 @@ void DrawInventoryTab() { if (ImGui::BeginPopup(itemPopupPicker)) { if (ImGui::Button("##itemNonePicker", ImVec2(32.0f, 32.0f))) { gSaveContext.inventory.items[selectedIndex] = ITEM_NONE; - if (selectedIndex == SLOT_TRADE_ADULT) { - gSaveContext.ship.quest.data.randomizer.adultTradeItems = 0; - } ImGui::CloseCurrentPopup(); } UIWidgets::SetLastItemHoverText("None"); @@ -512,13 +492,6 @@ void DrawInventoryTab() { ImGui::PopStyleVar(); if (ret) { gSaveContext.inventory.items[selectedIndex] = slotEntry.id; - // Set adult trade item flag if you're playing adult trade shuffle in rando - if (IS_RANDO && - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ADULT_TRADE) && - selectedIndex == SLOT_TRADE_ADULT && - slotEntry.id >= ITEM_POCKET_EGG && slotEntry.id <= ITEM_CLAIM_CHECK) { - gSaveContext.ship.quest.data.randomizer.adultTradeItems |= ADULT_TRADE_FLAG(slotEntry.id); - } ImGui::CloseCurrentPopup(); } UIWidgets::SetLastItemHoverText(SohUtils::GetItemName(slotEntry.id)); diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.h b/soh/soh/Enhancements/debugger/debugSaveEditor.h index 2a77b9b0a..554a90b2a 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.h +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.h @@ -1600,6 +1600,30 @@ const std::vector flagTables = { { RAND_INF_HYLIA_LAB_KEY_OBTAINED, "RAND_INF_HYLIA_LAB_KEY_OBTAINED" }, { RAND_INF_FISHING_HOLE_UNLOCKED, "RAND_INF_FISHING_HOLE_UNLOCKED" }, { RAND_INF_FISHING_HOLE_KEY_OBTAINED, "RAND_INF_FISHING_HOLE_KEY_OBTAINED" }, + + { RAND_INF_CHILD_TRADES_HAS_WEIRD_EGG, "RAND_INF_CHILD_TRADES_HAS_WEIRD_EGG" }, + { RAND_INF_CHILD_TRADES_HAS_CHICKEN, "RAND_INF_CHILD_TRADES_HAS_CHICKEN" }, + { RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA, "RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA" }, + { RAND_INF_CHILD_TRADES_HAS_MASK_KEATON, "RAND_INF_CHILD_TRADES_HAS_MASK_KEATON" }, + { RAND_INF_CHILD_TRADES_HAS_MASK_SKULL, "RAND_INF_CHILD_TRADES_HAS_MASK_SKULL" }, + { RAND_INF_CHILD_TRADES_HAS_MASK_SPOOKY, "RAND_INF_CHILD_TRADES_HAS_MASK_SPOOKY" }, + { RAND_INF_CHILD_TRADES_HAS_MASK_BUNNY, "RAND_INF_CHILD_TRADES_HAS_MASK_BUNNY" }, + { RAND_INF_CHILD_TRADES_HAS_MASK_GORON, "RAND_INF_CHILD_TRADES_HAS_MASK_GORON" }, + { RAND_INF_CHILD_TRADES_HAS_MASK_ZORA, "RAND_INF_CHILD_TRADES_HAS_MASK_ZORA" }, + { RAND_INF_CHILD_TRADES_HAS_MASK_GERUDO, "RAND_INF_CHILD_TRADES_HAS_MASK_GERUDO" }, + { RAND_INF_CHILD_TRADES_HAS_MASK_TRUTH, "RAND_INF_CHILD_TRADES_HAS_MASK_TRUTH" }, + + { RAND_INF_ADULT_TRADES_HAS_POCKET_EGG, "RAND_INF_ADULT_TRADES_HAS_POCKET_EGG" }, + { RAND_INF_ADULT_TRADES_HAS_POCKET_CUCCO, "RAND_INF_ADULT_TRADES_HAS_POCKET_CUCCO" }, + { RAND_INF_ADULT_TRADES_HAS_COJIRO, "RAND_INF_ADULT_TRADES_HAS_COJIRO" }, + { RAND_INF_ADULT_TRADES_HAS_ODD_MUSHROOM, "RAND_INF_ADULT_TRADES_HAS_ODD_MUSHROOM" }, + { RAND_INF_ADULT_TRADES_HAS_ODD_POTION, "RAND_INF_ADULT_TRADES_HAS_ODD_POTION" }, + { RAND_INF_ADULT_TRADES_HAS_SAW, "RAND_INF_ADULT_TRADES_HAS_SAW" }, + { RAND_INF_ADULT_TRADES_HAS_SWORD_BROKEN, "RAND_INF_ADULT_TRADES_HAS_SWORD_BROKEN" }, + { RAND_INF_ADULT_TRADES_HAS_PRESCRIPTION, "RAND_INF_ADULT_TRADES_HAS_PRESCRIPTION" }, + { RAND_INF_ADULT_TRADES_HAS_FROG, "RAND_INF_ADULT_TRADES_HAS_FROG" }, + { RAND_INF_ADULT_TRADES_HAS_EYEDROPS, "RAND_INF_ADULT_TRADES_HAS_EYEDROPS" }, + { RAND_INF_ADULT_TRADES_HAS_CLAIM_CHECK, "RAND_INF_ADULT_TRADES_HAS_CLAIM_CHECK" }, } }, }; diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h b/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h index 3f2f80265..3bd2ef36e 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h @@ -22,6 +22,7 @@ DEFINE_HOOK(OnFlagUnset, (int16_t flagType, int16_t flag)); DEFINE_HOOK(OnSceneSpawnActors, ()); DEFINE_HOOK(OnPlayerUpdate, ()); DEFINE_HOOK(OnOcarinaSongAction, ()); +DEFINE_HOOK(OnCuccoOrChickenHatch, ()); DEFINE_HOOK(OnShopSlotChange, (uint8_t cursorIndex, int16_t price)); DEFINE_HOOK(OnActorInit, (void* actor)); DEFINE_HOOK(OnActorUpdate, (void* actor)); diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp index ab69b543f..b41030cfa 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp +++ b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp @@ -80,6 +80,10 @@ void GameInteractor_ExecuteOnOcarinaSongAction() { GameInteractor::Instance->ExecuteHooks(); } +void GameInteractor_ExecuteOnCuccoOrChickenHatch() { + GameInteractor::Instance->ExecuteHooks(); +} + void GameInteractor_ExecuteOnShopSlotChangeHooks(uint8_t cursorIndex, int16_t price) { GameInteractor::Instance->ExecuteHooks(cursorIndex, price); } diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h index b73f9fe70..f1b918cef 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h @@ -24,6 +24,7 @@ void GameInteractor_ExecuteOnFlagUnset(int16_t flagType, int16_t flag); void GameInteractor_ExecuteOnSceneSpawnActors(); void GameInteractor_ExecuteOnPlayerUpdate(); void GameInteractor_ExecuteOnOcarinaSongAction(); +void GameInteractor_ExecuteOnCuccoOrChickenHatch(); void GameInteractor_ExecuteOnActorInit(void* actor); void GameInteractor_ExecuteOnActorUpdate(void* actor); void GameInteractor_ExecuteOnActorKill(void* actor); @@ -33,7 +34,6 @@ void GameInteractor_ExecuteOnTimestamp (u8 item); void GameInteractor_ExecuteOnPlayerBonk(); void GameInteractor_ExecuteOnPlayerHealthChange(int16_t amount); void GameInteractor_ExecuteOnPlayerBottleUpdate(int16_t contents); -void GameInteractor_ExecuteOnOcarinaSongAction(); void GameInteractor_ExecuteOnShopSlotChangeHooks(uint8_t cursorIndex, int16_t price); void GameInteractor_ExecuteOnPlayDestroy(); void GameInteractor_ExecuteOnPlayDrawEnd(); diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index 1157f3c75..a95dabb00 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -371,6 +371,11 @@ typedef enum { // #### `args` // - `*Actor` VB_DOOR_PLAY_SCENE_TRANSITION, + // Vanilla condition: true + VB_HATCH_CUCCO_OR_CHICKEN, + // Vanilla condition: exchangeItemId == EXCH_ITEM_LETTER_ZELDA + // Opt: s32 + VB_HEISHI2_ACCEPT_ITEM_AS_ZELDAS_LETTER, // #### `result` // In `Interface_DrawAmmoCount`: diff --git a/soh/soh/Enhancements/randomizer/ShuffleTradeItems.c b/soh/soh/Enhancements/randomizer/ShuffleTradeItems.c new file mode 100644 index 000000000..62e0bc9f0 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleTradeItems.c @@ -0,0 +1,51 @@ +#include "functions.h" +#include "variables.h" +#include "macros.h" + +u8 Randomizer_GetNextChildTradeItem() { + const u8 numTradeItems = ITEM_MASK_TRUTH - ITEM_WEIRD_EGG + 1; + u8 currentTradeItemIndex = INV_CONTENT(ITEM_TRADE_CHILD) - ITEM_WEIRD_EGG; + for (int i = 0; i < numTradeItems; i++) { + u8 tradeIndex = (currentTradeItemIndex + i + 1) % numTradeItems; + if (Flags_GetRandomizerInf(tradeIndex + RAND_INF_CHILD_TRADES_HAS_WEIRD_EGG)) { + return ITEM_WEIRD_EGG + tradeIndex; + } + } + return ITEM_NONE; +} + +u8 Randomizer_GetPrevChildTradeItem() { + const u8 numTradeItems = ITEM_MASK_TRUTH - ITEM_WEIRD_EGG + 1; + u8 currentTradeItemIndex = INV_CONTENT(ITEM_TRADE_CHILD) - ITEM_WEIRD_EGG; + for (int i = 0; i < numTradeItems; i++) { + u8 tradeIndex = (currentTradeItemIndex - i - 1 + numTradeItems) % numTradeItems; + if (Flags_GetRandomizerInf(tradeIndex + RAND_INF_CHILD_TRADES_HAS_WEIRD_EGG)) { + return ITEM_WEIRD_EGG + tradeIndex; + } + } + return ITEM_NONE; +} + +u8 Randomizer_GetNextAdultTradeItem() { + const u8 numTradeItems = ITEM_CLAIM_CHECK - ITEM_POCKET_EGG + 1; + u8 currentTradeItemIndex = INV_CONTENT(ITEM_TRADE_ADULT) - ITEM_POCKET_EGG; + for (int i = 0; i < numTradeItems; i++) { + u8 tradeIndex = (currentTradeItemIndex + i + 1) % numTradeItems; + if (Flags_GetRandomizerInf(tradeIndex + RAND_INF_ADULT_TRADES_HAS_POCKET_EGG)) { + return ITEM_POCKET_EGG + tradeIndex; + } + } + return ITEM_NONE; +} + +u8 Randomizer_GetPrevAdultTradeItem() { + const u8 numTradeItems = ITEM_CLAIM_CHECK - ITEM_POCKET_EGG + 1; + u8 currentTradeItemIndex = INV_CONTENT(ITEM_TRADE_ADULT) - ITEM_POCKET_EGG; + for (int i = 0; i < numTradeItems; i++) { + u8 tradeIndex = (currentTradeItemIndex - i - 1 + numTradeItems) % numTradeItems; + if (Flags_GetRandomizerInf(tradeIndex + RAND_INF_ADULT_TRADES_HAS_POCKET_EGG)) { + return ITEM_POCKET_EGG + tradeIndex; + } + } + return ITEM_NONE; +} diff --git a/soh/soh/Enhancements/randomizer/ShuffleTradeItems.h b/soh/soh/Enhancements/randomizer/ShuffleTradeItems.h new file mode 100644 index 000000000..a43f7de52 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleTradeItems.h @@ -0,0 +1,11 @@ +#ifndef Z_ADULT_TRADE_SHUFFLE_H +#define Z_ADULT_TRADE_SHUFFLE_H + +#include + +u8 Randomizer_GetNextChildTradeItem(); +u8 Randomizer_GetPrevChildTradeItem(); +u8 Randomizer_GetNextAdultTradeItem(); +u8 Randomizer_GetPrevAdultTradeItem(); + +#endif diff --git a/soh/soh/Enhancements/randomizer/adult_trade_shuffle.c b/soh/soh/Enhancements/randomizer/adult_trade_shuffle.c deleted file mode 100644 index 4bf481d2a..000000000 --- a/soh/soh/Enhancements/randomizer/adult_trade_shuffle.c +++ /dev/null @@ -1,33 +0,0 @@ -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" -#include "functions.h" -#include "variables.h" -#include "macros.h" - -void Randomizer_ConsumeAdultTradeItem(PlayState* play, u8 itemId) { - gSaveContext.ship.quest.data.randomizer.adultTradeItems &= ~ADULT_TRADE_FLAG(itemId); - Inventory_ReplaceItem(play, itemId, Randomizer_GetNextAdultTradeItem()); -} - -u8 Randomizer_GetNextAdultTradeItem() { - const u8 numTradeItems = ITEM_CLAIM_CHECK - ITEM_POCKET_EGG + 1; - u8 currentTradeItemIndex = INV_CONTENT(ITEM_TRADE_ADULT) - ITEM_POCKET_EGG; - for (int i = 0; i < numTradeItems; i++) { - u8 tradeIndex = (currentTradeItemIndex + i + 1) % numTradeItems; - if (gSaveContext.ship.quest.data.randomizer.adultTradeItems & (1 << tradeIndex)) { - return ITEM_POCKET_EGG + tradeIndex; - } - } - return ITEM_NONE; -} - -u8 Randomizer_GetPrevAdultTradeItem() { - const u8 numTradeItems = ITEM_CLAIM_CHECK - ITEM_POCKET_EGG + 1; - u8 currentTradeItemIndex = INV_CONTENT(ITEM_TRADE_ADULT) - ITEM_POCKET_EGG; - for (int i = 0; i < numTradeItems; i++) { - u8 tradeIndex = (currentTradeItemIndex - i - 1 + numTradeItems) % numTradeItems; - if (gSaveContext.ship.quest.data.randomizer.adultTradeItems & (1 << tradeIndex)) { - return ITEM_POCKET_EGG + tradeIndex; - } - } - return ITEM_NONE; -} diff --git a/soh/soh/Enhancements/randomizer/adult_trade_shuffle.h b/soh/soh/Enhancements/randomizer/adult_trade_shuffle.h deleted file mode 100644 index f9894cf4e..000000000 --- a/soh/soh/Enhancements/randomizer/adult_trade_shuffle.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef Z_ADULT_TRADE_SHUFFLE_H -#define Z_ADULT_TRADE_SHUFFLE_H - -#include - -#define ADULT_TRADE_FLAG(itemId) (1 << (itemId - ITEM_POCKET_EGG)) -#define PLAYER_HAS_SHUFFLED_ADULT_TRADE_ITEM(itemID) (IS_RANDO && gSaveContext.ship.quest.data.randomizer.adultTradeItems & ADULT_TRADE_FLAG(itemID)) - -void Randomizer_ConsumeAdultTradeItem(PlayState* play, u8 itemId); -u8 Randomizer_GetNextAdultTradeItem(); -u8 Randomizer_GetPrevAdultTradeItem(); - -#endif diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index e236666f6..f48b7da5a 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -21,7 +21,7 @@ extern "C" { #include "macros.h" #include "functions.h" #include "variables.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" +#include "soh/Enhancements/randomizer/ShuffleTradeItems.h" #include "soh/Enhancements/randomizer/randomizer_entrance.h" #include "soh/Enhancements/randomizer/randomizer_grotto.h" #include "src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.h" @@ -55,7 +55,6 @@ extern "C" { #include "src/overlays/actors/ovl_En_Xc/z_en_xc.h" #include "src/overlays/actors/ovl_Fishing/z_fishing.h" #include "src/overlays/actors/ovl_En_Mk/z_en_mk.h" -#include "adult_trade_shuffle.h" #include "draw.h" extern SaveContext gSaveContext; @@ -219,14 +218,21 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) { if (RAND_GET_OPTION(RSK_SHUFFLE_ADULT_TRADE) && flagType == FLAG_RANDOMIZER_INF) { switch (flag) { case RAND_INF_ADULT_TRADES_DMT_TRADE_BROKEN_SWORD: - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_SWORD_BROKEN); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_SWORD_BROKEN); + Inventory_ReplaceItem(gPlayState, ITEM_SWORD_BROKEN, Randomizer_GetNextAdultTradeItem()); break; case RAND_INF_ADULT_TRADES_DMT_TRADE_EYEDROPS: - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_EYEDROPS); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_EYEDROPS); + Inventory_ReplaceItem(gPlayState, ITEM_EYEDROPS, Randomizer_GetNextAdultTradeItem()); break; } } + if (flagType == FLAG_EVENT_CHECK_INF && flag == EVENTCHKINF_TALON_WOKEN_IN_CASTLE) { + //remove chicken as this is the only use for it + Flags_UnsetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_CHICKEN); + } + RandomizerCheck rc = GetRandomizerCheckFromFlag(flagType, flag); if (rc == RC_UNKNOWN_CHECK) return; @@ -1133,7 +1139,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l EnFr* enFr = va_arg(args, EnFr*); if ( - (enFr->songIndex >= FROG_STORMS && enFr->reward == GI_HEART_PIECE) || + (enFr->songIndex >= FROG_STORMS && enFr->reward == GI_HEART_PIECE) || (enFr->songIndex < FROG_STORMS && enFr->reward == GI_RUPEE_PURPLE) ) { *should = true; @@ -1142,7 +1148,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } case VB_TRADE_POCKET_CUCCO: { EnNiwLady* enNiwLady = va_arg(args, EnNiwLady*); - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_POCKET_CUCCO); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_POCKET_CUCCO); + Inventory_ReplaceItem(gPlayState, ITEM_POCKET_CUCCO, Randomizer_GetNextAdultTradeItem()); // Trigger the reward now Flags_SetItemGetInf(ITEMGETINF_2E); enNiwLady->actionFunc = func_80ABA778; @@ -1151,13 +1158,15 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l break; } case VB_TRADE_COJIRO: { - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_COJIRO); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_COJIRO); + Inventory_ReplaceItem(gPlayState, ITEM_COJIRO, Randomizer_GetNextAdultTradeItem()); *should = false; break; } case VB_TRADE_ODD_MUSHROOM: { EnDs* granny = va_arg(args, EnDs*); - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_ODD_MUSHROOM); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_ODD_MUSHROOM); + Inventory_ReplaceItem(gPlayState, ITEM_ODD_MUSHROOM, Randomizer_GetNextAdultTradeItem()); // Trigger the reward now Flags_SetItemGetInf(ITEMGETINF_30); granny->actor.textId = 0x504F; @@ -1168,14 +1177,16 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } case VB_TRADE_ODD_POTION: { EnKo* enKo = va_arg(args, EnKo*); - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_ODD_POTION); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_ODD_POTION); + Inventory_ReplaceItem(gPlayState, ITEM_ODD_POTION, Randomizer_GetNextAdultTradeItem()); // Trigger the reward now Flags_SetItemGetInf(ITEMGETINF_31); *should = false; break; } case VB_TRADE_SAW: { - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_SAW); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_SAW); + Inventory_ReplaceItem(gPlayState, ITEM_SAW, Randomizer_GetNextAdultTradeItem()); *should = false; break; } @@ -1192,14 +1203,16 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l if (func_8002F368(gPlayState) == EXCH_ITEM_PRESCRIPTION || (hasShieldHoldingR && INV_CONTENT(ITEM_TRADE_ADULT) < ITEM_FROG)) { Flags_SetRandomizerInf(RAND_INF_ADULT_TRADES_ZD_TRADE_PRESCRIPTION); - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_PRESCRIPTION); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_PRESCRIPTION); + Inventory_ReplaceItem(gPlayState, ITEM_PRESCRIPTION, Randomizer_GetNextAdultTradeItem()); } else { Flags_SetRandomizerInf(RAND_INF_KING_ZORA_THAWED); } } else { - if (enKz->isTrading){ + if (enKz->isTrading) { Flags_SetRandomizerInf(RAND_INF_ADULT_TRADES_ZD_TRADE_PRESCRIPTION); - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_PRESCRIPTION); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_PRESCRIPTION); + Inventory_ReplaceItem(gPlayState, ITEM_PRESCRIPTION, Randomizer_GetNextAdultTradeItem()); } else { Flags_SetRandomizerInf(RAND_INF_KING_ZORA_THAWED); } @@ -1208,7 +1221,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l break; } case VB_TRADE_FROG: { - Randomizer_ConsumeAdultTradeItem(gPlayState, ITEM_FROG); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_FROG); + Inventory_ReplaceItem(gPlayState, ITEM_FROG, Randomizer_GetNextAdultTradeItem()); *should = false; break; } @@ -1236,9 +1250,9 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l if (!RAND_GET_OPTION(RSK_SHUFFLE_ADULT_TRADE)) { break; } - if (PLAYER_HAS_SHUFFLED_ADULT_TRADE_ITEM(ITEM_COJIRO)) { + if (Flags_GetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_COJIRO)) { *should = false; - } else if (PLAYER_HAS_SHUFFLED_ADULT_TRADE_ITEM(ITEM_ODD_POTION)) { + } else if (Flags_GetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_ODD_POTION)) { *should = true; } else { *should = Flags_GetItemGetInf(ITEMGETINF_30); // Traded odd mushroom @@ -1250,10 +1264,10 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l break; } - if (PLAYER_HAS_SHUFFLED_ADULT_TRADE_ITEM(ITEM_COJIRO)) { + if (Flags_GetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_COJIRO)) { *should = false; } else { - *should = PLAYER_HAS_SHUFFLED_ADULT_TRADE_ITEM(ITEM_ODD_POTION); + *should = Flags_GetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_ODD_POTION); } break; @@ -1595,6 +1609,13 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } break; } + case VB_HEISHI2_ACCEPT_ITEM_AS_ZELDAS_LETTER: { + if (*should) { + //remove zelda's letter as this is the only use for it + Flags_UnsetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA); + } + break; + } case VB_FREEZE_ON_SKULL_TOKEN: case VB_TRADE_TIMER_ODD_MUSHROOM: case VB_TRADE_TIMER_FROG: @@ -2293,6 +2314,13 @@ void RandomizerOnKaleidoscopeUpdateHandler(int16_t inDungeonScene) { prevKaleidoState = gPlayState->pauseCtx.state; } +void RandomizerOnCuccoOrChickenHatch() { + if (LINK_IS_CHILD) { + Flags_UnsetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_WEIRD_EGG); + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_CHICKEN); + } +} + void RandomizerRegisterHooks() { static uint32_t onFlagSetHook = 0; static uint32_t onSceneFlagSetHook = 0; @@ -2310,6 +2338,7 @@ void RandomizerRegisterHooks() { static uint32_t onPlayDestroyHook = 0; static uint32_t onExitGameHook = 0; static uint32_t onKaleidoUpdateHook = 0; + static uint32_t onCuccoOrChickenHatchHook = 0; static uint32_t fishsanityOnActorInitHook = 0; static uint32_t fishsanityOnActorUpdateHook = 0; @@ -2345,6 +2374,7 @@ void RandomizerRegisterHooks() { GameInteractor::Instance->UnregisterGameHook(onPlayDestroyHook); GameInteractor::Instance->UnregisterGameHook(onExitGameHook); GameInteractor::Instance->UnregisterGameHook(onKaleidoUpdateHook); + GameInteractor::Instance->UnregisterGameHook(onCuccoOrChickenHatchHook); GameInteractor::Instance->UnregisterGameHook(fishsanityOnActorInitHook); GameInteractor::Instance->UnregisterGameHook(fishsanityOnActorUpdateHook); @@ -2373,6 +2403,7 @@ void RandomizerRegisterHooks() { onPlayDestroyHook = 0; onExitGameHook = 0; onKaleidoUpdateHook = 0; + onCuccoOrChickenHatchHook = 0; fishsanityOnActorInitHook = 0; fishsanityOnActorUpdateHook = 0; @@ -2414,6 +2445,7 @@ void RandomizerRegisterHooks() { onPlayDestroyHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnPlayDestroyHandler); onExitGameHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnExitGameHandler); onKaleidoUpdateHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnKaleidoscopeUpdateHandler); + onCuccoOrChickenHatchHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnCuccoOrChickenHatch); if (RAND_GET_OPTION(RSK_FISHSANITY) != RO_FISHSANITY_OFF) { OTRGlobals::Instance->gRandoContext->GetFishsanity()->InitializeFromSave(); diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 5e5389dd4..408ded72e 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -226,7 +226,7 @@ namespace Rando { case RG_EYEBALL_FROG: case RG_EYEDROPS: case RG_CLAIM_CHECK: - return HasAdultTrade(StaticData::RetrieveItem(itemName).GetGIEntry()->itemId); + return CheckRandoInf(itemName - RG_POCKET_EGG + RAND_INF_ADULT_TRADES_HAS_POCKET_EGG); case RG_BOTTLE_WITH_BIG_POE: case RG_BOTTLE_WITH_BLUE_FIRE: case RG_BOTTLE_WITH_BLUE_POTION: @@ -1509,7 +1509,7 @@ namespace Rando { case RG_EYEBALL_FROG: case RG_EYEDROPS: case RG_CLAIM_CHECK: - SetAdultTrade(item.GetGIEntry()->itemId, state); + SetRandoInf(randoGet - RG_POCKET_EGG + RAND_INF_ADULT_TRADES_HAS_POCKET_EGG, state); break; case RG_PROGRESSIVE_HOOKSHOT: { @@ -2079,26 +2079,10 @@ namespace Rando { return ((1 << item) & mSaveContext->inventory.questItems); } - bool Logic::HasAdultTrade(uint32_t itemID) { - int tradeIndex = itemID - ITEM_POCKET_EGG; - return mSaveContext->ship.quest.data.randomizer.adultTradeItems & (1 << tradeIndex); - } - - void Logic::SetAdultTrade(uint32_t itemID, bool state) { - int tradeIndex = itemID - ITEM_POCKET_EGG; - if (!state) { - mSaveContext->ship.quest.data.randomizer.adultTradeItems &= ~(1 << tradeIndex); - } - else { - mSaveContext->ship.quest.data.randomizer.adultTradeItems |= (1 << tradeIndex); - } - } - void Logic::SetQuestItem(uint32_t item, bool state) { if (!state) { mSaveContext->inventory.questItems &= ~(1 << item); - } - else { + } else { mSaveContext->inventory.questItems |= (1 << item); } } @@ -2118,8 +2102,7 @@ namespace Rando { void Logic::SetDungeonItem(uint32_t item, uint32_t dungeonIndex, bool state) { if (!state) { mSaveContext->inventory.dungeonItems[dungeonIndex] &= ~gBitFlags[item]; - } - else { + } else { mSaveContext->inventory.dungeonItems[dungeonIndex] |= gBitFlags[item]; } } @@ -2131,8 +2114,7 @@ namespace Rando { void Logic::SetRandoInf(uint32_t flag, bool state) { if (!state) { mSaveContext->ship.randomizerInf[flag >> 4] &= ~(1 << (flag & 0xF)); - } - else { + } else { mSaveContext->ship.randomizerInf[flag >> 4] |= (1 << (flag & 0xF)); } } @@ -2144,8 +2126,7 @@ namespace Rando { void Logic::SetEventChkInf(int32_t flag, bool state) { if (!state) { mSaveContext->eventChkInf[flag >> 4] &= ~(1 << (flag & 0xF)); - } - else { + } else { mSaveContext->eventChkInf[flag >> 4] |= (1 << (flag & 0xF)); } } diff --git a/soh/soh/Enhancements/randomizer/logic.h b/soh/soh/Enhancements/randomizer/logic.h index 77d6b2573..4286cc5c3 100644 --- a/soh/soh/Enhancements/randomizer/logic.h +++ b/soh/soh/Enhancements/randomizer/logic.h @@ -261,8 +261,6 @@ class Logic { bool CheckEquipment(uint32_t item); bool CheckQuestItem(uint32_t item); void SetQuestItem(uint32_t item, bool state); - bool HasAdultTrade(uint32_t item); - void SetAdultTrade(uint32_t item, bool state); uint8_t GetSmallKeyCount(uint32_t dungeonIndex); void SetSmallKeyCount(uint32_t dungeonIndex, uint8_t count); bool CheckDungeonItem(uint32_t item, uint32_t dungeonIndex); diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index e43acf57c..8c4d05a4f 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -1325,6 +1325,30 @@ typedef enum { RAND_INF_FISHING_HOLE_UNLOCKED, RAND_INF_FISHING_HOLE_KEY_OBTAINED, + RAND_INF_CHILD_TRADES_HAS_WEIRD_EGG, + RAND_INF_CHILD_TRADES_HAS_CHICKEN, + RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA, + RAND_INF_CHILD_TRADES_HAS_MASK_KEATON, + RAND_INF_CHILD_TRADES_HAS_MASK_SKULL, + RAND_INF_CHILD_TRADES_HAS_MASK_SPOOKY, + RAND_INF_CHILD_TRADES_HAS_MASK_BUNNY, + RAND_INF_CHILD_TRADES_HAS_MASK_GORON, + RAND_INF_CHILD_TRADES_HAS_MASK_ZORA, + RAND_INF_CHILD_TRADES_HAS_MASK_GERUDO, + RAND_INF_CHILD_TRADES_HAS_MASK_TRUTH, + + RAND_INF_ADULT_TRADES_HAS_POCKET_EGG, + RAND_INF_ADULT_TRADES_HAS_POCKET_CUCCO, + RAND_INF_ADULT_TRADES_HAS_COJIRO, + RAND_INF_ADULT_TRADES_HAS_ODD_MUSHROOM, + RAND_INF_ADULT_TRADES_HAS_ODD_POTION, + RAND_INF_ADULT_TRADES_HAS_SAW, + RAND_INF_ADULT_TRADES_HAS_SWORD_BROKEN, + RAND_INF_ADULT_TRADES_HAS_PRESCRIPTION, + RAND_INF_ADULT_TRADES_HAS_FROG, + RAND_INF_ADULT_TRADES_HAS_EYEDROPS, + RAND_INF_ADULT_TRADES_HAS_CLAIM_CHECK, + // If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16) RAND_INF_MAX, diff --git a/soh/soh/Enhancements/randomizer/savefile.cpp b/soh/soh/Enhancements/randomizer/savefile.cpp index 7e91026b0..fba7c688b 100644 --- a/soh/soh/Enhancements/randomizer/savefile.cpp +++ b/soh/soh/Enhancements/randomizer/savefile.cpp @@ -260,11 +260,6 @@ extern "C" void Randomizer_InitSaveFile() { // Give Link's pocket item GiveLinksPocketItem(); - // shuffle adult trade quest - if (Randomizer_GetSettingValue(RSK_SHUFFLE_ADULT_TRADE)) { - gSaveContext.ship.quest.data.randomizer.adultTradeItems = 0; - } - // remove One Time scrubs with scrubsanity off if (Randomizer_GetSettingValue(RSK_SHUFFLE_SCRUBS) == RO_SCRUBS_OFF) { Flags_SetRandomizerInf(RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE); @@ -316,6 +311,7 @@ extern "C" void Randomizer_InitSaveFile() { // Set "Got Zelda's Letter" flag. Also ensures Saria is back at SFM. Flags_SetEventChkInf(EVENTCHKINF_OBTAINED_ZELDAS_LETTER); + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA); // Got item from impa Flags_SetEventChkInf(EVENTCHKINF_LEARNED_ZELDAS_LULLABY); @@ -325,6 +321,7 @@ extern "C" void Randomizer_InitSaveFile() { // set this at the end to ensure we always start with the letter // this is for the off chance we got the weird egg from impa (which should never happen) INV_CONTENT(ITEM_LETTER_ZELDA) = ITEM_LETTER_ZELDA; + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA); } if (Randomizer_GetSettingValue(RSK_SHUFFLE_MASTER_SWORD) && startingAge == RO_AGE_ADULT) { @@ -375,6 +372,7 @@ extern "C" void Randomizer_InitSaveFile() { if (Randomizer_GetSettingValue(RSK_KAK_GATE) == RO_KAK_GATE_OPEN) { Flags_SetInfTable(INFTABLE_SHOWED_ZELDAS_LETTER_TO_GATE_GUARD); + Flags_UnsetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA); } if (Randomizer_GetSettingValue(RSK_GERUDO_FORTRESS) == RO_GF_CARPENTERS_FAST || @@ -412,6 +410,16 @@ extern "C" void Randomizer_InitSaveFile() { if (Randomizer_GetSettingValue(RSK_COMPLETE_MASK_QUEST)) { Flags_SetInfTable(INFTABLE_GATE_GUARD_PUT_ON_KEATON_MASK); Flags_SetEventChkInf(EVENTCHKINF_PAID_BACK_BUNNY_HOOD_FEE); + + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_MASK_KEATON); + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_MASK_SKULL); + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_MASK_SPOOKY); + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_MASK_BUNNY); + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_MASK_GORON); + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_MASK_ZORA); + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_MASK_GERUDO); + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_MASK_TRUTH); + gSaveContext.itemGetInf[3] |= 0x100; // Sold Keaton Mask gSaveContext.itemGetInf[3] |= 0x200; // Sold Skull Mask gSaveContext.itemGetInf[3] |= 0x400; // Sold Spooky Mask diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index f91696191..55c7d204e 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -218,8 +218,6 @@ void SaveManager::LoadRandomizerVersion1() { } randoContext->AddHint(RH_GANONDORF_JOKE, Rando::Hint(RH_GANONDORF_JOKE, {CustomMessage(ganonText)})); - SaveManager::Instance->LoadData("adultTradeItems", gSaveContext.ship.quest.data.randomizer.adultTradeItems); - SaveManager::Instance->LoadData("triforcePiecesCollected", gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected); SaveManager::Instance->LoadData("pendingIceTrapCount", gSaveContext.ship.pendingIceTrapCount); @@ -348,8 +346,6 @@ void SaveManager::LoadRandomizerVersion2() { SaveManager::Instance->LoadData("warpPreludeText", warpPreludeText); randoContext->AddHint(RH_PRELUDE_WARP_LOC, Rando::Hint(RH_PRELUDE_WARP_LOC, {CustomMessage(warpPreludeText)})); - SaveManager::Instance->LoadData("adultTradeItems", gSaveContext.ship.quest.data.randomizer.adultTradeItems); - SaveManager::Instance->LoadData("triforcePiecesCollected", gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected); SaveManager::Instance->LoadData("pendingIceTrapCount", gSaveContext.ship.pendingIceTrapCount); @@ -445,8 +441,6 @@ void SaveManager::LoadRandomizerVersion3() { randoContext->AddHint(hint, Rando::Hint(hint, json)); }); - SaveManager::Instance->LoadData("adultTradeItems", gSaveContext.ship.quest.data.randomizer.adultTradeItems); - SaveManager::Instance->LoadData("triforcePiecesCollected", gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected); SaveManager::Instance->LoadData("pendingIceTrapCount", gSaveContext.ship.pendingIceTrapCount); @@ -582,8 +576,6 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f }); }); - SaveManager::Instance->SaveData("adultTradeItems", saveContext->ship.quest.data.randomizer.adultTradeItems); - SaveManager::Instance->SaveData("triforcePiecesCollected", saveContext->ship.quest.data.randomizer.triforcePiecesCollected); SaveManager::Instance->SaveData("pendingIceTrapCount", saveContext->ship.pendingIceTrapCount); diff --git a/soh/src/code/z_kankyo.c b/soh/src/code/z_kankyo.c index df5decc4a..2c88ecd80 100644 --- a/soh/src/code/z_kankyo.c +++ b/soh/src/code/z_kankyo.c @@ -6,6 +6,8 @@ #include "soh/frame_interpolation.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" +#include "soh/Enhancements/game-interactor/GameInteractor.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" typedef enum { /* 0 */ LENS_FLARE_CIRCLE0, @@ -2111,6 +2113,7 @@ void func_80075B44(PlayState* play) { if ((Inventory_ReplaceItem(play, ITEM_WEIRD_EGG, ITEM_CHICKEN) || Inventory_HatchPocketCucco(play)) && play->csCtx.state == 0 && !Player_InCsMode(play)) { + GameInteractor_ExecuteOnCuccoOrChickenHatch(); Message_StartTextbox(play, 0x3066, NULL); } play->envCtx.unk_E0++; diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index 1daa29fb9..f424b9fcd 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -4,7 +4,6 @@ #include "textures/do_action_static/do_action_static.h" #include "textures/icon_item_static/icon_item_static.h" #include "soh_assets.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/Enhancements/randomizer/randomizer_entrance.h" #include "libultraship/bridge.h" @@ -2446,8 +2445,17 @@ u8 Item_Give(PlayState* play, u8 item) { Flags_SetItemGetInf(ITEMGETINF_OBTAINED_NUT_UPGRADE_FROM_STAGE); } - if (item >= ITEM_POCKET_EGG) { - gSaveContext.ship.quest.data.randomizer.adultTradeItems |= ADULT_TRADE_FLAG(item); + if (IS_RANDO) { + if (item >= ITEM_POCKET_EGG) { + Flags_SetRandomizerInf(item - ITEM_POCKET_EGG + RAND_INF_ADULT_TRADES_HAS_POCKET_EGG); + } else if (item == ITEM_LETTER_ZELDA) { + //don't care about zelda's letter if it's already been shown to the guard + if (!Flags_GetInfTable(INFTABLE_SHOWED_ZELDAS_LETTER_TO_GATE_GUARD)) { + Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA); + } + } else { + Flags_SetRandomizerInf(item - ITEM_WEIRD_EGG + RAND_INF_CHILD_TRADES_HAS_WEIRD_EGG); + } } temp = INV_CONTENT(item); @@ -2759,12 +2767,12 @@ bool Inventory_HatchPocketCucco(PlayState* play) { return Inventory_ReplaceItem(play, ITEM_POCKET_EGG, ITEM_POCKET_CUCCO); } - if (!PLAYER_HAS_SHUFFLED_ADULT_TRADE_ITEM(ITEM_POCKET_EGG)) { + if (!Flags_GetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_POCKET_EGG)) { return 0; } - gSaveContext.ship.quest.data.randomizer.adultTradeItems &= ~ADULT_TRADE_FLAG(ITEM_POCKET_EGG); - gSaveContext.ship.quest.data.randomizer.adultTradeItems |= ADULT_TRADE_FLAG(ITEM_POCKET_CUCCO); + Flags_UnsetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_POCKET_EGG); + Flags_SetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_POCKET_CUCCO); Inventory_ReplaceItem(play, ITEM_POCKET_EGG, ITEM_POCKET_CUCCO); return 1; } diff --git a/soh/src/code/z_play.c b/soh/src/code/z_play.c index 115369171..e625f4b53 100644 --- a/soh/src/code/z_play.c +++ b/soh/src/code/z_play.c @@ -521,6 +521,7 @@ void Play_Init(GameState* thisx) { if (Inventory_ReplaceItem(play, ITEM_WEIRD_EGG, ITEM_CHICKEN) || Inventory_HatchPocketCucco(play)) { + GameInteractor_ExecuteOnCuccoOrChickenHatch(); Message_StartTextbox(play, 0x3066, NULL); } diff --git a/soh/src/code/z_scene_table.c b/soh/src/code/z_scene_table.c index c7d76db01..a85965a82 100644 --- a/soh/src/code/z_scene_table.c +++ b/soh/src/code/z_scene_table.c @@ -24,7 +24,6 @@ #include "overlays/actors/ovl_Bg_Dodoago/z_bg_dodoago.h" #include "soh/mq_asset_hacks.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" @@ -1300,7 +1299,7 @@ void func_8009EE44(PlayState* play) { bool playerHasCojiro = INV_CONTENT(ITEM_COJIRO) == ITEM_COJIRO; if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_ADULT_TRADE)) { - playerHasCojiro = PLAYER_HAS_SHUFFLED_ADULT_TRADE_ITEM(ITEM_COJIRO); + playerHasCojiro = Flags_GetRandomizerInf(RAND_INF_ADULT_TRADES_HAS_COJIRO); } if ((play->roomCtx.unk_74[0] == 0) && playerHasCojiro) { if (play->roomCtx.unk_74[1] == 50) { diff --git a/soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c b/soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c index ebc1b07b4..3a85be38b 100644 --- a/soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c +++ b/soh/src/overlays/actors/ovl_En_Ds/z_en_ds.c @@ -6,7 +6,6 @@ #include "z_en_ds.h" #include "objects/object_ds/object_ds.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" diff --git a/soh/src/overlays/actors/ovl_En_Go/z_en_go.c b/soh/src/overlays/actors/ovl_En_Go/z_en_go.c index 22117f9d0..bb43d4709 100644 --- a/soh/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/soh/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -3,7 +3,6 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_oF1d_map/object_oF1d_map.h" #include "soh/frame_interpolation.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED) diff --git a/soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c b/soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c index 1462f8302..264daa595 100644 --- a/soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c +++ b/soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c @@ -3,7 +3,6 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_oF1d_map/object_oF1d_map.h" #include "soh/frame_interpolation.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" diff --git a/soh/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c b/soh/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c index 3a0824bc1..0bb2b1e9d 100644 --- a/soh/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c +++ b/soh/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c @@ -12,6 +12,8 @@ #include "overlays/actors/ovl_En_Bom/z_en_bom.h" #include "overlays/actors/ovl_Bg_Spot15_Saku/z_bg_spot15_saku.h" #include "soh/ResourceManagerHelpers.h" +#include "soh/Enhancements/game-interactor/GameInteractor.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #define FLAGS (ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY) @@ -407,7 +409,7 @@ void func_80A53AD4(EnHeishi2* this, PlayState* play) { this->unk_300 = TEXT_STATE_DONE; if (Actor_ProcessTalkRequest(&this->actor, play)) { exchangeItemId = func_8002F368(play); - if (exchangeItemId == EXCH_ITEM_LETTER_ZELDA) { + if (GameInteractor_Should(VB_HEISHI2_ACCEPT_ITEM_AS_ZELDAS_LETTER, exchangeItemId == EXCH_ITEM_LETTER_ZELDA, exchangeItemId)) { Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); player->actor.textId = 0x2010; this->unk_300 = TEXT_STATE_EVENT; diff --git a/soh/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/soh/src/overlays/actors/ovl_En_Hs/z_en_hs.c index 468d2124f..0ca12f878 100644 --- a/soh/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/soh/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -7,7 +7,6 @@ #include "z_en_hs.h" #include "vt.h" #include "objects/object_hs/object_hs.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" diff --git a/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c b/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c index 33c86821f..9e70ebce1 100644 --- a/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c +++ b/soh/src/overlays/actors/ovl_En_Ko/z_en_ko.c @@ -10,7 +10,6 @@ #include "objects/object_km1/object_km1.h" #include "objects/object_kw1/object_kw1.h" #include "vt.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" diff --git a/soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c b/soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c index 7e0a3521e..99695266b 100644 --- a/soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c +++ b/soh/src/overlays/actors/ovl_En_Kz/z_en_kz.c @@ -6,7 +6,6 @@ #include "z_en_kz.h" #include "objects/object_kz/object_kz.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" diff --git a/soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c index b1891a296..56f0e70b2 100644 --- a/soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/soh/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -6,7 +6,6 @@ #include "z_en_mk.h" #include "objects/object_mk/object_mk.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" diff --git a/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c b/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c index 2c3b2bbe5..59f2cafc6 100644 --- a/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c +++ b/soh/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c @@ -3,7 +3,6 @@ #include "objects/object_os_anime/object_os_anime.h" #include "overlays/actors/ovl_En_Niw/z_en_niw.h" #include "vt.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" diff --git a/soh/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c b/soh/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c index d13309059..15940afc2 100644 --- a/soh/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c +++ b/soh/src/overlays/actors/ovl_En_Toryo/z_en_toryo.c @@ -6,7 +6,6 @@ #include "z_en_toryo.h" #include "objects/object_toryo/object_toryo.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" #include "soh/OTRGlobals.h" #include "soh/ResourceManagerHelpers.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c index 6e8a42803..9096271c1 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c @@ -1,7 +1,7 @@ #include "z_kaleido_scope.h" #include "textures/parameter_static/parameter_static.h" #include "textures/icon_item_static/icon_item_static.h" -#include "soh/Enhancements/randomizer/adult_trade_shuffle.h" +#include "soh/Enhancements/randomizer/ShuffleTradeItems.h" #include "soh/Enhancements/randomizer/randomizerTypes.h" #include "soh/Enhancements/enhancementTypes.h" #include "soh/Enhancements/cosmetics/cosmeticsTypes.h" @@ -316,6 +316,10 @@ void KaleidoScope_HandleItemCycleExtras(PlayState* play, u8 slot, bool canCycle, } bool CanMaskSelect() { + if (IS_RANDO) { + return CVarGetInteger(CVAR_ENHANCEMENT("MaskSelect"), 0) /* || Randomizer_GetSettingValue(RSK_SHUFFLE_CHILD_TRADE) */; + } + // only allow mask select when: // the shop is open: // * zelda's letter check: Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_ZELDAS_LETTER) @@ -333,12 +337,20 @@ void KaleidoScope_HandleItemCycles(PlayState* play) { play, SLOT_TRADE_CHILD, CanMaskSelect(), - INV_CONTENT(ITEM_TRADE_CHILD) <= ITEM_MASK_KEATON || INV_CONTENT(ITEM_TRADE_CHILD) > ITEM_MASK_TRUTH ? - ITEM_MASK_TRUTH : - INV_CONTENT(ITEM_TRADE_CHILD) - 1, - INV_CONTENT(ITEM_TRADE_CHILD) >= ITEM_MASK_TRUTH || INV_CONTENT(ITEM_TRADE_CHILD) < ITEM_MASK_KEATON ? - ITEM_MASK_KEATON : - INV_CONTENT(ITEM_TRADE_CHILD) + 1, + IS_RANDO ? + Randomizer_GetPrevChildTradeItem() : + ( + INV_CONTENT(ITEM_TRADE_CHILD) <= ITEM_MASK_KEATON || INV_CONTENT(ITEM_TRADE_CHILD) > ITEM_MASK_TRUTH ? + ITEM_MASK_TRUTH : + INV_CONTENT(ITEM_TRADE_CHILD) - 1 + ), + IS_RANDO ? + Randomizer_GetNextChildTradeItem() : + ( + INV_CONTENT(ITEM_TRADE_CHILD) >= ITEM_MASK_TRUTH || INV_CONTENT(ITEM_TRADE_CHILD) < ITEM_MASK_KEATON ? + ITEM_MASK_KEATON : + INV_CONTENT(ITEM_TRADE_CHILD) + 1 + ), true ); @@ -379,14 +391,22 @@ void KaleidoScope_DrawItemCycles(PlayState* play) { play, SLOT_TRADE_CHILD, CanMaskSelect(), - INV_CONTENT(ITEM_TRADE_CHILD) <= ITEM_MASK_KEATON || INV_CONTENT(ITEM_TRADE_CHILD) > ITEM_MASK_TRUTH ? - ITEM_MASK_TRUTH : - INV_CONTENT(ITEM_TRADE_CHILD) - 1, - INV_CONTENT(ITEM_TRADE_CHILD) >= ITEM_MASK_TRUTH || INV_CONTENT(ITEM_TRADE_CHILD) < ITEM_MASK_KEATON ? - ITEM_MASK_KEATON : - INV_CONTENT(ITEM_TRADE_CHILD) + 1 + IS_RANDO ? + Randomizer_GetPrevChildTradeItem() : + ( + INV_CONTENT(ITEM_TRADE_CHILD) <= ITEM_MASK_KEATON || INV_CONTENT(ITEM_TRADE_CHILD) > ITEM_MASK_TRUTH ? + ITEM_MASK_TRUTH : + INV_CONTENT(ITEM_TRADE_CHILD) - 1 + ), + IS_RANDO ? + Randomizer_GetNextChildTradeItem() : + ( + INV_CONTENT(ITEM_TRADE_CHILD) >= ITEM_MASK_TRUTH || INV_CONTENT(ITEM_TRADE_CHILD) < ITEM_MASK_KEATON ? + ITEM_MASK_KEATON : + INV_CONTENT(ITEM_TRADE_CHILD) + 1 + ) ); - + //draw the adult trade select KaleidoScope_DrawItemCycleExtras( play, From 2d78cb561ac504b160f9d1988839fc7890a9d876 Mon Sep 17 00:00:00 2001 From: Jordan Longstaff Date: Thu, 27 Feb 2025 22:33:48 -0500 Subject: [PATCH 67/68] Move Broken Giant's Knife fix hook to its own file (#5049) * Move Broken Giant's Knife fix hook to its own file * Separate IS_RANDO out of value macro * Remove redundant extern * One-line comment --- .../Enhancements/Fixes/BrokenGiantsKnife.cpp | 46 +++++++++++++++++++ soh/soh/Enhancements/mods.cpp | 39 ---------------- 2 files changed, 46 insertions(+), 39 deletions(-) create mode 100644 soh/soh/Enhancements/Fixes/BrokenGiantsKnife.cpp diff --git a/soh/soh/Enhancements/Fixes/BrokenGiantsKnife.cpp b/soh/soh/Enhancements/Fixes/BrokenGiantsKnife.cpp new file mode 100644 index 000000000..6d21d812b --- /dev/null +++ b/soh/soh/Enhancements/Fixes/BrokenGiantsKnife.cpp @@ -0,0 +1,46 @@ +#include +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/ShipInit.hpp" +#include "functions.h" +#include "macros.h" +#include "variables.h" +#include "z64save.h" + +extern "C" PlayState* gPlayState; + +static constexpr int32_t CVAR_BGS_FIX_DEFAULT = 0; +#define CVAR_BGS_FIX_NAME CVAR_ENHANCEMENT("FixBrokenGiantsKnife") +#define CVAR_BGS_FIX_VALUE CVarGetInteger(CVAR_BGS_FIX_NAME, CVAR_BGS_FIX_DEFAULT) + +void OnReceiveBrokenGiantsKnife(GetItemEntry itemEntry) { + if (itemEntry.itemId != ITEM_SWORD_BGS) { + return; + } + + // Flag wasn't reset because Kokiri or Master Sword was missing, so we need to bypass those checks + int32_t bypassEquipmentChecks = (1 << EQUIP_INV_SWORD_KOKIRI) | (1 << EQUIP_INV_SWORD_MASTER); + + int32_t allSwordsInEquipment = bypassEquipmentChecks | ALL_EQUIP_VALUE(EQUIP_TYPE_SWORD); + int32_t allSwordFlags = (1 << EQUIP_INV_SWORD_KOKIRI) | (1 << EQUIP_INV_SWORD_MASTER) | + (1 << EQUIP_INV_SWORD_BIGGORON) | (1 << EQUIP_INV_SWORD_BROKENGIANTKNIFE); + + if (allSwordsInEquipment != allSwordFlags) { + return; + } + + gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE); + + if (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KNIFE) { + gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS; + if (gPlayState != NULL) { + Interface_LoadItemIcon1(gPlayState, 0); + } + } +} + +void RegisterBrokenGiantsKnifeFix() { + // If enhancement is off, flag should be handled exclusively by vanilla behaviour + COND_HOOK(OnItemReceive, CVAR_BGS_FIX_VALUE || IS_RANDO, OnReceiveBrokenGiantsKnife); +} + +static RegisterShipInitFunc initFunc(RegisterBrokenGiantsKnifeFix, { CVAR_BGS_FIX_NAME, "IS_RANDO" }); diff --git a/soh/soh/Enhancements/mods.cpp b/soh/soh/Enhancements/mods.cpp index e6777644e..cd60f7d8c 100644 --- a/soh/soh/Enhancements/mods.cpp +++ b/soh/soh/Enhancements/mods.cpp @@ -35,7 +35,6 @@ #include "src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h" #include "src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h" #include "src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.h" -#include "src/overlays/actors/ovl_En_Door/z_en_door.h" #include "src/overlays/actors/ovl_En_Elf/z_en_elf.h" #include "objects/object_link_boy/object_link_boy.h" #include "objects/object_link_child/object_link_child.h" @@ -47,7 +46,6 @@ extern "C" { #include "align_asset_macro.h" #include "macros.h" #include "soh/cvar_prefixes.h" -#include "functions.h" #include "variables.h" #include "functions.h" #include "src/overlays/actors/ovl_En_Door/z_en_door.h" @@ -552,42 +550,6 @@ void RegisterResetNaviTimer() { }); } -void RegisterBrokenGiantsKnifeFix() { - GameInteractor::Instance->RegisterGameHook([](GetItemEntry itemEntry) { - if (itemEntry.itemId != ITEM_SWORD_BGS) { - return; - } - - int32_t bypassEquipmentChecks = 0; - - if (IS_RANDO || CVarGetInteger(CVAR_ENHANCEMENT("FixBrokenGiantsKnife"), 0)) { - // Flag wasn't reset because Kokiri or Master Sword was missing, so we need to - // bypass those checks - bypassEquipmentChecks |= (1 << EQUIP_INV_SWORD_KOKIRI) | (1 << EQUIP_INV_SWORD_MASTER); - } else { - // If enhancement is off, flag should be handled exclusively by vanilla behaviour - return; - } - - int32_t allSwordsInEquipment = bypassEquipmentChecks | ALL_EQUIP_VALUE(EQUIP_TYPE_SWORD); - int32_t allSwordFlags = (1 << EQUIP_INV_SWORD_KOKIRI) | (1 << EQUIP_INV_SWORD_MASTER) | - (1 << EQUIP_INV_SWORD_BIGGORON) | (1 << EQUIP_INV_SWORD_BROKENGIANTKNIFE); - - if (allSwordsInEquipment != allSwordFlags) { - return; - } - - gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE); - - if (gSaveContext.equips.buttonItems[0] == ITEM_SWORD_KNIFE) { - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS; - if (gPlayState != NULL) { - Interface_LoadItemIcon1(gPlayState, 0); - } - } - }); -} - //this map is used for enemies that can be uniquely identified by their id //and that are always counted //enemies that can't be uniquely identified by their id @@ -1098,7 +1060,6 @@ void InitMods() { RegisterMenuPathFix(); RegisterMirrorModeHandler(); RegisterResetNaviTimer(); - RegisterBrokenGiantsKnifeFix(); RegisterEnemyDefeatCounts(); RegisterBossDefeatTimestamps(); RegisterRandomizedEnemySizes(); From eb6c0d9d29da4abdfe23ead81d53d7b765aba6ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Fri, 28 Feb 2025 03:34:16 +0000 Subject: [PATCH 68/68] presets: clear blocks (#5098) * presets: clear blocks this avoids needing to list every new cvar in presets.h * avoid resetting selected preset * no cvar lists, clear less blocks on drop --- soh/soh/Enhancements/presets.cpp | 11 +- soh/soh/Enhancements/presets.h | 499 +------------------------------ soh/soh/OTRGlobals.cpp | 8 +- 3 files changed, 12 insertions(+), 506 deletions(-) diff --git a/soh/soh/Enhancements/presets.cpp b/soh/soh/Enhancements/presets.cpp index 4ba4b62be..2b1812d21 100644 --- a/soh/soh/Enhancements/presets.cpp +++ b/soh/soh/Enhancements/presets.cpp @@ -6,12 +6,6 @@ #include "soh/SohGui/UIWidgets.hpp" #include -void clearCvars(std::vector cvarsToClear) { - for(const char* cvar : cvarsToClear) { - CVarClear(cvar); - } -} - std::string FormatLocations(std::vector locs) { std::string locString = ""; for (auto loc: locs) { @@ -69,10 +63,13 @@ void DrawPresetSelector(PresetType presetTypeId) { ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(6.0f, 4.0f)); if (ImGui::Button(("Apply Preset##" + presetTypeCvar).c_str())) { - clearCvars(presetTypeDef.cvarsToClear); + for(const char* block : presetTypeDef.blocksToClear) { + CVarClearBlock(block); + } if (selectedPresetId != 0) { applyPreset(selectedPresetDef.entries); } + CVarSetInteger(presetTypeCvar.c_str(), selectedPresetId); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); if (presetTypeId == PRESET_TYPE_RANDOMIZER){ Rando::Settings::GetInstance()->ReloadOptions(); diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h index 329fbcdc8..2922ec589 100644 --- a/soh/soh/Enhancements/presets.h +++ b/soh/soh/Enhancements/presets.h @@ -61,499 +61,6 @@ void applyPreset(std::vector entries); // TODO: Ideally everything below this point will come from one/many JSON files -const std::vector enhancementsCvars = { - CVAR_SETTING("DPadOnPause"), - CVAR_SETTING("DpadInText"), - CVAR_SETTING("OcarinaControl.Dpad"), - CVAR_SETTING("OcarinaControl.RStick"), - CVAR_ENHANCEMENT("DpadEquips"), - CVAR_ENHANCEMENT("PauseAnyCursor"), - CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), - CVAR_ENHANCEMENT("NaviOnL"), - CVAR_SETTING("FreeLook.InvertXAxis"), - CVAR_SETTING("FreeLook.InvertYAxis"), - CVAR_SETTING("Controls.RightStickAim"), - CVAR_SETTING("DisableFirstPersonAutoCenterView"), - CVAR_ENHANCEMENT("TextSpeed"), - CVAR_ENHANCEMENT("MweepSpeed"), - CVAR_ENHANCEMENT("ForgeTime"), - CVAR_ENHANCEMENT("ClimbSpeed"), - CVAR_ENHANCEMENT("FasterBlockPush"), - CVAR_ENHANCEMENT("CrawlSpeed"), - CVAR_ENHANCEMENT("FasterHeavyBlockLift"), - CVAR_ENHANCEMENT("NoForcedNavi"), - CVAR_ENHANCEMENT("SkulltulaFreeze"), - CVAR_ENHANCEMENT("MMBunnyHood"), - CVAR_ENHANCEMENT("AdultMasks"), - CVAR_ENHANCEMENT("FastChests"), - CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), - CVAR_ENHANCEMENT("FastDrops"), - CVAR_ENHANCEMENT("BetterOwl"), - CVAR_ENHANCEMENT("FastOcarinaPlayback"), - CVAR_ENHANCEMENT("InstantPutaway"), - CVAR_ENHANCEMENT("FastBoomerang"), - CVAR_ENHANCEMENT("AskToEquip"), - CVAR_ENHANCEMENT("MaskSelect"), - CVAR_ENHANCEMENT("RememberSaveLocation"), - CVAR_ENHANCEMENT("DamageMult"), - CVAR_ENHANCEMENT("FallDamageMult"), - CVAR_ENHANCEMENT("VoidDamageMult"), - CVAR_ENHANCEMENT("BonkDamageMult"), - CVAR_ENHANCEMENT("NoRandomDrops"), - CVAR_ENHANCEMENT("NoHeartDrops"), - CVAR_ENHANCEMENT("EnableBombchuDrops"), - CVAR_ENHANCEMENT("GoronPot"), - CVAR_ENHANCEMENT("FullHealthSpawn"), - CVAR_ENHANCEMENT("DampeWin"), - CVAR_ENHANCEMENT("CustomizeFishing"), - CVAR_ENHANCEMENT("InstantFishing"), - CVAR_ENHANCEMENT("GuaranteeFishingBite"), - CVAR_ENHANCEMENT("FishNeverEscape"), - CVAR_ENHANCEMENT("MinimumFishWeightChild"), - CVAR_ENHANCEMENT("MinimumFishWeightAdult"), - CVAR_ENHANCEMENT("LowHpAlarm"), - CVAR_ENHANCEMENT("MinimalUI"), - CVAR_ENHANCEMENT("DisableNaviCallAudio"), - CVAR_ENHANCEMENT("VisualAgony"), - CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), - CVAR_ENHANCEMENT("EquipmentCanBeRemoved"), - CVAR_ENHANCEMENT("CowOfTime"), - CVAR_ENHANCEMENT("GuardVision"), - CVAR_ENHANCEMENT("TimeFlowFileSelect"), - CVAR_ENHANCEMENT("InjectItemCounts.GoldSkulltula"), - CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), - CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), - CVAR_ENHANCEMENT("DayGravePull"), - CVAR_ENHANCEMENT("DampeAllNight"), - CVAR_ENHANCEMENT("QuitFishingAtDoor"), - CVAR_ENHANCEMENT("SkipSwimDeepEndAnim"), - CVAR_ENHANCEMENT("InstantScarecrow"), - CVAR_ENHANCEMENT("BlueFireArrows"), - CVAR_ENHANCEMENT("SunlightArrows"), - CVAR_ENHANCEMENT("MinFrameCount"), - CVAR_ENHANCEMENT("NewDrops"), - CVAR_ENHANCEMENT("DisableBlackBars"), - CVAR_ENHANCEMENT("DynamicWalletIcon"), - CVAR_ENHANCEMENT("AlwaysShowDungeonMinimapIcon"), - CVAR_ENHANCEMENT("FixMenuLR"), - CVAR_ENHANCEMENT("NGCKaleidoSwitcher"), - CVAR_ENHANCEMENT("FixDungeonMinimapIcon"), - CVAR_ENHANCEMENT("TwoHandedIdle"), - CVAR_ENHANCEMENT("GravediggingTourFix"), - CVAR_ENHANCEMENT("DekuNutUpgradeFix"), - CVAR_ENHANCEMENT("NaviTextFix"), - CVAR_ENHANCEMENT("AnubisFix"), - CVAR_ENHANCEMENT("CrouchStabHammerFix"), - CVAR_ENHANCEMENT("CrouchStabFix"), - CVAR_ENHANCEMENT("GerudoWarriorClothingFix"), - CVAR_ENHANCEMENT("FixCameraDrift"), - CVAR_ENHANCEMENT("FixCameraSwing"), - CVAR_ENHANCEMENT("FixHangingLedgeSwingRate"), - CVAR_ENHANCEMENT("RedGanonBlood"), - CVAR_ENHANCEMENT("HoverFishing"), - CVAR_ENHANCEMENT("N64WeirdFrames"), - CVAR_ENHANCEMENT("BombchusOOB"), - CVAR_ENHANCEMENT("QuickPutaway"), - CVAR_ENHANCEMENT("GSCutscene"), - CVAR_ENHANCEMENT("RestoreRBAValues"), - CVAR_ENHANCEMENT("SkipSaveConfirmation"), - CVAR_ENHANCEMENT("DisableCritWiggle"), - CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), - CVAR_ENHANCEMENT("SkipArrowAnimation"), - CVAR_ENHANCEMENT("SeparateArrows"), - CVAR_ENHANCEMENT("CustomizeShootingGallery"), - CVAR_ENHANCEMENT("InstantShootingGalleryWin"), - CVAR_ENHANCEMENT("ConstantAdultGallery"), - CVAR_ENHANCEMENT("ShootingGalleryAmmoChild"), - CVAR_ENHANCEMENT("ShootingGalleryAmmoAdult"), - CVAR_ENHANCEMENT("CustomizeBombchuBowling"), - CVAR_ENHANCEMENT("BombchuBowlingNoSmallCucco"), - CVAR_ENHANCEMENT("BombchuBowlingNoBigCucco"), - CVAR_ENHANCEMENT("BombchuBowlingAmmo"), - CVAR_ENHANCEMENT("CustomizeOcarinaGame"), - CVAR_ENHANCEMENT("InstantOcarinaGameWin"), - CVAR_ENHANCEMENT("OcarinaGame.NoteSpeed"), - CVAR_ENHANCEMENT("OcarinaUnlimitedFailTime"), - CVAR_ENHANCEMENT("OcarinaGame.StartingNotes"), - CVAR_ENHANCEMENT("OcarinaGame.RoundOneNotes"), - CVAR_ENHANCEMENT("OcarinaGame.RoundTwoNotes"), - CVAR_ENHANCEMENT("OcarinaGame.RoundThreeNotes"), - CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"), - CVAR_ENHANCEMENT("InstantFrogsGameWin"), - CVAR_ENHANCEMENT("FrogsUnlimitedFailTime"), - CVAR_ENHANCEMENT("FrogsModifyFailTime"), - CVAR_ENHANCEMENT("CreditsFix"), - CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), - CVAR_ENHANCEMENT("StaticExplosionRadius"), - CVAR_ENHANCEMENT("NoInputForCredits"), - CVAR_ENHANCEMENT("FastFarores"), - CVAR_ENHANCEMENT("NightGSAlwaysSpawn"), - CVAR_ENHANCEMENT("SkipText"), - CVAR_ENHANCEMENT("LinkDefaultName"), - CVAR_ENHANCEMENT("MarketSneak"), - CVAR_ENHANCEMENT("TimeTravel"), - CVAR_ENHANCEMENT("NutsExplodeBombs"), - CVAR_ENHANCEMENT("BowSlingshotAmmoFix"), - CVAR_ENHANCEMENT("BetterFarore"), - CVAR_ENHANCEMENT("DisableFirstPersonChus"), - CVAR_ENHANCEMENT("BetterBombchuShopping"), - CVAR_ENHANCEMENT("HyperBosses"), - CVAR_ENHANCEMENT("RupeeDash"), - CVAR_ENHANCEMENT("RupeeDashInterval"), - CVAR_ENHANCEMENT("DogFollowsEverywhere"), - CVAR_ENHANCEMENT("DisableTunicWarningText"), - CVAR_ENHANCEMENT("DisableLOD"), - CVAR_ENHANCEMENT("DisableDrawDistance"), - CVAR_ENHANCEMENT("DisableKokiriDrawDistance"), - CVAR_ENHANCEMENT("WidescreenActorCulling"), - CVAR_ENHANCEMENT("ExtendedCullingExcludeGlitchActors"), - CVAR_LOW_RES_MODE, - CVAR_ENHANCEMENT("DrawLineupTick"), - CVAR_ENHANCEMENT("QuickBongoKill"), - CVAR_ENHANCEMENT("FirstPersonGauntlets"), - CVAR_ENHANCEMENT("SceneSpecificDirtPathFix"), - CVAR_Z_FIGHTING_MODE, - CVAR_ENHANCEMENT("AuthenticLogo"), - CVAR_ENHANCEMENT("BowReticle"), - CVAR_ENHANCEMENT("BoomerangFirstPerson"), - CVAR_ENHANCEMENT("BoomerangReticle"), - CVAR_ENHANCEMENT("FixTexturesOOB"), - CVAR_ENHANCEMENT("IvanCoopModeEnabled"), - CVAR_ENHANCEMENT("EnemySpawnsOverWaterboxes"), - CVAR_ENHANCEMENT("TreesDropSticks"), - CVAR_ENHANCEMENT("ShadowTag"), - CVAR_ENHANCEMENT("RandomizedEnemySizes"), - CVAR_ENHANCEMENT("RandomizedEnemies"), - CVAR_ENHANCEMENT("MirroredWorldMode"), - CVAR_ENHANCEMENT("MirroredWorld"), - CVAR_ENHANCEMENT("HyperEnemies"), - CVAR_ENHANCEMENT("HookshotableReticle"), - CVAR_ENHANCEMENT("HideBunnyHood"), - CVAR_ENHANCEMENT("FixVineFall"), - CVAR_ENHANCEMENT("FileSelectMoreInfo"), - CVAR_ENHANCEMENT("EnemyHealthBar"), - CVAR_ENHANCEMENT("BushDropFix"), - CVAR_ENHANCEMENT("AllDogsRichard"), - CVAR_ENHANCEMENT("ExtraTraps.Enabled"), - CVAR_ENHANCEMENT("ExtraTraps.Ammo"), - CVAR_ENHANCEMENT("ExtraTraps.Bomb"), - CVAR_ENHANCEMENT("ExtraTraps.Burn"), - CVAR_ENHANCEMENT("ExtraTraps.Ice"), - CVAR_ENHANCEMENT("ExtraTraps.Kill"), - CVAR_ENHANCEMENT("ExtraTraps.Knockback"), - CVAR_ENHANCEMENT("ExtraTraps.Shock"), - CVAR_ENHANCEMENT("ExtraTraps.Speed"), - CVAR_ENHANCEMENT("ExtraTraps.Teleport"), - CVAR_ENHANCEMENT("ExtraTraps.Void"), - CVAR_ENHANCEMENT("ToTMedallionsColors"), - CVAR_ENHANCEMENT("CuccoStayDurationMult"), - CVAR_ENHANCEMENT("DeleteFileOnDeath"), - CVAR_ENHANCEMENT("EnemySizeScalesHealth"), - CVAR_ENHANCEMENT("BetterAmmoRendering"), - CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), - CVAR_ENHANCEMENT("FixDaruniaDanceSpeed"), - CVAR_ENHANCEMENT("OpenAllHours"), - CVAR_ENHANCEMENT("ResetNaviTimer"), - CVAR_ENHANCEMENT("ScaleAdultEquipmentAsChild"), - CVAR_ENHANCEMENT("LeeverSpawnRate"), - CVAR_ENHANCEMENT("SwordToggle"), - CVAR_ENHANCEMENT("FixFloorSwitches"), - CVAR_ENHANCEMENT("FixZoraHintDialogue"), - CVAR_ENHANCEMENT("HurtContainer"), - CVAR_ENHANCEMENT("PauseWarp"), - CVAR_ENHANCEMENT("PermanentHeartLoss"), - CVAR_ENHANCEMENT("RemoveExplosiveLimit"), - CVAR_ENHANCEMENT("ToggleStrength"), - CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"), - CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Entrances"), - CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), - CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong"), - CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.BossIntro"), - CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), - CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), - CVAR_ENHANCEMENT("TimeSavers.NoForcedDialog"), - CVAR_ENHANCEMENT("TimeSavers.SkipOwlInteractions"), - CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), - CVAR_ENHANCEMENT("TimeSavers.DisableTitleCard"), - CVAR_ENHANCEMENT("TimeSavers.SkipGetItemAnimation"), - CVAR_ENHANCEMENT("TimeSavers.SkipChildStealth"), - CVAR_ENHANCEMENT("TimeSavers.SkipTowerEscape"), - CVAR_ENHANCEMENT("TimeSavers.SkipForcedDialog"), - CVAR_ENHANCEMENT("TimeSavers.SleepingWaterfall"), - CVAR_ENHANCEMENT("SlowTextSpeed"), -}; - -const std::vector cheatCvars = { - CVAR_CONSOLE_WINDOW_OPEN, - CVAR_WINDOW("ActorViewer"), - CVAR_WINDOW("CollisionViewer"), - CVAR_WINDOW("DLViewer"), - CVAR_WINDOW("SaveEditor"), - CVAR_SETTING("WalkModifier.Enabled"), - CVAR_SETTING("WalkModifier.SpeedToggle"), - CVAR_SETTING("WalkModifier.Mapping1"), - CVAR_SETTING("WalkModifier.Mapping2"), - CVAR_SETTING("WalkModifier.SwimMapping1"), - CVAR_SETTING("WalkModifier.SwimMapping2"), - CVAR_ENHANCEMENT("GoronPot"), - CVAR_ENHANCEMENT("DampeWin"), - CVAR_ENHANCEMENT("CustomizeShootingGallery"), - CVAR_ENHANCEMENT("CustomizeBombchuBowling"), - CVAR_ENHANCEMENT("CustomizeFishing"), - CVAR_CHEAT("InfiniteAmmo"), - CVAR_CHEAT("InfiniteEponaBoost"), - CVAR_CHEAT("InfiniteHealth"), - CVAR_CHEAT("InfiniteMagic"), - CVAR_CHEAT("InfiniteMoney"), - CVAR_CHEAT("InfiniteNayru"), - CVAR_CHEAT("NoClip"), - CVAR_CHEAT("ClimbEverything"), - CVAR_CHEAT("HookshotEverything"), - CVAR_CHEAT("HookshotReachMultiplier"), - CVAR_CHEAT("MoonJumpOnL"), - CVAR_CHEAT("SuperTunic"), - CVAR_CHEAT("EasyISG"), - CVAR_CHEAT("EasyQPA"), - CVAR_CHEAT("TimelessEquipment"), - CVAR_CHEAT("NoRestrictItems"), - CVAR_CHEAT("FreezeTime"), - CVAR_GENERAL("PrevTime"), - CVAR_CHEAT("DropsDontDie"), - CVAR_CHEAT("FireproofDekuShield"), - CVAR_CHEAT("ShieldTwoHanded"), - CVAR_CHEAT("TimeSync"), - CVAR_DEVELOPER_TOOLS("DebugEnabled"), - CVAR_DEVELOPER_TOOLS("SkulltulaDebugEnabled"), - CVAR_DEVELOPER_TOOLS("SkipLogoTitle"), - CVAR_DEVELOPER_TOOLS("SaveFileID"), - CVAR_CHEAT("EnableBetaQuest"), - CVAR_DEVELOPER_TOOLS("BetterDebugWarpScreen"), - CVAR_CHEAT("NoRedeadFreeze"), - CVAR_CHEAT("NoKeeseGuayTarget"), - CVAR_CHEAT("BombTimerMultiplier"), - CVAR_CHEAT("NoFishDespawn"), - CVAR_CHEAT("NoBugsDespawn"), - CVAR_SETTING("WalkModifier.DoesntChangeJump"), - CVAR_STATS_WINDOW_OPEN, - CVAR_CHEAT("SaveStatesEnabled"), - CVAR_CHEAT("SaveStatePromise"), - CVAR_DEVELOPER_TOOLS("RegEditEnabled"), - CVAR_CHEAT("DekuStick"), - CVAR_DEVELOPER_TOOLS("DebugWarpScreenTranslation"), - CVAR_DEVELOPER_TOOLS("DebugSaveFileMode"), - CVAR_COSMETIC("Link.BodyScale.Changed"), - CVAR_COSMETIC("Link.BodyScale.Value"), - CVAR_COSMETIC("Link.HeadScale.Changed"), - CVAR_COSMETIC("Link.HeadScale.Value"), - CVAR_COSMETIC("Link.SwordScale.Changed"), - CVAR_COSMETIC("Link.SwordScale.Value"), - CVAR_ENHANCEMENT("RememberMapToggleState"), -}; - -const std::vector randomizerCvars = { - CVAR_RANDOMIZER_ENHANCEMENT("MatchKeyColors"), - CVAR_RANDOMIZER_ENHANCEMENT("QuestItemFanfares"), - CVAR_RANDOMIZER_ENHANCEMENT("RandoRelevantNavi"), - CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), - CVAR_RANDOMIZER_ENHANCEMENT("RandomizeRupeeNames"), - CVAR_RANDOMIZER_SETTING("100GSHint"), - CVAR_RANDOMIZER_SETTING("10GSHint"), - CVAR_RANDOMIZER_SETTING("20GSHint"), - CVAR_RANDOMIZER_SETTING("30GSHint"), - CVAR_RANDOMIZER_SETTING("40GSHint"), - CVAR_RANDOMIZER_SETTING("50GSHint"), - CVAR_RANDOMIZER_SETTING("AllLocationsReachable"), - CVAR_RANDOMIZER_SETTING("AltarHint"), - CVAR_RANDOMIZER_SETTING("BigPoeTargetCount"), - CVAR_RANDOMIZER_SETTING("BigPoesHint"), - CVAR_RANDOMIZER_SETTING("BiggoronHint"), - CVAR_RANDOMIZER_SETTING("BlueFireArrows"), - CVAR_RANDOMIZER_SETTING("BombchuBag"), - CVAR_RANDOMIZER_SETTING("BossKeysanity"), - CVAR_RANDOMIZER_SETTING("BridgeRewardOptions"), - CVAR_RANDOMIZER_SETTING("ChickensHint"), - CVAR_RANDOMIZER_SETTING("CompleteMaskQuest"), - CVAR_RANDOMIZER_SETTING("CuccosToReturn"), - CVAR_RANDOMIZER_SETTING("DampeHint"), - CVAR_RANDOMIZER_SETTING("DecoupleEntrances"), - CVAR_RANDOMIZER_SETTING("DoorOfTime"), - CVAR_RANDOMIZER_SETTING("DungeonCount"), - CVAR_RANDOMIZER_SETTING("EnableBombchuDrops"), - CVAR_RANDOMIZER_SETTING("FishingPoleHint"), - CVAR_RANDOMIZER_SETTING("Fishsanity"), - CVAR_RANDOMIZER_SETTING("FishsanityAgeSplit"), - CVAR_RANDOMIZER_SETTING("FishsanityPondCount"), - CVAR_RANDOMIZER_SETTING("ClosedForest"), - CVAR_RANDOMIZER_SETTING("FrogsHint"), - CVAR_RANDOMIZER_SETTING("FullWallets"), - CVAR_RANDOMIZER_SETTING("GanonTrial"), - CVAR_RANDOMIZER_SETTING("GanonTrialCount"), - CVAR_RANDOMIZER_SETTING("GanondorfHint"), - CVAR_RANDOMIZER_SETTING("FortressCarpenters"), - CVAR_RANDOMIZER_SETTING("GerudoKeys"), - CVAR_RANDOMIZER_SETTING("GossipStoneHints"), - CVAR_RANDOMIZER_SETTING("GregHint"), - CVAR_RANDOMIZER_SETTING("GsExpectSunsSong"), - CVAR_RANDOMIZER_SETTING("HBAHint"), - CVAR_RANDOMIZER_SETTING("HintClarity"), - CVAR_RANDOMIZER_SETTING("HintDistribution"), - CVAR_RANDOMIZER_SETTING("IceTraps"), - CVAR_RANDOMIZER_SETTING("IncludeTycoonWallet"), - CVAR_RANDOMIZER_SETTING("InfiniteUpgrades"), - CVAR_RANDOMIZER_SETTING("ItemPool"), - CVAR_RANDOMIZER_SETTING("KakarikoGate"), - CVAR_RANDOMIZER_SETTING("Keysanity"), - CVAR_RANDOMIZER_SETTING("LacsDungeonCount"), - CVAR_RANDOMIZER_SETTING("LacsMedallionCount"), - CVAR_RANDOMIZER_SETTING("LacsRewardCount"), - CVAR_RANDOMIZER_SETTING("LacsRewardOptions"), - CVAR_RANDOMIZER_SETTING("LacsStoneCount"), - CVAR_RANDOMIZER_SETTING("LacsTokenCount"), - CVAR_RANDOMIZER_SETTING("LinksPocket"), - CVAR_RANDOMIZER_SETTING("LoachHint"), - CVAR_RANDOMIZER_SETTING("LogicRules"), - CVAR_RANDOMIZER_SETTING("MQDungeonCount"), - CVAR_RANDOMIZER_SETTING("MQDungeons"), - CVAR_RANDOMIZER_SETTING("MQDungeonsBottomOfTheWell"), - CVAR_RANDOMIZER_SETTING("MQDungeonsDekuTree"), - CVAR_RANDOMIZER_SETTING("MQDungeonsDodongosCavern"), - CVAR_RANDOMIZER_SETTING("MQDungeonsFireTemple"), - CVAR_RANDOMIZER_SETTING("MQDungeonsForestTemple"), - CVAR_RANDOMIZER_SETTING("MQDungeonsGTG"), - CVAR_RANDOMIZER_SETTING("MQDungeonsGanonsCastle"), - CVAR_RANDOMIZER_SETTING("MQDungeonsIceCavern"), - CVAR_RANDOMIZER_SETTING("MQDungeonsJabuJabu"), - CVAR_RANDOMIZER_SETTING("MQDungeonsSelection"), - CVAR_RANDOMIZER_SETTING("MQDungeonsShadowTemple"), - CVAR_RANDOMIZER_SETTING("MQDungeonsSpiritTemple"), - CVAR_RANDOMIZER_SETTING("MQDungeonsWaterTemple"), - CVAR_RANDOMIZER_SETTING("MalonHint"), - CVAR_RANDOMIZER_SETTING("MaskShopHint"), - CVAR_RANDOMIZER_SETTING("MedallionCount"), - CVAR_RANDOMIZER_SETTING("MerchantAdultWalletWeight"), - CVAR_RANDOMIZER_SETTING("MerchantChildWalletWeight"), - CVAR_RANDOMIZER_SETTING("MerchantFixedPrice"), - CVAR_RANDOMIZER_SETTING("MerchantGiantWalletWeight"), - CVAR_RANDOMIZER_SETTING("MerchantNoWalletWeight"), - CVAR_RANDOMIZER_SETTING("MerchantPriceRange1"), - CVAR_RANDOMIZER_SETTING("MerchantPriceRange2"), - CVAR_RANDOMIZER_SETTING("MerchantPrices"), - CVAR_RANDOMIZER_SETTING("MerchantPricesAffordable"), - CVAR_RANDOMIZER_SETTING("MerchantText"), - CVAR_RANDOMIZER_SETTING("MerchantTycoonWalletWeight"), - CVAR_RANDOMIZER_SETTING("MixBosses"), - CVAR_RANDOMIZER_SETTING("MixDungeons"), - CVAR_RANDOMIZER_SETTING("MixGrottos"), - CVAR_RANDOMIZER_SETTING("MixInteriors"), - CVAR_RANDOMIZER_SETTING("MixOverworld"), - CVAR_RANDOMIZER_SETTING("MixedEntrances"), - CVAR_RANDOMIZER_SETTING("OoTHint"), - CVAR_RANDOMIZER_SETTING("RainbowBridge"), - CVAR_RANDOMIZER_SETTING("RewardCount"), - CVAR_RANDOMIZER_SETTING("SariaHint"), - CVAR_RANDOMIZER_SETTING("ScrubText"), - CVAR_RANDOMIZER_SETTING("ScrubsAdultWalletWeight"), - CVAR_RANDOMIZER_SETTING("ScrubsChildWalletWeight"), - CVAR_RANDOMIZER_SETTING("ScrubsFixedPrice"), - CVAR_RANDOMIZER_SETTING("ScrubsGiantWalletWeight"), - CVAR_RANDOMIZER_SETTING("ScrubsNoWalletWeight"), - CVAR_RANDOMIZER_SETTING("ScrubsPriceRange1"), - CVAR_RANDOMIZER_SETTING("ScrubsPriceRange2"), - CVAR_RANDOMIZER_SETTING("ScrubsPrices"), - CVAR_RANDOMIZER_SETTING("ScrubsPricesAffordable"), - CVAR_RANDOMIZER_SETTING("ScrubsTycoonWalletWeight"), - CVAR_RANDOMIZER_SETTING("SheikLAHint"), - CVAR_RANDOMIZER_SETTING("Shopsanity"), - CVAR_RANDOMIZER_SETTING("ShopsanityAdultWalletWeight"), - CVAR_RANDOMIZER_SETTING("ShopsanityChildWalletWeight"), - CVAR_RANDOMIZER_SETTING("ShopsanityCount"), - CVAR_RANDOMIZER_SETTING("ShopsanityFixedPrice"), - CVAR_RANDOMIZER_SETTING("ShopsanityGiantWalletWeight"), - CVAR_RANDOMIZER_SETTING("ShopsanityNoWalletWeight"), - CVAR_RANDOMIZER_SETTING("ShopsanityPriceRange1"), - CVAR_RANDOMIZER_SETTING("ShopsanityPriceRange2"), - CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), - CVAR_RANDOMIZER_SETTING("ShopsanityPricesAffordable"), - CVAR_RANDOMIZER_SETTING("ShopsanityTycoonWalletWeight"), - CVAR_RANDOMIZER_SETTING("Shuffle100GSReward"), - CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), - CVAR_RANDOMIZER_SETTING("ShuffleBeehives"), - CVAR_RANDOMIZER_SETTING("ShuffleBossEntrances"), - CVAR_RANDOMIZER_SETTING("ShuffleBossSouls"), - CVAR_RANDOMIZER_SETTING("ShuffleChildWallet"), - CVAR_RANDOMIZER_SETTING("ShuffleCows"), - CVAR_RANDOMIZER_SETTING("ShuffleDekuNutBag"), - CVAR_RANDOMIZER_SETTING("ShuffleDekuStickBag"), - CVAR_RANDOMIZER_SETTING("ShuffleDungeonReward"), - CVAR_RANDOMIZER_SETTING("ShuffleDungeonsEntrances"), - CVAR_RANDOMIZER_SETTING("ShuffleFishingPole"), - CVAR_RANDOMIZER_SETTING("ShuffleFrogSongRupees"), - CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), - CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), - CVAR_RANDOMIZER_SETTING("ShuffleGrottosEntrances"), - CVAR_RANDOMIZER_SETTING("ShuffleInteriorsEntrances"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRings"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsBottomOfTheWell"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsFireTemple"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsForestTemple"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsGTG"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsGanonsCastle"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsGerudoFortress"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsRandomCount"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsShadowTemple"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsSpiritTemple"), - CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsWaterTemple"), - CVAR_RANDOMIZER_SETTING("ShuffleKokiriSword"), - CVAR_RANDOMIZER_SETTING("ShuffleMasterSword"), - CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), - CVAR_RANDOMIZER_SETTING("ShuffleOcarinaButtons"), - CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), - CVAR_RANDOMIZER_SETTING("ShuffleOverworldEntrances"), - CVAR_RANDOMIZER_SETTING("ShuffleOverworldSpawns"), - CVAR_RANDOMIZER_SETTING("ShuffleOwlDrops"), - CVAR_RANDOMIZER_SETTING("ShuffleScrubs"), - CVAR_RANDOMIZER_SETTING("ShuffleSongs"), - CVAR_RANDOMIZER_SETTING("ShuffleSwim"), - CVAR_RANDOMIZER_SETTING("ShuffleTokens"), - CVAR_RANDOMIZER_SETTING("ShuffleWarpSongs"), - CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), - CVAR_RANDOMIZER_SETTING("SkeletonKey"), - CVAR_RANDOMIZER_SETTING("SkipChildStealth"), - CVAR_RANDOMIZER_SETTING("SkipChildZelda"), - CVAR_RANDOMIZER_SETTING("SkipEponaRace"), - CVAR_RANDOMIZER_SETTING("SkipScarecrowsSong"), - CVAR_RANDOMIZER_SETTING("SleepingWaterfall"), - CVAR_RANDOMIZER_SETTING("StartingAge"), - CVAR_RANDOMIZER_SETTING("StartingBoleroOfFire"), - CVAR_RANDOMIZER_SETTING("StartingConsumables"), - CVAR_RANDOMIZER_SETTING("StartingDekuShield"), - CVAR_RANDOMIZER_SETTING("StartingEponasSong"), - CVAR_RANDOMIZER_SETTING("StartingHearts"), - CVAR_RANDOMIZER_SETTING("StartingKokiriSword"), - CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), - CVAR_RANDOMIZER_SETTING("StartingMasterSword"), - CVAR_RANDOMIZER_SETTING("StartingMinuetOfForest"), - CVAR_RANDOMIZER_SETTING("StartingNocturneOfShadow"), - CVAR_RANDOMIZER_SETTING("StartingOcarina"), - CVAR_RANDOMIZER_SETTING("StartingPreludeOfLight"), - CVAR_RANDOMIZER_SETTING("StartingRequiemOfSpirit"), - CVAR_RANDOMIZER_SETTING("StartingSariasSong"), - CVAR_RANDOMIZER_SETTING("StartingSerenadeOfWater"), - CVAR_RANDOMIZER_SETTING("StartingSkulltulaToken"), - CVAR_RANDOMIZER_SETTING("StartingSongOfStorms"), - CVAR_RANDOMIZER_SETTING("StartingSongOfTime"), - CVAR_RANDOMIZER_SETTING("StartingSunsSong"), - CVAR_RANDOMIZER_SETTING("StartingZeldasLullaby"), - CVAR_RANDOMIZER_SETTING("StoneCount"), - CVAR_RANDOMIZER_SETTING("SunlightArrows"), - CVAR_RANDOMIZER_SETTING("TokenCount"), - CVAR_RANDOMIZER_SETTING("TriforceHunt"), - CVAR_RANDOMIZER_SETTING("TriforceHuntRequiredPieces"), - CVAR_RANDOMIZER_SETTING("TriforceHuntTotalPieces"), - CVAR_RANDOMIZER_SETTING("WarpSongText"), - CVAR_RANDOMIZER_SETTING("ZorasFountain"), -}; - const std::vector vanillaPlusPresetEntries = { // D-pad Support in text and file select PRESET_ENTRY_S32(CVAR_SETTING("DpadInText"), 1), @@ -1325,12 +832,12 @@ typedef struct PresetDefinition { } PresetDefinition; typedef struct PresetTypeDefinition { - std::vector cvarsToClear; + std::vector blocksToClear; std::map presets; } PresetTypeDefinition; const std::map presetTypes = { - { PRESET_TYPE_ENHANCEMENTS, { enhancementsCvars, { + { PRESET_TYPE_ENHANCEMENTS, { { CVAR_PREFIX_ENHANCEMENT, CVAR_PREFIX_CHEAT }, { { ENHANCEMENT_PRESET_DEFAULT, { "Default", "Reset all options to their default values.", @@ -1352,7 +859,7 @@ const std::map presetTypes = { randomizerPresetEntries } }, } } }, - { PRESET_TYPE_RANDOMIZER, { randomizerCvars, { + { PRESET_TYPE_RANDOMIZER, { { CVAR_PREFIX_RANDOMIZER_SETTING, CVAR_PREFIX_RANDOMIZER_ENHANCEMENT }, { { RANDOMIZER_PRESET_DEFAULT, { "Default", "Reset all options to their default values.", diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index dc745b0b5..2acc01d7f 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2437,9 +2437,11 @@ void SoH_ProcessDroppedFiles(std::string filePath) { return; } - clearCvars(enhancementsCvars); - clearCvars(cheatCvars); - clearCvars(randomizerCvars); + CVarClearBlock(CVAR_PREFIX_ENHANCEMENT); + CVarClearBlock(CVAR_PREFIX_CHEAT); + CVarClearBlock(CVAR_PREFIX_RANDOMIZER_SETTING); + CVarClearBlock(CVAR_PREFIX_RANDOMIZER_ENHANCEMENT); + CVarClearBlock(CVAR_PREFIX_DEVELOPER_TOOLS); // Flatten everything under CVars into a single array auto cvars = configJson["CVars"].flatten();