diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml new file mode 100644 index 000000000..604a3dd70 --- /dev/null +++ b/.github/workflows/clang-format.yml @@ -0,0 +1,21 @@ +name: clang-format +on: [pull_request] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + clang-format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 2 + - name: Install clang-format + run: | + sudo apt-get update + sudo apt-get install -y clang-format-14 + - name: Run clang-format + run: | + ./run-clang-format.sh + git diff --exit-code diff --git a/.github/workflows/generate-builds.yml b/.github/workflows/generate-builds.yml index 64c908a37..45cab21d9 100644 --- a/.github/workflows/generate-builds.yml +++ b/.github/workflows/generate-builds.yml @@ -6,42 +6,44 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: + generate-soh-otr: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v4 + - name: Git Checkout + uses: actions/checkout@v4 with: submodules: true - - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.14 + - name: Configure ccache + uses: hendrikmuhs/ccache-action@v1.2 with: + save: ${{ github.ref_name == github.event.repository.default_branch }} key: ${{ runner.os }}-otr-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-otr-ccache-${{ github.ref }} - ${{ runner.os }}-otr-ccache- + ${{ runner.os }}-otr-ccache - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) libzip-dev zipcmp zipmerge ziptool - - name: Cache build folders - uses: actions/cache@v4 + - name: Restore Cached deps folder + uses: actions/cache/restore@v4 with: - key: ${{ runner.os }}-otr-build-${{ github.ref }}-${{ github.sha }} + key: ${{ runner.os }}-deps-${{ github.ref }}-${{ github.sha }} restore-keys: | - ${{ runner.os }}-otr-build-${{ github.ref }} - ${{ runner.os }}-otr-build- - path: | - build-cmake - SDL2-2.30.3 - tinyxml2-10.0.0 + ${{ runner.os }}-deps-${{ github.ref }}- + ${{ runner.os }}-deps- + path: deps + - name: Create deps folder + run: mkdir -p deps - name: Install latest SDL run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - if [ ! -d "SDL2-2.30.3" ]; then - wget https://www.libsdl.org/release/SDL2-2.30.3.tar.gz - tar -xzf SDL2-2.30.3.tar.gz + if [ ! -d "deps/SDL2-2.30.3" ]; then + wget https://github.com/libsdl-org/SDL/releases/download/release-2.30.3/SDL2-2.30.3.tar.gz + tar -xzf SDL2-2.30.3.tar.gz -C deps fi - cd SDL2-2.30.3 + cd deps/SDL2-2.30.3 ./configure --enable-hidapi-libusb make -j 10 sudo make install @@ -50,11 +52,11 @@ jobs: run: | sudo apt-get remove libtinyxml2-dev export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - if [ ! -d "tinyxml2-10.0.0" ]; then + if [ ! -d "deps/tinyxml2-10.0.0" ]; then wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz - tar -xzf 10.0.0.tar.gz + tar -xzf 10.0.0.tar.gz -C deps fi - cd tinyxml2-10.0.0 + cd deps/tinyxml2-10.0.0 mkdir -p build cd build cmake .. @@ -64,49 +66,57 @@ jobs: run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release - cmake --build build-cmake --config Release --target GenerateSohOtr - - uses: actions/upload-artifact@v4 + cmake --build build-cmake --config Release --target GenerateSohOtr -j3 + - name: Upload soh.otr + uses: actions/upload-artifact@v4 with: name: soh.otr path: soh.otr - retention-days: 1 + retention-days: 3 + build-macos: needs: generate-soh-otr runs-on: macos-14 steps: - - uses: actions/checkout@v4 + - name: Git Checkout + uses: actions/checkout@v4 with: submodules: true - - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.14 + - name: Configure ccache + uses: hendrikmuhs/ccache-action@v1.2 with: create-symlink: true + save: ${{ github.ref_name == github.event.repository.default_branch }} key: ${{ runner.os }}-14-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-14-ccache-${{ github.ref }} - ${{ runner.os }}-14-ccache- + ${{ runner.os }}-14-ccache + # Needed to apply sudo for macports cache restore - name: Install gtar wrapper run: | sudo mv /opt/homebrew/bin/gtar /opt/homebrew/bin/gtar.orig - sudo cp .github/workflows//gtar /opt/homebrew/bin/gtar + sudo cp .github/workflows/gtar /opt/homebrew/bin/gtar sudo chmod +x /opt/homebrew/bin/gtar - - name: Cache MacPorts - id: cache-macports - uses: actions/cache@v4 + - name: Restore Cached MacPorts + id: restore-cache-macports + uses: actions/cache/restore@v4 with: - path: /opt/local/ - key: ${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }} + key: ${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}-${{ github.sha }} restore-keys: | + ${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}- ${{ runner.os }}-14-macports- + path: /opt/local/ + # Updated PATH applies to the next step and onwards - name: Install MacPorts (if necessary) run: | - if [ -d /opt/local/ ]; then + if command -v /opt/local/bin/port 2>&1 >/dev/null; then echo "MacPorts already installed" else + echo "Installing MacPorts" wget https://github.com/macports/macports-base/releases/download/v2.9.3/MacPorts-2.9.3-14-Sonoma.pkg sudo installer -pkg ./MacPorts-2.9.3-14-Sonoma.pkg -target / fi - echo "/opt/local/bin:/opt/local/sbin" >> $GITHUB_PATH + echo "/opt/local/bin:/opt/local/sbin" >> "$GITHUB_PATH" - name: Install dependencies run: | brew uninstall --ignore-dependencies libpng @@ -116,11 +126,12 @@ jobs: uses: actions/download-artifact@v4 with: name: soh.otr + path: build-cmake/soh - name: Build SoH run: | + export PATH="/usr/lib/ccache:/opt/homebrew/opt/ccache/libexec:/usr/local/opt/ccache/libexec:$PATH" cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DBUILD_REMOTE_CONTROL=1 cmake --build build-cmake --config Release --parallel 10 - mv soh.otr build-cmake/soh (cd build-cmake && cpack) mv _packages/*.dmg SoH.dmg @@ -132,44 +143,52 @@ jobs: path: | SoH.dmg readme.txt + - name: Save Cache MacPorts + if: ${{ github.ref_name == github.event.repository.default_branch }} + uses: actions/cache/save@v4 + with: + key: ${{ steps.restore-cache-macports.outputs.cache-primary-key }} + path: /opt/local/ + build-linux: needs: generate-soh-otr runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v4 + - name: Git Checkout + uses: actions/checkout@v4 with: submodules: true - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) - - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.14 + - name: Configure ccache + uses: hendrikmuhs/ccache-action@v1.2 with: - key: linux-ccache-${{ github.ref }}-${{ github.sha }} + save: ${{ github.ref_name == github.event.repository.default_branch }} + key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | - linux-ccache-${{ github.ref }} - linux-ccache- - - name: Cache build folders - uses: actions/cache@v4 + ${{ runner.os }}-ccache-${{ github.ref }} + ${{ runner.os }}-ccache + - name: Restore Cached deps folder + id: restore-cache-deps + uses: actions/cache/restore@v4 with: - key: linux-build-${{ github.ref }}-${{ github.sha }} + key: ${{ runner.os }}-deps-${{ github.ref }}-${{ github.sha }} restore-keys: | - linux-build-${{ github.ref }} - linux-build- - path: | - SDL2-2.30.3 - SDL2_net-2.2.0 - tinyxml2-10.0.0 - libzip-1.10.1 + ${{ runner.os }}-deps-${{ github.ref }}- + ${{ runner.os }}-deps- + path: deps + - name: Create deps folder + run: mkdir -p deps - name: Install latest SDL run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - if [ ! -d "SDL2-2.30.3" ]; then - wget https://www.libsdl.org/release/SDL2-2.30.3.tar.gz - tar -xzf SDL2-2.30.3.tar.gz + if [ ! -d "deps/SDL2-2.30.3" ]; then + wget https://github.com/libsdl-org/SDL/releases/download/release-2.30.3/SDL2-2.30.3.tar.gz + tar -xzf SDL2-2.30.3.tar.gz -C deps fi - cd SDL2-2.30.3 + cd deps/SDL2-2.30.3 ./configure --enable-hidapi-libusb make -j 10 sudo make install @@ -177,11 +196,11 @@ jobs: - name: Install latest SDL_net run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - if [ ! -d "SDL2_net-2.2.0" ]; then + if [ ! -d "deps/SDL2_net-2.2.0" ]; then wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.2.0.tar.gz - tar -xzf SDL2_net-2.2.0.tar.gz + tar -xzf SDL2_net-2.2.0.tar.gz -C deps fi - cd SDL2_net-2.2.0 + cd deps/SDL2_net-2.2.0 ./configure make -j 10 sudo make install @@ -190,11 +209,11 @@ jobs: run: | sudo apt-get remove libtinyxml2-dev export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - if [ ! -d "tinyxml2-10.0.0" ]; then + if [ ! -d "deps/tinyxml2-10.0.0" ]; then wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz - tar -xzf 10.0.0.tar.gz + tar -xzf 10.0.0.tar.gz -C deps fi - cd tinyxml2-10.0.0 + cd deps/tinyxml2-10.0.0 mkdir -p build cd build cmake .. @@ -203,11 +222,11 @@ jobs: - name: Install libzip without crypto run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - if [ ! -d "libzip-1.10.1" ]; then + if [ ! -d "deps/libzip-1.10.1" ]; then wget https://github.com/nih-at/libzip/releases/download/v1.10.1/libzip-1.10.1.tar.gz - tar -xzf libzip-1.10.1.tar.gz + tar -xzf libzip-1.10.1.tar.gz -C deps fi - cd libzip-1.10.1 + cd deps/libzip-1.10.1 mkdir -p build cd build cmake .. -DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF @@ -218,6 +237,7 @@ jobs: uses: actions/download-artifact@v4 with: name: soh.otr + path: build-cmake/soh - name: Build SoH run: | export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" @@ -237,63 +257,73 @@ jobs: path: | soh.appimage readme.txt + - name: Save Cache deps folder + if: ${{ github.ref_name == github.event.repository.default_branch }} + uses: actions/cache/save@v4 + with: + key: ${{ steps.restore-cache-deps.outputs.cache-primary-key }} + path: deps + build-windows: needs: generate-soh-otr - runs-on: ${{ (vars.WINDOWS_RUNNER && fromJSON(vars.WINDOWS_RUNNER)) || 'windows-latest' }} + runs-on: windows-latest steps: - name: Install dependencies - if: ${{ !vars.WINDOWS_RUNNER }} run: | - choco install ninja + choco install ninja -y Remove-Item -Path "C:\ProgramData\Chocolatey\bin\ccache.exe" -Force -ErrorAction SilentlyContinue - - uses: actions/checkout@v4 + - name: Git Checkout + uses: actions/checkout@v4 with: submodules: true - - name: ccache - uses: hendrikmuhs/ccache-action@v1.2.14 + - name: Configure sccache + uses: hendrikmuhs/ccache-action@v1.2 with: variant: sccache - max-size: "1G" + max-size: "2G" + evict-old-files: job + save: ${{ github.ref_name == github.event.repository.default_branch }} key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }} restore-keys: | ${{ runner.os }}-ccache-${{ github.ref }} - ${{ runner.os }}-ccache- - - name: Cache build folder - uses: actions/cache@v4 + ${{ runner.os }}-ccache + - name: Restore Cached VCPKG folder + id: restore-cache-vcpkg + uses: actions/cache/restore@v4 with: - key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }} + key: ${{ runner.os }}-vcpkg-${{ github.ref }}-${{ github.sha }} restore-keys: | - ${{ runner.os }}-build-${{ github.ref }} - ${{ runner.os }}-build- - path: | - build-windows - vcpkg + ${{ runner.os }}-vcpkg-${{ github.ref }}- + ${{ runner.os }}-vcpkg- + path: vcpkg - name: Configure Developer Command Prompt uses: ilammy/msvc-dev-cmd@v1 + - name: Download soh.otr + uses: actions/download-artifact@v4 + with: + name: soh.otr + path: build-windows/soh - name: Build SoH - env: + env: VCPKG_ROOT: ${{github.workspace}}/vcpkg run: | set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH" cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DBUILD_REMOTE_CONTROL=1 cmake --build build-windows --config Release --parallel 10 - mkdir soh-windows - mv ./x64/Release/soh.exe ./soh-windows/soh.exe - mkdir soh-windows/debug - mkdir soh-windows/mods - New-Item soh-windows/mods/custom_otr_files_go_here.txt -type file - mv ./x64/Release/soh.pdb ./soh-windows/debug/soh.pdb - mv ./README.md ./soh-windows/readme.txt - mv ./build-windows/gamecontrollerdb.txt ./soh-windows/gamecontrollerdb.txt - mv ./x64/Release/assets ./soh-windows - - name: Download soh.otr - uses: actions/download-artifact@v4 - with: - name: soh.otr - path: soh-windows + (cd build-windows && cpack) + cd .. + mv _packages/*.zip _packages/soh-windows.zip + - name: Unzip package + run: Expand-Archive -Path _packages/soh-windows.zip -DestinationPath soh-windows - name: Upload build uses: actions/upload-artifact@v4 with: name: soh-windows path: soh-windows + - name: Save Cache VCPKG folder + if: ${{ github.ref_name == github.event.repository.default_branch }} + uses: actions/cache/save@v4 + with: + key: ${{ steps.restore-cache-vcpkg.outputs.cache-primary-key }} + path: vcpkg diff --git a/.gitignore b/.gitignore index ec5401c38..ac767f114 100644 --- a/.gitignore +++ b/.gitignore @@ -452,3 +452,7 @@ _packages soh/src/boot/build.c soh/properties.h + +# Tools +/clang-format +/clang-format.exe diff --git a/CMake/Packaging-2.cmake b/CMake/Packaging-2.cmake index a29635eac..dc5da1b7e 100644 --- a/CMake/Packaging-2.cmake +++ b/CMake/Packaging-2.cmake @@ -1,9 +1,9 @@ set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 0) -set(CPACK_COMPONENTS_ALL "ship" "extractor" "appimage") +set(CPACK_COMPONENTS_ALL "ship") -if (NOT CPACK_GENERATOR STREQUAL "External") - list(REMOVE_ITEM CPACK_COMPONENTS_ALL "appimage") +if (CPACK_GENERATOR STREQUAL "External") + list(APPEND CPACK_COMPONENTS_ALL "extractor" "appimage") endif() if (CPACK_GENERATOR MATCHES "DEB|RPM") diff --git a/CMake/soh-cvars.cmake b/CMake/soh-cvars.cmake index e5ff8a384..227cfb2bb 100644 --- a/CMake/soh-cvars.cmake +++ b/CMake/soh-cvars.cmake @@ -10,6 +10,8 @@ set(CVAR_PREFIX_TRACKER "gTrackers") set(CVAR_PREFIX_DEVELOPER_TOOLS "gDeveloperTools") set(CVAR_PREFIX_GENERAL "gGeneral") set(CVAR_PREFIX_REMOTE "gRemote") +set(CVAR_PREFIX_GAMEPLAY_STATS "gGameplayStats") +set(CVAR_PREFIX_TIME_DISPLAY "gTimeDisplay") add_compile_definitions( CVAR_PREFIX_RANDOMIZER_ENHANCEMENT="${CVAR_PREFIX_RANDOMIZER_ENHANCEMENT}" CVAR_PREFIX_RANDOMIZER_SETTING="${CVAR_PREFIX_RANDOMIZER_SETTING}" @@ -23,4 +25,6 @@ add_compile_definitions( CVAR_PREFIX_DEVELOPER_TOOLS="${CVAR_PREFIX_DEVELOPER_TOOLS}" CVAR_PREFIX_GENERAL="${CVAR_PREFIX_GENERAL}" CVAR_PREFIX_REMOTE="${CVAR_PREFIX_REMOTE}" + CVAR_PREFIX_GAMEPLAY_STATS="${CVAR_PREFIX_GAMEPLAY_STATS}" + CVAR_PREFIX_TIME_DISPLAY="${CVAR_PREFIX_TIME_DISPLAY}" ) \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 38ac6ce4a..9c3945459 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use") set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version") -project(Ship VERSION 8.0.6 LANGUAGES C CXX) +project(Ship VERSION 9.0.0 LANGUAGES C CXX) include(CMake/soh-cvars.cmake) include(CMake/lus-cvars.cmake) @@ -34,7 +34,7 @@ math(EXPR PATCH_INDEX "${PROJECT_VERSION_PATCH}") # Use the patch number to select the correct word list(GET NATO_PHONETIC_ALPHABET ${PATCH_INDEX} PROJECT_PATCH_WORD) -set(PROJECT_BUILD_NAME "MacReady ${PROJECT_PATCH_WORD}" CACHE STRING "" FORCE) +set(PROJECT_BUILD_NAME "Blair ${PROJECT_PATCH_WORD}" CACHE STRING "" FORCE) set(PROJECT_TEAM "github.com/harbourmasters" CACHE STRING "" FORCE) execute_process( @@ -174,7 +174,7 @@ set_property(TARGET soh PROPERTY APPIMAGE_ICON_FILE "${CMAKE_BINARY_DIR}/sohIcon if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") install(PROGRAMS "${CMAKE_BINARY_DIR}/linux/soh.sh" DESTINATION . COMPONENT appimage) -install(FILES "${CMAKE_SOURCE_DIR}/soh.otr" DESTINATION . COMPONENT ship) +install(FILES "${CMAKE_BINARY_DIR}/soh/soh.otr" DESTINATION . COMPONENT ship) install(TARGETS ZAPD DESTINATION ./assets/extractor COMPONENT extractor) install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/extractor COMPONENT extractor) install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/extractor/xmls COMPONENT extractor) @@ -199,6 +199,11 @@ find_package(Python3 COMPONENTS Interpreter) add_custom_target( ExtractAssets COMMAND ${CMAKE_COMMAND} -E rm -f oot.otr oot-mq.otr soh.otr + + # copy LUS default shaders into assets/custom + COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic/Fast3D/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/ + 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 @@ -220,6 +225,11 @@ add_custom_target( add_custom_target( GenerateSohOtr COMMAND ${CMAKE_COMMAND} -E rm -f soh.otr + + # copy LUS default shaders into assets/custom + COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic/Fast3D/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/ + 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 @@ -231,7 +241,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") find_package(ImageMagick COMPONENTS convert) if (ImageMagick_FOUND) execute_process ( - COMMAND ${ImageMagick_convert_EXECUTABLE} soh/macosx/sohIcon.png -resize 512x512 ${CMAKE_BINARY_DIR}/sohIcon.png + COMMAND ${ImageMagick_convert_EXECUTABLE} ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png -resize 512x512 ${CMAKE_BINARY_DIR}/sohIcon.png OUTPUT_VARIABLE outVar ) endif() @@ -240,16 +250,16 @@ endif() if(CMAKE_SYSTEM_NAME MATCHES "Darwin") add_custom_target(CreateOSXIcons COMMAND mkdir -p ${CMAKE_BINARY_DIR}/macosx/soh.iconset - COMMAND sips -z 16 16 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16.png - COMMAND sips -z 32 32 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16@2x.png - COMMAND sips -z 32 32 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32.png - COMMAND sips -z 64 64 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32@2x.png - COMMAND sips -z 128 128 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128.png - COMMAND sips -z 256 256 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128@2x.png - COMMAND sips -z 256 256 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_256x256.png - COMMAND sips -z 512 512 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_256x256@2x.png - COMMAND sips -z 512 512 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_512x512.png - COMMAND cp soh/macosx/sohIcon.png ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_512x512@2x.png + COMMAND sips -z 16 16 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16.png + COMMAND sips -z 32 32 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16@2x.png + COMMAND sips -z 32 32 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32.png + COMMAND sips -z 64 64 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32@2x.png + COMMAND sips -z 128 128 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128.png + COMMAND sips -z 256 256 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128@2x.png + COMMAND sips -z 256 256 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_256x256.png + COMMAND sips -z 512 512 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_256x256@2x.png + COMMAND sips -z 512 512 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_512x512.png + COMMAND cp ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_512x512@2x.png COMMAND iconutil -c icns -o ${CMAKE_BINARY_DIR}/macosx/soh.icns ${CMAKE_BINARY_DIR}/macosx/soh.iconset WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMENT "Creating OSX icons ..." diff --git a/OTRExporter b/OTRExporter index 8f7167290..41052efcd 160000 --- a/OTRExporter +++ b/OTRExporter @@ -1 +1 @@ -Subproject commit 8f71672901987bc3dbf6256e64e228db36a686f5 +Subproject commit 41052efcdf8df8e67517cc93da8975fcd4e14af9 diff --git a/ZAPDTR b/ZAPDTR index 04d42249d..2aeababbf 160000 --- a/ZAPDTR +++ b/ZAPDTR @@ -1 +1 @@ -Subproject commit 04d42249d2c15c3b442a0282a90bc8b7bda25b03 +Subproject commit 2aeababbfb81b00d34673406453e8e8e2deaa27b diff --git a/docs/supportedHashes.json b/docs/supportedHashes.json index 587a64a55..c5b3d5b2f 100644 --- a/docs/supportedHashes.json +++ b/docs/supportedHashes.json @@ -30,5 +30,49 @@ { "name": "PAL MQ (Debug)", "sha1": "cfecfdc58d650e71a200c81f033de4e6d617a9f6" + }, + { + "name": "NTSC 1.0 (US)", + "sha1": "ad69c91157f6705e8ab06c79fe08aad47bb57ba7" + }, + { + "name": "NTSC 1.1 (US)", + "sha1": "d3ecb253776cd847a5aa63d859d8c89a2f37b364" + }, + { + "name": "NTSC 1.2 (US)", + "sha1": "41b3bdc48d98c48529219919015a1af22f5057c2" + }, + { + "name": "NTSC 1.0 (JP)", + "sha1": "c892bbda3993e66bd0d56a10ecd30b1ee612210f" + }, + { + "name": "NTSC 1.1 (JP)", + "sha1": "dbfc81f655187dc6fefd93fa6798face770d579d" + }, + { + "name": "NTSC 1.2 (JP)", + "sha1": "fa5f5942b27480d60243c2d52c0e93e26b9e6b86" + }, + { + "name": "NTSC GC (US)", + "sha1": "b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b" + }, + { + "name": "NTSC MQ (US)", + "sha1": "8b5d13aac69bfbf989861cfdc50b1d840945fc1d" + }, + { + "name": "NTSC GC (JP)", + "sha1": "0769c84615422d60f16925cd859593cdfa597f84" + }, + { + "name": "NTSC GC (JP) (Collector's Edition)", + "sha1": "2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73" + }, + { + "name": "NTSC MQ (JP)", + "sha1": "dd14e143c4275861fe93ea79d0c02e36ae8c6c2f" } ] diff --git a/libultraship b/libultraship index 02bb77ef2..ffc062cbf 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 02bb77ef253e2de0969fd2cb36ad2e870677d18d +Subproject commit ffc062cbf44ce8dc07ac9fc0185224010bd78cc5 diff --git a/run-clang-format.ps1 b/run-clang-format.ps1 new file mode 100644 index 000000000..6aaf12ea4 --- /dev/null +++ b/run-clang-format.ps1 @@ -0,0 +1,48 @@ +Using Namespace System +$url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.6/LLVM-14.0.6-win64.exe" +$llvmInstallerPath = ".\LLVM-14.0.6-win64.exe" +$clangFormatFilePath = ".\clang-format.exe" +$requiredVersion = "clang-format version 14.0.6" +$currentVersion = "" + +function Test-7ZipInstalled { + $sevenZipPath = "C:\Program Files\7-Zip\7z.exe" + return Test-Path $sevenZipPath -PathType Leaf +} + +if (Test-Path $clangFormatFilePath) { + $currentVersion = & $clangFormatFilePath --version + if (-not ($currentVersion -eq $requiredVersion)) { + # Delete the existing file if the version is incorrect + Remove-Item $clangFormatFilePath -Force + } +} + +if (-not (Test-Path $clangFormatFilePath) -or ($currentVersion -ne $requiredVersion)) { + if (-not (Test-7ZipInstalled)) { + Write-Host "7-Zip is not installed. Please install 7-Zip and run the script again." + exit + } + + $wc = New-Object net.webclient + $wc.Downloadfile($url, $llvmInstallerPath) + + $sevenZipPath = "C:\Program Files\7-Zip\7z.exe" + $specificFileInArchive = "bin\clang-format.exe" + & "$sevenZipPath" e $llvmInstallerPath $specificFileInArchive + + Remove-Item $llvmInstallerPath -Force +} + +$basePath = (Resolve-Path .).Path +$files = Get-ChildItem -Path $basePath\soh -Recurse -File ` + | Where-Object { ($_.Extension -eq '.c' -or $_.Extension -eq '.cpp' -or ` + ($_.Extension -eq '.h' -and ` + (-not ($_.FullName -like "*\soh\src\*" -or $_.FullName -like "*\soh\include\*")))) -and ` + (-not ($_.FullName -like "*\soh\assets\*")) } + +foreach ($file in $files) { + $relativePath = $file.FullName.Substring($basePath.Length + 1) + Write-Host "Formatting $relativePath" + .\clang-format.exe -i $file.FullName +} diff --git a/run-clang-format.sh b/run-clang-format.sh new file mode 100755 index 000000000..6f9fc0c80 --- /dev/null +++ b/run-clang-format.sh @@ -0,0 +1,29 @@ +# this line does quite a bit, so let's break it down +# +# find soh +# use "find" to look in the "soh" directory +# this ensures we don't try to format stuff in the submodules +# +# -type f +# only look for files +# +# -name "*.c" -o -name "*.cpp" +# find all .c and .cpp files +# +# -name "*.h" ! -path "soh/src/**.h" ! -path "soh/include/**.h" +# find all .h files that aren't in soh/src or soh/include +# this is because zret decomp only runs clang-format on c files +# https://github.com/zeldaret/mm/blob/b7e5468ca16315a7e322055eff3d97fe980bbc25/format.py#L182 +# +# ! -path "soh/assets/*" +# asset headers are autogenerated, don't fight them +# +# | sed 's| |\\ |g' +# pipe the result of find into sed to +# ensure all the paths returned by find have spaces escaped +# +# | xargs clang-format-14 -i +# use xargs to take each path we've found +# and pass it as an argument to clang-format + +find soh -type f \( -name "*.c" -o -name "*.cpp" -o \( -name "*.h" ! -path "soh/src/**.h" ! -path "soh/include/**.h" \) \) ! -path "soh/assets/*" | sed 's| |\\ |g' | xargs clang-format-14 -i diff --git a/scripts/linux/appimage/soh.sh.in b/scripts/linux/appimage/soh.sh.in index 71121a5ff..e02b44fc7 100644 --- a/scripts/linux/appimage/soh.sh.in +++ b/scripts/linux/appimage/soh.sh.in @@ -92,6 +92,72 @@ while [[ (! -e "$SHIP_HOME"/oot.otr) || (! -e "$SHIP_HOME"/oot-mq.otr) ]]; do 166c02770d67fcc3954c443eb400a6a3573d3fc0) # n64 ROMHASH=517bd9714c73cb96c21e7c2ef640d7b55186102f ;; + 79a4f053d34018e59279e6d4b83c7daccd985c87) # v64 + ROMHASH=ad69c91157f6705e8ab06c79fe08aad47bb57ba7 + ;; + 82fafee9c6ac7946739282958364ce606077ac65) # n64 + ROMHASH=ad69c91157f6705e8ab06c79fe08aad47bb57ba7 + ;; + 18cd0eb65914a21d8fa08dfe71c29d865e9d728a) # v64 + ROMHASH=d3ecb253776cd847a5aa63d859d8c89a2f37b364 + ;; + 07940d5609e04b7caac63570731e01189129212e) # n64 + ROMHASH=d3ecb253776cd847a5aa63d859d8c89a2f37b364 + ;; + 3ac86253e0c0d55486d212e647350c1527b9c92d) # v64 + ROMHASH=41b3bdc48d98c48529219919015a1af22f5057c2 + ;; + 70bf30a9980026e615a1ae8d2735a773cf9fcc94) # n64 + ROMHASH=41b3bdc48d98c48529219919015a1af22f5057c2 + ;; + f9e2b6840b9103e9707ea390089a7b6943592a98) # v64 + ROMHASH=c892bbda3993e66bd0d56a10ecd30b1ee612210f + ;; + 2fae1601aa7ae8d3e03ba3f4dcdfca3a36002ac5) # n64 + ROMHASH=c892bbda3993e66bd0d56a10ecd30b1ee612210f + ;; + 1181034d5f9533f53ebe8e1c781badbee115f5aa) # v64 + ROMHASH=dbfc81f655187dc6fefd93fa6798face770d579d + ;; + 07477067943abe8d0c50285eb4a6cb9ece99e79b) # n64 + ROMHASH=dbfc81f655187dc6fefd93fa6798face770d579d + ;; + 2d8fb7140a9c5d11ce614561e5a36ffef0c17540) # v64 + ROMHASH=fa5f5942b27480d60243c2d52c0e93e26b9e6b86 + ;; + d90bbe422ac728ac54ac6a2c9fec942f7ff04df9) # n64 + ROMHASH=fa5f5942b27480d60243c2d52c0e93e26b9e6b86 + ;; + 44c75962911e13bdfdc31b35e0b8e3be6a6a49ab) # v64 + b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b + ;; + 5d47025581060af5ba19e6719c25fea7398e87cf) # n64 + b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b + ;; + e1d070ad7b017de9f992b362164dcd9d7f820f7e) # v64 + 8b5d13aac69bfbf989861cfdc50b1d840945fc1d + ;; + a8c04cd5aa94a6a32198f36ff2069d43342d18a8) # n64 + 8b5d13aac69bfbf989861cfdc50b1d840945fc1d + ;; + 245410280d152f28d5b1c0c0fc37f384db0020cd) # v64 + 0769c84615422d60f16925cd859593cdfa597f84 + ;; + fbdc9e444807f9b881e3432cedf66f38746b81d8) # n64 + 0769c84615422d60f16925cd859593cdfa597f84 + ;; + b6d33d6bf5d6700c64b6a873ab8b06ff039619bc) # v64 + 2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73 + ;; + 2c7113d20044f93c82ec888c19aa09ea7797396d) # n64 + 2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73 + ;; + 06c3c098f0e14ed61811dfaf0e8e4519d7d7a826) # v64 + dd14e143c4275861fe93ea79d0c02e36ae8c6c2f + ;; + bb3f85bfaad9ae7a20afbf618fc9fe126c8c1b4f) # n64 + dd14e143c4275861fe93ea79d0c02e36ae8c6c2f + ;; esac case "$ROMHASH" in @@ -125,6 +191,30 @@ while [[ (! -e "$SHIP_HOME"/oot.otr) || (! -e "$SHIP_HOME"/oot-mq.otr) ]]; do continue fi ;; + ad69c91157f6705e8ab06c79fe08aad47bb57ba7|c892bbda3993e66bd0d56a10ecd30b1ee612210f) + if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then + ROM=N64_NTSC_10 + OTRNAME="oot.otr" + else + continue + fi + ;; + d3ecb253776cd847a5aa63d859d8c89a2f37b364|dbfc81f655187dc6fefd93fa6798face770d579d) + if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then + ROM=N64_NTSC_11 + OTRNAME="oot.otr" + else + continue + fi + ;; + 41b3bdc48d98c48529219919015a1af22f5057c2|fa5f5942b27480d60243c2d52c0e93e26b9e6b86) + if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then + ROM=N64_NTSC_12 + OTRNAME="oot.otr" + else + continue + fi + ;; f46239439f59a2a594ef83cf68ef65043b1bffe2) if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then ROM=GC_MQ_PAL_F @@ -165,6 +255,46 @@ while [[ (! -e "$SHIP_HOME"/oot.otr) || (! -e "$SHIP_HOME"/oot-mq.otr) ]]; do continue fi ;; + b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b) + if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then + ROM=GC_NMQ_NTSC_U + OTRNAME="oot.otr" + else + continue + fi + ;; + 8b5d13aac69bfbf989861cfdc50b1d840945fc1d) + if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then + ROM=GC_MQ_NTSC_U + OTRNAME="oot-mq.otr" + else + continue + fi + ;; + 0769c84615422d60f16925cd859593cdfa597f84) + if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then + ROM=GC_NMQ_NTSC_J + OTRNAME="oot.otr" + else + continue + fi + ;; + 2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73) + if [[ ! -e "$SHIP_HOME"/oot.otr ]]; then + ROM=GC_NMQ_NTSC_J_CE + OTRNAME="oot.otr" + else + continue + fi + ;; + dd14e143c4275861fe93ea79d0c02e36ae8c6c2f) + if [[ ! -e "$SHIP_HOME"/oot-mq.otr ]]; then + ROM=GC_MQ_NTSC_J + OTRNAME="oot-mq.otr" + else + continue + fi + ;; *) echo -e "\n$romfile - $ROMHASH rom hash does not match\n" continue;; diff --git a/soh/CMakeLists.txt b/soh/CMakeLists.txt index b4ee6ed7f..7277b2dfb 100644 --- a/soh/CMakeLists.txt +++ b/soh/CMakeLists.txt @@ -440,6 +440,7 @@ if(MSVC) /Gy; /W3 > + /bigobj; /sdl-; /permissive-; /MP; diff --git a/soh/assets/.gitignore b/soh/assets/.gitignore index d75078bf1..7a844a727 100644 --- a/soh/assets/.gitignore +++ b/soh/assets/.gitignore @@ -5,3 +5,4 @@ *.vtx.inc *.dlist.inc !*.png +custom/shaders diff --git a/soh/assets/custom/objects/gameplay_field_keep/BushTex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/BushTex.rgba16 new file mode 100644 index 000000000..99a0fd4bd Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/BushTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/LeafTex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/LeafTex.rgba16 new file mode 100644 index 000000000..1d4f2db39 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/LeafTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_bosskey_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_bosskey_tex.rgba16 new file mode 100644 index 000000000..54bdc9fa7 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_bosskey_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_bronze_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_bronze_tex.rgba16 new file mode 100644 index 000000000..9d561d1ae Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_bronze_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_fairy_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_fairy_tex.rgba16 new file mode 100644 index 000000000..b9d1f74e3 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_fairy_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_gold_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_gold_tex.rgba16 new file mode 100644 index 000000000..8ec68d3aa Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_gold_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_heart_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_heart_tex.rgba16 new file mode 100644 index 000000000..2822f18fd Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_heart_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_mask_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_mask_tex.rgba16 new file mode 100644 index 000000000..bf90c64fc Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_mask_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_random_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_random_tex.rgba16 new file mode 100644 index 000000000..52f4848b3 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_random_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_silver_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_silver_tex.rgba16 new file mode 100644 index 000000000..9d14059c0 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_silver_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_token_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_token_tex.rgba16 new file mode 100644 index 000000000..436b87071 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_token_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL new file mode 100644 index 000000000..c0a32b3b0 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_0 new file mode 100644 index 000000000..bdb256c87 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_1 new file mode 100644 index 000000000..eab49e30d --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_2 new file mode 100644 index 000000000..2fea2e4db --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL new file mode 100644 index 000000000..70e8240a4 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_0 new file mode 100644 index 000000000..926fed879 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_1 new file mode 100644 index 000000000..74ccefada --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_2 new file mode 100644 index 000000000..08fdc08b9 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL new file mode 100644 index 000000000..046e04d33 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_0 new file mode 100644 index 000000000..dcc1da33a --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_1 new file mode 100644 index 000000000..8475ba007 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_2 new file mode 100644 index 000000000..c20f0dc4d --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL new file mode 100644 index 000000000..a27f05f47 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_tri_0 new file mode 100644 index 000000000..be06a23a7 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL new file mode 100644 index 000000000..af43aa60c --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_0 new file mode 100644 index 000000000..dd226cbc5 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_1 new file mode 100644 index 000000000..e00033c0f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_2 new file mode 100644 index 000000000..95c382ca0 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL new file mode 100644 index 000000000..b9e25ae70 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_0 new file mode 100644 index 000000000..874e7ffb8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_1 new file mode 100644 index 000000000..90b390218 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_2 new file mode 100644 index 000000000..b2c011f94 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL new file mode 100644 index 000000000..35d99afcd --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_0 new file mode 100644 index 000000000..6f519fbc8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_1 new file mode 100644 index 000000000..6d7a07c98 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_2 new file mode 100644 index 000000000..f85ac723f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL new file mode 100644 index 000000000..c04d7156e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_0 new file mode 100644 index 000000000..cb19e7c48 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_1 new file mode 100644 index 000000000..8cf916c22 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_2 new file mode 100644 index 000000000..cb5550f61 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL new file mode 100644 index 000000000..29371b448 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_0 new file mode 100644 index 000000000..a25ca5b55 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_1 new file mode 100644 index 000000000..cb9c707a8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_2 new file mode 100644 index 000000000..96023e0eb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL new file mode 100644 index 000000000..c8a98c94e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_0 new file mode 100644 index 000000000..e60691715 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_1 new file mode 100644 index 000000000..d20545643 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_2 new file mode 100644 index 000000000..72993605d --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_flower_bosskey b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_flower_bosskey new file mode 100644 index 000000000..0cad964b8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_flower_bosskey @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_flower_fairy b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_flower_fairy new file mode 100644 index 000000000..740ca2da3 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_flower_fairy @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_flower_heart b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_flower_heart new file mode 100644 index 000000000..e074ff279 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_flower_heart @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushJunkDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushJunkDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushJunkDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_flower_gold b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_flower_gold new file mode 100644 index 000000000..42f481571 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_flower_gold @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_flower_mask b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_flower_mask new file mode 100644 index 000000000..f19b26e56 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_flower_mask @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_flower_bronze b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_flower_bronze new file mode 100644 index 000000000..de5aecac6 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_flower_bronze @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_flower_random b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_flower_random new file mode 100644 index 000000000..36895a84b --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_flower_random @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_flower_silver b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_flower_silver new file mode 100644 index 000000000..227294911 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_flower_silver @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_flower_token b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_flower_token new file mode 100644 index 000000000..6725b33e6 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_flower_token @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/model.xml b/soh/assets/custom/objects/gameplay_field_keep/model.xml new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/model.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/LeafTex.rgba16 b/soh/assets/custom/objects/gameplay_keep/LeafTex.rgba16 new file mode 100644 index 000000000..1d4f2db39 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/LeafTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/StemTex.rgba16 b/soh/assets/custom/objects/gameplay_keep/StemTex.rgba16 new file mode 100644 index 000000000..fa00a5606 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/StemTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_bosskey_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_bosskey_tex.rgba16 new file mode 100644 index 000000000..54bdc9fa7 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_bosskey_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_bronze_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_bronze_tex.rgba16 new file mode 100644 index 000000000..9d561d1ae Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_bronze_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_fairy_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_fairy_tex.rgba16 new file mode 100644 index 000000000..b9d1f74e3 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_fairy_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_gold_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_gold_tex.rgba16 new file mode 100644 index 000000000..8ec68d3aa Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_gold_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_heart_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_heart_tex.rgba16 new file mode 100644 index 000000000..2822f18fd Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_heart_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_mask_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_mask_tex.rgba16 new file mode 100644 index 000000000..bf90c64fc Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_mask_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_random_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_random_tex.rgba16 new file mode 100644 index 000000000..52f4848b3 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_random_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_silver_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_silver_tex.rgba16 new file mode 100644 index 000000000..9d14059c0 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_silver_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_token_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_token_tex.rgba16 new file mode 100644 index 000000000..436b87071 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_token_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/gGrassBunchTex.rgba16 b/soh/assets/custom/objects/gameplay_keep/gGrassBunchTex.rgba16 new file mode 100644 index 000000000..c59757c1d Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/gGrassBunchTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL new file mode 100644 index 000000000..4c7b1ab35 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_0 new file mode 100644 index 000000000..061362cd6 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_1 new file mode 100644 index 000000000..16c026e42 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_2 new file mode 100644 index 000000000..0d0968586 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_3 new file mode 100644 index 000000000..d8fcf1fe1 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL new file mode 100644 index 000000000..875f809dd --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_0 new file mode 100644 index 000000000..951dd58bb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_1 new file mode 100644 index 000000000..97fe8599c --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_2 new file mode 100644 index 000000000..0d7b67f3c --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_3 new file mode 100644 index 000000000..22c8ba3d8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL new file mode 100644 index 000000000..235dfdcf3 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_0 new file mode 100644 index 000000000..273e96ed4 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_1 new file mode 100644 index 000000000..1b8a08eec --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_2 new file mode 100644 index 000000000..889988611 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_3 new file mode 100644 index 000000000..45a3b48e1 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL new file mode 100644 index 000000000..d4ab27bdb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_tri_0 new file mode 100644 index 000000000..bcf6f69e6 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_cull new file mode 100644 index 000000000..6444457b7 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL new file mode 100644 index 000000000..7ded8214f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_0 new file mode 100644 index 000000000..f8278cc0c --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_1 new file mode 100644 index 000000000..64c020a98 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_2 new file mode 100644 index 000000000..13938b6d9 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_3 new file mode 100644 index 000000000..da60e69d2 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL new file mode 100644 index 000000000..94c93e453 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_0 new file mode 100644 index 000000000..d981594a9 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_1 new file mode 100644 index 000000000..ee5852695 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_2 new file mode 100644 index 000000000..1ed45fdcb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_3 new file mode 100644 index 000000000..94910ceb3 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL new file mode 100644 index 000000000..e0ae6e48a --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_0 new file mode 100644 index 000000000..7a5d4e3de --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_1 new file mode 100644 index 000000000..a24c28fa4 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_2 new file mode 100644 index 000000000..5ef0b99cb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_3 new file mode 100644 index 000000000..d49e9b186 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL new file mode 100644 index 000000000..7ec87e807 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_0 new file mode 100644 index 000000000..94ccbe795 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_1 new file mode 100644 index 000000000..96e84046e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_2 new file mode 100644 index 000000000..db7142847 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_3 new file mode 100644 index 000000000..b1b8cb8c1 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL new file mode 100644 index 000000000..f22094eba --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_0 new file mode 100644 index 000000000..2235b57ae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_1 new file mode 100644 index 000000000..93b101a86 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_2 new file mode 100644 index 000000000..2cf0ed524 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_3 new file mode 100644 index 000000000..653b2b7cb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL new file mode 100644 index 000000000..d1dff7095 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_0 new file mode 100644 index 000000000..dc2309657 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_1 new file mode 100644 index 000000000..f78444188 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_2 new file mode 100644 index 000000000..7de2d7943 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_3 new file mode 100644 index 000000000..e5c1fbd15 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_flower_bosskey b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_flower_bosskey new file mode 100644 index 000000000..ee25715ae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_flower_bosskey @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_flower_fairy b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_flower_fairy new file mode 100644 index 000000000..d3c0c44ec --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_flower_fairy @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_flower_heart b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_flower_heart new file mode 100644 index 000000000..2864988e3 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_flower_heart @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassJunkDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassJunkDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassJunkDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_flower_gold b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_flower_gold new file mode 100644 index 000000000..6f451d12a --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_flower_gold @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_flower_mask b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_flower_mask new file mode 100644 index 000000000..a5bb3b8a4 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_flower_mask @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_flower_bronze b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_flower_bronze new file mode 100644 index 000000000..0102b9a5e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_flower_bronze @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_flower_random b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_flower_random new file mode 100644 index 000000000..f23e81a03 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_flower_random @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_flower_silver b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_flower_silver new file mode 100644 index 000000000..98dcfacb1 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_flower_silver @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_flower_token b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_flower_token new file mode 100644 index 000000000..63a739c30 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_flower_token @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/model.xml b/soh/assets/custom/objects/gameplay_keep/model.xml new file mode 100644 index 000000000..6444457b7 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/model.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/bosskey_crate_top b/soh/assets/custom/objects/object_kibako/bosskey_crate_top new file mode 100644 index 000000000..4b055671e Binary files /dev/null and b/soh/assets/custom/objects/object_kibako/bosskey_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL new file mode 100644 index 000000000..c42484ebe --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_tri_0 new file mode 100644 index 000000000..96b7903de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_0 new file mode 100644 index 000000000..1a288d213 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_cull new file mode 100644 index 000000000..9b63c4a72 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL new file mode 100644 index 000000000..1fd3a1f8b --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_tri_0 new file mode 100644 index 000000000..bbcb5c4c9 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_0 new file mode 100644 index 000000000..1a288d213 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_cull new file mode 100644 index 000000000..9b63c4a72 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL new file mode 100644 index 000000000..e0d09ffa4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_tri_0 new file mode 100644 index 000000000..a0af63d7f --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_0 new file mode 100644 index 000000000..1a288d213 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_cull new file mode 100644 index 000000000..9b63c4a72 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL new file mode 100644 index 000000000..9999462e6 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_tri_0 new file mode 100644 index 000000000..6eea14d8c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_0 new file mode 100644 index 000000000..1a288d213 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_cull new file mode 100644 index 000000000..9b63c4a72 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL new file mode 100644 index 000000000..8237aa0e7 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_tri_0 new file mode 100644 index 000000000..c1c8d6cfc --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_0 new file mode 100644 index 000000000..1a288d213 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_cull new file mode 100644 index 000000000..9b63c4a72 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL new file mode 100644 index 000000000..17467a73b --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_tri_0 new file mode 100644 index 000000000..6df8755b2 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_0 new file mode 100644 index 000000000..1a288d213 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_cull new file mode 100644 index 000000000..9b63c4a72 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL new file mode 100644 index 000000000..e3cc0ebe1 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_tri_0 new file mode 100644 index 000000000..692fd7ec3 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_0 new file mode 100644 index 000000000..1a288d213 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_cull new file mode 100644 index 000000000..9b63c4a72 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL new file mode 100644 index 000000000..dc73b6089 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_tri_0 new file mode 100644 index 000000000..88a23f0e7 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_0 new file mode 100644 index 000000000..1a288d213 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_cull new file mode 100644 index 000000000..9b63c4a72 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/heart_crate_top b/soh/assets/custom/objects/object_kibako/heart_crate_top new file mode 100644 index 000000000..f5b47bd09 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako/heart_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako/junk_crate_top b/soh/assets/custom/objects/object_kibako/junk_crate_top new file mode 100644 index 000000000..ef303867c Binary files /dev/null and b/soh/assets/custom/objects/object_kibako/junk_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako/major_crate_top b/soh/assets/custom/objects/object_kibako/major_crate_top new file mode 100644 index 000000000..874104cf6 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako/major_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallBossKeyCrateDL_f3dlite_smallcrate_bosskey b/soh/assets/custom/objects/object_kibako/mat_gSmallBossKeyCrateDL_f3dlite_smallcrate_bosskey new file mode 100644 index 000000000..4996f1054 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallBossKeyCrateDL_f3dlite_smallcrate_bosskey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallHeartCrateDL_f3dlite_smallcrate_heart b/soh/assets/custom/objects/object_kibako/mat_gSmallHeartCrateDL_f3dlite_smallcrate_heart new file mode 100644 index 000000000..f1df8a15c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallHeartCrateDL_f3dlite_smallcrate_heart @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallJunkCrateDL_f3dlite_smallcrate_junk b/soh/assets/custom/objects/object_kibako/mat_gSmallJunkCrateDL_f3dlite_smallcrate_junk new file mode 100644 index 000000000..85a1aef61 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallJunkCrateDL_f3dlite_smallcrate_junk @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallMajorCrateDL_f3dlite_smallcrate_major b/soh/assets/custom/objects/object_kibako/mat_gSmallMajorCrateDL_f3dlite_smallcrate_major new file mode 100644 index 000000000..ea7b5edf0 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallMajorCrateDL_f3dlite_smallcrate_major @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallMinorCrateDL_f3dlite_smallcrate_minor b/soh/assets/custom/objects/object_kibako/mat_gSmallMinorCrateDL_f3dlite_smallcrate_minor new file mode 100644 index 000000000..7a6580630 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallMinorCrateDL_f3dlite_smallcrate_minor @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallRandoCrateDL_f3dlite_smallcrate_rando b/soh/assets/custom/objects/object_kibako/mat_gSmallRandoCrateDL_f3dlite_smallcrate_rando new file mode 100644 index 000000000..e8ff9db18 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallRandoCrateDL_f3dlite_smallcrate_rando @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallSmallKeyCrateDL_f3dlite_smallcrate_smallkey b/soh/assets/custom/objects/object_kibako/mat_gSmallSmallKeyCrateDL_f3dlite_smallcrate_smallkey new file mode 100644 index 000000000..593bf9e54 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallSmallKeyCrateDL_f3dlite_smallcrate_smallkey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallTokenCrateDL_f3dlite_smallcrate_token b/soh/assets/custom/objects/object_kibako/mat_gSmallTokenCrateDL_f3dlite_smallcrate_token new file mode 100644 index 000000000..f58840a2b --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallTokenCrateDL_f3dlite_smallcrate_token @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/minor_crate_top b/soh/assets/custom/objects/object_kibako/minor_crate_top new file mode 100644 index 000000000..830d8ff65 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako/minor_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako/rando_crate_top b/soh/assets/custom/objects/object_kibako/rando_crate_top new file mode 100644 index 000000000..2d211d612 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako/rando_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako/smallkey_crate_top b/soh/assets/custom/objects/object_kibako/smallkey_crate_top new file mode 100644 index 000000000..542dfb837 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako/smallkey_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako/token_crate_top b/soh/assets/custom/objects/object_kibako/token_crate_top new file mode 100644 index 000000000..d4d544286 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako/token_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako2/bosskey_crate_side b/soh/assets/custom/objects/object_kibako2/bosskey_crate_side new file mode 100644 index 000000000..d5ec9241a Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/bosskey_crate_side differ diff --git a/soh/assets/custom/objects/object_kibako2/bosskey_crate_top b/soh/assets/custom/objects/object_kibako2/bosskey_crate_top new file mode 100644 index 000000000..4b055671e Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/bosskey_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL new file mode 100644 index 000000000..c59674884 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_0 new file mode 100644 index 000000000..f43cacd88 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_1 new file mode 100644 index 000000000..d877460d4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_0 new file mode 100644 index 000000000..e76946586 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_1 new file mode 100644 index 000000000..1c6430bd4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_cull new file mode 100644 index 000000000..42422b027 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL new file mode 100644 index 000000000..ce8bcb69f --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_0 new file mode 100644 index 000000000..64c96a3a3 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_1 new file mode 100644 index 000000000..ee780d50d --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_0 new file mode 100644 index 000000000..e76946586 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_1 new file mode 100644 index 000000000..1c6430bd4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_cull new file mode 100644 index 000000000..42422b027 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL new file mode 100644 index 000000000..2d9c5974c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_0 new file mode 100644 index 000000000..a3a46e621 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_1 new file mode 100644 index 000000000..041d794d9 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_0 new file mode 100644 index 000000000..e76946586 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_1 new file mode 100644 index 000000000..1c6430bd4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_cull new file mode 100644 index 000000000..42422b027 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL new file mode 100644 index 000000000..190005d99 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_0 new file mode 100644 index 000000000..867e166d7 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_1 new file mode 100644 index 000000000..5ab5bf39b --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_0 new file mode 100644 index 000000000..e76946586 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_1 new file mode 100644 index 000000000..1c6430bd4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_cull new file mode 100644 index 000000000..42422b027 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL new file mode 100644 index 000000000..d093960d5 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_0 new file mode 100644 index 000000000..9ab4cdf9a --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_1 new file mode 100644 index 000000000..8a22d508b --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_0 new file mode 100644 index 000000000..e76946586 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_1 new file mode 100644 index 000000000..1c6430bd4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_cull new file mode 100644 index 000000000..42422b027 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL new file mode 100644 index 000000000..b1c1ffd1f --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_0 new file mode 100644 index 000000000..3e87c23b1 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_1 new file mode 100644 index 000000000..296988ca1 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_0 new file mode 100644 index 000000000..e76946586 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_1 new file mode 100644 index 000000000..1c6430bd4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_cull new file mode 100644 index 000000000..42422b027 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL new file mode 100644 index 000000000..c4d711d10 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_0 new file mode 100644 index 000000000..126e0bde7 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_1 new file mode 100644 index 000000000..908b646bb --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_0 new file mode 100644 index 000000000..e76946586 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_1 new file mode 100644 index 000000000..1c6430bd4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_cull new file mode 100644 index 000000000..42422b027 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL new file mode 100644 index 000000000..b1b1269b9 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_0 new file mode 100644 index 000000000..c02cd056d --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_1 new file mode 100644 index 000000000..dd2c07c52 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_0 new file mode 100644 index 000000000..e76946586 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_1 new file mode 100644 index 000000000..1c6430bd4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_cull new file mode 100644 index 000000000..42422b027 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/heart_crate_side b/soh/assets/custom/objects/object_kibako2/heart_crate_side new file mode 100644 index 000000000..d0d916c07 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/heart_crate_side differ diff --git a/soh/assets/custom/objects/object_kibako2/heart_crate_top b/soh/assets/custom/objects/object_kibako2/heart_crate_top new file mode 100644 index 000000000..f5b47bd09 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/heart_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako2/junk_crate_side b/soh/assets/custom/objects/object_kibako2/junk_crate_side new file mode 100644 index 000000000..08b491eb4 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/junk_crate_side differ diff --git a/soh/assets/custom/objects/object_kibako2/junk_crate_top b/soh/assets/custom/objects/object_kibako2/junk_crate_top new file mode 100644 index 000000000..ef303867c Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/junk_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako2/major_crate_side b/soh/assets/custom/objects/object_kibako2/major_crate_side new file mode 100644 index 000000000..a1fe6d819 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/major_crate_side differ diff --git a/soh/assets/custom/objects/object_kibako2/major_crate_top b/soh/assets/custom/objects/object_kibako2/major_crate_top new file mode 100644 index 000000000..874104cf6 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/major_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako2/mask_crate_side b/soh/assets/custom/objects/object_kibako2/mask_crate_side new file mode 100644 index 000000000..634969f2a Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/mask_crate_side differ diff --git a/soh/assets/custom/objects/object_kibako2/mask_crate_top b/soh/assets/custom/objects/object_kibako2/mask_crate_top new file mode 100644 index 000000000..d8292e33f Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/mask_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_side_bosskey b/soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_side_bosskey new file mode 100644 index 000000000..381376f7e --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_side_bosskey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_top_bosskey b/soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_top_bosskey new file mode 100644 index 000000000..6bbbe0408 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_top_bosskey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_side_heart b/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_side_heart new file mode 100644 index 000000000..e79a71e40 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_side_heart @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_top_heart b/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_top_heart new file mode 100644 index 000000000..2e20008c7 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_top_heart @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_side_junk b/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_side_junk new file mode 100644 index 000000000..b7eee4eb1 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_side_junk @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_top_junk b/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_top_junk new file mode 100644 index 000000000..d59ca15f8 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_top_junk @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_side_major b/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_side_major new file mode 100644 index 000000000..e930dced0 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_side_major @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_top_major b/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_top_major new file mode 100644 index 000000000..ee053858d --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_top_major @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_side_minor b/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_side_minor new file mode 100644 index 000000000..c9b542226 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_side_minor @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_top_minor b/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_top_minor new file mode 100644 index 000000000..619787be2 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_top_minor @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_side_rando b/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_side_rando new file mode 100644 index 000000000..8e2e6bb46 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_side_rando @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_top_rando b/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_top_rando new file mode 100644 index 000000000..ca00e4780 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_top_rando @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_side_smallkey b/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_side_smallkey new file mode 100644 index 000000000..b4cb8d672 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_side_smallkey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_top_smallkey b/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_top_smallkey new file mode 100644 index 000000000..a0ea43499 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_top_smallkey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_side_token b/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_side_token new file mode 100644 index 000000000..d87ec4148 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_side_token @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_top_token b/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_top_token new file mode 100644 index 000000000..369b6a05a --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_top_token @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/minor_crate_side b/soh/assets/custom/objects/object_kibako2/minor_crate_side new file mode 100644 index 000000000..27a62c8c4 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/minor_crate_side differ diff --git a/soh/assets/custom/objects/object_kibako2/minor_crate_top b/soh/assets/custom/objects/object_kibako2/minor_crate_top new file mode 100644 index 000000000..830d8ff65 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/minor_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako2/rando_crate_side b/soh/assets/custom/objects/object_kibako2/rando_crate_side new file mode 100644 index 000000000..ea7c9e3b6 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/rando_crate_side differ diff --git a/soh/assets/custom/objects/object_kibako2/rando_crate_top b/soh/assets/custom/objects/object_kibako2/rando_crate_top new file mode 100644 index 000000000..2d211d612 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/rando_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako2/smallkey_crate_side b/soh/assets/custom/objects/object_kibako2/smallkey_crate_side new file mode 100644 index 000000000..23ada846e Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/smallkey_crate_side differ diff --git a/soh/assets/custom/objects/object_kibako2/smallkey_crate_top b/soh/assets/custom/objects/object_kibako2/smallkey_crate_top new file mode 100644 index 000000000..542dfb837 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/smallkey_crate_top differ diff --git a/soh/assets/custom/objects/object_kibako2/token_crate_side b/soh/assets/custom/objects/object_kibako2/token_crate_side new file mode 100644 index 000000000..6de4f580f Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/token_crate_side differ diff --git a/soh/assets/custom/objects/object_kibako2/token_crate_top b/soh/assets/custom/objects/object_kibako2/token_crate_top new file mode 100644 index 000000000..d4d544286 Binary files /dev/null and b/soh/assets/custom/objects/object_kibako2/token_crate_top differ diff --git a/soh/assets/custom/textures/title_static/gFileSelBossRushSettingsJPNTex.ia8.png b/soh/assets/custom/textures/title_static/gFileSelBossRushSettingsJPNTex.ia8.png new file mode 100644 index 000000000..445111458 Binary files /dev/null and b/soh/assets/custom/textures/title_static/gFileSelBossRushSettingsJPNTex.ia8.png differ diff --git a/soh/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestJPNTex.ia8.png b/soh/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestJPNTex.ia8.png new file mode 100644 index 000000000..08e42e476 Binary files /dev/null and b/soh/assets/custom/textures/title_static/gFileSelPleaseChooseAQuestJPNTex.ia8.png differ diff --git a/soh/assets/extractor/Config_GC_MQ_NTSC_J.xml b/soh/assets/extractor/Config_GC_MQ_NTSC_J.xml new file mode 100644 index 000000000..9e714df03 --- /dev/null +++ b/soh/assets/extractor/Config_GC_MQ_NTSC_J.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/extractor/Config_GC_MQ_NTSC_U.xml b/soh/assets/extractor/Config_GC_MQ_NTSC_U.xml new file mode 100644 index 000000000..e3baed50f --- /dev/null +++ b/soh/assets/extractor/Config_GC_MQ_NTSC_U.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/extractor/Config_GC_NMQ_NTSC_J.xml b/soh/assets/extractor/Config_GC_NMQ_NTSC_J.xml new file mode 100644 index 000000000..a5fe09f12 --- /dev/null +++ b/soh/assets/extractor/Config_GC_NMQ_NTSC_J.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/extractor/Config_GC_NMQ_NTSC_J_CE.xml b/soh/assets/extractor/Config_GC_NMQ_NTSC_J_CE.xml new file mode 100644 index 000000000..199030c69 --- /dev/null +++ b/soh/assets/extractor/Config_GC_NMQ_NTSC_J_CE.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/extractor/Config_GC_NMQ_NTSC_U.xml b/soh/assets/extractor/Config_GC_NMQ_NTSC_U.xml new file mode 100644 index 000000000..5fa22a5b8 --- /dev/null +++ b/soh/assets/extractor/Config_GC_NMQ_NTSC_U.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/extractor/Config_N64_NTSC_10.xml b/soh/assets/extractor/Config_N64_NTSC_10.xml new file mode 100644 index 000000000..6503480db --- /dev/null +++ b/soh/assets/extractor/Config_N64_NTSC_10.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/extractor/Config_N64_NTSC_11.xml b/soh/assets/extractor/Config_N64_NTSC_11.xml new file mode 100644 index 000000000..e69608bc2 --- /dev/null +++ b/soh/assets/extractor/Config_N64_NTSC_11.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/extractor/Config_N64_NTSC_12.xml b/soh/assets/extractor/Config_N64_NTSC_12.xml new file mode 100644 index 000000000..c72689ccb --- /dev/null +++ b/soh/assets/extractor/Config_N64_NTSC_12.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/objects/gameplay_keep/gameplay_keep.h b/soh/assets/objects/gameplay_keep/gameplay_keep.h index 6377e165d..afd7b7495 100644 --- a/soh/assets/objects/gameplay_keep/gameplay_keep.h +++ b/soh/assets/objects/gameplay_keep/gameplay_keep.h @@ -21,6 +21,9 @@ static const ALIGN_ASSET(2) char gHilite1Tex[] = dgHilite1Tex; #define dgHilite2Tex "__OTR__objects/gameplay_keep/gHilite2Tex" static const ALIGN_ASSET(2) char gHilite2Tex[] = dgHilite2Tex; +#define dgHilite2Tex_Overflow "__OTR__objects/gameplay_keep/gHilite2Tex_Overflow" +static const ALIGN_ASSET(2) char gHilite2Tex_Overflow[] = dgHilite2Tex_Overflow; + #define dgHylianShieldDesignTex "__OTR__objects/gameplay_keep/gHylianShieldDesignTex" static const ALIGN_ASSET(2) char gHylianShieldDesignTex[] = dgHylianShieldDesignTex; @@ -2847,5 +2850,62 @@ static const ALIGN_ASSET(2) char gFishSkelLimbsLimb_018FB0DL_018950[] = dgFishSk #define dgFishSkelLimbsLimb_018FBCDL_0188B0 "__OTR__objects/gameplay_keep/gFishSkelLimbsLimb_018FBCDL_0188B0" static const ALIGN_ASSET(2) char gFishSkelLimbsLimb_018FBCDL_0188B0[] = dgFishSkelLimbsLimb_018FBCDL_0188B0; +// #region NTSC + +#define dgameplay_keep_DL_0C8B0 "__OTR__objects/gameplay_keep/gameplay_keep_DL_0C8B0" +static const ALIGN_ASSET(2) char gameplay_keep_DL_0C8B0[] = dgameplay_keep_DL_0C8B0; + +#define dgameplay_keep_Tex_0CE60 "__OTR__objects/gameplay_keep/gameplay_keep_Tex_0CE60" +static const ALIGN_ASSET(2) char gameplay_keep_Tex_0CE60[] = dgameplay_keep_Tex_0CE60; + +#define dgameplay_keep_DL_39890 "__OTR__objects/gameplay_keep/gameplay_keep_DL_39890" +static const ALIGN_ASSET(2) char gameplay_keep_DL_39890[] = dgameplay_keep_DL_39890; + +#define dgameplay_keep_DL_399B0 "__OTR__objects/gameplay_keep/gameplay_keep_DL_399B0" +static const ALIGN_ASSET(2) char gameplay_keep_DL_399B0[] = dgameplay_keep_DL_399B0; + +#define dgameplay_keep_DL_39A80 "__OTR__objects/gameplay_keep/gameplay_keep_DL_39A80" +static const ALIGN_ASSET(2) char gameplay_keep_DL_39A80[] = dgameplay_keep_DL_39A80; + +#define dgameplay_keep_DL_39B50 "__OTR__objects/gameplay_keep/gameplay_keep_DL_39B50" +static const ALIGN_ASSET(2) char gameplay_keep_DL_39B50[] = dgameplay_keep_DL_39B50; + +#define dgameplay_keep_DL_3CFD0 "__OTR__objects/gameplay_keep/gameplay_keep_DL_3CFD0" +static const ALIGN_ASSET(2) char gameplay_keep_DL_3CFD0[] = dgameplay_keep_DL_3CFD0; + +#define dgameplay_keep_DL_3D108 "__OTR__objects/gameplay_keep/gameplay_keep_DL_3D108" +static const ALIGN_ASSET(2) char gameplay_keep_DL_3D108[] = dgameplay_keep_DL_3D108; + +#define dgameplay_keep_DL_3D260 "__OTR__objects/gameplay_keep/gameplay_keep_DL_3D260" +static const ALIGN_ASSET(2) char gameplay_keep_DL_3D260[] = dgameplay_keep_DL_3D260; + +#define dgUnusedDropBombchuTex "__OTR__objects/gameplay_keep/gUnusedDropBombchuTex" +static const ALIGN_ASSET(2) char gUnusedDropBombchuTex[] = dgUnusedDropBombchuTex; + +#define dgUnusedWalletTex "__OTR__objects/gameplay_keep/gUnusedWalletTex" +static const ALIGN_ASSET(2) char gUnusedWalletTex[] = dgUnusedWalletTex; + +#define dgUnusedHeartPieceTex "__OTR__objects/gameplay_keep/gUnusedHeartPieceTex" +static const ALIGN_ASSET(2) char gUnusedHeartPieceTex[] = dgUnusedHeartPieceTex; + +#define dgUnusedDropRecoveryHeartTex "__OTR__objects/gameplay_keep/gUnusedDropRecoveryHeartTex" +static const ALIGN_ASSET(2) char gUnusedDropRecoveryHeartTex[] = dgUnusedDropRecoveryHeartTex; + +#define dgUnusedDropBombTex "__OTR__objects/gameplay_keep/gUnusedDropBombTex" +static const ALIGN_ASSET(2) char gUnusedDropBombTex[] = dgUnusedDropBombTex; + +#define dgUnusedDropArrows1Tex "__OTR__objects/gameplay_keep/gUnusedDropArrows1Tex" +static const ALIGN_ASSET(2) char gUnusedDropArrows1Tex[] = dgUnusedDropArrows1Tex; + +#define dgUnusedRupeeLightBlueTex "__OTR__objects/gameplay_keep/gUnusedRupeeLightBlueTex" +static const ALIGN_ASSET(2) char gUnusedRupeeLightBlueTex[] = dgUnusedRupeeLightBlueTex; + +#define dgUnusedHeartContainerTex "__OTR__objects/gameplay_keep/gUnusedHeartContainerTex" +static const ALIGN_ASSET(2) char gUnusedHeartContainerTex[] = dgUnusedHeartContainerTex; + +#define dgUnusedTreeBarkTex "__OTR__objects/gameplay_keep/gUnusedTreeBarkTex" +static const ALIGN_ASSET(2) char gUnusedTreeBarkTex[] = dgUnusedTreeBarkTex; + + #endif // OBJECTS_GAMEPLAY_KEEP_H diff --git a/soh/assets/objects/object_mag/object_mag.h b/soh/assets/objects/object_mag/object_mag.h index 07ccd88db..b470b71dd 100644 --- a/soh/assets/objects/object_mag/object_mag.h +++ b/soh/assets/objects/object_mag/object_mag.h @@ -9,6 +9,9 @@ static const ALIGN_ASSET(2) char gTitleZeldaShieldLogoMQTex[] = dgTitleZeldaShie #define dgTitleZeldaShieldLogoTex "__OTR__objects/object_mag/gTitleZeldaShieldLogoTex" static const ALIGN_ASSET(2) char gTitleZeldaShieldLogoTex[] = dgTitleZeldaShieldLogoTex; +#define dgTitleCopyright1998Tex "__OTR__objects/object_mag/gTitleCopyright1998Tex" +static const ALIGN_ASSET(2) char gTitleCopyright1998Tex[] = dgTitleCopyright1998Tex; + #define dgTitleCopyright19982002Tex "__OTR__objects/object_mag/gTitleCopyright19982002Tex" static const ALIGN_ASSET(2) char gTitleCopyright19982002Tex[] = dgTitleCopyright19982002Tex; diff --git a/soh/assets/overlays/ovl_File_Choose/ovl_file_choose.h b/soh/assets/overlays/ovl_File_Choose/ovl_file_choose.h index 9077b1ac5..46342f736 100644 --- a/soh/assets/overlays/ovl_File_Choose/ovl_file_choose.h +++ b/soh/assets/overlays/ovl_File_Choose/ovl_file_choose.h @@ -27,4 +27,13 @@ static const ALIGN_ASSET(2) char gOptionsDividerMiddleVtx[] = dgOptionsDividerMi #define dgOptionsDividerBottomVtx "__OTR__overlays/ovl_file_choose/gOptionsDividerBottomVtx" static const ALIGN_ASSET(2) char gOptionsDividerBottomVtx[] = dgOptionsDividerBottomVtx; +#define dD_80811BB0_NTSC "__OTR__overlays/ovl_file_choose/D_80811BB0_NTSC" +static const ALIGN_ASSET(2) char D_80811BB0_NTSC[] = dD_80811BB0_NTSC; + +#define dD_80811D30_NTSC "__OTR__overlays/ovl_file_choose/D_80811D30_NTSC" +static const ALIGN_ASSET(2) char D_80811D30_NTSC[] = dD_80811D30_NTSC; + +#define dD_80811F30_NTSC "__OTR__overlays/ovl_file_choose/D_80811F30_NTSC" +static const ALIGN_ASSET(2) char D_80811F30_NTSC[] = dD_80811F30_NTSC; + #endif // OVERLAYS_OVL_FILE_CHOOSE_H diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h index ace158854..3c3ddcf5a 100644 --- a/soh/assets/soh_assets.h +++ b/soh/assets/soh_assets.h @@ -77,6 +77,66 @@ static const ALIGN_ASSET(2) char gBossSoulSkullDL[] = dgBossSoulSkullDL; #define dgRandoPotDL "__OTR__objects/gameplay_dangeon_keep/gRandoPotDL" static const ALIGN_ASSET(2) char gRandoPotDL[] = dgRandoPotDL; +#define dgRandoBushDL "__OTR__objects/gameplay_field_keep/gFieldBushRandomDL" +static const ALIGN_ASSET(2) char gRandoBushDL[] = dgRandoBushDL; + +#define dgRandoBushMinorDL "__OTR__objects/gameplay_field_keep/gFieldBushMinorDL" +static const ALIGN_ASSET(2) char gRandoBushMinorDL[] = dgRandoBushMinorDL; + +#define dgRandoBushMajorDL "__OTR__objects/gameplay_field_keep/gFieldBushMajorDL" +static const ALIGN_ASSET(2) char gRandoBushMajorDL[] = dgRandoBushMajorDL; + +#define dgRandoBushSmallKeyDL "__OTR__objects/gameplay_field_keep/gFieldBushSmallKeyDL" +static const ALIGN_ASSET(2) char gRandoBushSmallKeyDL[] = dgRandoBushSmallKeyDL; + +#define dgRandoBushBossKeyDL "__OTR__objects/gameplay_field_keep/gFieldBushBossKeyDL" +static const ALIGN_ASSET(2) char gRandoBushBossKeyDL[] = dgRandoBushBossKeyDL; + +#define dgRandoBushTokenDL "__OTR__objects/gameplay_field_keep/gFieldBushTokenDL" +static const ALIGN_ASSET(2) char gRandoBushTokenDL[] = dgRandoBushTokenDL; + +#define dgRandoBushMaskDL "__OTR__objects/gameplay_field_keep/gFieldBushMaskDL" +static const ALIGN_ASSET(2) char gRandoBushMaskDL[] = dgRandoBushMaskDL; + +#define dgRandoBushFairyDL "__OTR__objects/gameplay_field_keep/gFieldBushFairyDL" +static const ALIGN_ASSET(2) char gRandoBushFairyDL[] = dgRandoBushFairyDL; + +#define dgRandoBushHeartDL "__OTR__objects/gameplay_field_keep/gFieldBushHeartDL" +static const ALIGN_ASSET(2) char gRandoBushHeartDL[] = dgRandoBushHeartDL; + +#define dgRandoBushJunkDL "__OTR__objects/gameplay_field_keep/gFieldBushJunkDL" +static const ALIGN_ASSET(2) char gRandoBushJunkDL[] = dgRandoBushJunkDL; + +#define dgRandoCuttableGrassRandomDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassRandomDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassDL[] = dgRandoCuttableGrassRandomDL; + +#define dgRandoCuttableGrassMinorDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassMinorDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassMinorDL[] = dgRandoCuttableGrassMinorDL; + +#define dgRandoCuttableGrassMajorDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassMajorDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassMajorDL[] = dgRandoCuttableGrassMajorDL; + +#define dgRandoCuttableGrassSmallKeyDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassSmallKeyDL[] = dgRandoCuttableGrassSmallKeyDL; + +#define dgRandoCuttableGrassBossKeyDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassBossKeyDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassBossKeyDL[] = dgRandoCuttableGrassBossKeyDL; + +#define dgRandoCuttableGrassTokenDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassTokenDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassTokenDL[] = dgRandoCuttableGrassTokenDL; + +#define dgRandoCuttableGrassMaskDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassMaskDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassMaskDL[] = dgRandoCuttableGrassMaskDL; + +#define dgRandoCuttableGrassFairyDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassFairyDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassFairyDL[] = dgRandoCuttableGrassFairyDL; + +#define dgRandoCuttableGrassHeartDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassHeartDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassHeartDL[] = dgRandoCuttableGrassHeartDL; + +#define dgRandoCuttableGrassJunkDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassJunkDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassJunkDL[] = dgRandoCuttableGrassJunkDL; + #define dgFishingPoleGiDL "__OTR__objects/object_gi_fishing_pole/gFishingPoleGiDL" static const ALIGN_ASSET(2) char gFishingPoleGiDL[] = dgFishingPoleGiDL; @@ -89,6 +149,54 @@ static const ALIGN_ASSET(2) char gBombchuBagBodyDL[] = dgBombchuBagBodyDL; #define dgBombchuBagMaskDL "__OTR__objects/object_bombchubag/gBombchuBagMaskDL" static const ALIGN_ASSET(2) char gBombchuBagMaskDL[] = dgBombchuBagMaskDL; +#define dgLargeMajorCrateDL "__OTR__objects/object_kibako2/gLargeMajorCrateDL" +static const ALIGN_ASSET(2) char gLargeMajorCrateDL[] = dgLargeMajorCrateDL; + +#define dgLargeMinorCrateDL "__OTR__objects/object_kibako2/gLargeMinorCrateDL" +static const ALIGN_ASSET(2) char gLargeMinorCrateDL[] = dgLargeMinorCrateDL; + +#define dgLargeRandoCrateDL "__OTR__objects/object_kibako2/gLargeRandoCrateDL" +static const ALIGN_ASSET(2) char gLargeRandoCrateDL[] = dgLargeRandoCrateDL; + +#define dgLargeSmallKeyCrateDL "__OTR__objects/object_kibako2/gLargeSmallKeyCrateDL" +static const ALIGN_ASSET(2) char gLargeSmallKeyCrateDL[] = dgLargeSmallKeyCrateDL; + +#define dgLargeTokenCrateDL "__OTR__objects/object_kibako2/gLargeTokenCrateDL" +static const ALIGN_ASSET(2) char gLargeTokenCrateDL[] = dgLargeTokenCrateDL; + +#define dgLargeBossKeyCrateDL "__OTR__objects/object_kibako2/gLargeBossKeyCrateDL" +static const ALIGN_ASSET(2) char gLargeBossKeyCrateDL[] = dgLargeBossKeyCrateDL; + +#define dgLargeHeartCrateDL "__OTR__objects/object_kibako2/gLargeHeartCrateDL" +static const ALIGN_ASSET(2) char gLargeHeartCrateDL[] = dgLargeHeartCrateDL; + +#define dgLargeJunkCrateDL "__OTR__objects/object_kibako2/gLargeJunkCrateDL" +static const ALIGN_ASSET(2) char gLargeJunkCrateDL[] = dgLargeJunkCrateDL; + +#define dgSmallMajorCrateDL "__OTR__objects/object_kibako/gSmallMajorCrateDL" +static const ALIGN_ASSET(2) char gSmallMajorCrateDL[] = dgSmallMajorCrateDL; + +#define dgSmallMinorCrateDL "__OTR__objects/object_kibako/gSmallMinorCrateDL" +static const ALIGN_ASSET(2) char gSmallMinorCrateDL[] = dgSmallMinorCrateDL; + +#define dgSmallRandoCrateDL "__OTR__objects/object_kibako/gSmallRandoCrateDL" +static const ALIGN_ASSET(2) char gSmallRandoCrateDL[] = dgSmallRandoCrateDL; + +#define dgSmallSmallKeyCrateDL "__OTR__objects/object_kibako/gSmallSmallKeyCrateDL" +static const ALIGN_ASSET(2) char gSmallSmallKeyCrateDL[] = dgSmallSmallKeyCrateDL; + +#define dgSmallTokenCrateDL "__OTR__objects/object_kibako/gSmallTokenCrateDL" +static const ALIGN_ASSET(2) char gSmallTokenCrateDL[] = dgSmallTokenCrateDL; + +#define dgSmallBossKeyCrateDL "__OTR__objects/object_kibako/gSmallBossKeyCrateDL" +static const ALIGN_ASSET(2) char gSmallBossKeyCrateDL[] = dgSmallBossKeyCrateDL; + +#define dgSmallHeartCrateDL "__OTR__objects/object_kibako/gSmallHeartCrateDL" +static const ALIGN_ASSET(2) char gSmallHeartCrateDL[] = dgSmallHeartCrateDL; + +#define dgSmallJunkCrateDL "__OTR__objects/object_kibako/gSmallJunkCrateDL" +static const ALIGN_ASSET(2) char gSmallJunkCrateDL[] = dgSmallJunkCrateDL; + //boss keys #define dgBossKeyCustomDL "__OTR__objects/object_bosskey/gBossKeyCustomDL" static const ALIGN_ASSET(2) char gBossKeyCustomDL[] = dgBossKeyCustomDL; @@ -287,6 +395,9 @@ static const ALIGN_ASSET(2) char gFileSelPleaseChooseAQuestFRATex[] = dgFileSelP #define dgFileSelPleaseChooseAQuestGERTex "__OTR__textures/title_static/gFileSelPleaseChooseAQuestGERTex" static const ALIGN_ASSET(2) char gFileSelPleaseChooseAQuestGERTex[] = dgFileSelPleaseChooseAQuestGERTex; +#define dgFileSelPleaseChooseAQuestJPNTex "__OTR__textures/title_static/gFileSelPleaseChooseAQuestJPNTex" +static const ALIGN_ASSET(2) char gFileSelPleaseChooseAQuestJPNTex[] = dgFileSelPleaseChooseAQuestJPNTex; + #define dgFileSelBossRushSettingsENGTex "__OTR__textures/title_static/gFileSelBossRushSettingsENGTex" static const ALIGN_ASSET(2) char gFileSelBossRushSettingsENGText[] = dgFileSelBossRushSettingsENGTex; @@ -296,6 +407,9 @@ static const ALIGN_ASSET(2) char gFileSelBossRushSettingsFRAText[] = dgFileSelBo #define dgFileSelBossRushSettingsGERTex "__OTR__textures/title_static/gFileSelBossRushSettingsGERTex" static const ALIGN_ASSET(2) char gFileSelBossRushSettingsGERText[] = dgFileSelBossRushSettingsGERTex; +#define dgFileSelBossRushSettingsJPNTex "__OTR__textures/title_static/gFileSelBossRushSettingsJPNTex" +static const ALIGN_ASSET(2) char gFileSelBossRushSettingsJPNText[] = dgFileSelBossRushSettingsJPNTex; + #define dgFileSelRANDButtonTex "__OTR__textures/title_static/gFileSelRANDButtonTex" static const ALIGN_ASSET(2) char gFileSelRANDButtonTex[] = dgFileSelRANDButtonTex; diff --git a/soh/assets/textures/boss_title_cards/object_bv.h b/soh/assets/textures/boss_title_cards/object_bv.h index 60a4d3074..3c4b7c090 100644 --- a/soh/assets/textures/boss_title_cards/object_bv.h +++ b/soh/assets/textures/boss_title_cards/object_bv.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gBarinadeTitleCardGERTex[] = dgBarinadeTitleCar #define dgBarinadeTitleCardFRATex "__OTR__textures/object_bv/gBarinadeTitleCardFRATex" static const ALIGN_ASSET(2) char gBarinadeTitleCardFRATex[] = dgBarinadeTitleCardFRATex; +#define dgBarinadeTitleCardJPNTex "__OTR__textures/object_bv/gBarinadeTitleCardJPNTex" +static const ALIGN_ASSET(2) char gBarinadeTitleCardJPNTex[] = dgBarinadeTitleCardJPNTex; + #endif // TEXTURES_OBJECT_BV_H diff --git a/soh/assets/textures/boss_title_cards/object_fd.h b/soh/assets/textures/boss_title_cards/object_fd.h index 56d765a86..01fa7a534 100644 --- a/soh/assets/textures/boss_title_cards/object_fd.h +++ b/soh/assets/textures/boss_title_cards/object_fd.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gVolvagiaBossTitleCardGERTex[] = dgVolvagiaBoss #define dgVolvagiaBossTitleCardFRATex "__OTR__textures/object_fd/gVolvagiaBossTitleCardFRATex" static const ALIGN_ASSET(2) char gVolvagiaBossTitleCardFRATex[] = dgVolvagiaBossTitleCardFRATex; +#define dgVolvagiaBossTitleCardJPNTex "__OTR__textures/object_fd/gVolvagiaBossTitleCardJPNTex" +static const ALIGN_ASSET(2) char gVolvagiaBossTitleCardJPNTex[] = dgVolvagiaBossTitleCardJPNTex; + #endif // TEXTURES_OBJECT_FD_H diff --git a/soh/assets/textures/boss_title_cards/object_fhg.h b/soh/assets/textures/boss_title_cards/object_fhg.h index 68d09d083..81a26cd4d 100644 --- a/soh/assets/textures/boss_title_cards/object_fhg.h +++ b/soh/assets/textures/boss_title_cards/object_fhg.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gPhantomGanonTitleCardGERTex[] = dgPhantomGanon #define dgPhantomGanonTitleCardFRATex "__OTR__textures/object_fhg/gPhantomGanonTitleCardFRATex" static const ALIGN_ASSET(2) char gPhantomGanonTitleCardFRATex[] = dgPhantomGanonTitleCardFRATex; +#define dgPhantomGanonTitleCardJPNTex "__OTR__textures/object_fhg/gPhantomGanonTitleCardJPNTex" +static const ALIGN_ASSET(2) char gPhantomGanonTitleCardJPNTex[] = dgPhantomGanonTitleCardJPNTex; + #endif // TEXTURES_OBJECT_FHG_H diff --git a/soh/assets/textures/boss_title_cards/object_ganon.h b/soh/assets/textures/boss_title_cards/object_ganon.h index 0b855ac80..41db9df96 100644 --- a/soh/assets/textures/boss_title_cards/object_ganon.h +++ b/soh/assets/textures/boss_title_cards/object_ganon.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gGanondorfTitleCardGERTex[] = dgGanondorfTitleC #define dgGanondorfTitleCardFRATex "__OTR__textures/object_ganon/gGanondorfTitleCardFRATex" static const ALIGN_ASSET(2) char gGanondorfTitleCardFRATex[] = dgGanondorfTitleCardFRATex; +#define dgGanondorfTitleCardJPNTex "__OTR__textures/object_ganon/gGanondorfTitleCardJPNTex" +static const ALIGN_ASSET(2) char gGanondorfTitleCardJPNTex[] = dgGanondorfTitleCardJPNTex; + #endif // TEXTURES_OBJECT_GANON_H diff --git a/soh/assets/textures/boss_title_cards/object_ganon2.h b/soh/assets/textures/boss_title_cards/object_ganon2.h index d9eb76cc1..30241aa97 100644 --- a/soh/assets/textures/boss_title_cards/object_ganon2.h +++ b/soh/assets/textures/boss_title_cards/object_ganon2.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gGanonTitleCardGERTex[] = dgGanonTitleCardGERTe #define dgGanonTitleCardFRATex "__OTR__textures/object_ganon2/gGanonTitleCardFRATex" static const ALIGN_ASSET(2) char gGanonTitleCardFRATex[] = dgGanonTitleCardFRATex; +#define dgGanonTitleCardJPNTex "__OTR__textures/object_ganon2/gGanonTitleCardJPNTex" +static const ALIGN_ASSET(2) char gGanonTitleCardJPNTex[] = dgGanonTitleCardJPNTex; + #endif // TEXTURES_OBJECT_GANON2_H diff --git a/soh/assets/textures/boss_title_cards/object_goma.h b/soh/assets/textures/boss_title_cards/object_goma.h index 96243178b..81a962691 100644 --- a/soh/assets/textures/boss_title_cards/object_goma.h +++ b/soh/assets/textures/boss_title_cards/object_goma.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gGohmaTitleCardGERTex[] = dgGohmaTitleCardGERTe #define dgGohmaTitleCardFRATex "__OTR__textures/object_goma/gGohmaTitleCardFRATex" static const ALIGN_ASSET(2) char gGohmaTitleCardFRATex[] = dgGohmaTitleCardFRATex; +#define dgGohmaTitleCardJPNTex "__OTR__textures/object_goma/gGohmaTitleCardJPNTex" +static const ALIGN_ASSET(2) char gGohmaTitleCardJPNTex[] = dgGohmaTitleCardJPNTex; + #endif // TEXTURES_OBJECT_GOMA_H diff --git a/soh/assets/textures/boss_title_cards/object_kingdodongo.h b/soh/assets/textures/boss_title_cards/object_kingdodongo.h index d03784a28..cc8ce47aa 100644 --- a/soh/assets/textures/boss_title_cards/object_kingdodongo.h +++ b/soh/assets/textures/boss_title_cards/object_kingdodongo.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gKingDodongoTitleCardGERTex[] = dgKingDodongoTi #define dgKingDodongoTitleCardFRATex "__OTR__textures/object_kingdodongo/gKingDodongoTitleCardFRATex" static const ALIGN_ASSET(2) char gKingDodongoTitleCardFRATex[] = dgKingDodongoTitleCardFRATex; +#define dgKingDodongoTitleCardJPNTex "__OTR__textures/object_kingdodongo/gKingDodongoTitleCardJPNTex" +static const ALIGN_ASSET(2) char gKingDodongoTitleCardJPNTex[] = dgKingDodongoTitleCardJPNTex; + #endif // TEXTURES_OBJECT_KINGDODONGO_H diff --git a/soh/assets/textures/boss_title_cards/object_mo.h b/soh/assets/textures/boss_title_cards/object_mo.h index 1d2d1489a..312b8be85 100644 --- a/soh/assets/textures/boss_title_cards/object_mo.h +++ b/soh/assets/textures/boss_title_cards/object_mo.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gMorphaTitleCardGERTex[] = dgMorphaTitleCardGER #define dgMorphaTitleCardFRATex "__OTR__textures/object_mo/gMorphaTitleCardFRATex" static const ALIGN_ASSET(2) char gMorphaTitleCardFRATex[] = dgMorphaTitleCardFRATex; +#define dgMorphaTitleCardJPNTex "__OTR__textures/object_mo/gMorphaTitleCardJPNTex" +static const ALIGN_ASSET(2) char gMorphaTitleCardJPNTex[] = dgMorphaTitleCardJPNTex; + #endif // TEXTURES_OBJECT_MO_H diff --git a/soh/assets/textures/boss_title_cards/object_sst.h b/soh/assets/textures/boss_title_cards/object_sst.h index f98670567..d9148df6c 100644 --- a/soh/assets/textures/boss_title_cards/object_sst.h +++ b/soh/assets/textures/boss_title_cards/object_sst.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gBongoTitleCardGERTex[] = dgBongoTitleCardGERTe #define dgBongoTitleCardFRATex "__OTR__textures/object_sst/gBongoTitleCardFRATex" static const ALIGN_ASSET(2) char gBongoTitleCardFRATex[] = dgBongoTitleCardFRATex; +#define dgBongoTitleCardJPNTex "__OTR__textures/object_sst/gBongoTitleCardJPNTex" +static const ALIGN_ASSET(2) char gBongoTitleCardJPNTex[] = dgBongoTitleCardJPNTex; + #endif // TEXTURES_OBJECT_SST_H diff --git a/soh/assets/textures/boss_title_cards/object_tw.h b/soh/assets/textures/boss_title_cards/object_tw.h index d3a4b22fc..fa6d4fcaa 100644 --- a/soh/assets/textures/boss_title_cards/object_tw.h +++ b/soh/assets/textures/boss_title_cards/object_tw.h @@ -12,4 +12,7 @@ static const ALIGN_ASSET(2) char gTwinrovaTitleCardGERTex[] = dgTwinrovaTitleCar #define dgTwinrovaTitleCardFRATex "__OTR__textures/object_tw/gTwinrovaTitleCardFRATex" static const ALIGN_ASSET(2) char gTwinrovaTitleCardFRATex[] = dgTwinrovaTitleCardFRATex; +#define dgTwinrovaTitleCardJPNTex "__OTR__textures/object_tw/gTwinrovaTitleCardJPNTex" +static const ALIGN_ASSET(2) char gTwinrovaTitleCardJPNTex[] = dgTwinrovaTitleCardJPNTex; + #endif // TEXTURES_OBJECT_TW_H diff --git a/soh/assets/textures/do_action_static/do_action_static.h b/soh/assets/textures/do_action_static/do_action_static.h index 9b721d711..84553ba66 100644 --- a/soh/assets/textures/do_action_static/do_action_static.h +++ b/soh/assets/textures/do_action_static/do_action_static.h @@ -264,4 +264,92 @@ static const ALIGN_ASSET(2) char gNum7DoActionFRATex[] = dgNum7DoActionFRATex; #define dgNum8DoActionFRATex "__OTR__textures/do_action_static/gNum8DoActionFRATex" static const ALIGN_ASSET(2) char gNum8DoActionFRATex[] = dgNum8DoActionFRATex; +#define dgAttackDoActionJPNTex "__OTR__textures/do_action_static/gAttackDoActionJPNTex" +static const ALIGN_ASSET(2) char gAttackDoActionJPNTex[] = dgAttackDoActionJPNTex; + +#define dgCheckDoActionJPNTex "__OTR__textures/do_action_static/gCheckDoActionJPNTex" +static const ALIGN_ASSET(2) char gCheckDoActionJPNTex[] = dgCheckDoActionJPNTex; + +#define dgEnterDoActionJPNTex "__OTR__textures/do_action_static/gEnterDoActionJPNTex" +static const ALIGN_ASSET(2) char gEnterDoActionJPNTex[] = dgEnterDoActionJPNTex; + +#define dgReturnDoActionJPNTex "__OTR__textures/do_action_static/gReturnDoActionJPNTex" +static const ALIGN_ASSET(2) char gReturnDoActionJPNTex[] = dgReturnDoActionJPNTex; + +#define dgOpenDoActionJPNTex "__OTR__textures/do_action_static/gOpenDoActionJPNTex" +static const ALIGN_ASSET(2) char gOpenDoActionJPNTex[] = dgOpenDoActionJPNTex; + +#define dgJumpDoActionJPNTex "__OTR__textures/do_action_static/gJumpDoActionJPNTex" +static const ALIGN_ASSET(2) char gJumpDoActionJPNTex[] = dgJumpDoActionJPNTex; + +#define dgDecideDoActionJPNTex "__OTR__textures/do_action_static/gDecideDoActionJPNTex" +static const ALIGN_ASSET(2) char gDecideDoActionJPNTex[] = dgDecideDoActionJPNTex; + +#define dgDiveDoActionJPNTex "__OTR__textures/do_action_static/gDiveDoActionJPNTex" +static const ALIGN_ASSET(2) char gDiveDoActionJPNTex[] = dgDiveDoActionJPNTex; + +#define dgFasterDoActionJPNTex "__OTR__textures/do_action_static/gFasterDoActionJPNTex" +static const ALIGN_ASSET(2) char gFasterDoActionJPNTex[] = dgFasterDoActionJPNTex; + +#define dgThrowDoActionJPNTex "__OTR__textures/do_action_static/gThrowDoActionJPNTex" +static const ALIGN_ASSET(2) char gThrowDoActionJPNTex[] = dgThrowDoActionJPNTex; + +#define dgUnusedNaviDoActionJPNTex "__OTR__textures/do_action_static/gUnusedNaviDoActionJPNTex" +static const ALIGN_ASSET(2) char gUnusedNaviDoActionJPNTex[] = dgUnusedNaviDoActionJPNTex; + +#define dgClimbDoActionJPNTex "__OTR__textures/do_action_static/gClimbDoActionJPNTex" +static const ALIGN_ASSET(2) char gClimbDoActionJPNTex[] = dgClimbDoActionJPNTex; + +#define dgDropDoActionJPNTex "__OTR__textures/do_action_static/gDropDoActionJPNTex" +static const ALIGN_ASSET(2) char gDropDoActionJPNTex[] = dgDropDoActionJPNTex; + +#define dgDownDoActionJPNTex "__OTR__textures/do_action_static/gDownDoActionJPNTex" +static const ALIGN_ASSET(2) char gDownDoActionJPNTex[] = dgDownDoActionJPNTex; + +#define dgSaveDoActionJPNTex "__OTR__textures/do_action_static/gSaveDoActionJPNTex" +static const ALIGN_ASSET(2) char gSaveDoActionJPNTex[] = dgSaveDoActionJPNTex; + +#define dgSpeakDoActionJPNTex "__OTR__textures/do_action_static/gSpeakDoActionJPNTex" +static const ALIGN_ASSET(2) char gSpeakDoActionJPNTex[] = dgSpeakDoActionJPNTex; + +#define dgNextDoActionJPNTex "__OTR__textures/do_action_static/gNextDoActionJPNTex" +static const ALIGN_ASSET(2) char gNextDoActionJPNTex[] = dgNextDoActionJPNTex; + +#define dgGrabDoActionJPNTex "__OTR__textures/do_action_static/gGrabDoActionJPNTex" +static const ALIGN_ASSET(2) char gGrabDoActionJPNTex[] = dgGrabDoActionJPNTex; + +#define dgStopDoActionJPNTex "__OTR__textures/do_action_static/gStopDoActionJPNTex" +static const ALIGN_ASSET(2) char gStopDoActionJPNTex[] = dgStopDoActionJPNTex; + +#define dgPutAwayDoActionJPNTex "__OTR__textures/do_action_static/gPutAwayDoActionJPNTex" +static const ALIGN_ASSET(2) char gPutAwayDoActionJPNTex[] = dgPutAwayDoActionJPNTex; + +#define dgReelDoActionJPNTex "__OTR__textures/do_action_static/gReelDoActionJPNTex" +static const ALIGN_ASSET(2) char gReelDoActionJPNTex[] = dgReelDoActionJPNTex; + +#define dgNum1DoActionJPNTex "__OTR__textures/do_action_static/gNum1DoActionJPNTex" +static const ALIGN_ASSET(2) char gNum1DoActionJPNTex[] = dgNum1DoActionJPNTex; + +#define dgNum2DoActionJPNTex "__OTR__textures/do_action_static/gNum2DoActionJPNTex" +static const ALIGN_ASSET(2) char gNum2DoActionJPNTex[] = dgNum2DoActionJPNTex; + +#define dgNum3DoActionJPNTex "__OTR__textures/do_action_static/gNum3DoActionJPNTex" +static const ALIGN_ASSET(2) char gNum3DoActionJPNTex[] = dgNum3DoActionJPNTex; + +#define dgNum4DoActionJPNTex "__OTR__textures/do_action_static/gNum4DoActionJPNTex" +static const ALIGN_ASSET(2) char gNum4DoActionJPNTex[] = dgNum4DoActionJPNTex; + +#define dgNum5DoActionJPNTex "__OTR__textures/do_action_static/gNum5DoActionJPNTex" +static const ALIGN_ASSET(2) char gNum5DoActionJPNTex[] = dgNum5DoActionJPNTex; + +#define dgNum6DoActionJPNTex "__OTR__textures/do_action_static/gNum6DoActionJPNTex" +static const ALIGN_ASSET(2) char gNum6DoActionJPNTex[] = dgNum6DoActionJPNTex; + +#define dgNum7DoActionJPNTex "__OTR__textures/do_action_static/gNum7DoActionJPNTex" +static const ALIGN_ASSET(2) char gNum7DoActionJPNTex[] = dgNum7DoActionJPNTex; + +#define dgNum8DoActionJPNTex "__OTR__textures/do_action_static/gNum8DoActionJPNTex" +static const ALIGN_ASSET(2) char gNum8DoActionJPNTex[] = dgNum8DoActionJPNTex; + + #endif // TEXTURES_DO_ACTION_STATIC_H diff --git a/soh/assets/textures/icon_item_gameover_static/icon_item_gameover_static.h b/soh/assets/textures/icon_item_gameover_static/icon_item_gameover_static.h index 2afcd8987..5f04c8faa 100644 --- a/soh/assets/textures/icon_item_gameover_static/icon_item_gameover_static.h +++ b/soh/assets/textures/icon_item_gameover_static/icon_item_gameover_static.h @@ -24,4 +24,7 @@ static const ALIGN_ASSET(2) char gContinuePlayingGERTex[] = dgContinuePlayingGER #define dgContinuePlayingFRATex "__OTR__textures/icon_item_gameover_static/gContinuePlayingFRATex" static const ALIGN_ASSET(2) char gContinuePlayingFRATex[] = dgContinuePlayingFRATex; +#define dgContinuePlayingJPNTex "__OTR__textures/icon_item_gameover_static/gContinuePlayingJPNTex" +static const ALIGN_ASSET(2) char gContinuePlayingJPNTex[] = dgContinuePlayingJPNTex; + #endif // TEXTURES_ICON_ITEM_GAMEOVER_STATIC_H diff --git a/soh/assets/textures/icon_item_jpn_static/icon_item_jpn_static.h b/soh/assets/textures/icon_item_jpn_static/icon_item_jpn_static.h new file mode 100644 index 000000000..615e7259e --- /dev/null +++ b/soh/assets/textures/icon_item_jpn_static/icon_item_jpn_static.h @@ -0,0 +1,100 @@ +#ifndef TEXTURES_ICON_ITEM_JPN_STATIC_H +#define TEXTURES_ICON_ITEM_JPN_STATIC_H 1 + +#include "align_asset_macro.h" + +#define dgPauseDekuTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseDekuTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseDekuTitleJPNTex[] = dgPauseDekuTitleJPNTex; + +#define dgPauseDodongoTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseDodongoTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseDodongoTitleJPNTex[] = dgPauseDodongoTitleJPNTex; + +#define dgPauseJabuTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseJabuTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseJabuTitleJPNTex[] = dgPauseJabuTitleJPNTex; + +#define dgPauseForestTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseForestTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseForestTitleJPNTex[] = dgPauseForestTitleJPNTex; + +#define dgPauseFireTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseFireTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseFireTitleJPNTex[] = dgPauseFireTitleJPNTex; + +#define dgPauseWaterTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseWaterTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseWaterTitleJPNTex[] = dgPauseWaterTitleJPNTex; + +#define dgPauseSpiritTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseSpiritTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseSpiritTitleJPNTex[] = dgPauseSpiritTitleJPNTex; + +#define dgPauseShadowTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseShadowTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseShadowTitleJPNTex[] = dgPauseShadowTitleJPNTex; + +#define dgPauseBotWTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseBotWTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseBotWTitleJPNTex[] = dgPauseBotWTitleJPNTex; + +#define dgPauseIceCavernTitleJPNTex "__OTR__textures/icon_item_jpn_static/gPauseIceCavernTitleJPNTex" +static const ALIGN_ASSET(2) char gPauseIceCavernTitleJPNTex[] = dgPauseIceCavernTitleJPNTex; + +#define dgPauseToEquipJPNTex "__OTR__textures/icon_item_jpn_static/gPauseToEquipJPNTex" +static const ALIGN_ASSET(2) char gPauseToEquipJPNTex[] = dgPauseToEquipJPNTex; + +#define dgPauseToDecideJPNTex "__OTR__textures/icon_item_jpn_static/gPauseToDecideJPNTex" +static const ALIGN_ASSET(2) char gPauseToDecideJPNTex[] = dgPauseToDecideJPNTex; + +#define dgPauseToPlayMelodyJPNTex "__OTR__textures/icon_item_jpn_static/gPauseToPlayMelodyJPNTex" +static const ALIGN_ASSET(2) char gPauseToPlayMelodyJPNTex[] = dgPauseToPlayMelodyJPNTex; + +#define dgPauseToSelectItemJPNTex "__OTR__textures/icon_item_jpn_static/gPauseToSelectItemJPNTex" +static const ALIGN_ASSET(2) char gPauseToSelectItemJPNTex[] = dgPauseToSelectItemJPNTex; + +#define dgPauseToMapJPNTex "__OTR__textures/icon_item_jpn_static/gPauseToMapJPNTex" +static const ALIGN_ASSET(2) char gPauseToMapJPNTex[] = dgPauseToMapJPNTex; + +#define dgPauseToQuestStatusJPNTex "__OTR__textures/icon_item_jpn_static/gPauseToQuestStatusJPNTex" +static const ALIGN_ASSET(2) char gPauseToQuestStatusJPNTex[] = dgPauseToQuestStatusJPNTex; + +#define dgPauseToEquipmentJPNTex "__OTR__textures/icon_item_jpn_static/gPauseToEquipmentJPNTex" +static const ALIGN_ASSET(2) char gPauseToEquipmentJPNTex[] = dgPauseToEquipmentJPNTex; + +#define dgPauseSavePromptJPNTex "__OTR__textures/icon_item_jpn_static/gPauseSavePromptJPNTex" +static const ALIGN_ASSET(2) char gPauseSavePromptJPNTex[] = dgPauseSavePromptJPNTex; + +#define dgPauseSaveConfirmationJPNTex "__OTR__textures/icon_item_jpn_static/gPauseSaveConfirmationJPNTex" +static const ALIGN_ASSET(2) char gPauseSaveConfirmationJPNTex[] = dgPauseSaveConfirmationJPNTex; + +#define dgPauseYesJPNTex "__OTR__textures/icon_item_jpn_static/gPauseYesJPNTex" +static const ALIGN_ASSET(2) char gPauseYesJPNTex[] = dgPauseYesJPNTex; + +#define dgPauseNoJPNTex "__OTR__textures/icon_item_jpn_static/gPauseNoJPNTex" +static const ALIGN_ASSET(2) char gPauseNoJPNTex[] = dgPauseNoJPNTex; + +#define dgPauseCurrentPositionJPNTex "__OTR__textures/icon_item_jpn_static/gPauseCurrentPositionJPNTex" +static const ALIGN_ASSET(2) char gPauseCurrentPositionJPNTex[] = dgPauseCurrentPositionJPNTex; + +#define dgPauseEquipment10JPNTex "__OTR__textures/icon_item_jpn_static/gPauseEquipment10JPNTex" +static const ALIGN_ASSET(2) char gPauseEquipment10JPNTex[] = dgPauseEquipment10JPNTex; + +#define dgPauseSelectItem00JPNTex "__OTR__textures/icon_item_jpn_static/gPauseSelectItem00JPNTex" +static const ALIGN_ASSET(2) char gPauseSelectItem00JPNTex[] = dgPauseSelectItem00JPNTex; + +#define dgPauseSelectItem10JPNTex "__OTR__textures/icon_item_jpn_static/gPauseSelectItem10JPNTex" +static const ALIGN_ASSET(2) char gPauseSelectItem10JPNTex[] = dgPauseSelectItem10JPNTex; + +#define dgPauseSelectItem20JPNTex "__OTR__textures/icon_item_jpn_static/gPauseSelectItem20JPNTex" +static const ALIGN_ASSET(2) char gPauseSelectItem20JPNTex[] = dgPauseSelectItem20JPNTex; + +#define dgPauseMap10JPNTex "__OTR__textures/icon_item_jpn_static/gPauseMap10JPNTex" +static const ALIGN_ASSET(2) char gPauseMap10JPNTex[] = dgPauseMap10JPNTex; + +#define dgPauseQuestStatus00JPNTex "__OTR__textures/icon_item_jpn_static/gPauseQuestStatus00JPNTex" +static const ALIGN_ASSET(2) char gPauseQuestStatus00JPNTex[] = dgPauseQuestStatus00JPNTex; + +#define dgPauseQuestStatus10JPNTex "__OTR__textures/icon_item_jpn_static/gPauseQuestStatus10JPNTex" +static const ALIGN_ASSET(2) char gPauseQuestStatus10JPNTex[] = dgPauseQuestStatus10JPNTex; + +#define dgPauseQuestStatus20JPNTex "__OTR__textures/icon_item_jpn_static/gPauseQuestStatus20JPNTex" +static const ALIGN_ASSET(2) char gPauseQuestStatus20JPNTex[] = dgPauseQuestStatus20JPNTex; + +#define dgPauseSave10JPNTex "__OTR__textures/icon_item_jpn_static/gPauseSave10JPNTex" +static const ALIGN_ASSET(2) char gPauseSave10JPNTex[] = dgPauseSave10JPNTex; + + +#endif // TEXTURES_ICON_ITEM_JPN_STATIC_H \ No newline at end of file diff --git a/soh/assets/textures/item_name_static/item_name_static.h b/soh/assets/textures/item_name_static/item_name_static.h index 86af0cab0..0f97677a6 100644 --- a/soh/assets/textures/item_name_static/item_name_static.h +++ b/soh/assets/textures/item_name_static/item_name_static.h @@ -1110,4 +1110,340 @@ static const ALIGN_ASSET(2) char gUnusedBossKeyItemName21JPNTex[] = dgUnusedBoss #define dgBiggoronsSwordItemNameFRATex "__OTR__textures/item_name_static/gBiggoronsSwordItemNameFRATex" static const ALIGN_ASSET(2) char gBiggoronsSwordItemNameFRATex[] = dgBiggoronsSwordItemNameFRATex; +#define dgDekuStickItemNameJPNTex "__OTR__textures/item_name_static/gDekuStickItemNameJPNTex" +static const ALIGN_ASSET(2) char gDekuStickItemNameJPNTex[] = dgDekuStickItemNameJPNTex; + +#define dgDekuNutItemNameJPNTex "__OTR__textures/item_name_static/gDekuNutItemNameJPNTex" +static const ALIGN_ASSET(2) char gDekuNutItemNameJPNTex[] = dgDekuNutItemNameJPNTex; + +#define dgBombItemNameJPNTex "__OTR__textures/item_name_static/gBombItemNameJPNTex" +static const ALIGN_ASSET(2) char gBombItemNameJPNTex[] = dgBombItemNameJPNTex; + +#define dgFairyBowItemNameJPNTex "__OTR__textures/item_name_static/gFairyBowItemNameJPNTex" +static const ALIGN_ASSET(2) char gFairyBowItemNameJPNTex[] = dgFairyBowItemNameJPNTex; + +#define dgFireArrowItemNameJPNTex "__OTR__textures/item_name_static/gFireArrowItemNameJPNTex" +static const ALIGN_ASSET(2) char gFireArrowItemNameJPNTex[] = dgFireArrowItemNameJPNTex; + +#define dgDinsFireItemNameJPNTex "__OTR__textures/item_name_static/gDinsFireItemNameJPNTex" +static const ALIGN_ASSET(2) char gDinsFireItemNameJPNTex[] = dgDinsFireItemNameJPNTex; + +#define dgFairySlingshotItemNameJPNTex "__OTR__textures/item_name_static/gFairySlingshotItemNameJPNTex" +static const ALIGN_ASSET(2) char gFairySlingshotItemNameJPNTex[] = dgFairySlingshotItemNameJPNTex; + +#define dgFairyOcarinaItemNameJPNTex "__OTR__textures/item_name_static/gFairyOcarinaItemNameJPNTex" +static const ALIGN_ASSET(2) char gFairyOcarinaItemNameJPNTex[] = dgFairyOcarinaItemNameJPNTex; + +#define dgOcarinaOfTimeItemNameJPNTex "__OTR__textures/item_name_static/gOcarinaOfTimeItemNameJPNTex" +static const ALIGN_ASSET(2) char gOcarinaOfTimeItemNameJPNTex[] = dgOcarinaOfTimeItemNameJPNTex; + +#define dgBombchuItemNameJPNTex "__OTR__textures/item_name_static/gBombchuItemNameJPNTex" +static const ALIGN_ASSET(2) char gBombchuItemNameJPNTex[] = dgBombchuItemNameJPNTex; + +#define dgHookshotItemNameJPNTex "__OTR__textures/item_name_static/gHookshotItemNameJPNTex" +static const ALIGN_ASSET(2) char gHookshotItemNameJPNTex[] = dgHookshotItemNameJPNTex; + +#define dgLongshotItemNameJPNTex "__OTR__textures/item_name_static/gLongshotItemNameJPNTex" +static const ALIGN_ASSET(2) char gLongshotItemNameJPNTex[] = dgLongshotItemNameJPNTex; + +#define dgIceArrowItemNameJPNTex "__OTR__textures/item_name_static/gIceArrowItemNameJPNTex" +static const ALIGN_ASSET(2) char gIceArrowItemNameJPNTex[] = dgIceArrowItemNameJPNTex; + +#define dgFaroresWindItemNameJPNTex "__OTR__textures/item_name_static/gFaroresWindItemNameJPNTex" +static const ALIGN_ASSET(2) char gFaroresWindItemNameJPNTex[] = dgFaroresWindItemNameJPNTex; + +#define dgBoomerangItemNameJPNTex "__OTR__textures/item_name_static/gBoomerangItemNameJPNTex" +static const ALIGN_ASSET(2) char gBoomerangItemNameJPNTex[] = dgBoomerangItemNameJPNTex; + +#define dgLensItemNameJPNTex "__OTR__textures/item_name_static/gLensItemNameJPNTex" +static const ALIGN_ASSET(2) char gLensItemNameJPNTex[] = dgLensItemNameJPNTex; + +#define dgMagicBeansItemNameJPNTex "__OTR__textures/item_name_static/gMagicBeansItemNameJPNTex" +static const ALIGN_ASSET(2) char gMagicBeansItemNameJPNTex[] = dgMagicBeansItemNameJPNTex; + +#define dgMegatonHammerItemNameJPNTex "__OTR__textures/item_name_static/gMegatonHammerItemNameJPNTex" +static const ALIGN_ASSET(2) char gMegatonHammerItemNameJPNTex[] = dgMegatonHammerItemNameJPNTex; + +#define dgLightArrowItemNameJPNTex "__OTR__textures/item_name_static/gLightArrowItemNameJPNTex" +static const ALIGN_ASSET(2) char gLightArrowItemNameJPNTex[] = dgLightArrowItemNameJPNTex; + +#define dgNayrusLoveItemNameJPNTex "__OTR__textures/item_name_static/gNayrusLoveItemNameJPNTex" +static const ALIGN_ASSET(2) char gNayrusLoveItemNameJPNTex[] = dgNayrusLoveItemNameJPNTex; + +#define dgEmptyBottleItemNameJPNTex "__OTR__textures/item_name_static/gEmptyBottleItemNameJPNTex" +static const ALIGN_ASSET(2) char gEmptyBottleItemNameJPNTex[] = dgEmptyBottleItemNameJPNTex; + +#define dgRedPotionItemNameJPNTex "__OTR__textures/item_name_static/gRedPotionItemNameJPNTex" +static const ALIGN_ASSET(2) char gRedPotionItemNameJPNTex[] = dgRedPotionItemNameJPNTex; + +#define dgGreenPotionItemNameJPNTex "__OTR__textures/item_name_static/gGreenPotionItemNameJPNTex" +static const ALIGN_ASSET(2) char gGreenPotionItemNameJPNTex[] = dgGreenPotionItemNameJPNTex; + +#define dgBluePotionItemNameJPNTex "__OTR__textures/item_name_static/gBluePotionItemNameJPNTex" +static const ALIGN_ASSET(2) char gBluePotionItemNameJPNTex[] = dgBluePotionItemNameJPNTex; + +#define dgBottledFairyItemNameJPNTex "__OTR__textures/item_name_static/gBottledFairyItemNameJPNTex" +static const ALIGN_ASSET(2) char gBottledFairyItemNameJPNTex[] = dgBottledFairyItemNameJPNTex; + +#define dgFishItemNameJPNTex "__OTR__textures/item_name_static/gFishItemNameJPNTex" +static const ALIGN_ASSET(2) char gFishItemNameJPNTex[] = dgFishItemNameJPNTex; + +#define dgFullMilkItemNameJPNTex "__OTR__textures/item_name_static/gFullMilkItemNameJPNTex" +static const ALIGN_ASSET(2) char gFullMilkItemNameJPNTex[] = dgFullMilkItemNameJPNTex; + +#define dgRutosLetterItemNameJPNTex "__OTR__textures/item_name_static/gRutosLetterItemNameJPNTex" +static const ALIGN_ASSET(2) char gRutosLetterItemNameJPNTex[] = dgRutosLetterItemNameJPNTex; + +#define dgBlueFireItemNameJPNTex "__OTR__textures/item_name_static/gBlueFireItemNameJPNTex" +static const ALIGN_ASSET(2) char gBlueFireItemNameJPNTex[] = dgBlueFireItemNameJPNTex; + +#define dgBugItemNameJPNTex "__OTR__textures/item_name_static/gBugItemNameJPNTex" +static const ALIGN_ASSET(2) char gBugItemNameJPNTex[] = dgBugItemNameJPNTex; + +#define dgBigPoeItemNameJPNTex "__OTR__textures/item_name_static/gBigPoeItemNameJPNTex" +static const ALIGN_ASSET(2) char gBigPoeItemNameJPNTex[] = dgBigPoeItemNameJPNTex; + +#define dgHalfMilkItemNameJPNTex "__OTR__textures/item_name_static/gHalfMilkItemNameJPNTex" +static const ALIGN_ASSET(2) char gHalfMilkItemNameJPNTex[] = dgHalfMilkItemNameJPNTex; + +#define dgPoeItemNameJPNTex "__OTR__textures/item_name_static/gPoeItemNameJPNTex" +static const ALIGN_ASSET(2) char gPoeItemNameJPNTex[] = dgPoeItemNameJPNTex; + +#define dgWeirdEggItemNameJPNTex "__OTR__textures/item_name_static/gWeirdEggItemNameJPNTex" +static const ALIGN_ASSET(2) char gWeirdEggItemNameJPNTex[] = dgWeirdEggItemNameJPNTex; + +#define dgCuccoItemNameJPNTex "__OTR__textures/item_name_static/gCuccoItemNameJPNTex" +static const ALIGN_ASSET(2) char gCuccoItemNameJPNTex[] = dgCuccoItemNameJPNTex; + +#define dgZeldasLetterItemNameJPNTex "__OTR__textures/item_name_static/gZeldasLetterItemNameJPNTex" +static const ALIGN_ASSET(2) char gZeldasLetterItemNameJPNTex[] = dgZeldasLetterItemNameJPNTex; + +#define dgKeatonMaskItemNameJPNTex "__OTR__textures/item_name_static/gKeatonMaskItemNameJPNTex" +static const ALIGN_ASSET(2) char gKeatonMaskItemNameJPNTex[] = dgKeatonMaskItemNameJPNTex; + +#define dgSkullMaskItemNameJPNTex "__OTR__textures/item_name_static/gSkullMaskItemNameJPNTex" +static const ALIGN_ASSET(2) char gSkullMaskItemNameJPNTex[] = dgSkullMaskItemNameJPNTex; + +#define dgSpookyMaskItemNameJPNTex "__OTR__textures/item_name_static/gSpookyMaskItemNameJPNTex" +static const ALIGN_ASSET(2) char gSpookyMaskItemNameJPNTex[] = dgSpookyMaskItemNameJPNTex; + +#define dgBunnyHoodItemNameJPNTex "__OTR__textures/item_name_static/gBunnyHoodItemNameJPNTex" +static const ALIGN_ASSET(2) char gBunnyHoodItemNameJPNTex[] = dgBunnyHoodItemNameJPNTex; + +#define dgGoronMaskItemNameJPNTex "__OTR__textures/item_name_static/gGoronMaskItemNameJPNTex" +static const ALIGN_ASSET(2) char gGoronMaskItemNameJPNTex[] = dgGoronMaskItemNameJPNTex; + +#define dgZoraMaskItemNameJPNTex "__OTR__textures/item_name_static/gZoraMaskItemNameJPNTex" +static const ALIGN_ASSET(2) char gZoraMaskItemNameJPNTex[] = dgZoraMaskItemNameJPNTex; + +#define dgGerudoMaskItemNameJPNTex "__OTR__textures/item_name_static/gGerudoMaskItemNameJPNTex" +static const ALIGN_ASSET(2) char gGerudoMaskItemNameJPNTex[] = dgGerudoMaskItemNameJPNTex; + +#define dgMaskofTruthItemNameJPNTex "__OTR__textures/item_name_static/gMaskofTruthItemNameJPNTex" +static const ALIGN_ASSET(2) char gMaskofTruthItemNameJPNTex[] = dgMaskofTruthItemNameJPNTex; + +#define dgSOLDOUTItemNameJPNTex "__OTR__textures/item_name_static/gSOLDOUTItemNameJPNTex" +static const ALIGN_ASSET(2) char gSOLDOUTItemNameJPNTex[] = dgSOLDOUTItemNameJPNTex; + +#define dgPocketEggItemNameJPNTex "__OTR__textures/item_name_static/gPocketEggItemNameJPNTex" +static const ALIGN_ASSET(2) char gPocketEggItemNameJPNTex[] = dgPocketEggItemNameJPNTex; + +#define dgPocketCuccoItemNameJPNTex "__OTR__textures/item_name_static/gPocketCuccoItemNameJPNTex" +static const ALIGN_ASSET(2) char gPocketCuccoItemNameJPNTex[] = dgPocketCuccoItemNameJPNTex; + +#define dgCojiroItemNameJPNTex "__OTR__textures/item_name_static/gCojiroItemNameJPNTex" +static const ALIGN_ASSET(2) char gCojiroItemNameJPNTex[] = dgCojiroItemNameJPNTex; + +#define dgOddMushroomItemNameJPNTex "__OTR__textures/item_name_static/gOddMushroomItemNameJPNTex" +static const ALIGN_ASSET(2) char gOddMushroomItemNameJPNTex[] = dgOddMushroomItemNameJPNTex; + +#define dgOddPotionItemNameJPNTex "__OTR__textures/item_name_static/gOddPotionItemNameJPNTex" +static const ALIGN_ASSET(2) char gOddPotionItemNameJPNTex[] = dgOddPotionItemNameJPNTex; + +#define dgPoachersSawItemNameJPNTex "__OTR__textures/item_name_static/gPoachersSawItemNameJPNTex" +static const ALIGN_ASSET(2) char gPoachersSawItemNameJPNTex[] = dgPoachersSawItemNameJPNTex; + +#define dgBrokenGoronsSwordItemNameJPNTex "__OTR__textures/item_name_static/gBrokenGoronsSwordItemNameJPNTex" +static const ALIGN_ASSET(2) char gBrokenGoronsSwordItemNameJPNTex[] = dgBrokenGoronsSwordItemNameJPNTex; + +#define dgPrescriptionItemNameJPNTex "__OTR__textures/item_name_static/gPrescriptionItemNameJPNTex" +static const ALIGN_ASSET(2) char gPrescriptionItemNameJPNTex[] = dgPrescriptionItemNameJPNTex; + +#define dgEyeBallFrogItemNameJPNTex "__OTR__textures/item_name_static/gEyeBallFrogItemNameJPNTex" +static const ALIGN_ASSET(2) char gEyeBallFrogItemNameJPNTex[] = dgEyeBallFrogItemNameJPNTex; + +#define dgEyeDropsItemNameJPNTex "__OTR__textures/item_name_static/gEyeDropsItemNameJPNTex" +static const ALIGN_ASSET(2) char gEyeDropsItemNameJPNTex[] = dgEyeDropsItemNameJPNTex; + +#define dgClaimCheckItemNameJPNTex "__OTR__textures/item_name_static/gClaimCheckItemNameJPNTex" +static const ALIGN_ASSET(2) char gClaimCheckItemNameJPNTex[] = dgClaimCheckItemNameJPNTex; + +#define dgKokiriSwordItemNameJPNTex "__OTR__textures/item_name_static/gKokiriSwordItemNameJPNTex" +static const ALIGN_ASSET(2) char gKokiriSwordItemNameJPNTex[] = dgKokiriSwordItemNameJPNTex; + +#define dgMasterSwordItemNameJPNTex "__OTR__textures/item_name_static/gMasterSwordItemNameJPNTex" +static const ALIGN_ASSET(2) char gMasterSwordItemNameJPNTex[] = dgMasterSwordItemNameJPNTex; + +#define dgGiantsKnifeItemNameJPNTex "__OTR__textures/item_name_static/gGiantsKnifeItemNameJPNTex" +static const ALIGN_ASSET(2) char gGiantsKnifeItemNameJPNTex[] = dgGiantsKnifeItemNameJPNTex; + +#define dgDekuShieldItemNameJPNTex "__OTR__textures/item_name_static/gDekuShieldItemNameJPNTex" +static const ALIGN_ASSET(2) char gDekuShieldItemNameJPNTex[] = dgDekuShieldItemNameJPNTex; + +#define dgHylianShieldItemNameJPNTex "__OTR__textures/item_name_static/gHylianShieldItemNameJPNTex" +static const ALIGN_ASSET(2) char gHylianShieldItemNameJPNTex[] = dgHylianShieldItemNameJPNTex; + +#define dgMirrorShieldItemNameJPNTex "__OTR__textures/item_name_static/gMirrorShieldItemNameJPNTex" +static const ALIGN_ASSET(2) char gMirrorShieldItemNameJPNTex[] = dgMirrorShieldItemNameJPNTex; + +#define dgKokiriTunicItemNameJPNTex "__OTR__textures/item_name_static/gKokiriTunicItemNameJPNTex" +static const ALIGN_ASSET(2) char gKokiriTunicItemNameJPNTex[] = dgKokiriTunicItemNameJPNTex; + +#define dgGoronTunicItemNameJPNTex "__OTR__textures/item_name_static/gGoronTunicItemNameJPNTex" +static const ALIGN_ASSET(2) char gGoronTunicItemNameJPNTex[] = dgGoronTunicItemNameJPNTex; + +#define dgZoraTunicItemNameJPNTex "__OTR__textures/item_name_static/gZoraTunicItemNameJPNTex" +static const ALIGN_ASSET(2) char gZoraTunicItemNameJPNTex[] = dgZoraTunicItemNameJPNTex; + +#define dgKokiriBootsItemNameJPNTex "__OTR__textures/item_name_static/gKokiriBootsItemNameJPNTex" +static const ALIGN_ASSET(2) char gKokiriBootsItemNameJPNTex[] = dgKokiriBootsItemNameJPNTex; + +#define dgIronBootsItemNameJPNTex "__OTR__textures/item_name_static/gIronBootsItemNameJPNTex" +static const ALIGN_ASSET(2) char gIronBootsItemNameJPNTex[] = dgIronBootsItemNameJPNTex; + +#define dgHoverBootsItemNameJPNTex "__OTR__textures/item_name_static/gHoverBootsItemNameJPNTex" +static const ALIGN_ASSET(2) char gHoverBootsItemNameJPNTex[] = dgHoverBootsItemNameJPNTex; + +#define dgBulletBag30ItemNameJPNTex "__OTR__textures/item_name_static/gBulletBag30ItemNameJPNTex" +static const ALIGN_ASSET(2) char gBulletBag30ItemNameJPNTex[] = dgBulletBag30ItemNameJPNTex; + +#define dgBulletBag40ItemNameJPNTex "__OTR__textures/item_name_static/gBulletBag40ItemNameJPNTex" +static const ALIGN_ASSET(2) char gBulletBag40ItemNameJPNTex[] = dgBulletBag40ItemNameJPNTex; + +#define dgBulletBag50ItemNameJPNTex "__OTR__textures/item_name_static/gBulletBag50ItemNameJPNTex" +static const ALIGN_ASSET(2) char gBulletBag50ItemNameJPNTex[] = dgBulletBag50ItemNameJPNTex; + +#define dgQuiver30ItemNameJPNTex "__OTR__textures/item_name_static/gQuiver30ItemNameJPNTex" +static const ALIGN_ASSET(2) char gQuiver30ItemNameJPNTex[] = dgQuiver30ItemNameJPNTex; + +#define dgQuiver40ItemNameJPNTex "__OTR__textures/item_name_static/gQuiver40ItemNameJPNTex" +static const ALIGN_ASSET(2) char gQuiver40ItemNameJPNTex[] = dgQuiver40ItemNameJPNTex; + +#define dgQuiver50ItemNameJPNTex "__OTR__textures/item_name_static/gQuiver50ItemNameJPNTex" +static const ALIGN_ASSET(2) char gQuiver50ItemNameJPNTex[] = dgQuiver50ItemNameJPNTex; + +#define dgBombBag20ItemNameJPNTex "__OTR__textures/item_name_static/gBombBag20ItemNameJPNTex" +static const ALIGN_ASSET(2) char gBombBag20ItemNameJPNTex[] = dgBombBag20ItemNameJPNTex; + +#define dgBombBag30ItemNameJPNTex "__OTR__textures/item_name_static/gBombBag30ItemNameJPNTex" +static const ALIGN_ASSET(2) char gBombBag30ItemNameJPNTex[] = dgBombBag30ItemNameJPNTex; + +#define dgBombBag40ItemNameJPNTex "__OTR__textures/item_name_static/gBombBag40ItemNameJPNTex" +static const ALIGN_ASSET(2) char gBombBag40ItemNameJPNTex[] = dgBombBag40ItemNameJPNTex; + +#define dgGoronsBraceletItemNameJPNTex "__OTR__textures/item_name_static/gGoronsBraceletItemNameJPNTex" +static const ALIGN_ASSET(2) char gGoronsBraceletItemNameJPNTex[] = dgGoronsBraceletItemNameJPNTex; + +#define dgSilverGauntletsItemNameJPNTex "__OTR__textures/item_name_static/gSilverGauntletsItemNameJPNTex" +static const ALIGN_ASSET(2) char gSilverGauntletsItemNameJPNTex[] = dgSilverGauntletsItemNameJPNTex; + +#define dgGoldenGauntletsItemNameJPNTex "__OTR__textures/item_name_static/gGoldenGauntletsItemNameJPNTex" +static const ALIGN_ASSET(2) char gGoldenGauntletsItemNameJPNTex[] = dgGoldenGauntletsItemNameJPNTex; + +#define dgSilverScaleItemNameJPNTex "__OTR__textures/item_name_static/gSilverScaleItemNameJPNTex" +static const ALIGN_ASSET(2) char gSilverScaleItemNameJPNTex[] = dgSilverScaleItemNameJPNTex; + +#define dgGoldenScaleItemNameJPNTex "__OTR__textures/item_name_static/gGoldenScaleItemNameJPNTex" +static const ALIGN_ASSET(2) char gGoldenScaleItemNameJPNTex[] = dgGoldenScaleItemNameJPNTex; + +#define dgBrokenGiantsKnifeItemNameJPNTex "__OTR__textures/item_name_static/gBrokenGiantsKnifeItemNameJPNTex" +static const ALIGN_ASSET(2) char gBrokenGiantsKnifeItemNameJPNTex[] = dgBrokenGiantsKnifeItemNameJPNTex; + +#define dgMinuetOfForestItemNameJPNTex "__OTR__textures/item_name_static/gMinuetOfForestItemNameJPNTex" +static const ALIGN_ASSET(2) char gMinuetOfForestItemNameJPNTex[] = dgMinuetOfForestItemNameJPNTex; + +#define dgBoleroOfFireItemNameJPNTex "__OTR__textures/item_name_static/gBoleroOfFireItemNameJPNTex" +static const ALIGN_ASSET(2) char gBoleroOfFireItemNameJPNTex[] = dgBoleroOfFireItemNameJPNTex; + +#define dgSerenadeOfWaterItemNameJPNTex "__OTR__textures/item_name_static/gSerenadeOfWaterItemNameJPNTex" +static const ALIGN_ASSET(2) char gSerenadeOfWaterItemNameJPNTex[] = dgSerenadeOfWaterItemNameJPNTex; + +#define dgRequiemOfSpiritItemNameJPNTex "__OTR__textures/item_name_static/gRequiemOfSpiritItemNameJPNTex" +static const ALIGN_ASSET(2) char gRequiemOfSpiritItemNameJPNTex[] = dgRequiemOfSpiritItemNameJPNTex; + +#define dgNocturneOfShadowItemNameJPNTex "__OTR__textures/item_name_static/gNocturneOfShadowItemNameJPNTex" +static const ALIGN_ASSET(2) char gNocturneOfShadowItemNameJPNTex[] = dgNocturneOfShadowItemNameJPNTex; + +#define dgPreludeOfLightItemNameJPNTex "__OTR__textures/item_name_static/gPreludeOfLightItemNameJPNTex" +static const ALIGN_ASSET(2) char gPreludeOfLightItemNameJPNTex[] = dgPreludeOfLightItemNameJPNTex; + +#define dgZeldasLullabyItemNameJPNTex "__OTR__textures/item_name_static/gZeldasLullabyItemNameJPNTex" +static const ALIGN_ASSET(2) char gZeldasLullabyItemNameJPNTex[] = dgZeldasLullabyItemNameJPNTex; + +#define dgEponasSongItemNameJPNTex "__OTR__textures/item_name_static/gEponasSongItemNameJPNTex" +static const ALIGN_ASSET(2) char gEponasSongItemNameJPNTex[] = dgEponasSongItemNameJPNTex; + +#define dgSariasSongItemNameJPNTex "__OTR__textures/item_name_static/gSariasSongItemNameJPNTex" +static const ALIGN_ASSET(2) char gSariasSongItemNameJPNTex[] = dgSariasSongItemNameJPNTex; + +#define dgSunsSongItemNameJPNTex "__OTR__textures/item_name_static/gSunsSongItemNameJPNTex" +static const ALIGN_ASSET(2) char gSunsSongItemNameJPNTex[] = dgSunsSongItemNameJPNTex; + +#define dgSongOfTimeItemNameJPNTex "__OTR__textures/item_name_static/gSongOfTimeItemNameJPNTex" +static const ALIGN_ASSET(2) char gSongOfTimeItemNameJPNTex[] = dgSongOfTimeItemNameJPNTex; + +#define dgSongOfStormsItemNameJPNTex "__OTR__textures/item_name_static/gSongOfStormsItemNameJPNTex" +static const ALIGN_ASSET(2) char gSongOfStormsItemNameJPNTex[] = dgSongOfStormsItemNameJPNTex; + +#define dgForestMedallionItemNameJPNTex "__OTR__textures/item_name_static/gForestMedallionItemNameJPNTex" +static const ALIGN_ASSET(2) char gForestMedallionItemNameJPNTex[] = dgForestMedallionItemNameJPNTex; + +#define dgFireMedallionItemNameJPNTex "__OTR__textures/item_name_static/gFireMedallionItemNameJPNTex" +static const ALIGN_ASSET(2) char gFireMedallionItemNameJPNTex[] = dgFireMedallionItemNameJPNTex; + +#define dgWaterMedallionItemNameJPNTex "__OTR__textures/item_name_static/gWaterMedallionItemNameJPNTex" +static const ALIGN_ASSET(2) char gWaterMedallionItemNameJPNTex[] = dgWaterMedallionItemNameJPNTex; + +#define dgSpiritMedallionItemNameJPNTex "__OTR__textures/item_name_static/gSpiritMedallionItemNameJPNTex" +static const ALIGN_ASSET(2) char gSpiritMedallionItemNameJPNTex[] = dgSpiritMedallionItemNameJPNTex; + +#define dgShadowMedallionItemNameJPNTex "__OTR__textures/item_name_static/gShadowMedallionItemNameJPNTex" +static const ALIGN_ASSET(2) char gShadowMedallionItemNameJPNTex[] = dgShadowMedallionItemNameJPNTex; + +#define dgLightMedallionItemNameJPNTex "__OTR__textures/item_name_static/gLightMedallionItemNameJPNTex" +static const ALIGN_ASSET(2) char gLightMedallionItemNameJPNTex[] = dgLightMedallionItemNameJPNTex; + +#define dgKokiriEmeraldItemNameJPNTex "__OTR__textures/item_name_static/gKokiriEmeraldItemNameJPNTex" +static const ALIGN_ASSET(2) char gKokiriEmeraldItemNameJPNTex[] = dgKokiriEmeraldItemNameJPNTex; + +#define dgGoronsRubyItemNameJPNTex "__OTR__textures/item_name_static/gGoronsRubyItemNameJPNTex" +static const ALIGN_ASSET(2) char gGoronsRubyItemNameJPNTex[] = dgGoronsRubyItemNameJPNTex; + +#define dgZorasSapphireItemNameJPNTex "__OTR__textures/item_name_static/gZorasSapphireItemNameJPNTex" +static const ALIGN_ASSET(2) char gZorasSapphireItemNameJPNTex[] = dgZorasSapphireItemNameJPNTex; + +#define dgStoneofAgonyItemNameJPNTex "__OTR__textures/item_name_static/gStoneofAgonyItemNameJPNTex" +static const ALIGN_ASSET(2) char gStoneofAgonyItemNameJPNTex[] = dgStoneofAgonyItemNameJPNTex; + +#define dgGerudosCardItemNameJPNTex "__OTR__textures/item_name_static/gGerudosCardItemNameJPNTex" +static const ALIGN_ASSET(2) char gGerudosCardItemNameJPNTex[] = dgGerudosCardItemNameJPNTex; + +#define dgGoldSkulltulaItemNameJPNTex "__OTR__textures/item_name_static/gGoldSkulltulaItemNameJPNTex" +static const ALIGN_ASSET(2) char gGoldSkulltulaItemNameJPNTex[] = dgGoldSkulltulaItemNameJPNTex; + +#define dgPieceOfHeartItemNameJPNTex "__OTR__textures/item_name_static/gPieceOfHeartItemNameJPNTex" +static const ALIGN_ASSET(2) char gPieceOfHeartItemNameJPNTex[] = dgPieceOfHeartItemNameJPNTex; + +#define dgUnusedBigKeyItemNameJPNTex "__OTR__textures/item_name_static/gUnusedBigKeyItemNameJPNTex" +static const ALIGN_ASSET(2) char gUnusedBigKeyItemNameJPNTex[] = dgUnusedBigKeyItemNameJPNTex; + +#define dgCompassItemNameJPNTex "__OTR__textures/item_name_static/gCompassItemNameJPNTex" +static const ALIGN_ASSET(2) char gCompassItemNameJPNTex[] = dgCompassItemNameJPNTex; + +#define dgDungeonMapItemNameJPNTex "__OTR__textures/item_name_static/gDungeonMapItemNameJPNTex" +static const ALIGN_ASSET(2) char gDungeonMapItemNameJPNTex[] = dgDungeonMapItemNameJPNTex; + +#define dgBiggoronsSwordItemNameJPNTex "__OTR__textures/item_name_static/gBiggoronsSwordItemNameJPNTex" +static const ALIGN_ASSET(2) char gBiggoronsSwordItemNameJPNTex[] = dgBiggoronsSwordItemNameJPNTex; + #endif // TEXTURES_ITEM_NAME_STATIC_H diff --git a/soh/assets/textures/kanji/kanji.h b/soh/assets/textures/kanji/kanji.h new file mode 100644 index 000000000..4f961601e --- /dev/null +++ b/soh/assets/textures/kanji/kanji.h @@ -0,0 +1,11927 @@ +#ifndef INTERFACE_KANJI_H +#define INTERFACE_KANJI_H 1 + +#include "align_asset_macro.h" + +#define dgMsgKanji8140SpaceTex "__OTR__textures/kanji/gMsgKanji8140SpaceTex" +static const ALIGN_ASSET(2) char gMsgKanji8140SpaceTex[] = dgMsgKanji8140SpaceTex; + +#define dgMsgKanji8141ToutenTex "__OTR__textures/kanji/gMsgKanji8141ToutenTex" +static const ALIGN_ASSET(2) char gMsgKanji8141ToutenTex[] = dgMsgKanji8141ToutenTex; + +#define dgMsgKanji8142KutenTex "__OTR__textures/kanji/gMsgKanji8142KutenTex" +static const ALIGN_ASSET(2) char gMsgKanji8142KutenTex[] = dgMsgKanji8142KutenTex; + +#define dgMsgKanji8143CommaTex "__OTR__textures/kanji/gMsgKanji8143CommaTex" +static const ALIGN_ASSET(2) char gMsgKanji8143CommaTex[] = dgMsgKanji8143CommaTex; + +#define dgMsgKanji8144PeriodTex "__OTR__textures/kanji/gMsgKanji8144PeriodTex" +static const ALIGN_ASSET(2) char gMsgKanji8144PeriodTex[] = dgMsgKanji8144PeriodTex; + +#define dgMsgKanji8145NakatenTex "__OTR__textures/kanji/gMsgKanji8145NakatenTex" +static const ALIGN_ASSET(2) char gMsgKanji8145NakatenTex[] = dgMsgKanji8145NakatenTex; + +#define dgMsgKanji8146ColonTex "__OTR__textures/kanji/gMsgKanji8146ColonTex" +static const ALIGN_ASSET(2) char gMsgKanji8146ColonTex[] = dgMsgKanji8146ColonTex; + +#define dgMsgKanji8147SemicolonTex "__OTR__textures/kanji/gMsgKanji8147SemicolonTex" +static const ALIGN_ASSET(2) char gMsgKanji8147SemicolonTex[] = dgMsgKanji8147SemicolonTex; + +#define dgMsgKanji8148QuestionMarkTex "__OTR__textures/kanji/gMsgKanji8148QuestionMarkTex" +static const ALIGN_ASSET(2) char gMsgKanji8148QuestionMarkTex[] = dgMsgKanji8148QuestionMarkTex; + +#define dgMsgKanji8149ExclamationMarkTex "__OTR__textures/kanji/gMsgKanji8149ExclamationMarkTex" +static const ALIGN_ASSET(2) char gMsgKanji8149ExclamationMarkTex[] = dgMsgKanji8149ExclamationMarkTex; + +#define dgMsgKanji814ADakutenTex "__OTR__textures/kanji/gMsgKanji814ADakutenTex" +static const ALIGN_ASSET(2) char gMsgKanji814ADakutenTex[] = dgMsgKanji814ADakutenTex; + +#define dgMsgKanji814BHandakutenTex "__OTR__textures/kanji/gMsgKanji814BHandakutenTex" +static const ALIGN_ASSET(2) char gMsgKanji814BHandakutenTex[] = dgMsgKanji814BHandakutenTex; + +#define dgMsgKanji814CAcuteAccentTex "__OTR__textures/kanji/gMsgKanji814CAcuteAccentTex" +static const ALIGN_ASSET(2) char gMsgKanji814CAcuteAccentTex[] = dgMsgKanji814CAcuteAccentTex; + +#define dgMsgKanji814DGraveAccentTex "__OTR__textures/kanji/gMsgKanji814DGraveAccentTex" +static const ALIGN_ASSET(2) char gMsgKanji814DGraveAccentTex[] = dgMsgKanji814DGraveAccentTex; + +#define dgMsgKanji814EDiaeresisTex "__OTR__textures/kanji/gMsgKanji814EDiaeresisTex" +static const ALIGN_ASSET(2) char gMsgKanji814EDiaeresisTex[] = dgMsgKanji814EDiaeresisTex; + +#define dgMsgKanji814FCircumflexAccentTex "__OTR__textures/kanji/gMsgKanji814FCircumflexAccentTex" +static const ALIGN_ASSET(2) char gMsgKanji814FCircumflexAccentTex[] = dgMsgKanji814FCircumflexAccentTex; + +#define dgMsgKanji8150EmptyTex "__OTR__textures/kanji/gMsgKanji8150EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8150EmptyTex[] = dgMsgKanji8150EmptyTex; + +#define dgMsgKanji8151EmptyTex "__OTR__textures/kanji/gMsgKanji8151EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8151EmptyTex[] = dgMsgKanji8151EmptyTex; + +#define dgMsgKanji8152IchinojitenKatakanaTex "__OTR__textures/kanji/gMsgKanji8152IchinojitenKatakanaTex" +static const ALIGN_ASSET(2) char gMsgKanji8152IchinojitenKatakanaTex[] = dgMsgKanji8152IchinojitenKatakanaTex; + +#define dgMsgKanji8153IchinojitenKatakanaDakutenTex "__OTR__textures/kanji/gMsgKanji8153IchinojitenKatakanaDakutenTex" +static const ALIGN_ASSET(2) char gMsgKanji8153IchinojitenKatakanaDakutenTex[] = dgMsgKanji8153IchinojitenKatakanaDakutenTex; + +#define dgMsgKanji8154IchinojitenHiraganaTex "__OTR__textures/kanji/gMsgKanji8154IchinojitenHiraganaTex" +static const ALIGN_ASSET(2) char gMsgKanji8154IchinojitenHiraganaTex[] = dgMsgKanji8154IchinojitenHiraganaTex; + +#define dgMsgKanji8155IchinojitenHiraganaDakutenTex "__OTR__textures/kanji/gMsgKanji8155IchinojitenHiraganaDakutenTex" +static const ALIGN_ASSET(2) char gMsgKanji8155IchinojitenHiraganaDakutenTex[] = dgMsgKanji8155IchinojitenHiraganaDakutenTex; + +#define dgMsgKanji8156NonojitenTex "__OTR__textures/kanji/gMsgKanji8156NonojitenTex" +static const ALIGN_ASSET(2) char gMsgKanji8156NonojitenTex[] = dgMsgKanji8156NonojitenTex; + +#define dgMsgKanji8157Tex "__OTR__textures/kanji/gMsgKanji8157Tex" +static const ALIGN_ASSET(2) char gMsgKanji8157Tex[] = dgMsgKanji8157Tex; + +#define dgMsgKanji8158DounojitenTex "__OTR__textures/kanji/gMsgKanji8158DounojitenTex" +static const ALIGN_ASSET(2) char gMsgKanji8158DounojitenTex[] = dgMsgKanji8158DounojitenTex; + +#define dgMsgKanji8159ShimeTex "__OTR__textures/kanji/gMsgKanji8159ShimeTex" +static const ALIGN_ASSET(2) char gMsgKanji8159ShimeTex[] = dgMsgKanji8159ShimeTex; + +#define dgMsgKanji815AZeroTex "__OTR__textures/kanji/gMsgKanji815AZeroTex" +static const ALIGN_ASSET(2) char gMsgKanji815AZeroTex[] = dgMsgKanji815AZeroTex; + +#define dgMsgKanji815BChouonpuTex "__OTR__textures/kanji/gMsgKanji815BChouonpuTex" +static const ALIGN_ASSET(2) char gMsgKanji815BChouonpuTex[] = dgMsgKanji815BChouonpuTex; + +#define dgMsgKanji815CDashTex "__OTR__textures/kanji/gMsgKanji815CDashTex" +static const ALIGN_ASSET(2) char gMsgKanji815CDashTex[] = dgMsgKanji815CDashTex; + +#define dgMsgKanji815DHyphenTex "__OTR__textures/kanji/gMsgKanji815DHyphenTex" +static const ALIGN_ASSET(2) char gMsgKanji815DHyphenTex[] = dgMsgKanji815DHyphenTex; + +#define dgMsgKanji815ESlashTex "__OTR__textures/kanji/gMsgKanji815ESlashTex" +static const ALIGN_ASSET(2) char gMsgKanji815ESlashTex[] = dgMsgKanji815ESlashTex; + +#define dgMsgKanji815FBackSlashTex "__OTR__textures/kanji/gMsgKanji815FBackSlashTex" +static const ALIGN_ASSET(2) char gMsgKanji815FBackSlashTex[] = dgMsgKanji815FBackSlashTex; + +#define dgMsgKanji8160WaveDashTex "__OTR__textures/kanji/gMsgKanji8160WaveDashTex" +static const ALIGN_ASSET(2) char gMsgKanji8160WaveDashTex[] = dgMsgKanji8160WaveDashTex; + +#define dgMsgKanji8161DoubleVerticalLineTex "__OTR__textures/kanji/gMsgKanji8161DoubleVerticalLineTex" +static const ALIGN_ASSET(2) char gMsgKanji8161DoubleVerticalLineTex[] = dgMsgKanji8161DoubleVerticalLineTex; + +#define dgMsgKanji8162VerticalLineTex "__OTR__textures/kanji/gMsgKanji8162VerticalLineTex" +static const ALIGN_ASSET(2) char gMsgKanji8162VerticalLineTex[] = dgMsgKanji8162VerticalLineTex; + +#define dgMsgKanji8163SantenLeaderTex "__OTR__textures/kanji/gMsgKanji8163SantenLeaderTex" +static const ALIGN_ASSET(2) char gMsgKanji8163SantenLeaderTex[] = dgMsgKanji8163SantenLeaderTex; + +#define dgMsgKanji8164NitenLeaderTex "__OTR__textures/kanji/gMsgKanji8164NitenLeaderTex" +static const ALIGN_ASSET(2) char gMsgKanji8164NitenLeaderTex[] = dgMsgKanji8164NitenLeaderTex; + +#define dgMsgKanji8165SingleQuotationMarkLeftTex "__OTR__textures/kanji/gMsgKanji8165SingleQuotationMarkLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8165SingleQuotationMarkLeftTex[] = dgMsgKanji8165SingleQuotationMarkLeftTex; + +#define dgMsgKanji8166SingleQuotationMarkRightTex "__OTR__textures/kanji/gMsgKanji8166SingleQuotationMarkRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8166SingleQuotationMarkRightTex[] = dgMsgKanji8166SingleQuotationMarkRightTex; + +#define dgMsgKanji8167DoubleQuotationMarkLeftTex "__OTR__textures/kanji/gMsgKanji8167DoubleQuotationMarkLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8167DoubleQuotationMarkLeftTex[] = dgMsgKanji8167DoubleQuotationMarkLeftTex; + +#define dgMsgKanji8168DoubleQuotationMarkRightTex "__OTR__textures/kanji/gMsgKanji8168DoubleQuotationMarkRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8168DoubleQuotationMarkRightTex[] = dgMsgKanji8168DoubleQuotationMarkRightTex; + +#define dgMsgKanji8169ParenthesesLeftTex "__OTR__textures/kanji/gMsgKanji8169ParenthesesLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8169ParenthesesLeftTex[] = dgMsgKanji8169ParenthesesLeftTex; + +#define dgMsgKanji816AParenthesesRightTex "__OTR__textures/kanji/gMsgKanji816AParenthesesRightTex" +static const ALIGN_ASSET(2) char gMsgKanji816AParenthesesRightTex[] = dgMsgKanji816AParenthesesRightTex; + +#define dgMsgKanji816BKikkoukakkoLeftTex "__OTR__textures/kanji/gMsgKanji816BKikkoukakkoLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji816BKikkoukakkoLeftTex[] = dgMsgKanji816BKikkoukakkoLeftTex; + +#define dgMsgKanji816CKikkoukakkoRightTex "__OTR__textures/kanji/gMsgKanji816CKikkoukakkoRightTex" +static const ALIGN_ASSET(2) char gMsgKanji816CKikkoukakkoRightTex[] = dgMsgKanji816CKikkoukakkoRightTex; + +#define dgMsgKanji816DSquareBracketLeftTex "__OTR__textures/kanji/gMsgKanji816DSquareBracketLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji816DSquareBracketLeftTex[] = dgMsgKanji816DSquareBracketLeftTex; + +#define dgMsgKanji816ESquareBracketRightTex "__OTR__textures/kanji/gMsgKanji816ESquareBracketRightTex" +static const ALIGN_ASSET(2) char gMsgKanji816ESquareBracketRightTex[] = dgMsgKanji816ESquareBracketRightTex; + +#define dgMsgKanji816FCurlyBracketLeftTex "__OTR__textures/kanji/gMsgKanji816FCurlyBracketLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji816FCurlyBracketLeftTex[] = dgMsgKanji816FCurlyBracketLeftTex; + +#define dgMsgKanji8170CurlyBracketRightTex "__OTR__textures/kanji/gMsgKanji8170CurlyBracketRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8170CurlyBracketRightTex[] = dgMsgKanji8170CurlyBracketRightTex; + +#define dgMsgKanji8171YamakakkoLeftTex "__OTR__textures/kanji/gMsgKanji8171YamakakkoLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8171YamakakkoLeftTex[] = dgMsgKanji8171YamakakkoLeftTex; + +#define dgMsgKanji8172YamakakkoRightTex "__OTR__textures/kanji/gMsgKanji8172YamakakkoRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8172YamakakkoRightTex[] = dgMsgKanji8172YamakakkoRightTex; + +#define dgMsgKanji8173NijyuuyamakakkoLeftTex "__OTR__textures/kanji/gMsgKanji8173NijyuuyamakakkoLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8173NijyuuyamakakkoLeftTex[] = dgMsgKanji8173NijyuuyamakakkoLeftTex; + +#define dgMsgKanji8174NijyuuyamakakkoRightTex "__OTR__textures/kanji/gMsgKanji8174NijyuuyamakakkoRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8174NijyuuyamakakkoRightTex[] = dgMsgKanji8174NijyuuyamakakkoRightTex; + +#define dgMsgKanji8175KagikakkoLeftTex "__OTR__textures/kanji/gMsgKanji8175KagikakkoLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8175KagikakkoLeftTex[] = dgMsgKanji8175KagikakkoLeftTex; + +#define dgMsgKanji8176KagikakkoRightTex "__OTR__textures/kanji/gMsgKanji8176KagikakkoRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8176KagikakkoRightTex[] = dgMsgKanji8176KagikakkoRightTex; + +#define dgMsgKanji8177NijyuukagikakkoLeftTex "__OTR__textures/kanji/gMsgKanji8177NijyuukagikakkoLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8177NijyuukagikakkoLeftTex[] = dgMsgKanji8177NijyuukagikakkoLeftTex; + +#define dgMsgKanji8178NijyuukagikakkoRightTex "__OTR__textures/kanji/gMsgKanji8178NijyuukagikakkoRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8178NijyuukagikakkoRightTex[] = dgMsgKanji8178NijyuukagikakkoRightTex; + +#define dgMsgKanji8179SumitsukikakkoLeftTex "__OTR__textures/kanji/gMsgKanji8179SumitsukikakkoLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8179SumitsukikakkoLeftTex[] = dgMsgKanji8179SumitsukikakkoLeftTex; + +#define dgMsgKanji817ASumitsukikakkoRightTex "__OTR__textures/kanji/gMsgKanji817ASumitsukikakkoRightTex" +static const ALIGN_ASSET(2) char gMsgKanji817ASumitsukikakkoRightTex[] = dgMsgKanji817ASumitsukikakkoRightTex; + +#define dgMsgKanji817BPlusSignTex "__OTR__textures/kanji/gMsgKanji817BPlusSignTex" +static const ALIGN_ASSET(2) char gMsgKanji817BPlusSignTex[] = dgMsgKanji817BPlusSignTex; + +#define dgMsgKanji817CMinusSignTex "__OTR__textures/kanji/gMsgKanji817CMinusSignTex" +static const ALIGN_ASSET(2) char gMsgKanji817CMinusSignTex[] = dgMsgKanji817CMinusSignTex; + +#define dgMsgKanji817DPlusMinusSignTex "__OTR__textures/kanji/gMsgKanji817DPlusMinusSignTex" +static const ALIGN_ASSET(2) char gMsgKanji817DPlusMinusSignTex[] = dgMsgKanji817DPlusMinusSignTex; + +#define dgMsgKanji817EMultiplicationSignTex "__OTR__textures/kanji/gMsgKanji817EMultiplicationSignTex" +static const ALIGN_ASSET(2) char gMsgKanji817EMultiplicationSignTex[] = dgMsgKanji817EMultiplicationSignTex; + +#define dgMsgKanji8180DivisionSignTex "__OTR__textures/kanji/gMsgKanji8180DivisionSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8180DivisionSignTex[] = dgMsgKanji8180DivisionSignTex; + +#define dgMsgKanji8181EqualsSignTex "__OTR__textures/kanji/gMsgKanji8181EqualsSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8181EqualsSignTex[] = dgMsgKanji8181EqualsSignTex; + +#define dgMsgKanji8182NotEqualSignTex "__OTR__textures/kanji/gMsgKanji8182NotEqualSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8182NotEqualSignTex[] = dgMsgKanji8182NotEqualSignTex; + +#define dgMsgKanji8183LessThanSignTex "__OTR__textures/kanji/gMsgKanji8183LessThanSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8183LessThanSignTex[] = dgMsgKanji8183LessThanSignTex; + +#define dgMsgKanji8184GreaterThanSignTex "__OTR__textures/kanji/gMsgKanji8184GreaterThanSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8184GreaterThanSignTex[] = dgMsgKanji8184GreaterThanSignTex; + +#define dgMsgKanji8185LessThanOrEqualToTex "__OTR__textures/kanji/gMsgKanji8185LessThanOrEqualToTex" +static const ALIGN_ASSET(2) char gMsgKanji8185LessThanOrEqualToTex[] = dgMsgKanji8185LessThanOrEqualToTex; + +#define dgMsgKanji8186GreaterThanOrEqualToTex "__OTR__textures/kanji/gMsgKanji8186GreaterThanOrEqualToTex" +static const ALIGN_ASSET(2) char gMsgKanji8186GreaterThanOrEqualToTex[] = dgMsgKanji8186GreaterThanOrEqualToTex; + +#define dgMsgKanji8187InfinityTex "__OTR__textures/kanji/gMsgKanji8187InfinityTex" +static const ALIGN_ASSET(2) char gMsgKanji8187InfinityTex[] = dgMsgKanji8187InfinityTex; + +#define dgMsgKanji8188ThereforeTex "__OTR__textures/kanji/gMsgKanji8188ThereforeTex" +static const ALIGN_ASSET(2) char gMsgKanji8188ThereforeTex[] = dgMsgKanji8188ThereforeTex; + +#define dgMsgKanji8189MaleTex "__OTR__textures/kanji/gMsgKanji8189MaleTex" +static const ALIGN_ASSET(2) char gMsgKanji8189MaleTex[] = dgMsgKanji8189MaleTex; + +#define dgMsgKanji818AFemaleTex "__OTR__textures/kanji/gMsgKanji818AFemaleTex" +static const ALIGN_ASSET(2) char gMsgKanji818AFemaleTex[] = dgMsgKanji818AFemaleTex; + +#define dgMsgKanji818BDegreeSignTex "__OTR__textures/kanji/gMsgKanji818BDegreeSignTex" +static const ALIGN_ASSET(2) char gMsgKanji818BDegreeSignTex[] = dgMsgKanji818BDegreeSignTex; + +#define dgMsgKanji818CPrimeTex "__OTR__textures/kanji/gMsgKanji818CPrimeTex" +static const ALIGN_ASSET(2) char gMsgKanji818CPrimeTex[] = dgMsgKanji818CPrimeTex; + +#define dgMsgKanji818DDoublePrimeTex "__OTR__textures/kanji/gMsgKanji818DDoublePrimeTex" +static const ALIGN_ASSET(2) char gMsgKanji818DDoublePrimeTex[] = dgMsgKanji818DDoublePrimeTex; + +#define dgMsgKanji818ECelciusTex "__OTR__textures/kanji/gMsgKanji818ECelciusTex" +static const ALIGN_ASSET(2) char gMsgKanji818ECelciusTex[] = dgMsgKanji818ECelciusTex; + +#define dgMsgKanji818FYenSignTex "__OTR__textures/kanji/gMsgKanji818FYenSignTex" +static const ALIGN_ASSET(2) char gMsgKanji818FYenSignTex[] = dgMsgKanji818FYenSignTex; + +#define dgMsgKanji8190DollarSignTex "__OTR__textures/kanji/gMsgKanji8190DollarSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8190DollarSignTex[] = dgMsgKanji8190DollarSignTex; + +#define dgMsgKanji8191CentSignTex "__OTR__textures/kanji/gMsgKanji8191CentSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8191CentSignTex[] = dgMsgKanji8191CentSignTex; + +#define dgMsgKanji8192PoundSignTex "__OTR__textures/kanji/gMsgKanji8192PoundSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8192PoundSignTex[] = dgMsgKanji8192PoundSignTex; + +#define dgMsgKanji8193PercentSignTex "__OTR__textures/kanji/gMsgKanji8193PercentSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8193PercentSignTex[] = dgMsgKanji8193PercentSignTex; + +#define dgMsgKanji8194NumberSignTex "__OTR__textures/kanji/gMsgKanji8194NumberSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8194NumberSignTex[] = dgMsgKanji8194NumberSignTex; + +#define dgMsgKanji8195AmpersandTex "__OTR__textures/kanji/gMsgKanji8195AmpersandTex" +static const ALIGN_ASSET(2) char gMsgKanji8195AmpersandTex[] = dgMsgKanji8195AmpersandTex; + +#define dgMsgKanji8196AsteriskTex "__OTR__textures/kanji/gMsgKanji8196AsteriskTex" +static const ALIGN_ASSET(2) char gMsgKanji8196AsteriskTex[] = dgMsgKanji8196AsteriskTex; + +#define dgMsgKanji8197AtSignTex "__OTR__textures/kanji/gMsgKanji8197AtSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8197AtSignTex[] = dgMsgKanji8197AtSignTex; + +#define dgMsgKanji8198SectionSignTex "__OTR__textures/kanji/gMsgKanji8198SectionSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8198SectionSignTex[] = dgMsgKanji8198SectionSignTex; + +#define dgMsgKanji8199WhiteStarTex "__OTR__textures/kanji/gMsgKanji8199WhiteStarTex" +static const ALIGN_ASSET(2) char gMsgKanji8199WhiteStarTex[] = dgMsgKanji8199WhiteStarTex; + +#define dgMsgKanji819ABlackStarTex "__OTR__textures/kanji/gMsgKanji819ABlackStarTex" +static const ALIGN_ASSET(2) char gMsgKanji819ABlackStarTex[] = dgMsgKanji819ABlackStarTex; + +#define dgMsgKanji819BWhiteCircleTex "__OTR__textures/kanji/gMsgKanji819BWhiteCircleTex" +static const ALIGN_ASSET(2) char gMsgKanji819BWhiteCircleTex[] = dgMsgKanji819BWhiteCircleTex; + +#define dgMsgKanji819CBlackCircleTex "__OTR__textures/kanji/gMsgKanji819CBlackCircleTex" +static const ALIGN_ASSET(2) char gMsgKanji819CBlackCircleTex[] = dgMsgKanji819CBlackCircleTex; + +#define dgMsgKanji819DDoubleCircleTex "__OTR__textures/kanji/gMsgKanji819DDoubleCircleTex" +static const ALIGN_ASSET(2) char gMsgKanji819DDoubleCircleTex[] = dgMsgKanji819DDoubleCircleTex; + +#define dgMsgKanji819EWhiteDiamondTex "__OTR__textures/kanji/gMsgKanji819EWhiteDiamondTex" +static const ALIGN_ASSET(2) char gMsgKanji819EWhiteDiamondTex[] = dgMsgKanji819EWhiteDiamondTex; + +#define dgMsgKanji819FBlackDiamondTex "__OTR__textures/kanji/gMsgKanji819FBlackDiamondTex" +static const ALIGN_ASSET(2) char gMsgKanji819FBlackDiamondTex[] = dgMsgKanji819FBlackDiamondTex; + +#define dgMsgKanji81A0WhiteSquareTex "__OTR__textures/kanji/gMsgKanji81A0WhiteSquareTex" +static const ALIGN_ASSET(2) char gMsgKanji81A0WhiteSquareTex[] = dgMsgKanji81A0WhiteSquareTex; + +#define dgMsgKanji81A1BlackSquareTex "__OTR__textures/kanji/gMsgKanji81A1BlackSquareTex" +static const ALIGN_ASSET(2) char gMsgKanji81A1BlackSquareTex[] = dgMsgKanji81A1BlackSquareTex; + +#define dgMsgKanji81A2WhiteTriangleTex "__OTR__textures/kanji/gMsgKanji81A2WhiteTriangleTex" +static const ALIGN_ASSET(2) char gMsgKanji81A2WhiteTriangleTex[] = dgMsgKanji81A2WhiteTriangleTex; + +#define dgMsgKanji81A3BlackTriangleTex "__OTR__textures/kanji/gMsgKanji81A3BlackTriangleTex" +static const ALIGN_ASSET(2) char gMsgKanji81A3BlackTriangleTex[] = dgMsgKanji81A3BlackTriangleTex; + +#define dgMsgKanji81A4WhiteInvertedTriangleTex "__OTR__textures/kanji/gMsgKanji81A4WhiteInvertedTriangleTex" +static const ALIGN_ASSET(2) char gMsgKanji81A4WhiteInvertedTriangleTex[] = dgMsgKanji81A4WhiteInvertedTriangleTex; + +#define dgMsgKanji81A5BlackInvertedTriangleTex "__OTR__textures/kanji/gMsgKanji81A5BlackInvertedTriangleTex" +static const ALIGN_ASSET(2) char gMsgKanji81A5BlackInvertedTriangleTex[] = dgMsgKanji81A5BlackInvertedTriangleTex; + +#define dgMsgKanji81A6KomejirushiTex "__OTR__textures/kanji/gMsgKanji81A6KomejirushiTex" +static const ALIGN_ASSET(2) char gMsgKanji81A6KomejirushiTex[] = dgMsgKanji81A6KomejirushiTex; + +#define dgMsgKanji81A7PostalMarkTex "__OTR__textures/kanji/gMsgKanji81A7PostalMarkTex" +static const ALIGN_ASSET(2) char gMsgKanji81A7PostalMarkTex[] = dgMsgKanji81A7PostalMarkTex; + +#define dgMsgKanji81A8ArrowRightTex "__OTR__textures/kanji/gMsgKanji81A8ArrowRightTex" +static const ALIGN_ASSET(2) char gMsgKanji81A8ArrowRightTex[] = dgMsgKanji81A8ArrowRightTex; + +#define dgMsgKanji81A9ArrowLeftTex "__OTR__textures/kanji/gMsgKanji81A9ArrowLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji81A9ArrowLeftTex[] = dgMsgKanji81A9ArrowLeftTex; + +#define dgMsgKanji81AAArrowUpTex "__OTR__textures/kanji/gMsgKanji81AAArrowUpTex" +static const ALIGN_ASSET(2) char gMsgKanji81AAArrowUpTex[] = dgMsgKanji81AAArrowUpTex; + +#define dgMsgKanji81ABArrowDownTex "__OTR__textures/kanji/gMsgKanji81ABArrowDownTex" +static const ALIGN_ASSET(2) char gMsgKanji81ABArrowDownTex[] = dgMsgKanji81ABArrowDownTex; + +#define dgMsgKanji81ACGetaTex "__OTR__textures/kanji/gMsgKanji81ACGetaTex" +static const ALIGN_ASSET(2) char gMsgKanji81ACGetaTex[] = dgMsgKanji81ACGetaTex; + +#define dgMsgKanji81B8EmptyTex "__OTR__textures/kanji/gMsgKanji81B8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81B8EmptyTex[] = dgMsgKanji81B8EmptyTex; + +#define dgMsgKanji81B9EmptyTex "__OTR__textures/kanji/gMsgKanji81B9EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81B9EmptyTex[] = dgMsgKanji81B9EmptyTex; + +#define dgMsgKanji81BAEmptyTex "__OTR__textures/kanji/gMsgKanji81BAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81BAEmptyTex[] = dgMsgKanji81BAEmptyTex; + +#define dgMsgKanji81BBEmptyTex "__OTR__textures/kanji/gMsgKanji81BBEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81BBEmptyTex[] = dgMsgKanji81BBEmptyTex; + +#define dgMsgKanji81BCEmptyTex "__OTR__textures/kanji/gMsgKanji81BCEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81BCEmptyTex[] = dgMsgKanji81BCEmptyTex; + +#define dgMsgKanji81BDEmptyTex "__OTR__textures/kanji/gMsgKanji81BDEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81BDEmptyTex[] = dgMsgKanji81BDEmptyTex; + +#define dgMsgKanji81BEEmptyTex "__OTR__textures/kanji/gMsgKanji81BEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81BEEmptyTex[] = dgMsgKanji81BEEmptyTex; + +#define dgMsgKanji81BFIntersectionTex "__OTR__textures/kanji/gMsgKanji81BFIntersectionTex" +static const ALIGN_ASSET(2) char gMsgKanji81BFIntersectionTex[] = dgMsgKanji81BFIntersectionTex; + +#define dgMsgKanji81C8EmptyTex "__OTR__textures/kanji/gMsgKanji81C8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81C8EmptyTex[] = dgMsgKanji81C8EmptyTex; + +#define dgMsgKanji81C9EmptyTex "__OTR__textures/kanji/gMsgKanji81C9EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81C9EmptyTex[] = dgMsgKanji81C9EmptyTex; + +#define dgMsgKanji81CAEmptyTex "__OTR__textures/kanji/gMsgKanji81CAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81CAEmptyTex[] = dgMsgKanji81CAEmptyTex; + +#define dgMsgKanji81CBEmptyTex "__OTR__textures/kanji/gMsgKanji81CBEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81CBEmptyTex[] = dgMsgKanji81CBEmptyTex; + +#define dgMsgKanji81CCEmptyTex "__OTR__textures/kanji/gMsgKanji81CCEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81CCEmptyTex[] = dgMsgKanji81CCEmptyTex; + +#define dgMsgKanji81CDEmptyTex "__OTR__textures/kanji/gMsgKanji81CDEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81CDEmptyTex[] = dgMsgKanji81CDEmptyTex; + +#define dgMsgKanji81CEEmptyTex "__OTR__textures/kanji/gMsgKanji81CEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81CEEmptyTex[] = dgMsgKanji81CEEmptyTex; + +#define dgMsgKanji81DBEmptyTex "__OTR__textures/kanji/gMsgKanji81DBEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81DBEmptyTex[] = dgMsgKanji81DBEmptyTex; + +#define dgMsgKanji81DCEmptyTex "__OTR__textures/kanji/gMsgKanji81DCEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81DCEmptyTex[] = dgMsgKanji81DCEmptyTex; + +#define dgMsgKanji81DDEmptyTex "__OTR__textures/kanji/gMsgKanji81DDEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81DDEmptyTex[] = dgMsgKanji81DDEmptyTex; + +#define dgMsgKanji81DEEmptyTex "__OTR__textures/kanji/gMsgKanji81DEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81DEEmptyTex[] = dgMsgKanji81DEEmptyTex; + +#define dgMsgKanji81DFEmptyTex "__OTR__textures/kanji/gMsgKanji81DFEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81DFEmptyTex[] = dgMsgKanji81DFEmptyTex; + +#define dgMsgKanji81E0ApproximatelyEqualToTex "__OTR__textures/kanji/gMsgKanji81E0ApproximatelyEqualToTex" +static const ALIGN_ASSET(2) char gMsgKanji81E0ApproximatelyEqualToTex[] = dgMsgKanji81E0ApproximatelyEqualToTex; + +#define dgMsgKanji81E1MuchLessThanTex "__OTR__textures/kanji/gMsgKanji81E1MuchLessThanTex" +static const ALIGN_ASSET(2) char gMsgKanji81E1MuchLessThanTex[] = dgMsgKanji81E1MuchLessThanTex; + +#define dgMsgKanji81E2MuchGreaterThanTex "__OTR__textures/kanji/gMsgKanji81E2MuchGreaterThanTex" +static const ALIGN_ASSET(2) char gMsgKanji81E2MuchGreaterThanTex[] = dgMsgKanji81E2MuchGreaterThanTex; + +#define dgMsgKanji81E3SquareRootTex "__OTR__textures/kanji/gMsgKanji81E3SquareRootTex" +static const ALIGN_ASSET(2) char gMsgKanji81E3SquareRootTex[] = dgMsgKanji81E3SquareRootTex; + +#define dgMsgKanji81E4SimilarTex "__OTR__textures/kanji/gMsgKanji81E4SimilarTex" +static const ALIGN_ASSET(2) char gMsgKanji81E4SimilarTex[] = dgMsgKanji81E4SimilarTex; + +#define dgMsgKanji81E5ProportionalTex "__OTR__textures/kanji/gMsgKanji81E5ProportionalTex" +static const ALIGN_ASSET(2) char gMsgKanji81E5ProportionalTex[] = dgMsgKanji81E5ProportionalTex; + +#define dgMsgKanji81E6BecauseTex "__OTR__textures/kanji/gMsgKanji81E6BecauseTex" +static const ALIGN_ASSET(2) char gMsgKanji81E6BecauseTex[] = dgMsgKanji81E6BecauseTex; + +#define dgMsgKanji81E7IntegralTex "__OTR__textures/kanji/gMsgKanji81E7IntegralTex" +static const ALIGN_ASSET(2) char gMsgKanji81E7IntegralTex[] = dgMsgKanji81E7IntegralTex; + +#define dgMsgKanji81E8DoubleIntegralTex "__OTR__textures/kanji/gMsgKanji81E8DoubleIntegralTex" +static const ALIGN_ASSET(2) char gMsgKanji81E8DoubleIntegralTex[] = dgMsgKanji81E8DoubleIntegralTex; + +#define dgMsgKanji81F0EmptyTex "__OTR__textures/kanji/gMsgKanji81F0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81F0EmptyTex[] = dgMsgKanji81F0EmptyTex; + +#define dgMsgKanji81F1EmptyTex "__OTR__textures/kanji/gMsgKanji81F1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81F1EmptyTex[] = dgMsgKanji81F1EmptyTex; + +#define dgMsgKanji81F2EmptyTex "__OTR__textures/kanji/gMsgKanji81F2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81F2EmptyTex[] = dgMsgKanji81F2EmptyTex; + +#define dgMsgKanji81F3EmptyTex "__OTR__textures/kanji/gMsgKanji81F3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81F3EmptyTex[] = dgMsgKanji81F3EmptyTex; + +#define dgMsgKanji81F4EmptyTex "__OTR__textures/kanji/gMsgKanji81F4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81F4EmptyTex[] = dgMsgKanji81F4EmptyTex; + +#define dgMsgKanji81F5EmptyTex "__OTR__textures/kanji/gMsgKanji81F5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81F5EmptyTex[] = dgMsgKanji81F5EmptyTex; + +#define dgMsgKanji81F6EmptyTex "__OTR__textures/kanji/gMsgKanji81F6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81F6EmptyTex[] = dgMsgKanji81F6EmptyTex; + +#define dgMsgKanji81F7EmptyTex "__OTR__textures/kanji/gMsgKanji81F7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81F7EmptyTex[] = dgMsgKanji81F7EmptyTex; + +#define dgMsgKanji81FCEmptyTex "__OTR__textures/kanji/gMsgKanji81FCEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji81FCEmptyTex[] = dgMsgKanji81FCEmptyTex; + +#define dgMsgKanji824FZeroTex "__OTR__textures/kanji/gMsgKanji824FZeroTex" +static const ALIGN_ASSET(2) char gMsgKanji824FZeroTex[] = dgMsgKanji824FZeroTex; + +#define dgMsgKanji8250OneTex "__OTR__textures/kanji/gMsgKanji8250OneTex" +static const ALIGN_ASSET(2) char gMsgKanji8250OneTex[] = dgMsgKanji8250OneTex; + +#define dgMsgKanji8251TwoTex "__OTR__textures/kanji/gMsgKanji8251TwoTex" +static const ALIGN_ASSET(2) char gMsgKanji8251TwoTex[] = dgMsgKanji8251TwoTex; + +#define dgMsgKanji8252ThreeTex "__OTR__textures/kanji/gMsgKanji8252ThreeTex" +static const ALIGN_ASSET(2) char gMsgKanji8252ThreeTex[] = dgMsgKanji8252ThreeTex; + +#define dgMsgKanji8253FourTex "__OTR__textures/kanji/gMsgKanji8253FourTex" +static const ALIGN_ASSET(2) char gMsgKanji8253FourTex[] = dgMsgKanji8253FourTex; + +#define dgMsgKanji8254FiveTex "__OTR__textures/kanji/gMsgKanji8254FiveTex" +static const ALIGN_ASSET(2) char gMsgKanji8254FiveTex[] = dgMsgKanji8254FiveTex; + +#define dgMsgKanji8255SixTex "__OTR__textures/kanji/gMsgKanji8255SixTex" +static const ALIGN_ASSET(2) char gMsgKanji8255SixTex[] = dgMsgKanji8255SixTex; + +#define dgMsgKanji8256SevenTex "__OTR__textures/kanji/gMsgKanji8256SevenTex" +static const ALIGN_ASSET(2) char gMsgKanji8256SevenTex[] = dgMsgKanji8256SevenTex; + +#define dgMsgKanji8257EightTex "__OTR__textures/kanji/gMsgKanji8257EightTex" +static const ALIGN_ASSET(2) char gMsgKanji8257EightTex[] = dgMsgKanji8257EightTex; + +#define dgMsgKanji8258NineTex "__OTR__textures/kanji/gMsgKanji8258NineTex" +static const ALIGN_ASSET(2) char gMsgKanji8258NineTex[] = dgMsgKanji8258NineTex; + +#define dgMsgKanji8260CapitalATex "__OTR__textures/kanji/gMsgKanji8260CapitalATex" +static const ALIGN_ASSET(2) char gMsgKanji8260CapitalATex[] = dgMsgKanji8260CapitalATex; + +#define dgMsgKanji8261CapitalBTex "__OTR__textures/kanji/gMsgKanji8261CapitalBTex" +static const ALIGN_ASSET(2) char gMsgKanji8261CapitalBTex[] = dgMsgKanji8261CapitalBTex; + +#define dgMsgKanji8262CapitalCTex "__OTR__textures/kanji/gMsgKanji8262CapitalCTex" +static const ALIGN_ASSET(2) char gMsgKanji8262CapitalCTex[] = dgMsgKanji8262CapitalCTex; + +#define dgMsgKanji8263CapitalDTex "__OTR__textures/kanji/gMsgKanji8263CapitalDTex" +static const ALIGN_ASSET(2) char gMsgKanji8263CapitalDTex[] = dgMsgKanji8263CapitalDTex; + +#define dgMsgKanji8264CapitalETex "__OTR__textures/kanji/gMsgKanji8264CapitalETex" +static const ALIGN_ASSET(2) char gMsgKanji8264CapitalETex[] = dgMsgKanji8264CapitalETex; + +#define dgMsgKanji8265CapitalFTex "__OTR__textures/kanji/gMsgKanji8265CapitalFTex" +static const ALIGN_ASSET(2) char gMsgKanji8265CapitalFTex[] = dgMsgKanji8265CapitalFTex; + +#define dgMsgKanji8266CapitalGTex "__OTR__textures/kanji/gMsgKanji8266CapitalGTex" +static const ALIGN_ASSET(2) char gMsgKanji8266CapitalGTex[] = dgMsgKanji8266CapitalGTex; + +#define dgMsgKanji8267CapitalHTex "__OTR__textures/kanji/gMsgKanji8267CapitalHTex" +static const ALIGN_ASSET(2) char gMsgKanji8267CapitalHTex[] = dgMsgKanji8267CapitalHTex; + +#define dgMsgKanji8268CapitalITex "__OTR__textures/kanji/gMsgKanji8268CapitalITex" +static const ALIGN_ASSET(2) char gMsgKanji8268CapitalITex[] = dgMsgKanji8268CapitalITex; + +#define dgMsgKanji8269CapitalJTex "__OTR__textures/kanji/gMsgKanji8269CapitalJTex" +static const ALIGN_ASSET(2) char gMsgKanji8269CapitalJTex[] = dgMsgKanji8269CapitalJTex; + +#define dgMsgKanji826ACapitalKTex "__OTR__textures/kanji/gMsgKanji826ACapitalKTex" +static const ALIGN_ASSET(2) char gMsgKanji826ACapitalKTex[] = dgMsgKanji826ACapitalKTex; + +#define dgMsgKanji826BCapitalLTex "__OTR__textures/kanji/gMsgKanji826BCapitalLTex" +static const ALIGN_ASSET(2) char gMsgKanji826BCapitalLTex[] = dgMsgKanji826BCapitalLTex; + +#define dgMsgKanji826CCapitalMTex "__OTR__textures/kanji/gMsgKanji826CCapitalMTex" +static const ALIGN_ASSET(2) char gMsgKanji826CCapitalMTex[] = dgMsgKanji826CCapitalMTex; + +#define dgMsgKanji826DCapitalNTex "__OTR__textures/kanji/gMsgKanji826DCapitalNTex" +static const ALIGN_ASSET(2) char gMsgKanji826DCapitalNTex[] = dgMsgKanji826DCapitalNTex; + +#define dgMsgKanji826ECapitalOTex "__OTR__textures/kanji/gMsgKanji826ECapitalOTex" +static const ALIGN_ASSET(2) char gMsgKanji826ECapitalOTex[] = dgMsgKanji826ECapitalOTex; + +#define dgMsgKanji826FCapitalPTex "__OTR__textures/kanji/gMsgKanji826FCapitalPTex" +static const ALIGN_ASSET(2) char gMsgKanji826FCapitalPTex[] = dgMsgKanji826FCapitalPTex; + +#define dgMsgKanji8270CapitalQTex "__OTR__textures/kanji/gMsgKanji8270CapitalQTex" +static const ALIGN_ASSET(2) char gMsgKanji8270CapitalQTex[] = dgMsgKanji8270CapitalQTex; + +#define dgMsgKanji8271CapitalRTex "__OTR__textures/kanji/gMsgKanji8271CapitalRTex" +static const ALIGN_ASSET(2) char gMsgKanji8271CapitalRTex[] = dgMsgKanji8271CapitalRTex; + +#define dgMsgKanji8272CapitalSTex "__OTR__textures/kanji/gMsgKanji8272CapitalSTex" +static const ALIGN_ASSET(2) char gMsgKanji8272CapitalSTex[] = dgMsgKanji8272CapitalSTex; + +#define dgMsgKanji8273CapitalTTex "__OTR__textures/kanji/gMsgKanji8273CapitalTTex" +static const ALIGN_ASSET(2) char gMsgKanji8273CapitalTTex[] = dgMsgKanji8273CapitalTTex; + +#define dgMsgKanji8274CapitalUTex "__OTR__textures/kanji/gMsgKanji8274CapitalUTex" +static const ALIGN_ASSET(2) char gMsgKanji8274CapitalUTex[] = dgMsgKanji8274CapitalUTex; + +#define dgMsgKanji8275CapitalVTex "__OTR__textures/kanji/gMsgKanji8275CapitalVTex" +static const ALIGN_ASSET(2) char gMsgKanji8275CapitalVTex[] = dgMsgKanji8275CapitalVTex; + +#define dgMsgKanji8276CapitalWTex "__OTR__textures/kanji/gMsgKanji8276CapitalWTex" +static const ALIGN_ASSET(2) char gMsgKanji8276CapitalWTex[] = dgMsgKanji8276CapitalWTex; + +#define dgMsgKanji8277CapitalXTex "__OTR__textures/kanji/gMsgKanji8277CapitalXTex" +static const ALIGN_ASSET(2) char gMsgKanji8277CapitalXTex[] = dgMsgKanji8277CapitalXTex; + +#define dgMsgKanji8278CapitalYTex "__OTR__textures/kanji/gMsgKanji8278CapitalYTex" +static const ALIGN_ASSET(2) char gMsgKanji8278CapitalYTex[] = dgMsgKanji8278CapitalYTex; + +#define dgMsgKanji8279CapitalZTex "__OTR__textures/kanji/gMsgKanji8279CapitalZTex" +static const ALIGN_ASSET(2) char gMsgKanji8279CapitalZTex[] = dgMsgKanji8279CapitalZTex; + +#define dgMsgKanji8281LowercaseATex "__OTR__textures/kanji/gMsgKanji8281LowercaseATex" +static const ALIGN_ASSET(2) char gMsgKanji8281LowercaseATex[] = dgMsgKanji8281LowercaseATex; + +#define dgMsgKanji8282LowercaseBTex "__OTR__textures/kanji/gMsgKanji8282LowercaseBTex" +static const ALIGN_ASSET(2) char gMsgKanji8282LowercaseBTex[] = dgMsgKanji8282LowercaseBTex; + +#define dgMsgKanji8283LowercaseCTex "__OTR__textures/kanji/gMsgKanji8283LowercaseCTex" +static const ALIGN_ASSET(2) char gMsgKanji8283LowercaseCTex[] = dgMsgKanji8283LowercaseCTex; + +#define dgMsgKanji8284LowercaseDTex "__OTR__textures/kanji/gMsgKanji8284LowercaseDTex" +static const ALIGN_ASSET(2) char gMsgKanji8284LowercaseDTex[] = dgMsgKanji8284LowercaseDTex; + +#define dgMsgKanji8285LowercaseETex "__OTR__textures/kanji/gMsgKanji8285LowercaseETex" +static const ALIGN_ASSET(2) char gMsgKanji8285LowercaseETex[] = dgMsgKanji8285LowercaseETex; + +#define dgMsgKanji8286LowercaseFTex "__OTR__textures/kanji/gMsgKanji8286LowercaseFTex" +static const ALIGN_ASSET(2) char gMsgKanji8286LowercaseFTex[] = dgMsgKanji8286LowercaseFTex; + +#define dgMsgKanji8287LowercaseGTex "__OTR__textures/kanji/gMsgKanji8287LowercaseGTex" +static const ALIGN_ASSET(2) char gMsgKanji8287LowercaseGTex[] = dgMsgKanji8287LowercaseGTex; + +#define dgMsgKanji8288LowercaseHTex "__OTR__textures/kanji/gMsgKanji8288LowercaseHTex" +static const ALIGN_ASSET(2) char gMsgKanji8288LowercaseHTex[] = dgMsgKanji8288LowercaseHTex; + +#define dgMsgKanji8289LowercaseITex "__OTR__textures/kanji/gMsgKanji8289LowercaseITex" +static const ALIGN_ASSET(2) char gMsgKanji8289LowercaseITex[] = dgMsgKanji8289LowercaseITex; + +#define dgMsgKanji828ALowercaseJTex "__OTR__textures/kanji/gMsgKanji828ALowercaseJTex" +static const ALIGN_ASSET(2) char gMsgKanji828ALowercaseJTex[] = dgMsgKanji828ALowercaseJTex; + +#define dgMsgKanji828BLowercaseKTex "__OTR__textures/kanji/gMsgKanji828BLowercaseKTex" +static const ALIGN_ASSET(2) char gMsgKanji828BLowercaseKTex[] = dgMsgKanji828BLowercaseKTex; + +#define dgMsgKanji828CLowercaseLTex "__OTR__textures/kanji/gMsgKanji828CLowercaseLTex" +static const ALIGN_ASSET(2) char gMsgKanji828CLowercaseLTex[] = dgMsgKanji828CLowercaseLTex; + +#define dgMsgKanji828DLowercaseMTex "__OTR__textures/kanji/gMsgKanji828DLowercaseMTex" +static const ALIGN_ASSET(2) char gMsgKanji828DLowercaseMTex[] = dgMsgKanji828DLowercaseMTex; + +#define dgMsgKanji828ELowercaseNTex "__OTR__textures/kanji/gMsgKanji828ELowercaseNTex" +static const ALIGN_ASSET(2) char gMsgKanji828ELowercaseNTex[] = dgMsgKanji828ELowercaseNTex; + +#define dgMsgKanji828FLowercaseOTex "__OTR__textures/kanji/gMsgKanji828FLowercaseOTex" +static const ALIGN_ASSET(2) char gMsgKanji828FLowercaseOTex[] = dgMsgKanji828FLowercaseOTex; + +#define dgMsgKanji8290LowercasePTex "__OTR__textures/kanji/gMsgKanji8290LowercasePTex" +static const ALIGN_ASSET(2) char gMsgKanji8290LowercasePTex[] = dgMsgKanji8290LowercasePTex; + +#define dgMsgKanji8291LowercaseQTex "__OTR__textures/kanji/gMsgKanji8291LowercaseQTex" +static const ALIGN_ASSET(2) char gMsgKanji8291LowercaseQTex[] = dgMsgKanji8291LowercaseQTex; + +#define dgMsgKanji8292LowercaseRTex "__OTR__textures/kanji/gMsgKanji8292LowercaseRTex" +static const ALIGN_ASSET(2) char gMsgKanji8292LowercaseRTex[] = dgMsgKanji8292LowercaseRTex; + +#define dgMsgKanji8293LowercaseSTex "__OTR__textures/kanji/gMsgKanji8293LowercaseSTex" +static const ALIGN_ASSET(2) char gMsgKanji8293LowercaseSTex[] = dgMsgKanji8293LowercaseSTex; + +#define dgMsgKanji8294LowercaseTTex "__OTR__textures/kanji/gMsgKanji8294LowercaseTTex" +static const ALIGN_ASSET(2) char gMsgKanji8294LowercaseTTex[] = dgMsgKanji8294LowercaseTTex; + +#define dgMsgKanji8295LowercaseUTex "__OTR__textures/kanji/gMsgKanji8295LowercaseUTex" +static const ALIGN_ASSET(2) char gMsgKanji8295LowercaseUTex[] = dgMsgKanji8295LowercaseUTex; + +#define dgMsgKanji8296LowercaseVTex "__OTR__textures/kanji/gMsgKanji8296LowercaseVTex" +static const ALIGN_ASSET(2) char gMsgKanji8296LowercaseVTex[] = dgMsgKanji8296LowercaseVTex; + +#define dgMsgKanji8297LowercaseWTex "__OTR__textures/kanji/gMsgKanji8297LowercaseWTex" +static const ALIGN_ASSET(2) char gMsgKanji8297LowercaseWTex[] = dgMsgKanji8297LowercaseWTex; + +#define dgMsgKanji8298LowercaseXTex "__OTR__textures/kanji/gMsgKanji8298LowercaseXTex" +static const ALIGN_ASSET(2) char gMsgKanji8298LowercaseXTex[] = dgMsgKanji8298LowercaseXTex; + +#define dgMsgKanji8299LowercaseYTex "__OTR__textures/kanji/gMsgKanji8299LowercaseYTex" +static const ALIGN_ASSET(2) char gMsgKanji8299LowercaseYTex[] = dgMsgKanji8299LowercaseYTex; + +#define dgMsgKanji829ALowercaseZTex "__OTR__textures/kanji/gMsgKanji829ALowercaseZTex" +static const ALIGN_ASSET(2) char gMsgKanji829ALowercaseZTex[] = dgMsgKanji829ALowercaseZTex; + +#define dgMsgKanji829FHiraganaSmallATex "__OTR__textures/kanji/gMsgKanji829FHiraganaSmallATex" +static const ALIGN_ASSET(2) char gMsgKanji829FHiraganaSmallATex[] = dgMsgKanji829FHiraganaSmallATex; + +#define dgMsgKanji82A0HiraganaATex "__OTR__textures/kanji/gMsgKanji82A0HiraganaATex" +static const ALIGN_ASSET(2) char gMsgKanji82A0HiraganaATex[] = dgMsgKanji82A0HiraganaATex; + +#define dgMsgKanji82A1HiraganaSmallITex "__OTR__textures/kanji/gMsgKanji82A1HiraganaSmallITex" +static const ALIGN_ASSET(2) char gMsgKanji82A1HiraganaSmallITex[] = dgMsgKanji82A1HiraganaSmallITex; + +#define dgMsgKanji82A2HiraganaITex "__OTR__textures/kanji/gMsgKanji82A2HiraganaITex" +static const ALIGN_ASSET(2) char gMsgKanji82A2HiraganaITex[] = dgMsgKanji82A2HiraganaITex; + +#define dgMsgKanji82A3HiraganaSmallUTex "__OTR__textures/kanji/gMsgKanji82A3HiraganaSmallUTex" +static const ALIGN_ASSET(2) char gMsgKanji82A3HiraganaSmallUTex[] = dgMsgKanji82A3HiraganaSmallUTex; + +#define dgMsgKanji82A4HiraganaUTex "__OTR__textures/kanji/gMsgKanji82A4HiraganaUTex" +static const ALIGN_ASSET(2) char gMsgKanji82A4HiraganaUTex[] = dgMsgKanji82A4HiraganaUTex; + +#define dgMsgKanji82A5HiraganaSmallETex "__OTR__textures/kanji/gMsgKanji82A5HiraganaSmallETex" +static const ALIGN_ASSET(2) char gMsgKanji82A5HiraganaSmallETex[] = dgMsgKanji82A5HiraganaSmallETex; + +#define dgMsgKanji82A6HiraganaETex "__OTR__textures/kanji/gMsgKanji82A6HiraganaETex" +static const ALIGN_ASSET(2) char gMsgKanji82A6HiraganaETex[] = dgMsgKanji82A6HiraganaETex; + +#define dgMsgKanji82A7HiraganaSmallOTex "__OTR__textures/kanji/gMsgKanji82A7HiraganaSmallOTex" +static const ALIGN_ASSET(2) char gMsgKanji82A7HiraganaSmallOTex[] = dgMsgKanji82A7HiraganaSmallOTex; + +#define dgMsgKanji82A8HiraganaOTex "__OTR__textures/kanji/gMsgKanji82A8HiraganaOTex" +static const ALIGN_ASSET(2) char gMsgKanji82A8HiraganaOTex[] = dgMsgKanji82A8HiraganaOTex; + +#define dgMsgKanji82A9HiraganaKaTex "__OTR__textures/kanji/gMsgKanji82A9HiraganaKaTex" +static const ALIGN_ASSET(2) char gMsgKanji82A9HiraganaKaTex[] = dgMsgKanji82A9HiraganaKaTex; + +#define dgMsgKanji82AAHiraganaGaTex "__OTR__textures/kanji/gMsgKanji82AAHiraganaGaTex" +static const ALIGN_ASSET(2) char gMsgKanji82AAHiraganaGaTex[] = dgMsgKanji82AAHiraganaGaTex; + +#define dgMsgKanji82ABHiraganaKiTex "__OTR__textures/kanji/gMsgKanji82ABHiraganaKiTex" +static const ALIGN_ASSET(2) char gMsgKanji82ABHiraganaKiTex[] = dgMsgKanji82ABHiraganaKiTex; + +#define dgMsgKanji82ACHiraganaGiTex "__OTR__textures/kanji/gMsgKanji82ACHiraganaGiTex" +static const ALIGN_ASSET(2) char gMsgKanji82ACHiraganaGiTex[] = dgMsgKanji82ACHiraganaGiTex; + +#define dgMsgKanji82ADHiraganaKuTex "__OTR__textures/kanji/gMsgKanji82ADHiraganaKuTex" +static const ALIGN_ASSET(2) char gMsgKanji82ADHiraganaKuTex[] = dgMsgKanji82ADHiraganaKuTex; + +#define dgMsgKanji82AEHiraganaGuTex "__OTR__textures/kanji/gMsgKanji82AEHiraganaGuTex" +static const ALIGN_ASSET(2) char gMsgKanji82AEHiraganaGuTex[] = dgMsgKanji82AEHiraganaGuTex; + +#define dgMsgKanji82AFHiraganaKeTex "__OTR__textures/kanji/gMsgKanji82AFHiraganaKeTex" +static const ALIGN_ASSET(2) char gMsgKanji82AFHiraganaKeTex[] = dgMsgKanji82AFHiraganaKeTex; + +#define dgMsgKanji82B0HiraganaGeTex "__OTR__textures/kanji/gMsgKanji82B0HiraganaGeTex" +static const ALIGN_ASSET(2) char gMsgKanji82B0HiraganaGeTex[] = dgMsgKanji82B0HiraganaGeTex; + +#define dgMsgKanji82B1HiraganaKoTex "__OTR__textures/kanji/gMsgKanji82B1HiraganaKoTex" +static const ALIGN_ASSET(2) char gMsgKanji82B1HiraganaKoTex[] = dgMsgKanji82B1HiraganaKoTex; + +#define dgMsgKanji82B2HiraganaGoTex "__OTR__textures/kanji/gMsgKanji82B2HiraganaGoTex" +static const ALIGN_ASSET(2) char gMsgKanji82B2HiraganaGoTex[] = dgMsgKanji82B2HiraganaGoTex; + +#define dgMsgKanji82B3HiraganaSaTex "__OTR__textures/kanji/gMsgKanji82B3HiraganaSaTex" +static const ALIGN_ASSET(2) char gMsgKanji82B3HiraganaSaTex[] = dgMsgKanji82B3HiraganaSaTex; + +#define dgMsgKanji82B4HiraganaZaTex "__OTR__textures/kanji/gMsgKanji82B4HiraganaZaTex" +static const ALIGN_ASSET(2) char gMsgKanji82B4HiraganaZaTex[] = dgMsgKanji82B4HiraganaZaTex; + +#define dgMsgKanji82B5HiraganaShiTex "__OTR__textures/kanji/gMsgKanji82B5HiraganaShiTex" +static const ALIGN_ASSET(2) char gMsgKanji82B5HiraganaShiTex[] = dgMsgKanji82B5HiraganaShiTex; + +#define dgMsgKanji82B6HiraganaJiTex "__OTR__textures/kanji/gMsgKanji82B6HiraganaJiTex" +static const ALIGN_ASSET(2) char gMsgKanji82B6HiraganaJiTex[] = dgMsgKanji82B6HiraganaJiTex; + +#define dgMsgKanji82B7HiraganaSuTex "__OTR__textures/kanji/gMsgKanji82B7HiraganaSuTex" +static const ALIGN_ASSET(2) char gMsgKanji82B7HiraganaSuTex[] = dgMsgKanji82B7HiraganaSuTex; + +#define dgMsgKanji82B8HiraganaZuTex "__OTR__textures/kanji/gMsgKanji82B8HiraganaZuTex" +static const ALIGN_ASSET(2) char gMsgKanji82B8HiraganaZuTex[] = dgMsgKanji82B8HiraganaZuTex; + +#define dgMsgKanji82B9HiraganaSeTex "__OTR__textures/kanji/gMsgKanji82B9HiraganaSeTex" +static const ALIGN_ASSET(2) char gMsgKanji82B9HiraganaSeTex[] = dgMsgKanji82B9HiraganaSeTex; + +#define dgMsgKanji82BAHiraganaZeTex "__OTR__textures/kanji/gMsgKanji82BAHiraganaZeTex" +static const ALIGN_ASSET(2) char gMsgKanji82BAHiraganaZeTex[] = dgMsgKanji82BAHiraganaZeTex; + +#define dgMsgKanji82BBHiraganaSoTex "__OTR__textures/kanji/gMsgKanji82BBHiraganaSoTex" +static const ALIGN_ASSET(2) char gMsgKanji82BBHiraganaSoTex[] = dgMsgKanji82BBHiraganaSoTex; + +#define dgMsgKanji82BCHiraganaZoTex "__OTR__textures/kanji/gMsgKanji82BCHiraganaZoTex" +static const ALIGN_ASSET(2) char gMsgKanji82BCHiraganaZoTex[] = dgMsgKanji82BCHiraganaZoTex; + +#define dgMsgKanji82BDHiraganaTaTex "__OTR__textures/kanji/gMsgKanji82BDHiraganaTaTex" +static const ALIGN_ASSET(2) char gMsgKanji82BDHiraganaTaTex[] = dgMsgKanji82BDHiraganaTaTex; + +#define dgMsgKanji82BEHiraganaDaTex "__OTR__textures/kanji/gMsgKanji82BEHiraganaDaTex" +static const ALIGN_ASSET(2) char gMsgKanji82BEHiraganaDaTex[] = dgMsgKanji82BEHiraganaDaTex; + +#define dgMsgKanji82BFHiraganaChiTex "__OTR__textures/kanji/gMsgKanji82BFHiraganaChiTex" +static const ALIGN_ASSET(2) char gMsgKanji82BFHiraganaChiTex[] = dgMsgKanji82BFHiraganaChiTex; + +#define dgMsgKanji82C0HiraganaDiTex "__OTR__textures/kanji/gMsgKanji82C0HiraganaDiTex" +static const ALIGN_ASSET(2) char gMsgKanji82C0HiraganaDiTex[] = dgMsgKanji82C0HiraganaDiTex; + +#define dgMsgKanji82C1HiraganaSmallTsuTex "__OTR__textures/kanji/gMsgKanji82C1HiraganaSmallTsuTex" +static const ALIGN_ASSET(2) char gMsgKanji82C1HiraganaSmallTsuTex[] = dgMsgKanji82C1HiraganaSmallTsuTex; + +#define dgMsgKanji82C2HiraganaTsuTex "__OTR__textures/kanji/gMsgKanji82C2HiraganaTsuTex" +static const ALIGN_ASSET(2) char gMsgKanji82C2HiraganaTsuTex[] = dgMsgKanji82C2HiraganaTsuTex; + +#define dgMsgKanji82C3HiraganaDuTex "__OTR__textures/kanji/gMsgKanji82C3HiraganaDuTex" +static const ALIGN_ASSET(2) char gMsgKanji82C3HiraganaDuTex[] = dgMsgKanji82C3HiraganaDuTex; + +#define dgMsgKanji82C4HiraganaTeTex "__OTR__textures/kanji/gMsgKanji82C4HiraganaTeTex" +static const ALIGN_ASSET(2) char gMsgKanji82C4HiraganaTeTex[] = dgMsgKanji82C4HiraganaTeTex; + +#define dgMsgKanji82C5HiraganaDeTex "__OTR__textures/kanji/gMsgKanji82C5HiraganaDeTex" +static const ALIGN_ASSET(2) char gMsgKanji82C5HiraganaDeTex[] = dgMsgKanji82C5HiraganaDeTex; + +#define dgMsgKanji82C6HiraganaToTex "__OTR__textures/kanji/gMsgKanji82C6HiraganaToTex" +static const ALIGN_ASSET(2) char gMsgKanji82C6HiraganaToTex[] = dgMsgKanji82C6HiraganaToTex; + +#define dgMsgKanji82C7HiraganaDoTex "__OTR__textures/kanji/gMsgKanji82C7HiraganaDoTex" +static const ALIGN_ASSET(2) char gMsgKanji82C7HiraganaDoTex[] = dgMsgKanji82C7HiraganaDoTex; + +#define dgMsgKanji82C8HiraganaNaTex "__OTR__textures/kanji/gMsgKanji82C8HiraganaNaTex" +static const ALIGN_ASSET(2) char gMsgKanji82C8HiraganaNaTex[] = dgMsgKanji82C8HiraganaNaTex; + +#define dgMsgKanji82C9HiraganaNiTex "__OTR__textures/kanji/gMsgKanji82C9HiraganaNiTex" +static const ALIGN_ASSET(2) char gMsgKanji82C9HiraganaNiTex[] = dgMsgKanji82C9HiraganaNiTex; + +#define dgMsgKanji82CAHiraganaNuTex "__OTR__textures/kanji/gMsgKanji82CAHiraganaNuTex" +static const ALIGN_ASSET(2) char gMsgKanji82CAHiraganaNuTex[] = dgMsgKanji82CAHiraganaNuTex; + +#define dgMsgKanji82CBHiraganaNeTex "__OTR__textures/kanji/gMsgKanji82CBHiraganaNeTex" +static const ALIGN_ASSET(2) char gMsgKanji82CBHiraganaNeTex[] = dgMsgKanji82CBHiraganaNeTex; + +#define dgMsgKanji82CCHiraganaNoTex "__OTR__textures/kanji/gMsgKanji82CCHiraganaNoTex" +static const ALIGN_ASSET(2) char gMsgKanji82CCHiraganaNoTex[] = dgMsgKanji82CCHiraganaNoTex; + +#define dgMsgKanji82CDHiraganaHaTex "__OTR__textures/kanji/gMsgKanji82CDHiraganaHaTex" +static const ALIGN_ASSET(2) char gMsgKanji82CDHiraganaHaTex[] = dgMsgKanji82CDHiraganaHaTex; + +#define dgMsgKanji82CEHiraganaBaTex "__OTR__textures/kanji/gMsgKanji82CEHiraganaBaTex" +static const ALIGN_ASSET(2) char gMsgKanji82CEHiraganaBaTex[] = dgMsgKanji82CEHiraganaBaTex; + +#define dgMsgKanji82CFHiraganaPaTex "__OTR__textures/kanji/gMsgKanji82CFHiraganaPaTex" +static const ALIGN_ASSET(2) char gMsgKanji82CFHiraganaPaTex[] = dgMsgKanji82CFHiraganaPaTex; + +#define dgMsgKanji82D0HiraganaHiTex "__OTR__textures/kanji/gMsgKanji82D0HiraganaHiTex" +static const ALIGN_ASSET(2) char gMsgKanji82D0HiraganaHiTex[] = dgMsgKanji82D0HiraganaHiTex; + +#define dgMsgKanji82D1HiraganaBiTex "__OTR__textures/kanji/gMsgKanji82D1HiraganaBiTex" +static const ALIGN_ASSET(2) char gMsgKanji82D1HiraganaBiTex[] = dgMsgKanji82D1HiraganaBiTex; + +#define dgMsgKanji82D2HiraganaPiTex "__OTR__textures/kanji/gMsgKanji82D2HiraganaPiTex" +static const ALIGN_ASSET(2) char gMsgKanji82D2HiraganaPiTex[] = dgMsgKanji82D2HiraganaPiTex; + +#define dgMsgKanji82D3HiraganaFuTex "__OTR__textures/kanji/gMsgKanji82D3HiraganaFuTex" +static const ALIGN_ASSET(2) char gMsgKanji82D3HiraganaFuTex[] = dgMsgKanji82D3HiraganaFuTex; + +#define dgMsgKanji82D4HiraganaBuTex "__OTR__textures/kanji/gMsgKanji82D4HiraganaBuTex" +static const ALIGN_ASSET(2) char gMsgKanji82D4HiraganaBuTex[] = dgMsgKanji82D4HiraganaBuTex; + +#define dgMsgKanji82D5HiraganaPuTex "__OTR__textures/kanji/gMsgKanji82D5HiraganaPuTex" +static const ALIGN_ASSET(2) char gMsgKanji82D5HiraganaPuTex[] = dgMsgKanji82D5HiraganaPuTex; + +#define dgMsgKanji82D6HiraganaHeTex "__OTR__textures/kanji/gMsgKanji82D6HiraganaHeTex" +static const ALIGN_ASSET(2) char gMsgKanji82D6HiraganaHeTex[] = dgMsgKanji82D6HiraganaHeTex; + +#define dgMsgKanji82D7HiraganaBeTex "__OTR__textures/kanji/gMsgKanji82D7HiraganaBeTex" +static const ALIGN_ASSET(2) char gMsgKanji82D7HiraganaBeTex[] = dgMsgKanji82D7HiraganaBeTex; + +#define dgMsgKanji82D8HiraganaPeTex "__OTR__textures/kanji/gMsgKanji82D8HiraganaPeTex" +static const ALIGN_ASSET(2) char gMsgKanji82D8HiraganaPeTex[] = dgMsgKanji82D8HiraganaPeTex; + +#define dgMsgKanji82D9HiraganaHoTex "__OTR__textures/kanji/gMsgKanji82D9HiraganaHoTex" +static const ALIGN_ASSET(2) char gMsgKanji82D9HiraganaHoTex[] = dgMsgKanji82D9HiraganaHoTex; + +#define dgMsgKanji82DAHiraganaBoTex "__OTR__textures/kanji/gMsgKanji82DAHiraganaBoTex" +static const ALIGN_ASSET(2) char gMsgKanji82DAHiraganaBoTex[] = dgMsgKanji82DAHiraganaBoTex; + +#define dgMsgKanji82DBHiraganaPoTex "__OTR__textures/kanji/gMsgKanji82DBHiraganaPoTex" +static const ALIGN_ASSET(2) char gMsgKanji82DBHiraganaPoTex[] = dgMsgKanji82DBHiraganaPoTex; + +#define dgMsgKanji82DCHiraganaMaTex "__OTR__textures/kanji/gMsgKanji82DCHiraganaMaTex" +static const ALIGN_ASSET(2) char gMsgKanji82DCHiraganaMaTex[] = dgMsgKanji82DCHiraganaMaTex; + +#define dgMsgKanji82DDHiraganaMiTex "__OTR__textures/kanji/gMsgKanji82DDHiraganaMiTex" +static const ALIGN_ASSET(2) char gMsgKanji82DDHiraganaMiTex[] = dgMsgKanji82DDHiraganaMiTex; + +#define dgMsgKanji82DEHiraganaMuTex "__OTR__textures/kanji/gMsgKanji82DEHiraganaMuTex" +static const ALIGN_ASSET(2) char gMsgKanji82DEHiraganaMuTex[] = dgMsgKanji82DEHiraganaMuTex; + +#define dgMsgKanji82DFHiraganaMeTex "__OTR__textures/kanji/gMsgKanji82DFHiraganaMeTex" +static const ALIGN_ASSET(2) char gMsgKanji82DFHiraganaMeTex[] = dgMsgKanji82DFHiraganaMeTex; + +#define dgMsgKanji82E0HiraganaMoTex "__OTR__textures/kanji/gMsgKanji82E0HiraganaMoTex" +static const ALIGN_ASSET(2) char gMsgKanji82E0HiraganaMoTex[] = dgMsgKanji82E0HiraganaMoTex; + +#define dgMsgKanji82E1HiraganaSmallYaTex "__OTR__textures/kanji/gMsgKanji82E1HiraganaSmallYaTex" +static const ALIGN_ASSET(2) char gMsgKanji82E1HiraganaSmallYaTex[] = dgMsgKanji82E1HiraganaSmallYaTex; + +#define dgMsgKanji82E2HiraganaYaTex "__OTR__textures/kanji/gMsgKanji82E2HiraganaYaTex" +static const ALIGN_ASSET(2) char gMsgKanji82E2HiraganaYaTex[] = dgMsgKanji82E2HiraganaYaTex; + +#define dgMsgKanji82E3HiraganaSmallYuTex "__OTR__textures/kanji/gMsgKanji82E3HiraganaSmallYuTex" +static const ALIGN_ASSET(2) char gMsgKanji82E3HiraganaSmallYuTex[] = dgMsgKanji82E3HiraganaSmallYuTex; + +#define dgMsgKanji82E4HiraganaYuTex "__OTR__textures/kanji/gMsgKanji82E4HiraganaYuTex" +static const ALIGN_ASSET(2) char gMsgKanji82E4HiraganaYuTex[] = dgMsgKanji82E4HiraganaYuTex; + +#define dgMsgKanji82E5HiraganaSmallYoTex "__OTR__textures/kanji/gMsgKanji82E5HiraganaSmallYoTex" +static const ALIGN_ASSET(2) char gMsgKanji82E5HiraganaSmallYoTex[] = dgMsgKanji82E5HiraganaSmallYoTex; + +#define dgMsgKanji82E6HiraganaYoTex "__OTR__textures/kanji/gMsgKanji82E6HiraganaYoTex" +static const ALIGN_ASSET(2) char gMsgKanji82E6HiraganaYoTex[] = dgMsgKanji82E6HiraganaYoTex; + +#define dgMsgKanji82E7HiraganaRaTex "__OTR__textures/kanji/gMsgKanji82E7HiraganaRaTex" +static const ALIGN_ASSET(2) char gMsgKanji82E7HiraganaRaTex[] = dgMsgKanji82E7HiraganaRaTex; + +#define dgMsgKanji82E8HiraganaRiTex "__OTR__textures/kanji/gMsgKanji82E8HiraganaRiTex" +static const ALIGN_ASSET(2) char gMsgKanji82E8HiraganaRiTex[] = dgMsgKanji82E8HiraganaRiTex; + +#define dgMsgKanji82E9HiraganaRuTex "__OTR__textures/kanji/gMsgKanji82E9HiraganaRuTex" +static const ALIGN_ASSET(2) char gMsgKanji82E9HiraganaRuTex[] = dgMsgKanji82E9HiraganaRuTex; + +#define dgMsgKanji82EAHiraganaReTex "__OTR__textures/kanji/gMsgKanji82EAHiraganaReTex" +static const ALIGN_ASSET(2) char gMsgKanji82EAHiraganaReTex[] = dgMsgKanji82EAHiraganaReTex; + +#define dgMsgKanji82EBHiraganaRoTex "__OTR__textures/kanji/gMsgKanji82EBHiraganaRoTex" +static const ALIGN_ASSET(2) char gMsgKanji82EBHiraganaRoTex[] = dgMsgKanji82EBHiraganaRoTex; + +#define dgMsgKanji82ECHiraganaSmallWaTex "__OTR__textures/kanji/gMsgKanji82ECHiraganaSmallWaTex" +static const ALIGN_ASSET(2) char gMsgKanji82ECHiraganaSmallWaTex[] = dgMsgKanji82ECHiraganaSmallWaTex; + +#define dgMsgKanji82EDHiraganaWaTex "__OTR__textures/kanji/gMsgKanji82EDHiraganaWaTex" +static const ALIGN_ASSET(2) char gMsgKanji82EDHiraganaWaTex[] = dgMsgKanji82EDHiraganaWaTex; + +#define dgMsgKanji82EEHiraganaWiTex "__OTR__textures/kanji/gMsgKanji82EEHiraganaWiTex" +static const ALIGN_ASSET(2) char gMsgKanji82EEHiraganaWiTex[] = dgMsgKanji82EEHiraganaWiTex; + +#define dgMsgKanji82EFHiraganaWeTex "__OTR__textures/kanji/gMsgKanji82EFHiraganaWeTex" +static const ALIGN_ASSET(2) char gMsgKanji82EFHiraganaWeTex[] = dgMsgKanji82EFHiraganaWeTex; + +#define dgMsgKanji82F0HiraganaWoTex "__OTR__textures/kanji/gMsgKanji82F0HiraganaWoTex" +static const ALIGN_ASSET(2) char gMsgKanji82F0HiraganaWoTex[] = dgMsgKanji82F0HiraganaWoTex; + +#define dgMsgKanji82F1HiraganaNTex "__OTR__textures/kanji/gMsgKanji82F1HiraganaNTex" +static const ALIGN_ASSET(2) char gMsgKanji82F1HiraganaNTex[] = dgMsgKanji82F1HiraganaNTex; + +#define dgMsgKanji82F2EmptyTex "__OTR__textures/kanji/gMsgKanji82F2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji82F2EmptyTex[] = dgMsgKanji82F2EmptyTex; + +#define dgMsgKanji8340KatakanaSmallATex "__OTR__textures/kanji/gMsgKanji8340KatakanaSmallATex" +static const ALIGN_ASSET(2) char gMsgKanji8340KatakanaSmallATex[] = dgMsgKanji8340KatakanaSmallATex; + +#define dgMsgKanji8341KatakanaATex "__OTR__textures/kanji/gMsgKanji8341KatakanaATex" +static const ALIGN_ASSET(2) char gMsgKanji8341KatakanaATex[] = dgMsgKanji8341KatakanaATex; + +#define dgMsgKanji8342KatakanaSmallITex "__OTR__textures/kanji/gMsgKanji8342KatakanaSmallITex" +static const ALIGN_ASSET(2) char gMsgKanji8342KatakanaSmallITex[] = dgMsgKanji8342KatakanaSmallITex; + +#define dgMsgKanji8343KatakanaITex "__OTR__textures/kanji/gMsgKanji8343KatakanaITex" +static const ALIGN_ASSET(2) char gMsgKanji8343KatakanaITex[] = dgMsgKanji8343KatakanaITex; + +#define dgMsgKanji8344KatakanaSmallUTex "__OTR__textures/kanji/gMsgKanji8344KatakanaSmallUTex" +static const ALIGN_ASSET(2) char gMsgKanji8344KatakanaSmallUTex[] = dgMsgKanji8344KatakanaSmallUTex; + +#define dgMsgKanji8345KatakanaUTex "__OTR__textures/kanji/gMsgKanji8345KatakanaUTex" +static const ALIGN_ASSET(2) char gMsgKanji8345KatakanaUTex[] = dgMsgKanji8345KatakanaUTex; + +#define dgMsgKanji8346KatakanaSmallETex "__OTR__textures/kanji/gMsgKanji8346KatakanaSmallETex" +static const ALIGN_ASSET(2) char gMsgKanji8346KatakanaSmallETex[] = dgMsgKanji8346KatakanaSmallETex; + +#define dgMsgKanji8347KatakanaETex "__OTR__textures/kanji/gMsgKanji8347KatakanaETex" +static const ALIGN_ASSET(2) char gMsgKanji8347KatakanaETex[] = dgMsgKanji8347KatakanaETex; + +#define dgMsgKanji8348KatakanaSmallOTex "__OTR__textures/kanji/gMsgKanji8348KatakanaSmallOTex" +static const ALIGN_ASSET(2) char gMsgKanji8348KatakanaSmallOTex[] = dgMsgKanji8348KatakanaSmallOTex; + +#define dgMsgKanji8349KatakanaOTex "__OTR__textures/kanji/gMsgKanji8349KatakanaOTex" +static const ALIGN_ASSET(2) char gMsgKanji8349KatakanaOTex[] = dgMsgKanji8349KatakanaOTex; + +#define dgMsgKanji834AKatakanaKaTex "__OTR__textures/kanji/gMsgKanji834AKatakanaKaTex" +static const ALIGN_ASSET(2) char gMsgKanji834AKatakanaKaTex[] = dgMsgKanji834AKatakanaKaTex; + +#define dgMsgKanji834BKatakanaGaTex "__OTR__textures/kanji/gMsgKanji834BKatakanaGaTex" +static const ALIGN_ASSET(2) char gMsgKanji834BKatakanaGaTex[] = dgMsgKanji834BKatakanaGaTex; + +#define dgMsgKanji834CKatakanaKiTex "__OTR__textures/kanji/gMsgKanji834CKatakanaKiTex" +static const ALIGN_ASSET(2) char gMsgKanji834CKatakanaKiTex[] = dgMsgKanji834CKatakanaKiTex; + +#define dgMsgKanji834DKatakanaGiTex "__OTR__textures/kanji/gMsgKanji834DKatakanaGiTex" +static const ALIGN_ASSET(2) char gMsgKanji834DKatakanaGiTex[] = dgMsgKanji834DKatakanaGiTex; + +#define dgMsgKanji834EKatakanaKuTex "__OTR__textures/kanji/gMsgKanji834EKatakanaKuTex" +static const ALIGN_ASSET(2) char gMsgKanji834EKatakanaKuTex[] = dgMsgKanji834EKatakanaKuTex; + +#define dgMsgKanji834FKatakanaGuTex "__OTR__textures/kanji/gMsgKanji834FKatakanaGuTex" +static const ALIGN_ASSET(2) char gMsgKanji834FKatakanaGuTex[] = dgMsgKanji834FKatakanaGuTex; + +#define dgMsgKanji8350KatakanaKeTex "__OTR__textures/kanji/gMsgKanji8350KatakanaKeTex" +static const ALIGN_ASSET(2) char gMsgKanji8350KatakanaKeTex[] = dgMsgKanji8350KatakanaKeTex; + +#define dgMsgKanji8351KatakanaGeTex "__OTR__textures/kanji/gMsgKanji8351KatakanaGeTex" +static const ALIGN_ASSET(2) char gMsgKanji8351KatakanaGeTex[] = dgMsgKanji8351KatakanaGeTex; + +#define dgMsgKanji8352KatakanaKoTex "__OTR__textures/kanji/gMsgKanji8352KatakanaKoTex" +static const ALIGN_ASSET(2) char gMsgKanji8352KatakanaKoTex[] = dgMsgKanji8352KatakanaKoTex; + +#define dgMsgKanji8353KatakanaGoTex "__OTR__textures/kanji/gMsgKanji8353KatakanaGoTex" +static const ALIGN_ASSET(2) char gMsgKanji8353KatakanaGoTex[] = dgMsgKanji8353KatakanaGoTex; + +#define dgMsgKanji8354KatakanaSaTex "__OTR__textures/kanji/gMsgKanji8354KatakanaSaTex" +static const ALIGN_ASSET(2) char gMsgKanji8354KatakanaSaTex[] = dgMsgKanji8354KatakanaSaTex; + +#define dgMsgKanji8355KatakanaZaTex "__OTR__textures/kanji/gMsgKanji8355KatakanaZaTex" +static const ALIGN_ASSET(2) char gMsgKanji8355KatakanaZaTex[] = dgMsgKanji8355KatakanaZaTex; + +#define dgMsgKanji8356KatakanaShiTex "__OTR__textures/kanji/gMsgKanji8356KatakanaShiTex" +static const ALIGN_ASSET(2) char gMsgKanji8356KatakanaShiTex[] = dgMsgKanji8356KatakanaShiTex; + +#define dgMsgKanji8357KatakanaJiTex "__OTR__textures/kanji/gMsgKanji8357KatakanaJiTex" +static const ALIGN_ASSET(2) char gMsgKanji8357KatakanaJiTex[] = dgMsgKanji8357KatakanaJiTex; + +#define dgMsgKanji8358KatakanaSuTex "__OTR__textures/kanji/gMsgKanji8358KatakanaSuTex" +static const ALIGN_ASSET(2) char gMsgKanji8358KatakanaSuTex[] = dgMsgKanji8358KatakanaSuTex; + +#define dgMsgKanji8359KatakanaZuTex "__OTR__textures/kanji/gMsgKanji8359KatakanaZuTex" +static const ALIGN_ASSET(2) char gMsgKanji8359KatakanaZuTex[] = dgMsgKanji8359KatakanaZuTex; + +#define dgMsgKanji835AKatakanaSeTex "__OTR__textures/kanji/gMsgKanji835AKatakanaSeTex" +static const ALIGN_ASSET(2) char gMsgKanji835AKatakanaSeTex[] = dgMsgKanji835AKatakanaSeTex; + +#define dgMsgKanji835BKatakanaZeTex "__OTR__textures/kanji/gMsgKanji835BKatakanaZeTex" +static const ALIGN_ASSET(2) char gMsgKanji835BKatakanaZeTex[] = dgMsgKanji835BKatakanaZeTex; + +#define dgMsgKanji835CKatakanaSoTex "__OTR__textures/kanji/gMsgKanji835CKatakanaSoTex" +static const ALIGN_ASSET(2) char gMsgKanji835CKatakanaSoTex[] = dgMsgKanji835CKatakanaSoTex; + +#define dgMsgKanji835DKatakanaZoTex "__OTR__textures/kanji/gMsgKanji835DKatakanaZoTex" +static const ALIGN_ASSET(2) char gMsgKanji835DKatakanaZoTex[] = dgMsgKanji835DKatakanaZoTex; + +#define dgMsgKanji835EKatakanaTaTex "__OTR__textures/kanji/gMsgKanji835EKatakanaTaTex" +static const ALIGN_ASSET(2) char gMsgKanji835EKatakanaTaTex[] = dgMsgKanji835EKatakanaTaTex; + +#define dgMsgKanji835FKatakanaDaTex "__OTR__textures/kanji/gMsgKanji835FKatakanaDaTex" +static const ALIGN_ASSET(2) char gMsgKanji835FKatakanaDaTex[] = dgMsgKanji835FKatakanaDaTex; + +#define dgMsgKanji8360KatakanaChiTex "__OTR__textures/kanji/gMsgKanji8360KatakanaChiTex" +static const ALIGN_ASSET(2) char gMsgKanji8360KatakanaChiTex[] = dgMsgKanji8360KatakanaChiTex; + +#define dgMsgKanji8361KatakanaDiTex "__OTR__textures/kanji/gMsgKanji8361KatakanaDiTex" +static const ALIGN_ASSET(2) char gMsgKanji8361KatakanaDiTex[] = dgMsgKanji8361KatakanaDiTex; + +#define dgMsgKanji8362KatakanaSmallTsuTex "__OTR__textures/kanji/gMsgKanji8362KatakanaSmallTsuTex" +static const ALIGN_ASSET(2) char gMsgKanji8362KatakanaSmallTsuTex[] = dgMsgKanji8362KatakanaSmallTsuTex; + +#define dgMsgKanji8363KatakanaTsuTex "__OTR__textures/kanji/gMsgKanji8363KatakanaTsuTex" +static const ALIGN_ASSET(2) char gMsgKanji8363KatakanaTsuTex[] = dgMsgKanji8363KatakanaTsuTex; + +#define dgMsgKanji8364KatakanaDuTex "__OTR__textures/kanji/gMsgKanji8364KatakanaDuTex" +static const ALIGN_ASSET(2) char gMsgKanji8364KatakanaDuTex[] = dgMsgKanji8364KatakanaDuTex; + +#define dgMsgKanji8365KatakanaTeTex "__OTR__textures/kanji/gMsgKanji8365KatakanaTeTex" +static const ALIGN_ASSET(2) char gMsgKanji8365KatakanaTeTex[] = dgMsgKanji8365KatakanaTeTex; + +#define dgMsgKanji8366KatakanaDeTex "__OTR__textures/kanji/gMsgKanji8366KatakanaDeTex" +static const ALIGN_ASSET(2) char gMsgKanji8366KatakanaDeTex[] = dgMsgKanji8366KatakanaDeTex; + +#define dgMsgKanji8367KatakanaToTex "__OTR__textures/kanji/gMsgKanji8367KatakanaToTex" +static const ALIGN_ASSET(2) char gMsgKanji8367KatakanaToTex[] = dgMsgKanji8367KatakanaToTex; + +#define dgMsgKanji8368KatakanaDoTex "__OTR__textures/kanji/gMsgKanji8368KatakanaDoTex" +static const ALIGN_ASSET(2) char gMsgKanji8368KatakanaDoTex[] = dgMsgKanji8368KatakanaDoTex; + +#define dgMsgKanji8369KatakanaNaTex "__OTR__textures/kanji/gMsgKanji8369KatakanaNaTex" +static const ALIGN_ASSET(2) char gMsgKanji8369KatakanaNaTex[] = dgMsgKanji8369KatakanaNaTex; + +#define dgMsgKanji836AKatakanaNiTex "__OTR__textures/kanji/gMsgKanji836AKatakanaNiTex" +static const ALIGN_ASSET(2) char gMsgKanji836AKatakanaNiTex[] = dgMsgKanji836AKatakanaNiTex; + +#define dgMsgKanji836BKatakanaNuTex "__OTR__textures/kanji/gMsgKanji836BKatakanaNuTex" +static const ALIGN_ASSET(2) char gMsgKanji836BKatakanaNuTex[] = dgMsgKanji836BKatakanaNuTex; + +#define dgMsgKanji836CKatakanaNeTex "__OTR__textures/kanji/gMsgKanji836CKatakanaNeTex" +static const ALIGN_ASSET(2) char gMsgKanji836CKatakanaNeTex[] = dgMsgKanji836CKatakanaNeTex; + +#define dgMsgKanji836DKatakanaNoTex "__OTR__textures/kanji/gMsgKanji836DKatakanaNoTex" +static const ALIGN_ASSET(2) char gMsgKanji836DKatakanaNoTex[] = dgMsgKanji836DKatakanaNoTex; + +#define dgMsgKanji836EKatakanaHaTex "__OTR__textures/kanji/gMsgKanji836EKatakanaHaTex" +static const ALIGN_ASSET(2) char gMsgKanji836EKatakanaHaTex[] = dgMsgKanji836EKatakanaHaTex; + +#define dgMsgKanji836FKatakanaBaTex "__OTR__textures/kanji/gMsgKanji836FKatakanaBaTex" +static const ALIGN_ASSET(2) char gMsgKanji836FKatakanaBaTex[] = dgMsgKanji836FKatakanaBaTex; + +#define dgMsgKanji8370KatakanaPaTex "__OTR__textures/kanji/gMsgKanji8370KatakanaPaTex" +static const ALIGN_ASSET(2) char gMsgKanji8370KatakanaPaTex[] = dgMsgKanji8370KatakanaPaTex; + +#define dgMsgKanji8371KatakanaHiTex "__OTR__textures/kanji/gMsgKanji8371KatakanaHiTex" +static const ALIGN_ASSET(2) char gMsgKanji8371KatakanaHiTex[] = dgMsgKanji8371KatakanaHiTex; + +#define dgMsgKanji8372KatakanaBiTex "__OTR__textures/kanji/gMsgKanji8372KatakanaBiTex" +static const ALIGN_ASSET(2) char gMsgKanji8372KatakanaBiTex[] = dgMsgKanji8372KatakanaBiTex; + +#define dgMsgKanji8373KatakanaPiTex "__OTR__textures/kanji/gMsgKanji8373KatakanaPiTex" +static const ALIGN_ASSET(2) char gMsgKanji8373KatakanaPiTex[] = dgMsgKanji8373KatakanaPiTex; + +#define dgMsgKanji8374KatakanaFuTex "__OTR__textures/kanji/gMsgKanji8374KatakanaFuTex" +static const ALIGN_ASSET(2) char gMsgKanji8374KatakanaFuTex[] = dgMsgKanji8374KatakanaFuTex; + +#define dgMsgKanji8375KatakanaBuTex "__OTR__textures/kanji/gMsgKanji8375KatakanaBuTex" +static const ALIGN_ASSET(2) char gMsgKanji8375KatakanaBuTex[] = dgMsgKanji8375KatakanaBuTex; + +#define dgMsgKanji8376KatakanaPuTex "__OTR__textures/kanji/gMsgKanji8376KatakanaPuTex" +static const ALIGN_ASSET(2) char gMsgKanji8376KatakanaPuTex[] = dgMsgKanji8376KatakanaPuTex; + +#define dgMsgKanji8377KatakanaHeTex "__OTR__textures/kanji/gMsgKanji8377KatakanaHeTex" +static const ALIGN_ASSET(2) char gMsgKanji8377KatakanaHeTex[] = dgMsgKanji8377KatakanaHeTex; + +#define dgMsgKanji8378KatakanaBeTex "__OTR__textures/kanji/gMsgKanji8378KatakanaBeTex" +static const ALIGN_ASSET(2) char gMsgKanji8378KatakanaBeTex[] = dgMsgKanji8378KatakanaBeTex; + +#define dgMsgKanji8379KatakanaPeTex "__OTR__textures/kanji/gMsgKanji8379KatakanaPeTex" +static const ALIGN_ASSET(2) char gMsgKanji8379KatakanaPeTex[] = dgMsgKanji8379KatakanaPeTex; + +#define dgMsgKanji837AKatakanaHoTex "__OTR__textures/kanji/gMsgKanji837AKatakanaHoTex" +static const ALIGN_ASSET(2) char gMsgKanji837AKatakanaHoTex[] = dgMsgKanji837AKatakanaHoTex; + +#define dgMsgKanji837BKatakanaBoTex "__OTR__textures/kanji/gMsgKanji837BKatakanaBoTex" +static const ALIGN_ASSET(2) char gMsgKanji837BKatakanaBoTex[] = dgMsgKanji837BKatakanaBoTex; + +#define dgMsgKanji837CKatakanaPoTex "__OTR__textures/kanji/gMsgKanji837CKatakanaPoTex" +static const ALIGN_ASSET(2) char gMsgKanji837CKatakanaPoTex[] = dgMsgKanji837CKatakanaPoTex; + +#define dgMsgKanji837DKatakanaMaTex "__OTR__textures/kanji/gMsgKanji837DKatakanaMaTex" +static const ALIGN_ASSET(2) char gMsgKanji837DKatakanaMaTex[] = dgMsgKanji837DKatakanaMaTex; + +#define dgMsgKanji837EKatakanaMiTex "__OTR__textures/kanji/gMsgKanji837EKatakanaMiTex" +static const ALIGN_ASSET(2) char gMsgKanji837EKatakanaMiTex[] = dgMsgKanji837EKatakanaMiTex; + +#define dgMsgKanji8380KatakanaMuTex "__OTR__textures/kanji/gMsgKanji8380KatakanaMuTex" +static const ALIGN_ASSET(2) char gMsgKanji8380KatakanaMuTex[] = dgMsgKanji8380KatakanaMuTex; + +#define dgMsgKanji8381KatakanaMeTex "__OTR__textures/kanji/gMsgKanji8381KatakanaMeTex" +static const ALIGN_ASSET(2) char gMsgKanji8381KatakanaMeTex[] = dgMsgKanji8381KatakanaMeTex; + +#define dgMsgKanji8382KatakanaMoTex "__OTR__textures/kanji/gMsgKanji8382KatakanaMoTex" +static const ALIGN_ASSET(2) char gMsgKanji8382KatakanaMoTex[] = dgMsgKanji8382KatakanaMoTex; + +#define dgMsgKanji8383KatakanaSmallYaTex "__OTR__textures/kanji/gMsgKanji8383KatakanaSmallYaTex" +static const ALIGN_ASSET(2) char gMsgKanji8383KatakanaSmallYaTex[] = dgMsgKanji8383KatakanaSmallYaTex; + +#define dgMsgKanji8384KatakanaYaTex "__OTR__textures/kanji/gMsgKanji8384KatakanaYaTex" +static const ALIGN_ASSET(2) char gMsgKanji8384KatakanaYaTex[] = dgMsgKanji8384KatakanaYaTex; + +#define dgMsgKanji8385KatakanaSmallYuTex "__OTR__textures/kanji/gMsgKanji8385KatakanaSmallYuTex" +static const ALIGN_ASSET(2) char gMsgKanji8385KatakanaSmallYuTex[] = dgMsgKanji8385KatakanaSmallYuTex; + +#define dgMsgKanji8386KatakanaYuTex "__OTR__textures/kanji/gMsgKanji8386KatakanaYuTex" +static const ALIGN_ASSET(2) char gMsgKanji8386KatakanaYuTex[] = dgMsgKanji8386KatakanaYuTex; + +#define dgMsgKanji8387KatakanaSmallYoTex "__OTR__textures/kanji/gMsgKanji8387KatakanaSmallYoTex" +static const ALIGN_ASSET(2) char gMsgKanji8387KatakanaSmallYoTex[] = dgMsgKanji8387KatakanaSmallYoTex; + +#define dgMsgKanji8388KatakanaYoTex "__OTR__textures/kanji/gMsgKanji8388KatakanaYoTex" +static const ALIGN_ASSET(2) char gMsgKanji8388KatakanaYoTex[] = dgMsgKanji8388KatakanaYoTex; + +#define dgMsgKanji8389KatakanaRaTex "__OTR__textures/kanji/gMsgKanji8389KatakanaRaTex" +static const ALIGN_ASSET(2) char gMsgKanji8389KatakanaRaTex[] = dgMsgKanji8389KatakanaRaTex; + +#define dgMsgKanji838AKatakanaRiTex "__OTR__textures/kanji/gMsgKanji838AKatakanaRiTex" +static const ALIGN_ASSET(2) char gMsgKanji838AKatakanaRiTex[] = dgMsgKanji838AKatakanaRiTex; + +#define dgMsgKanji838BKatakanaRuTex "__OTR__textures/kanji/gMsgKanji838BKatakanaRuTex" +static const ALIGN_ASSET(2) char gMsgKanji838BKatakanaRuTex[] = dgMsgKanji838BKatakanaRuTex; + +#define dgMsgKanji838CKatakanaReTex "__OTR__textures/kanji/gMsgKanji838CKatakanaReTex" +static const ALIGN_ASSET(2) char gMsgKanji838CKatakanaReTex[] = dgMsgKanji838CKatakanaReTex; + +#define dgMsgKanji838DKatakanaRoTex "__OTR__textures/kanji/gMsgKanji838DKatakanaRoTex" +static const ALIGN_ASSET(2) char gMsgKanji838DKatakanaRoTex[] = dgMsgKanji838DKatakanaRoTex; + +#define dgMsgKanji838EKatakanaSmallWaTex "__OTR__textures/kanji/gMsgKanji838EKatakanaSmallWaTex" +static const ALIGN_ASSET(2) char gMsgKanji838EKatakanaSmallWaTex[] = dgMsgKanji838EKatakanaSmallWaTex; + +#define dgMsgKanji838FKatakanaWaTex "__OTR__textures/kanji/gMsgKanji838FKatakanaWaTex" +static const ALIGN_ASSET(2) char gMsgKanji838FKatakanaWaTex[] = dgMsgKanji838FKatakanaWaTex; + +#define dgMsgKanji8390KatakanaWiTex "__OTR__textures/kanji/gMsgKanji8390KatakanaWiTex" +static const ALIGN_ASSET(2) char gMsgKanji8390KatakanaWiTex[] = dgMsgKanji8390KatakanaWiTex; + +#define dgMsgKanji8391KatakanaWeTex "__OTR__textures/kanji/gMsgKanji8391KatakanaWeTex" +static const ALIGN_ASSET(2) char gMsgKanji8391KatakanaWeTex[] = dgMsgKanji8391KatakanaWeTex; + +#define dgMsgKanji8392KatakanaWoTex "__OTR__textures/kanji/gMsgKanji8392KatakanaWoTex" +static const ALIGN_ASSET(2) char gMsgKanji8392KatakanaWoTex[] = dgMsgKanji8392KatakanaWoTex; + +#define dgMsgKanji8393KatakanaNTex "__OTR__textures/kanji/gMsgKanji8393KatakanaNTex" +static const ALIGN_ASSET(2) char gMsgKanji8393KatakanaNTex[] = dgMsgKanji8393KatakanaNTex; + +#define dgMsgKanji8394KatakanaVuTex "__OTR__textures/kanji/gMsgKanji8394KatakanaVuTex" +static const ALIGN_ASSET(2) char gMsgKanji8394KatakanaVuTex[] = dgMsgKanji8394KatakanaVuTex; + +#define dgMsgKanji8395KatakanaSmallKaTex "__OTR__textures/kanji/gMsgKanji8395KatakanaSmallKaTex" +static const ALIGN_ASSET(2) char gMsgKanji8395KatakanaSmallKaTex[] = dgMsgKanji8395KatakanaSmallKaTex; + +#define dgMsgKanji8396KatakanaSmallKeTex "__OTR__textures/kanji/gMsgKanji8396KatakanaSmallKeTex" +static const ALIGN_ASSET(2) char gMsgKanji8396KatakanaSmallKeTex[] = dgMsgKanji8396KatakanaSmallKeTex; + +#define dgMsgKanji839FButtonATex "__OTR__textures/kanji/gMsgKanji839FButtonATex" +static const ALIGN_ASSET(2) char gMsgKanji839FButtonATex[] = dgMsgKanji839FButtonATex; + +#define dgMsgKanji83A0ButtonBTex "__OTR__textures/kanji/gMsgKanji83A0ButtonBTex" +static const ALIGN_ASSET(2) char gMsgKanji83A0ButtonBTex[] = dgMsgKanji83A0ButtonBTex; + +#define dgMsgKanji83A1ButtonCTex "__OTR__textures/kanji/gMsgKanji83A1ButtonCTex" +static const ALIGN_ASSET(2) char gMsgKanji83A1ButtonCTex[] = dgMsgKanji83A1ButtonCTex; + +#define dgMsgKanji83A2ButtonLTex "__OTR__textures/kanji/gMsgKanji83A2ButtonLTex" +static const ALIGN_ASSET(2) char gMsgKanji83A2ButtonLTex[] = dgMsgKanji83A2ButtonLTex; + +#define dgMsgKanji83A3ButtonRTex "__OTR__textures/kanji/gMsgKanji83A3ButtonRTex" +static const ALIGN_ASSET(2) char gMsgKanji83A3ButtonRTex[] = dgMsgKanji83A3ButtonRTex; + +#define dgMsgKanji83A4ButtonZTex "__OTR__textures/kanji/gMsgKanji83A4ButtonZTex" +static const ALIGN_ASSET(2) char gMsgKanji83A4ButtonZTex[] = dgMsgKanji83A4ButtonZTex; + +#define dgMsgKanji83A5ButtonCUpTex "__OTR__textures/kanji/gMsgKanji83A5ButtonCUpTex" +static const ALIGN_ASSET(2) char gMsgKanji83A5ButtonCUpTex[] = dgMsgKanji83A5ButtonCUpTex; + +#define dgMsgKanji83A6ButtonCDownTex "__OTR__textures/kanji/gMsgKanji83A6ButtonCDownTex" +static const ALIGN_ASSET(2) char gMsgKanji83A6ButtonCDownTex[] = dgMsgKanji83A6ButtonCDownTex; + +#define dgMsgKanji83A7ButtonCLeftTex "__OTR__textures/kanji/gMsgKanji83A7ButtonCLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji83A7ButtonCLeftTex[] = dgMsgKanji83A7ButtonCLeftTex; + +#define dgMsgKanji83A8ButtonCRightTex "__OTR__textures/kanji/gMsgKanji83A8ButtonCRightTex" +static const ALIGN_ASSET(2) char gMsgKanji83A8ButtonCRightTex[] = dgMsgKanji83A8ButtonCRightTex; + +#define dgMsgKanji83A9ZTargetSignTex "__OTR__textures/kanji/gMsgKanji83A9ZTargetSignTex" +static const ALIGN_ASSET(2) char gMsgKanji83A9ZTargetSignTex[] = dgMsgKanji83A9ZTargetSignTex; + +#define dgMsgKanji83AAControlStickTex "__OTR__textures/kanji/gMsgKanji83AAControlStickTex" +static const ALIGN_ASSET(2) char gMsgKanji83AAControlStickTex[] = dgMsgKanji83AAControlStickTex; + +#define dgMsgKanji83ABGreekCapitalNuTex "__OTR__textures/kanji/gMsgKanji83ABGreekCapitalNuTex" +static const ALIGN_ASSET(2) char gMsgKanji83ABGreekCapitalNuTex[] = dgMsgKanji83ABGreekCapitalNuTex; + +#define dgMsgKanji83ACGreekCapitalXiTex "__OTR__textures/kanji/gMsgKanji83ACGreekCapitalXiTex" +static const ALIGN_ASSET(2) char gMsgKanji83ACGreekCapitalXiTex[] = dgMsgKanji83ACGreekCapitalXiTex; + +#define dgMsgKanji83ADGreekCapitalOmicronTex "__OTR__textures/kanji/gMsgKanji83ADGreekCapitalOmicronTex" +static const ALIGN_ASSET(2) char gMsgKanji83ADGreekCapitalOmicronTex[] = dgMsgKanji83ADGreekCapitalOmicronTex; + +#define dgMsgKanji83AEGreekCapitalPiTex "__OTR__textures/kanji/gMsgKanji83AEGreekCapitalPiTex" +static const ALIGN_ASSET(2) char gMsgKanji83AEGreekCapitalPiTex[] = dgMsgKanji83AEGreekCapitalPiTex; + +#define dgMsgKanji83AFGreekCapitalRhoTex "__OTR__textures/kanji/gMsgKanji83AFGreekCapitalRhoTex" +static const ALIGN_ASSET(2) char gMsgKanji83AFGreekCapitalRhoTex[] = dgMsgKanji83AFGreekCapitalRhoTex; + +#define dgMsgKanji83B0GreekCapitalSigmaTex "__OTR__textures/kanji/gMsgKanji83B0GreekCapitalSigmaTex" +static const ALIGN_ASSET(2) char gMsgKanji83B0GreekCapitalSigmaTex[] = dgMsgKanji83B0GreekCapitalSigmaTex; + +#define dgMsgKanji83B1GreekCapitalTauTex "__OTR__textures/kanji/gMsgKanji83B1GreekCapitalTauTex" +static const ALIGN_ASSET(2) char gMsgKanji83B1GreekCapitalTauTex[] = dgMsgKanji83B1GreekCapitalTauTex; + +#define dgMsgKanji83B2GreekCapitalUpsilonTex "__OTR__textures/kanji/gMsgKanji83B2GreekCapitalUpsilonTex" +static const ALIGN_ASSET(2) char gMsgKanji83B2GreekCapitalUpsilonTex[] = dgMsgKanji83B2GreekCapitalUpsilonTex; + +#define dgMsgKanji83B3GreekCapitalPhiTex "__OTR__textures/kanji/gMsgKanji83B3GreekCapitalPhiTex" +static const ALIGN_ASSET(2) char gMsgKanji83B3GreekCapitalPhiTex[] = dgMsgKanji83B3GreekCapitalPhiTex; + +#define dgMsgKanji83B4GreekCapitalChiTex "__OTR__textures/kanji/gMsgKanji83B4GreekCapitalChiTex" +static const ALIGN_ASSET(2) char gMsgKanji83B4GreekCapitalChiTex[] = dgMsgKanji83B4GreekCapitalChiTex; + +#define dgMsgKanji83B5GreekCapitalPsiTex "__OTR__textures/kanji/gMsgKanji83B5GreekCapitalPsiTex" +static const ALIGN_ASSET(2) char gMsgKanji83B5GreekCapitalPsiTex[] = dgMsgKanji83B5GreekCapitalPsiTex; + +#define dgMsgKanji83B6GreekCapitalOmegaTex "__OTR__textures/kanji/gMsgKanji83B6GreekCapitalOmegaTex" +static const ALIGN_ASSET(2) char gMsgKanji83B6GreekCapitalOmegaTex[] = dgMsgKanji83B6GreekCapitalOmegaTex; + +#define dgMsgKanji83BFGreekLowercaseAlphaTex "__OTR__textures/kanji/gMsgKanji83BFGreekLowercaseAlphaTex" +static const ALIGN_ASSET(2) char gMsgKanji83BFGreekLowercaseAlphaTex[] = dgMsgKanji83BFGreekLowercaseAlphaTex; + +#define dgMsgKanji83C0GreekLowercaseBetaTex "__OTR__textures/kanji/gMsgKanji83C0GreekLowercaseBetaTex" +static const ALIGN_ASSET(2) char gMsgKanji83C0GreekLowercaseBetaTex[] = dgMsgKanji83C0GreekLowercaseBetaTex; + +#define dgMsgKanji83C1GreekLowercaseGammaTex "__OTR__textures/kanji/gMsgKanji83C1GreekLowercaseGammaTex" +static const ALIGN_ASSET(2) char gMsgKanji83C1GreekLowercaseGammaTex[] = dgMsgKanji83C1GreekLowercaseGammaTex; + +#define dgMsgKanji83C2GreekLowercaseDeltaTex "__OTR__textures/kanji/gMsgKanji83C2GreekLowercaseDeltaTex" +static const ALIGN_ASSET(2) char gMsgKanji83C2GreekLowercaseDeltaTex[] = dgMsgKanji83C2GreekLowercaseDeltaTex; + +#define dgMsgKanji83C3GreekLowercaseEpsilonTex "__OTR__textures/kanji/gMsgKanji83C3GreekLowercaseEpsilonTex" +static const ALIGN_ASSET(2) char gMsgKanji83C3GreekLowercaseEpsilonTex[] = dgMsgKanji83C3GreekLowercaseEpsilonTex; + +#define dgMsgKanji83C4GreekLowercaseZetaTex "__OTR__textures/kanji/gMsgKanji83C4GreekLowercaseZetaTex" +static const ALIGN_ASSET(2) char gMsgKanji83C4GreekLowercaseZetaTex[] = dgMsgKanji83C4GreekLowercaseZetaTex; + +#define dgMsgKanji83C5GreekLowercaseEtaTex "__OTR__textures/kanji/gMsgKanji83C5GreekLowercaseEtaTex" +static const ALIGN_ASSET(2) char gMsgKanji83C5GreekLowercaseEtaTex[] = dgMsgKanji83C5GreekLowercaseEtaTex; + +#define dgMsgKanji83C6GreekLowercaseThetaTex "__OTR__textures/kanji/gMsgKanji83C6GreekLowercaseThetaTex" +static const ALIGN_ASSET(2) char gMsgKanji83C6GreekLowercaseThetaTex[] = dgMsgKanji83C6GreekLowercaseThetaTex; + +#define dgMsgKanji83C7GreekLowercaseIotaTex "__OTR__textures/kanji/gMsgKanji83C7GreekLowercaseIotaTex" +static const ALIGN_ASSET(2) char gMsgKanji83C7GreekLowercaseIotaTex[] = dgMsgKanji83C7GreekLowercaseIotaTex; + +#define dgMsgKanji83C8GreekLowercaseKappaTex "__OTR__textures/kanji/gMsgKanji83C8GreekLowercaseKappaTex" +static const ALIGN_ASSET(2) char gMsgKanji83C8GreekLowercaseKappaTex[] = dgMsgKanji83C8GreekLowercaseKappaTex; + +#define dgMsgKanji83C9GreekLowercaseLamdaTex "__OTR__textures/kanji/gMsgKanji83C9GreekLowercaseLamdaTex" +static const ALIGN_ASSET(2) char gMsgKanji83C9GreekLowercaseLamdaTex[] = dgMsgKanji83C9GreekLowercaseLamdaTex; + +#define dgMsgKanji83CAGreekLowercaseMuTex "__OTR__textures/kanji/gMsgKanji83CAGreekLowercaseMuTex" +static const ALIGN_ASSET(2) char gMsgKanji83CAGreekLowercaseMuTex[] = dgMsgKanji83CAGreekLowercaseMuTex; + +#define dgMsgKanji83CBGreekLowercaseNuTex "__OTR__textures/kanji/gMsgKanji83CBGreekLowercaseNuTex" +static const ALIGN_ASSET(2) char gMsgKanji83CBGreekLowercaseNuTex[] = dgMsgKanji83CBGreekLowercaseNuTex; + +#define dgMsgKanji83CCGreekLowercaseXiTex "__OTR__textures/kanji/gMsgKanji83CCGreekLowercaseXiTex" +static const ALIGN_ASSET(2) char gMsgKanji83CCGreekLowercaseXiTex[] = dgMsgKanji83CCGreekLowercaseXiTex; + +#define dgMsgKanji83CDGreekLowercaseOmicronTex "__OTR__textures/kanji/gMsgKanji83CDGreekLowercaseOmicronTex" +static const ALIGN_ASSET(2) char gMsgKanji83CDGreekLowercaseOmicronTex[] = dgMsgKanji83CDGreekLowercaseOmicronTex; + +#define dgMsgKanji83CEGreekLowercasePiTex "__OTR__textures/kanji/gMsgKanji83CEGreekLowercasePiTex" +static const ALIGN_ASSET(2) char gMsgKanji83CEGreekLowercasePiTex[] = dgMsgKanji83CEGreekLowercasePiTex; + +#define dgMsgKanji83CFGreekLowercaseRhoTex "__OTR__textures/kanji/gMsgKanji83CFGreekLowercaseRhoTex" +static const ALIGN_ASSET(2) char gMsgKanji83CFGreekLowercaseRhoTex[] = dgMsgKanji83CFGreekLowercaseRhoTex; + +#define dgMsgKanji83D0GreekLowercaseSigmaTex "__OTR__textures/kanji/gMsgKanji83D0GreekLowercaseSigmaTex" +static const ALIGN_ASSET(2) char gMsgKanji83D0GreekLowercaseSigmaTex[] = dgMsgKanji83D0GreekLowercaseSigmaTex; + +#define dgMsgKanji83D1GreekLowercaseTauTex "__OTR__textures/kanji/gMsgKanji83D1GreekLowercaseTauTex" +static const ALIGN_ASSET(2) char gMsgKanji83D1GreekLowercaseTauTex[] = dgMsgKanji83D1GreekLowercaseTauTex; + +#define dgMsgKanji83D2GreekLowercaseUpsilonTex "__OTR__textures/kanji/gMsgKanji83D2GreekLowercaseUpsilonTex" +static const ALIGN_ASSET(2) char gMsgKanji83D2GreekLowercaseUpsilonTex[] = dgMsgKanji83D2GreekLowercaseUpsilonTex; + +#define dgMsgKanji83D3GreekLowercasePhiTex "__OTR__textures/kanji/gMsgKanji83D3GreekLowercasePhiTex" +static const ALIGN_ASSET(2) char gMsgKanji83D3GreekLowercasePhiTex[] = dgMsgKanji83D3GreekLowercasePhiTex; + +#define dgMsgKanji83D4GreekLowercaseChiTex "__OTR__textures/kanji/gMsgKanji83D4GreekLowercaseChiTex" +static const ALIGN_ASSET(2) char gMsgKanji83D4GreekLowercaseChiTex[] = dgMsgKanji83D4GreekLowercaseChiTex; + +#define dgMsgKanji83D5GreekLowercasePsiTex "__OTR__textures/kanji/gMsgKanji83D5GreekLowercasePsiTex" +static const ALIGN_ASSET(2) char gMsgKanji83D5GreekLowercasePsiTex[] = dgMsgKanji83D5GreekLowercasePsiTex; + +#define dgMsgKanji83D6GreekLowercaseOmegaTex "__OTR__textures/kanji/gMsgKanji83D6GreekLowercaseOmegaTex" +static const ALIGN_ASSET(2) char gMsgKanji83D6GreekLowercaseOmegaTex[] = dgMsgKanji83D6GreekLowercaseOmegaTex; + +#define dgMsgKanji83D7EmptyTex "__OTR__textures/kanji/gMsgKanji83D7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji83D7EmptyTex[] = dgMsgKanji83D7EmptyTex; + +#define dgMsgKanji8440HylianATex "__OTR__textures/kanji/gMsgKanji8440HylianATex" +static const ALIGN_ASSET(2) char gMsgKanji8440HylianATex[] = dgMsgKanji8440HylianATex; + +#define dgMsgKanji8441HylianITex "__OTR__textures/kanji/gMsgKanji8441HylianITex" +static const ALIGN_ASSET(2) char gMsgKanji8441HylianITex[] = dgMsgKanji8441HylianITex; + +#define dgMsgKanji8442HylianUTex "__OTR__textures/kanji/gMsgKanji8442HylianUTex" +static const ALIGN_ASSET(2) char gMsgKanji8442HylianUTex[] = dgMsgKanji8442HylianUTex; + +#define dgMsgKanji8443HylianETex "__OTR__textures/kanji/gMsgKanji8443HylianETex" +static const ALIGN_ASSET(2) char gMsgKanji8443HylianETex[] = dgMsgKanji8443HylianETex; + +#define dgMsgKanji8444HylianOTex "__OTR__textures/kanji/gMsgKanji8444HylianOTex" +static const ALIGN_ASSET(2) char gMsgKanji8444HylianOTex[] = dgMsgKanji8444HylianOTex; + +#define dgMsgKanji8445HylianKaTex "__OTR__textures/kanji/gMsgKanji8445HylianKaTex" +static const ALIGN_ASSET(2) char gMsgKanji8445HylianKaTex[] = dgMsgKanji8445HylianKaTex; + +#define dgMsgKanji8446HylianKiTex "__OTR__textures/kanji/gMsgKanji8446HylianKiTex" +static const ALIGN_ASSET(2) char gMsgKanji8446HylianKiTex[] = dgMsgKanji8446HylianKiTex; + +#define dgMsgKanji8447HylianKuTex "__OTR__textures/kanji/gMsgKanji8447HylianKuTex" +static const ALIGN_ASSET(2) char gMsgKanji8447HylianKuTex[] = dgMsgKanji8447HylianKuTex; + +#define dgMsgKanji8448HylianKeTex "__OTR__textures/kanji/gMsgKanji8448HylianKeTex" +static const ALIGN_ASSET(2) char gMsgKanji8448HylianKeTex[] = dgMsgKanji8448HylianKeTex; + +#define dgMsgKanji8449HylianKoTex "__OTR__textures/kanji/gMsgKanji8449HylianKoTex" +static const ALIGN_ASSET(2) char gMsgKanji8449HylianKoTex[] = dgMsgKanji8449HylianKoTex; + +#define dgMsgKanji844AHylianSaTex "__OTR__textures/kanji/gMsgKanji844AHylianSaTex" +static const ALIGN_ASSET(2) char gMsgKanji844AHylianSaTex[] = dgMsgKanji844AHylianSaTex; + +#define dgMsgKanji844BHylianShiTex "__OTR__textures/kanji/gMsgKanji844BHylianShiTex" +static const ALIGN_ASSET(2) char gMsgKanji844BHylianShiTex[] = dgMsgKanji844BHylianShiTex; + +#define dgMsgKanji844CHylianSuTex "__OTR__textures/kanji/gMsgKanji844CHylianSuTex" +static const ALIGN_ASSET(2) char gMsgKanji844CHylianSuTex[] = dgMsgKanji844CHylianSuTex; + +#define dgMsgKanji844DHylianSeTex "__OTR__textures/kanji/gMsgKanji844DHylianSeTex" +static const ALIGN_ASSET(2) char gMsgKanji844DHylianSeTex[] = dgMsgKanji844DHylianSeTex; + +#define dgMsgKanji844EHylianSoTex "__OTR__textures/kanji/gMsgKanji844EHylianSoTex" +static const ALIGN_ASSET(2) char gMsgKanji844EHylianSoTex[] = dgMsgKanji844EHylianSoTex; + +#define dgMsgKanji844FHylianTaTex "__OTR__textures/kanji/gMsgKanji844FHylianTaTex" +static const ALIGN_ASSET(2) char gMsgKanji844FHylianTaTex[] = dgMsgKanji844FHylianTaTex; + +#define dgMsgKanji8450HylianChiTex "__OTR__textures/kanji/gMsgKanji8450HylianChiTex" +static const ALIGN_ASSET(2) char gMsgKanji8450HylianChiTex[] = dgMsgKanji8450HylianChiTex; + +#define dgMsgKanji8451HylianTsuTex "__OTR__textures/kanji/gMsgKanji8451HylianTsuTex" +static const ALIGN_ASSET(2) char gMsgKanji8451HylianTsuTex[] = dgMsgKanji8451HylianTsuTex; + +#define dgMsgKanji8452HylianTeTex "__OTR__textures/kanji/gMsgKanji8452HylianTeTex" +static const ALIGN_ASSET(2) char gMsgKanji8452HylianTeTex[] = dgMsgKanji8452HylianTeTex; + +#define dgMsgKanji8453HylianToTex "__OTR__textures/kanji/gMsgKanji8453HylianToTex" +static const ALIGN_ASSET(2) char gMsgKanji8453HylianToTex[] = dgMsgKanji8453HylianToTex; + +#define dgMsgKanji8454HylianNaTex "__OTR__textures/kanji/gMsgKanji8454HylianNaTex" +static const ALIGN_ASSET(2) char gMsgKanji8454HylianNaTex[] = dgMsgKanji8454HylianNaTex; + +#define dgMsgKanji8455HylianNiTex "__OTR__textures/kanji/gMsgKanji8455HylianNiTex" +static const ALIGN_ASSET(2) char gMsgKanji8455HylianNiTex[] = dgMsgKanji8455HylianNiTex; + +#define dgMsgKanji8456HylianNuTex "__OTR__textures/kanji/gMsgKanji8456HylianNuTex" +static const ALIGN_ASSET(2) char gMsgKanji8456HylianNuTex[] = dgMsgKanji8456HylianNuTex; + +#define dgMsgKanji8457HylianNeTex "__OTR__textures/kanji/gMsgKanji8457HylianNeTex" +static const ALIGN_ASSET(2) char gMsgKanji8457HylianNeTex[] = dgMsgKanji8457HylianNeTex; + +#define dgMsgKanji8458HylianNoTex "__OTR__textures/kanji/gMsgKanji8458HylianNoTex" +static const ALIGN_ASSET(2) char gMsgKanji8458HylianNoTex[] = dgMsgKanji8458HylianNoTex; + +#define dgMsgKanji8459HylianHaTex "__OTR__textures/kanji/gMsgKanji8459HylianHaTex" +static const ALIGN_ASSET(2) char gMsgKanji8459HylianHaTex[] = dgMsgKanji8459HylianHaTex; + +#define dgMsgKanji845AHylianHiTex "__OTR__textures/kanji/gMsgKanji845AHylianHiTex" +static const ALIGN_ASSET(2) char gMsgKanji845AHylianHiTex[] = dgMsgKanji845AHylianHiTex; + +#define dgMsgKanji845BHylianFuTex "__OTR__textures/kanji/gMsgKanji845BHylianFuTex" +static const ALIGN_ASSET(2) char gMsgKanji845BHylianFuTex[] = dgMsgKanji845BHylianFuTex; + +#define dgMsgKanji845CHylianHeTex "__OTR__textures/kanji/gMsgKanji845CHylianHeTex" +static const ALIGN_ASSET(2) char gMsgKanji845CHylianHeTex[] = dgMsgKanji845CHylianHeTex; + +#define dgMsgKanji845DHylianHoTex "__OTR__textures/kanji/gMsgKanji845DHylianHoTex" +static const ALIGN_ASSET(2) char gMsgKanji845DHylianHoTex[] = dgMsgKanji845DHylianHoTex; + +#define dgMsgKanji845EHylianMaTex "__OTR__textures/kanji/gMsgKanji845EHylianMaTex" +static const ALIGN_ASSET(2) char gMsgKanji845EHylianMaTex[] = dgMsgKanji845EHylianMaTex; + +#define dgMsgKanji845FHylianMiTex "__OTR__textures/kanji/gMsgKanji845FHylianMiTex" +static const ALIGN_ASSET(2) char gMsgKanji845FHylianMiTex[] = dgMsgKanji845FHylianMiTex; + +#define dgMsgKanji8460HylianMuTex "__OTR__textures/kanji/gMsgKanji8460HylianMuTex" +static const ALIGN_ASSET(2) char gMsgKanji8460HylianMuTex[] = dgMsgKanji8460HylianMuTex; + +#define dgMsgKanji8470HylianMeTex "__OTR__textures/kanji/gMsgKanji8470HylianMeTex" +static const ALIGN_ASSET(2) char gMsgKanji8470HylianMeTex[] = dgMsgKanji8470HylianMeTex; + +#define dgMsgKanji8471HylianMoTex "__OTR__textures/kanji/gMsgKanji8471HylianMoTex" +static const ALIGN_ASSET(2) char gMsgKanji8471HylianMoTex[] = dgMsgKanji8471HylianMoTex; + +#define dgMsgKanji8472HylianYaTex "__OTR__textures/kanji/gMsgKanji8472HylianYaTex" +static const ALIGN_ASSET(2) char gMsgKanji8472HylianYaTex[] = dgMsgKanji8472HylianYaTex; + +#define dgMsgKanji8473HylianYuTex "__OTR__textures/kanji/gMsgKanji8473HylianYuTex" +static const ALIGN_ASSET(2) char gMsgKanji8473HylianYuTex[] = dgMsgKanji8473HylianYuTex; + +#define dgMsgKanji8474HylianYoTex "__OTR__textures/kanji/gMsgKanji8474HylianYoTex" +static const ALIGN_ASSET(2) char gMsgKanji8474HylianYoTex[] = dgMsgKanji8474HylianYoTex; + +#define dgMsgKanji8475HylianRaTex "__OTR__textures/kanji/gMsgKanji8475HylianRaTex" +static const ALIGN_ASSET(2) char gMsgKanji8475HylianRaTex[] = dgMsgKanji8475HylianRaTex; + +#define dgMsgKanji8476HylianRiTex "__OTR__textures/kanji/gMsgKanji8476HylianRiTex" +static const ALIGN_ASSET(2) char gMsgKanji8476HylianRiTex[] = dgMsgKanji8476HylianRiTex; + +#define dgMsgKanji8477HylianRuTex "__OTR__textures/kanji/gMsgKanji8477HylianRuTex" +static const ALIGN_ASSET(2) char gMsgKanji8477HylianRuTex[] = dgMsgKanji8477HylianRuTex; + +#define dgMsgKanji8478HylianReTex "__OTR__textures/kanji/gMsgKanji8478HylianReTex" +static const ALIGN_ASSET(2) char gMsgKanji8478HylianReTex[] = dgMsgKanji8478HylianReTex; + +#define dgMsgKanji8479HylianRoTex "__OTR__textures/kanji/gMsgKanji8479HylianRoTex" +static const ALIGN_ASSET(2) char gMsgKanji8479HylianRoTex[] = dgMsgKanji8479HylianRoTex; + +#define dgMsgKanji847AHylianWaTex "__OTR__textures/kanji/gMsgKanji847AHylianWaTex" +static const ALIGN_ASSET(2) char gMsgKanji847AHylianWaTex[] = dgMsgKanji847AHylianWaTex; + +#define dgMsgKanji847BHylianWoTex "__OTR__textures/kanji/gMsgKanji847BHylianWoTex" +static const ALIGN_ASSET(2) char gMsgKanji847BHylianWoTex[] = dgMsgKanji847BHylianWoTex; + +#define dgMsgKanji847CHylianNTex "__OTR__textures/kanji/gMsgKanji847CHylianNTex" +static const ALIGN_ASSET(2) char gMsgKanji847CHylianNTex[] = dgMsgKanji847CHylianNTex; + +#define dgMsgKanji847DHylianToutenTex "__OTR__textures/kanji/gMsgKanji847DHylianToutenTex" +static const ALIGN_ASSET(2) char gMsgKanji847DHylianToutenTex[] = dgMsgKanji847DHylianToutenTex; + +#define dgMsgKanji847EHylianKutenTex "__OTR__textures/kanji/gMsgKanji847EHylianKutenTex" +static const ALIGN_ASSET(2) char gMsgKanji847EHylianKutenTex[] = dgMsgKanji847EHylianKutenTex; + +#define dgMsgKanji8480CyrillicLowercaseOTex "__OTR__textures/kanji/gMsgKanji8480CyrillicLowercaseOTex" +static const ALIGN_ASSET(2) char gMsgKanji8480CyrillicLowercaseOTex[] = dgMsgKanji8480CyrillicLowercaseOTex; + +#define dgMsgKanji8481CyrillicLowercasePeTex "__OTR__textures/kanji/gMsgKanji8481CyrillicLowercasePeTex" +static const ALIGN_ASSET(2) char gMsgKanji8481CyrillicLowercasePeTex[] = dgMsgKanji8481CyrillicLowercasePeTex; + +#define dgMsgKanji8482CyrillicLowercaseErTex "__OTR__textures/kanji/gMsgKanji8482CyrillicLowercaseErTex" +static const ALIGN_ASSET(2) char gMsgKanji8482CyrillicLowercaseErTex[] = dgMsgKanji8482CyrillicLowercaseErTex; + +#define dgMsgKanji8483CyrillicLowercaseEsTex "__OTR__textures/kanji/gMsgKanji8483CyrillicLowercaseEsTex" +static const ALIGN_ASSET(2) char gMsgKanji8483CyrillicLowercaseEsTex[] = dgMsgKanji8483CyrillicLowercaseEsTex; + +#define dgMsgKanji8484CyrillicLowercaseTeTex "__OTR__textures/kanji/gMsgKanji8484CyrillicLowercaseTeTex" +static const ALIGN_ASSET(2) char gMsgKanji8484CyrillicLowercaseTeTex[] = dgMsgKanji8484CyrillicLowercaseTeTex; + +#define dgMsgKanji8485CyrillicLowercaseUTex "__OTR__textures/kanji/gMsgKanji8485CyrillicLowercaseUTex" +static const ALIGN_ASSET(2) char gMsgKanji8485CyrillicLowercaseUTex[] = dgMsgKanji8485CyrillicLowercaseUTex; + +#define dgMsgKanji8486CyrillicLowercaseEfTex "__OTR__textures/kanji/gMsgKanji8486CyrillicLowercaseEfTex" +static const ALIGN_ASSET(2) char gMsgKanji8486CyrillicLowercaseEfTex[] = dgMsgKanji8486CyrillicLowercaseEfTex; + +#define dgMsgKanji8487CyrillicLowercaseHaTex "__OTR__textures/kanji/gMsgKanji8487CyrillicLowercaseHaTex" +static const ALIGN_ASSET(2) char gMsgKanji8487CyrillicLowercaseHaTex[] = dgMsgKanji8487CyrillicLowercaseHaTex; + +#define dgMsgKanji8488CyrillicLowercaseTseTex "__OTR__textures/kanji/gMsgKanji8488CyrillicLowercaseTseTex" +static const ALIGN_ASSET(2) char gMsgKanji8488CyrillicLowercaseTseTex[] = dgMsgKanji8488CyrillicLowercaseTseTex; + +#define dgMsgKanji8489CyrillicLowercaseCheTex "__OTR__textures/kanji/gMsgKanji8489CyrillicLowercaseCheTex" +static const ALIGN_ASSET(2) char gMsgKanji8489CyrillicLowercaseCheTex[] = dgMsgKanji8489CyrillicLowercaseCheTex; + +#define dgMsgKanji848ACyrillicLowercaseShaTex "__OTR__textures/kanji/gMsgKanji848ACyrillicLowercaseShaTex" +static const ALIGN_ASSET(2) char gMsgKanji848ACyrillicLowercaseShaTex[] = dgMsgKanji848ACyrillicLowercaseShaTex; + +#define dgMsgKanji848BCyrillicLowercaseShchaTex "__OTR__textures/kanji/gMsgKanji848BCyrillicLowercaseShchaTex" +static const ALIGN_ASSET(2) char gMsgKanji848BCyrillicLowercaseShchaTex[] = dgMsgKanji848BCyrillicLowercaseShchaTex; + +#define dgMsgKanji848CCyrillicLowercaseHardSignTex "__OTR__textures/kanji/gMsgKanji848CCyrillicLowercaseHardSignTex" +static const ALIGN_ASSET(2) char gMsgKanji848CCyrillicLowercaseHardSignTex[] = dgMsgKanji848CCyrillicLowercaseHardSignTex; + +#define dgMsgKanji848DCyrillicLowercaseYeruTex "__OTR__textures/kanji/gMsgKanji848DCyrillicLowercaseYeruTex" +static const ALIGN_ASSET(2) char gMsgKanji848DCyrillicLowercaseYeruTex[] = dgMsgKanji848DCyrillicLowercaseYeruTex; + +#define dgMsgKanji848ECyrillicLowercaseSoftSignTex "__OTR__textures/kanji/gMsgKanji848ECyrillicLowercaseSoftSignTex" +static const ALIGN_ASSET(2) char gMsgKanji848ECyrillicLowercaseSoftSignTex[] = dgMsgKanji848ECyrillicLowercaseSoftSignTex; + +#define dgMsgKanji848FCyrillicLowercaseETex "__OTR__textures/kanji/gMsgKanji848FCyrillicLowercaseETex" +static const ALIGN_ASSET(2) char gMsgKanji848FCyrillicLowercaseETex[] = dgMsgKanji848FCyrillicLowercaseETex; + +#define dgMsgKanji8490CyrillicLowercaseYuTex "__OTR__textures/kanji/gMsgKanji8490CyrillicLowercaseYuTex" +static const ALIGN_ASSET(2) char gMsgKanji8490CyrillicLowercaseYuTex[] = dgMsgKanji8490CyrillicLowercaseYuTex; + +#define dgMsgKanji8491CyrillicLowercaseYaTex "__OTR__textures/kanji/gMsgKanji8491CyrillicLowercaseYaTex" +static const ALIGN_ASSET(2) char gMsgKanji8491CyrillicLowercaseYaTex[] = dgMsgKanji8491CyrillicLowercaseYaTex; + +#define dgMsgKanji849FBoxThinHorizontalTex "__OTR__textures/kanji/gMsgKanji849FBoxThinHorizontalTex" +static const ALIGN_ASSET(2) char gMsgKanji849FBoxThinHorizontalTex[] = dgMsgKanji849FBoxThinHorizontalTex; + +#define dgMsgKanji84A0BoxThinVerticalTex "__OTR__textures/kanji/gMsgKanji84A0BoxThinVerticalTex" +static const ALIGN_ASSET(2) char gMsgKanji84A0BoxThinVerticalTex[] = dgMsgKanji84A0BoxThinVerticalTex; + +#define dgMsgKanji84A1BoxThinTopLeftTex "__OTR__textures/kanji/gMsgKanji84A1BoxThinTopLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji84A1BoxThinTopLeftTex[] = dgMsgKanji84A1BoxThinTopLeftTex; + +#define dgMsgKanji84A2BoxThinTopRightTex "__OTR__textures/kanji/gMsgKanji84A2BoxThinTopRightTex" +static const ALIGN_ASSET(2) char gMsgKanji84A2BoxThinTopRightTex[] = dgMsgKanji84A2BoxThinTopRightTex; + +#define dgMsgKanji84A3BoxThinBottomRightTex "__OTR__textures/kanji/gMsgKanji84A3BoxThinBottomRightTex" +static const ALIGN_ASSET(2) char gMsgKanji84A3BoxThinBottomRightTex[] = dgMsgKanji84A3BoxThinBottomRightTex; + +#define dgMsgKanji84A4BoxThinBottomLeftTex "__OTR__textures/kanji/gMsgKanji84A4BoxThinBottomLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji84A4BoxThinBottomLeftTex[] = dgMsgKanji84A4BoxThinBottomLeftTex; + +#define dgMsgKanji84A5BoxThinLeftTex "__OTR__textures/kanji/gMsgKanji84A5BoxThinLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji84A5BoxThinLeftTex[] = dgMsgKanji84A5BoxThinLeftTex; + +#define dgMsgKanji84A6BoxThinTopTex "__OTR__textures/kanji/gMsgKanji84A6BoxThinTopTex" +static const ALIGN_ASSET(2) char gMsgKanji84A6BoxThinTopTex[] = dgMsgKanji84A6BoxThinTopTex; + +#define dgMsgKanji84A7BoxThinRightTex "__OTR__textures/kanji/gMsgKanji84A7BoxThinRightTex" +static const ALIGN_ASSET(2) char gMsgKanji84A7BoxThinRightTex[] = dgMsgKanji84A7BoxThinRightTex; + +#define dgMsgKanji84A8BoxThinBottomTex "__OTR__textures/kanji/gMsgKanji84A8BoxThinBottomTex" +static const ALIGN_ASSET(2) char gMsgKanji84A8BoxThinBottomTex[] = dgMsgKanji84A8BoxThinBottomTex; + +#define dgMsgKanji84A9BoxThinCenterTex "__OTR__textures/kanji/gMsgKanji84A9BoxThinCenterTex" +static const ALIGN_ASSET(2) char gMsgKanji84A9BoxThinCenterTex[] = dgMsgKanji84A9BoxThinCenterTex; + +#define dgMsgKanji84AABoxThickHorizontalTex "__OTR__textures/kanji/gMsgKanji84AABoxThickHorizontalTex" +static const ALIGN_ASSET(2) char gMsgKanji84AABoxThickHorizontalTex[] = dgMsgKanji84AABoxThickHorizontalTex; + +#define dgMsgKanji84ABBoxThickVerticalTex "__OTR__textures/kanji/gMsgKanji84ABBoxThickVerticalTex" +static const ALIGN_ASSET(2) char gMsgKanji84ABBoxThickVerticalTex[] = dgMsgKanji84ABBoxThickVerticalTex; + +#define dgMsgKanji84ACBoxThickTopLeftTex "__OTR__textures/kanji/gMsgKanji84ACBoxThickTopLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji84ACBoxThickTopLeftTex[] = dgMsgKanji84ACBoxThickTopLeftTex; + +#define dgMsgKanji84ADBoxThickTopRightTex "__OTR__textures/kanji/gMsgKanji84ADBoxThickTopRightTex" +static const ALIGN_ASSET(2) char gMsgKanji84ADBoxThickTopRightTex[] = dgMsgKanji84ADBoxThickTopRightTex; + +#define dgMsgKanji84AEBoxThickBottomRightTex "__OTR__textures/kanji/gMsgKanji84AEBoxThickBottomRightTex" +static const ALIGN_ASSET(2) char gMsgKanji84AEBoxThickBottomRightTex[] = dgMsgKanji84AEBoxThickBottomRightTex; + +#define dgMsgKanji84AFBoxThickBottomLeftTex "__OTR__textures/kanji/gMsgKanji84AFBoxThickBottomLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji84AFBoxThickBottomLeftTex[] = dgMsgKanji84AFBoxThickBottomLeftTex; + +#define dgMsgKanji84B0BoxThickLeftTex "__OTR__textures/kanji/gMsgKanji84B0BoxThickLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji84B0BoxThickLeftTex[] = dgMsgKanji84B0BoxThickLeftTex; + +#define dgMsgKanji84B1BoxThickTopTex "__OTR__textures/kanji/gMsgKanji84B1BoxThickTopTex" +static const ALIGN_ASSET(2) char gMsgKanji84B1BoxThickTopTex[] = dgMsgKanji84B1BoxThickTopTex; + +#define dgMsgKanji84B2BoxThickRightTex "__OTR__textures/kanji/gMsgKanji84B2BoxThickRightTex" +static const ALIGN_ASSET(2) char gMsgKanji84B2BoxThickRightTex[] = dgMsgKanji84B2BoxThickRightTex; + +#define dgMsgKanji84B3BoxThickBottomTex "__OTR__textures/kanji/gMsgKanji84B3BoxThickBottomTex" +static const ALIGN_ASSET(2) char gMsgKanji84B3BoxThickBottomTex[] = dgMsgKanji84B3BoxThickBottomTex; + +#define dgMsgKanji84B4BoxThickCenterTex "__OTR__textures/kanji/gMsgKanji84B4BoxThickCenterTex" +static const ALIGN_ASSET(2) char gMsgKanji84B4BoxThickCenterTex[] = dgMsgKanji84B4BoxThickCenterTex; + +#define dgMsgKanji84B5BoxVertThickHorizThinLeftTex "__OTR__textures/kanji/gMsgKanji84B5BoxVertThickHorizThinLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji84B5BoxVertThickHorizThinLeftTex[] = dgMsgKanji84B5BoxVertThickHorizThinLeftTex; + +#define dgMsgKanji84B6BoxVertThinHorizThickTopTex "__OTR__textures/kanji/gMsgKanji84B6BoxVertThinHorizThickTopTex" +static const ALIGN_ASSET(2) char gMsgKanji84B6BoxVertThinHorizThickTopTex[] = dgMsgKanji84B6BoxVertThinHorizThickTopTex; + +#define dgMsgKanji84B7BoxVertThickHorizThinRightTex "__OTR__textures/kanji/gMsgKanji84B7BoxVertThickHorizThinRightTex" +static const ALIGN_ASSET(2) char gMsgKanji84B7BoxVertThickHorizThinRightTex[] = dgMsgKanji84B7BoxVertThickHorizThinRightTex; + +#define dgMsgKanji84B8BoxVertThinHorizThickBottomTex "__OTR__textures/kanji/gMsgKanji84B8BoxVertThinHorizThickBottomTex" +static const ALIGN_ASSET(2) char gMsgKanji84B8BoxVertThinHorizThickBottomTex[] = dgMsgKanji84B8BoxVertThinHorizThickBottomTex; + +#define dgMsgKanji84B9BoxVertThinHorizThickCenterTex "__OTR__textures/kanji/gMsgKanji84B9BoxVertThinHorizThickCenterTex" +static const ALIGN_ASSET(2) char gMsgKanji84B9BoxVertThinHorizThickCenterTex[] = dgMsgKanji84B9BoxVertThinHorizThickCenterTex; + +#define dgMsgKanji84BABoxVertThinHorizThickLeftTex "__OTR__textures/kanji/gMsgKanji84BABoxVertThinHorizThickLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji84BABoxVertThinHorizThickLeftTex[] = dgMsgKanji84BABoxVertThinHorizThickLeftTex; + +#define dgMsgKanji84BBBoxVertThickHorizThinTopTex "__OTR__textures/kanji/gMsgKanji84BBBoxVertThickHorizThinTopTex" +static const ALIGN_ASSET(2) char gMsgKanji84BBBoxVertThickHorizThinTopTex[] = dgMsgKanji84BBBoxVertThickHorizThinTopTex; + +#define dgMsgKanji84BCBoxVertThinHorizThickRightTex "__OTR__textures/kanji/gMsgKanji84BCBoxVertThinHorizThickRightTex" +static const ALIGN_ASSET(2) char gMsgKanji84BCBoxVertThinHorizThickRightTex[] = dgMsgKanji84BCBoxVertThinHorizThickRightTex; + +#define dgMsgKanji84BDBoxVertThickHorizThinBottomTex "__OTR__textures/kanji/gMsgKanji84BDBoxVertThickHorizThinBottomTex" +static const ALIGN_ASSET(2) char gMsgKanji84BDBoxVertThickHorizThinBottomTex[] = dgMsgKanji84BDBoxVertThickHorizThinBottomTex; + +#define dgMsgKanji84BEBoxVertThickHorizThinCenterTex "__OTR__textures/kanji/gMsgKanji84BEBoxVertThickHorizThinCenterTex" +static const ALIGN_ASSET(2) char gMsgKanji84BEBoxVertThickHorizThinCenterTex[] = dgMsgKanji84BEBoxVertThickHorizThinCenterTex; + +#define dgMsgKanji84BFEmptyTex "__OTR__textures/kanji/gMsgKanji84BFEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji84BFEmptyTex[] = dgMsgKanji84BFEmptyTex; + +#define dgMsgKanji8540HalfwidthExclamationMarkTex "__OTR__textures/kanji/gMsgKanji8540HalfwidthExclamationMarkTex" +static const ALIGN_ASSET(2) char gMsgKanji8540HalfwidthExclamationMarkTex[] = dgMsgKanji8540HalfwidthExclamationMarkTex; + +#define dgMsgKanji8541HalfwidthQuotationMarkTex "__OTR__textures/kanji/gMsgKanji8541HalfwidthQuotationMarkTex" +static const ALIGN_ASSET(2) char gMsgKanji8541HalfwidthQuotationMarkTex[] = dgMsgKanji8541HalfwidthQuotationMarkTex; + +#define dgMsgKanji8542HalfwidthNumberSignTex "__OTR__textures/kanji/gMsgKanji8542HalfwidthNumberSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8542HalfwidthNumberSignTex[] = dgMsgKanji8542HalfwidthNumberSignTex; + +#define dgMsgKanji8543HalfwidthDollarSignTex "__OTR__textures/kanji/gMsgKanji8543HalfwidthDollarSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8543HalfwidthDollarSignTex[] = dgMsgKanji8543HalfwidthDollarSignTex; + +#define dgMsgKanji8544HalfwidthPercentSignTex "__OTR__textures/kanji/gMsgKanji8544HalfwidthPercentSignTex" +static const ALIGN_ASSET(2) char gMsgKanji8544HalfwidthPercentSignTex[] = dgMsgKanji8544HalfwidthPercentSignTex; + +#define dgMsgKanji8545HalfwidthAmpersandTex "__OTR__textures/kanji/gMsgKanji8545HalfwidthAmpersandTex" +static const ALIGN_ASSET(2) char gMsgKanji8545HalfwidthAmpersandTex[] = dgMsgKanji8545HalfwidthAmpersandTex; + +#define dgMsgKanji8546HalfwidthApostropheTex "__OTR__textures/kanji/gMsgKanji8546HalfwidthApostropheTex" +static const ALIGN_ASSET(2) char gMsgKanji8546HalfwidthApostropheTex[] = dgMsgKanji8546HalfwidthApostropheTex; + +#define dgMsgKanji8547HalfwidthParenthesesLeftTex "__OTR__textures/kanji/gMsgKanji8547HalfwidthParenthesesLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8547HalfwidthParenthesesLeftTex[] = dgMsgKanji8547HalfwidthParenthesesLeftTex; + +#define dgMsgKanji8548HalfwidthParenthesesRightTex "__OTR__textures/kanji/gMsgKanji8548HalfwidthParenthesesRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8548HalfwidthParenthesesRightTex[] = dgMsgKanji8548HalfwidthParenthesesRightTex; + +#define dgMsgKanji8549HalfwidthAsteriskTex "__OTR__textures/kanji/gMsgKanji8549HalfwidthAsteriskTex" +static const ALIGN_ASSET(2) char gMsgKanji8549HalfwidthAsteriskTex[] = dgMsgKanji8549HalfwidthAsteriskTex; + +#define dgMsgKanji854AHalfwidthPlusSignTex "__OTR__textures/kanji/gMsgKanji854AHalfwidthPlusSignTex" +static const ALIGN_ASSET(2) char gMsgKanji854AHalfwidthPlusSignTex[] = dgMsgKanji854AHalfwidthPlusSignTex; + +#define dgMsgKanji854BHalfwidthCommaTex "__OTR__textures/kanji/gMsgKanji854BHalfwidthCommaTex" +static const ALIGN_ASSET(2) char gMsgKanji854BHalfwidthCommaTex[] = dgMsgKanji854BHalfwidthCommaTex; + +#define dgMsgKanji854CHalfwidthHyphenMinusTex "__OTR__textures/kanji/gMsgKanji854CHalfwidthHyphenMinusTex" +static const ALIGN_ASSET(2) char gMsgKanji854CHalfwidthHyphenMinusTex[] = dgMsgKanji854CHalfwidthHyphenMinusTex; + +#define dgMsgKanji854DHalfwidthPeriodTex "__OTR__textures/kanji/gMsgKanji854DHalfwidthPeriodTex" +static const ALIGN_ASSET(2) char gMsgKanji854DHalfwidthPeriodTex[] = dgMsgKanji854DHalfwidthPeriodTex; + +#define dgMsgKanji854EHalfwidthSlashTex "__OTR__textures/kanji/gMsgKanji854EHalfwidthSlashTex" +static const ALIGN_ASSET(2) char gMsgKanji854EHalfwidthSlashTex[] = dgMsgKanji854EHalfwidthSlashTex; + +#define dgMsgKanji854FHalfwidth0Tex "__OTR__textures/kanji/gMsgKanji854FHalfwidth0Tex" +static const ALIGN_ASSET(2) char gMsgKanji854FHalfwidth0Tex[] = dgMsgKanji854FHalfwidth0Tex; + +#define dgMsgKanji8550Halfwidth1Tex "__OTR__textures/kanji/gMsgKanji8550Halfwidth1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8550Halfwidth1Tex[] = dgMsgKanji8550Halfwidth1Tex; + +#define dgMsgKanji8551Halfwidth2Tex "__OTR__textures/kanji/gMsgKanji8551Halfwidth2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8551Halfwidth2Tex[] = dgMsgKanji8551Halfwidth2Tex; + +#define dgMsgKanji8552Halfwidth3Tex "__OTR__textures/kanji/gMsgKanji8552Halfwidth3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8552Halfwidth3Tex[] = dgMsgKanji8552Halfwidth3Tex; + +#define dgMsgKanji8553Halfwidth4Tex "__OTR__textures/kanji/gMsgKanji8553Halfwidth4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8553Halfwidth4Tex[] = dgMsgKanji8553Halfwidth4Tex; + +#define dgMsgKanji855EHalfwidthQuestionMarkTex "__OTR__textures/kanji/gMsgKanji855EHalfwidthQuestionMarkTex" +static const ALIGN_ASSET(2) char gMsgKanji855EHalfwidthQuestionMarkTex[] = dgMsgKanji855EHalfwidthQuestionMarkTex; + +#define dgMsgKanji855FHalfwidthAtSignTex "__OTR__textures/kanji/gMsgKanji855FHalfwidthAtSignTex" +static const ALIGN_ASSET(2) char gMsgKanji855FHalfwidthAtSignTex[] = dgMsgKanji855FHalfwidthAtSignTex; + +#define dgMsgKanji8560HalfwidthCapitalATex "__OTR__textures/kanji/gMsgKanji8560HalfwidthCapitalATex" +static const ALIGN_ASSET(2) char gMsgKanji8560HalfwidthCapitalATex[] = dgMsgKanji8560HalfwidthCapitalATex; + +#define dgMsgKanji8561HalfwidthCapitalBTex "__OTR__textures/kanji/gMsgKanji8561HalfwidthCapitalBTex" +static const ALIGN_ASSET(2) char gMsgKanji8561HalfwidthCapitalBTex[] = dgMsgKanji8561HalfwidthCapitalBTex; + +#define dgMsgKanji8562HalfwidthCapitalCTex "__OTR__textures/kanji/gMsgKanji8562HalfwidthCapitalCTex" +static const ALIGN_ASSET(2) char gMsgKanji8562HalfwidthCapitalCTex[] = dgMsgKanji8562HalfwidthCapitalCTex; + +#define dgMsgKanji8563HalfwidthCapitalDTex "__OTR__textures/kanji/gMsgKanji8563HalfwidthCapitalDTex" +static const ALIGN_ASSET(2) char gMsgKanji8563HalfwidthCapitalDTex[] = dgMsgKanji8563HalfwidthCapitalDTex; + +#define dgMsgKanji8564HalfwidthCapitalETex "__OTR__textures/kanji/gMsgKanji8564HalfwidthCapitalETex" +static const ALIGN_ASSET(2) char gMsgKanji8564HalfwidthCapitalETex[] = dgMsgKanji8564HalfwidthCapitalETex; + +#define dgMsgKanji8565HalfwidthCapitalFTex "__OTR__textures/kanji/gMsgKanji8565HalfwidthCapitalFTex" +static const ALIGN_ASSET(2) char gMsgKanji8565HalfwidthCapitalFTex[] = dgMsgKanji8565HalfwidthCapitalFTex; + +#define dgMsgKanji8566HalfwidthCapitalGTex "__OTR__textures/kanji/gMsgKanji8566HalfwidthCapitalGTex" +static const ALIGN_ASSET(2) char gMsgKanji8566HalfwidthCapitalGTex[] = dgMsgKanji8566HalfwidthCapitalGTex; + +#define dgMsgKanji8567HalfwidthCapitalHTex "__OTR__textures/kanji/gMsgKanji8567HalfwidthCapitalHTex" +static const ALIGN_ASSET(2) char gMsgKanji8567HalfwidthCapitalHTex[] = dgMsgKanji8567HalfwidthCapitalHTex; + +#define dgMsgKanji8568HalfwidthCapitalITex "__OTR__textures/kanji/gMsgKanji8568HalfwidthCapitalITex" +static const ALIGN_ASSET(2) char gMsgKanji8568HalfwidthCapitalITex[] = dgMsgKanji8568HalfwidthCapitalITex; + +#define dgMsgKanji8569HalfwidthCapitalJTex "__OTR__textures/kanji/gMsgKanji8569HalfwidthCapitalJTex" +static const ALIGN_ASSET(2) char gMsgKanji8569HalfwidthCapitalJTex[] = dgMsgKanji8569HalfwidthCapitalJTex; + +#define dgMsgKanji856AHalfwidthCapitalKTex "__OTR__textures/kanji/gMsgKanji856AHalfwidthCapitalKTex" +static const ALIGN_ASSET(2) char gMsgKanji856AHalfwidthCapitalKTex[] = dgMsgKanji856AHalfwidthCapitalKTex; + +#define dgMsgKanji856BHalfwidthCapitalLTex "__OTR__textures/kanji/gMsgKanji856BHalfwidthCapitalLTex" +static const ALIGN_ASSET(2) char gMsgKanji856BHalfwidthCapitalLTex[] = dgMsgKanji856BHalfwidthCapitalLTex; + +#define dgMsgKanji856CHalfwidthCapitalMTex "__OTR__textures/kanji/gMsgKanji856CHalfwidthCapitalMTex" +static const ALIGN_ASSET(2) char gMsgKanji856CHalfwidthCapitalMTex[] = dgMsgKanji856CHalfwidthCapitalMTex; + +#define dgMsgKanji856DHalfwidthCapitalNTex "__OTR__textures/kanji/gMsgKanji856DHalfwidthCapitalNTex" +static const ALIGN_ASSET(2) char gMsgKanji856DHalfwidthCapitalNTex[] = dgMsgKanji856DHalfwidthCapitalNTex; + +#define dgMsgKanji856EHalfwidthCapitalOTex "__OTR__textures/kanji/gMsgKanji856EHalfwidthCapitalOTex" +static const ALIGN_ASSET(2) char gMsgKanji856EHalfwidthCapitalOTex[] = dgMsgKanji856EHalfwidthCapitalOTex; + +#define dgMsgKanji856FHalfwidthCapitalPTex "__OTR__textures/kanji/gMsgKanji856FHalfwidthCapitalPTex" +static const ALIGN_ASSET(2) char gMsgKanji856FHalfwidthCapitalPTex[] = dgMsgKanji856FHalfwidthCapitalPTex; + +#define dgMsgKanji8570HalfwidthCapitalQTex "__OTR__textures/kanji/gMsgKanji8570HalfwidthCapitalQTex" +static const ALIGN_ASSET(2) char gMsgKanji8570HalfwidthCapitalQTex[] = dgMsgKanji8570HalfwidthCapitalQTex; + +#define dgMsgKanji8571HalfwidthCapitalRTex "__OTR__textures/kanji/gMsgKanji8571HalfwidthCapitalRTex" +static const ALIGN_ASSET(2) char gMsgKanji8571HalfwidthCapitalRTex[] = dgMsgKanji8571HalfwidthCapitalRTex; + +#define dgMsgKanji857CHalfwidthSquareBracketRightTex "__OTR__textures/kanji/gMsgKanji857CHalfwidthSquareBracketRightTex" +static const ALIGN_ASSET(2) char gMsgKanji857CHalfwidthSquareBracketRightTex[] = dgMsgKanji857CHalfwidthSquareBracketRightTex; + +#define dgMsgKanji857DHalfwidthCircumflexAccentTex "__OTR__textures/kanji/gMsgKanji857DHalfwidthCircumflexAccentTex" +static const ALIGN_ASSET(2) char gMsgKanji857DHalfwidthCircumflexAccentTex[] = dgMsgKanji857DHalfwidthCircumflexAccentTex; + +#define dgMsgKanji857EEmptyTex "__OTR__textures/kanji/gMsgKanji857EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji857EEmptyTex[] = dgMsgKanji857EEmptyTex; + +#define dgMsgKanji8580HalfwidthGraveAccentTex "__OTR__textures/kanji/gMsgKanji8580HalfwidthGraveAccentTex" +static const ALIGN_ASSET(2) char gMsgKanji8580HalfwidthGraveAccentTex[] = dgMsgKanji8580HalfwidthGraveAccentTex; + +#define dgMsgKanji8581HalfwidthLowercaseATex "__OTR__textures/kanji/gMsgKanji8581HalfwidthLowercaseATex" +static const ALIGN_ASSET(2) char gMsgKanji8581HalfwidthLowercaseATex[] = dgMsgKanji8581HalfwidthLowercaseATex; + +#define dgMsgKanji8582HalfwidthLowercaseBTex "__OTR__textures/kanji/gMsgKanji8582HalfwidthLowercaseBTex" +static const ALIGN_ASSET(2) char gMsgKanji8582HalfwidthLowercaseBTex[] = dgMsgKanji8582HalfwidthLowercaseBTex; + +#define dgMsgKanji8583HalfwidthLowercaseCTex "__OTR__textures/kanji/gMsgKanji8583HalfwidthLowercaseCTex" +static const ALIGN_ASSET(2) char gMsgKanji8583HalfwidthLowercaseCTex[] = dgMsgKanji8583HalfwidthLowercaseCTex; + +#define dgMsgKanji8584HalfwidthLowercaseDTex "__OTR__textures/kanji/gMsgKanji8584HalfwidthLowercaseDTex" +static const ALIGN_ASSET(2) char gMsgKanji8584HalfwidthLowercaseDTex[] = dgMsgKanji8584HalfwidthLowercaseDTex; + +#define dgMsgKanji8585HalfwidthLowercaseETex "__OTR__textures/kanji/gMsgKanji8585HalfwidthLowercaseETex" +static const ALIGN_ASSET(2) char gMsgKanji8585HalfwidthLowercaseETex[] = dgMsgKanji8585HalfwidthLowercaseETex; + +#define dgMsgKanji8591HalfwidthLowercaseQTex "__OTR__textures/kanji/gMsgKanji8591HalfwidthLowercaseQTex" +static const ALIGN_ASSET(2) char gMsgKanji8591HalfwidthLowercaseQTex[] = dgMsgKanji8591HalfwidthLowercaseQTex; + +#define dgMsgKanji8592HalfwidthLowercaseRTex "__OTR__textures/kanji/gMsgKanji8592HalfwidthLowercaseRTex" +static const ALIGN_ASSET(2) char gMsgKanji8592HalfwidthLowercaseRTex[] = dgMsgKanji8592HalfwidthLowercaseRTex; + +#define dgMsgKanji8593HalfwidthLowercaseSTex "__OTR__textures/kanji/gMsgKanji8593HalfwidthLowercaseSTex" +static const ALIGN_ASSET(2) char gMsgKanji8593HalfwidthLowercaseSTex[] = dgMsgKanji8593HalfwidthLowercaseSTex; + +#define dgMsgKanji8594HalfwidthLowercaseTTex "__OTR__textures/kanji/gMsgKanji8594HalfwidthLowercaseTTex" +static const ALIGN_ASSET(2) char gMsgKanji8594HalfwidthLowercaseTTex[] = dgMsgKanji8594HalfwidthLowercaseTTex; + +#define dgMsgKanji8595HalfwidthLowercaseUTex "__OTR__textures/kanji/gMsgKanji8595HalfwidthLowercaseUTex" +static const ALIGN_ASSET(2) char gMsgKanji8595HalfwidthLowercaseUTex[] = dgMsgKanji8595HalfwidthLowercaseUTex; + +#define dgMsgKanji8596HalfwidthLowercaseVTex "__OTR__textures/kanji/gMsgKanji8596HalfwidthLowercaseVTex" +static const ALIGN_ASSET(2) char gMsgKanji8596HalfwidthLowercaseVTex[] = dgMsgKanji8596HalfwidthLowercaseVTex; + +#define dgMsgKanji8597HalfwidthLowercaseWTex "__OTR__textures/kanji/gMsgKanji8597HalfwidthLowercaseWTex" +static const ALIGN_ASSET(2) char gMsgKanji8597HalfwidthLowercaseWTex[] = dgMsgKanji8597HalfwidthLowercaseWTex; + +#define dgMsgKanji8598HalfwidthLowercaseXTex "__OTR__textures/kanji/gMsgKanji8598HalfwidthLowercaseXTex" +static const ALIGN_ASSET(2) char gMsgKanji8598HalfwidthLowercaseXTex[] = dgMsgKanji8598HalfwidthLowercaseXTex; + +#define dgMsgKanji8599HalfwidthLowercaseYTex "__OTR__textures/kanji/gMsgKanji8599HalfwidthLowercaseYTex" +static const ALIGN_ASSET(2) char gMsgKanji8599HalfwidthLowercaseYTex[] = dgMsgKanji8599HalfwidthLowercaseYTex; + +#define dgMsgKanji859AHalfwidthLowercaseZTex "__OTR__textures/kanji/gMsgKanji859AHalfwidthLowercaseZTex" +static const ALIGN_ASSET(2) char gMsgKanji859AHalfwidthLowercaseZTex[] = dgMsgKanji859AHalfwidthLowercaseZTex; + +#define dgMsgKanji859FHalfwidthKutenTex "__OTR__textures/kanji/gMsgKanji859FHalfwidthKutenTex" +static const ALIGN_ASSET(2) char gMsgKanji859FHalfwidthKutenTex[] = dgMsgKanji859FHalfwidthKutenTex; + +#define dgMsgKanji85A0HalfwidthKagikakkoLeftTex "__OTR__textures/kanji/gMsgKanji85A0HalfwidthKagikakkoLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji85A0HalfwidthKagikakkoLeftTex[] = dgMsgKanji85A0HalfwidthKagikakkoLeftTex; + +#define dgMsgKanji85A1HalfwidthKagikakkoRightTex "__OTR__textures/kanji/gMsgKanji85A1HalfwidthKagikakkoRightTex" +static const ALIGN_ASSET(2) char gMsgKanji85A1HalfwidthKagikakkoRightTex[] = dgMsgKanji85A1HalfwidthKagikakkoRightTex; + +#define dgMsgKanji85A2HalfwidthToutenTex "__OTR__textures/kanji/gMsgKanji85A2HalfwidthToutenTex" +static const ALIGN_ASSET(2) char gMsgKanji85A2HalfwidthToutenTex[] = dgMsgKanji85A2HalfwidthToutenTex; + +#define dgMsgKanji85A3HalfwidthNakatenTex "__OTR__textures/kanji/gMsgKanji85A3HalfwidthNakatenTex" +static const ALIGN_ASSET(2) char gMsgKanji85A3HalfwidthNakatenTex[] = dgMsgKanji85A3HalfwidthNakatenTex; + +#define dgMsgKanji85A4HalfwidthKatakanaWoTex "__OTR__textures/kanji/gMsgKanji85A4HalfwidthKatakanaWoTex" +static const ALIGN_ASSET(2) char gMsgKanji85A4HalfwidthKatakanaWoTex[] = dgMsgKanji85A4HalfwidthKatakanaWoTex; + +#define dgMsgKanji85A5HalfwidthKatakanaSmallATex "__OTR__textures/kanji/gMsgKanji85A5HalfwidthKatakanaSmallATex" +static const ALIGN_ASSET(2) char gMsgKanji85A5HalfwidthKatakanaSmallATex[] = dgMsgKanji85A5HalfwidthKatakanaSmallATex; + +#define dgMsgKanji85A6HalfwidthKatakanaSmallITex "__OTR__textures/kanji/gMsgKanji85A6HalfwidthKatakanaSmallITex" +static const ALIGN_ASSET(2) char gMsgKanji85A6HalfwidthKatakanaSmallITex[] = dgMsgKanji85A6HalfwidthKatakanaSmallITex; + +#define dgMsgKanji85A7HalfwidthKatakanaSmallUTex "__OTR__textures/kanji/gMsgKanji85A7HalfwidthKatakanaSmallUTex" +static const ALIGN_ASSET(2) char gMsgKanji85A7HalfwidthKatakanaSmallUTex[] = dgMsgKanji85A7HalfwidthKatakanaSmallUTex; + +#define dgMsgKanji85A8HalfwidthKatakanaSmallETex "__OTR__textures/kanji/gMsgKanji85A8HalfwidthKatakanaSmallETex" +static const ALIGN_ASSET(2) char gMsgKanji85A8HalfwidthKatakanaSmallETex[] = dgMsgKanji85A8HalfwidthKatakanaSmallETex; + +#define dgMsgKanji85A9HalfwidthKatakanaSmallOTex "__OTR__textures/kanji/gMsgKanji85A9HalfwidthKatakanaSmallOTex" +static const ALIGN_ASSET(2) char gMsgKanji85A9HalfwidthKatakanaSmallOTex[] = dgMsgKanji85A9HalfwidthKatakanaSmallOTex; + +#define dgMsgKanji85AAHalfwidthKatakanaSmallYaTex "__OTR__textures/kanji/gMsgKanji85AAHalfwidthKatakanaSmallYaTex" +static const ALIGN_ASSET(2) char gMsgKanji85AAHalfwidthKatakanaSmallYaTex[] = dgMsgKanji85AAHalfwidthKatakanaSmallYaTex; + +#define dgMsgKanji85ABHalfwidthKatakanaSmallYuTex "__OTR__textures/kanji/gMsgKanji85ABHalfwidthKatakanaSmallYuTex" +static const ALIGN_ASSET(2) char gMsgKanji85ABHalfwidthKatakanaSmallYuTex[] = dgMsgKanji85ABHalfwidthKatakanaSmallYuTex; + +#define dgMsgKanji85ACHalfwidthKatakanaSmallYoTex "__OTR__textures/kanji/gMsgKanji85ACHalfwidthKatakanaSmallYoTex" +static const ALIGN_ASSET(2) char gMsgKanji85ACHalfwidthKatakanaSmallYoTex[] = dgMsgKanji85ACHalfwidthKatakanaSmallYoTex; + +#define dgMsgKanji85ADHalfwidthKatakanaSmallTsuTex "__OTR__textures/kanji/gMsgKanji85ADHalfwidthKatakanaSmallTsuTex" +static const ALIGN_ASSET(2) char gMsgKanji85ADHalfwidthKatakanaSmallTsuTex[] = dgMsgKanji85ADHalfwidthKatakanaSmallTsuTex; + +#define dgMsgKanji85B3HalfwidthKatakanaOTex "__OTR__textures/kanji/gMsgKanji85B3HalfwidthKatakanaOTex" +static const ALIGN_ASSET(2) char gMsgKanji85B3HalfwidthKatakanaOTex[] = dgMsgKanji85B3HalfwidthKatakanaOTex; + +#define dgMsgKanji85B4HalfwidthKatakanaKaTex "__OTR__textures/kanji/gMsgKanji85B4HalfwidthKatakanaKaTex" +static const ALIGN_ASSET(2) char gMsgKanji85B4HalfwidthKatakanaKaTex[] = dgMsgKanji85B4HalfwidthKatakanaKaTex; + +#define dgMsgKanji85B5HalfwidthKatakanaKiTex "__OTR__textures/kanji/gMsgKanji85B5HalfwidthKatakanaKiTex" +static const ALIGN_ASSET(2) char gMsgKanji85B5HalfwidthKatakanaKiTex[] = dgMsgKanji85B5HalfwidthKatakanaKiTex; + +#define dgMsgKanji85B6HalfwidthKatakanaKuTex "__OTR__textures/kanji/gMsgKanji85B6HalfwidthKatakanaKuTex" +static const ALIGN_ASSET(2) char gMsgKanji85B6HalfwidthKatakanaKuTex[] = dgMsgKanji85B6HalfwidthKatakanaKuTex; + +#define dgMsgKanji85B7HalfwidthKatakanaKeTex "__OTR__textures/kanji/gMsgKanji85B7HalfwidthKatakanaKeTex" +static const ALIGN_ASSET(2) char gMsgKanji85B7HalfwidthKatakanaKeTex[] = dgMsgKanji85B7HalfwidthKatakanaKeTex; + +#define dgMsgKanji85B8HalfwidthKatakanaKoTex "__OTR__textures/kanji/gMsgKanji85B8HalfwidthKatakanaKoTex" +static const ALIGN_ASSET(2) char gMsgKanji85B8HalfwidthKatakanaKoTex[] = dgMsgKanji85B8HalfwidthKatakanaKoTex; + +#define dgMsgKanji85B9HalfwidthKatakanaSaTex "__OTR__textures/kanji/gMsgKanji85B9HalfwidthKatakanaSaTex" +static const ALIGN_ASSET(2) char gMsgKanji85B9HalfwidthKatakanaSaTex[] = dgMsgKanji85B9HalfwidthKatakanaSaTex; + +#define dgMsgKanji85BAHalfwidthKatakanaShiTex "__OTR__textures/kanji/gMsgKanji85BAHalfwidthKatakanaShiTex" +static const ALIGN_ASSET(2) char gMsgKanji85BAHalfwidthKatakanaShiTex[] = dgMsgKanji85BAHalfwidthKatakanaShiTex; + +#define dgMsgKanji85BBHalfwidthKatakanaSuTex "__OTR__textures/kanji/gMsgKanji85BBHalfwidthKatakanaSuTex" +static const ALIGN_ASSET(2) char gMsgKanji85BBHalfwidthKatakanaSuTex[] = dgMsgKanji85BBHalfwidthKatakanaSuTex; + +#define dgMsgKanji85BCHalfwidthKatakanaSeTex "__OTR__textures/kanji/gMsgKanji85BCHalfwidthKatakanaSeTex" +static const ALIGN_ASSET(2) char gMsgKanji85BCHalfwidthKatakanaSeTex[] = dgMsgKanji85BCHalfwidthKatakanaSeTex; + +#define dgMsgKanji85BDHalfwidthKatakanaSoTex "__OTR__textures/kanji/gMsgKanji85BDHalfwidthKatakanaSoTex" +static const ALIGN_ASSET(2) char gMsgKanji85BDHalfwidthKatakanaSoTex[] = dgMsgKanji85BDHalfwidthKatakanaSoTex; + +#define dgMsgKanji85BEHalfwidthKatakanaTaTex "__OTR__textures/kanji/gMsgKanji85BEHalfwidthKatakanaTaTex" +static const ALIGN_ASSET(2) char gMsgKanji85BEHalfwidthKatakanaTaTex[] = dgMsgKanji85BEHalfwidthKatakanaTaTex; + +#define dgMsgKanji85BFHalfwidthKatakanaChiTex "__OTR__textures/kanji/gMsgKanji85BFHalfwidthKatakanaChiTex" +static const ALIGN_ASSET(2) char gMsgKanji85BFHalfwidthKatakanaChiTex[] = dgMsgKanji85BFHalfwidthKatakanaChiTex; + +#define dgMsgKanji85C0HalfwidthKatakanaTsuTex "__OTR__textures/kanji/gMsgKanji85C0HalfwidthKatakanaTsuTex" +static const ALIGN_ASSET(2) char gMsgKanji85C0HalfwidthKatakanaTsuTex[] = dgMsgKanji85C0HalfwidthKatakanaTsuTex; + +#define dgMsgKanji85C1HalfwidthKatakanaTeTex "__OTR__textures/kanji/gMsgKanji85C1HalfwidthKatakanaTeTex" +static const ALIGN_ASSET(2) char gMsgKanji85C1HalfwidthKatakanaTeTex[] = dgMsgKanji85C1HalfwidthKatakanaTeTex; + +#define dgMsgKanji85DBHalfwidthKatakanaNTex "__OTR__textures/kanji/gMsgKanji85DBHalfwidthKatakanaNTex" +static const ALIGN_ASSET(2) char gMsgKanji85DBHalfwidthKatakanaNTex[] = dgMsgKanji85DBHalfwidthKatakanaNTex; + +#define dgMsgKanji85DCHalfwidthDakutenTex "__OTR__textures/kanji/gMsgKanji85DCHalfwidthDakutenTex" +static const ALIGN_ASSET(2) char gMsgKanji85DCHalfwidthDakutenTex[] = dgMsgKanji85DCHalfwidthDakutenTex; + +#define dgMsgKanji85DDHalfwidthHandakutenTex "__OTR__textures/kanji/gMsgKanji85DDHalfwidthHandakutenTex" +static const ALIGN_ASSET(2) char gMsgKanji85DDHalfwidthHandakutenTex[] = dgMsgKanji85DDHalfwidthHandakutenTex; + +#define dgMsgKanji85DEHalfwidthKatakanaWiTex "__OTR__textures/kanji/gMsgKanji85DEHalfwidthKatakanaWiTex" +static const ALIGN_ASSET(2) char gMsgKanji85DEHalfwidthKatakanaWiTex[] = dgMsgKanji85DEHalfwidthKatakanaWiTex; + +#define dgMsgKanji85DFHalfwidthKatakanaWeTex "__OTR__textures/kanji/gMsgKanji85DFHalfwidthKatakanaWeTex" +static const ALIGN_ASSET(2) char gMsgKanji85DFHalfwidthKatakanaWeTex[] = dgMsgKanji85DFHalfwidthKatakanaWeTex; + +#define dgMsgKanji85E0HalfwidthKatakanaSmallWaTex "__OTR__textures/kanji/gMsgKanji85E0HalfwidthKatakanaSmallWaTex" +static const ALIGN_ASSET(2) char gMsgKanji85E0HalfwidthKatakanaSmallWaTex[] = dgMsgKanji85E0HalfwidthKatakanaSmallWaTex; + +#define dgMsgKanji85E1HalfwidthKatakanaSmallKaTex "__OTR__textures/kanji/gMsgKanji85E1HalfwidthKatakanaSmallKaTex" +static const ALIGN_ASSET(2) char gMsgKanji85E1HalfwidthKatakanaSmallKaTex[] = dgMsgKanji85E1HalfwidthKatakanaSmallKaTex; + +#define dgMsgKanji85E2HalfwidthKatakanaSmallKeTex "__OTR__textures/kanji/gMsgKanji85E2HalfwidthKatakanaSmallKeTex" +static const ALIGN_ASSET(2) char gMsgKanji85E2HalfwidthKatakanaSmallKeTex[] = dgMsgKanji85E2HalfwidthKatakanaSmallKeTex; + +#define dgMsgKanji85E3HalfwidthKatakanaVuTex "__OTR__textures/kanji/gMsgKanji85E3HalfwidthKatakanaVuTex" +static const ALIGN_ASSET(2) char gMsgKanji85E3HalfwidthKatakanaVuTex[] = dgMsgKanji85E3HalfwidthKatakanaVuTex; + +#define dgMsgKanji85E4HalfwidthKatakanaGaTex "__OTR__textures/kanji/gMsgKanji85E4HalfwidthKatakanaGaTex" +static const ALIGN_ASSET(2) char gMsgKanji85E4HalfwidthKatakanaGaTex[] = dgMsgKanji85E4HalfwidthKatakanaGaTex; + +#define dgMsgKanji85E5HalfwidthKatakanaGiTex "__OTR__textures/kanji/gMsgKanji85E5HalfwidthKatakanaGiTex" +static const ALIGN_ASSET(2) char gMsgKanji85E5HalfwidthKatakanaGiTex[] = dgMsgKanji85E5HalfwidthKatakanaGiTex; + +#define dgMsgKanji85E6HalfwidthKatakanaGuTex "__OTR__textures/kanji/gMsgKanji85E6HalfwidthKatakanaGuTex" +static const ALIGN_ASSET(2) char gMsgKanji85E6HalfwidthKatakanaGuTex[] = dgMsgKanji85E6HalfwidthKatakanaGuTex; + +#define dgMsgKanji85E7HalfwidthKatakanaGeTex "__OTR__textures/kanji/gMsgKanji85E7HalfwidthKatakanaGeTex" +static const ALIGN_ASSET(2) char gMsgKanji85E7HalfwidthKatakanaGeTex[] = dgMsgKanji85E7HalfwidthKatakanaGeTex; + +#define dgMsgKanji85E8HalfwidthKatakanaGoTex "__OTR__textures/kanji/gMsgKanji85E8HalfwidthKatakanaGoTex" +static const ALIGN_ASSET(2) char gMsgKanji85E8HalfwidthKatakanaGoTex[] = dgMsgKanji85E8HalfwidthKatakanaGoTex; + +#define dgMsgKanji85E9HalfwidthKatakanaZaTex "__OTR__textures/kanji/gMsgKanji85E9HalfwidthKatakanaZaTex" +static const ALIGN_ASSET(2) char gMsgKanji85E9HalfwidthKatakanaZaTex[] = dgMsgKanji85E9HalfwidthKatakanaZaTex; + +#define dgMsgKanji85EAHalfwidthKatakanaJiTex "__OTR__textures/kanji/gMsgKanji85EAHalfwidthKatakanaJiTex" +static const ALIGN_ASSET(2) char gMsgKanji85EAHalfwidthKatakanaJiTex[] = dgMsgKanji85EAHalfwidthKatakanaJiTex; + +#define dgMsgKanji85EBHalfwidthKatakanaZuTex "__OTR__textures/kanji/gMsgKanji85EBHalfwidthKatakanaZuTex" +static const ALIGN_ASSET(2) char gMsgKanji85EBHalfwidthKatakanaZuTex[] = dgMsgKanji85EBHalfwidthKatakanaZuTex; + +#define dgMsgKanji85ECHalfwidthKatakanaZeTex "__OTR__textures/kanji/gMsgKanji85ECHalfwidthKatakanaZeTex" +static const ALIGN_ASSET(2) char gMsgKanji85ECHalfwidthKatakanaZeTex[] = dgMsgKanji85ECHalfwidthKatakanaZeTex; + +#define dgMsgKanji85EDHalfwidthKatakanaZoTex "__OTR__textures/kanji/gMsgKanji85EDHalfwidthKatakanaZoTex" +static const ALIGN_ASSET(2) char gMsgKanji85EDHalfwidthKatakanaZoTex[] = dgMsgKanji85EDHalfwidthKatakanaZoTex; + +#define dgMsgKanji85EEHalfwidthKatakanaDaTex "__OTR__textures/kanji/gMsgKanji85EEHalfwidthKatakanaDaTex" +static const ALIGN_ASSET(2) char gMsgKanji85EEHalfwidthKatakanaDaTex[] = dgMsgKanji85EEHalfwidthKatakanaDaTex; + +#define dgMsgKanji85EFHalfwidthKatakanaDiTex "__OTR__textures/kanji/gMsgKanji85EFHalfwidthKatakanaDiTex" +static const ALIGN_ASSET(2) char gMsgKanji85EFHalfwidthKatakanaDiTex[] = dgMsgKanji85EFHalfwidthKatakanaDiTex; + +#define dgMsgKanji85F0HalfwidthKatakanaDuTex "__OTR__textures/kanji/gMsgKanji85F0HalfwidthKatakanaDuTex" +static const ALIGN_ASSET(2) char gMsgKanji85F0HalfwidthKatakanaDuTex[] = dgMsgKanji85F0HalfwidthKatakanaDuTex; + +#define dgMsgKanji85F1HalfwidthKatakanaDeTex "__OTR__textures/kanji/gMsgKanji85F1HalfwidthKatakanaDeTex" +static const ALIGN_ASSET(2) char gMsgKanji85F1HalfwidthKatakanaDeTex[] = dgMsgKanji85F1HalfwidthKatakanaDeTex; + +#define dgMsgKanji85F2HalfwidthKatakanaDoTex "__OTR__textures/kanji/gMsgKanji85F2HalfwidthKatakanaDoTex" +static const ALIGN_ASSET(2) char gMsgKanji85F2HalfwidthKatakanaDoTex[] = dgMsgKanji85F2HalfwidthKatakanaDoTex; + +#define dgMsgKanji85F3HalfwidthKatakanaBaTex "__OTR__textures/kanji/gMsgKanji85F3HalfwidthKatakanaBaTex" +static const ALIGN_ASSET(2) char gMsgKanji85F3HalfwidthKatakanaBaTex[] = dgMsgKanji85F3HalfwidthKatakanaBaTex; + +#define dgMsgKanji85F4HalfwidthKatakanaPaTex "__OTR__textures/kanji/gMsgKanji85F4HalfwidthKatakanaPaTex" +static const ALIGN_ASSET(2) char gMsgKanji85F4HalfwidthKatakanaPaTex[] = dgMsgKanji85F4HalfwidthKatakanaPaTex; + +#define dgMsgKanji85F5HalfwidthKatakanaBiTex "__OTR__textures/kanji/gMsgKanji85F5HalfwidthKatakanaBiTex" +static const ALIGN_ASSET(2) char gMsgKanji85F5HalfwidthKatakanaBiTex[] = dgMsgKanji85F5HalfwidthKatakanaBiTex; + +#define dgMsgKanji8640EmptyTex "__OTR__textures/kanji/gMsgKanji8640EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8640EmptyTex[] = dgMsgKanji8640EmptyTex; + +#define dgMsgKanji8641TategakiToutenTex "__OTR__textures/kanji/gMsgKanji8641TategakiToutenTex" +static const ALIGN_ASSET(2) char gMsgKanji8641TategakiToutenTex[] = dgMsgKanji8641TategakiToutenTex; + +#define dgMsgKanji8642TategakiKutenTex "__OTR__textures/kanji/gMsgKanji8642TategakiKutenTex" +static const ALIGN_ASSET(2) char gMsgKanji8642TategakiKutenTex[] = dgMsgKanji8642TategakiKutenTex; + +#define dgMsgKanji8643HalfwidthHorizontalThinTex "__OTR__textures/kanji/gMsgKanji8643HalfwidthHorizontalThinTex" +static const ALIGN_ASSET(2) char gMsgKanji8643HalfwidthHorizontalThinTex[] = dgMsgKanji8643HalfwidthHorizontalThinTex; + +#define dgMsgKanji8644HalfwidthHorizontalThickTex "__OTR__textures/kanji/gMsgKanji8644HalfwidthHorizontalThickTex" +static const ALIGN_ASSET(2) char gMsgKanji8644HalfwidthHorizontalThickTex[] = dgMsgKanji8644HalfwidthHorizontalThickTex; + +#define dgMsgKanji8645HalfwidthVerticalThinTex "__OTR__textures/kanji/gMsgKanji8645HalfwidthVerticalThinTex" +static const ALIGN_ASSET(2) char gMsgKanji8645HalfwidthVerticalThinTex[] = dgMsgKanji8645HalfwidthVerticalThinTex; + +#define dgMsgKanji8646HalfwidthVerticalThickTex "__OTR__textures/kanji/gMsgKanji8646HalfwidthVerticalThickTex" +static const ALIGN_ASSET(2) char gMsgKanji8646HalfwidthVerticalThickTex[] = dgMsgKanji8646HalfwidthVerticalThickTex; + +#define dgMsgKanji8647HalfwidthHorizontalThinDottedTex "__OTR__textures/kanji/gMsgKanji8647HalfwidthHorizontalThinDottedTex" +static const ALIGN_ASSET(2) char gMsgKanji8647HalfwidthHorizontalThinDottedTex[] = dgMsgKanji8647HalfwidthHorizontalThinDottedTex; + +#define dgMsgKanji8648HalfwidthHorizontalThickDottedTex "__OTR__textures/kanji/gMsgKanji8648HalfwidthHorizontalThickDottedTex" +static const ALIGN_ASSET(2) char gMsgKanji8648HalfwidthHorizontalThickDottedTex[] = dgMsgKanji8648HalfwidthHorizontalThickDottedTex; + +#define dgMsgKanji8649HalfwidthVerticalThinDottedTex "__OTR__textures/kanji/gMsgKanji8649HalfwidthVerticalThinDottedTex" +static const ALIGN_ASSET(2) char gMsgKanji8649HalfwidthVerticalThinDottedTex[] = dgMsgKanji8649HalfwidthVerticalThinDottedTex; + +#define dgMsgKanji864AHalfwidthVerticalThickDottedTex "__OTR__textures/kanji/gMsgKanji864AHalfwidthVerticalThickDottedTex" +static const ALIGN_ASSET(2) char gMsgKanji864AHalfwidthVerticalThickDottedTex[] = dgMsgKanji864AHalfwidthVerticalThickDottedTex; + +#define dgMsgKanji864BHalfwidthHorizontalThinDotted2Tex "__OTR__textures/kanji/gMsgKanji864BHalfwidthHorizontalThinDotted2Tex" +static const ALIGN_ASSET(2) char gMsgKanji864BHalfwidthHorizontalThinDotted2Tex[] = dgMsgKanji864BHalfwidthHorizontalThinDotted2Tex; + +#define dgMsgKanji864CHalfwidthHorizontalThickDotted2Tex "__OTR__textures/kanji/gMsgKanji864CHalfwidthHorizontalThickDotted2Tex" +static const ALIGN_ASSET(2) char gMsgKanji864CHalfwidthHorizontalThickDotted2Tex[] = dgMsgKanji864CHalfwidthHorizontalThickDotted2Tex; + +#define dgMsgKanji864DHalfwidthVerticalThinDotted2Tex "__OTR__textures/kanji/gMsgKanji864DHalfwidthVerticalThinDotted2Tex" +static const ALIGN_ASSET(2) char gMsgKanji864DHalfwidthVerticalThinDotted2Tex[] = dgMsgKanji864DHalfwidthVerticalThinDotted2Tex; + +#define dgMsgKanji864EHalfwidthVerticalThickDotted2Tex "__OTR__textures/kanji/gMsgKanji864EHalfwidthVerticalThickDotted2Tex" +static const ALIGN_ASSET(2) char gMsgKanji864EHalfwidthVerticalThickDotted2Tex[] = dgMsgKanji864EHalfwidthVerticalThickDotted2Tex; + +#define dgMsgKanji864FHalfwidthBoxThinTopLeftTex "__OTR__textures/kanji/gMsgKanji864FHalfwidthBoxThinTopLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji864FHalfwidthBoxThinTopLeftTex[] = dgMsgKanji864FHalfwidthBoxThinTopLeftTex; + +#define dgMsgKanji8650VerticalFarRightTex "__OTR__textures/kanji/gMsgKanji8650VerticalFarRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8650VerticalFarRightTex[] = dgMsgKanji8650VerticalFarRightTex; + +#define dgMsgKanji8651VerticalFarLeftTex "__OTR__textures/kanji/gMsgKanji8651VerticalFarLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8651VerticalFarLeftTex[] = dgMsgKanji8651VerticalFarLeftTex; + +#define dgMsgKanji8652HalfwidthBoxThickTopLeftTex "__OTR__textures/kanji/gMsgKanji8652HalfwidthBoxThickTopLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8652HalfwidthBoxThickTopLeftTex[] = dgMsgKanji8652HalfwidthBoxThickTopLeftTex; + +#define dgMsgKanji8653HalfwidthBoxThinTopRightTex "__OTR__textures/kanji/gMsgKanji8653HalfwidthBoxThinTopRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8653HalfwidthBoxThinTopRightTex[] = dgMsgKanji8653HalfwidthBoxThinTopRightTex; + +#define dgMsgKanji8654HalfwidthBoxVertThinHorizThickTopRightTex "__OTR__textures/kanji/gMsgKanji8654HalfwidthBoxVertThinHorizThickTopRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8654HalfwidthBoxVertThinHorizThickTopRightTex[] = dgMsgKanji8654HalfwidthBoxVertThinHorizThickTopRightTex; + +#define dgMsgKanji8655HalfwidthBoxVertThickHorizThinTopRightTex "__OTR__textures/kanji/gMsgKanji8655HalfwidthBoxVertThickHorizThinTopRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8655HalfwidthBoxVertThickHorizThinTopRightTex[] = dgMsgKanji8655HalfwidthBoxVertThickHorizThinTopRightTex; + +#define dgMsgKanji8656HalfwidthBoxThickTopRightTex "__OTR__textures/kanji/gMsgKanji8656HalfwidthBoxThickTopRightTex" +static const ALIGN_ASSET(2) char gMsgKanji8656HalfwidthBoxThickTopRightTex[] = dgMsgKanji8656HalfwidthBoxThickTopRightTex; + +#define dgMsgKanji8657HalfwidthBoxThinBottomLeftTex "__OTR__textures/kanji/gMsgKanji8657HalfwidthBoxThinBottomLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8657HalfwidthBoxThinBottomLeftTex[] = dgMsgKanji8657HalfwidthBoxThinBottomLeftTex; + +#define dgMsgKanji8658HalfwidthBoxVertThinHorizThickBottomLeftTex "__OTR__textures/kanji/gMsgKanji8658HalfwidthBoxVertThinHorizThickBottomLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8658HalfwidthBoxVertThinHorizThickBottomLeftTex[] = dgMsgKanji8658HalfwidthBoxVertThinHorizThickBottomLeftTex; + +#define dgMsgKanji8659HalfwidthBoxVertThickHorizThinBottomLeftTex "__OTR__textures/kanji/gMsgKanji8659HalfwidthBoxVertThickHorizThinBottomLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji8659HalfwidthBoxVertThickHorizThinBottomLeftTex[] = dgMsgKanji8659HalfwidthBoxVertThickHorizThinBottomLeftTex; + +#define dgMsgKanji865AHalfwidthBoxThickBottomLeftTex "__OTR__textures/kanji/gMsgKanji865AHalfwidthBoxThickBottomLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji865AHalfwidthBoxThickBottomLeftTex[] = dgMsgKanji865AHalfwidthBoxThickBottomLeftTex; + +#define dgMsgKanji865BTategakiChouonpuTex "__OTR__textures/kanji/gMsgKanji865BTategakiChouonpuTex" +static const ALIGN_ASSET(2) char gMsgKanji865BTategakiChouonpuTex[] = dgMsgKanji865BTategakiChouonpuTex; + +#define dgMsgKanji865CTategakiDashTex "__OTR__textures/kanji/gMsgKanji865CTategakiDashTex" +static const ALIGN_ASSET(2) char gMsgKanji865CTategakiDashTex[] = dgMsgKanji865CTategakiDashTex; + +#define dgMsgKanji865DTategakiHyphenTex "__OTR__textures/kanji/gMsgKanji865DTategakiHyphenTex" +static const ALIGN_ASSET(2) char gMsgKanji865DTategakiHyphenTex[] = dgMsgKanji865DTategakiHyphenTex; + +#define dgMsgKanji869BHalfwidthNijyuukagikakkoRightTex "__OTR__textures/kanji/gMsgKanji869BHalfwidthNijyuukagikakkoRightTex" +static const ALIGN_ASSET(2) char gMsgKanji869BHalfwidthNijyuukagikakkoRightTex[] = dgMsgKanji869BHalfwidthNijyuukagikakkoRightTex; + +#define dgMsgKanji869CHalfwidthSumitsukikakkoLeftTex "__OTR__textures/kanji/gMsgKanji869CHalfwidthSumitsukikakkoLeftTex" +static const ALIGN_ASSET(2) char gMsgKanji869CHalfwidthSumitsukikakkoLeftTex[] = dgMsgKanji869CHalfwidthSumitsukikakkoLeftTex; + +#define dgMsgKanji869DHalfwidthSumitsukikakkoRightTex "__OTR__textures/kanji/gMsgKanji869DHalfwidthSumitsukikakkoRightTex" +static const ALIGN_ASSET(2) char gMsgKanji869DHalfwidthSumitsukikakkoRightTex[] = dgMsgKanji869DHalfwidthSumitsukikakkoRightTex; + +#define dgMsgKanji869EHalfwidthHyphenTex "__OTR__textures/kanji/gMsgKanji869EHalfwidthHyphenTex" +static const ALIGN_ASSET(2) char gMsgKanji869EHalfwidthHyphenTex[] = dgMsgKanji869EHalfwidthHyphenTex; + +#define dgMsgKanji869FEmptyTex "__OTR__textures/kanji/gMsgKanji869FEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji869FEmptyTex[] = dgMsgKanji869FEmptyTex; + +#define dgMsgKanji86A0EmptyTex "__OTR__textures/kanji/gMsgKanji86A0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji86A0EmptyTex[] = dgMsgKanji86A0EmptyTex; + +#define dgMsgKanji86A1EmptyTex "__OTR__textures/kanji/gMsgKanji86A1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji86A1EmptyTex[] = dgMsgKanji86A1EmptyTex; + +#define dgMsgKanji86A2EmptyTex "__OTR__textures/kanji/gMsgKanji86A2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji86A2EmptyTex[] = dgMsgKanji86A2EmptyTex; + +#define dgMsgKanji86A3EmptyTex "__OTR__textures/kanji/gMsgKanji86A3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji86A3EmptyTex[] = dgMsgKanji86A3EmptyTex; + +#define dgMsgKanji86A4EmptyTex "__OTR__textures/kanji/gMsgKanji86A4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji86A4EmptyTex[] = dgMsgKanji86A4EmptyTex; + +#define dgMsgKanji86A5EmptyTex "__OTR__textures/kanji/gMsgKanji86A5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji86A5EmptyTex[] = dgMsgKanji86A5EmptyTex; + +#define dgMsgKanji86A6EmptyTex "__OTR__textures/kanji/gMsgKanji86A6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji86A6EmptyTex[] = dgMsgKanji86A6EmptyTex; + +#define dgMsgKanji86B3BoxVertThinHorizThickTopRightTex "__OTR__textures/kanji/gMsgKanji86B3BoxVertThinHorizThickTopRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86B3BoxVertThinHorizThickTopRightTex[] = dgMsgKanji86B3BoxVertThinHorizThickTopRightTex; + +#define dgMsgKanji86B4BoxVertThickHorizThinTopRightTex "__OTR__textures/kanji/gMsgKanji86B4BoxVertThickHorizThinTopRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86B4BoxVertThickHorizThinTopRightTex[] = dgMsgKanji86B4BoxVertThickHorizThinTopRightTex; + +#define dgMsgKanji86B5BoxThickTopRightTex "__OTR__textures/kanji/gMsgKanji86B5BoxThickTopRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86B5BoxThickTopRightTex[] = dgMsgKanji86B5BoxThickTopRightTex; + +#define dgMsgKanji86C7BoxVertThinHorizThickRightTex "__OTR__textures/kanji/gMsgKanji86C7BoxVertThinHorizThickRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86C7BoxVertThinHorizThickRightTex[] = dgMsgKanji86C7BoxVertThinHorizThickRightTex; + +#define dgMsgKanji86C8BoxTopThickBottomThinHorizThinRightTex "__OTR__textures/kanji/gMsgKanji86C8BoxTopThickBottomThinHorizThinRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86C8BoxTopThickBottomThinHorizThinRightTex[] = dgMsgKanji86C8BoxTopThickBottomThinHorizThinRightTex; + +#define dgMsgKanji86C9BoxTopThinBottomThickHorizThinRightTex "__OTR__textures/kanji/gMsgKanji86C9BoxTopThinBottomThickHorizThinRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86C9BoxTopThinBottomThickHorizThinRightTex[] = dgMsgKanji86C9BoxTopThinBottomThickHorizThinRightTex; + +#define dgMsgKanji86CABoxVertThickHorizThinRightTex "__OTR__textures/kanji/gMsgKanji86CABoxVertThickHorizThinRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86CABoxVertThickHorizThinRightTex[] = dgMsgKanji86CABoxVertThickHorizThinRightTex; + +#define dgMsgKanji86CBBoxTopThickBottomThinHorizThickRightTex "__OTR__textures/kanji/gMsgKanji86CBBoxTopThickBottomThinHorizThickRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86CBBoxTopThickBottomThinHorizThickRightTex[] = dgMsgKanji86CBBoxTopThickBottomThinHorizThickRightTex; + +#define dgMsgKanji86CCBoxTopThinBottomThickHorizThickRightTex "__OTR__textures/kanji/gMsgKanji86CCBoxTopThinBottomThickHorizThickRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86CCBoxTopThinBottomThickHorizThickRightTex[] = dgMsgKanji86CCBoxTopThinBottomThickHorizThickRightTex; + +#define dgMsgKanji86CDBoxThickRightTex "__OTR__textures/kanji/gMsgKanji86CDBoxThickRightTex" +static const ALIGN_ASSET(2) char gMsgKanji86CDBoxThickRightTex[] = dgMsgKanji86CDBoxThickRightTex; + +#define dgMsgKanji86CEBoxThinTopTex "__OTR__textures/kanji/gMsgKanji86CEBoxThinTopTex" +static const ALIGN_ASSET(2) char gMsgKanji86CEBoxThinTopTex[] = dgMsgKanji86CEBoxThinTopTex; + +#define dgMsgKanji86CFBoxVertThinLeftThickRightThinTopTex "__OTR__textures/kanji/gMsgKanji86CFBoxVertThinLeftThickRightThinTopTex" +static const ALIGN_ASSET(2) char gMsgKanji86CFBoxVertThinLeftThickRightThinTopTex[] = dgMsgKanji86CFBoxVertThinLeftThickRightThinTopTex; + +#define dgMsgKanji86D0BoxVertThinLeftThinRightThickTopTex "__OTR__textures/kanji/gMsgKanji86D0BoxVertThinLeftThinRightThickTopTex" +static const ALIGN_ASSET(2) char gMsgKanji86D0BoxVertThinLeftThinRightThickTopTex[] = dgMsgKanji86D0BoxVertThinLeftThinRightThickTopTex; + +#define dgMsgKanji86D1BoxVertThinHorizThickTopTex "__OTR__textures/kanji/gMsgKanji86D1BoxVertThinHorizThickTopTex" +static const ALIGN_ASSET(2) char gMsgKanji86D1BoxVertThinHorizThickTopTex[] = dgMsgKanji86D1BoxVertThinHorizThickTopTex; + +#define dgMsgKanji86D2BoxVertThickHorizThinTopTex "__OTR__textures/kanji/gMsgKanji86D2BoxVertThickHorizThinTopTex" +static const ALIGN_ASSET(2) char gMsgKanji86D2BoxVertThickHorizThinTopTex[] = dgMsgKanji86D2BoxVertThickHorizThinTopTex; + +#define dgMsgKanji86D3BoxVertThickLeftThickRightThinTopTex "__OTR__textures/kanji/gMsgKanji86D3BoxVertThickLeftThickRightThinTopTex" +static const ALIGN_ASSET(2) char gMsgKanji86D3BoxVertThickLeftThickRightThinTopTex[] = dgMsgKanji86D3BoxVertThickLeftThickRightThinTopTex; + +#define dgMsgKanji86D4BoxVertThickLeftThinRightThickTopTex "__OTR__textures/kanji/gMsgKanji86D4BoxVertThickLeftThinRightThickTopTex" +static const ALIGN_ASSET(2) char gMsgKanji86D4BoxVertThickLeftThinRightThickTopTex[] = dgMsgKanji86D4BoxVertThickLeftThinRightThickTopTex; + +#define dgMsgKanji86D5BoxThickTopTex "__OTR__textures/kanji/gMsgKanji86D5BoxThickTopTex" +static const ALIGN_ASSET(2) char gMsgKanji86D5BoxThickTopTex[] = dgMsgKanji86D5BoxThickTopTex; + +#define dgMsgKanji86D6BoxThinBottomTex "__OTR__textures/kanji/gMsgKanji86D6BoxThinBottomTex" +static const ALIGN_ASSET(2) char gMsgKanji86D6BoxThinBottomTex[] = dgMsgKanji86D6BoxThinBottomTex; + +#define dgMsgKanji86D7BoxVertThinLeftThickRightThinBottomTex "__OTR__textures/kanji/gMsgKanji86D7BoxVertThinLeftThickRightThinBottomTex" +static const ALIGN_ASSET(2) char gMsgKanji86D7BoxVertThinLeftThickRightThinBottomTex[] = dgMsgKanji86D7BoxVertThinLeftThickRightThinBottomTex; + +#define dgMsgKanji8740Circled1Tex "__OTR__textures/kanji/gMsgKanji8740Circled1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8740Circled1Tex[] = dgMsgKanji8740Circled1Tex; + +#define dgMsgKanji8741Circled2Tex "__OTR__textures/kanji/gMsgKanji8741Circled2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8741Circled2Tex[] = dgMsgKanji8741Circled2Tex; + +#define dgMsgKanji8742Circled3Tex "__OTR__textures/kanji/gMsgKanji8742Circled3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8742Circled3Tex[] = dgMsgKanji8742Circled3Tex; + +#define dgMsgKanji8743Circled4Tex "__OTR__textures/kanji/gMsgKanji8743Circled4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8743Circled4Tex[] = dgMsgKanji8743Circled4Tex; + +#define dgMsgKanji8744Circled5Tex "__OTR__textures/kanji/gMsgKanji8744Circled5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8744Circled5Tex[] = dgMsgKanji8744Circled5Tex; + +#define dgMsgKanji8745Circled6Tex "__OTR__textures/kanji/gMsgKanji8745Circled6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8745Circled6Tex[] = dgMsgKanji8745Circled6Tex; + +#define dgMsgKanji8746Circled7Tex "__OTR__textures/kanji/gMsgKanji8746Circled7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8746Circled7Tex[] = dgMsgKanji8746Circled7Tex; + +#define dgMsgKanji8747Circled8Tex "__OTR__textures/kanji/gMsgKanji8747Circled8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8747Circled8Tex[] = dgMsgKanji8747Circled8Tex; + +#define dgMsgKanji8748Circled9Tex "__OTR__textures/kanji/gMsgKanji8748Circled9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8748Circled9Tex[] = dgMsgKanji8748Circled9Tex; + +#define dgMsgKanji8749Circled10Tex "__OTR__textures/kanji/gMsgKanji8749Circled10Tex" +static const ALIGN_ASSET(2) char gMsgKanji8749Circled10Tex[] = dgMsgKanji8749Circled10Tex; + +#define dgMsgKanji874ACircled11Tex "__OTR__textures/kanji/gMsgKanji874ACircled11Tex" +static const ALIGN_ASSET(2) char gMsgKanji874ACircled11Tex[] = dgMsgKanji874ACircled11Tex; + +#define dgMsgKanji874BCircled12Tex "__OTR__textures/kanji/gMsgKanji874BCircled12Tex" +static const ALIGN_ASSET(2) char gMsgKanji874BCircled12Tex[] = dgMsgKanji874BCircled12Tex; + +#define dgMsgKanji874CCircled13Tex "__OTR__textures/kanji/gMsgKanji874CCircled13Tex" +static const ALIGN_ASSET(2) char gMsgKanji874CCircled13Tex[] = dgMsgKanji874CCircled13Tex; + +#define dgMsgKanji874DCircled14Tex "__OTR__textures/kanji/gMsgKanji874DCircled14Tex" +static const ALIGN_ASSET(2) char gMsgKanji874DCircled14Tex[] = dgMsgKanji874DCircled14Tex; + +#define dgMsgKanji874ECircled15Tex "__OTR__textures/kanji/gMsgKanji874ECircled15Tex" +static const ALIGN_ASSET(2) char gMsgKanji874ECircled15Tex[] = dgMsgKanji874ECircled15Tex; + +#define dgMsgKanji874FCircled16Tex "__OTR__textures/kanji/gMsgKanji874FCircled16Tex" +static const ALIGN_ASSET(2) char gMsgKanji874FCircled16Tex[] = dgMsgKanji874FCircled16Tex; + +#define dgMsgKanji8750Circled17Tex "__OTR__textures/kanji/gMsgKanji8750Circled17Tex" +static const ALIGN_ASSET(2) char gMsgKanji8750Circled17Tex[] = dgMsgKanji8750Circled17Tex; + +#define dgMsgKanji8751Circled18Tex "__OTR__textures/kanji/gMsgKanji8751Circled18Tex" +static const ALIGN_ASSET(2) char gMsgKanji8751Circled18Tex[] = dgMsgKanji8751Circled18Tex; + +#define dgMsgKanji8752Circled19Tex "__OTR__textures/kanji/gMsgKanji8752Circled19Tex" +static const ALIGN_ASSET(2) char gMsgKanji8752Circled19Tex[] = dgMsgKanji8752Circled19Tex; + +#define dgMsgKanji8753Circled20Tex "__OTR__textures/kanji/gMsgKanji8753Circled20Tex" +static const ALIGN_ASSET(2) char gMsgKanji8753Circled20Tex[] = dgMsgKanji8753Circled20Tex; + +#define dgMsgKanji8754RomanNumeral1Tex "__OTR__textures/kanji/gMsgKanji8754RomanNumeral1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8754RomanNumeral1Tex[] = dgMsgKanji8754RomanNumeral1Tex; + +#define dgMsgKanji8755RomanNumeral2Tex "__OTR__textures/kanji/gMsgKanji8755RomanNumeral2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8755RomanNumeral2Tex[] = dgMsgKanji8755RomanNumeral2Tex; + +#define dgMsgKanji8756RomanNumeral3Tex "__OTR__textures/kanji/gMsgKanji8756RomanNumeral3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8756RomanNumeral3Tex[] = dgMsgKanji8756RomanNumeral3Tex; + +#define dgMsgKanji8757RomanNumeral4Tex "__OTR__textures/kanji/gMsgKanji8757RomanNumeral4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8757RomanNumeral4Tex[] = dgMsgKanji8757RomanNumeral4Tex; + +#define dgMsgKanji8758RomanNumeral5Tex "__OTR__textures/kanji/gMsgKanji8758RomanNumeral5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8758RomanNumeral5Tex[] = dgMsgKanji8758RomanNumeral5Tex; + +#define dgMsgKanji8791IdenticalToTex "__OTR__textures/kanji/gMsgKanji8791IdenticalToTex" +static const ALIGN_ASSET(2) char gMsgKanji8791IdenticalToTex[] = dgMsgKanji8791IdenticalToTex; + +#define dgMsgKanji8792IntegralTex "__OTR__textures/kanji/gMsgKanji8792IntegralTex" +static const ALIGN_ASSET(2) char gMsgKanji8792IntegralTex[] = dgMsgKanji8792IntegralTex; + +#define dgMsgKanji8793CountourIntegralTex "__OTR__textures/kanji/gMsgKanji8793CountourIntegralTex" +static const ALIGN_ASSET(2) char gMsgKanji8793CountourIntegralTex[] = dgMsgKanji8793CountourIntegralTex; + +#define dgMsgKanji8794SummationTex "__OTR__textures/kanji/gMsgKanji8794SummationTex" +static const ALIGN_ASSET(2) char gMsgKanji8794SummationTex[] = dgMsgKanji8794SummationTex; + +#define dgMsgKanji8795SquareRootTex "__OTR__textures/kanji/gMsgKanji8795SquareRootTex" +static const ALIGN_ASSET(2) char gMsgKanji8795SquareRootTex[] = dgMsgKanji8795SquareRootTex; + +#define dgMsgKanji8796PerpendicularSymbolTex "__OTR__textures/kanji/gMsgKanji8796PerpendicularSymbolTex" +static const ALIGN_ASSET(2) char gMsgKanji8796PerpendicularSymbolTex[] = dgMsgKanji8796PerpendicularSymbolTex; + +#define dgMsgKanji8797AngleTex "__OTR__textures/kanji/gMsgKanji8797AngleTex" +static const ALIGN_ASSET(2) char gMsgKanji8797AngleTex[] = dgMsgKanji8797AngleTex; + +#define dgMsgKanji8798RightAngleTex "__OTR__textures/kanji/gMsgKanji8798RightAngleTex" +static const ALIGN_ASSET(2) char gMsgKanji8798RightAngleTex[] = dgMsgKanji8798RightAngleTex; + +#define dgMsgKanji8799RightTriangleTex "__OTR__textures/kanji/gMsgKanji8799RightTriangleTex" +static const ALIGN_ASSET(2) char gMsgKanji8799RightTriangleTex[] = dgMsgKanji8799RightTriangleTex; + +#define dgMsgKanji879ABecauseTex "__OTR__textures/kanji/gMsgKanji879ABecauseTex" +static const ALIGN_ASSET(2) char gMsgKanji879ABecauseTex[] = dgMsgKanji879ABecauseTex; + +#define dgMsgKanji879BIntersectionTex "__OTR__textures/kanji/gMsgKanji879BIntersectionTex" +static const ALIGN_ASSET(2) char gMsgKanji879BIntersectionTex[] = dgMsgKanji879BIntersectionTex; + +#define dgMsgKanji879CUnionTex "__OTR__textures/kanji/gMsgKanji879CUnionTex" +static const ALIGN_ASSET(2) char gMsgKanji879CUnionTex[] = dgMsgKanji879CUnionTex; + +#define dgMsgKanji879DEmptyTex "__OTR__textures/kanji/gMsgKanji879DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji879DEmptyTex[] = dgMsgKanji879DEmptyTex; + +#define dgMsgKanji879EEmptyTex "__OTR__textures/kanji/gMsgKanji879EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji879EEmptyTex[] = dgMsgKanji879EEmptyTex; + +#define dgMsgKanji879FHiraganaSmallATex "__OTR__textures/kanji/gMsgKanji879FHiraganaSmallATex" +static const ALIGN_ASSET(2) char gMsgKanji879FHiraganaSmallATex[] = dgMsgKanji879FHiraganaSmallATex; + +#define dgMsgKanji87A0EmptyTex "__OTR__textures/kanji/gMsgKanji87A0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A0EmptyTex[] = dgMsgKanji87A0EmptyTex; + +#define dgMsgKanji87A1EmptyTex "__OTR__textures/kanji/gMsgKanji87A1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A1EmptyTex[] = dgMsgKanji87A1EmptyTex; + +#define dgMsgKanji87A2EmptyTex "__OTR__textures/kanji/gMsgKanji87A2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A2EmptyTex[] = dgMsgKanji87A2EmptyTex; + +#define dgMsgKanji87A3EmptyTex "__OTR__textures/kanji/gMsgKanji87A3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A3EmptyTex[] = dgMsgKanji87A3EmptyTex; + +#define dgMsgKanji87A4EmptyTex "__OTR__textures/kanji/gMsgKanji87A4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A4EmptyTex[] = dgMsgKanji87A4EmptyTex; + +#define dgMsgKanji87A5EmptyTex "__OTR__textures/kanji/gMsgKanji87A5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A5EmptyTex[] = dgMsgKanji87A5EmptyTex; + +#define dgMsgKanji87A6EmptyTex "__OTR__textures/kanji/gMsgKanji87A6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A6EmptyTex[] = dgMsgKanji87A6EmptyTex; + +#define dgMsgKanji87A7EmptyTex "__OTR__textures/kanji/gMsgKanji87A7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A7EmptyTex[] = dgMsgKanji87A7EmptyTex; + +#define dgMsgKanji87A8EmptyTex "__OTR__textures/kanji/gMsgKanji87A8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A8EmptyTex[] = dgMsgKanji87A8EmptyTex; + +#define dgMsgKanji87A9EmptyTex "__OTR__textures/kanji/gMsgKanji87A9EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87A9EmptyTex[] = dgMsgKanji87A9EmptyTex; + +#define dgMsgKanji87AAEmptyTex "__OTR__textures/kanji/gMsgKanji87AAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87AAEmptyTex[] = dgMsgKanji87AAEmptyTex; + +#define dgMsgKanji87ABEmptyTex "__OTR__textures/kanji/gMsgKanji87ABEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87ABEmptyTex[] = dgMsgKanji87ABEmptyTex; + +#define dgMsgKanji87ACEmptyTex "__OTR__textures/kanji/gMsgKanji87ACEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87ACEmptyTex[] = dgMsgKanji87ACEmptyTex; + +#define dgMsgKanji87ADEmptyTex "__OTR__textures/kanji/gMsgKanji87ADEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87ADEmptyTex[] = dgMsgKanji87ADEmptyTex; + +#define dgMsgKanji87AEEmptyTex "__OTR__textures/kanji/gMsgKanji87AEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87AEEmptyTex[] = dgMsgKanji87AEEmptyTex; + +#define dgMsgKanji87AFEmptyTex "__OTR__textures/kanji/gMsgKanji87AFEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87AFEmptyTex[] = dgMsgKanji87AFEmptyTex; + +#define dgMsgKanji87B0EmptyTex "__OTR__textures/kanji/gMsgKanji87B0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87B0EmptyTex[] = dgMsgKanji87B0EmptyTex; + +#define dgMsgKanji87B1EmptyTex "__OTR__textures/kanji/gMsgKanji87B1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87B1EmptyTex[] = dgMsgKanji87B1EmptyTex; + +#define dgMsgKanji87B2EmptyTex "__OTR__textures/kanji/gMsgKanji87B2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87B2EmptyTex[] = dgMsgKanji87B2EmptyTex; + +#define dgMsgKanji87B3EmptyTex "__OTR__textures/kanji/gMsgKanji87B3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87B3EmptyTex[] = dgMsgKanji87B3EmptyTex; + +#define dgMsgKanji87B4EmptyTex "__OTR__textures/kanji/gMsgKanji87B4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87B4EmptyTex[] = dgMsgKanji87B4EmptyTex; + +#define dgMsgKanji87B5EmptyTex "__OTR__textures/kanji/gMsgKanji87B5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87B5EmptyTex[] = dgMsgKanji87B5EmptyTex; + +#define dgMsgKanji87BDEmptyTex "__OTR__textures/kanji/gMsgKanji87BDEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87BDEmptyTex[] = dgMsgKanji87BDEmptyTex; + +#define dgMsgKanji87BEEmptyTex "__OTR__textures/kanji/gMsgKanji87BEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87BEEmptyTex[] = dgMsgKanji87BEEmptyTex; + +#define dgMsgKanji87BFEmptyTex "__OTR__textures/kanji/gMsgKanji87BFEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87BFEmptyTex[] = dgMsgKanji87BFEmptyTex; + +#define dgMsgKanji87C0EmptyTex "__OTR__textures/kanji/gMsgKanji87C0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87C0EmptyTex[] = dgMsgKanji87C0EmptyTex; + +#define dgMsgKanji87C1EmptyTex "__OTR__textures/kanji/gMsgKanji87C1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87C1EmptyTex[] = dgMsgKanji87C1EmptyTex; + +#define dgMsgKanji87E5EmptyTex "__OTR__textures/kanji/gMsgKanji87E5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87E5EmptyTex[] = dgMsgKanji87E5EmptyTex; + +#define dgMsgKanji87E6EmptyTex "__OTR__textures/kanji/gMsgKanji87E6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87E6EmptyTex[] = dgMsgKanji87E6EmptyTex; + +#define dgMsgKanji87E7EmptyTex "__OTR__textures/kanji/gMsgKanji87E7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87E7EmptyTex[] = dgMsgKanji87E7EmptyTex; + +#define dgMsgKanji87E8EmptyTex "__OTR__textures/kanji/gMsgKanji87E8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87E8EmptyTex[] = dgMsgKanji87E8EmptyTex; + +#define dgMsgKanji87FAEmptyTex "__OTR__textures/kanji/gMsgKanji87FAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87FAEmptyTex[] = dgMsgKanji87FAEmptyTex; + +#define dgMsgKanji87FBEmptyTex "__OTR__textures/kanji/gMsgKanji87FBEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87FBEmptyTex[] = dgMsgKanji87FBEmptyTex; + +#define dgMsgKanji87FCEmptyTex "__OTR__textures/kanji/gMsgKanji87FCEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji87FCEmptyTex[] = dgMsgKanji87FCEmptyTex; + +#define dgMsgKanji8840KatakanaSmallATex "__OTR__textures/kanji/gMsgKanji8840KatakanaSmallATex" +static const ALIGN_ASSET(2) char gMsgKanji8840KatakanaSmallATex[] = dgMsgKanji8840KatakanaSmallATex; + +#define dgMsgKanji8841EmptyTex "__OTR__textures/kanji/gMsgKanji8841EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8841EmptyTex[] = dgMsgKanji8841EmptyTex; + +#define dgMsgKanji8842EmptyTex "__OTR__textures/kanji/gMsgKanji8842EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8842EmptyTex[] = dgMsgKanji8842EmptyTex; + +#define dgMsgKanji8843EmptyTex "__OTR__textures/kanji/gMsgKanji8843EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8843EmptyTex[] = dgMsgKanji8843EmptyTex; + +#define dgMsgKanji8844EmptyTex "__OTR__textures/kanji/gMsgKanji8844EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8844EmptyTex[] = dgMsgKanji8844EmptyTex; + +#define dgMsgKanji8845EmptyTex "__OTR__textures/kanji/gMsgKanji8845EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8845EmptyTex[] = dgMsgKanji8845EmptyTex; + +#define dgMsgKanji8846EmptyTex "__OTR__textures/kanji/gMsgKanji8846EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8846EmptyTex[] = dgMsgKanji8846EmptyTex; + +#define dgMsgKanji8847EmptyTex "__OTR__textures/kanji/gMsgKanji8847EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8847EmptyTex[] = dgMsgKanji8847EmptyTex; + +#define dgMsgKanji8848EmptyTex "__OTR__textures/kanji/gMsgKanji8848EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8848EmptyTex[] = dgMsgKanji8848EmptyTex; + +#define dgMsgKanji8849EmptyTex "__OTR__textures/kanji/gMsgKanji8849EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8849EmptyTex[] = dgMsgKanji8849EmptyTex; + +#define dgMsgKanji884AEmptyTex "__OTR__textures/kanji/gMsgKanji884AEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji884AEmptyTex[] = dgMsgKanji884AEmptyTex; + +#define dgMsgKanji884BEmptyTex "__OTR__textures/kanji/gMsgKanji884BEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji884BEmptyTex[] = dgMsgKanji884BEmptyTex; + +#define dgMsgKanji884CEmptyTex "__OTR__textures/kanji/gMsgKanji884CEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji884CEmptyTex[] = dgMsgKanji884CEmptyTex; + +#define dgMsgKanji884DEmptyTex "__OTR__textures/kanji/gMsgKanji884DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji884DEmptyTex[] = dgMsgKanji884DEmptyTex; + +#define dgMsgKanji884EEmptyTex "__OTR__textures/kanji/gMsgKanji884EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji884EEmptyTex[] = dgMsgKanji884EEmptyTex; + +#define dgMsgKanji884FEmptyTex "__OTR__textures/kanji/gMsgKanji884FEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji884FEmptyTex[] = dgMsgKanji884FEmptyTex; + +#define dgMsgKanji8850EmptyTex "__OTR__textures/kanji/gMsgKanji8850EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8850EmptyTex[] = dgMsgKanji8850EmptyTex; + +#define dgMsgKanji8851EmptyTex "__OTR__textures/kanji/gMsgKanji8851EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8851EmptyTex[] = dgMsgKanji8851EmptyTex; + +#define dgMsgKanji8852EmptyTex "__OTR__textures/kanji/gMsgKanji8852EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8852EmptyTex[] = dgMsgKanji8852EmptyTex; + +#define dgMsgKanji8853EmptyTex "__OTR__textures/kanji/gMsgKanji8853EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8853EmptyTex[] = dgMsgKanji8853EmptyTex; + +#define dgMsgKanji8854EmptyTex "__OTR__textures/kanji/gMsgKanji8854EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8854EmptyTex[] = dgMsgKanji8854EmptyTex; + +#define dgMsgKanji8855EmptyTex "__OTR__textures/kanji/gMsgKanji8855EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8855EmptyTex[] = dgMsgKanji8855EmptyTex; + +#define dgMsgKanji8856EmptyTex "__OTR__textures/kanji/gMsgKanji8856EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8856EmptyTex[] = dgMsgKanji8856EmptyTex; + +#define dgMsgKanji8857EmptyTex "__OTR__textures/kanji/gMsgKanji8857EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8857EmptyTex[] = dgMsgKanji8857EmptyTex; + +#define dgMsgKanji8858EmptyTex "__OTR__textures/kanji/gMsgKanji8858EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8858EmptyTex[] = dgMsgKanji8858EmptyTex; + +#define dgMsgKanji8859EmptyTex "__OTR__textures/kanji/gMsgKanji8859EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8859EmptyTex[] = dgMsgKanji8859EmptyTex; + +#define dgMsgKanji885AEmptyTex "__OTR__textures/kanji/gMsgKanji885AEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji885AEmptyTex[] = dgMsgKanji885AEmptyTex; + +#define dgMsgKanji885BEmptyTex "__OTR__textures/kanji/gMsgKanji885BEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji885BEmptyTex[] = dgMsgKanji885BEmptyTex; + +#define dgMsgKanji885CEmptyTex "__OTR__textures/kanji/gMsgKanji885CEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji885CEmptyTex[] = dgMsgKanji885CEmptyTex; + +#define dgMsgKanji885DEmptyTex "__OTR__textures/kanji/gMsgKanji885DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji885DEmptyTex[] = dgMsgKanji885DEmptyTex; + +#define dgMsgKanji885EEmptyTex "__OTR__textures/kanji/gMsgKanji885EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji885EEmptyTex[] = dgMsgKanji885EEmptyTex; + +#define dgMsgKanji885FEmptyTex "__OTR__textures/kanji/gMsgKanji885FEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji885FEmptyTex[] = dgMsgKanji885FEmptyTex; + +#define dgMsgKanji8860EmptyTex "__OTR__textures/kanji/gMsgKanji8860EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8860EmptyTex[] = dgMsgKanji8860EmptyTex; + +#define dgMsgKanji8861EmptyTex "__OTR__textures/kanji/gMsgKanji8861EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8861EmptyTex[] = dgMsgKanji8861EmptyTex; + +#define dgMsgKanji8862EmptyTex "__OTR__textures/kanji/gMsgKanji8862EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8862EmptyTex[] = dgMsgKanji8862EmptyTex; + +#define dgMsgKanji8863EmptyTex "__OTR__textures/kanji/gMsgKanji8863EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8863EmptyTex[] = dgMsgKanji8863EmptyTex; + +#define dgMsgKanji8864EmptyTex "__OTR__textures/kanji/gMsgKanji8864EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8864EmptyTex[] = dgMsgKanji8864EmptyTex; + +#define dgMsgKanji8865EmptyTex "__OTR__textures/kanji/gMsgKanji8865EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8865EmptyTex[] = dgMsgKanji8865EmptyTex; + +#define dgMsgKanji8866EmptyTex "__OTR__textures/kanji/gMsgKanji8866EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8866EmptyTex[] = dgMsgKanji8866EmptyTex; + +#define dgMsgKanji8867EmptyTex "__OTR__textures/kanji/gMsgKanji8867EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8867EmptyTex[] = dgMsgKanji8867EmptyTex; + +#define dgMsgKanji8868EmptyTex "__OTR__textures/kanji/gMsgKanji8868EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8868EmptyTex[] = dgMsgKanji8868EmptyTex; + +#define dgMsgKanji8869EmptyTex "__OTR__textures/kanji/gMsgKanji8869EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8869EmptyTex[] = dgMsgKanji8869EmptyTex; + +#define dgMsgKanji886AEmptyTex "__OTR__textures/kanji/gMsgKanji886AEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji886AEmptyTex[] = dgMsgKanji886AEmptyTex; + +#define dgMsgKanji886BEmptyTex "__OTR__textures/kanji/gMsgKanji886BEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji886BEmptyTex[] = dgMsgKanji886BEmptyTex; + +#define dgMsgKanji886CEmptyTex "__OTR__textures/kanji/gMsgKanji886CEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji886CEmptyTex[] = dgMsgKanji886CEmptyTex; + +#define dgMsgKanji886DEmptyTex "__OTR__textures/kanji/gMsgKanji886DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji886DEmptyTex[] = dgMsgKanji886DEmptyTex; + +#define dgMsgKanji886EEmptyTex "__OTR__textures/kanji/gMsgKanji886EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji886EEmptyTex[] = dgMsgKanji886EEmptyTex; + +#define dgMsgKanji886FEmptyTex "__OTR__textures/kanji/gMsgKanji886FEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji886FEmptyTex[] = dgMsgKanji886FEmptyTex; + +#define dgMsgKanji8870EmptyTex "__OTR__textures/kanji/gMsgKanji8870EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8870EmptyTex[] = dgMsgKanji8870EmptyTex; + +#define dgMsgKanji8871EmptyTex "__OTR__textures/kanji/gMsgKanji8871EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8871EmptyTex[] = dgMsgKanji8871EmptyTex; + +#define dgMsgKanji8872EmptyTex "__OTR__textures/kanji/gMsgKanji8872EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8872EmptyTex[] = dgMsgKanji8872EmptyTex; + +#define dgMsgKanji8873EmptyTex "__OTR__textures/kanji/gMsgKanji8873EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8873EmptyTex[] = dgMsgKanji8873EmptyTex; + +#define dgMsgKanji8874EmptyTex "__OTR__textures/kanji/gMsgKanji8874EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8874EmptyTex[] = dgMsgKanji8874EmptyTex; + +#define dgMsgKanji8875EmptyTex "__OTR__textures/kanji/gMsgKanji8875EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8875EmptyTex[] = dgMsgKanji8875EmptyTex; + +#define dgMsgKanji8876EmptyTex "__OTR__textures/kanji/gMsgKanji8876EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8876EmptyTex[] = dgMsgKanji8876EmptyTex; + +#define dgMsgKanji8877EmptyTex "__OTR__textures/kanji/gMsgKanji8877EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8877EmptyTex[] = dgMsgKanji8877EmptyTex; + +#define dgMsgKanji8878EmptyTex "__OTR__textures/kanji/gMsgKanji8878EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8878EmptyTex[] = dgMsgKanji8878EmptyTex; + +#define dgMsgKanji8879EmptyTex "__OTR__textures/kanji/gMsgKanji8879EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8879EmptyTex[] = dgMsgKanji8879EmptyTex; + +#define dgMsgKanji887AEmptyTex "__OTR__textures/kanji/gMsgKanji887AEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji887AEmptyTex[] = dgMsgKanji887AEmptyTex; + +#define dgMsgKanji887BEmptyTex "__OTR__textures/kanji/gMsgKanji887BEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji887BEmptyTex[] = dgMsgKanji887BEmptyTex; + +#define dgMsgKanji887CEmptyTex "__OTR__textures/kanji/gMsgKanji887CEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji887CEmptyTex[] = dgMsgKanji887CEmptyTex; + +#define dgMsgKanji887DEmptyTex "__OTR__textures/kanji/gMsgKanji887DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji887DEmptyTex[] = dgMsgKanji887DEmptyTex; + +#define dgMsgKanji887EEmptyTex "__OTR__textures/kanji/gMsgKanji887EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji887EEmptyTex[] = dgMsgKanji887EEmptyTex; + +#define dgMsgKanji8880EmptyTex "__OTR__textures/kanji/gMsgKanji8880EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8880EmptyTex[] = dgMsgKanji8880EmptyTex; + +#define dgMsgKanji8881EmptyTex "__OTR__textures/kanji/gMsgKanji8881EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8881EmptyTex[] = dgMsgKanji8881EmptyTex; + +#define dgMsgKanji8882EmptyTex "__OTR__textures/kanji/gMsgKanji8882EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8882EmptyTex[] = dgMsgKanji8882EmptyTex; + +#define dgMsgKanji8883EmptyTex "__OTR__textures/kanji/gMsgKanji8883EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8883EmptyTex[] = dgMsgKanji8883EmptyTex; + +#define dgMsgKanji8884EmptyTex "__OTR__textures/kanji/gMsgKanji8884EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8884EmptyTex[] = dgMsgKanji8884EmptyTex; + +#define dgMsgKanji8885EmptyTex "__OTR__textures/kanji/gMsgKanji8885EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8885EmptyTex[] = dgMsgKanji8885EmptyTex; + +#define dgMsgKanji8886EmptyTex "__OTR__textures/kanji/gMsgKanji8886EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8886EmptyTex[] = dgMsgKanji8886EmptyTex; + +#define dgMsgKanji8887EmptyTex "__OTR__textures/kanji/gMsgKanji8887EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8887EmptyTex[] = dgMsgKanji8887EmptyTex; + +#define dgMsgKanji8888EmptyTex "__OTR__textures/kanji/gMsgKanji8888EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8888EmptyTex[] = dgMsgKanji8888EmptyTex; + +#define dgMsgKanji8889EmptyTex "__OTR__textures/kanji/gMsgKanji8889EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8889EmptyTex[] = dgMsgKanji8889EmptyTex; + +#define dgMsgKanji888AEmptyTex "__OTR__textures/kanji/gMsgKanji888AEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji888AEmptyTex[] = dgMsgKanji888AEmptyTex; + +#define dgMsgKanji888BEmptyTex "__OTR__textures/kanji/gMsgKanji888BEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji888BEmptyTex[] = dgMsgKanji888BEmptyTex; + +#define dgMsgKanji888CEmptyTex "__OTR__textures/kanji/gMsgKanji888CEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji888CEmptyTex[] = dgMsgKanji888CEmptyTex; + +#define dgMsgKanji888DEmptyTex "__OTR__textures/kanji/gMsgKanji888DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji888DEmptyTex[] = dgMsgKanji888DEmptyTex; + +#define dgMsgKanji888EEmptyTex "__OTR__textures/kanji/gMsgKanji888EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji888EEmptyTex[] = dgMsgKanji888EEmptyTex; + +#define dgMsgKanji888FEmptyTex "__OTR__textures/kanji/gMsgKanji888FEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji888FEmptyTex[] = dgMsgKanji888FEmptyTex; + +#define dgMsgKanji8890EmptyTex "__OTR__textures/kanji/gMsgKanji8890EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8890EmptyTex[] = dgMsgKanji8890EmptyTex; + +#define dgMsgKanji8891EmptyTex "__OTR__textures/kanji/gMsgKanji8891EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8891EmptyTex[] = dgMsgKanji8891EmptyTex; + +#define dgMsgKanji8892EmptyTex "__OTR__textures/kanji/gMsgKanji8892EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8892EmptyTex[] = dgMsgKanji8892EmptyTex; + +#define dgMsgKanji8893EmptyTex "__OTR__textures/kanji/gMsgKanji8893EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8893EmptyTex[] = dgMsgKanji8893EmptyTex; + +#define dgMsgKanji8894EmptyTex "__OTR__textures/kanji/gMsgKanji8894EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8894EmptyTex[] = dgMsgKanji8894EmptyTex; + +#define dgMsgKanji8895EmptyTex "__OTR__textures/kanji/gMsgKanji8895EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8895EmptyTex[] = dgMsgKanji8895EmptyTex; + +#define dgMsgKanji8896EmptyTex "__OTR__textures/kanji/gMsgKanji8896EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8896EmptyTex[] = dgMsgKanji8896EmptyTex; + +#define dgMsgKanji8897EmptyTex "__OTR__textures/kanji/gMsgKanji8897EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8897EmptyTex[] = dgMsgKanji8897EmptyTex; + +#define dgMsgKanji8898EmptyTex "__OTR__textures/kanji/gMsgKanji8898EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8898EmptyTex[] = dgMsgKanji8898EmptyTex; + +#define dgMsgKanji8899EmptyTex "__OTR__textures/kanji/gMsgKanji8899EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji8899EmptyTex[] = dgMsgKanji8899EmptyTex; + +#define dgMsgKanji889AEmptyTex "__OTR__textures/kanji/gMsgKanji889AEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji889AEmptyTex[] = dgMsgKanji889AEmptyTex; + +#define dgMsgKanji889BEmptyTex "__OTR__textures/kanji/gMsgKanji889BEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji889BEmptyTex[] = dgMsgKanji889BEmptyTex; + +#define dgMsgKanji889CEmptyTex "__OTR__textures/kanji/gMsgKanji889CEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji889CEmptyTex[] = dgMsgKanji889CEmptyTex; + +#define dgMsgKanji889DEmptyTex "__OTR__textures/kanji/gMsgKanji889DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji889DEmptyTex[] = dgMsgKanji889DEmptyTex; + +#define dgMsgKanji889EEmptyTex "__OTR__textures/kanji/gMsgKanji889EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji889EEmptyTex[] = dgMsgKanji889EEmptyTex; + +#define dgMsgKanji889FTex "__OTR__textures/kanji/gMsgKanji889FTex" +static const ALIGN_ASSET(2) char gMsgKanji889FTex[] = dgMsgKanji889FTex; + +#define dgMsgKanji88A0Tex "__OTR__textures/kanji/gMsgKanji88A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A0Tex[] = dgMsgKanji88A0Tex; + +#define dgMsgKanji88A1Tex "__OTR__textures/kanji/gMsgKanji88A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A1Tex[] = dgMsgKanji88A1Tex; + +#define dgMsgKanji88A2Tex "__OTR__textures/kanji/gMsgKanji88A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A2Tex[] = dgMsgKanji88A2Tex; + +#define dgMsgKanji88A3Tex "__OTR__textures/kanji/gMsgKanji88A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A3Tex[] = dgMsgKanji88A3Tex; + +#define dgMsgKanji88A4Tex "__OTR__textures/kanji/gMsgKanji88A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A4Tex[] = dgMsgKanji88A4Tex; + +#define dgMsgKanji88A5Tex "__OTR__textures/kanji/gMsgKanji88A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A5Tex[] = dgMsgKanji88A5Tex; + +#define dgMsgKanji88A6Tex "__OTR__textures/kanji/gMsgKanji88A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A6Tex[] = dgMsgKanji88A6Tex; + +#define dgMsgKanji88A7Tex "__OTR__textures/kanji/gMsgKanji88A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A7Tex[] = dgMsgKanji88A7Tex; + +#define dgMsgKanji88A8Tex "__OTR__textures/kanji/gMsgKanji88A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A8Tex[] = dgMsgKanji88A8Tex; + +#define dgMsgKanji88A9Tex "__OTR__textures/kanji/gMsgKanji88A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji88A9Tex[] = dgMsgKanji88A9Tex; + +#define dgMsgKanji88AATex "__OTR__textures/kanji/gMsgKanji88AATex" +static const ALIGN_ASSET(2) char gMsgKanji88AATex[] = dgMsgKanji88AATex; + +#define dgMsgKanji88ABTex "__OTR__textures/kanji/gMsgKanji88ABTex" +static const ALIGN_ASSET(2) char gMsgKanji88ABTex[] = dgMsgKanji88ABTex; + +#define dgMsgKanji88ACTex "__OTR__textures/kanji/gMsgKanji88ACTex" +static const ALIGN_ASSET(2) char gMsgKanji88ACTex[] = dgMsgKanji88ACTex; + +#define dgMsgKanji88ADTex "__OTR__textures/kanji/gMsgKanji88ADTex" +static const ALIGN_ASSET(2) char gMsgKanji88ADTex[] = dgMsgKanji88ADTex; + +#define dgMsgKanji88AETex "__OTR__textures/kanji/gMsgKanji88AETex" +static const ALIGN_ASSET(2) char gMsgKanji88AETex[] = dgMsgKanji88AETex; + +#define dgMsgKanji88AFTex "__OTR__textures/kanji/gMsgKanji88AFTex" +static const ALIGN_ASSET(2) char gMsgKanji88AFTex[] = dgMsgKanji88AFTex; + +#define dgMsgKanji88B0Tex "__OTR__textures/kanji/gMsgKanji88B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B0Tex[] = dgMsgKanji88B0Tex; + +#define dgMsgKanji88B1Tex "__OTR__textures/kanji/gMsgKanji88B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B1Tex[] = dgMsgKanji88B1Tex; + +#define dgMsgKanji88B2Tex "__OTR__textures/kanji/gMsgKanji88B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B2Tex[] = dgMsgKanji88B2Tex; + +#define dgMsgKanji88B3Tex "__OTR__textures/kanji/gMsgKanji88B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B3Tex[] = dgMsgKanji88B3Tex; + +#define dgMsgKanji88B4Tex "__OTR__textures/kanji/gMsgKanji88B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B4Tex[] = dgMsgKanji88B4Tex; + +#define dgMsgKanji88B5Tex "__OTR__textures/kanji/gMsgKanji88B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B5Tex[] = dgMsgKanji88B5Tex; + +#define dgMsgKanji88B6Tex "__OTR__textures/kanji/gMsgKanji88B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B6Tex[] = dgMsgKanji88B6Tex; + +#define dgMsgKanji88B7Tex "__OTR__textures/kanji/gMsgKanji88B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B7Tex[] = dgMsgKanji88B7Tex; + +#define dgMsgKanji88B8Tex "__OTR__textures/kanji/gMsgKanji88B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B8Tex[] = dgMsgKanji88B8Tex; + +#define dgMsgKanji88B9Tex "__OTR__textures/kanji/gMsgKanji88B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji88B9Tex[] = dgMsgKanji88B9Tex; + +#define dgMsgKanji88BATex "__OTR__textures/kanji/gMsgKanji88BATex" +static const ALIGN_ASSET(2) char gMsgKanji88BATex[] = dgMsgKanji88BATex; + +#define dgMsgKanji88BBTex "__OTR__textures/kanji/gMsgKanji88BBTex" +static const ALIGN_ASSET(2) char gMsgKanji88BBTex[] = dgMsgKanji88BBTex; + +#define dgMsgKanji88BCTex "__OTR__textures/kanji/gMsgKanji88BCTex" +static const ALIGN_ASSET(2) char gMsgKanji88BCTex[] = dgMsgKanji88BCTex; + +#define dgMsgKanji88BDTex "__OTR__textures/kanji/gMsgKanji88BDTex" +static const ALIGN_ASSET(2) char gMsgKanji88BDTex[] = dgMsgKanji88BDTex; + +#define dgMsgKanji88BETex "__OTR__textures/kanji/gMsgKanji88BETex" +static const ALIGN_ASSET(2) char gMsgKanji88BETex[] = dgMsgKanji88BETex; + +#define dgMsgKanji88BFTex "__OTR__textures/kanji/gMsgKanji88BFTex" +static const ALIGN_ASSET(2) char gMsgKanji88BFTex[] = dgMsgKanji88BFTex; + +#define dgMsgKanji88C0Tex "__OTR__textures/kanji/gMsgKanji88C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C0Tex[] = dgMsgKanji88C0Tex; + +#define dgMsgKanji88C1Tex "__OTR__textures/kanji/gMsgKanji88C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C1Tex[] = dgMsgKanji88C1Tex; + +#define dgMsgKanji88C2Tex "__OTR__textures/kanji/gMsgKanji88C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C2Tex[] = dgMsgKanji88C2Tex; + +#define dgMsgKanji88C3Tex "__OTR__textures/kanji/gMsgKanji88C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C3Tex[] = dgMsgKanji88C3Tex; + +#define dgMsgKanji88C4Tex "__OTR__textures/kanji/gMsgKanji88C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C4Tex[] = dgMsgKanji88C4Tex; + +#define dgMsgKanji88C5Tex "__OTR__textures/kanji/gMsgKanji88C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C5Tex[] = dgMsgKanji88C5Tex; + +#define dgMsgKanji88C6Tex "__OTR__textures/kanji/gMsgKanji88C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C6Tex[] = dgMsgKanji88C6Tex; + +#define dgMsgKanji88C7Tex "__OTR__textures/kanji/gMsgKanji88C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C7Tex[] = dgMsgKanji88C7Tex; + +#define dgMsgKanji88C8Tex "__OTR__textures/kanji/gMsgKanji88C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C8Tex[] = dgMsgKanji88C8Tex; + +#define dgMsgKanji88C9Tex "__OTR__textures/kanji/gMsgKanji88C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji88C9Tex[] = dgMsgKanji88C9Tex; + +#define dgMsgKanji88CATex "__OTR__textures/kanji/gMsgKanji88CATex" +static const ALIGN_ASSET(2) char gMsgKanji88CATex[] = dgMsgKanji88CATex; + +#define dgMsgKanji88CBTex "__OTR__textures/kanji/gMsgKanji88CBTex" +static const ALIGN_ASSET(2) char gMsgKanji88CBTex[] = dgMsgKanji88CBTex; + +#define dgMsgKanji88CCTex "__OTR__textures/kanji/gMsgKanji88CCTex" +static const ALIGN_ASSET(2) char gMsgKanji88CCTex[] = dgMsgKanji88CCTex; + +#define dgMsgKanji88CDTex "__OTR__textures/kanji/gMsgKanji88CDTex" +static const ALIGN_ASSET(2) char gMsgKanji88CDTex[] = dgMsgKanji88CDTex; + +#define dgMsgKanji88CETex "__OTR__textures/kanji/gMsgKanji88CETex" +static const ALIGN_ASSET(2) char gMsgKanji88CETex[] = dgMsgKanji88CETex; + +#define dgMsgKanji88CFTex "__OTR__textures/kanji/gMsgKanji88CFTex" +static const ALIGN_ASSET(2) char gMsgKanji88CFTex[] = dgMsgKanji88CFTex; + +#define dgMsgKanji88D0Tex "__OTR__textures/kanji/gMsgKanji88D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D0Tex[] = dgMsgKanji88D0Tex; + +#define dgMsgKanji88D1Tex "__OTR__textures/kanji/gMsgKanji88D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D1Tex[] = dgMsgKanji88D1Tex; + +#define dgMsgKanji88D2Tex "__OTR__textures/kanji/gMsgKanji88D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D2Tex[] = dgMsgKanji88D2Tex; + +#define dgMsgKanji88D3Tex "__OTR__textures/kanji/gMsgKanji88D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D3Tex[] = dgMsgKanji88D3Tex; + +#define dgMsgKanji88D4Tex "__OTR__textures/kanji/gMsgKanji88D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D4Tex[] = dgMsgKanji88D4Tex; + +#define dgMsgKanji88D5Tex "__OTR__textures/kanji/gMsgKanji88D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D5Tex[] = dgMsgKanji88D5Tex; + +#define dgMsgKanji88D6Tex "__OTR__textures/kanji/gMsgKanji88D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D6Tex[] = dgMsgKanji88D6Tex; + +#define dgMsgKanji88D7Tex "__OTR__textures/kanji/gMsgKanji88D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D7Tex[] = dgMsgKanji88D7Tex; + +#define dgMsgKanji88D8Tex "__OTR__textures/kanji/gMsgKanji88D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D8Tex[] = dgMsgKanji88D8Tex; + +#define dgMsgKanji88D9Tex "__OTR__textures/kanji/gMsgKanji88D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji88D9Tex[] = dgMsgKanji88D9Tex; + +#define dgMsgKanji88DATex "__OTR__textures/kanji/gMsgKanji88DATex" +static const ALIGN_ASSET(2) char gMsgKanji88DATex[] = dgMsgKanji88DATex; + +#define dgMsgKanji88DBTex "__OTR__textures/kanji/gMsgKanji88DBTex" +static const ALIGN_ASSET(2) char gMsgKanji88DBTex[] = dgMsgKanji88DBTex; + +#define dgMsgKanji88DCTex "__OTR__textures/kanji/gMsgKanji88DCTex" +static const ALIGN_ASSET(2) char gMsgKanji88DCTex[] = dgMsgKanji88DCTex; + +#define dgMsgKanji88DDTex "__OTR__textures/kanji/gMsgKanji88DDTex" +static const ALIGN_ASSET(2) char gMsgKanji88DDTex[] = dgMsgKanji88DDTex; + +#define dgMsgKanji88DETex "__OTR__textures/kanji/gMsgKanji88DETex" +static const ALIGN_ASSET(2) char gMsgKanji88DETex[] = dgMsgKanji88DETex; + +#define dgMsgKanji88DFTex "__OTR__textures/kanji/gMsgKanji88DFTex" +static const ALIGN_ASSET(2) char gMsgKanji88DFTex[] = dgMsgKanji88DFTex; + +#define dgMsgKanji88E0Tex "__OTR__textures/kanji/gMsgKanji88E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E0Tex[] = dgMsgKanji88E0Tex; + +#define dgMsgKanji88E1Tex "__OTR__textures/kanji/gMsgKanji88E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E1Tex[] = dgMsgKanji88E1Tex; + +#define dgMsgKanji88E2Tex "__OTR__textures/kanji/gMsgKanji88E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E2Tex[] = dgMsgKanji88E2Tex; + +#define dgMsgKanji88E3Tex "__OTR__textures/kanji/gMsgKanji88E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E3Tex[] = dgMsgKanji88E3Tex; + +#define dgMsgKanji88E4Tex "__OTR__textures/kanji/gMsgKanji88E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E4Tex[] = dgMsgKanji88E4Tex; + +#define dgMsgKanji88E5Tex "__OTR__textures/kanji/gMsgKanji88E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E5Tex[] = dgMsgKanji88E5Tex; + +#define dgMsgKanji88E6Tex "__OTR__textures/kanji/gMsgKanji88E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E6Tex[] = dgMsgKanji88E6Tex; + +#define dgMsgKanji88E7Tex "__OTR__textures/kanji/gMsgKanji88E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E7Tex[] = dgMsgKanji88E7Tex; + +#define dgMsgKanji88E8Tex "__OTR__textures/kanji/gMsgKanji88E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E8Tex[] = dgMsgKanji88E8Tex; + +#define dgMsgKanji88E9Tex "__OTR__textures/kanji/gMsgKanji88E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji88E9Tex[] = dgMsgKanji88E9Tex; + +#define dgMsgKanji88EATex "__OTR__textures/kanji/gMsgKanji88EATex" +static const ALIGN_ASSET(2) char gMsgKanji88EATex[] = dgMsgKanji88EATex; + +#define dgMsgKanji88EBTex "__OTR__textures/kanji/gMsgKanji88EBTex" +static const ALIGN_ASSET(2) char gMsgKanji88EBTex[] = dgMsgKanji88EBTex; + +#define dgMsgKanji88ECTex "__OTR__textures/kanji/gMsgKanji88ECTex" +static const ALIGN_ASSET(2) char gMsgKanji88ECTex[] = dgMsgKanji88ECTex; + +#define dgMsgKanji88EDTex "__OTR__textures/kanji/gMsgKanji88EDTex" +static const ALIGN_ASSET(2) char gMsgKanji88EDTex[] = dgMsgKanji88EDTex; + +#define dgMsgKanji88EETex "__OTR__textures/kanji/gMsgKanji88EETex" +static const ALIGN_ASSET(2) char gMsgKanji88EETex[] = dgMsgKanji88EETex; + +#define dgMsgKanji88EFTex "__OTR__textures/kanji/gMsgKanji88EFTex" +static const ALIGN_ASSET(2) char gMsgKanji88EFTex[] = dgMsgKanji88EFTex; + +#define dgMsgKanji88F0Tex "__OTR__textures/kanji/gMsgKanji88F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F0Tex[] = dgMsgKanji88F0Tex; + +#define dgMsgKanji88F1Tex "__OTR__textures/kanji/gMsgKanji88F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F1Tex[] = dgMsgKanji88F1Tex; + +#define dgMsgKanji88F2Tex "__OTR__textures/kanji/gMsgKanji88F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F2Tex[] = dgMsgKanji88F2Tex; + +#define dgMsgKanji88F3Tex "__OTR__textures/kanji/gMsgKanji88F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F3Tex[] = dgMsgKanji88F3Tex; + +#define dgMsgKanji88F4Tex "__OTR__textures/kanji/gMsgKanji88F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F4Tex[] = dgMsgKanji88F4Tex; + +#define dgMsgKanji88F5Tex "__OTR__textures/kanji/gMsgKanji88F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F5Tex[] = dgMsgKanji88F5Tex; + +#define dgMsgKanji88F6Tex "__OTR__textures/kanji/gMsgKanji88F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F6Tex[] = dgMsgKanji88F6Tex; + +#define dgMsgKanji88F7Tex "__OTR__textures/kanji/gMsgKanji88F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F7Tex[] = dgMsgKanji88F7Tex; + +#define dgMsgKanji88F8Tex "__OTR__textures/kanji/gMsgKanji88F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F8Tex[] = dgMsgKanji88F8Tex; + +#define dgMsgKanji88F9Tex "__OTR__textures/kanji/gMsgKanji88F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji88F9Tex[] = dgMsgKanji88F9Tex; + +#define dgMsgKanji88FATex "__OTR__textures/kanji/gMsgKanji88FATex" +static const ALIGN_ASSET(2) char gMsgKanji88FATex[] = dgMsgKanji88FATex; + +#define dgMsgKanji88FBTex "__OTR__textures/kanji/gMsgKanji88FBTex" +static const ALIGN_ASSET(2) char gMsgKanji88FBTex[] = dgMsgKanji88FBTex; + +#define dgMsgKanji88FCTex "__OTR__textures/kanji/gMsgKanji88FCTex" +static const ALIGN_ASSET(2) char gMsgKanji88FCTex[] = dgMsgKanji88FCTex; + +#define dgMsgKanji8940Tex "__OTR__textures/kanji/gMsgKanji8940Tex" +static const ALIGN_ASSET(2) char gMsgKanji8940Tex[] = dgMsgKanji8940Tex; + +#define dgMsgKanji8941Tex "__OTR__textures/kanji/gMsgKanji8941Tex" +static const ALIGN_ASSET(2) char gMsgKanji8941Tex[] = dgMsgKanji8941Tex; + +#define dgMsgKanji8942Tex "__OTR__textures/kanji/gMsgKanji8942Tex" +static const ALIGN_ASSET(2) char gMsgKanji8942Tex[] = dgMsgKanji8942Tex; + +#define dgMsgKanji8943Tex "__OTR__textures/kanji/gMsgKanji8943Tex" +static const ALIGN_ASSET(2) char gMsgKanji8943Tex[] = dgMsgKanji8943Tex; + +#define dgMsgKanji8944Tex "__OTR__textures/kanji/gMsgKanji8944Tex" +static const ALIGN_ASSET(2) char gMsgKanji8944Tex[] = dgMsgKanji8944Tex; + +#define dgMsgKanji8945Tex "__OTR__textures/kanji/gMsgKanji8945Tex" +static const ALIGN_ASSET(2) char gMsgKanji8945Tex[] = dgMsgKanji8945Tex; + +#define dgMsgKanji8946Tex "__OTR__textures/kanji/gMsgKanji8946Tex" +static const ALIGN_ASSET(2) char gMsgKanji8946Tex[] = dgMsgKanji8946Tex; + +#define dgMsgKanji8947Tex "__OTR__textures/kanji/gMsgKanji8947Tex" +static const ALIGN_ASSET(2) char gMsgKanji8947Tex[] = dgMsgKanji8947Tex; + +#define dgMsgKanji8948Tex "__OTR__textures/kanji/gMsgKanji8948Tex" +static const ALIGN_ASSET(2) char gMsgKanji8948Tex[] = dgMsgKanji8948Tex; + +#define dgMsgKanji8949Tex "__OTR__textures/kanji/gMsgKanji8949Tex" +static const ALIGN_ASSET(2) char gMsgKanji8949Tex[] = dgMsgKanji8949Tex; + +#define dgMsgKanji894ATex "__OTR__textures/kanji/gMsgKanji894ATex" +static const ALIGN_ASSET(2) char gMsgKanji894ATex[] = dgMsgKanji894ATex; + +#define dgMsgKanji894BTex "__OTR__textures/kanji/gMsgKanji894BTex" +static const ALIGN_ASSET(2) char gMsgKanji894BTex[] = dgMsgKanji894BTex; + +#define dgMsgKanji894CTex "__OTR__textures/kanji/gMsgKanji894CTex" +static const ALIGN_ASSET(2) char gMsgKanji894CTex[] = dgMsgKanji894CTex; + +#define dgMsgKanji894DTex "__OTR__textures/kanji/gMsgKanji894DTex" +static const ALIGN_ASSET(2) char gMsgKanji894DTex[] = dgMsgKanji894DTex; + +#define dgMsgKanji894ETex "__OTR__textures/kanji/gMsgKanji894ETex" +static const ALIGN_ASSET(2) char gMsgKanji894ETex[] = dgMsgKanji894ETex; + +#define dgMsgKanji894FTex "__OTR__textures/kanji/gMsgKanji894FTex" +static const ALIGN_ASSET(2) char gMsgKanji894FTex[] = dgMsgKanji894FTex; + +#define dgMsgKanji8950Tex "__OTR__textures/kanji/gMsgKanji8950Tex" +static const ALIGN_ASSET(2) char gMsgKanji8950Tex[] = dgMsgKanji8950Tex; + +#define dgMsgKanji8951Tex "__OTR__textures/kanji/gMsgKanji8951Tex" +static const ALIGN_ASSET(2) char gMsgKanji8951Tex[] = dgMsgKanji8951Tex; + +#define dgMsgKanji8952Tex "__OTR__textures/kanji/gMsgKanji8952Tex" +static const ALIGN_ASSET(2) char gMsgKanji8952Tex[] = dgMsgKanji8952Tex; + +#define dgMsgKanji8953Tex "__OTR__textures/kanji/gMsgKanji8953Tex" +static const ALIGN_ASSET(2) char gMsgKanji8953Tex[] = dgMsgKanji8953Tex; + +#define dgMsgKanji8954Tex "__OTR__textures/kanji/gMsgKanji8954Tex" +static const ALIGN_ASSET(2) char gMsgKanji8954Tex[] = dgMsgKanji8954Tex; + +#define dgMsgKanji8955Tex "__OTR__textures/kanji/gMsgKanji8955Tex" +static const ALIGN_ASSET(2) char gMsgKanji8955Tex[] = dgMsgKanji8955Tex; + +#define dgMsgKanji8956Tex "__OTR__textures/kanji/gMsgKanji8956Tex" +static const ALIGN_ASSET(2) char gMsgKanji8956Tex[] = dgMsgKanji8956Tex; + +#define dgMsgKanji8957Tex "__OTR__textures/kanji/gMsgKanji8957Tex" +static const ALIGN_ASSET(2) char gMsgKanji8957Tex[] = dgMsgKanji8957Tex; + +#define dgMsgKanji8958Tex "__OTR__textures/kanji/gMsgKanji8958Tex" +static const ALIGN_ASSET(2) char gMsgKanji8958Tex[] = dgMsgKanji8958Tex; + +#define dgMsgKanji8959Tex "__OTR__textures/kanji/gMsgKanji8959Tex" +static const ALIGN_ASSET(2) char gMsgKanji8959Tex[] = dgMsgKanji8959Tex; + +#define dgMsgKanji895ATex "__OTR__textures/kanji/gMsgKanji895ATex" +static const ALIGN_ASSET(2) char gMsgKanji895ATex[] = dgMsgKanji895ATex; + +#define dgMsgKanji895BTex "__OTR__textures/kanji/gMsgKanji895BTex" +static const ALIGN_ASSET(2) char gMsgKanji895BTex[] = dgMsgKanji895BTex; + +#define dgMsgKanji895CTex "__OTR__textures/kanji/gMsgKanji895CTex" +static const ALIGN_ASSET(2) char gMsgKanji895CTex[] = dgMsgKanji895CTex; + +#define dgMsgKanji895DTex "__OTR__textures/kanji/gMsgKanji895DTex" +static const ALIGN_ASSET(2) char gMsgKanji895DTex[] = dgMsgKanji895DTex; + +#define dgMsgKanji895ETex "__OTR__textures/kanji/gMsgKanji895ETex" +static const ALIGN_ASSET(2) char gMsgKanji895ETex[] = dgMsgKanji895ETex; + +#define dgMsgKanji895FTex "__OTR__textures/kanji/gMsgKanji895FTex" +static const ALIGN_ASSET(2) char gMsgKanji895FTex[] = dgMsgKanji895FTex; + +#define dgMsgKanji8960Tex "__OTR__textures/kanji/gMsgKanji8960Tex" +static const ALIGN_ASSET(2) char gMsgKanji8960Tex[] = dgMsgKanji8960Tex; + +#define dgMsgKanji8961Tex "__OTR__textures/kanji/gMsgKanji8961Tex" +static const ALIGN_ASSET(2) char gMsgKanji8961Tex[] = dgMsgKanji8961Tex; + +#define dgMsgKanji8962Tex "__OTR__textures/kanji/gMsgKanji8962Tex" +static const ALIGN_ASSET(2) char gMsgKanji8962Tex[] = dgMsgKanji8962Tex; + +#define dgMsgKanji8963Tex "__OTR__textures/kanji/gMsgKanji8963Tex" +static const ALIGN_ASSET(2) char gMsgKanji8963Tex[] = dgMsgKanji8963Tex; + +#define dgMsgKanji8964Tex "__OTR__textures/kanji/gMsgKanji8964Tex" +static const ALIGN_ASSET(2) char gMsgKanji8964Tex[] = dgMsgKanji8964Tex; + +#define dgMsgKanji8965Tex "__OTR__textures/kanji/gMsgKanji8965Tex" +static const ALIGN_ASSET(2) char gMsgKanji8965Tex[] = dgMsgKanji8965Tex; + +#define dgMsgKanji8966Tex "__OTR__textures/kanji/gMsgKanji8966Tex" +static const ALIGN_ASSET(2) char gMsgKanji8966Tex[] = dgMsgKanji8966Tex; + +#define dgMsgKanji8967Tex "__OTR__textures/kanji/gMsgKanji8967Tex" +static const ALIGN_ASSET(2) char gMsgKanji8967Tex[] = dgMsgKanji8967Tex; + +#define dgMsgKanji8968Tex "__OTR__textures/kanji/gMsgKanji8968Tex" +static const ALIGN_ASSET(2) char gMsgKanji8968Tex[] = dgMsgKanji8968Tex; + +#define dgMsgKanji8969Tex "__OTR__textures/kanji/gMsgKanji8969Tex" +static const ALIGN_ASSET(2) char gMsgKanji8969Tex[] = dgMsgKanji8969Tex; + +#define dgMsgKanji896ATex "__OTR__textures/kanji/gMsgKanji896ATex" +static const ALIGN_ASSET(2) char gMsgKanji896ATex[] = dgMsgKanji896ATex; + +#define dgMsgKanji896BTex "__OTR__textures/kanji/gMsgKanji896BTex" +static const ALIGN_ASSET(2) char gMsgKanji896BTex[] = dgMsgKanji896BTex; + +#define dgMsgKanji896CTex "__OTR__textures/kanji/gMsgKanji896CTex" +static const ALIGN_ASSET(2) char gMsgKanji896CTex[] = dgMsgKanji896CTex; + +#define dgMsgKanji896DTex "__OTR__textures/kanji/gMsgKanji896DTex" +static const ALIGN_ASSET(2) char gMsgKanji896DTex[] = dgMsgKanji896DTex; + +#define dgMsgKanji896ETex "__OTR__textures/kanji/gMsgKanji896ETex" +static const ALIGN_ASSET(2) char gMsgKanji896ETex[] = dgMsgKanji896ETex; + +#define dgMsgKanji896FTex "__OTR__textures/kanji/gMsgKanji896FTex" +static const ALIGN_ASSET(2) char gMsgKanji896FTex[] = dgMsgKanji896FTex; + +#define dgMsgKanji8970Tex "__OTR__textures/kanji/gMsgKanji8970Tex" +static const ALIGN_ASSET(2) char gMsgKanji8970Tex[] = dgMsgKanji8970Tex; + +#define dgMsgKanji8971Tex "__OTR__textures/kanji/gMsgKanji8971Tex" +static const ALIGN_ASSET(2) char gMsgKanji8971Tex[] = dgMsgKanji8971Tex; + +#define dgMsgKanji8972Tex "__OTR__textures/kanji/gMsgKanji8972Tex" +static const ALIGN_ASSET(2) char gMsgKanji8972Tex[] = dgMsgKanji8972Tex; + +#define dgMsgKanji8973Tex "__OTR__textures/kanji/gMsgKanji8973Tex" +static const ALIGN_ASSET(2) char gMsgKanji8973Tex[] = dgMsgKanji8973Tex; + +#define dgMsgKanji8974Tex "__OTR__textures/kanji/gMsgKanji8974Tex" +static const ALIGN_ASSET(2) char gMsgKanji8974Tex[] = dgMsgKanji8974Tex; + +#define dgMsgKanji8975Tex "__OTR__textures/kanji/gMsgKanji8975Tex" +static const ALIGN_ASSET(2) char gMsgKanji8975Tex[] = dgMsgKanji8975Tex; + +#define dgMsgKanji8976Tex "__OTR__textures/kanji/gMsgKanji8976Tex" +static const ALIGN_ASSET(2) char gMsgKanji8976Tex[] = dgMsgKanji8976Tex; + +#define dgMsgKanji8977Tex "__OTR__textures/kanji/gMsgKanji8977Tex" +static const ALIGN_ASSET(2) char gMsgKanji8977Tex[] = dgMsgKanji8977Tex; + +#define dgMsgKanji8978Tex "__OTR__textures/kanji/gMsgKanji8978Tex" +static const ALIGN_ASSET(2) char gMsgKanji8978Tex[] = dgMsgKanji8978Tex; + +#define dgMsgKanji8979Tex "__OTR__textures/kanji/gMsgKanji8979Tex" +static const ALIGN_ASSET(2) char gMsgKanji8979Tex[] = dgMsgKanji8979Tex; + +#define dgMsgKanji897ATex "__OTR__textures/kanji/gMsgKanji897ATex" +static const ALIGN_ASSET(2) char gMsgKanji897ATex[] = dgMsgKanji897ATex; + +#define dgMsgKanji897BTex "__OTR__textures/kanji/gMsgKanji897BTex" +static const ALIGN_ASSET(2) char gMsgKanji897BTex[] = dgMsgKanji897BTex; + +#define dgMsgKanji897CTex "__OTR__textures/kanji/gMsgKanji897CTex" +static const ALIGN_ASSET(2) char gMsgKanji897CTex[] = dgMsgKanji897CTex; + +#define dgMsgKanji897DTex "__OTR__textures/kanji/gMsgKanji897DTex" +static const ALIGN_ASSET(2) char gMsgKanji897DTex[] = dgMsgKanji897DTex; + +#define dgMsgKanji897ETex "__OTR__textures/kanji/gMsgKanji897ETex" +static const ALIGN_ASSET(2) char gMsgKanji897ETex[] = dgMsgKanji897ETex; + +#define dgMsgKanji8980Tex "__OTR__textures/kanji/gMsgKanji8980Tex" +static const ALIGN_ASSET(2) char gMsgKanji8980Tex[] = dgMsgKanji8980Tex; + +#define dgMsgKanji8981Tex "__OTR__textures/kanji/gMsgKanji8981Tex" +static const ALIGN_ASSET(2) char gMsgKanji8981Tex[] = dgMsgKanji8981Tex; + +#define dgMsgKanji8982Tex "__OTR__textures/kanji/gMsgKanji8982Tex" +static const ALIGN_ASSET(2) char gMsgKanji8982Tex[] = dgMsgKanji8982Tex; + +#define dgMsgKanji8983Tex "__OTR__textures/kanji/gMsgKanji8983Tex" +static const ALIGN_ASSET(2) char gMsgKanji8983Tex[] = dgMsgKanji8983Tex; + +#define dgMsgKanji8984Tex "__OTR__textures/kanji/gMsgKanji8984Tex" +static const ALIGN_ASSET(2) char gMsgKanji8984Tex[] = dgMsgKanji8984Tex; + +#define dgMsgKanji8985Tex "__OTR__textures/kanji/gMsgKanji8985Tex" +static const ALIGN_ASSET(2) char gMsgKanji8985Tex[] = dgMsgKanji8985Tex; + +#define dgMsgKanji8986Tex "__OTR__textures/kanji/gMsgKanji8986Tex" +static const ALIGN_ASSET(2) char gMsgKanji8986Tex[] = dgMsgKanji8986Tex; + +#define dgMsgKanji8987Tex "__OTR__textures/kanji/gMsgKanji8987Tex" +static const ALIGN_ASSET(2) char gMsgKanji8987Tex[] = dgMsgKanji8987Tex; + +#define dgMsgKanji8988Tex "__OTR__textures/kanji/gMsgKanji8988Tex" +static const ALIGN_ASSET(2) char gMsgKanji8988Tex[] = dgMsgKanji8988Tex; + +#define dgMsgKanji8989Tex "__OTR__textures/kanji/gMsgKanji8989Tex" +static const ALIGN_ASSET(2) char gMsgKanji8989Tex[] = dgMsgKanji8989Tex; + +#define dgMsgKanji898ATex "__OTR__textures/kanji/gMsgKanji898ATex" +static const ALIGN_ASSET(2) char gMsgKanji898ATex[] = dgMsgKanji898ATex; + +#define dgMsgKanji898BTex "__OTR__textures/kanji/gMsgKanji898BTex" +static const ALIGN_ASSET(2) char gMsgKanji898BTex[] = dgMsgKanji898BTex; + +#define dgMsgKanji898CTex "__OTR__textures/kanji/gMsgKanji898CTex" +static const ALIGN_ASSET(2) char gMsgKanji898CTex[] = dgMsgKanji898CTex; + +#define dgMsgKanji898DTex "__OTR__textures/kanji/gMsgKanji898DTex" +static const ALIGN_ASSET(2) char gMsgKanji898DTex[] = dgMsgKanji898DTex; + +#define dgMsgKanji898ETex "__OTR__textures/kanji/gMsgKanji898ETex" +static const ALIGN_ASSET(2) char gMsgKanji898ETex[] = dgMsgKanji898ETex; + +#define dgMsgKanji898FTex "__OTR__textures/kanji/gMsgKanji898FTex" +static const ALIGN_ASSET(2) char gMsgKanji898FTex[] = dgMsgKanji898FTex; + +#define dgMsgKanji8990Tex "__OTR__textures/kanji/gMsgKanji8990Tex" +static const ALIGN_ASSET(2) char gMsgKanji8990Tex[] = dgMsgKanji8990Tex; + +#define dgMsgKanji8991Tex "__OTR__textures/kanji/gMsgKanji8991Tex" +static const ALIGN_ASSET(2) char gMsgKanji8991Tex[] = dgMsgKanji8991Tex; + +#define dgMsgKanji8992Tex "__OTR__textures/kanji/gMsgKanji8992Tex" +static const ALIGN_ASSET(2) char gMsgKanji8992Tex[] = dgMsgKanji8992Tex; + +#define dgMsgKanji8993Tex "__OTR__textures/kanji/gMsgKanji8993Tex" +static const ALIGN_ASSET(2) char gMsgKanji8993Tex[] = dgMsgKanji8993Tex; + +#define dgMsgKanji8994Tex "__OTR__textures/kanji/gMsgKanji8994Tex" +static const ALIGN_ASSET(2) char gMsgKanji8994Tex[] = dgMsgKanji8994Tex; + +#define dgMsgKanji8995Tex "__OTR__textures/kanji/gMsgKanji8995Tex" +static const ALIGN_ASSET(2) char gMsgKanji8995Tex[] = dgMsgKanji8995Tex; + +#define dgMsgKanji8996Tex "__OTR__textures/kanji/gMsgKanji8996Tex" +static const ALIGN_ASSET(2) char gMsgKanji8996Tex[] = dgMsgKanji8996Tex; + +#define dgMsgKanji8997Tex "__OTR__textures/kanji/gMsgKanji8997Tex" +static const ALIGN_ASSET(2) char gMsgKanji8997Tex[] = dgMsgKanji8997Tex; + +#define dgMsgKanji8998Tex "__OTR__textures/kanji/gMsgKanji8998Tex" +static const ALIGN_ASSET(2) char gMsgKanji8998Tex[] = dgMsgKanji8998Tex; + +#define dgMsgKanji8999Tex "__OTR__textures/kanji/gMsgKanji8999Tex" +static const ALIGN_ASSET(2) char gMsgKanji8999Tex[] = dgMsgKanji8999Tex; + +#define dgMsgKanji899ATex "__OTR__textures/kanji/gMsgKanji899ATex" +static const ALIGN_ASSET(2) char gMsgKanji899ATex[] = dgMsgKanji899ATex; + +#define dgMsgKanji899BTex "__OTR__textures/kanji/gMsgKanji899BTex" +static const ALIGN_ASSET(2) char gMsgKanji899BTex[] = dgMsgKanji899BTex; + +#define dgMsgKanji899CTex "__OTR__textures/kanji/gMsgKanji899CTex" +static const ALIGN_ASSET(2) char gMsgKanji899CTex[] = dgMsgKanji899CTex; + +#define dgMsgKanji899DTex "__OTR__textures/kanji/gMsgKanji899DTex" +static const ALIGN_ASSET(2) char gMsgKanji899DTex[] = dgMsgKanji899DTex; + +#define dgMsgKanji899ETex "__OTR__textures/kanji/gMsgKanji899ETex" +static const ALIGN_ASSET(2) char gMsgKanji899ETex[] = dgMsgKanji899ETex; + +#define dgMsgKanji899FTex "__OTR__textures/kanji/gMsgKanji899FTex" +static const ALIGN_ASSET(2) char gMsgKanji899FTex[] = dgMsgKanji899FTex; + +#define dgMsgKanji89A0Tex "__OTR__textures/kanji/gMsgKanji89A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A0Tex[] = dgMsgKanji89A0Tex; + +#define dgMsgKanji89A1Tex "__OTR__textures/kanji/gMsgKanji89A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A1Tex[] = dgMsgKanji89A1Tex; + +#define dgMsgKanji89A2Tex "__OTR__textures/kanji/gMsgKanji89A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A2Tex[] = dgMsgKanji89A2Tex; + +#define dgMsgKanji89A3Tex "__OTR__textures/kanji/gMsgKanji89A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A3Tex[] = dgMsgKanji89A3Tex; + +#define dgMsgKanji89A4Tex "__OTR__textures/kanji/gMsgKanji89A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A4Tex[] = dgMsgKanji89A4Tex; + +#define dgMsgKanji89A5Tex "__OTR__textures/kanji/gMsgKanji89A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A5Tex[] = dgMsgKanji89A5Tex; + +#define dgMsgKanji89A6Tex "__OTR__textures/kanji/gMsgKanji89A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A6Tex[] = dgMsgKanji89A6Tex; + +#define dgMsgKanji89A7Tex "__OTR__textures/kanji/gMsgKanji89A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A7Tex[] = dgMsgKanji89A7Tex; + +#define dgMsgKanji89A8Tex "__OTR__textures/kanji/gMsgKanji89A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A8Tex[] = dgMsgKanji89A8Tex; + +#define dgMsgKanji89A9Tex "__OTR__textures/kanji/gMsgKanji89A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji89A9Tex[] = dgMsgKanji89A9Tex; + +#define dgMsgKanji89AATex "__OTR__textures/kanji/gMsgKanji89AATex" +static const ALIGN_ASSET(2) char gMsgKanji89AATex[] = dgMsgKanji89AATex; + +#define dgMsgKanji89ABTex "__OTR__textures/kanji/gMsgKanji89ABTex" +static const ALIGN_ASSET(2) char gMsgKanji89ABTex[] = dgMsgKanji89ABTex; + +#define dgMsgKanji89ACTex "__OTR__textures/kanji/gMsgKanji89ACTex" +static const ALIGN_ASSET(2) char gMsgKanji89ACTex[] = dgMsgKanji89ACTex; + +#define dgMsgKanji89ADTex "__OTR__textures/kanji/gMsgKanji89ADTex" +static const ALIGN_ASSET(2) char gMsgKanji89ADTex[] = dgMsgKanji89ADTex; + +#define dgMsgKanji89AETex "__OTR__textures/kanji/gMsgKanji89AETex" +static const ALIGN_ASSET(2) char gMsgKanji89AETex[] = dgMsgKanji89AETex; + +#define dgMsgKanji89AFTex "__OTR__textures/kanji/gMsgKanji89AFTex" +static const ALIGN_ASSET(2) char gMsgKanji89AFTex[] = dgMsgKanji89AFTex; + +#define dgMsgKanji89B0Tex "__OTR__textures/kanji/gMsgKanji89B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B0Tex[] = dgMsgKanji89B0Tex; + +#define dgMsgKanji89B1Tex "__OTR__textures/kanji/gMsgKanji89B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B1Tex[] = dgMsgKanji89B1Tex; + +#define dgMsgKanji89B2Tex "__OTR__textures/kanji/gMsgKanji89B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B2Tex[] = dgMsgKanji89B2Tex; + +#define dgMsgKanji89B3Tex "__OTR__textures/kanji/gMsgKanji89B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B3Tex[] = dgMsgKanji89B3Tex; + +#define dgMsgKanji89B4Tex "__OTR__textures/kanji/gMsgKanji89B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B4Tex[] = dgMsgKanji89B4Tex; + +#define dgMsgKanji89B5Tex "__OTR__textures/kanji/gMsgKanji89B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B5Tex[] = dgMsgKanji89B5Tex; + +#define dgMsgKanji89B6Tex "__OTR__textures/kanji/gMsgKanji89B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B6Tex[] = dgMsgKanji89B6Tex; + +#define dgMsgKanji89B7Tex "__OTR__textures/kanji/gMsgKanji89B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B7Tex[] = dgMsgKanji89B7Tex; + +#define dgMsgKanji89B8Tex "__OTR__textures/kanji/gMsgKanji89B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B8Tex[] = dgMsgKanji89B8Tex; + +#define dgMsgKanji89B9Tex "__OTR__textures/kanji/gMsgKanji89B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji89B9Tex[] = dgMsgKanji89B9Tex; + +#define dgMsgKanji89BATex "__OTR__textures/kanji/gMsgKanji89BATex" +static const ALIGN_ASSET(2) char gMsgKanji89BATex[] = dgMsgKanji89BATex; + +#define dgMsgKanji89BBTex "__OTR__textures/kanji/gMsgKanji89BBTex" +static const ALIGN_ASSET(2) char gMsgKanji89BBTex[] = dgMsgKanji89BBTex; + +#define dgMsgKanji89BCTex "__OTR__textures/kanji/gMsgKanji89BCTex" +static const ALIGN_ASSET(2) char gMsgKanji89BCTex[] = dgMsgKanji89BCTex; + +#define dgMsgKanji89BDTex "__OTR__textures/kanji/gMsgKanji89BDTex" +static const ALIGN_ASSET(2) char gMsgKanji89BDTex[] = dgMsgKanji89BDTex; + +#define dgMsgKanji89BETex "__OTR__textures/kanji/gMsgKanji89BETex" +static const ALIGN_ASSET(2) char gMsgKanji89BETex[] = dgMsgKanji89BETex; + +#define dgMsgKanji89BFTex "__OTR__textures/kanji/gMsgKanji89BFTex" +static const ALIGN_ASSET(2) char gMsgKanji89BFTex[] = dgMsgKanji89BFTex; + +#define dgMsgKanji89C0Tex "__OTR__textures/kanji/gMsgKanji89C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C0Tex[] = dgMsgKanji89C0Tex; + +#define dgMsgKanji89C1Tex "__OTR__textures/kanji/gMsgKanji89C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C1Tex[] = dgMsgKanji89C1Tex; + +#define dgMsgKanji89C2Tex "__OTR__textures/kanji/gMsgKanji89C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C2Tex[] = dgMsgKanji89C2Tex; + +#define dgMsgKanji89C3Tex "__OTR__textures/kanji/gMsgKanji89C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C3Tex[] = dgMsgKanji89C3Tex; + +#define dgMsgKanji89C4Tex "__OTR__textures/kanji/gMsgKanji89C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C4Tex[] = dgMsgKanji89C4Tex; + +#define dgMsgKanji89C5Tex "__OTR__textures/kanji/gMsgKanji89C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C5Tex[] = dgMsgKanji89C5Tex; + +#define dgMsgKanji89C6Tex "__OTR__textures/kanji/gMsgKanji89C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C6Tex[] = dgMsgKanji89C6Tex; + +#define dgMsgKanji89C7Tex "__OTR__textures/kanji/gMsgKanji89C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C7Tex[] = dgMsgKanji89C7Tex; + +#define dgMsgKanji89C8Tex "__OTR__textures/kanji/gMsgKanji89C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C8Tex[] = dgMsgKanji89C8Tex; + +#define dgMsgKanji89C9Tex "__OTR__textures/kanji/gMsgKanji89C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji89C9Tex[] = dgMsgKanji89C9Tex; + +#define dgMsgKanji89CATex "__OTR__textures/kanji/gMsgKanji89CATex" +static const ALIGN_ASSET(2) char gMsgKanji89CATex[] = dgMsgKanji89CATex; + +#define dgMsgKanji89CBTex "__OTR__textures/kanji/gMsgKanji89CBTex" +static const ALIGN_ASSET(2) char gMsgKanji89CBTex[] = dgMsgKanji89CBTex; + +#define dgMsgKanji89CCTex "__OTR__textures/kanji/gMsgKanji89CCTex" +static const ALIGN_ASSET(2) char gMsgKanji89CCTex[] = dgMsgKanji89CCTex; + +#define dgMsgKanji89CDTex "__OTR__textures/kanji/gMsgKanji89CDTex" +static const ALIGN_ASSET(2) char gMsgKanji89CDTex[] = dgMsgKanji89CDTex; + +#define dgMsgKanji89CETex "__OTR__textures/kanji/gMsgKanji89CETex" +static const ALIGN_ASSET(2) char gMsgKanji89CETex[] = dgMsgKanji89CETex; + +#define dgMsgKanji89CFTex "__OTR__textures/kanji/gMsgKanji89CFTex" +static const ALIGN_ASSET(2) char gMsgKanji89CFTex[] = dgMsgKanji89CFTex; + +#define dgMsgKanji89D0Tex "__OTR__textures/kanji/gMsgKanji89D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D0Tex[] = dgMsgKanji89D0Tex; + +#define dgMsgKanji89D1Tex "__OTR__textures/kanji/gMsgKanji89D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D1Tex[] = dgMsgKanji89D1Tex; + +#define dgMsgKanji89D2Tex "__OTR__textures/kanji/gMsgKanji89D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D2Tex[] = dgMsgKanji89D2Tex; + +#define dgMsgKanji89D3Tex "__OTR__textures/kanji/gMsgKanji89D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D3Tex[] = dgMsgKanji89D3Tex; + +#define dgMsgKanji89D4Tex "__OTR__textures/kanji/gMsgKanji89D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D4Tex[] = dgMsgKanji89D4Tex; + +#define dgMsgKanji89D5Tex "__OTR__textures/kanji/gMsgKanji89D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D5Tex[] = dgMsgKanji89D5Tex; + +#define dgMsgKanji89D6Tex "__OTR__textures/kanji/gMsgKanji89D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D6Tex[] = dgMsgKanji89D6Tex; + +#define dgMsgKanji89D7Tex "__OTR__textures/kanji/gMsgKanji89D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D7Tex[] = dgMsgKanji89D7Tex; + +#define dgMsgKanji89D8Tex "__OTR__textures/kanji/gMsgKanji89D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D8Tex[] = dgMsgKanji89D8Tex; + +#define dgMsgKanji89D9Tex "__OTR__textures/kanji/gMsgKanji89D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji89D9Tex[] = dgMsgKanji89D9Tex; + +#define dgMsgKanji89DATex "__OTR__textures/kanji/gMsgKanji89DATex" +static const ALIGN_ASSET(2) char gMsgKanji89DATex[] = dgMsgKanji89DATex; + +#define dgMsgKanji89DBTex "__OTR__textures/kanji/gMsgKanji89DBTex" +static const ALIGN_ASSET(2) char gMsgKanji89DBTex[] = dgMsgKanji89DBTex; + +#define dgMsgKanji89DCTex "__OTR__textures/kanji/gMsgKanji89DCTex" +static const ALIGN_ASSET(2) char gMsgKanji89DCTex[] = dgMsgKanji89DCTex; + +#define dgMsgKanji89DDTex "__OTR__textures/kanji/gMsgKanji89DDTex" +static const ALIGN_ASSET(2) char gMsgKanji89DDTex[] = dgMsgKanji89DDTex; + +#define dgMsgKanji89DETex "__OTR__textures/kanji/gMsgKanji89DETex" +static const ALIGN_ASSET(2) char gMsgKanji89DETex[] = dgMsgKanji89DETex; + +#define dgMsgKanji89DFTex "__OTR__textures/kanji/gMsgKanji89DFTex" +static const ALIGN_ASSET(2) char gMsgKanji89DFTex[] = dgMsgKanji89DFTex; + +#define dgMsgKanji89E0Tex "__OTR__textures/kanji/gMsgKanji89E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E0Tex[] = dgMsgKanji89E0Tex; + +#define dgMsgKanji89E1Tex "__OTR__textures/kanji/gMsgKanji89E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E1Tex[] = dgMsgKanji89E1Tex; + +#define dgMsgKanji89E2Tex "__OTR__textures/kanji/gMsgKanji89E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E2Tex[] = dgMsgKanji89E2Tex; + +#define dgMsgKanji89E3Tex "__OTR__textures/kanji/gMsgKanji89E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E3Tex[] = dgMsgKanji89E3Tex; + +#define dgMsgKanji89E4Tex "__OTR__textures/kanji/gMsgKanji89E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E4Tex[] = dgMsgKanji89E4Tex; + +#define dgMsgKanji89E5Tex "__OTR__textures/kanji/gMsgKanji89E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E5Tex[] = dgMsgKanji89E5Tex; + +#define dgMsgKanji89E6Tex "__OTR__textures/kanji/gMsgKanji89E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E6Tex[] = dgMsgKanji89E6Tex; + +#define dgMsgKanji89E7Tex "__OTR__textures/kanji/gMsgKanji89E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E7Tex[] = dgMsgKanji89E7Tex; + +#define dgMsgKanji89E8Tex "__OTR__textures/kanji/gMsgKanji89E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E8Tex[] = dgMsgKanji89E8Tex; + +#define dgMsgKanji89E9Tex "__OTR__textures/kanji/gMsgKanji89E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji89E9Tex[] = dgMsgKanji89E9Tex; + +#define dgMsgKanji89EATex "__OTR__textures/kanji/gMsgKanji89EATex" +static const ALIGN_ASSET(2) char gMsgKanji89EATex[] = dgMsgKanji89EATex; + +#define dgMsgKanji89EBTex "__OTR__textures/kanji/gMsgKanji89EBTex" +static const ALIGN_ASSET(2) char gMsgKanji89EBTex[] = dgMsgKanji89EBTex; + +#define dgMsgKanji89ECTex "__OTR__textures/kanji/gMsgKanji89ECTex" +static const ALIGN_ASSET(2) char gMsgKanji89ECTex[] = dgMsgKanji89ECTex; + +#define dgMsgKanji89EDTex "__OTR__textures/kanji/gMsgKanji89EDTex" +static const ALIGN_ASSET(2) char gMsgKanji89EDTex[] = dgMsgKanji89EDTex; + +#define dgMsgKanji89EETex "__OTR__textures/kanji/gMsgKanji89EETex" +static const ALIGN_ASSET(2) char gMsgKanji89EETex[] = dgMsgKanji89EETex; + +#define dgMsgKanji89EFTex "__OTR__textures/kanji/gMsgKanji89EFTex" +static const ALIGN_ASSET(2) char gMsgKanji89EFTex[] = dgMsgKanji89EFTex; + +#define dgMsgKanji89F0Tex "__OTR__textures/kanji/gMsgKanji89F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F0Tex[] = dgMsgKanji89F0Tex; + +#define dgMsgKanji89F1Tex "__OTR__textures/kanji/gMsgKanji89F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F1Tex[] = dgMsgKanji89F1Tex; + +#define dgMsgKanji89F2Tex "__OTR__textures/kanji/gMsgKanji89F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F2Tex[] = dgMsgKanji89F2Tex; + +#define dgMsgKanji89F3Tex "__OTR__textures/kanji/gMsgKanji89F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F3Tex[] = dgMsgKanji89F3Tex; + +#define dgMsgKanji89F4Tex "__OTR__textures/kanji/gMsgKanji89F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F4Tex[] = dgMsgKanji89F4Tex; + +#define dgMsgKanji89F5Tex "__OTR__textures/kanji/gMsgKanji89F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F5Tex[] = dgMsgKanji89F5Tex; + +#define dgMsgKanji89F6Tex "__OTR__textures/kanji/gMsgKanji89F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F6Tex[] = dgMsgKanji89F6Tex; + +#define dgMsgKanji89F7Tex "__OTR__textures/kanji/gMsgKanji89F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F7Tex[] = dgMsgKanji89F7Tex; + +#define dgMsgKanji89F8Tex "__OTR__textures/kanji/gMsgKanji89F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F8Tex[] = dgMsgKanji89F8Tex; + +#define dgMsgKanji89F9Tex "__OTR__textures/kanji/gMsgKanji89F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji89F9Tex[] = dgMsgKanji89F9Tex; + +#define dgMsgKanji89FATex "__OTR__textures/kanji/gMsgKanji89FATex" +static const ALIGN_ASSET(2) char gMsgKanji89FATex[] = dgMsgKanji89FATex; + +#define dgMsgKanji89FBTex "__OTR__textures/kanji/gMsgKanji89FBTex" +static const ALIGN_ASSET(2) char gMsgKanji89FBTex[] = dgMsgKanji89FBTex; + +#define dgMsgKanji89FCTex "__OTR__textures/kanji/gMsgKanji89FCTex" +static const ALIGN_ASSET(2) char gMsgKanji89FCTex[] = dgMsgKanji89FCTex; + +#define dgMsgKanji8A40Tex "__OTR__textures/kanji/gMsgKanji8A40Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A40Tex[] = dgMsgKanji8A40Tex; + +#define dgMsgKanji8A41Tex "__OTR__textures/kanji/gMsgKanji8A41Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A41Tex[] = dgMsgKanji8A41Tex; + +#define dgMsgKanji8A42Tex "__OTR__textures/kanji/gMsgKanji8A42Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A42Tex[] = dgMsgKanji8A42Tex; + +#define dgMsgKanji8A43Tex "__OTR__textures/kanji/gMsgKanji8A43Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A43Tex[] = dgMsgKanji8A43Tex; + +#define dgMsgKanji8A44Tex "__OTR__textures/kanji/gMsgKanji8A44Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A44Tex[] = dgMsgKanji8A44Tex; + +#define dgMsgKanji8A45Tex "__OTR__textures/kanji/gMsgKanji8A45Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A45Tex[] = dgMsgKanji8A45Tex; + +#define dgMsgKanji8A46Tex "__OTR__textures/kanji/gMsgKanji8A46Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A46Tex[] = dgMsgKanji8A46Tex; + +#define dgMsgKanji8A47Tex "__OTR__textures/kanji/gMsgKanji8A47Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A47Tex[] = dgMsgKanji8A47Tex; + +#define dgMsgKanji8A48Tex "__OTR__textures/kanji/gMsgKanji8A48Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A48Tex[] = dgMsgKanji8A48Tex; + +#define dgMsgKanji8A49Tex "__OTR__textures/kanji/gMsgKanji8A49Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A49Tex[] = dgMsgKanji8A49Tex; + +#define dgMsgKanji8A4ATex "__OTR__textures/kanji/gMsgKanji8A4ATex" +static const ALIGN_ASSET(2) char gMsgKanji8A4ATex[] = dgMsgKanji8A4ATex; + +#define dgMsgKanji8A4BTex "__OTR__textures/kanji/gMsgKanji8A4BTex" +static const ALIGN_ASSET(2) char gMsgKanji8A4BTex[] = dgMsgKanji8A4BTex; + +#define dgMsgKanji8A4CTex "__OTR__textures/kanji/gMsgKanji8A4CTex" +static const ALIGN_ASSET(2) char gMsgKanji8A4CTex[] = dgMsgKanji8A4CTex; + +#define dgMsgKanji8A4DTex "__OTR__textures/kanji/gMsgKanji8A4DTex" +static const ALIGN_ASSET(2) char gMsgKanji8A4DTex[] = dgMsgKanji8A4DTex; + +#define dgMsgKanji8A4ETex "__OTR__textures/kanji/gMsgKanji8A4ETex" +static const ALIGN_ASSET(2) char gMsgKanji8A4ETex[] = dgMsgKanji8A4ETex; + +#define dgMsgKanji8A4FTex "__OTR__textures/kanji/gMsgKanji8A4FTex" +static const ALIGN_ASSET(2) char gMsgKanji8A4FTex[] = dgMsgKanji8A4FTex; + +#define dgMsgKanji8A50Tex "__OTR__textures/kanji/gMsgKanji8A50Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A50Tex[] = dgMsgKanji8A50Tex; + +#define dgMsgKanji8A51Tex "__OTR__textures/kanji/gMsgKanji8A51Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A51Tex[] = dgMsgKanji8A51Tex; + +#define dgMsgKanji8A52Tex "__OTR__textures/kanji/gMsgKanji8A52Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A52Tex[] = dgMsgKanji8A52Tex; + +#define dgMsgKanji8A53Tex "__OTR__textures/kanji/gMsgKanji8A53Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A53Tex[] = dgMsgKanji8A53Tex; + +#define dgMsgKanji8A54Tex "__OTR__textures/kanji/gMsgKanji8A54Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A54Tex[] = dgMsgKanji8A54Tex; + +#define dgMsgKanji8A55Tex "__OTR__textures/kanji/gMsgKanji8A55Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A55Tex[] = dgMsgKanji8A55Tex; + +#define dgMsgKanji8A56Tex "__OTR__textures/kanji/gMsgKanji8A56Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A56Tex[] = dgMsgKanji8A56Tex; + +#define dgMsgKanji8A57Tex "__OTR__textures/kanji/gMsgKanji8A57Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A57Tex[] = dgMsgKanji8A57Tex; + +#define dgMsgKanji8A58Tex "__OTR__textures/kanji/gMsgKanji8A58Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A58Tex[] = dgMsgKanji8A58Tex; + +#define dgMsgKanji8A59Tex "__OTR__textures/kanji/gMsgKanji8A59Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A59Tex[] = dgMsgKanji8A59Tex; + +#define dgMsgKanji8A5ATex "__OTR__textures/kanji/gMsgKanji8A5ATex" +static const ALIGN_ASSET(2) char gMsgKanji8A5ATex[] = dgMsgKanji8A5ATex; + +#define dgMsgKanji8A5BTex "__OTR__textures/kanji/gMsgKanji8A5BTex" +static const ALIGN_ASSET(2) char gMsgKanji8A5BTex[] = dgMsgKanji8A5BTex; + +#define dgMsgKanji8A5CTex "__OTR__textures/kanji/gMsgKanji8A5CTex" +static const ALIGN_ASSET(2) char gMsgKanji8A5CTex[] = dgMsgKanji8A5CTex; + +#define dgMsgKanji8A5DTex "__OTR__textures/kanji/gMsgKanji8A5DTex" +static const ALIGN_ASSET(2) char gMsgKanji8A5DTex[] = dgMsgKanji8A5DTex; + +#define dgMsgKanji8A5ETex "__OTR__textures/kanji/gMsgKanji8A5ETex" +static const ALIGN_ASSET(2) char gMsgKanji8A5ETex[] = dgMsgKanji8A5ETex; + +#define dgMsgKanji8A5FTex "__OTR__textures/kanji/gMsgKanji8A5FTex" +static const ALIGN_ASSET(2) char gMsgKanji8A5FTex[] = dgMsgKanji8A5FTex; + +#define dgMsgKanji8A60Tex "__OTR__textures/kanji/gMsgKanji8A60Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A60Tex[] = dgMsgKanji8A60Tex; + +#define dgMsgKanji8A61Tex "__OTR__textures/kanji/gMsgKanji8A61Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A61Tex[] = dgMsgKanji8A61Tex; + +#define dgMsgKanji8A62Tex "__OTR__textures/kanji/gMsgKanji8A62Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A62Tex[] = dgMsgKanji8A62Tex; + +#define dgMsgKanji8A63Tex "__OTR__textures/kanji/gMsgKanji8A63Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A63Tex[] = dgMsgKanji8A63Tex; + +#define dgMsgKanji8A64Tex "__OTR__textures/kanji/gMsgKanji8A64Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A64Tex[] = dgMsgKanji8A64Tex; + +#define dgMsgKanji8A65Tex "__OTR__textures/kanji/gMsgKanji8A65Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A65Tex[] = dgMsgKanji8A65Tex; + +#define dgMsgKanji8A66Tex "__OTR__textures/kanji/gMsgKanji8A66Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A66Tex[] = dgMsgKanji8A66Tex; + +#define dgMsgKanji8A67Tex "__OTR__textures/kanji/gMsgKanji8A67Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A67Tex[] = dgMsgKanji8A67Tex; + +#define dgMsgKanji8A68Tex "__OTR__textures/kanji/gMsgKanji8A68Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A68Tex[] = dgMsgKanji8A68Tex; + +#define dgMsgKanji8A69Tex "__OTR__textures/kanji/gMsgKanji8A69Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A69Tex[] = dgMsgKanji8A69Tex; + +#define dgMsgKanji8A6ATex "__OTR__textures/kanji/gMsgKanji8A6ATex" +static const ALIGN_ASSET(2) char gMsgKanji8A6ATex[] = dgMsgKanji8A6ATex; + +#define dgMsgKanji8A6BTex "__OTR__textures/kanji/gMsgKanji8A6BTex" +static const ALIGN_ASSET(2) char gMsgKanji8A6BTex[] = dgMsgKanji8A6BTex; + +#define dgMsgKanji8A6CTex "__OTR__textures/kanji/gMsgKanji8A6CTex" +static const ALIGN_ASSET(2) char gMsgKanji8A6CTex[] = dgMsgKanji8A6CTex; + +#define dgMsgKanji8A6DTex "__OTR__textures/kanji/gMsgKanji8A6DTex" +static const ALIGN_ASSET(2) char gMsgKanji8A6DTex[] = dgMsgKanji8A6DTex; + +#define dgMsgKanji8A6ETex "__OTR__textures/kanji/gMsgKanji8A6ETex" +static const ALIGN_ASSET(2) char gMsgKanji8A6ETex[] = dgMsgKanji8A6ETex; + +#define dgMsgKanji8A6FTex "__OTR__textures/kanji/gMsgKanji8A6FTex" +static const ALIGN_ASSET(2) char gMsgKanji8A6FTex[] = dgMsgKanji8A6FTex; + +#define dgMsgKanji8A70Tex "__OTR__textures/kanji/gMsgKanji8A70Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A70Tex[] = dgMsgKanji8A70Tex; + +#define dgMsgKanji8A71Tex "__OTR__textures/kanji/gMsgKanji8A71Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A71Tex[] = dgMsgKanji8A71Tex; + +#define dgMsgKanji8A72Tex "__OTR__textures/kanji/gMsgKanji8A72Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A72Tex[] = dgMsgKanji8A72Tex; + +#define dgMsgKanji8A73Tex "__OTR__textures/kanji/gMsgKanji8A73Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A73Tex[] = dgMsgKanji8A73Tex; + +#define dgMsgKanji8A74Tex "__OTR__textures/kanji/gMsgKanji8A74Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A74Tex[] = dgMsgKanji8A74Tex; + +#define dgMsgKanji8A75Tex "__OTR__textures/kanji/gMsgKanji8A75Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A75Tex[] = dgMsgKanji8A75Tex; + +#define dgMsgKanji8A76Tex "__OTR__textures/kanji/gMsgKanji8A76Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A76Tex[] = dgMsgKanji8A76Tex; + +#define dgMsgKanji8A77Tex "__OTR__textures/kanji/gMsgKanji8A77Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A77Tex[] = dgMsgKanji8A77Tex; + +#define dgMsgKanji8A78Tex "__OTR__textures/kanji/gMsgKanji8A78Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A78Tex[] = dgMsgKanji8A78Tex; + +#define dgMsgKanji8A79Tex "__OTR__textures/kanji/gMsgKanji8A79Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A79Tex[] = dgMsgKanji8A79Tex; + +#define dgMsgKanji8A7ATex "__OTR__textures/kanji/gMsgKanji8A7ATex" +static const ALIGN_ASSET(2) char gMsgKanji8A7ATex[] = dgMsgKanji8A7ATex; + +#define dgMsgKanji8A7BTex "__OTR__textures/kanji/gMsgKanji8A7BTex" +static const ALIGN_ASSET(2) char gMsgKanji8A7BTex[] = dgMsgKanji8A7BTex; + +#define dgMsgKanji8A7CTex "__OTR__textures/kanji/gMsgKanji8A7CTex" +static const ALIGN_ASSET(2) char gMsgKanji8A7CTex[] = dgMsgKanji8A7CTex; + +#define dgMsgKanji8A7DTex "__OTR__textures/kanji/gMsgKanji8A7DTex" +static const ALIGN_ASSET(2) char gMsgKanji8A7DTex[] = dgMsgKanji8A7DTex; + +#define dgMsgKanji8A7ETex "__OTR__textures/kanji/gMsgKanji8A7ETex" +static const ALIGN_ASSET(2) char gMsgKanji8A7ETex[] = dgMsgKanji8A7ETex; + +#define dgMsgKanji8A80Tex "__OTR__textures/kanji/gMsgKanji8A80Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A80Tex[] = dgMsgKanji8A80Tex; + +#define dgMsgKanji8A81Tex "__OTR__textures/kanji/gMsgKanji8A81Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A81Tex[] = dgMsgKanji8A81Tex; + +#define dgMsgKanji8A82Tex "__OTR__textures/kanji/gMsgKanji8A82Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A82Tex[] = dgMsgKanji8A82Tex; + +#define dgMsgKanji8A83Tex "__OTR__textures/kanji/gMsgKanji8A83Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A83Tex[] = dgMsgKanji8A83Tex; + +#define dgMsgKanji8A84Tex "__OTR__textures/kanji/gMsgKanji8A84Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A84Tex[] = dgMsgKanji8A84Tex; + +#define dgMsgKanji8A85Tex "__OTR__textures/kanji/gMsgKanji8A85Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A85Tex[] = dgMsgKanji8A85Tex; + +#define dgMsgKanji8A86Tex "__OTR__textures/kanji/gMsgKanji8A86Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A86Tex[] = dgMsgKanji8A86Tex; + +#define dgMsgKanji8A87Tex "__OTR__textures/kanji/gMsgKanji8A87Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A87Tex[] = dgMsgKanji8A87Tex; + +#define dgMsgKanji8A88Tex "__OTR__textures/kanji/gMsgKanji8A88Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A88Tex[] = dgMsgKanji8A88Tex; + +#define dgMsgKanji8A89Tex "__OTR__textures/kanji/gMsgKanji8A89Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A89Tex[] = dgMsgKanji8A89Tex; + +#define dgMsgKanji8A8ATex "__OTR__textures/kanji/gMsgKanji8A8ATex" +static const ALIGN_ASSET(2) char gMsgKanji8A8ATex[] = dgMsgKanji8A8ATex; + +#define dgMsgKanji8A8BTex "__OTR__textures/kanji/gMsgKanji8A8BTex" +static const ALIGN_ASSET(2) char gMsgKanji8A8BTex[] = dgMsgKanji8A8BTex; + +#define dgMsgKanji8A8CTex "__OTR__textures/kanji/gMsgKanji8A8CTex" +static const ALIGN_ASSET(2) char gMsgKanji8A8CTex[] = dgMsgKanji8A8CTex; + +#define dgMsgKanji8A8DTex "__OTR__textures/kanji/gMsgKanji8A8DTex" +static const ALIGN_ASSET(2) char gMsgKanji8A8DTex[] = dgMsgKanji8A8DTex; + +#define dgMsgKanji8A8ETex "__OTR__textures/kanji/gMsgKanji8A8ETex" +static const ALIGN_ASSET(2) char gMsgKanji8A8ETex[] = dgMsgKanji8A8ETex; + +#define dgMsgKanji8A8FTex "__OTR__textures/kanji/gMsgKanji8A8FTex" +static const ALIGN_ASSET(2) char gMsgKanji8A8FTex[] = dgMsgKanji8A8FTex; + +#define dgMsgKanji8A90Tex "__OTR__textures/kanji/gMsgKanji8A90Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A90Tex[] = dgMsgKanji8A90Tex; + +#define dgMsgKanji8A91Tex "__OTR__textures/kanji/gMsgKanji8A91Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A91Tex[] = dgMsgKanji8A91Tex; + +#define dgMsgKanji8A92Tex "__OTR__textures/kanji/gMsgKanji8A92Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A92Tex[] = dgMsgKanji8A92Tex; + +#define dgMsgKanji8A93Tex "__OTR__textures/kanji/gMsgKanji8A93Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A93Tex[] = dgMsgKanji8A93Tex; + +#define dgMsgKanji8A94Tex "__OTR__textures/kanji/gMsgKanji8A94Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A94Tex[] = dgMsgKanji8A94Tex; + +#define dgMsgKanji8A95Tex "__OTR__textures/kanji/gMsgKanji8A95Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A95Tex[] = dgMsgKanji8A95Tex; + +#define dgMsgKanji8A96Tex "__OTR__textures/kanji/gMsgKanji8A96Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A96Tex[] = dgMsgKanji8A96Tex; + +#define dgMsgKanji8A97Tex "__OTR__textures/kanji/gMsgKanji8A97Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A97Tex[] = dgMsgKanji8A97Tex; + +#define dgMsgKanji8A98Tex "__OTR__textures/kanji/gMsgKanji8A98Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A98Tex[] = dgMsgKanji8A98Tex; + +#define dgMsgKanji8A99Tex "__OTR__textures/kanji/gMsgKanji8A99Tex" +static const ALIGN_ASSET(2) char gMsgKanji8A99Tex[] = dgMsgKanji8A99Tex; + +#define dgMsgKanji8A9ATex "__OTR__textures/kanji/gMsgKanji8A9ATex" +static const ALIGN_ASSET(2) char gMsgKanji8A9ATex[] = dgMsgKanji8A9ATex; + +#define dgMsgKanji8A9BTex "__OTR__textures/kanji/gMsgKanji8A9BTex" +static const ALIGN_ASSET(2) char gMsgKanji8A9BTex[] = dgMsgKanji8A9BTex; + +#define dgMsgKanji8A9CTex "__OTR__textures/kanji/gMsgKanji8A9CTex" +static const ALIGN_ASSET(2) char gMsgKanji8A9CTex[] = dgMsgKanji8A9CTex; + +#define dgMsgKanji8A9DTex "__OTR__textures/kanji/gMsgKanji8A9DTex" +static const ALIGN_ASSET(2) char gMsgKanji8A9DTex[] = dgMsgKanji8A9DTex; + +#define dgMsgKanji8A9ETex "__OTR__textures/kanji/gMsgKanji8A9ETex" +static const ALIGN_ASSET(2) char gMsgKanji8A9ETex[] = dgMsgKanji8A9ETex; + +#define dgMsgKanji8A9FTex "__OTR__textures/kanji/gMsgKanji8A9FTex" +static const ALIGN_ASSET(2) char gMsgKanji8A9FTex[] = dgMsgKanji8A9FTex; + +#define dgMsgKanji8AA0Tex "__OTR__textures/kanji/gMsgKanji8AA0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA0Tex[] = dgMsgKanji8AA0Tex; + +#define dgMsgKanji8AA1Tex "__OTR__textures/kanji/gMsgKanji8AA1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA1Tex[] = dgMsgKanji8AA1Tex; + +#define dgMsgKanji8AA2Tex "__OTR__textures/kanji/gMsgKanji8AA2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA2Tex[] = dgMsgKanji8AA2Tex; + +#define dgMsgKanji8AA3Tex "__OTR__textures/kanji/gMsgKanji8AA3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA3Tex[] = dgMsgKanji8AA3Tex; + +#define dgMsgKanji8AA4Tex "__OTR__textures/kanji/gMsgKanji8AA4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA4Tex[] = dgMsgKanji8AA4Tex; + +#define dgMsgKanji8AA5Tex "__OTR__textures/kanji/gMsgKanji8AA5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA5Tex[] = dgMsgKanji8AA5Tex; + +#define dgMsgKanji8AA6Tex "__OTR__textures/kanji/gMsgKanji8AA6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA6Tex[] = dgMsgKanji8AA6Tex; + +#define dgMsgKanji8AA7Tex "__OTR__textures/kanji/gMsgKanji8AA7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA7Tex[] = dgMsgKanji8AA7Tex; + +#define dgMsgKanji8AA8Tex "__OTR__textures/kanji/gMsgKanji8AA8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA8Tex[] = dgMsgKanji8AA8Tex; + +#define dgMsgKanji8AA9Tex "__OTR__textures/kanji/gMsgKanji8AA9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AA9Tex[] = dgMsgKanji8AA9Tex; + +#define dgMsgKanji8AAATex "__OTR__textures/kanji/gMsgKanji8AAATex" +static const ALIGN_ASSET(2) char gMsgKanji8AAATex[] = dgMsgKanji8AAATex; + +#define dgMsgKanji8AABTex "__OTR__textures/kanji/gMsgKanji8AABTex" +static const ALIGN_ASSET(2) char gMsgKanji8AABTex[] = dgMsgKanji8AABTex; + +#define dgMsgKanji8AACTex "__OTR__textures/kanji/gMsgKanji8AACTex" +static const ALIGN_ASSET(2) char gMsgKanji8AACTex[] = dgMsgKanji8AACTex; + +#define dgMsgKanji8AADTex "__OTR__textures/kanji/gMsgKanji8AADTex" +static const ALIGN_ASSET(2) char gMsgKanji8AADTex[] = dgMsgKanji8AADTex; + +#define dgMsgKanji8AAETex "__OTR__textures/kanji/gMsgKanji8AAETex" +static const ALIGN_ASSET(2) char gMsgKanji8AAETex[] = dgMsgKanji8AAETex; + +#define dgMsgKanji8AAFTex "__OTR__textures/kanji/gMsgKanji8AAFTex" +static const ALIGN_ASSET(2) char gMsgKanji8AAFTex[] = dgMsgKanji8AAFTex; + +#define dgMsgKanji8AB0Tex "__OTR__textures/kanji/gMsgKanji8AB0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB0Tex[] = dgMsgKanji8AB0Tex; + +#define dgMsgKanji8AB1Tex "__OTR__textures/kanji/gMsgKanji8AB1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB1Tex[] = dgMsgKanji8AB1Tex; + +#define dgMsgKanji8AB2Tex "__OTR__textures/kanji/gMsgKanji8AB2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB2Tex[] = dgMsgKanji8AB2Tex; + +#define dgMsgKanji8AB3Tex "__OTR__textures/kanji/gMsgKanji8AB3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB3Tex[] = dgMsgKanji8AB3Tex; + +#define dgMsgKanji8AB4Tex "__OTR__textures/kanji/gMsgKanji8AB4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB4Tex[] = dgMsgKanji8AB4Tex; + +#define dgMsgKanji8AB5Tex "__OTR__textures/kanji/gMsgKanji8AB5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB5Tex[] = dgMsgKanji8AB5Tex; + +#define dgMsgKanji8AB6Tex "__OTR__textures/kanji/gMsgKanji8AB6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB6Tex[] = dgMsgKanji8AB6Tex; + +#define dgMsgKanji8AB7Tex "__OTR__textures/kanji/gMsgKanji8AB7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB7Tex[] = dgMsgKanji8AB7Tex; + +#define dgMsgKanji8AB8Tex "__OTR__textures/kanji/gMsgKanji8AB8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB8Tex[] = dgMsgKanji8AB8Tex; + +#define dgMsgKanji8AB9Tex "__OTR__textures/kanji/gMsgKanji8AB9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AB9Tex[] = dgMsgKanji8AB9Tex; + +#define dgMsgKanji8ABATex "__OTR__textures/kanji/gMsgKanji8ABATex" +static const ALIGN_ASSET(2) char gMsgKanji8ABATex[] = dgMsgKanji8ABATex; + +#define dgMsgKanji8ABBTex "__OTR__textures/kanji/gMsgKanji8ABBTex" +static const ALIGN_ASSET(2) char gMsgKanji8ABBTex[] = dgMsgKanji8ABBTex; + +#define dgMsgKanji8ABCTex "__OTR__textures/kanji/gMsgKanji8ABCTex" +static const ALIGN_ASSET(2) char gMsgKanji8ABCTex[] = dgMsgKanji8ABCTex; + +#define dgMsgKanji8ABDTex "__OTR__textures/kanji/gMsgKanji8ABDTex" +static const ALIGN_ASSET(2) char gMsgKanji8ABDTex[] = dgMsgKanji8ABDTex; + +#define dgMsgKanji8ABETex "__OTR__textures/kanji/gMsgKanji8ABETex" +static const ALIGN_ASSET(2) char gMsgKanji8ABETex[] = dgMsgKanji8ABETex; + +#define dgMsgKanji8ABFTex "__OTR__textures/kanji/gMsgKanji8ABFTex" +static const ALIGN_ASSET(2) char gMsgKanji8ABFTex[] = dgMsgKanji8ABFTex; + +#define dgMsgKanji8AC0Tex "__OTR__textures/kanji/gMsgKanji8AC0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC0Tex[] = dgMsgKanji8AC0Tex; + +#define dgMsgKanji8AC1Tex "__OTR__textures/kanji/gMsgKanji8AC1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC1Tex[] = dgMsgKanji8AC1Tex; + +#define dgMsgKanji8AC2Tex "__OTR__textures/kanji/gMsgKanji8AC2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC2Tex[] = dgMsgKanji8AC2Tex; + +#define dgMsgKanji8AC3Tex "__OTR__textures/kanji/gMsgKanji8AC3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC3Tex[] = dgMsgKanji8AC3Tex; + +#define dgMsgKanji8AC4Tex "__OTR__textures/kanji/gMsgKanji8AC4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC4Tex[] = dgMsgKanji8AC4Tex; + +#define dgMsgKanji8AC5Tex "__OTR__textures/kanji/gMsgKanji8AC5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC5Tex[] = dgMsgKanji8AC5Tex; + +#define dgMsgKanji8AC6Tex "__OTR__textures/kanji/gMsgKanji8AC6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC6Tex[] = dgMsgKanji8AC6Tex; + +#define dgMsgKanji8AC7Tex "__OTR__textures/kanji/gMsgKanji8AC7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC7Tex[] = dgMsgKanji8AC7Tex; + +#define dgMsgKanji8AC8Tex "__OTR__textures/kanji/gMsgKanji8AC8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC8Tex[] = dgMsgKanji8AC8Tex; + +#define dgMsgKanji8AC9Tex "__OTR__textures/kanji/gMsgKanji8AC9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AC9Tex[] = dgMsgKanji8AC9Tex; + +#define dgMsgKanji8ACATex "__OTR__textures/kanji/gMsgKanji8ACATex" +static const ALIGN_ASSET(2) char gMsgKanji8ACATex[] = dgMsgKanji8ACATex; + +#define dgMsgKanji8ACBTex "__OTR__textures/kanji/gMsgKanji8ACBTex" +static const ALIGN_ASSET(2) char gMsgKanji8ACBTex[] = dgMsgKanji8ACBTex; + +#define dgMsgKanji8ACCTex "__OTR__textures/kanji/gMsgKanji8ACCTex" +static const ALIGN_ASSET(2) char gMsgKanji8ACCTex[] = dgMsgKanji8ACCTex; + +#define dgMsgKanji8ACDTex "__OTR__textures/kanji/gMsgKanji8ACDTex" +static const ALIGN_ASSET(2) char gMsgKanji8ACDTex[] = dgMsgKanji8ACDTex; + +#define dgMsgKanji8ACETex "__OTR__textures/kanji/gMsgKanji8ACETex" +static const ALIGN_ASSET(2) char gMsgKanji8ACETex[] = dgMsgKanji8ACETex; + +#define dgMsgKanji8ACFTex "__OTR__textures/kanji/gMsgKanji8ACFTex" +static const ALIGN_ASSET(2) char gMsgKanji8ACFTex[] = dgMsgKanji8ACFTex; + +#define dgMsgKanji8AD0Tex "__OTR__textures/kanji/gMsgKanji8AD0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD0Tex[] = dgMsgKanji8AD0Tex; + +#define dgMsgKanji8AD1Tex "__OTR__textures/kanji/gMsgKanji8AD1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD1Tex[] = dgMsgKanji8AD1Tex; + +#define dgMsgKanji8AD2Tex "__OTR__textures/kanji/gMsgKanji8AD2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD2Tex[] = dgMsgKanji8AD2Tex; + +#define dgMsgKanji8AD3Tex "__OTR__textures/kanji/gMsgKanji8AD3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD3Tex[] = dgMsgKanji8AD3Tex; + +#define dgMsgKanji8AD4Tex "__OTR__textures/kanji/gMsgKanji8AD4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD4Tex[] = dgMsgKanji8AD4Tex; + +#define dgMsgKanji8AD5Tex "__OTR__textures/kanji/gMsgKanji8AD5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD5Tex[] = dgMsgKanji8AD5Tex; + +#define dgMsgKanji8AD6Tex "__OTR__textures/kanji/gMsgKanji8AD6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD6Tex[] = dgMsgKanji8AD6Tex; + +#define dgMsgKanji8AD7Tex "__OTR__textures/kanji/gMsgKanji8AD7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD7Tex[] = dgMsgKanji8AD7Tex; + +#define dgMsgKanji8AD8Tex "__OTR__textures/kanji/gMsgKanji8AD8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD8Tex[] = dgMsgKanji8AD8Tex; + +#define dgMsgKanji8AD9Tex "__OTR__textures/kanji/gMsgKanji8AD9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AD9Tex[] = dgMsgKanji8AD9Tex; + +#define dgMsgKanji8ADATex "__OTR__textures/kanji/gMsgKanji8ADATex" +static const ALIGN_ASSET(2) char gMsgKanji8ADATex[] = dgMsgKanji8ADATex; + +#define dgMsgKanji8ADBTex "__OTR__textures/kanji/gMsgKanji8ADBTex" +static const ALIGN_ASSET(2) char gMsgKanji8ADBTex[] = dgMsgKanji8ADBTex; + +#define dgMsgKanji8ADCTex "__OTR__textures/kanji/gMsgKanji8ADCTex" +static const ALIGN_ASSET(2) char gMsgKanji8ADCTex[] = dgMsgKanji8ADCTex; + +#define dgMsgKanji8ADDTex "__OTR__textures/kanji/gMsgKanji8ADDTex" +static const ALIGN_ASSET(2) char gMsgKanji8ADDTex[] = dgMsgKanji8ADDTex; + +#define dgMsgKanji8ADETex "__OTR__textures/kanji/gMsgKanji8ADETex" +static const ALIGN_ASSET(2) char gMsgKanji8ADETex[] = dgMsgKanji8ADETex; + +#define dgMsgKanji8ADFTex "__OTR__textures/kanji/gMsgKanji8ADFTex" +static const ALIGN_ASSET(2) char gMsgKanji8ADFTex[] = dgMsgKanji8ADFTex; + +#define dgMsgKanji8AE0Tex "__OTR__textures/kanji/gMsgKanji8AE0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE0Tex[] = dgMsgKanji8AE0Tex; + +#define dgMsgKanji8AE1Tex "__OTR__textures/kanji/gMsgKanji8AE1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE1Tex[] = dgMsgKanji8AE1Tex; + +#define dgMsgKanji8AE2Tex "__OTR__textures/kanji/gMsgKanji8AE2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE2Tex[] = dgMsgKanji8AE2Tex; + +#define dgMsgKanji8AE3Tex "__OTR__textures/kanji/gMsgKanji8AE3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE3Tex[] = dgMsgKanji8AE3Tex; + +#define dgMsgKanji8AE4Tex "__OTR__textures/kanji/gMsgKanji8AE4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE4Tex[] = dgMsgKanji8AE4Tex; + +#define dgMsgKanji8AE5Tex "__OTR__textures/kanji/gMsgKanji8AE5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE5Tex[] = dgMsgKanji8AE5Tex; + +#define dgMsgKanji8AE6Tex "__OTR__textures/kanji/gMsgKanji8AE6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE6Tex[] = dgMsgKanji8AE6Tex; + +#define dgMsgKanji8AE7Tex "__OTR__textures/kanji/gMsgKanji8AE7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE7Tex[] = dgMsgKanji8AE7Tex; + +#define dgMsgKanji8AE8Tex "__OTR__textures/kanji/gMsgKanji8AE8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE8Tex[] = dgMsgKanji8AE8Tex; + +#define dgMsgKanji8AE9Tex "__OTR__textures/kanji/gMsgKanji8AE9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AE9Tex[] = dgMsgKanji8AE9Tex; + +#define dgMsgKanji8AEATex "__OTR__textures/kanji/gMsgKanji8AEATex" +static const ALIGN_ASSET(2) char gMsgKanji8AEATex[] = dgMsgKanji8AEATex; + +#define dgMsgKanji8AEBTex "__OTR__textures/kanji/gMsgKanji8AEBTex" +static const ALIGN_ASSET(2) char gMsgKanji8AEBTex[] = dgMsgKanji8AEBTex; + +#define dgMsgKanji8AECTex "__OTR__textures/kanji/gMsgKanji8AECTex" +static const ALIGN_ASSET(2) char gMsgKanji8AECTex[] = dgMsgKanji8AECTex; + +#define dgMsgKanji8AEDTex "__OTR__textures/kanji/gMsgKanji8AEDTex" +static const ALIGN_ASSET(2) char gMsgKanji8AEDTex[] = dgMsgKanji8AEDTex; + +#define dgMsgKanji8AEETex "__OTR__textures/kanji/gMsgKanji8AEETex" +static const ALIGN_ASSET(2) char gMsgKanji8AEETex[] = dgMsgKanji8AEETex; + +#define dgMsgKanji8AEFTex "__OTR__textures/kanji/gMsgKanji8AEFTex" +static const ALIGN_ASSET(2) char gMsgKanji8AEFTex[] = dgMsgKanji8AEFTex; + +#define dgMsgKanji8AF0Tex "__OTR__textures/kanji/gMsgKanji8AF0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF0Tex[] = dgMsgKanji8AF0Tex; + +#define dgMsgKanji8AF1Tex "__OTR__textures/kanji/gMsgKanji8AF1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF1Tex[] = dgMsgKanji8AF1Tex; + +#define dgMsgKanji8AF2Tex "__OTR__textures/kanji/gMsgKanji8AF2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF2Tex[] = dgMsgKanji8AF2Tex; + +#define dgMsgKanji8AF3Tex "__OTR__textures/kanji/gMsgKanji8AF3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF3Tex[] = dgMsgKanji8AF3Tex; + +#define dgMsgKanji8AF4Tex "__OTR__textures/kanji/gMsgKanji8AF4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF4Tex[] = dgMsgKanji8AF4Tex; + +#define dgMsgKanji8AF5Tex "__OTR__textures/kanji/gMsgKanji8AF5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF5Tex[] = dgMsgKanji8AF5Tex; + +#define dgMsgKanji8AF6Tex "__OTR__textures/kanji/gMsgKanji8AF6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF6Tex[] = dgMsgKanji8AF6Tex; + +#define dgMsgKanji8AF7Tex "__OTR__textures/kanji/gMsgKanji8AF7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF7Tex[] = dgMsgKanji8AF7Tex; + +#define dgMsgKanji8AF8Tex "__OTR__textures/kanji/gMsgKanji8AF8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF8Tex[] = dgMsgKanji8AF8Tex; + +#define dgMsgKanji8AF9Tex "__OTR__textures/kanji/gMsgKanji8AF9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8AF9Tex[] = dgMsgKanji8AF9Tex; + +#define dgMsgKanji8AFATex "__OTR__textures/kanji/gMsgKanji8AFATex" +static const ALIGN_ASSET(2) char gMsgKanji8AFATex[] = dgMsgKanji8AFATex; + +#define dgMsgKanji8AFBTex "__OTR__textures/kanji/gMsgKanji8AFBTex" +static const ALIGN_ASSET(2) char gMsgKanji8AFBTex[] = dgMsgKanji8AFBTex; + +#define dgMsgKanji8AFCTex "__OTR__textures/kanji/gMsgKanji8AFCTex" +static const ALIGN_ASSET(2) char gMsgKanji8AFCTex[] = dgMsgKanji8AFCTex; + +#define dgMsgKanji8B40Tex "__OTR__textures/kanji/gMsgKanji8B40Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B40Tex[] = dgMsgKanji8B40Tex; + +#define dgMsgKanji8B41Tex "__OTR__textures/kanji/gMsgKanji8B41Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B41Tex[] = dgMsgKanji8B41Tex; + +#define dgMsgKanji8B42Tex "__OTR__textures/kanji/gMsgKanji8B42Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B42Tex[] = dgMsgKanji8B42Tex; + +#define dgMsgKanji8B43Tex "__OTR__textures/kanji/gMsgKanji8B43Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B43Tex[] = dgMsgKanji8B43Tex; + +#define dgMsgKanji8B44Tex "__OTR__textures/kanji/gMsgKanji8B44Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B44Tex[] = dgMsgKanji8B44Tex; + +#define dgMsgKanji8B45Tex "__OTR__textures/kanji/gMsgKanji8B45Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B45Tex[] = dgMsgKanji8B45Tex; + +#define dgMsgKanji8B46Tex "__OTR__textures/kanji/gMsgKanji8B46Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B46Tex[] = dgMsgKanji8B46Tex; + +#define dgMsgKanji8B47Tex "__OTR__textures/kanji/gMsgKanji8B47Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B47Tex[] = dgMsgKanji8B47Tex; + +#define dgMsgKanji8B48Tex "__OTR__textures/kanji/gMsgKanji8B48Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B48Tex[] = dgMsgKanji8B48Tex; + +#define dgMsgKanji8B49Tex "__OTR__textures/kanji/gMsgKanji8B49Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B49Tex[] = dgMsgKanji8B49Tex; + +#define dgMsgKanji8B4ATex "__OTR__textures/kanji/gMsgKanji8B4ATex" +static const ALIGN_ASSET(2) char gMsgKanji8B4ATex[] = dgMsgKanji8B4ATex; + +#define dgMsgKanji8B4BTex "__OTR__textures/kanji/gMsgKanji8B4BTex" +static const ALIGN_ASSET(2) char gMsgKanji8B4BTex[] = dgMsgKanji8B4BTex; + +#define dgMsgKanji8B4CTex "__OTR__textures/kanji/gMsgKanji8B4CTex" +static const ALIGN_ASSET(2) char gMsgKanji8B4CTex[] = dgMsgKanji8B4CTex; + +#define dgMsgKanji8B4DTex "__OTR__textures/kanji/gMsgKanji8B4DTex" +static const ALIGN_ASSET(2) char gMsgKanji8B4DTex[] = dgMsgKanji8B4DTex; + +#define dgMsgKanji8B4ETex "__OTR__textures/kanji/gMsgKanji8B4ETex" +static const ALIGN_ASSET(2) char gMsgKanji8B4ETex[] = dgMsgKanji8B4ETex; + +#define dgMsgKanji8B4FTex "__OTR__textures/kanji/gMsgKanji8B4FTex" +static const ALIGN_ASSET(2) char gMsgKanji8B4FTex[] = dgMsgKanji8B4FTex; + +#define dgMsgKanji8B50Tex "__OTR__textures/kanji/gMsgKanji8B50Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B50Tex[] = dgMsgKanji8B50Tex; + +#define dgMsgKanji8B51Tex "__OTR__textures/kanji/gMsgKanji8B51Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B51Tex[] = dgMsgKanji8B51Tex; + +#define dgMsgKanji8B52Tex "__OTR__textures/kanji/gMsgKanji8B52Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B52Tex[] = dgMsgKanji8B52Tex; + +#define dgMsgKanji8B53Tex "__OTR__textures/kanji/gMsgKanji8B53Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B53Tex[] = dgMsgKanji8B53Tex; + +#define dgMsgKanji8B54Tex "__OTR__textures/kanji/gMsgKanji8B54Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B54Tex[] = dgMsgKanji8B54Tex; + +#define dgMsgKanji8B55Tex "__OTR__textures/kanji/gMsgKanji8B55Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B55Tex[] = dgMsgKanji8B55Tex; + +#define dgMsgKanji8B56Tex "__OTR__textures/kanji/gMsgKanji8B56Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B56Tex[] = dgMsgKanji8B56Tex; + +#define dgMsgKanji8B57Tex "__OTR__textures/kanji/gMsgKanji8B57Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B57Tex[] = dgMsgKanji8B57Tex; + +#define dgMsgKanji8B58Tex "__OTR__textures/kanji/gMsgKanji8B58Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B58Tex[] = dgMsgKanji8B58Tex; + +#define dgMsgKanji8B59Tex "__OTR__textures/kanji/gMsgKanji8B59Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B59Tex[] = dgMsgKanji8B59Tex; + +#define dgMsgKanji8B5ATex "__OTR__textures/kanji/gMsgKanji8B5ATex" +static const ALIGN_ASSET(2) char gMsgKanji8B5ATex[] = dgMsgKanji8B5ATex; + +#define dgMsgKanji8B5BTex "__OTR__textures/kanji/gMsgKanji8B5BTex" +static const ALIGN_ASSET(2) char gMsgKanji8B5BTex[] = dgMsgKanji8B5BTex; + +#define dgMsgKanji8B5CTex "__OTR__textures/kanji/gMsgKanji8B5CTex" +static const ALIGN_ASSET(2) char gMsgKanji8B5CTex[] = dgMsgKanji8B5CTex; + +#define dgMsgKanji8B5DTex "__OTR__textures/kanji/gMsgKanji8B5DTex" +static const ALIGN_ASSET(2) char gMsgKanji8B5DTex[] = dgMsgKanji8B5DTex; + +#define dgMsgKanji8B5ETex "__OTR__textures/kanji/gMsgKanji8B5ETex" +static const ALIGN_ASSET(2) char gMsgKanji8B5ETex[] = dgMsgKanji8B5ETex; + +#define dgMsgKanji8B5FTex "__OTR__textures/kanji/gMsgKanji8B5FTex" +static const ALIGN_ASSET(2) char gMsgKanji8B5FTex[] = dgMsgKanji8B5FTex; + +#define dgMsgKanji8B60Tex "__OTR__textures/kanji/gMsgKanji8B60Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B60Tex[] = dgMsgKanji8B60Tex; + +#define dgMsgKanji8B61Tex "__OTR__textures/kanji/gMsgKanji8B61Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B61Tex[] = dgMsgKanji8B61Tex; + +#define dgMsgKanji8B62Tex "__OTR__textures/kanji/gMsgKanji8B62Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B62Tex[] = dgMsgKanji8B62Tex; + +#define dgMsgKanji8B63Tex "__OTR__textures/kanji/gMsgKanji8B63Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B63Tex[] = dgMsgKanji8B63Tex; + +#define dgMsgKanji8B64Tex "__OTR__textures/kanji/gMsgKanji8B64Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B64Tex[] = dgMsgKanji8B64Tex; + +#define dgMsgKanji8B65Tex "__OTR__textures/kanji/gMsgKanji8B65Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B65Tex[] = dgMsgKanji8B65Tex; + +#define dgMsgKanji8B66Tex "__OTR__textures/kanji/gMsgKanji8B66Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B66Tex[] = dgMsgKanji8B66Tex; + +#define dgMsgKanji8B67Tex "__OTR__textures/kanji/gMsgKanji8B67Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B67Tex[] = dgMsgKanji8B67Tex; + +#define dgMsgKanji8B68Tex "__OTR__textures/kanji/gMsgKanji8B68Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B68Tex[] = dgMsgKanji8B68Tex; + +#define dgMsgKanji8B69Tex "__OTR__textures/kanji/gMsgKanji8B69Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B69Tex[] = dgMsgKanji8B69Tex; + +#define dgMsgKanji8B6ATex "__OTR__textures/kanji/gMsgKanji8B6ATex" +static const ALIGN_ASSET(2) char gMsgKanji8B6ATex[] = dgMsgKanji8B6ATex; + +#define dgMsgKanji8B6BTex "__OTR__textures/kanji/gMsgKanji8B6BTex" +static const ALIGN_ASSET(2) char gMsgKanji8B6BTex[] = dgMsgKanji8B6BTex; + +#define dgMsgKanji8B6CTex "__OTR__textures/kanji/gMsgKanji8B6CTex" +static const ALIGN_ASSET(2) char gMsgKanji8B6CTex[] = dgMsgKanji8B6CTex; + +#define dgMsgKanji8B6DTex "__OTR__textures/kanji/gMsgKanji8B6DTex" +static const ALIGN_ASSET(2) char gMsgKanji8B6DTex[] = dgMsgKanji8B6DTex; + +#define dgMsgKanji8B6ETex "__OTR__textures/kanji/gMsgKanji8B6ETex" +static const ALIGN_ASSET(2) char gMsgKanji8B6ETex[] = dgMsgKanji8B6ETex; + +#define dgMsgKanji8B6FTex "__OTR__textures/kanji/gMsgKanji8B6FTex" +static const ALIGN_ASSET(2) char gMsgKanji8B6FTex[] = dgMsgKanji8B6FTex; + +#define dgMsgKanji8B70Tex "__OTR__textures/kanji/gMsgKanji8B70Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B70Tex[] = dgMsgKanji8B70Tex; + +#define dgMsgKanji8B71Tex "__OTR__textures/kanji/gMsgKanji8B71Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B71Tex[] = dgMsgKanji8B71Tex; + +#define dgMsgKanji8B72Tex "__OTR__textures/kanji/gMsgKanji8B72Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B72Tex[] = dgMsgKanji8B72Tex; + +#define dgMsgKanji8B73Tex "__OTR__textures/kanji/gMsgKanji8B73Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B73Tex[] = dgMsgKanji8B73Tex; + +#define dgMsgKanji8B74Tex "__OTR__textures/kanji/gMsgKanji8B74Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B74Tex[] = dgMsgKanji8B74Tex; + +#define dgMsgKanji8B75Tex "__OTR__textures/kanji/gMsgKanji8B75Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B75Tex[] = dgMsgKanji8B75Tex; + +#define dgMsgKanji8B76Tex "__OTR__textures/kanji/gMsgKanji8B76Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B76Tex[] = dgMsgKanji8B76Tex; + +#define dgMsgKanji8B77Tex "__OTR__textures/kanji/gMsgKanji8B77Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B77Tex[] = dgMsgKanji8B77Tex; + +#define dgMsgKanji8B78Tex "__OTR__textures/kanji/gMsgKanji8B78Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B78Tex[] = dgMsgKanji8B78Tex; + +#define dgMsgKanji8B79Tex "__OTR__textures/kanji/gMsgKanji8B79Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B79Tex[] = dgMsgKanji8B79Tex; + +#define dgMsgKanji8B7ATex "__OTR__textures/kanji/gMsgKanji8B7ATex" +static const ALIGN_ASSET(2) char gMsgKanji8B7ATex[] = dgMsgKanji8B7ATex; + +#define dgMsgKanji8B7BTex "__OTR__textures/kanji/gMsgKanji8B7BTex" +static const ALIGN_ASSET(2) char gMsgKanji8B7BTex[] = dgMsgKanji8B7BTex; + +#define dgMsgKanji8B7CTex "__OTR__textures/kanji/gMsgKanji8B7CTex" +static const ALIGN_ASSET(2) char gMsgKanji8B7CTex[] = dgMsgKanji8B7CTex; + +#define dgMsgKanji8B7DTex "__OTR__textures/kanji/gMsgKanji8B7DTex" +static const ALIGN_ASSET(2) char gMsgKanji8B7DTex[] = dgMsgKanji8B7DTex; + +#define dgMsgKanji8B7ETex "__OTR__textures/kanji/gMsgKanji8B7ETex" +static const ALIGN_ASSET(2) char gMsgKanji8B7ETex[] = dgMsgKanji8B7ETex; + +#define dgMsgKanji8B80Tex "__OTR__textures/kanji/gMsgKanji8B80Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B80Tex[] = dgMsgKanji8B80Tex; + +#define dgMsgKanji8B81Tex "__OTR__textures/kanji/gMsgKanji8B81Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B81Tex[] = dgMsgKanji8B81Tex; + +#define dgMsgKanji8B82Tex "__OTR__textures/kanji/gMsgKanji8B82Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B82Tex[] = dgMsgKanji8B82Tex; + +#define dgMsgKanji8B83Tex "__OTR__textures/kanji/gMsgKanji8B83Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B83Tex[] = dgMsgKanji8B83Tex; + +#define dgMsgKanji8B84Tex "__OTR__textures/kanji/gMsgKanji8B84Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B84Tex[] = dgMsgKanji8B84Tex; + +#define dgMsgKanji8B85Tex "__OTR__textures/kanji/gMsgKanji8B85Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B85Tex[] = dgMsgKanji8B85Tex; + +#define dgMsgKanji8B86Tex "__OTR__textures/kanji/gMsgKanji8B86Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B86Tex[] = dgMsgKanji8B86Tex; + +#define dgMsgKanji8B87Tex "__OTR__textures/kanji/gMsgKanji8B87Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B87Tex[] = dgMsgKanji8B87Tex; + +#define dgMsgKanji8B88Tex "__OTR__textures/kanji/gMsgKanji8B88Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B88Tex[] = dgMsgKanji8B88Tex; + +#define dgMsgKanji8B89Tex "__OTR__textures/kanji/gMsgKanji8B89Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B89Tex[] = dgMsgKanji8B89Tex; + +#define dgMsgKanji8B8ATex "__OTR__textures/kanji/gMsgKanji8B8ATex" +static const ALIGN_ASSET(2) char gMsgKanji8B8ATex[] = dgMsgKanji8B8ATex; + +#define dgMsgKanji8B8BTex "__OTR__textures/kanji/gMsgKanji8B8BTex" +static const ALIGN_ASSET(2) char gMsgKanji8B8BTex[] = dgMsgKanji8B8BTex; + +#define dgMsgKanji8B8CTex "__OTR__textures/kanji/gMsgKanji8B8CTex" +static const ALIGN_ASSET(2) char gMsgKanji8B8CTex[] = dgMsgKanji8B8CTex; + +#define dgMsgKanji8B8DTex "__OTR__textures/kanji/gMsgKanji8B8DTex" +static const ALIGN_ASSET(2) char gMsgKanji8B8DTex[] = dgMsgKanji8B8DTex; + +#define dgMsgKanji8B8ETex "__OTR__textures/kanji/gMsgKanji8B8ETex" +static const ALIGN_ASSET(2) char gMsgKanji8B8ETex[] = dgMsgKanji8B8ETex; + +#define dgMsgKanji8B8FTex "__OTR__textures/kanji/gMsgKanji8B8FTex" +static const ALIGN_ASSET(2) char gMsgKanji8B8FTex[] = dgMsgKanji8B8FTex; + +#define dgMsgKanji8B90Tex "__OTR__textures/kanji/gMsgKanji8B90Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B90Tex[] = dgMsgKanji8B90Tex; + +#define dgMsgKanji8B91Tex "__OTR__textures/kanji/gMsgKanji8B91Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B91Tex[] = dgMsgKanji8B91Tex; + +#define dgMsgKanji8B92Tex "__OTR__textures/kanji/gMsgKanji8B92Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B92Tex[] = dgMsgKanji8B92Tex; + +#define dgMsgKanji8B93Tex "__OTR__textures/kanji/gMsgKanji8B93Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B93Tex[] = dgMsgKanji8B93Tex; + +#define dgMsgKanji8B94Tex "__OTR__textures/kanji/gMsgKanji8B94Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B94Tex[] = dgMsgKanji8B94Tex; + +#define dgMsgKanji8B95Tex "__OTR__textures/kanji/gMsgKanji8B95Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B95Tex[] = dgMsgKanji8B95Tex; + +#define dgMsgKanji8B96Tex "__OTR__textures/kanji/gMsgKanji8B96Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B96Tex[] = dgMsgKanji8B96Tex; + +#define dgMsgKanji8B97Tex "__OTR__textures/kanji/gMsgKanji8B97Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B97Tex[] = dgMsgKanji8B97Tex; + +#define dgMsgKanji8B98Tex "__OTR__textures/kanji/gMsgKanji8B98Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B98Tex[] = dgMsgKanji8B98Tex; + +#define dgMsgKanji8B99Tex "__OTR__textures/kanji/gMsgKanji8B99Tex" +static const ALIGN_ASSET(2) char gMsgKanji8B99Tex[] = dgMsgKanji8B99Tex; + +#define dgMsgKanji8B9ATex "__OTR__textures/kanji/gMsgKanji8B9ATex" +static const ALIGN_ASSET(2) char gMsgKanji8B9ATex[] = dgMsgKanji8B9ATex; + +#define dgMsgKanji8B9BTex "__OTR__textures/kanji/gMsgKanji8B9BTex" +static const ALIGN_ASSET(2) char gMsgKanji8B9BTex[] = dgMsgKanji8B9BTex; + +#define dgMsgKanji8B9CTex "__OTR__textures/kanji/gMsgKanji8B9CTex" +static const ALIGN_ASSET(2) char gMsgKanji8B9CTex[] = dgMsgKanji8B9CTex; + +#define dgMsgKanji8B9DTex "__OTR__textures/kanji/gMsgKanji8B9DTex" +static const ALIGN_ASSET(2) char gMsgKanji8B9DTex[] = dgMsgKanji8B9DTex; + +#define dgMsgKanji8B9ETex "__OTR__textures/kanji/gMsgKanji8B9ETex" +static const ALIGN_ASSET(2) char gMsgKanji8B9ETex[] = dgMsgKanji8B9ETex; + +#define dgMsgKanji8B9FTex "__OTR__textures/kanji/gMsgKanji8B9FTex" +static const ALIGN_ASSET(2) char gMsgKanji8B9FTex[] = dgMsgKanji8B9FTex; + +#define dgMsgKanji8BA0Tex "__OTR__textures/kanji/gMsgKanji8BA0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA0Tex[] = dgMsgKanji8BA0Tex; + +#define dgMsgKanji8BA1Tex "__OTR__textures/kanji/gMsgKanji8BA1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA1Tex[] = dgMsgKanji8BA1Tex; + +#define dgMsgKanji8BA2Tex "__OTR__textures/kanji/gMsgKanji8BA2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA2Tex[] = dgMsgKanji8BA2Tex; + +#define dgMsgKanji8BA3Tex "__OTR__textures/kanji/gMsgKanji8BA3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA3Tex[] = dgMsgKanji8BA3Tex; + +#define dgMsgKanji8BA4Tex "__OTR__textures/kanji/gMsgKanji8BA4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA4Tex[] = dgMsgKanji8BA4Tex; + +#define dgMsgKanji8BA5Tex "__OTR__textures/kanji/gMsgKanji8BA5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA5Tex[] = dgMsgKanji8BA5Tex; + +#define dgMsgKanji8BA6Tex "__OTR__textures/kanji/gMsgKanji8BA6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA6Tex[] = dgMsgKanji8BA6Tex; + +#define dgMsgKanji8BA7Tex "__OTR__textures/kanji/gMsgKanji8BA7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA7Tex[] = dgMsgKanji8BA7Tex; + +#define dgMsgKanji8BA8Tex "__OTR__textures/kanji/gMsgKanji8BA8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA8Tex[] = dgMsgKanji8BA8Tex; + +#define dgMsgKanji8BA9Tex "__OTR__textures/kanji/gMsgKanji8BA9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BA9Tex[] = dgMsgKanji8BA9Tex; + +#define dgMsgKanji8BAATex "__OTR__textures/kanji/gMsgKanji8BAATex" +static const ALIGN_ASSET(2) char gMsgKanji8BAATex[] = dgMsgKanji8BAATex; + +#define dgMsgKanji8BABTex "__OTR__textures/kanji/gMsgKanji8BABTex" +static const ALIGN_ASSET(2) char gMsgKanji8BABTex[] = dgMsgKanji8BABTex; + +#define dgMsgKanji8BACTex "__OTR__textures/kanji/gMsgKanji8BACTex" +static const ALIGN_ASSET(2) char gMsgKanji8BACTex[] = dgMsgKanji8BACTex; + +#define dgMsgKanji8BADTex "__OTR__textures/kanji/gMsgKanji8BADTex" +static const ALIGN_ASSET(2) char gMsgKanji8BADTex[] = dgMsgKanji8BADTex; + +#define dgMsgKanji8BAETex "__OTR__textures/kanji/gMsgKanji8BAETex" +static const ALIGN_ASSET(2) char gMsgKanji8BAETex[] = dgMsgKanji8BAETex; + +#define dgMsgKanji8BAFTex "__OTR__textures/kanji/gMsgKanji8BAFTex" +static const ALIGN_ASSET(2) char gMsgKanji8BAFTex[] = dgMsgKanji8BAFTex; + +#define dgMsgKanji8BB0Tex "__OTR__textures/kanji/gMsgKanji8BB0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB0Tex[] = dgMsgKanji8BB0Tex; + +#define dgMsgKanji8BB1Tex "__OTR__textures/kanji/gMsgKanji8BB1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB1Tex[] = dgMsgKanji8BB1Tex; + +#define dgMsgKanji8BB2Tex "__OTR__textures/kanji/gMsgKanji8BB2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB2Tex[] = dgMsgKanji8BB2Tex; + +#define dgMsgKanji8BB3Tex "__OTR__textures/kanji/gMsgKanji8BB3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB3Tex[] = dgMsgKanji8BB3Tex; + +#define dgMsgKanji8BB4Tex "__OTR__textures/kanji/gMsgKanji8BB4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB4Tex[] = dgMsgKanji8BB4Tex; + +#define dgMsgKanji8BB5Tex "__OTR__textures/kanji/gMsgKanji8BB5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB5Tex[] = dgMsgKanji8BB5Tex; + +#define dgMsgKanji8BB6Tex "__OTR__textures/kanji/gMsgKanji8BB6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB6Tex[] = dgMsgKanji8BB6Tex; + +#define dgMsgKanji8BB7Tex "__OTR__textures/kanji/gMsgKanji8BB7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB7Tex[] = dgMsgKanji8BB7Tex; + +#define dgMsgKanji8BB8Tex "__OTR__textures/kanji/gMsgKanji8BB8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB8Tex[] = dgMsgKanji8BB8Tex; + +#define dgMsgKanji8BB9Tex "__OTR__textures/kanji/gMsgKanji8BB9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BB9Tex[] = dgMsgKanji8BB9Tex; + +#define dgMsgKanji8BBATex "__OTR__textures/kanji/gMsgKanji8BBATex" +static const ALIGN_ASSET(2) char gMsgKanji8BBATex[] = dgMsgKanji8BBATex; + +#define dgMsgKanji8BBBTex "__OTR__textures/kanji/gMsgKanji8BBBTex" +static const ALIGN_ASSET(2) char gMsgKanji8BBBTex[] = dgMsgKanji8BBBTex; + +#define dgMsgKanji8BBCTex "__OTR__textures/kanji/gMsgKanji8BBCTex" +static const ALIGN_ASSET(2) char gMsgKanji8BBCTex[] = dgMsgKanji8BBCTex; + +#define dgMsgKanji8BBDTex "__OTR__textures/kanji/gMsgKanji8BBDTex" +static const ALIGN_ASSET(2) char gMsgKanji8BBDTex[] = dgMsgKanji8BBDTex; + +#define dgMsgKanji8BBETex "__OTR__textures/kanji/gMsgKanji8BBETex" +static const ALIGN_ASSET(2) char gMsgKanji8BBETex[] = dgMsgKanji8BBETex; + +#define dgMsgKanji8BBFTex "__OTR__textures/kanji/gMsgKanji8BBFTex" +static const ALIGN_ASSET(2) char gMsgKanji8BBFTex[] = dgMsgKanji8BBFTex; + +#define dgMsgKanji8BC0Tex "__OTR__textures/kanji/gMsgKanji8BC0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC0Tex[] = dgMsgKanji8BC0Tex; + +#define dgMsgKanji8BC1Tex "__OTR__textures/kanji/gMsgKanji8BC1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC1Tex[] = dgMsgKanji8BC1Tex; + +#define dgMsgKanji8BC2Tex "__OTR__textures/kanji/gMsgKanji8BC2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC2Tex[] = dgMsgKanji8BC2Tex; + +#define dgMsgKanji8BC3Tex "__OTR__textures/kanji/gMsgKanji8BC3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC3Tex[] = dgMsgKanji8BC3Tex; + +#define dgMsgKanji8BC4Tex "__OTR__textures/kanji/gMsgKanji8BC4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC4Tex[] = dgMsgKanji8BC4Tex; + +#define dgMsgKanji8BC5Tex "__OTR__textures/kanji/gMsgKanji8BC5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC5Tex[] = dgMsgKanji8BC5Tex; + +#define dgMsgKanji8BC6Tex "__OTR__textures/kanji/gMsgKanji8BC6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC6Tex[] = dgMsgKanji8BC6Tex; + +#define dgMsgKanji8BC7Tex "__OTR__textures/kanji/gMsgKanji8BC7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC7Tex[] = dgMsgKanji8BC7Tex; + +#define dgMsgKanji8BC8Tex "__OTR__textures/kanji/gMsgKanji8BC8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC8Tex[] = dgMsgKanji8BC8Tex; + +#define dgMsgKanji8BC9Tex "__OTR__textures/kanji/gMsgKanji8BC9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BC9Tex[] = dgMsgKanji8BC9Tex; + +#define dgMsgKanji8BCATex "__OTR__textures/kanji/gMsgKanji8BCATex" +static const ALIGN_ASSET(2) char gMsgKanji8BCATex[] = dgMsgKanji8BCATex; + +#define dgMsgKanji8BCBTex "__OTR__textures/kanji/gMsgKanji8BCBTex" +static const ALIGN_ASSET(2) char gMsgKanji8BCBTex[] = dgMsgKanji8BCBTex; + +#define dgMsgKanji8BCCTex "__OTR__textures/kanji/gMsgKanji8BCCTex" +static const ALIGN_ASSET(2) char gMsgKanji8BCCTex[] = dgMsgKanji8BCCTex; + +#define dgMsgKanji8BCDTex "__OTR__textures/kanji/gMsgKanji8BCDTex" +static const ALIGN_ASSET(2) char gMsgKanji8BCDTex[] = dgMsgKanji8BCDTex; + +#define dgMsgKanji8BCETex "__OTR__textures/kanji/gMsgKanji8BCETex" +static const ALIGN_ASSET(2) char gMsgKanji8BCETex[] = dgMsgKanji8BCETex; + +#define dgMsgKanji8BCFTex "__OTR__textures/kanji/gMsgKanji8BCFTex" +static const ALIGN_ASSET(2) char gMsgKanji8BCFTex[] = dgMsgKanji8BCFTex; + +#define dgMsgKanji8BD0Tex "__OTR__textures/kanji/gMsgKanji8BD0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD0Tex[] = dgMsgKanji8BD0Tex; + +#define dgMsgKanji8BD1Tex "__OTR__textures/kanji/gMsgKanji8BD1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD1Tex[] = dgMsgKanji8BD1Tex; + +#define dgMsgKanji8BD2Tex "__OTR__textures/kanji/gMsgKanji8BD2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD2Tex[] = dgMsgKanji8BD2Tex; + +#define dgMsgKanji8BD3Tex "__OTR__textures/kanji/gMsgKanji8BD3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD3Tex[] = dgMsgKanji8BD3Tex; + +#define dgMsgKanji8BD4Tex "__OTR__textures/kanji/gMsgKanji8BD4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD4Tex[] = dgMsgKanji8BD4Tex; + +#define dgMsgKanji8BD5Tex "__OTR__textures/kanji/gMsgKanji8BD5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD5Tex[] = dgMsgKanji8BD5Tex; + +#define dgMsgKanji8BD6Tex "__OTR__textures/kanji/gMsgKanji8BD6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD6Tex[] = dgMsgKanji8BD6Tex; + +#define dgMsgKanji8BD7Tex "__OTR__textures/kanji/gMsgKanji8BD7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD7Tex[] = dgMsgKanji8BD7Tex; + +#define dgMsgKanji8BD8Tex "__OTR__textures/kanji/gMsgKanji8BD8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD8Tex[] = dgMsgKanji8BD8Tex; + +#define dgMsgKanji8BD9Tex "__OTR__textures/kanji/gMsgKanji8BD9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BD9Tex[] = dgMsgKanji8BD9Tex; + +#define dgMsgKanji8BDATex "__OTR__textures/kanji/gMsgKanji8BDATex" +static const ALIGN_ASSET(2) char gMsgKanji8BDATex[] = dgMsgKanji8BDATex; + +#define dgMsgKanji8BDBTex "__OTR__textures/kanji/gMsgKanji8BDBTex" +static const ALIGN_ASSET(2) char gMsgKanji8BDBTex[] = dgMsgKanji8BDBTex; + +#define dgMsgKanji8BDCTex "__OTR__textures/kanji/gMsgKanji8BDCTex" +static const ALIGN_ASSET(2) char gMsgKanji8BDCTex[] = dgMsgKanji8BDCTex; + +#define dgMsgKanji8BDDTex "__OTR__textures/kanji/gMsgKanji8BDDTex" +static const ALIGN_ASSET(2) char gMsgKanji8BDDTex[] = dgMsgKanji8BDDTex; + +#define dgMsgKanji8BDETex "__OTR__textures/kanji/gMsgKanji8BDETex" +static const ALIGN_ASSET(2) char gMsgKanji8BDETex[] = dgMsgKanji8BDETex; + +#define dgMsgKanji8BDFTex "__OTR__textures/kanji/gMsgKanji8BDFTex" +static const ALIGN_ASSET(2) char gMsgKanji8BDFTex[] = dgMsgKanji8BDFTex; + +#define dgMsgKanji8BE0Tex "__OTR__textures/kanji/gMsgKanji8BE0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE0Tex[] = dgMsgKanji8BE0Tex; + +#define dgMsgKanji8BE1Tex "__OTR__textures/kanji/gMsgKanji8BE1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE1Tex[] = dgMsgKanji8BE1Tex; + +#define dgMsgKanji8BE2Tex "__OTR__textures/kanji/gMsgKanji8BE2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE2Tex[] = dgMsgKanji8BE2Tex; + +#define dgMsgKanji8BE3Tex "__OTR__textures/kanji/gMsgKanji8BE3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE3Tex[] = dgMsgKanji8BE3Tex; + +#define dgMsgKanji8BE4Tex "__OTR__textures/kanji/gMsgKanji8BE4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE4Tex[] = dgMsgKanji8BE4Tex; + +#define dgMsgKanji8BE5Tex "__OTR__textures/kanji/gMsgKanji8BE5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE5Tex[] = dgMsgKanji8BE5Tex; + +#define dgMsgKanji8BE6Tex "__OTR__textures/kanji/gMsgKanji8BE6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE6Tex[] = dgMsgKanji8BE6Tex; + +#define dgMsgKanji8BE7Tex "__OTR__textures/kanji/gMsgKanji8BE7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE7Tex[] = dgMsgKanji8BE7Tex; + +#define dgMsgKanji8BE8Tex "__OTR__textures/kanji/gMsgKanji8BE8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE8Tex[] = dgMsgKanji8BE8Tex; + +#define dgMsgKanji8BE9Tex "__OTR__textures/kanji/gMsgKanji8BE9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BE9Tex[] = dgMsgKanji8BE9Tex; + +#define dgMsgKanji8BEATex "__OTR__textures/kanji/gMsgKanji8BEATex" +static const ALIGN_ASSET(2) char gMsgKanji8BEATex[] = dgMsgKanji8BEATex; + +#define dgMsgKanji8BEBTex "__OTR__textures/kanji/gMsgKanji8BEBTex" +static const ALIGN_ASSET(2) char gMsgKanji8BEBTex[] = dgMsgKanji8BEBTex; + +#define dgMsgKanji8BECTex "__OTR__textures/kanji/gMsgKanji8BECTex" +static const ALIGN_ASSET(2) char gMsgKanji8BECTex[] = dgMsgKanji8BECTex; + +#define dgMsgKanji8BEDTex "__OTR__textures/kanji/gMsgKanji8BEDTex" +static const ALIGN_ASSET(2) char gMsgKanji8BEDTex[] = dgMsgKanji8BEDTex; + +#define dgMsgKanji8BEETex "__OTR__textures/kanji/gMsgKanji8BEETex" +static const ALIGN_ASSET(2) char gMsgKanji8BEETex[] = dgMsgKanji8BEETex; + +#define dgMsgKanji8BEFTex "__OTR__textures/kanji/gMsgKanji8BEFTex" +static const ALIGN_ASSET(2) char gMsgKanji8BEFTex[] = dgMsgKanji8BEFTex; + +#define dgMsgKanji8BF0Tex "__OTR__textures/kanji/gMsgKanji8BF0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF0Tex[] = dgMsgKanji8BF0Tex; + +#define dgMsgKanji8BF1Tex "__OTR__textures/kanji/gMsgKanji8BF1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF1Tex[] = dgMsgKanji8BF1Tex; + +#define dgMsgKanji8BF2Tex "__OTR__textures/kanji/gMsgKanji8BF2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF2Tex[] = dgMsgKanji8BF2Tex; + +#define dgMsgKanji8BF3Tex "__OTR__textures/kanji/gMsgKanji8BF3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF3Tex[] = dgMsgKanji8BF3Tex; + +#define dgMsgKanji8BF4Tex "__OTR__textures/kanji/gMsgKanji8BF4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF4Tex[] = dgMsgKanji8BF4Tex; + +#define dgMsgKanji8BF5Tex "__OTR__textures/kanji/gMsgKanji8BF5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF5Tex[] = dgMsgKanji8BF5Tex; + +#define dgMsgKanji8BF6Tex "__OTR__textures/kanji/gMsgKanji8BF6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF6Tex[] = dgMsgKanji8BF6Tex; + +#define dgMsgKanji8BF7Tex "__OTR__textures/kanji/gMsgKanji8BF7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF7Tex[] = dgMsgKanji8BF7Tex; + +#define dgMsgKanji8BF8Tex "__OTR__textures/kanji/gMsgKanji8BF8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF8Tex[] = dgMsgKanji8BF8Tex; + +#define dgMsgKanji8BF9Tex "__OTR__textures/kanji/gMsgKanji8BF9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8BF9Tex[] = dgMsgKanji8BF9Tex; + +#define dgMsgKanji8BFATex "__OTR__textures/kanji/gMsgKanji8BFATex" +static const ALIGN_ASSET(2) char gMsgKanji8BFATex[] = dgMsgKanji8BFATex; + +#define dgMsgKanji8BFBTex "__OTR__textures/kanji/gMsgKanji8BFBTex" +static const ALIGN_ASSET(2) char gMsgKanji8BFBTex[] = dgMsgKanji8BFBTex; + +#define dgMsgKanji8BFCTex "__OTR__textures/kanji/gMsgKanji8BFCTex" +static const ALIGN_ASSET(2) char gMsgKanji8BFCTex[] = dgMsgKanji8BFCTex; + +#define dgMsgKanji8C40Tex "__OTR__textures/kanji/gMsgKanji8C40Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C40Tex[] = dgMsgKanji8C40Tex; + +#define dgMsgKanji8C41Tex "__OTR__textures/kanji/gMsgKanji8C41Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C41Tex[] = dgMsgKanji8C41Tex; + +#define dgMsgKanji8C42Tex "__OTR__textures/kanji/gMsgKanji8C42Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C42Tex[] = dgMsgKanji8C42Tex; + +#define dgMsgKanji8C43Tex "__OTR__textures/kanji/gMsgKanji8C43Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C43Tex[] = dgMsgKanji8C43Tex; + +#define dgMsgKanji8C44Tex "__OTR__textures/kanji/gMsgKanji8C44Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C44Tex[] = dgMsgKanji8C44Tex; + +#define dgMsgKanji8C45Tex "__OTR__textures/kanji/gMsgKanji8C45Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C45Tex[] = dgMsgKanji8C45Tex; + +#define dgMsgKanji8C46Tex "__OTR__textures/kanji/gMsgKanji8C46Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C46Tex[] = dgMsgKanji8C46Tex; + +#define dgMsgKanji8C47Tex "__OTR__textures/kanji/gMsgKanji8C47Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C47Tex[] = dgMsgKanji8C47Tex; + +#define dgMsgKanji8C48Tex "__OTR__textures/kanji/gMsgKanji8C48Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C48Tex[] = dgMsgKanji8C48Tex; + +#define dgMsgKanji8C49Tex "__OTR__textures/kanji/gMsgKanji8C49Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C49Tex[] = dgMsgKanji8C49Tex; + +#define dgMsgKanji8C4ATex "__OTR__textures/kanji/gMsgKanji8C4ATex" +static const ALIGN_ASSET(2) char gMsgKanji8C4ATex[] = dgMsgKanji8C4ATex; + +#define dgMsgKanji8C4BTex "__OTR__textures/kanji/gMsgKanji8C4BTex" +static const ALIGN_ASSET(2) char gMsgKanji8C4BTex[] = dgMsgKanji8C4BTex; + +#define dgMsgKanji8C4CTex "__OTR__textures/kanji/gMsgKanji8C4CTex" +static const ALIGN_ASSET(2) char gMsgKanji8C4CTex[] = dgMsgKanji8C4CTex; + +#define dgMsgKanji8C4DTex "__OTR__textures/kanji/gMsgKanji8C4DTex" +static const ALIGN_ASSET(2) char gMsgKanji8C4DTex[] = dgMsgKanji8C4DTex; + +#define dgMsgKanji8C4ETex "__OTR__textures/kanji/gMsgKanji8C4ETex" +static const ALIGN_ASSET(2) char gMsgKanji8C4ETex[] = dgMsgKanji8C4ETex; + +#define dgMsgKanji8C4FTex "__OTR__textures/kanji/gMsgKanji8C4FTex" +static const ALIGN_ASSET(2) char gMsgKanji8C4FTex[] = dgMsgKanji8C4FTex; + +#define dgMsgKanji8C50Tex "__OTR__textures/kanji/gMsgKanji8C50Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C50Tex[] = dgMsgKanji8C50Tex; + +#define dgMsgKanji8C51Tex "__OTR__textures/kanji/gMsgKanji8C51Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C51Tex[] = dgMsgKanji8C51Tex; + +#define dgMsgKanji8C52Tex "__OTR__textures/kanji/gMsgKanji8C52Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C52Tex[] = dgMsgKanji8C52Tex; + +#define dgMsgKanji8C53Tex "__OTR__textures/kanji/gMsgKanji8C53Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C53Tex[] = dgMsgKanji8C53Tex; + +#define dgMsgKanji8C54Tex "__OTR__textures/kanji/gMsgKanji8C54Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C54Tex[] = dgMsgKanji8C54Tex; + +#define dgMsgKanji8C55Tex "__OTR__textures/kanji/gMsgKanji8C55Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C55Tex[] = dgMsgKanji8C55Tex; + +#define dgMsgKanji8C56Tex "__OTR__textures/kanji/gMsgKanji8C56Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C56Tex[] = dgMsgKanji8C56Tex; + +#define dgMsgKanji8C57Tex "__OTR__textures/kanji/gMsgKanji8C57Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C57Tex[] = dgMsgKanji8C57Tex; + +#define dgMsgKanji8C58Tex "__OTR__textures/kanji/gMsgKanji8C58Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C58Tex[] = dgMsgKanji8C58Tex; + +#define dgMsgKanji8C59Tex "__OTR__textures/kanji/gMsgKanji8C59Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C59Tex[] = dgMsgKanji8C59Tex; + +#define dgMsgKanji8C5ATex "__OTR__textures/kanji/gMsgKanji8C5ATex" +static const ALIGN_ASSET(2) char gMsgKanji8C5ATex[] = dgMsgKanji8C5ATex; + +#define dgMsgKanji8C5BTex "__OTR__textures/kanji/gMsgKanji8C5BTex" +static const ALIGN_ASSET(2) char gMsgKanji8C5BTex[] = dgMsgKanji8C5BTex; + +#define dgMsgKanji8C5CTex "__OTR__textures/kanji/gMsgKanji8C5CTex" +static const ALIGN_ASSET(2) char gMsgKanji8C5CTex[] = dgMsgKanji8C5CTex; + +#define dgMsgKanji8C5DTex "__OTR__textures/kanji/gMsgKanji8C5DTex" +static const ALIGN_ASSET(2) char gMsgKanji8C5DTex[] = dgMsgKanji8C5DTex; + +#define dgMsgKanji8C5ETex "__OTR__textures/kanji/gMsgKanji8C5ETex" +static const ALIGN_ASSET(2) char gMsgKanji8C5ETex[] = dgMsgKanji8C5ETex; + +#define dgMsgKanji8C5FTex "__OTR__textures/kanji/gMsgKanji8C5FTex" +static const ALIGN_ASSET(2) char gMsgKanji8C5FTex[] = dgMsgKanji8C5FTex; + +#define dgMsgKanji8C60Tex "__OTR__textures/kanji/gMsgKanji8C60Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C60Tex[] = dgMsgKanji8C60Tex; + +#define dgMsgKanji8C61Tex "__OTR__textures/kanji/gMsgKanji8C61Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C61Tex[] = dgMsgKanji8C61Tex; + +#define dgMsgKanji8C62Tex "__OTR__textures/kanji/gMsgKanji8C62Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C62Tex[] = dgMsgKanji8C62Tex; + +#define dgMsgKanji8C63Tex "__OTR__textures/kanji/gMsgKanji8C63Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C63Tex[] = dgMsgKanji8C63Tex; + +#define dgMsgKanji8C64Tex "__OTR__textures/kanji/gMsgKanji8C64Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C64Tex[] = dgMsgKanji8C64Tex; + +#define dgMsgKanji8C65Tex "__OTR__textures/kanji/gMsgKanji8C65Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C65Tex[] = dgMsgKanji8C65Tex; + +#define dgMsgKanji8C66Tex "__OTR__textures/kanji/gMsgKanji8C66Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C66Tex[] = dgMsgKanji8C66Tex; + +#define dgMsgKanji8C67Tex "__OTR__textures/kanji/gMsgKanji8C67Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C67Tex[] = dgMsgKanji8C67Tex; + +#define dgMsgKanji8C68Tex "__OTR__textures/kanji/gMsgKanji8C68Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C68Tex[] = dgMsgKanji8C68Tex; + +#define dgMsgKanji8C69Tex "__OTR__textures/kanji/gMsgKanji8C69Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C69Tex[] = dgMsgKanji8C69Tex; + +#define dgMsgKanji8C6ATex "__OTR__textures/kanji/gMsgKanji8C6ATex" +static const ALIGN_ASSET(2) char gMsgKanji8C6ATex[] = dgMsgKanji8C6ATex; + +#define dgMsgKanji8C6BTex "__OTR__textures/kanji/gMsgKanji8C6BTex" +static const ALIGN_ASSET(2) char gMsgKanji8C6BTex[] = dgMsgKanji8C6BTex; + +#define dgMsgKanji8C6CTex "__OTR__textures/kanji/gMsgKanji8C6CTex" +static const ALIGN_ASSET(2) char gMsgKanji8C6CTex[] = dgMsgKanji8C6CTex; + +#define dgMsgKanji8C6DTex "__OTR__textures/kanji/gMsgKanji8C6DTex" +static const ALIGN_ASSET(2) char gMsgKanji8C6DTex[] = dgMsgKanji8C6DTex; + +#define dgMsgKanji8C6ETex "__OTR__textures/kanji/gMsgKanji8C6ETex" +static const ALIGN_ASSET(2) char gMsgKanji8C6ETex[] = dgMsgKanji8C6ETex; + +#define dgMsgKanji8C6FTex "__OTR__textures/kanji/gMsgKanji8C6FTex" +static const ALIGN_ASSET(2) char gMsgKanji8C6FTex[] = dgMsgKanji8C6FTex; + +#define dgMsgKanji8C70Tex "__OTR__textures/kanji/gMsgKanji8C70Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C70Tex[] = dgMsgKanji8C70Tex; + +#define dgMsgKanji8C71Tex "__OTR__textures/kanji/gMsgKanji8C71Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C71Tex[] = dgMsgKanji8C71Tex; + +#define dgMsgKanji8C72Tex "__OTR__textures/kanji/gMsgKanji8C72Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C72Tex[] = dgMsgKanji8C72Tex; + +#define dgMsgKanji8C73Tex "__OTR__textures/kanji/gMsgKanji8C73Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C73Tex[] = dgMsgKanji8C73Tex; + +#define dgMsgKanji8C74Tex "__OTR__textures/kanji/gMsgKanji8C74Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C74Tex[] = dgMsgKanji8C74Tex; + +#define dgMsgKanji8C75Tex "__OTR__textures/kanji/gMsgKanji8C75Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C75Tex[] = dgMsgKanji8C75Tex; + +#define dgMsgKanji8C76Tex "__OTR__textures/kanji/gMsgKanji8C76Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C76Tex[] = dgMsgKanji8C76Tex; + +#define dgMsgKanji8C77Tex "__OTR__textures/kanji/gMsgKanji8C77Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C77Tex[] = dgMsgKanji8C77Tex; + +#define dgMsgKanji8C78Tex "__OTR__textures/kanji/gMsgKanji8C78Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C78Tex[] = dgMsgKanji8C78Tex; + +#define dgMsgKanji8C79Tex "__OTR__textures/kanji/gMsgKanji8C79Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C79Tex[] = dgMsgKanji8C79Tex; + +#define dgMsgKanji8C7ATex "__OTR__textures/kanji/gMsgKanji8C7ATex" +static const ALIGN_ASSET(2) char gMsgKanji8C7ATex[] = dgMsgKanji8C7ATex; + +#define dgMsgKanji8C7BTex "__OTR__textures/kanji/gMsgKanji8C7BTex" +static const ALIGN_ASSET(2) char gMsgKanji8C7BTex[] = dgMsgKanji8C7BTex; + +#define dgMsgKanji8C7CTex "__OTR__textures/kanji/gMsgKanji8C7CTex" +static const ALIGN_ASSET(2) char gMsgKanji8C7CTex[] = dgMsgKanji8C7CTex; + +#define dgMsgKanji8C7DTex "__OTR__textures/kanji/gMsgKanji8C7DTex" +static const ALIGN_ASSET(2) char gMsgKanji8C7DTex[] = dgMsgKanji8C7DTex; + +#define dgMsgKanji8C7ETex "__OTR__textures/kanji/gMsgKanji8C7ETex" +static const ALIGN_ASSET(2) char gMsgKanji8C7ETex[] = dgMsgKanji8C7ETex; + +#define dgMsgKanji8C80Tex "__OTR__textures/kanji/gMsgKanji8C80Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C80Tex[] = dgMsgKanji8C80Tex; + +#define dgMsgKanji8C81Tex "__OTR__textures/kanji/gMsgKanji8C81Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C81Tex[] = dgMsgKanji8C81Tex; + +#define dgMsgKanji8C82Tex "__OTR__textures/kanji/gMsgKanji8C82Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C82Tex[] = dgMsgKanji8C82Tex; + +#define dgMsgKanji8C83Tex "__OTR__textures/kanji/gMsgKanji8C83Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C83Tex[] = dgMsgKanji8C83Tex; + +#define dgMsgKanji8C84Tex "__OTR__textures/kanji/gMsgKanji8C84Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C84Tex[] = dgMsgKanji8C84Tex; + +#define dgMsgKanji8C85Tex "__OTR__textures/kanji/gMsgKanji8C85Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C85Tex[] = dgMsgKanji8C85Tex; + +#define dgMsgKanji8C86Tex "__OTR__textures/kanji/gMsgKanji8C86Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C86Tex[] = dgMsgKanji8C86Tex; + +#define dgMsgKanji8C87Tex "__OTR__textures/kanji/gMsgKanji8C87Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C87Tex[] = dgMsgKanji8C87Tex; + +#define dgMsgKanji8C88Tex "__OTR__textures/kanji/gMsgKanji8C88Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C88Tex[] = dgMsgKanji8C88Tex; + +#define dgMsgKanji8C89Tex "__OTR__textures/kanji/gMsgKanji8C89Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C89Tex[] = dgMsgKanji8C89Tex; + +#define dgMsgKanji8C8ATex "__OTR__textures/kanji/gMsgKanji8C8ATex" +static const ALIGN_ASSET(2) char gMsgKanji8C8ATex[] = dgMsgKanji8C8ATex; + +#define dgMsgKanji8C8BTex "__OTR__textures/kanji/gMsgKanji8C8BTex" +static const ALIGN_ASSET(2) char gMsgKanji8C8BTex[] = dgMsgKanji8C8BTex; + +#define dgMsgKanji8C8CTex "__OTR__textures/kanji/gMsgKanji8C8CTex" +static const ALIGN_ASSET(2) char gMsgKanji8C8CTex[] = dgMsgKanji8C8CTex; + +#define dgMsgKanji8C8DTex "__OTR__textures/kanji/gMsgKanji8C8DTex" +static const ALIGN_ASSET(2) char gMsgKanji8C8DTex[] = dgMsgKanji8C8DTex; + +#define dgMsgKanji8C8ETex "__OTR__textures/kanji/gMsgKanji8C8ETex" +static const ALIGN_ASSET(2) char gMsgKanji8C8ETex[] = dgMsgKanji8C8ETex; + +#define dgMsgKanji8C8FTex "__OTR__textures/kanji/gMsgKanji8C8FTex" +static const ALIGN_ASSET(2) char gMsgKanji8C8FTex[] = dgMsgKanji8C8FTex; + +#define dgMsgKanji8C90Tex "__OTR__textures/kanji/gMsgKanji8C90Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C90Tex[] = dgMsgKanji8C90Tex; + +#define dgMsgKanji8C91Tex "__OTR__textures/kanji/gMsgKanji8C91Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C91Tex[] = dgMsgKanji8C91Tex; + +#define dgMsgKanji8C92Tex "__OTR__textures/kanji/gMsgKanji8C92Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C92Tex[] = dgMsgKanji8C92Tex; + +#define dgMsgKanji8C93Tex "__OTR__textures/kanji/gMsgKanji8C93Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C93Tex[] = dgMsgKanji8C93Tex; + +#define dgMsgKanji8C94Tex "__OTR__textures/kanji/gMsgKanji8C94Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C94Tex[] = dgMsgKanji8C94Tex; + +#define dgMsgKanji8C95Tex "__OTR__textures/kanji/gMsgKanji8C95Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C95Tex[] = dgMsgKanji8C95Tex; + +#define dgMsgKanji8C96Tex "__OTR__textures/kanji/gMsgKanji8C96Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C96Tex[] = dgMsgKanji8C96Tex; + +#define dgMsgKanji8C97Tex "__OTR__textures/kanji/gMsgKanji8C97Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C97Tex[] = dgMsgKanji8C97Tex; + +#define dgMsgKanji8C98Tex "__OTR__textures/kanji/gMsgKanji8C98Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C98Tex[] = dgMsgKanji8C98Tex; + +#define dgMsgKanji8C99Tex "__OTR__textures/kanji/gMsgKanji8C99Tex" +static const ALIGN_ASSET(2) char gMsgKanji8C99Tex[] = dgMsgKanji8C99Tex; + +#define dgMsgKanji8C9ATex "__OTR__textures/kanji/gMsgKanji8C9ATex" +static const ALIGN_ASSET(2) char gMsgKanji8C9ATex[] = dgMsgKanji8C9ATex; + +#define dgMsgKanji8C9BTex "__OTR__textures/kanji/gMsgKanji8C9BTex" +static const ALIGN_ASSET(2) char gMsgKanji8C9BTex[] = dgMsgKanji8C9BTex; + +#define dgMsgKanji8C9CTex "__OTR__textures/kanji/gMsgKanji8C9CTex" +static const ALIGN_ASSET(2) char gMsgKanji8C9CTex[] = dgMsgKanji8C9CTex; + +#define dgMsgKanji8C9DTex "__OTR__textures/kanji/gMsgKanji8C9DTex" +static const ALIGN_ASSET(2) char gMsgKanji8C9DTex[] = dgMsgKanji8C9DTex; + +#define dgMsgKanji8C9ETex "__OTR__textures/kanji/gMsgKanji8C9ETex" +static const ALIGN_ASSET(2) char gMsgKanji8C9ETex[] = dgMsgKanji8C9ETex; + +#define dgMsgKanji8C9FTex "__OTR__textures/kanji/gMsgKanji8C9FTex" +static const ALIGN_ASSET(2) char gMsgKanji8C9FTex[] = dgMsgKanji8C9FTex; + +#define dgMsgKanji8CA0Tex "__OTR__textures/kanji/gMsgKanji8CA0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA0Tex[] = dgMsgKanji8CA0Tex; + +#define dgMsgKanji8CA1Tex "__OTR__textures/kanji/gMsgKanji8CA1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA1Tex[] = dgMsgKanji8CA1Tex; + +#define dgMsgKanji8CA2Tex "__OTR__textures/kanji/gMsgKanji8CA2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA2Tex[] = dgMsgKanji8CA2Tex; + +#define dgMsgKanji8CA3Tex "__OTR__textures/kanji/gMsgKanji8CA3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA3Tex[] = dgMsgKanji8CA3Tex; + +#define dgMsgKanji8CA4Tex "__OTR__textures/kanji/gMsgKanji8CA4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA4Tex[] = dgMsgKanji8CA4Tex; + +#define dgMsgKanji8CA5Tex "__OTR__textures/kanji/gMsgKanji8CA5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA5Tex[] = dgMsgKanji8CA5Tex; + +#define dgMsgKanji8CA6Tex "__OTR__textures/kanji/gMsgKanji8CA6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA6Tex[] = dgMsgKanji8CA6Tex; + +#define dgMsgKanji8CA7Tex "__OTR__textures/kanji/gMsgKanji8CA7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA7Tex[] = dgMsgKanji8CA7Tex; + +#define dgMsgKanji8CA8Tex "__OTR__textures/kanji/gMsgKanji8CA8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA8Tex[] = dgMsgKanji8CA8Tex; + +#define dgMsgKanji8CA9Tex "__OTR__textures/kanji/gMsgKanji8CA9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CA9Tex[] = dgMsgKanji8CA9Tex; + +#define dgMsgKanji8CAATex "__OTR__textures/kanji/gMsgKanji8CAATex" +static const ALIGN_ASSET(2) char gMsgKanji8CAATex[] = dgMsgKanji8CAATex; + +#define dgMsgKanji8CABTex "__OTR__textures/kanji/gMsgKanji8CABTex" +static const ALIGN_ASSET(2) char gMsgKanji8CABTex[] = dgMsgKanji8CABTex; + +#define dgMsgKanji8CACTex "__OTR__textures/kanji/gMsgKanji8CACTex" +static const ALIGN_ASSET(2) char gMsgKanji8CACTex[] = dgMsgKanji8CACTex; + +#define dgMsgKanji8CADTex "__OTR__textures/kanji/gMsgKanji8CADTex" +static const ALIGN_ASSET(2) char gMsgKanji8CADTex[] = dgMsgKanji8CADTex; + +#define dgMsgKanji8CAETex "__OTR__textures/kanji/gMsgKanji8CAETex" +static const ALIGN_ASSET(2) char gMsgKanji8CAETex[] = dgMsgKanji8CAETex; + +#define dgMsgKanji8CAFTex "__OTR__textures/kanji/gMsgKanji8CAFTex" +static const ALIGN_ASSET(2) char gMsgKanji8CAFTex[] = dgMsgKanji8CAFTex; + +#define dgMsgKanji8CB0Tex "__OTR__textures/kanji/gMsgKanji8CB0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB0Tex[] = dgMsgKanji8CB0Tex; + +#define dgMsgKanji8CB1Tex "__OTR__textures/kanji/gMsgKanji8CB1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB1Tex[] = dgMsgKanji8CB1Tex; + +#define dgMsgKanji8CB2Tex "__OTR__textures/kanji/gMsgKanji8CB2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB2Tex[] = dgMsgKanji8CB2Tex; + +#define dgMsgKanji8CB3Tex "__OTR__textures/kanji/gMsgKanji8CB3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB3Tex[] = dgMsgKanji8CB3Tex; + +#define dgMsgKanji8CB4Tex "__OTR__textures/kanji/gMsgKanji8CB4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB4Tex[] = dgMsgKanji8CB4Tex; + +#define dgMsgKanji8CB5Tex "__OTR__textures/kanji/gMsgKanji8CB5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB5Tex[] = dgMsgKanji8CB5Tex; + +#define dgMsgKanji8CB6Tex "__OTR__textures/kanji/gMsgKanji8CB6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB6Tex[] = dgMsgKanji8CB6Tex; + +#define dgMsgKanji8CB7Tex "__OTR__textures/kanji/gMsgKanji8CB7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB7Tex[] = dgMsgKanji8CB7Tex; + +#define dgMsgKanji8CB8Tex "__OTR__textures/kanji/gMsgKanji8CB8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB8Tex[] = dgMsgKanji8CB8Tex; + +#define dgMsgKanji8CB9Tex "__OTR__textures/kanji/gMsgKanji8CB9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CB9Tex[] = dgMsgKanji8CB9Tex; + +#define dgMsgKanji8CBATex "__OTR__textures/kanji/gMsgKanji8CBATex" +static const ALIGN_ASSET(2) char gMsgKanji8CBATex[] = dgMsgKanji8CBATex; + +#define dgMsgKanji8CBBTex "__OTR__textures/kanji/gMsgKanji8CBBTex" +static const ALIGN_ASSET(2) char gMsgKanji8CBBTex[] = dgMsgKanji8CBBTex; + +#define dgMsgKanji8CBCTex "__OTR__textures/kanji/gMsgKanji8CBCTex" +static const ALIGN_ASSET(2) char gMsgKanji8CBCTex[] = dgMsgKanji8CBCTex; + +#define dgMsgKanji8CBDTex "__OTR__textures/kanji/gMsgKanji8CBDTex" +static const ALIGN_ASSET(2) char gMsgKanji8CBDTex[] = dgMsgKanji8CBDTex; + +#define dgMsgKanji8CBETex "__OTR__textures/kanji/gMsgKanji8CBETex" +static const ALIGN_ASSET(2) char gMsgKanji8CBETex[] = dgMsgKanji8CBETex; + +#define dgMsgKanji8CBFTex "__OTR__textures/kanji/gMsgKanji8CBFTex" +static const ALIGN_ASSET(2) char gMsgKanji8CBFTex[] = dgMsgKanji8CBFTex; + +#define dgMsgKanji8CC0Tex "__OTR__textures/kanji/gMsgKanji8CC0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC0Tex[] = dgMsgKanji8CC0Tex; + +#define dgMsgKanji8CC1Tex "__OTR__textures/kanji/gMsgKanji8CC1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC1Tex[] = dgMsgKanji8CC1Tex; + +#define dgMsgKanji8CC2Tex "__OTR__textures/kanji/gMsgKanji8CC2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC2Tex[] = dgMsgKanji8CC2Tex; + +#define dgMsgKanji8CC3Tex "__OTR__textures/kanji/gMsgKanji8CC3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC3Tex[] = dgMsgKanji8CC3Tex; + +#define dgMsgKanji8CC4Tex "__OTR__textures/kanji/gMsgKanji8CC4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC4Tex[] = dgMsgKanji8CC4Tex; + +#define dgMsgKanji8CC5Tex "__OTR__textures/kanji/gMsgKanji8CC5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC5Tex[] = dgMsgKanji8CC5Tex; + +#define dgMsgKanji8CC6Tex "__OTR__textures/kanji/gMsgKanji8CC6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC6Tex[] = dgMsgKanji8CC6Tex; + +#define dgMsgKanji8CC7Tex "__OTR__textures/kanji/gMsgKanji8CC7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC7Tex[] = dgMsgKanji8CC7Tex; + +#define dgMsgKanji8CC8Tex "__OTR__textures/kanji/gMsgKanji8CC8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC8Tex[] = dgMsgKanji8CC8Tex; + +#define dgMsgKanji8CC9Tex "__OTR__textures/kanji/gMsgKanji8CC9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CC9Tex[] = dgMsgKanji8CC9Tex; + +#define dgMsgKanji8CCATex "__OTR__textures/kanji/gMsgKanji8CCATex" +static const ALIGN_ASSET(2) char gMsgKanji8CCATex[] = dgMsgKanji8CCATex; + +#define dgMsgKanji8CCBTex "__OTR__textures/kanji/gMsgKanji8CCBTex" +static const ALIGN_ASSET(2) char gMsgKanji8CCBTex[] = dgMsgKanji8CCBTex; + +#define dgMsgKanji8CCCTex "__OTR__textures/kanji/gMsgKanji8CCCTex" +static const ALIGN_ASSET(2) char gMsgKanji8CCCTex[] = dgMsgKanji8CCCTex; + +#define dgMsgKanji8CCDTex "__OTR__textures/kanji/gMsgKanji8CCDTex" +static const ALIGN_ASSET(2) char gMsgKanji8CCDTex[] = dgMsgKanji8CCDTex; + +#define dgMsgKanji8CCETex "__OTR__textures/kanji/gMsgKanji8CCETex" +static const ALIGN_ASSET(2) char gMsgKanji8CCETex[] = dgMsgKanji8CCETex; + +#define dgMsgKanji8CCFTex "__OTR__textures/kanji/gMsgKanji8CCFTex" +static const ALIGN_ASSET(2) char gMsgKanji8CCFTex[] = dgMsgKanji8CCFTex; + +#define dgMsgKanji8CD0Tex "__OTR__textures/kanji/gMsgKanji8CD0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD0Tex[] = dgMsgKanji8CD0Tex; + +#define dgMsgKanji8CD1Tex "__OTR__textures/kanji/gMsgKanji8CD1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD1Tex[] = dgMsgKanji8CD1Tex; + +#define dgMsgKanji8CD2Tex "__OTR__textures/kanji/gMsgKanji8CD2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD2Tex[] = dgMsgKanji8CD2Tex; + +#define dgMsgKanji8CD3Tex "__OTR__textures/kanji/gMsgKanji8CD3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD3Tex[] = dgMsgKanji8CD3Tex; + +#define dgMsgKanji8CD4Tex "__OTR__textures/kanji/gMsgKanji8CD4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD4Tex[] = dgMsgKanji8CD4Tex; + +#define dgMsgKanji8CD5Tex "__OTR__textures/kanji/gMsgKanji8CD5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD5Tex[] = dgMsgKanji8CD5Tex; + +#define dgMsgKanji8CD6Tex "__OTR__textures/kanji/gMsgKanji8CD6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD6Tex[] = dgMsgKanji8CD6Tex; + +#define dgMsgKanji8CD7Tex "__OTR__textures/kanji/gMsgKanji8CD7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD7Tex[] = dgMsgKanji8CD7Tex; + +#define dgMsgKanji8CD8Tex "__OTR__textures/kanji/gMsgKanji8CD8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD8Tex[] = dgMsgKanji8CD8Tex; + +#define dgMsgKanji8CD9Tex "__OTR__textures/kanji/gMsgKanji8CD9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CD9Tex[] = dgMsgKanji8CD9Tex; + +#define dgMsgKanji8CDATex "__OTR__textures/kanji/gMsgKanji8CDATex" +static const ALIGN_ASSET(2) char gMsgKanji8CDATex[] = dgMsgKanji8CDATex; + +#define dgMsgKanji8CDBTex "__OTR__textures/kanji/gMsgKanji8CDBTex" +static const ALIGN_ASSET(2) char gMsgKanji8CDBTex[] = dgMsgKanji8CDBTex; + +#define dgMsgKanji8CDCTex "__OTR__textures/kanji/gMsgKanji8CDCTex" +static const ALIGN_ASSET(2) char gMsgKanji8CDCTex[] = dgMsgKanji8CDCTex; + +#define dgMsgKanji8CDDTex "__OTR__textures/kanji/gMsgKanji8CDDTex" +static const ALIGN_ASSET(2) char gMsgKanji8CDDTex[] = dgMsgKanji8CDDTex; + +#define dgMsgKanji8CDETex "__OTR__textures/kanji/gMsgKanji8CDETex" +static const ALIGN_ASSET(2) char gMsgKanji8CDETex[] = dgMsgKanji8CDETex; + +#define dgMsgKanji8CDFTex "__OTR__textures/kanji/gMsgKanji8CDFTex" +static const ALIGN_ASSET(2) char gMsgKanji8CDFTex[] = dgMsgKanji8CDFTex; + +#define dgMsgKanji8CE0Tex "__OTR__textures/kanji/gMsgKanji8CE0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE0Tex[] = dgMsgKanji8CE0Tex; + +#define dgMsgKanji8CE1Tex "__OTR__textures/kanji/gMsgKanji8CE1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE1Tex[] = dgMsgKanji8CE1Tex; + +#define dgMsgKanji8CE2Tex "__OTR__textures/kanji/gMsgKanji8CE2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE2Tex[] = dgMsgKanji8CE2Tex; + +#define dgMsgKanji8CE3Tex "__OTR__textures/kanji/gMsgKanji8CE3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE3Tex[] = dgMsgKanji8CE3Tex; + +#define dgMsgKanji8CE4Tex "__OTR__textures/kanji/gMsgKanji8CE4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE4Tex[] = dgMsgKanji8CE4Tex; + +#define dgMsgKanji8CE5Tex "__OTR__textures/kanji/gMsgKanji8CE5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE5Tex[] = dgMsgKanji8CE5Tex; + +#define dgMsgKanji8CE6Tex "__OTR__textures/kanji/gMsgKanji8CE6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE6Tex[] = dgMsgKanji8CE6Tex; + +#define dgMsgKanji8CE7Tex "__OTR__textures/kanji/gMsgKanji8CE7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE7Tex[] = dgMsgKanji8CE7Tex; + +#define dgMsgKanji8CE8Tex "__OTR__textures/kanji/gMsgKanji8CE8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE8Tex[] = dgMsgKanji8CE8Tex; + +#define dgMsgKanji8CE9Tex "__OTR__textures/kanji/gMsgKanji8CE9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CE9Tex[] = dgMsgKanji8CE9Tex; + +#define dgMsgKanji8CEATex "__OTR__textures/kanji/gMsgKanji8CEATex" +static const ALIGN_ASSET(2) char gMsgKanji8CEATex[] = dgMsgKanji8CEATex; + +#define dgMsgKanji8CEBTex "__OTR__textures/kanji/gMsgKanji8CEBTex" +static const ALIGN_ASSET(2) char gMsgKanji8CEBTex[] = dgMsgKanji8CEBTex; + +#define dgMsgKanji8CECTex "__OTR__textures/kanji/gMsgKanji8CECTex" +static const ALIGN_ASSET(2) char gMsgKanji8CECTex[] = dgMsgKanji8CECTex; + +#define dgMsgKanji8CEDTex "__OTR__textures/kanji/gMsgKanji8CEDTex" +static const ALIGN_ASSET(2) char gMsgKanji8CEDTex[] = dgMsgKanji8CEDTex; + +#define dgMsgKanji8CEETex "__OTR__textures/kanji/gMsgKanji8CEETex" +static const ALIGN_ASSET(2) char gMsgKanji8CEETex[] = dgMsgKanji8CEETex; + +#define dgMsgKanji8CEFTex "__OTR__textures/kanji/gMsgKanji8CEFTex" +static const ALIGN_ASSET(2) char gMsgKanji8CEFTex[] = dgMsgKanji8CEFTex; + +#define dgMsgKanji8CF0Tex "__OTR__textures/kanji/gMsgKanji8CF0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF0Tex[] = dgMsgKanji8CF0Tex; + +#define dgMsgKanji8CF1Tex "__OTR__textures/kanji/gMsgKanji8CF1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF1Tex[] = dgMsgKanji8CF1Tex; + +#define dgMsgKanji8CF2Tex "__OTR__textures/kanji/gMsgKanji8CF2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF2Tex[] = dgMsgKanji8CF2Tex; + +#define dgMsgKanji8CF3Tex "__OTR__textures/kanji/gMsgKanji8CF3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF3Tex[] = dgMsgKanji8CF3Tex; + +#define dgMsgKanji8CF4Tex "__OTR__textures/kanji/gMsgKanji8CF4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF4Tex[] = dgMsgKanji8CF4Tex; + +#define dgMsgKanji8CF5Tex "__OTR__textures/kanji/gMsgKanji8CF5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF5Tex[] = dgMsgKanji8CF5Tex; + +#define dgMsgKanji8CF6Tex "__OTR__textures/kanji/gMsgKanji8CF6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF6Tex[] = dgMsgKanji8CF6Tex; + +#define dgMsgKanji8CF7Tex "__OTR__textures/kanji/gMsgKanji8CF7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF7Tex[] = dgMsgKanji8CF7Tex; + +#define dgMsgKanji8CF8Tex "__OTR__textures/kanji/gMsgKanji8CF8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF8Tex[] = dgMsgKanji8CF8Tex; + +#define dgMsgKanji8CF9Tex "__OTR__textures/kanji/gMsgKanji8CF9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8CF9Tex[] = dgMsgKanji8CF9Tex; + +#define dgMsgKanji8CFATex "__OTR__textures/kanji/gMsgKanji8CFATex" +static const ALIGN_ASSET(2) char gMsgKanji8CFATex[] = dgMsgKanji8CFATex; + +#define dgMsgKanji8CFBTex "__OTR__textures/kanji/gMsgKanji8CFBTex" +static const ALIGN_ASSET(2) char gMsgKanji8CFBTex[] = dgMsgKanji8CFBTex; + +#define dgMsgKanji8CFCTex "__OTR__textures/kanji/gMsgKanji8CFCTex" +static const ALIGN_ASSET(2) char gMsgKanji8CFCTex[] = dgMsgKanji8CFCTex; + +#define dgMsgKanji8D40Tex "__OTR__textures/kanji/gMsgKanji8D40Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D40Tex[] = dgMsgKanji8D40Tex; + +#define dgMsgKanji8D41Tex "__OTR__textures/kanji/gMsgKanji8D41Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D41Tex[] = dgMsgKanji8D41Tex; + +#define dgMsgKanji8D42Tex "__OTR__textures/kanji/gMsgKanji8D42Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D42Tex[] = dgMsgKanji8D42Tex; + +#define dgMsgKanji8D43Tex "__OTR__textures/kanji/gMsgKanji8D43Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D43Tex[] = dgMsgKanji8D43Tex; + +#define dgMsgKanji8D44Tex "__OTR__textures/kanji/gMsgKanji8D44Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D44Tex[] = dgMsgKanji8D44Tex; + +#define dgMsgKanji8D45Tex "__OTR__textures/kanji/gMsgKanji8D45Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D45Tex[] = dgMsgKanji8D45Tex; + +#define dgMsgKanji8D46Tex "__OTR__textures/kanji/gMsgKanji8D46Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D46Tex[] = dgMsgKanji8D46Tex; + +#define dgMsgKanji8D47Tex "__OTR__textures/kanji/gMsgKanji8D47Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D47Tex[] = dgMsgKanji8D47Tex; + +#define dgMsgKanji8D48Tex "__OTR__textures/kanji/gMsgKanji8D48Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D48Tex[] = dgMsgKanji8D48Tex; + +#define dgMsgKanji8D49Tex "__OTR__textures/kanji/gMsgKanji8D49Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D49Tex[] = dgMsgKanji8D49Tex; + +#define dgMsgKanji8D4ATex "__OTR__textures/kanji/gMsgKanji8D4ATex" +static const ALIGN_ASSET(2) char gMsgKanji8D4ATex[] = dgMsgKanji8D4ATex; + +#define dgMsgKanji8D4BTex "__OTR__textures/kanji/gMsgKanji8D4BTex" +static const ALIGN_ASSET(2) char gMsgKanji8D4BTex[] = dgMsgKanji8D4BTex; + +#define dgMsgKanji8D4CTex "__OTR__textures/kanji/gMsgKanji8D4CTex" +static const ALIGN_ASSET(2) char gMsgKanji8D4CTex[] = dgMsgKanji8D4CTex; + +#define dgMsgKanji8D4DTex "__OTR__textures/kanji/gMsgKanji8D4DTex" +static const ALIGN_ASSET(2) char gMsgKanji8D4DTex[] = dgMsgKanji8D4DTex; + +#define dgMsgKanji8D4ETex "__OTR__textures/kanji/gMsgKanji8D4ETex" +static const ALIGN_ASSET(2) char gMsgKanji8D4ETex[] = dgMsgKanji8D4ETex; + +#define dgMsgKanji8D4FTex "__OTR__textures/kanji/gMsgKanji8D4FTex" +static const ALIGN_ASSET(2) char gMsgKanji8D4FTex[] = dgMsgKanji8D4FTex; + +#define dgMsgKanji8D50Tex "__OTR__textures/kanji/gMsgKanji8D50Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D50Tex[] = dgMsgKanji8D50Tex; + +#define dgMsgKanji8D51Tex "__OTR__textures/kanji/gMsgKanji8D51Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D51Tex[] = dgMsgKanji8D51Tex; + +#define dgMsgKanji8D52Tex "__OTR__textures/kanji/gMsgKanji8D52Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D52Tex[] = dgMsgKanji8D52Tex; + +#define dgMsgKanji8D53Tex "__OTR__textures/kanji/gMsgKanji8D53Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D53Tex[] = dgMsgKanji8D53Tex; + +#define dgMsgKanji8D54Tex "__OTR__textures/kanji/gMsgKanji8D54Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D54Tex[] = dgMsgKanji8D54Tex; + +#define dgMsgKanji8D55Tex "__OTR__textures/kanji/gMsgKanji8D55Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D55Tex[] = dgMsgKanji8D55Tex; + +#define dgMsgKanji8D56Tex "__OTR__textures/kanji/gMsgKanji8D56Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D56Tex[] = dgMsgKanji8D56Tex; + +#define dgMsgKanji8D57Tex "__OTR__textures/kanji/gMsgKanji8D57Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D57Tex[] = dgMsgKanji8D57Tex; + +#define dgMsgKanji8D58Tex "__OTR__textures/kanji/gMsgKanji8D58Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D58Tex[] = dgMsgKanji8D58Tex; + +#define dgMsgKanji8D59Tex "__OTR__textures/kanji/gMsgKanji8D59Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D59Tex[] = dgMsgKanji8D59Tex; + +#define dgMsgKanji8D5ATex "__OTR__textures/kanji/gMsgKanji8D5ATex" +static const ALIGN_ASSET(2) char gMsgKanji8D5ATex[] = dgMsgKanji8D5ATex; + +#define dgMsgKanji8D5BTex "__OTR__textures/kanji/gMsgKanji8D5BTex" +static const ALIGN_ASSET(2) char gMsgKanji8D5BTex[] = dgMsgKanji8D5BTex; + +#define dgMsgKanji8D5CTex "__OTR__textures/kanji/gMsgKanji8D5CTex" +static const ALIGN_ASSET(2) char gMsgKanji8D5CTex[] = dgMsgKanji8D5CTex; + +#define dgMsgKanji8D5DTex "__OTR__textures/kanji/gMsgKanji8D5DTex" +static const ALIGN_ASSET(2) char gMsgKanji8D5DTex[] = dgMsgKanji8D5DTex; + +#define dgMsgKanji8D5ETex "__OTR__textures/kanji/gMsgKanji8D5ETex" +static const ALIGN_ASSET(2) char gMsgKanji8D5ETex[] = dgMsgKanji8D5ETex; + +#define dgMsgKanji8D5FTex "__OTR__textures/kanji/gMsgKanji8D5FTex" +static const ALIGN_ASSET(2) char gMsgKanji8D5FTex[] = dgMsgKanji8D5FTex; + +#define dgMsgKanji8D60Tex "__OTR__textures/kanji/gMsgKanji8D60Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D60Tex[] = dgMsgKanji8D60Tex; + +#define dgMsgKanji8D61Tex "__OTR__textures/kanji/gMsgKanji8D61Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D61Tex[] = dgMsgKanji8D61Tex; + +#define dgMsgKanji8D62Tex "__OTR__textures/kanji/gMsgKanji8D62Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D62Tex[] = dgMsgKanji8D62Tex; + +#define dgMsgKanji8D63Tex "__OTR__textures/kanji/gMsgKanji8D63Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D63Tex[] = dgMsgKanji8D63Tex; + +#define dgMsgKanji8D64Tex "__OTR__textures/kanji/gMsgKanji8D64Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D64Tex[] = dgMsgKanji8D64Tex; + +#define dgMsgKanji8D65Tex "__OTR__textures/kanji/gMsgKanji8D65Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D65Tex[] = dgMsgKanji8D65Tex; + +#define dgMsgKanji8D66Tex "__OTR__textures/kanji/gMsgKanji8D66Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D66Tex[] = dgMsgKanji8D66Tex; + +#define dgMsgKanji8D67Tex "__OTR__textures/kanji/gMsgKanji8D67Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D67Tex[] = dgMsgKanji8D67Tex; + +#define dgMsgKanji8D68Tex "__OTR__textures/kanji/gMsgKanji8D68Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D68Tex[] = dgMsgKanji8D68Tex; + +#define dgMsgKanji8D69Tex "__OTR__textures/kanji/gMsgKanji8D69Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D69Tex[] = dgMsgKanji8D69Tex; + +#define dgMsgKanji8D6ATex "__OTR__textures/kanji/gMsgKanji8D6ATex" +static const ALIGN_ASSET(2) char gMsgKanji8D6ATex[] = dgMsgKanji8D6ATex; + +#define dgMsgKanji8D6BTex "__OTR__textures/kanji/gMsgKanji8D6BTex" +static const ALIGN_ASSET(2) char gMsgKanji8D6BTex[] = dgMsgKanji8D6BTex; + +#define dgMsgKanji8D6CTex "__OTR__textures/kanji/gMsgKanji8D6CTex" +static const ALIGN_ASSET(2) char gMsgKanji8D6CTex[] = dgMsgKanji8D6CTex; + +#define dgMsgKanji8D6DTex "__OTR__textures/kanji/gMsgKanji8D6DTex" +static const ALIGN_ASSET(2) char gMsgKanji8D6DTex[] = dgMsgKanji8D6DTex; + +#define dgMsgKanji8D6ETex "__OTR__textures/kanji/gMsgKanji8D6ETex" +static const ALIGN_ASSET(2) char gMsgKanji8D6ETex[] = dgMsgKanji8D6ETex; + +#define dgMsgKanji8D6FTex "__OTR__textures/kanji/gMsgKanji8D6FTex" +static const ALIGN_ASSET(2) char gMsgKanji8D6FTex[] = dgMsgKanji8D6FTex; + +#define dgMsgKanji8D70Tex "__OTR__textures/kanji/gMsgKanji8D70Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D70Tex[] = dgMsgKanji8D70Tex; + +#define dgMsgKanji8D71Tex "__OTR__textures/kanji/gMsgKanji8D71Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D71Tex[] = dgMsgKanji8D71Tex; + +#define dgMsgKanji8D72Tex "__OTR__textures/kanji/gMsgKanji8D72Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D72Tex[] = dgMsgKanji8D72Tex; + +#define dgMsgKanji8D73Tex "__OTR__textures/kanji/gMsgKanji8D73Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D73Tex[] = dgMsgKanji8D73Tex; + +#define dgMsgKanji8D74Tex "__OTR__textures/kanji/gMsgKanji8D74Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D74Tex[] = dgMsgKanji8D74Tex; + +#define dgMsgKanji8D75Tex "__OTR__textures/kanji/gMsgKanji8D75Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D75Tex[] = dgMsgKanji8D75Tex; + +#define dgMsgKanji8D76Tex "__OTR__textures/kanji/gMsgKanji8D76Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D76Tex[] = dgMsgKanji8D76Tex; + +#define dgMsgKanji8D77Tex "__OTR__textures/kanji/gMsgKanji8D77Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D77Tex[] = dgMsgKanji8D77Tex; + +#define dgMsgKanji8D78Tex "__OTR__textures/kanji/gMsgKanji8D78Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D78Tex[] = dgMsgKanji8D78Tex; + +#define dgMsgKanji8D79Tex "__OTR__textures/kanji/gMsgKanji8D79Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D79Tex[] = dgMsgKanji8D79Tex; + +#define dgMsgKanji8D7ATex "__OTR__textures/kanji/gMsgKanji8D7ATex" +static const ALIGN_ASSET(2) char gMsgKanji8D7ATex[] = dgMsgKanji8D7ATex; + +#define dgMsgKanji8D7BTex "__OTR__textures/kanji/gMsgKanji8D7BTex" +static const ALIGN_ASSET(2) char gMsgKanji8D7BTex[] = dgMsgKanji8D7BTex; + +#define dgMsgKanji8D7CTex "__OTR__textures/kanji/gMsgKanji8D7CTex" +static const ALIGN_ASSET(2) char gMsgKanji8D7CTex[] = dgMsgKanji8D7CTex; + +#define dgMsgKanji8D7DTex "__OTR__textures/kanji/gMsgKanji8D7DTex" +static const ALIGN_ASSET(2) char gMsgKanji8D7DTex[] = dgMsgKanji8D7DTex; + +#define dgMsgKanji8D7ETex "__OTR__textures/kanji/gMsgKanji8D7ETex" +static const ALIGN_ASSET(2) char gMsgKanji8D7ETex[] = dgMsgKanji8D7ETex; + +#define dgMsgKanji8D80Tex "__OTR__textures/kanji/gMsgKanji8D80Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D80Tex[] = dgMsgKanji8D80Tex; + +#define dgMsgKanji8D81Tex "__OTR__textures/kanji/gMsgKanji8D81Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D81Tex[] = dgMsgKanji8D81Tex; + +#define dgMsgKanji8D82Tex "__OTR__textures/kanji/gMsgKanji8D82Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D82Tex[] = dgMsgKanji8D82Tex; + +#define dgMsgKanji8D83Tex "__OTR__textures/kanji/gMsgKanji8D83Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D83Tex[] = dgMsgKanji8D83Tex; + +#define dgMsgKanji8D84Tex "__OTR__textures/kanji/gMsgKanji8D84Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D84Tex[] = dgMsgKanji8D84Tex; + +#define dgMsgKanji8D85Tex "__OTR__textures/kanji/gMsgKanji8D85Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D85Tex[] = dgMsgKanji8D85Tex; + +#define dgMsgKanji8D86Tex "__OTR__textures/kanji/gMsgKanji8D86Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D86Tex[] = dgMsgKanji8D86Tex; + +#define dgMsgKanji8D87Tex "__OTR__textures/kanji/gMsgKanji8D87Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D87Tex[] = dgMsgKanji8D87Tex; + +#define dgMsgKanji8D88Tex "__OTR__textures/kanji/gMsgKanji8D88Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D88Tex[] = dgMsgKanji8D88Tex; + +#define dgMsgKanji8D89Tex "__OTR__textures/kanji/gMsgKanji8D89Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D89Tex[] = dgMsgKanji8D89Tex; + +#define dgMsgKanji8D8ATex "__OTR__textures/kanji/gMsgKanji8D8ATex" +static const ALIGN_ASSET(2) char gMsgKanji8D8ATex[] = dgMsgKanji8D8ATex; + +#define dgMsgKanji8D8BTex "__OTR__textures/kanji/gMsgKanji8D8BTex" +static const ALIGN_ASSET(2) char gMsgKanji8D8BTex[] = dgMsgKanji8D8BTex; + +#define dgMsgKanji8D8CTex "__OTR__textures/kanji/gMsgKanji8D8CTex" +static const ALIGN_ASSET(2) char gMsgKanji8D8CTex[] = dgMsgKanji8D8CTex; + +#define dgMsgKanji8D8DTex "__OTR__textures/kanji/gMsgKanji8D8DTex" +static const ALIGN_ASSET(2) char gMsgKanji8D8DTex[] = dgMsgKanji8D8DTex; + +#define dgMsgKanji8D8ETex "__OTR__textures/kanji/gMsgKanji8D8ETex" +static const ALIGN_ASSET(2) char gMsgKanji8D8ETex[] = dgMsgKanji8D8ETex; + +#define dgMsgKanji8D8FTex "__OTR__textures/kanji/gMsgKanji8D8FTex" +static const ALIGN_ASSET(2) char gMsgKanji8D8FTex[] = dgMsgKanji8D8FTex; + +#define dgMsgKanji8D90Tex "__OTR__textures/kanji/gMsgKanji8D90Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D90Tex[] = dgMsgKanji8D90Tex; + +#define dgMsgKanji8D91Tex "__OTR__textures/kanji/gMsgKanji8D91Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D91Tex[] = dgMsgKanji8D91Tex; + +#define dgMsgKanji8D92Tex "__OTR__textures/kanji/gMsgKanji8D92Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D92Tex[] = dgMsgKanji8D92Tex; + +#define dgMsgKanji8D93Tex "__OTR__textures/kanji/gMsgKanji8D93Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D93Tex[] = dgMsgKanji8D93Tex; + +#define dgMsgKanji8D94Tex "__OTR__textures/kanji/gMsgKanji8D94Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D94Tex[] = dgMsgKanji8D94Tex; + +#define dgMsgKanji8D95Tex "__OTR__textures/kanji/gMsgKanji8D95Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D95Tex[] = dgMsgKanji8D95Tex; + +#define dgMsgKanji8D96Tex "__OTR__textures/kanji/gMsgKanji8D96Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D96Tex[] = dgMsgKanji8D96Tex; + +#define dgMsgKanji8D97Tex "__OTR__textures/kanji/gMsgKanji8D97Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D97Tex[] = dgMsgKanji8D97Tex; + +#define dgMsgKanji8D98Tex "__OTR__textures/kanji/gMsgKanji8D98Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D98Tex[] = dgMsgKanji8D98Tex; + +#define dgMsgKanji8D99Tex "__OTR__textures/kanji/gMsgKanji8D99Tex" +static const ALIGN_ASSET(2) char gMsgKanji8D99Tex[] = dgMsgKanji8D99Tex; + +#define dgMsgKanji8D9ATex "__OTR__textures/kanji/gMsgKanji8D9ATex" +static const ALIGN_ASSET(2) char gMsgKanji8D9ATex[] = dgMsgKanji8D9ATex; + +#define dgMsgKanji8D9BTex "__OTR__textures/kanji/gMsgKanji8D9BTex" +static const ALIGN_ASSET(2) char gMsgKanji8D9BTex[] = dgMsgKanji8D9BTex; + +#define dgMsgKanji8D9CTex "__OTR__textures/kanji/gMsgKanji8D9CTex" +static const ALIGN_ASSET(2) char gMsgKanji8D9CTex[] = dgMsgKanji8D9CTex; + +#define dgMsgKanji8D9DTex "__OTR__textures/kanji/gMsgKanji8D9DTex" +static const ALIGN_ASSET(2) char gMsgKanji8D9DTex[] = dgMsgKanji8D9DTex; + +#define dgMsgKanji8D9ETex "__OTR__textures/kanji/gMsgKanji8D9ETex" +static const ALIGN_ASSET(2) char gMsgKanji8D9ETex[] = dgMsgKanji8D9ETex; + +#define dgMsgKanji8D9FTex "__OTR__textures/kanji/gMsgKanji8D9FTex" +static const ALIGN_ASSET(2) char gMsgKanji8D9FTex[] = dgMsgKanji8D9FTex; + +#define dgMsgKanji8DA0Tex "__OTR__textures/kanji/gMsgKanji8DA0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA0Tex[] = dgMsgKanji8DA0Tex; + +#define dgMsgKanji8DA1Tex "__OTR__textures/kanji/gMsgKanji8DA1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA1Tex[] = dgMsgKanji8DA1Tex; + +#define dgMsgKanji8DA2Tex "__OTR__textures/kanji/gMsgKanji8DA2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA2Tex[] = dgMsgKanji8DA2Tex; + +#define dgMsgKanji8DA3Tex "__OTR__textures/kanji/gMsgKanji8DA3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA3Tex[] = dgMsgKanji8DA3Tex; + +#define dgMsgKanji8DA4Tex "__OTR__textures/kanji/gMsgKanji8DA4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA4Tex[] = dgMsgKanji8DA4Tex; + +#define dgMsgKanji8DA5Tex "__OTR__textures/kanji/gMsgKanji8DA5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA5Tex[] = dgMsgKanji8DA5Tex; + +#define dgMsgKanji8DA6Tex "__OTR__textures/kanji/gMsgKanji8DA6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA6Tex[] = dgMsgKanji8DA6Tex; + +#define dgMsgKanji8DA7Tex "__OTR__textures/kanji/gMsgKanji8DA7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA7Tex[] = dgMsgKanji8DA7Tex; + +#define dgMsgKanji8DA8Tex "__OTR__textures/kanji/gMsgKanji8DA8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA8Tex[] = dgMsgKanji8DA8Tex; + +#define dgMsgKanji8DA9Tex "__OTR__textures/kanji/gMsgKanji8DA9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DA9Tex[] = dgMsgKanji8DA9Tex; + +#define dgMsgKanji8DAATex "__OTR__textures/kanji/gMsgKanji8DAATex" +static const ALIGN_ASSET(2) char gMsgKanji8DAATex[] = dgMsgKanji8DAATex; + +#define dgMsgKanji8DABTex "__OTR__textures/kanji/gMsgKanji8DABTex" +static const ALIGN_ASSET(2) char gMsgKanji8DABTex[] = dgMsgKanji8DABTex; + +#define dgMsgKanji8DACTex "__OTR__textures/kanji/gMsgKanji8DACTex" +static const ALIGN_ASSET(2) char gMsgKanji8DACTex[] = dgMsgKanji8DACTex; + +#define dgMsgKanji8DADTex "__OTR__textures/kanji/gMsgKanji8DADTex" +static const ALIGN_ASSET(2) char gMsgKanji8DADTex[] = dgMsgKanji8DADTex; + +#define dgMsgKanji8DAETex "__OTR__textures/kanji/gMsgKanji8DAETex" +static const ALIGN_ASSET(2) char gMsgKanji8DAETex[] = dgMsgKanji8DAETex; + +#define dgMsgKanji8DAFTex "__OTR__textures/kanji/gMsgKanji8DAFTex" +static const ALIGN_ASSET(2) char gMsgKanji8DAFTex[] = dgMsgKanji8DAFTex; + +#define dgMsgKanji8DB0Tex "__OTR__textures/kanji/gMsgKanji8DB0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB0Tex[] = dgMsgKanji8DB0Tex; + +#define dgMsgKanji8DB1Tex "__OTR__textures/kanji/gMsgKanji8DB1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB1Tex[] = dgMsgKanji8DB1Tex; + +#define dgMsgKanji8DB2Tex "__OTR__textures/kanji/gMsgKanji8DB2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB2Tex[] = dgMsgKanji8DB2Tex; + +#define dgMsgKanji8DB3Tex "__OTR__textures/kanji/gMsgKanji8DB3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB3Tex[] = dgMsgKanji8DB3Tex; + +#define dgMsgKanji8DB4Tex "__OTR__textures/kanji/gMsgKanji8DB4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB4Tex[] = dgMsgKanji8DB4Tex; + +#define dgMsgKanji8DB5Tex "__OTR__textures/kanji/gMsgKanji8DB5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB5Tex[] = dgMsgKanji8DB5Tex; + +#define dgMsgKanji8DB6Tex "__OTR__textures/kanji/gMsgKanji8DB6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB6Tex[] = dgMsgKanji8DB6Tex; + +#define dgMsgKanji8DB7Tex "__OTR__textures/kanji/gMsgKanji8DB7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB7Tex[] = dgMsgKanji8DB7Tex; + +#define dgMsgKanji8DB8Tex "__OTR__textures/kanji/gMsgKanji8DB8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB8Tex[] = dgMsgKanji8DB8Tex; + +#define dgMsgKanji8DB9Tex "__OTR__textures/kanji/gMsgKanji8DB9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DB9Tex[] = dgMsgKanji8DB9Tex; + +#define dgMsgKanji8DBATex "__OTR__textures/kanji/gMsgKanji8DBATex" +static const ALIGN_ASSET(2) char gMsgKanji8DBATex[] = dgMsgKanji8DBATex; + +#define dgMsgKanji8DBBTex "__OTR__textures/kanji/gMsgKanji8DBBTex" +static const ALIGN_ASSET(2) char gMsgKanji8DBBTex[] = dgMsgKanji8DBBTex; + +#define dgMsgKanji8DBCTex "__OTR__textures/kanji/gMsgKanji8DBCTex" +static const ALIGN_ASSET(2) char gMsgKanji8DBCTex[] = dgMsgKanji8DBCTex; + +#define dgMsgKanji8DBDTex "__OTR__textures/kanji/gMsgKanji8DBDTex" +static const ALIGN_ASSET(2) char gMsgKanji8DBDTex[] = dgMsgKanji8DBDTex; + +#define dgMsgKanji8DBETex "__OTR__textures/kanji/gMsgKanji8DBETex" +static const ALIGN_ASSET(2) char gMsgKanji8DBETex[] = dgMsgKanji8DBETex; + +#define dgMsgKanji8DBFTex "__OTR__textures/kanji/gMsgKanji8DBFTex" +static const ALIGN_ASSET(2) char gMsgKanji8DBFTex[] = dgMsgKanji8DBFTex; + +#define dgMsgKanji8DC0Tex "__OTR__textures/kanji/gMsgKanji8DC0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC0Tex[] = dgMsgKanji8DC0Tex; + +#define dgMsgKanji8DC1Tex "__OTR__textures/kanji/gMsgKanji8DC1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC1Tex[] = dgMsgKanji8DC1Tex; + +#define dgMsgKanji8DC2Tex "__OTR__textures/kanji/gMsgKanji8DC2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC2Tex[] = dgMsgKanji8DC2Tex; + +#define dgMsgKanji8DC3Tex "__OTR__textures/kanji/gMsgKanji8DC3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC3Tex[] = dgMsgKanji8DC3Tex; + +#define dgMsgKanji8DC4Tex "__OTR__textures/kanji/gMsgKanji8DC4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC4Tex[] = dgMsgKanji8DC4Tex; + +#define dgMsgKanji8DC5Tex "__OTR__textures/kanji/gMsgKanji8DC5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC5Tex[] = dgMsgKanji8DC5Tex; + +#define dgMsgKanji8DC6Tex "__OTR__textures/kanji/gMsgKanji8DC6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC6Tex[] = dgMsgKanji8DC6Tex; + +#define dgMsgKanji8DC7Tex "__OTR__textures/kanji/gMsgKanji8DC7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC7Tex[] = dgMsgKanji8DC7Tex; + +#define dgMsgKanji8DC8Tex "__OTR__textures/kanji/gMsgKanji8DC8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC8Tex[] = dgMsgKanji8DC8Tex; + +#define dgMsgKanji8DC9Tex "__OTR__textures/kanji/gMsgKanji8DC9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DC9Tex[] = dgMsgKanji8DC9Tex; + +#define dgMsgKanji8DCATex "__OTR__textures/kanji/gMsgKanji8DCATex" +static const ALIGN_ASSET(2) char gMsgKanji8DCATex[] = dgMsgKanji8DCATex; + +#define dgMsgKanji8DCBTex "__OTR__textures/kanji/gMsgKanji8DCBTex" +static const ALIGN_ASSET(2) char gMsgKanji8DCBTex[] = dgMsgKanji8DCBTex; + +#define dgMsgKanji8DCCTex "__OTR__textures/kanji/gMsgKanji8DCCTex" +static const ALIGN_ASSET(2) char gMsgKanji8DCCTex[] = dgMsgKanji8DCCTex; + +#define dgMsgKanji8DCDTex "__OTR__textures/kanji/gMsgKanji8DCDTex" +static const ALIGN_ASSET(2) char gMsgKanji8DCDTex[] = dgMsgKanji8DCDTex; + +#define dgMsgKanji8DCETex "__OTR__textures/kanji/gMsgKanji8DCETex" +static const ALIGN_ASSET(2) char gMsgKanji8DCETex[] = dgMsgKanji8DCETex; + +#define dgMsgKanji8DCFTex "__OTR__textures/kanji/gMsgKanji8DCFTex" +static const ALIGN_ASSET(2) char gMsgKanji8DCFTex[] = dgMsgKanji8DCFTex; + +#define dgMsgKanji8DD0Tex "__OTR__textures/kanji/gMsgKanji8DD0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD0Tex[] = dgMsgKanji8DD0Tex; + +#define dgMsgKanji8DD1Tex "__OTR__textures/kanji/gMsgKanji8DD1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD1Tex[] = dgMsgKanji8DD1Tex; + +#define dgMsgKanji8DD2Tex "__OTR__textures/kanji/gMsgKanji8DD2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD2Tex[] = dgMsgKanji8DD2Tex; + +#define dgMsgKanji8DD3Tex "__OTR__textures/kanji/gMsgKanji8DD3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD3Tex[] = dgMsgKanji8DD3Tex; + +#define dgMsgKanji8DD4Tex "__OTR__textures/kanji/gMsgKanji8DD4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD4Tex[] = dgMsgKanji8DD4Tex; + +#define dgMsgKanji8DD5Tex "__OTR__textures/kanji/gMsgKanji8DD5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD5Tex[] = dgMsgKanji8DD5Tex; + +#define dgMsgKanji8DD6Tex "__OTR__textures/kanji/gMsgKanji8DD6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD6Tex[] = dgMsgKanji8DD6Tex; + +#define dgMsgKanji8DD7Tex "__OTR__textures/kanji/gMsgKanji8DD7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD7Tex[] = dgMsgKanji8DD7Tex; + +#define dgMsgKanji8DD8Tex "__OTR__textures/kanji/gMsgKanji8DD8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD8Tex[] = dgMsgKanji8DD8Tex; + +#define dgMsgKanji8DD9Tex "__OTR__textures/kanji/gMsgKanji8DD9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DD9Tex[] = dgMsgKanji8DD9Tex; + +#define dgMsgKanji8DDATex "__OTR__textures/kanji/gMsgKanji8DDATex" +static const ALIGN_ASSET(2) char gMsgKanji8DDATex[] = dgMsgKanji8DDATex; + +#define dgMsgKanji8DDBTex "__OTR__textures/kanji/gMsgKanji8DDBTex" +static const ALIGN_ASSET(2) char gMsgKanji8DDBTex[] = dgMsgKanji8DDBTex; + +#define dgMsgKanji8DDCTex "__OTR__textures/kanji/gMsgKanji8DDCTex" +static const ALIGN_ASSET(2) char gMsgKanji8DDCTex[] = dgMsgKanji8DDCTex; + +#define dgMsgKanji8DDDTex "__OTR__textures/kanji/gMsgKanji8DDDTex" +static const ALIGN_ASSET(2) char gMsgKanji8DDDTex[] = dgMsgKanji8DDDTex; + +#define dgMsgKanji8DDETex "__OTR__textures/kanji/gMsgKanji8DDETex" +static const ALIGN_ASSET(2) char gMsgKanji8DDETex[] = dgMsgKanji8DDETex; + +#define dgMsgKanji8DDFTex "__OTR__textures/kanji/gMsgKanji8DDFTex" +static const ALIGN_ASSET(2) char gMsgKanji8DDFTex[] = dgMsgKanji8DDFTex; + +#define dgMsgKanji8DE0Tex "__OTR__textures/kanji/gMsgKanji8DE0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE0Tex[] = dgMsgKanji8DE0Tex; + +#define dgMsgKanji8DE1Tex "__OTR__textures/kanji/gMsgKanji8DE1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE1Tex[] = dgMsgKanji8DE1Tex; + +#define dgMsgKanji8DE2Tex "__OTR__textures/kanji/gMsgKanji8DE2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE2Tex[] = dgMsgKanji8DE2Tex; + +#define dgMsgKanji8DE3Tex "__OTR__textures/kanji/gMsgKanji8DE3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE3Tex[] = dgMsgKanji8DE3Tex; + +#define dgMsgKanji8DE4Tex "__OTR__textures/kanji/gMsgKanji8DE4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE4Tex[] = dgMsgKanji8DE4Tex; + +#define dgMsgKanji8DE5Tex "__OTR__textures/kanji/gMsgKanji8DE5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE5Tex[] = dgMsgKanji8DE5Tex; + +#define dgMsgKanji8DE6Tex "__OTR__textures/kanji/gMsgKanji8DE6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE6Tex[] = dgMsgKanji8DE6Tex; + +#define dgMsgKanji8DE7Tex "__OTR__textures/kanji/gMsgKanji8DE7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE7Tex[] = dgMsgKanji8DE7Tex; + +#define dgMsgKanji8DE8Tex "__OTR__textures/kanji/gMsgKanji8DE8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE8Tex[] = dgMsgKanji8DE8Tex; + +#define dgMsgKanji8DE9Tex "__OTR__textures/kanji/gMsgKanji8DE9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DE9Tex[] = dgMsgKanji8DE9Tex; + +#define dgMsgKanji8DEATex "__OTR__textures/kanji/gMsgKanji8DEATex" +static const ALIGN_ASSET(2) char gMsgKanji8DEATex[] = dgMsgKanji8DEATex; + +#define dgMsgKanji8DEBTex "__OTR__textures/kanji/gMsgKanji8DEBTex" +static const ALIGN_ASSET(2) char gMsgKanji8DEBTex[] = dgMsgKanji8DEBTex; + +#define dgMsgKanji8DECTex "__OTR__textures/kanji/gMsgKanji8DECTex" +static const ALIGN_ASSET(2) char gMsgKanji8DECTex[] = dgMsgKanji8DECTex; + +#define dgMsgKanji8DEDTex "__OTR__textures/kanji/gMsgKanji8DEDTex" +static const ALIGN_ASSET(2) char gMsgKanji8DEDTex[] = dgMsgKanji8DEDTex; + +#define dgMsgKanji8DEETex "__OTR__textures/kanji/gMsgKanji8DEETex" +static const ALIGN_ASSET(2) char gMsgKanji8DEETex[] = dgMsgKanji8DEETex; + +#define dgMsgKanji8DEFTex "__OTR__textures/kanji/gMsgKanji8DEFTex" +static const ALIGN_ASSET(2) char gMsgKanji8DEFTex[] = dgMsgKanji8DEFTex; + +#define dgMsgKanji8DF0Tex "__OTR__textures/kanji/gMsgKanji8DF0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF0Tex[] = dgMsgKanji8DF0Tex; + +#define dgMsgKanji8DF1Tex "__OTR__textures/kanji/gMsgKanji8DF1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF1Tex[] = dgMsgKanji8DF1Tex; + +#define dgMsgKanji8DF2Tex "__OTR__textures/kanji/gMsgKanji8DF2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF2Tex[] = dgMsgKanji8DF2Tex; + +#define dgMsgKanji8DF3Tex "__OTR__textures/kanji/gMsgKanji8DF3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF3Tex[] = dgMsgKanji8DF3Tex; + +#define dgMsgKanji8DF4Tex "__OTR__textures/kanji/gMsgKanji8DF4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF4Tex[] = dgMsgKanji8DF4Tex; + +#define dgMsgKanji8DF5Tex "__OTR__textures/kanji/gMsgKanji8DF5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF5Tex[] = dgMsgKanji8DF5Tex; + +#define dgMsgKanji8DF6Tex "__OTR__textures/kanji/gMsgKanji8DF6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF6Tex[] = dgMsgKanji8DF6Tex; + +#define dgMsgKanji8DF7Tex "__OTR__textures/kanji/gMsgKanji8DF7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF7Tex[] = dgMsgKanji8DF7Tex; + +#define dgMsgKanji8DF8Tex "__OTR__textures/kanji/gMsgKanji8DF8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF8Tex[] = dgMsgKanji8DF8Tex; + +#define dgMsgKanji8DF9Tex "__OTR__textures/kanji/gMsgKanji8DF9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8DF9Tex[] = dgMsgKanji8DF9Tex; + +#define dgMsgKanji8DFATex "__OTR__textures/kanji/gMsgKanji8DFATex" +static const ALIGN_ASSET(2) char gMsgKanji8DFATex[] = dgMsgKanji8DFATex; + +#define dgMsgKanji8DFBTex "__OTR__textures/kanji/gMsgKanji8DFBTex" +static const ALIGN_ASSET(2) char gMsgKanji8DFBTex[] = dgMsgKanji8DFBTex; + +#define dgMsgKanji8DFCTex "__OTR__textures/kanji/gMsgKanji8DFCTex" +static const ALIGN_ASSET(2) char gMsgKanji8DFCTex[] = dgMsgKanji8DFCTex; + +#define dgMsgKanji8E40Tex "__OTR__textures/kanji/gMsgKanji8E40Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E40Tex[] = dgMsgKanji8E40Tex; + +#define dgMsgKanji8E41Tex "__OTR__textures/kanji/gMsgKanji8E41Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E41Tex[] = dgMsgKanji8E41Tex; + +#define dgMsgKanji8E42Tex "__OTR__textures/kanji/gMsgKanji8E42Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E42Tex[] = dgMsgKanji8E42Tex; + +#define dgMsgKanji8E43Tex "__OTR__textures/kanji/gMsgKanji8E43Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E43Tex[] = dgMsgKanji8E43Tex; + +#define dgMsgKanji8E44Tex "__OTR__textures/kanji/gMsgKanji8E44Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E44Tex[] = dgMsgKanji8E44Tex; + +#define dgMsgKanji8E45Tex "__OTR__textures/kanji/gMsgKanji8E45Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E45Tex[] = dgMsgKanji8E45Tex; + +#define dgMsgKanji8E46Tex "__OTR__textures/kanji/gMsgKanji8E46Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E46Tex[] = dgMsgKanji8E46Tex; + +#define dgMsgKanji8E47Tex "__OTR__textures/kanji/gMsgKanji8E47Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E47Tex[] = dgMsgKanji8E47Tex; + +#define dgMsgKanji8E48Tex "__OTR__textures/kanji/gMsgKanji8E48Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E48Tex[] = dgMsgKanji8E48Tex; + +#define dgMsgKanji8E49Tex "__OTR__textures/kanji/gMsgKanji8E49Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E49Tex[] = dgMsgKanji8E49Tex; + +#define dgMsgKanji8E4ATex "__OTR__textures/kanji/gMsgKanji8E4ATex" +static const ALIGN_ASSET(2) char gMsgKanji8E4ATex[] = dgMsgKanji8E4ATex; + +#define dgMsgKanji8E4BTex "__OTR__textures/kanji/gMsgKanji8E4BTex" +static const ALIGN_ASSET(2) char gMsgKanji8E4BTex[] = dgMsgKanji8E4BTex; + +#define dgMsgKanji8E4CTex "__OTR__textures/kanji/gMsgKanji8E4CTex" +static const ALIGN_ASSET(2) char gMsgKanji8E4CTex[] = dgMsgKanji8E4CTex; + +#define dgMsgKanji8E4DTex "__OTR__textures/kanji/gMsgKanji8E4DTex" +static const ALIGN_ASSET(2) char gMsgKanji8E4DTex[] = dgMsgKanji8E4DTex; + +#define dgMsgKanji8E4ETex "__OTR__textures/kanji/gMsgKanji8E4ETex" +static const ALIGN_ASSET(2) char gMsgKanji8E4ETex[] = dgMsgKanji8E4ETex; + +#define dgMsgKanji8E4FTex "__OTR__textures/kanji/gMsgKanji8E4FTex" +static const ALIGN_ASSET(2) char gMsgKanji8E4FTex[] = dgMsgKanji8E4FTex; + +#define dgMsgKanji8E50Tex "__OTR__textures/kanji/gMsgKanji8E50Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E50Tex[] = dgMsgKanji8E50Tex; + +#define dgMsgKanji8E51Tex "__OTR__textures/kanji/gMsgKanji8E51Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E51Tex[] = dgMsgKanji8E51Tex; + +#define dgMsgKanji8E52Tex "__OTR__textures/kanji/gMsgKanji8E52Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E52Tex[] = dgMsgKanji8E52Tex; + +#define dgMsgKanji8E53Tex "__OTR__textures/kanji/gMsgKanji8E53Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E53Tex[] = dgMsgKanji8E53Tex; + +#define dgMsgKanji8E54Tex "__OTR__textures/kanji/gMsgKanji8E54Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E54Tex[] = dgMsgKanji8E54Tex; + +#define dgMsgKanji8E55Tex "__OTR__textures/kanji/gMsgKanji8E55Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E55Tex[] = dgMsgKanji8E55Tex; + +#define dgMsgKanji8E56Tex "__OTR__textures/kanji/gMsgKanji8E56Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E56Tex[] = dgMsgKanji8E56Tex; + +#define dgMsgKanji8E57Tex "__OTR__textures/kanji/gMsgKanji8E57Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E57Tex[] = dgMsgKanji8E57Tex; + +#define dgMsgKanji8E58Tex "__OTR__textures/kanji/gMsgKanji8E58Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E58Tex[] = dgMsgKanji8E58Tex; + +#define dgMsgKanji8E59Tex "__OTR__textures/kanji/gMsgKanji8E59Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E59Tex[] = dgMsgKanji8E59Tex; + +#define dgMsgKanji8E5ATex "__OTR__textures/kanji/gMsgKanji8E5ATex" +static const ALIGN_ASSET(2) char gMsgKanji8E5ATex[] = dgMsgKanji8E5ATex; + +#define dgMsgKanji8E5BTex "__OTR__textures/kanji/gMsgKanji8E5BTex" +static const ALIGN_ASSET(2) char gMsgKanji8E5BTex[] = dgMsgKanji8E5BTex; + +#define dgMsgKanji8E5CTex "__OTR__textures/kanji/gMsgKanji8E5CTex" +static const ALIGN_ASSET(2) char gMsgKanji8E5CTex[] = dgMsgKanji8E5CTex; + +#define dgMsgKanji8E5DTex "__OTR__textures/kanji/gMsgKanji8E5DTex" +static const ALIGN_ASSET(2) char gMsgKanji8E5DTex[] = dgMsgKanji8E5DTex; + +#define dgMsgKanji8E5ETex "__OTR__textures/kanji/gMsgKanji8E5ETex" +static const ALIGN_ASSET(2) char gMsgKanji8E5ETex[] = dgMsgKanji8E5ETex; + +#define dgMsgKanji8E5FTex "__OTR__textures/kanji/gMsgKanji8E5FTex" +static const ALIGN_ASSET(2) char gMsgKanji8E5FTex[] = dgMsgKanji8E5FTex; + +#define dgMsgKanji8E60Tex "__OTR__textures/kanji/gMsgKanji8E60Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E60Tex[] = dgMsgKanji8E60Tex; + +#define dgMsgKanji8E61Tex "__OTR__textures/kanji/gMsgKanji8E61Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E61Tex[] = dgMsgKanji8E61Tex; + +#define dgMsgKanji8E62Tex "__OTR__textures/kanji/gMsgKanji8E62Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E62Tex[] = dgMsgKanji8E62Tex; + +#define dgMsgKanji8E63Tex "__OTR__textures/kanji/gMsgKanji8E63Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E63Tex[] = dgMsgKanji8E63Tex; + +#define dgMsgKanji8E64Tex "__OTR__textures/kanji/gMsgKanji8E64Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E64Tex[] = dgMsgKanji8E64Tex; + +#define dgMsgKanji8E65Tex "__OTR__textures/kanji/gMsgKanji8E65Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E65Tex[] = dgMsgKanji8E65Tex; + +#define dgMsgKanji8E66Tex "__OTR__textures/kanji/gMsgKanji8E66Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E66Tex[] = dgMsgKanji8E66Tex; + +#define dgMsgKanji8E67Tex "__OTR__textures/kanji/gMsgKanji8E67Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E67Tex[] = dgMsgKanji8E67Tex; + +#define dgMsgKanji8E68Tex "__OTR__textures/kanji/gMsgKanji8E68Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E68Tex[] = dgMsgKanji8E68Tex; + +#define dgMsgKanji8E69Tex "__OTR__textures/kanji/gMsgKanji8E69Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E69Tex[] = dgMsgKanji8E69Tex; + +#define dgMsgKanji8E6ATex "__OTR__textures/kanji/gMsgKanji8E6ATex" +static const ALIGN_ASSET(2) char gMsgKanji8E6ATex[] = dgMsgKanji8E6ATex; + +#define dgMsgKanji8E6BTex "__OTR__textures/kanji/gMsgKanji8E6BTex" +static const ALIGN_ASSET(2) char gMsgKanji8E6BTex[] = dgMsgKanji8E6BTex; + +#define dgMsgKanji8E6CTex "__OTR__textures/kanji/gMsgKanji8E6CTex" +static const ALIGN_ASSET(2) char gMsgKanji8E6CTex[] = dgMsgKanji8E6CTex; + +#define dgMsgKanji8E6DTex "__OTR__textures/kanji/gMsgKanji8E6DTex" +static const ALIGN_ASSET(2) char gMsgKanji8E6DTex[] = dgMsgKanji8E6DTex; + +#define dgMsgKanji8E6ETex "__OTR__textures/kanji/gMsgKanji8E6ETex" +static const ALIGN_ASSET(2) char gMsgKanji8E6ETex[] = dgMsgKanji8E6ETex; + +#define dgMsgKanji8E6FTex "__OTR__textures/kanji/gMsgKanji8E6FTex" +static const ALIGN_ASSET(2) char gMsgKanji8E6FTex[] = dgMsgKanji8E6FTex; + +#define dgMsgKanji8E70Tex "__OTR__textures/kanji/gMsgKanji8E70Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E70Tex[] = dgMsgKanji8E70Tex; + +#define dgMsgKanji8E71Tex "__OTR__textures/kanji/gMsgKanji8E71Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E71Tex[] = dgMsgKanji8E71Tex; + +#define dgMsgKanji8E72Tex "__OTR__textures/kanji/gMsgKanji8E72Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E72Tex[] = dgMsgKanji8E72Tex; + +#define dgMsgKanji8E73Tex "__OTR__textures/kanji/gMsgKanji8E73Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E73Tex[] = dgMsgKanji8E73Tex; + +#define dgMsgKanji8E74Tex "__OTR__textures/kanji/gMsgKanji8E74Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E74Tex[] = dgMsgKanji8E74Tex; + +#define dgMsgKanji8E75Tex "__OTR__textures/kanji/gMsgKanji8E75Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E75Tex[] = dgMsgKanji8E75Tex; + +#define dgMsgKanji8E76Tex "__OTR__textures/kanji/gMsgKanji8E76Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E76Tex[] = dgMsgKanji8E76Tex; + +#define dgMsgKanji8E77Tex "__OTR__textures/kanji/gMsgKanji8E77Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E77Tex[] = dgMsgKanji8E77Tex; + +#define dgMsgKanji8E78Tex "__OTR__textures/kanji/gMsgKanji8E78Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E78Tex[] = dgMsgKanji8E78Tex; + +#define dgMsgKanji8E79Tex "__OTR__textures/kanji/gMsgKanji8E79Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E79Tex[] = dgMsgKanji8E79Tex; + +#define dgMsgKanji8E7ATex "__OTR__textures/kanji/gMsgKanji8E7ATex" +static const ALIGN_ASSET(2) char gMsgKanji8E7ATex[] = dgMsgKanji8E7ATex; + +#define dgMsgKanji8E7BTex "__OTR__textures/kanji/gMsgKanji8E7BTex" +static const ALIGN_ASSET(2) char gMsgKanji8E7BTex[] = dgMsgKanji8E7BTex; + +#define dgMsgKanji8E7CTex "__OTR__textures/kanji/gMsgKanji8E7CTex" +static const ALIGN_ASSET(2) char gMsgKanji8E7CTex[] = dgMsgKanji8E7CTex; + +#define dgMsgKanji8E7DTex "__OTR__textures/kanji/gMsgKanji8E7DTex" +static const ALIGN_ASSET(2) char gMsgKanji8E7DTex[] = dgMsgKanji8E7DTex; + +#define dgMsgKanji8E7ETex "__OTR__textures/kanji/gMsgKanji8E7ETex" +static const ALIGN_ASSET(2) char gMsgKanji8E7ETex[] = dgMsgKanji8E7ETex; + +#define dgMsgKanji8E80Tex "__OTR__textures/kanji/gMsgKanji8E80Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E80Tex[] = dgMsgKanji8E80Tex; + +#define dgMsgKanji8E81Tex "__OTR__textures/kanji/gMsgKanji8E81Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E81Tex[] = dgMsgKanji8E81Tex; + +#define dgMsgKanji8E82Tex "__OTR__textures/kanji/gMsgKanji8E82Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E82Tex[] = dgMsgKanji8E82Tex; + +#define dgMsgKanji8E83Tex "__OTR__textures/kanji/gMsgKanji8E83Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E83Tex[] = dgMsgKanji8E83Tex; + +#define dgMsgKanji8E84Tex "__OTR__textures/kanji/gMsgKanji8E84Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E84Tex[] = dgMsgKanji8E84Tex; + +#define dgMsgKanji8E85Tex "__OTR__textures/kanji/gMsgKanji8E85Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E85Tex[] = dgMsgKanji8E85Tex; + +#define dgMsgKanji8E86Tex "__OTR__textures/kanji/gMsgKanji8E86Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E86Tex[] = dgMsgKanji8E86Tex; + +#define dgMsgKanji8E87Tex "__OTR__textures/kanji/gMsgKanji8E87Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E87Tex[] = dgMsgKanji8E87Tex; + +#define dgMsgKanji8E88Tex "__OTR__textures/kanji/gMsgKanji8E88Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E88Tex[] = dgMsgKanji8E88Tex; + +#define dgMsgKanji8E89Tex "__OTR__textures/kanji/gMsgKanji8E89Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E89Tex[] = dgMsgKanji8E89Tex; + +#define dgMsgKanji8E8ATex "__OTR__textures/kanji/gMsgKanji8E8ATex" +static const ALIGN_ASSET(2) char gMsgKanji8E8ATex[] = dgMsgKanji8E8ATex; + +#define dgMsgKanji8E8BTex "__OTR__textures/kanji/gMsgKanji8E8BTex" +static const ALIGN_ASSET(2) char gMsgKanji8E8BTex[] = dgMsgKanji8E8BTex; + +#define dgMsgKanji8E8CTex "__OTR__textures/kanji/gMsgKanji8E8CTex" +static const ALIGN_ASSET(2) char gMsgKanji8E8CTex[] = dgMsgKanji8E8CTex; + +#define dgMsgKanji8E8DTex "__OTR__textures/kanji/gMsgKanji8E8DTex" +static const ALIGN_ASSET(2) char gMsgKanji8E8DTex[] = dgMsgKanji8E8DTex; + +#define dgMsgKanji8E8ETex "__OTR__textures/kanji/gMsgKanji8E8ETex" +static const ALIGN_ASSET(2) char gMsgKanji8E8ETex[] = dgMsgKanji8E8ETex; + +#define dgMsgKanji8E8FTex "__OTR__textures/kanji/gMsgKanji8E8FTex" +static const ALIGN_ASSET(2) char gMsgKanji8E8FTex[] = dgMsgKanji8E8FTex; + +#define dgMsgKanji8E90Tex "__OTR__textures/kanji/gMsgKanji8E90Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E90Tex[] = dgMsgKanji8E90Tex; + +#define dgMsgKanji8E91Tex "__OTR__textures/kanji/gMsgKanji8E91Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E91Tex[] = dgMsgKanji8E91Tex; + +#define dgMsgKanji8E92Tex "__OTR__textures/kanji/gMsgKanji8E92Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E92Tex[] = dgMsgKanji8E92Tex; + +#define dgMsgKanji8E93Tex "__OTR__textures/kanji/gMsgKanji8E93Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E93Tex[] = dgMsgKanji8E93Tex; + +#define dgMsgKanji8E94Tex "__OTR__textures/kanji/gMsgKanji8E94Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E94Tex[] = dgMsgKanji8E94Tex; + +#define dgMsgKanji8E95Tex "__OTR__textures/kanji/gMsgKanji8E95Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E95Tex[] = dgMsgKanji8E95Tex; + +#define dgMsgKanji8E96Tex "__OTR__textures/kanji/gMsgKanji8E96Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E96Tex[] = dgMsgKanji8E96Tex; + +#define dgMsgKanji8E97Tex "__OTR__textures/kanji/gMsgKanji8E97Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E97Tex[] = dgMsgKanji8E97Tex; + +#define dgMsgKanji8E98Tex "__OTR__textures/kanji/gMsgKanji8E98Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E98Tex[] = dgMsgKanji8E98Tex; + +#define dgMsgKanji8E99Tex "__OTR__textures/kanji/gMsgKanji8E99Tex" +static const ALIGN_ASSET(2) char gMsgKanji8E99Tex[] = dgMsgKanji8E99Tex; + +#define dgMsgKanji8E9ATex "__OTR__textures/kanji/gMsgKanji8E9ATex" +static const ALIGN_ASSET(2) char gMsgKanji8E9ATex[] = dgMsgKanji8E9ATex; + +#define dgMsgKanji8E9BTex "__OTR__textures/kanji/gMsgKanji8E9BTex" +static const ALIGN_ASSET(2) char gMsgKanji8E9BTex[] = dgMsgKanji8E9BTex; + +#define dgMsgKanji8E9CTex "__OTR__textures/kanji/gMsgKanji8E9CTex" +static const ALIGN_ASSET(2) char gMsgKanji8E9CTex[] = dgMsgKanji8E9CTex; + +#define dgMsgKanji8E9DTex "__OTR__textures/kanji/gMsgKanji8E9DTex" +static const ALIGN_ASSET(2) char gMsgKanji8E9DTex[] = dgMsgKanji8E9DTex; + +#define dgMsgKanji8E9ETex "__OTR__textures/kanji/gMsgKanji8E9ETex" +static const ALIGN_ASSET(2) char gMsgKanji8E9ETex[] = dgMsgKanji8E9ETex; + +#define dgMsgKanji8E9FTex "__OTR__textures/kanji/gMsgKanji8E9FTex" +static const ALIGN_ASSET(2) char gMsgKanji8E9FTex[] = dgMsgKanji8E9FTex; + +#define dgMsgKanji8EA0Tex "__OTR__textures/kanji/gMsgKanji8EA0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA0Tex[] = dgMsgKanji8EA0Tex; + +#define dgMsgKanji8EA1Tex "__OTR__textures/kanji/gMsgKanji8EA1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA1Tex[] = dgMsgKanji8EA1Tex; + +#define dgMsgKanji8EA2Tex "__OTR__textures/kanji/gMsgKanji8EA2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA2Tex[] = dgMsgKanji8EA2Tex; + +#define dgMsgKanji8EA3Tex "__OTR__textures/kanji/gMsgKanji8EA3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA3Tex[] = dgMsgKanji8EA3Tex; + +#define dgMsgKanji8EA4Tex "__OTR__textures/kanji/gMsgKanji8EA4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA4Tex[] = dgMsgKanji8EA4Tex; + +#define dgMsgKanji8EA5Tex "__OTR__textures/kanji/gMsgKanji8EA5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA5Tex[] = dgMsgKanji8EA5Tex; + +#define dgMsgKanji8EA6Tex "__OTR__textures/kanji/gMsgKanji8EA6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA6Tex[] = dgMsgKanji8EA6Tex; + +#define dgMsgKanji8EA7Tex "__OTR__textures/kanji/gMsgKanji8EA7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA7Tex[] = dgMsgKanji8EA7Tex; + +#define dgMsgKanji8EA8Tex "__OTR__textures/kanji/gMsgKanji8EA8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA8Tex[] = dgMsgKanji8EA8Tex; + +#define dgMsgKanji8EA9Tex "__OTR__textures/kanji/gMsgKanji8EA9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EA9Tex[] = dgMsgKanji8EA9Tex; + +#define dgMsgKanji8EAATex "__OTR__textures/kanji/gMsgKanji8EAATex" +static const ALIGN_ASSET(2) char gMsgKanji8EAATex[] = dgMsgKanji8EAATex; + +#define dgMsgKanji8EABTex "__OTR__textures/kanji/gMsgKanji8EABTex" +static const ALIGN_ASSET(2) char gMsgKanji8EABTex[] = dgMsgKanji8EABTex; + +#define dgMsgKanji8EACTex "__OTR__textures/kanji/gMsgKanji8EACTex" +static const ALIGN_ASSET(2) char gMsgKanji8EACTex[] = dgMsgKanji8EACTex; + +#define dgMsgKanji8EADTex "__OTR__textures/kanji/gMsgKanji8EADTex" +static const ALIGN_ASSET(2) char gMsgKanji8EADTex[] = dgMsgKanji8EADTex; + +#define dgMsgKanji8EAETex "__OTR__textures/kanji/gMsgKanji8EAETex" +static const ALIGN_ASSET(2) char gMsgKanji8EAETex[] = dgMsgKanji8EAETex; + +#define dgMsgKanji8EAFTex "__OTR__textures/kanji/gMsgKanji8EAFTex" +static const ALIGN_ASSET(2) char gMsgKanji8EAFTex[] = dgMsgKanji8EAFTex; + +#define dgMsgKanji8EB0Tex "__OTR__textures/kanji/gMsgKanji8EB0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB0Tex[] = dgMsgKanji8EB0Tex; + +#define dgMsgKanji8EB1Tex "__OTR__textures/kanji/gMsgKanji8EB1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB1Tex[] = dgMsgKanji8EB1Tex; + +#define dgMsgKanji8EB2Tex "__OTR__textures/kanji/gMsgKanji8EB2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB2Tex[] = dgMsgKanji8EB2Tex; + +#define dgMsgKanji8EB3Tex "__OTR__textures/kanji/gMsgKanji8EB3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB3Tex[] = dgMsgKanji8EB3Tex; + +#define dgMsgKanji8EB4Tex "__OTR__textures/kanji/gMsgKanji8EB4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB4Tex[] = dgMsgKanji8EB4Tex; + +#define dgMsgKanji8EB5Tex "__OTR__textures/kanji/gMsgKanji8EB5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB5Tex[] = dgMsgKanji8EB5Tex; + +#define dgMsgKanji8EB6Tex "__OTR__textures/kanji/gMsgKanji8EB6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB6Tex[] = dgMsgKanji8EB6Tex; + +#define dgMsgKanji8EB7Tex "__OTR__textures/kanji/gMsgKanji8EB7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB7Tex[] = dgMsgKanji8EB7Tex; + +#define dgMsgKanji8EB8Tex "__OTR__textures/kanji/gMsgKanji8EB8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB8Tex[] = dgMsgKanji8EB8Tex; + +#define dgMsgKanji8EB9Tex "__OTR__textures/kanji/gMsgKanji8EB9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EB9Tex[] = dgMsgKanji8EB9Tex; + +#define dgMsgKanji8EBATex "__OTR__textures/kanji/gMsgKanji8EBATex" +static const ALIGN_ASSET(2) char gMsgKanji8EBATex[] = dgMsgKanji8EBATex; + +#define dgMsgKanji8EBBTex "__OTR__textures/kanji/gMsgKanji8EBBTex" +static const ALIGN_ASSET(2) char gMsgKanji8EBBTex[] = dgMsgKanji8EBBTex; + +#define dgMsgKanji8EBCTex "__OTR__textures/kanji/gMsgKanji8EBCTex" +static const ALIGN_ASSET(2) char gMsgKanji8EBCTex[] = dgMsgKanji8EBCTex; + +#define dgMsgKanji8EBDTex "__OTR__textures/kanji/gMsgKanji8EBDTex" +static const ALIGN_ASSET(2) char gMsgKanji8EBDTex[] = dgMsgKanji8EBDTex; + +#define dgMsgKanji8EBETex "__OTR__textures/kanji/gMsgKanji8EBETex" +static const ALIGN_ASSET(2) char gMsgKanji8EBETex[] = dgMsgKanji8EBETex; + +#define dgMsgKanji8EBFTex "__OTR__textures/kanji/gMsgKanji8EBFTex" +static const ALIGN_ASSET(2) char gMsgKanji8EBFTex[] = dgMsgKanji8EBFTex; + +#define dgMsgKanji8EC0Tex "__OTR__textures/kanji/gMsgKanji8EC0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC0Tex[] = dgMsgKanji8EC0Tex; + +#define dgMsgKanji8EC1Tex "__OTR__textures/kanji/gMsgKanji8EC1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC1Tex[] = dgMsgKanji8EC1Tex; + +#define dgMsgKanji8EC2Tex "__OTR__textures/kanji/gMsgKanji8EC2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC2Tex[] = dgMsgKanji8EC2Tex; + +#define dgMsgKanji8EC3Tex "__OTR__textures/kanji/gMsgKanji8EC3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC3Tex[] = dgMsgKanji8EC3Tex; + +#define dgMsgKanji8EC4Tex "__OTR__textures/kanji/gMsgKanji8EC4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC4Tex[] = dgMsgKanji8EC4Tex; + +#define dgMsgKanji8EC5Tex "__OTR__textures/kanji/gMsgKanji8EC5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC5Tex[] = dgMsgKanji8EC5Tex; + +#define dgMsgKanji8EC6Tex "__OTR__textures/kanji/gMsgKanji8EC6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC6Tex[] = dgMsgKanji8EC6Tex; + +#define dgMsgKanji8EC7Tex "__OTR__textures/kanji/gMsgKanji8EC7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC7Tex[] = dgMsgKanji8EC7Tex; + +#define dgMsgKanji8EC8Tex "__OTR__textures/kanji/gMsgKanji8EC8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC8Tex[] = dgMsgKanji8EC8Tex; + +#define dgMsgKanji8EC9Tex "__OTR__textures/kanji/gMsgKanji8EC9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EC9Tex[] = dgMsgKanji8EC9Tex; + +#define dgMsgKanji8ECATex "__OTR__textures/kanji/gMsgKanji8ECATex" +static const ALIGN_ASSET(2) char gMsgKanji8ECATex[] = dgMsgKanji8ECATex; + +#define dgMsgKanji8ECBTex "__OTR__textures/kanji/gMsgKanji8ECBTex" +static const ALIGN_ASSET(2) char gMsgKanji8ECBTex[] = dgMsgKanji8ECBTex; + +#define dgMsgKanji8ECCTex "__OTR__textures/kanji/gMsgKanji8ECCTex" +static const ALIGN_ASSET(2) char gMsgKanji8ECCTex[] = dgMsgKanji8ECCTex; + +#define dgMsgKanji8ECDTex "__OTR__textures/kanji/gMsgKanji8ECDTex" +static const ALIGN_ASSET(2) char gMsgKanji8ECDTex[] = dgMsgKanji8ECDTex; + +#define dgMsgKanji8ECETex "__OTR__textures/kanji/gMsgKanji8ECETex" +static const ALIGN_ASSET(2) char gMsgKanji8ECETex[] = dgMsgKanji8ECETex; + +#define dgMsgKanji8ECFTex "__OTR__textures/kanji/gMsgKanji8ECFTex" +static const ALIGN_ASSET(2) char gMsgKanji8ECFTex[] = dgMsgKanji8ECFTex; + +#define dgMsgKanji8ED0Tex "__OTR__textures/kanji/gMsgKanji8ED0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED0Tex[] = dgMsgKanji8ED0Tex; + +#define dgMsgKanji8ED1Tex "__OTR__textures/kanji/gMsgKanji8ED1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED1Tex[] = dgMsgKanji8ED1Tex; + +#define dgMsgKanji8ED2Tex "__OTR__textures/kanji/gMsgKanji8ED2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED2Tex[] = dgMsgKanji8ED2Tex; + +#define dgMsgKanji8ED3Tex "__OTR__textures/kanji/gMsgKanji8ED3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED3Tex[] = dgMsgKanji8ED3Tex; + +#define dgMsgKanji8ED4Tex "__OTR__textures/kanji/gMsgKanji8ED4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED4Tex[] = dgMsgKanji8ED4Tex; + +#define dgMsgKanji8ED5Tex "__OTR__textures/kanji/gMsgKanji8ED5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED5Tex[] = dgMsgKanji8ED5Tex; + +#define dgMsgKanji8ED6Tex "__OTR__textures/kanji/gMsgKanji8ED6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED6Tex[] = dgMsgKanji8ED6Tex; + +#define dgMsgKanji8ED7Tex "__OTR__textures/kanji/gMsgKanji8ED7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED7Tex[] = dgMsgKanji8ED7Tex; + +#define dgMsgKanji8ED8Tex "__OTR__textures/kanji/gMsgKanji8ED8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED8Tex[] = dgMsgKanji8ED8Tex; + +#define dgMsgKanji8ED9Tex "__OTR__textures/kanji/gMsgKanji8ED9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8ED9Tex[] = dgMsgKanji8ED9Tex; + +#define dgMsgKanji8EDATex "__OTR__textures/kanji/gMsgKanji8EDATex" +static const ALIGN_ASSET(2) char gMsgKanji8EDATex[] = dgMsgKanji8EDATex; + +#define dgMsgKanji8EDBTex "__OTR__textures/kanji/gMsgKanji8EDBTex" +static const ALIGN_ASSET(2) char gMsgKanji8EDBTex[] = dgMsgKanji8EDBTex; + +#define dgMsgKanji8EDCTex "__OTR__textures/kanji/gMsgKanji8EDCTex" +static const ALIGN_ASSET(2) char gMsgKanji8EDCTex[] = dgMsgKanji8EDCTex; + +#define dgMsgKanji8EDDTex "__OTR__textures/kanji/gMsgKanji8EDDTex" +static const ALIGN_ASSET(2) char gMsgKanji8EDDTex[] = dgMsgKanji8EDDTex; + +#define dgMsgKanji8EDETex "__OTR__textures/kanji/gMsgKanji8EDETex" +static const ALIGN_ASSET(2) char gMsgKanji8EDETex[] = dgMsgKanji8EDETex; + +#define dgMsgKanji8EDFTex "__OTR__textures/kanji/gMsgKanji8EDFTex" +static const ALIGN_ASSET(2) char gMsgKanji8EDFTex[] = dgMsgKanji8EDFTex; + +#define dgMsgKanji8EE0Tex "__OTR__textures/kanji/gMsgKanji8EE0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE0Tex[] = dgMsgKanji8EE0Tex; + +#define dgMsgKanji8EE1Tex "__OTR__textures/kanji/gMsgKanji8EE1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE1Tex[] = dgMsgKanji8EE1Tex; + +#define dgMsgKanji8EE2Tex "__OTR__textures/kanji/gMsgKanji8EE2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE2Tex[] = dgMsgKanji8EE2Tex; + +#define dgMsgKanji8EE3Tex "__OTR__textures/kanji/gMsgKanji8EE3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE3Tex[] = dgMsgKanji8EE3Tex; + +#define dgMsgKanji8EE4Tex "__OTR__textures/kanji/gMsgKanji8EE4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE4Tex[] = dgMsgKanji8EE4Tex; + +#define dgMsgKanji8EE5Tex "__OTR__textures/kanji/gMsgKanji8EE5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE5Tex[] = dgMsgKanji8EE5Tex; + +#define dgMsgKanji8EE6Tex "__OTR__textures/kanji/gMsgKanji8EE6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE6Tex[] = dgMsgKanji8EE6Tex; + +#define dgMsgKanji8EE7Tex "__OTR__textures/kanji/gMsgKanji8EE7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE7Tex[] = dgMsgKanji8EE7Tex; + +#define dgMsgKanji8EE8Tex "__OTR__textures/kanji/gMsgKanji8EE8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE8Tex[] = dgMsgKanji8EE8Tex; + +#define dgMsgKanji8EE9Tex "__OTR__textures/kanji/gMsgKanji8EE9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EE9Tex[] = dgMsgKanji8EE9Tex; + +#define dgMsgKanji8EEATex "__OTR__textures/kanji/gMsgKanji8EEATex" +static const ALIGN_ASSET(2) char gMsgKanji8EEATex[] = dgMsgKanji8EEATex; + +#define dgMsgKanji8EEBTex "__OTR__textures/kanji/gMsgKanji8EEBTex" +static const ALIGN_ASSET(2) char gMsgKanji8EEBTex[] = dgMsgKanji8EEBTex; + +#define dgMsgKanji8EECTex "__OTR__textures/kanji/gMsgKanji8EECTex" +static const ALIGN_ASSET(2) char gMsgKanji8EECTex[] = dgMsgKanji8EECTex; + +#define dgMsgKanji8EEDTex "__OTR__textures/kanji/gMsgKanji8EEDTex" +static const ALIGN_ASSET(2) char gMsgKanji8EEDTex[] = dgMsgKanji8EEDTex; + +#define dgMsgKanji8EEETex "__OTR__textures/kanji/gMsgKanji8EEETex" +static const ALIGN_ASSET(2) char gMsgKanji8EEETex[] = dgMsgKanji8EEETex; + +#define dgMsgKanji8EEFTex "__OTR__textures/kanji/gMsgKanji8EEFTex" +static const ALIGN_ASSET(2) char gMsgKanji8EEFTex[] = dgMsgKanji8EEFTex; + +#define dgMsgKanji8EF0Tex "__OTR__textures/kanji/gMsgKanji8EF0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF0Tex[] = dgMsgKanji8EF0Tex; + +#define dgMsgKanji8EF1Tex "__OTR__textures/kanji/gMsgKanji8EF1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF1Tex[] = dgMsgKanji8EF1Tex; + +#define dgMsgKanji8EF2Tex "__OTR__textures/kanji/gMsgKanji8EF2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF2Tex[] = dgMsgKanji8EF2Tex; + +#define dgMsgKanji8EF3Tex "__OTR__textures/kanji/gMsgKanji8EF3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF3Tex[] = dgMsgKanji8EF3Tex; + +#define dgMsgKanji8EF4Tex "__OTR__textures/kanji/gMsgKanji8EF4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF4Tex[] = dgMsgKanji8EF4Tex; + +#define dgMsgKanji8EF5Tex "__OTR__textures/kanji/gMsgKanji8EF5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF5Tex[] = dgMsgKanji8EF5Tex; + +#define dgMsgKanji8EF6Tex "__OTR__textures/kanji/gMsgKanji8EF6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF6Tex[] = dgMsgKanji8EF6Tex; + +#define dgMsgKanji8EF7Tex "__OTR__textures/kanji/gMsgKanji8EF7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF7Tex[] = dgMsgKanji8EF7Tex; + +#define dgMsgKanji8EF8Tex "__OTR__textures/kanji/gMsgKanji8EF8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF8Tex[] = dgMsgKanji8EF8Tex; + +#define dgMsgKanji8EF9Tex "__OTR__textures/kanji/gMsgKanji8EF9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8EF9Tex[] = dgMsgKanji8EF9Tex; + +#define dgMsgKanji8EFATex "__OTR__textures/kanji/gMsgKanji8EFATex" +static const ALIGN_ASSET(2) char gMsgKanji8EFATex[] = dgMsgKanji8EFATex; + +#define dgMsgKanji8EFBTex "__OTR__textures/kanji/gMsgKanji8EFBTex" +static const ALIGN_ASSET(2) char gMsgKanji8EFBTex[] = dgMsgKanji8EFBTex; + +#define dgMsgKanji8EFCTex "__OTR__textures/kanji/gMsgKanji8EFCTex" +static const ALIGN_ASSET(2) char gMsgKanji8EFCTex[] = dgMsgKanji8EFCTex; + +#define dgMsgKanji8F40Tex "__OTR__textures/kanji/gMsgKanji8F40Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F40Tex[] = dgMsgKanji8F40Tex; + +#define dgMsgKanji8F41Tex "__OTR__textures/kanji/gMsgKanji8F41Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F41Tex[] = dgMsgKanji8F41Tex; + +#define dgMsgKanji8F42Tex "__OTR__textures/kanji/gMsgKanji8F42Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F42Tex[] = dgMsgKanji8F42Tex; + +#define dgMsgKanji8F43Tex "__OTR__textures/kanji/gMsgKanji8F43Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F43Tex[] = dgMsgKanji8F43Tex; + +#define dgMsgKanji8F44Tex "__OTR__textures/kanji/gMsgKanji8F44Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F44Tex[] = dgMsgKanji8F44Tex; + +#define dgMsgKanji8F45Tex "__OTR__textures/kanji/gMsgKanji8F45Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F45Tex[] = dgMsgKanji8F45Tex; + +#define dgMsgKanji8F46Tex "__OTR__textures/kanji/gMsgKanji8F46Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F46Tex[] = dgMsgKanji8F46Tex; + +#define dgMsgKanji8F47Tex "__OTR__textures/kanji/gMsgKanji8F47Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F47Tex[] = dgMsgKanji8F47Tex; + +#define dgMsgKanji8F48Tex "__OTR__textures/kanji/gMsgKanji8F48Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F48Tex[] = dgMsgKanji8F48Tex; + +#define dgMsgKanji8F49Tex "__OTR__textures/kanji/gMsgKanji8F49Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F49Tex[] = dgMsgKanji8F49Tex; + +#define dgMsgKanji8F4ATex "__OTR__textures/kanji/gMsgKanji8F4ATex" +static const ALIGN_ASSET(2) char gMsgKanji8F4ATex[] = dgMsgKanji8F4ATex; + +#define dgMsgKanji8F4BTex "__OTR__textures/kanji/gMsgKanji8F4BTex" +static const ALIGN_ASSET(2) char gMsgKanji8F4BTex[] = dgMsgKanji8F4BTex; + +#define dgMsgKanji8F4CTex "__OTR__textures/kanji/gMsgKanji8F4CTex" +static const ALIGN_ASSET(2) char gMsgKanji8F4CTex[] = dgMsgKanji8F4CTex; + +#define dgMsgKanji8F4DTex "__OTR__textures/kanji/gMsgKanji8F4DTex" +static const ALIGN_ASSET(2) char gMsgKanji8F4DTex[] = dgMsgKanji8F4DTex; + +#define dgMsgKanji8F4ETex "__OTR__textures/kanji/gMsgKanji8F4ETex" +static const ALIGN_ASSET(2) char gMsgKanji8F4ETex[] = dgMsgKanji8F4ETex; + +#define dgMsgKanji8F4FTex "__OTR__textures/kanji/gMsgKanji8F4FTex" +static const ALIGN_ASSET(2) char gMsgKanji8F4FTex[] = dgMsgKanji8F4FTex; + +#define dgMsgKanji8F50Tex "__OTR__textures/kanji/gMsgKanji8F50Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F50Tex[] = dgMsgKanji8F50Tex; + +#define dgMsgKanji8F51Tex "__OTR__textures/kanji/gMsgKanji8F51Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F51Tex[] = dgMsgKanji8F51Tex; + +#define dgMsgKanji8F52Tex "__OTR__textures/kanji/gMsgKanji8F52Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F52Tex[] = dgMsgKanji8F52Tex; + +#define dgMsgKanji8F53Tex "__OTR__textures/kanji/gMsgKanji8F53Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F53Tex[] = dgMsgKanji8F53Tex; + +#define dgMsgKanji8F54Tex "__OTR__textures/kanji/gMsgKanji8F54Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F54Tex[] = dgMsgKanji8F54Tex; + +#define dgMsgKanji8F55Tex "__OTR__textures/kanji/gMsgKanji8F55Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F55Tex[] = dgMsgKanji8F55Tex; + +#define dgMsgKanji8F56Tex "__OTR__textures/kanji/gMsgKanji8F56Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F56Tex[] = dgMsgKanji8F56Tex; + +#define dgMsgKanji8F57Tex "__OTR__textures/kanji/gMsgKanji8F57Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F57Tex[] = dgMsgKanji8F57Tex; + +#define dgMsgKanji8F58Tex "__OTR__textures/kanji/gMsgKanji8F58Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F58Tex[] = dgMsgKanji8F58Tex; + +#define dgMsgKanji8F59Tex "__OTR__textures/kanji/gMsgKanji8F59Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F59Tex[] = dgMsgKanji8F59Tex; + +#define dgMsgKanji8F5ATex "__OTR__textures/kanji/gMsgKanji8F5ATex" +static const ALIGN_ASSET(2) char gMsgKanji8F5ATex[] = dgMsgKanji8F5ATex; + +#define dgMsgKanji8F5BTex "__OTR__textures/kanji/gMsgKanji8F5BTex" +static const ALIGN_ASSET(2) char gMsgKanji8F5BTex[] = dgMsgKanji8F5BTex; + +#define dgMsgKanji8F5CTex "__OTR__textures/kanji/gMsgKanji8F5CTex" +static const ALIGN_ASSET(2) char gMsgKanji8F5CTex[] = dgMsgKanji8F5CTex; + +#define dgMsgKanji8F5DTex "__OTR__textures/kanji/gMsgKanji8F5DTex" +static const ALIGN_ASSET(2) char gMsgKanji8F5DTex[] = dgMsgKanji8F5DTex; + +#define dgMsgKanji8F5ETex "__OTR__textures/kanji/gMsgKanji8F5ETex" +static const ALIGN_ASSET(2) char gMsgKanji8F5ETex[] = dgMsgKanji8F5ETex; + +#define dgMsgKanji8F5FTex "__OTR__textures/kanji/gMsgKanji8F5FTex" +static const ALIGN_ASSET(2) char gMsgKanji8F5FTex[] = dgMsgKanji8F5FTex; + +#define dgMsgKanji8F60Tex "__OTR__textures/kanji/gMsgKanji8F60Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F60Tex[] = dgMsgKanji8F60Tex; + +#define dgMsgKanji8F61Tex "__OTR__textures/kanji/gMsgKanji8F61Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F61Tex[] = dgMsgKanji8F61Tex; + +#define dgMsgKanji8F62Tex "__OTR__textures/kanji/gMsgKanji8F62Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F62Tex[] = dgMsgKanji8F62Tex; + +#define dgMsgKanji8F63Tex "__OTR__textures/kanji/gMsgKanji8F63Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F63Tex[] = dgMsgKanji8F63Tex; + +#define dgMsgKanji8F64Tex "__OTR__textures/kanji/gMsgKanji8F64Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F64Tex[] = dgMsgKanji8F64Tex; + +#define dgMsgKanji8F65Tex "__OTR__textures/kanji/gMsgKanji8F65Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F65Tex[] = dgMsgKanji8F65Tex; + +#define dgMsgKanji8F66Tex "__OTR__textures/kanji/gMsgKanji8F66Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F66Tex[] = dgMsgKanji8F66Tex; + +#define dgMsgKanji8F67Tex "__OTR__textures/kanji/gMsgKanji8F67Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F67Tex[] = dgMsgKanji8F67Tex; + +#define dgMsgKanji8F68Tex "__OTR__textures/kanji/gMsgKanji8F68Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F68Tex[] = dgMsgKanji8F68Tex; + +#define dgMsgKanji8F69Tex "__OTR__textures/kanji/gMsgKanji8F69Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F69Tex[] = dgMsgKanji8F69Tex; + +#define dgMsgKanji8F6ATex "__OTR__textures/kanji/gMsgKanji8F6ATex" +static const ALIGN_ASSET(2) char gMsgKanji8F6ATex[] = dgMsgKanji8F6ATex; + +#define dgMsgKanji8F6BTex "__OTR__textures/kanji/gMsgKanji8F6BTex" +static const ALIGN_ASSET(2) char gMsgKanji8F6BTex[] = dgMsgKanji8F6BTex; + +#define dgMsgKanji8F6CTex "__OTR__textures/kanji/gMsgKanji8F6CTex" +static const ALIGN_ASSET(2) char gMsgKanji8F6CTex[] = dgMsgKanji8F6CTex; + +#define dgMsgKanji8F6DTex "__OTR__textures/kanji/gMsgKanji8F6DTex" +static const ALIGN_ASSET(2) char gMsgKanji8F6DTex[] = dgMsgKanji8F6DTex; + +#define dgMsgKanji8F6ETex "__OTR__textures/kanji/gMsgKanji8F6ETex" +static const ALIGN_ASSET(2) char gMsgKanji8F6ETex[] = dgMsgKanji8F6ETex; + +#define dgMsgKanji8F6FTex "__OTR__textures/kanji/gMsgKanji8F6FTex" +static const ALIGN_ASSET(2) char gMsgKanji8F6FTex[] = dgMsgKanji8F6FTex; + +#define dgMsgKanji8F70Tex "__OTR__textures/kanji/gMsgKanji8F70Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F70Tex[] = dgMsgKanji8F70Tex; + +#define dgMsgKanji8F71Tex "__OTR__textures/kanji/gMsgKanji8F71Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F71Tex[] = dgMsgKanji8F71Tex; + +#define dgMsgKanji8F72Tex "__OTR__textures/kanji/gMsgKanji8F72Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F72Tex[] = dgMsgKanji8F72Tex; + +#define dgMsgKanji8F73Tex "__OTR__textures/kanji/gMsgKanji8F73Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F73Tex[] = dgMsgKanji8F73Tex; + +#define dgMsgKanji8F74Tex "__OTR__textures/kanji/gMsgKanji8F74Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F74Tex[] = dgMsgKanji8F74Tex; + +#define dgMsgKanji8F75Tex "__OTR__textures/kanji/gMsgKanji8F75Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F75Tex[] = dgMsgKanji8F75Tex; + +#define dgMsgKanji8F76Tex "__OTR__textures/kanji/gMsgKanji8F76Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F76Tex[] = dgMsgKanji8F76Tex; + +#define dgMsgKanji8F77Tex "__OTR__textures/kanji/gMsgKanji8F77Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F77Tex[] = dgMsgKanji8F77Tex; + +#define dgMsgKanji8F78Tex "__OTR__textures/kanji/gMsgKanji8F78Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F78Tex[] = dgMsgKanji8F78Tex; + +#define dgMsgKanji8F79Tex "__OTR__textures/kanji/gMsgKanji8F79Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F79Tex[] = dgMsgKanji8F79Tex; + +#define dgMsgKanji8F7ATex "__OTR__textures/kanji/gMsgKanji8F7ATex" +static const ALIGN_ASSET(2) char gMsgKanji8F7ATex[] = dgMsgKanji8F7ATex; + +#define dgMsgKanji8F7BTex "__OTR__textures/kanji/gMsgKanji8F7BTex" +static const ALIGN_ASSET(2) char gMsgKanji8F7BTex[] = dgMsgKanji8F7BTex; + +#define dgMsgKanji8F7CTex "__OTR__textures/kanji/gMsgKanji8F7CTex" +static const ALIGN_ASSET(2) char gMsgKanji8F7CTex[] = dgMsgKanji8F7CTex; + +#define dgMsgKanji8F7DTex "__OTR__textures/kanji/gMsgKanji8F7DTex" +static const ALIGN_ASSET(2) char gMsgKanji8F7DTex[] = dgMsgKanji8F7DTex; + +#define dgMsgKanji8F7ETex "__OTR__textures/kanji/gMsgKanji8F7ETex" +static const ALIGN_ASSET(2) char gMsgKanji8F7ETex[] = dgMsgKanji8F7ETex; + +#define dgMsgKanji8F80Tex "__OTR__textures/kanji/gMsgKanji8F80Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F80Tex[] = dgMsgKanji8F80Tex; + +#define dgMsgKanji8F81Tex "__OTR__textures/kanji/gMsgKanji8F81Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F81Tex[] = dgMsgKanji8F81Tex; + +#define dgMsgKanji8F82Tex "__OTR__textures/kanji/gMsgKanji8F82Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F82Tex[] = dgMsgKanji8F82Tex; + +#define dgMsgKanji8F83Tex "__OTR__textures/kanji/gMsgKanji8F83Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F83Tex[] = dgMsgKanji8F83Tex; + +#define dgMsgKanji8F84Tex "__OTR__textures/kanji/gMsgKanji8F84Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F84Tex[] = dgMsgKanji8F84Tex; + +#define dgMsgKanji8F85Tex "__OTR__textures/kanji/gMsgKanji8F85Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F85Tex[] = dgMsgKanji8F85Tex; + +#define dgMsgKanji8F86Tex "__OTR__textures/kanji/gMsgKanji8F86Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F86Tex[] = dgMsgKanji8F86Tex; + +#define dgMsgKanji8F87Tex "__OTR__textures/kanji/gMsgKanji8F87Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F87Tex[] = dgMsgKanji8F87Tex; + +#define dgMsgKanji8F88Tex "__OTR__textures/kanji/gMsgKanji8F88Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F88Tex[] = dgMsgKanji8F88Tex; + +#define dgMsgKanji8F89Tex "__OTR__textures/kanji/gMsgKanji8F89Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F89Tex[] = dgMsgKanji8F89Tex; + +#define dgMsgKanji8F8ATex "__OTR__textures/kanji/gMsgKanji8F8ATex" +static const ALIGN_ASSET(2) char gMsgKanji8F8ATex[] = dgMsgKanji8F8ATex; + +#define dgMsgKanji8F8BTex "__OTR__textures/kanji/gMsgKanji8F8BTex" +static const ALIGN_ASSET(2) char gMsgKanji8F8BTex[] = dgMsgKanji8F8BTex; + +#define dgMsgKanji8F8CTex "__OTR__textures/kanji/gMsgKanji8F8CTex" +static const ALIGN_ASSET(2) char gMsgKanji8F8CTex[] = dgMsgKanji8F8CTex; + +#define dgMsgKanji8F8DTex "__OTR__textures/kanji/gMsgKanji8F8DTex" +static const ALIGN_ASSET(2) char gMsgKanji8F8DTex[] = dgMsgKanji8F8DTex; + +#define dgMsgKanji8F8ETex "__OTR__textures/kanji/gMsgKanji8F8ETex" +static const ALIGN_ASSET(2) char gMsgKanji8F8ETex[] = dgMsgKanji8F8ETex; + +#define dgMsgKanji8F8FTex "__OTR__textures/kanji/gMsgKanji8F8FTex" +static const ALIGN_ASSET(2) char gMsgKanji8F8FTex[] = dgMsgKanji8F8FTex; + +#define dgMsgKanji8F90Tex "__OTR__textures/kanji/gMsgKanji8F90Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F90Tex[] = dgMsgKanji8F90Tex; + +#define dgMsgKanji8F91Tex "__OTR__textures/kanji/gMsgKanji8F91Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F91Tex[] = dgMsgKanji8F91Tex; + +#define dgMsgKanji8F92Tex "__OTR__textures/kanji/gMsgKanji8F92Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F92Tex[] = dgMsgKanji8F92Tex; + +#define dgMsgKanji8F93Tex "__OTR__textures/kanji/gMsgKanji8F93Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F93Tex[] = dgMsgKanji8F93Tex; + +#define dgMsgKanji8F94Tex "__OTR__textures/kanji/gMsgKanji8F94Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F94Tex[] = dgMsgKanji8F94Tex; + +#define dgMsgKanji8F95Tex "__OTR__textures/kanji/gMsgKanji8F95Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F95Tex[] = dgMsgKanji8F95Tex; + +#define dgMsgKanji8F96Tex "__OTR__textures/kanji/gMsgKanji8F96Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F96Tex[] = dgMsgKanji8F96Tex; + +#define dgMsgKanji8F97Tex "__OTR__textures/kanji/gMsgKanji8F97Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F97Tex[] = dgMsgKanji8F97Tex; + +#define dgMsgKanji8F98Tex "__OTR__textures/kanji/gMsgKanji8F98Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F98Tex[] = dgMsgKanji8F98Tex; + +#define dgMsgKanji8F99Tex "__OTR__textures/kanji/gMsgKanji8F99Tex" +static const ALIGN_ASSET(2) char gMsgKanji8F99Tex[] = dgMsgKanji8F99Tex; + +#define dgMsgKanji8F9ATex "__OTR__textures/kanji/gMsgKanji8F9ATex" +static const ALIGN_ASSET(2) char gMsgKanji8F9ATex[] = dgMsgKanji8F9ATex; + +#define dgMsgKanji8F9BTex "__OTR__textures/kanji/gMsgKanji8F9BTex" +static const ALIGN_ASSET(2) char gMsgKanji8F9BTex[] = dgMsgKanji8F9BTex; + +#define dgMsgKanji8F9CTex "__OTR__textures/kanji/gMsgKanji8F9CTex" +static const ALIGN_ASSET(2) char gMsgKanji8F9CTex[] = dgMsgKanji8F9CTex; + +#define dgMsgKanji8F9DTex "__OTR__textures/kanji/gMsgKanji8F9DTex" +static const ALIGN_ASSET(2) char gMsgKanji8F9DTex[] = dgMsgKanji8F9DTex; + +#define dgMsgKanji8F9ETex "__OTR__textures/kanji/gMsgKanji8F9ETex" +static const ALIGN_ASSET(2) char gMsgKanji8F9ETex[] = dgMsgKanji8F9ETex; + +#define dgMsgKanji8F9FTex "__OTR__textures/kanji/gMsgKanji8F9FTex" +static const ALIGN_ASSET(2) char gMsgKanji8F9FTex[] = dgMsgKanji8F9FTex; + +#define dgMsgKanji8FA0Tex "__OTR__textures/kanji/gMsgKanji8FA0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA0Tex[] = dgMsgKanji8FA0Tex; + +#define dgMsgKanji8FA1Tex "__OTR__textures/kanji/gMsgKanji8FA1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA1Tex[] = dgMsgKanji8FA1Tex; + +#define dgMsgKanji8FA2Tex "__OTR__textures/kanji/gMsgKanji8FA2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA2Tex[] = dgMsgKanji8FA2Tex; + +#define dgMsgKanji8FA3Tex "__OTR__textures/kanji/gMsgKanji8FA3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA3Tex[] = dgMsgKanji8FA3Tex; + +#define dgMsgKanji8FA4Tex "__OTR__textures/kanji/gMsgKanji8FA4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA4Tex[] = dgMsgKanji8FA4Tex; + +#define dgMsgKanji8FA5Tex "__OTR__textures/kanji/gMsgKanji8FA5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA5Tex[] = dgMsgKanji8FA5Tex; + +#define dgMsgKanji8FA6Tex "__OTR__textures/kanji/gMsgKanji8FA6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA6Tex[] = dgMsgKanji8FA6Tex; + +#define dgMsgKanji8FA7Tex "__OTR__textures/kanji/gMsgKanji8FA7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA7Tex[] = dgMsgKanji8FA7Tex; + +#define dgMsgKanji8FA8Tex "__OTR__textures/kanji/gMsgKanji8FA8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA8Tex[] = dgMsgKanji8FA8Tex; + +#define dgMsgKanji8FA9Tex "__OTR__textures/kanji/gMsgKanji8FA9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FA9Tex[] = dgMsgKanji8FA9Tex; + +#define dgMsgKanji8FAATex "__OTR__textures/kanji/gMsgKanji8FAATex" +static const ALIGN_ASSET(2) char gMsgKanji8FAATex[] = dgMsgKanji8FAATex; + +#define dgMsgKanji8FABTex "__OTR__textures/kanji/gMsgKanji8FABTex" +static const ALIGN_ASSET(2) char gMsgKanji8FABTex[] = dgMsgKanji8FABTex; + +#define dgMsgKanji8FACTex "__OTR__textures/kanji/gMsgKanji8FACTex" +static const ALIGN_ASSET(2) char gMsgKanji8FACTex[] = dgMsgKanji8FACTex; + +#define dgMsgKanji8FADTex "__OTR__textures/kanji/gMsgKanji8FADTex" +static const ALIGN_ASSET(2) char gMsgKanji8FADTex[] = dgMsgKanji8FADTex; + +#define dgMsgKanji8FAETex "__OTR__textures/kanji/gMsgKanji8FAETex" +static const ALIGN_ASSET(2) char gMsgKanji8FAETex[] = dgMsgKanji8FAETex; + +#define dgMsgKanji8FAFTex "__OTR__textures/kanji/gMsgKanji8FAFTex" +static const ALIGN_ASSET(2) char gMsgKanji8FAFTex[] = dgMsgKanji8FAFTex; + +#define dgMsgKanji8FB0Tex "__OTR__textures/kanji/gMsgKanji8FB0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB0Tex[] = dgMsgKanji8FB0Tex; + +#define dgMsgKanji8FB1Tex "__OTR__textures/kanji/gMsgKanji8FB1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB1Tex[] = dgMsgKanji8FB1Tex; + +#define dgMsgKanji8FB2Tex "__OTR__textures/kanji/gMsgKanji8FB2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB2Tex[] = dgMsgKanji8FB2Tex; + +#define dgMsgKanji8FB3Tex "__OTR__textures/kanji/gMsgKanji8FB3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB3Tex[] = dgMsgKanji8FB3Tex; + +#define dgMsgKanji8FB4Tex "__OTR__textures/kanji/gMsgKanji8FB4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB4Tex[] = dgMsgKanji8FB4Tex; + +#define dgMsgKanji8FB5Tex "__OTR__textures/kanji/gMsgKanji8FB5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB5Tex[] = dgMsgKanji8FB5Tex; + +#define dgMsgKanji8FB6Tex "__OTR__textures/kanji/gMsgKanji8FB6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB6Tex[] = dgMsgKanji8FB6Tex; + +#define dgMsgKanji8FB7Tex "__OTR__textures/kanji/gMsgKanji8FB7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB7Tex[] = dgMsgKanji8FB7Tex; + +#define dgMsgKanji8FB8Tex "__OTR__textures/kanji/gMsgKanji8FB8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB8Tex[] = dgMsgKanji8FB8Tex; + +#define dgMsgKanji8FB9Tex "__OTR__textures/kanji/gMsgKanji8FB9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FB9Tex[] = dgMsgKanji8FB9Tex; + +#define dgMsgKanji8FBATex "__OTR__textures/kanji/gMsgKanji8FBATex" +static const ALIGN_ASSET(2) char gMsgKanji8FBATex[] = dgMsgKanji8FBATex; + +#define dgMsgKanji8FBBTex "__OTR__textures/kanji/gMsgKanji8FBBTex" +static const ALIGN_ASSET(2) char gMsgKanji8FBBTex[] = dgMsgKanji8FBBTex; + +#define dgMsgKanji8FBCTex "__OTR__textures/kanji/gMsgKanji8FBCTex" +static const ALIGN_ASSET(2) char gMsgKanji8FBCTex[] = dgMsgKanji8FBCTex; + +#define dgMsgKanji8FBDTex "__OTR__textures/kanji/gMsgKanji8FBDTex" +static const ALIGN_ASSET(2) char gMsgKanji8FBDTex[] = dgMsgKanji8FBDTex; + +#define dgMsgKanji8FBETex "__OTR__textures/kanji/gMsgKanji8FBETex" +static const ALIGN_ASSET(2) char gMsgKanji8FBETex[] = dgMsgKanji8FBETex; + +#define dgMsgKanji8FBFTex "__OTR__textures/kanji/gMsgKanji8FBFTex" +static const ALIGN_ASSET(2) char gMsgKanji8FBFTex[] = dgMsgKanji8FBFTex; + +#define dgMsgKanji8FC0Tex "__OTR__textures/kanji/gMsgKanji8FC0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC0Tex[] = dgMsgKanji8FC0Tex; + +#define dgMsgKanji8FC1Tex "__OTR__textures/kanji/gMsgKanji8FC1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC1Tex[] = dgMsgKanji8FC1Tex; + +#define dgMsgKanji8FC2Tex "__OTR__textures/kanji/gMsgKanji8FC2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC2Tex[] = dgMsgKanji8FC2Tex; + +#define dgMsgKanji8FC3Tex "__OTR__textures/kanji/gMsgKanji8FC3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC3Tex[] = dgMsgKanji8FC3Tex; + +#define dgMsgKanji8FC4Tex "__OTR__textures/kanji/gMsgKanji8FC4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC4Tex[] = dgMsgKanji8FC4Tex; + +#define dgMsgKanji8FC5Tex "__OTR__textures/kanji/gMsgKanji8FC5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC5Tex[] = dgMsgKanji8FC5Tex; + +#define dgMsgKanji8FC6Tex "__OTR__textures/kanji/gMsgKanji8FC6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC6Tex[] = dgMsgKanji8FC6Tex; + +#define dgMsgKanji8FC7Tex "__OTR__textures/kanji/gMsgKanji8FC7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC7Tex[] = dgMsgKanji8FC7Tex; + +#define dgMsgKanji8FC8Tex "__OTR__textures/kanji/gMsgKanji8FC8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC8Tex[] = dgMsgKanji8FC8Tex; + +#define dgMsgKanji8FC9Tex "__OTR__textures/kanji/gMsgKanji8FC9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FC9Tex[] = dgMsgKanji8FC9Tex; + +#define dgMsgKanji8FCATex "__OTR__textures/kanji/gMsgKanji8FCATex" +static const ALIGN_ASSET(2) char gMsgKanji8FCATex[] = dgMsgKanji8FCATex; + +#define dgMsgKanji8FCBTex "__OTR__textures/kanji/gMsgKanji8FCBTex" +static const ALIGN_ASSET(2) char gMsgKanji8FCBTex[] = dgMsgKanji8FCBTex; + +#define dgMsgKanji8FCCTex "__OTR__textures/kanji/gMsgKanji8FCCTex" +static const ALIGN_ASSET(2) char gMsgKanji8FCCTex[] = dgMsgKanji8FCCTex; + +#define dgMsgKanji8FCDTex "__OTR__textures/kanji/gMsgKanji8FCDTex" +static const ALIGN_ASSET(2) char gMsgKanji8FCDTex[] = dgMsgKanji8FCDTex; + +#define dgMsgKanji8FCETex "__OTR__textures/kanji/gMsgKanji8FCETex" +static const ALIGN_ASSET(2) char gMsgKanji8FCETex[] = dgMsgKanji8FCETex; + +#define dgMsgKanji8FCFTex "__OTR__textures/kanji/gMsgKanji8FCFTex" +static const ALIGN_ASSET(2) char gMsgKanji8FCFTex[] = dgMsgKanji8FCFTex; + +#define dgMsgKanji8FD0Tex "__OTR__textures/kanji/gMsgKanji8FD0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD0Tex[] = dgMsgKanji8FD0Tex; + +#define dgMsgKanji8FD1Tex "__OTR__textures/kanji/gMsgKanji8FD1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD1Tex[] = dgMsgKanji8FD1Tex; + +#define dgMsgKanji8FD2Tex "__OTR__textures/kanji/gMsgKanji8FD2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD2Tex[] = dgMsgKanji8FD2Tex; + +#define dgMsgKanji8FD3Tex "__OTR__textures/kanji/gMsgKanji8FD3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD3Tex[] = dgMsgKanji8FD3Tex; + +#define dgMsgKanji8FD4Tex "__OTR__textures/kanji/gMsgKanji8FD4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD4Tex[] = dgMsgKanji8FD4Tex; + +#define dgMsgKanji8FD5Tex "__OTR__textures/kanji/gMsgKanji8FD5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD5Tex[] = dgMsgKanji8FD5Tex; + +#define dgMsgKanji8FD6Tex "__OTR__textures/kanji/gMsgKanji8FD6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD6Tex[] = dgMsgKanji8FD6Tex; + +#define dgMsgKanji8FD7Tex "__OTR__textures/kanji/gMsgKanji8FD7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD7Tex[] = dgMsgKanji8FD7Tex; + +#define dgMsgKanji8FD8Tex "__OTR__textures/kanji/gMsgKanji8FD8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD8Tex[] = dgMsgKanji8FD8Tex; + +#define dgMsgKanji8FD9Tex "__OTR__textures/kanji/gMsgKanji8FD9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FD9Tex[] = dgMsgKanji8FD9Tex; + +#define dgMsgKanji8FDATex "__OTR__textures/kanji/gMsgKanji8FDATex" +static const ALIGN_ASSET(2) char gMsgKanji8FDATex[] = dgMsgKanji8FDATex; + +#define dgMsgKanji8FDBTex "__OTR__textures/kanji/gMsgKanji8FDBTex" +static const ALIGN_ASSET(2) char gMsgKanji8FDBTex[] = dgMsgKanji8FDBTex; + +#define dgMsgKanji8FDCTex "__OTR__textures/kanji/gMsgKanji8FDCTex" +static const ALIGN_ASSET(2) char gMsgKanji8FDCTex[] = dgMsgKanji8FDCTex; + +#define dgMsgKanji8FDDTex "__OTR__textures/kanji/gMsgKanji8FDDTex" +static const ALIGN_ASSET(2) char gMsgKanji8FDDTex[] = dgMsgKanji8FDDTex; + +#define dgMsgKanji8FDETex "__OTR__textures/kanji/gMsgKanji8FDETex" +static const ALIGN_ASSET(2) char gMsgKanji8FDETex[] = dgMsgKanji8FDETex; + +#define dgMsgKanji8FDFTex "__OTR__textures/kanji/gMsgKanji8FDFTex" +static const ALIGN_ASSET(2) char gMsgKanji8FDFTex[] = dgMsgKanji8FDFTex; + +#define dgMsgKanji8FE0Tex "__OTR__textures/kanji/gMsgKanji8FE0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE0Tex[] = dgMsgKanji8FE0Tex; + +#define dgMsgKanji8FE1Tex "__OTR__textures/kanji/gMsgKanji8FE1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE1Tex[] = dgMsgKanji8FE1Tex; + +#define dgMsgKanji8FE2Tex "__OTR__textures/kanji/gMsgKanji8FE2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE2Tex[] = dgMsgKanji8FE2Tex; + +#define dgMsgKanji8FE3Tex "__OTR__textures/kanji/gMsgKanji8FE3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE3Tex[] = dgMsgKanji8FE3Tex; + +#define dgMsgKanji8FE4Tex "__OTR__textures/kanji/gMsgKanji8FE4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE4Tex[] = dgMsgKanji8FE4Tex; + +#define dgMsgKanji8FE5Tex "__OTR__textures/kanji/gMsgKanji8FE5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE5Tex[] = dgMsgKanji8FE5Tex; + +#define dgMsgKanji8FE6Tex "__OTR__textures/kanji/gMsgKanji8FE6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE6Tex[] = dgMsgKanji8FE6Tex; + +#define dgMsgKanji8FE7Tex "__OTR__textures/kanji/gMsgKanji8FE7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE7Tex[] = dgMsgKanji8FE7Tex; + +#define dgMsgKanji8FE8Tex "__OTR__textures/kanji/gMsgKanji8FE8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE8Tex[] = dgMsgKanji8FE8Tex; + +#define dgMsgKanji8FE9Tex "__OTR__textures/kanji/gMsgKanji8FE9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FE9Tex[] = dgMsgKanji8FE9Tex; + +#define dgMsgKanji8FEATex "__OTR__textures/kanji/gMsgKanji8FEATex" +static const ALIGN_ASSET(2) char gMsgKanji8FEATex[] = dgMsgKanji8FEATex; + +#define dgMsgKanji8FEBTex "__OTR__textures/kanji/gMsgKanji8FEBTex" +static const ALIGN_ASSET(2) char gMsgKanji8FEBTex[] = dgMsgKanji8FEBTex; + +#define dgMsgKanji8FECTex "__OTR__textures/kanji/gMsgKanji8FECTex" +static const ALIGN_ASSET(2) char gMsgKanji8FECTex[] = dgMsgKanji8FECTex; + +#define dgMsgKanji8FEDTex "__OTR__textures/kanji/gMsgKanji8FEDTex" +static const ALIGN_ASSET(2) char gMsgKanji8FEDTex[] = dgMsgKanji8FEDTex; + +#define dgMsgKanji8FEETex "__OTR__textures/kanji/gMsgKanji8FEETex" +static const ALIGN_ASSET(2) char gMsgKanji8FEETex[] = dgMsgKanji8FEETex; + +#define dgMsgKanji8FEFTex "__OTR__textures/kanji/gMsgKanji8FEFTex" +static const ALIGN_ASSET(2) char gMsgKanji8FEFTex[] = dgMsgKanji8FEFTex; + +#define dgMsgKanji8FF0Tex "__OTR__textures/kanji/gMsgKanji8FF0Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF0Tex[] = dgMsgKanji8FF0Tex; + +#define dgMsgKanji8FF1Tex "__OTR__textures/kanji/gMsgKanji8FF1Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF1Tex[] = dgMsgKanji8FF1Tex; + +#define dgMsgKanji8FF2Tex "__OTR__textures/kanji/gMsgKanji8FF2Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF2Tex[] = dgMsgKanji8FF2Tex; + +#define dgMsgKanji8FF3Tex "__OTR__textures/kanji/gMsgKanji8FF3Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF3Tex[] = dgMsgKanji8FF3Tex; + +#define dgMsgKanji8FF4Tex "__OTR__textures/kanji/gMsgKanji8FF4Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF4Tex[] = dgMsgKanji8FF4Tex; + +#define dgMsgKanji8FF5Tex "__OTR__textures/kanji/gMsgKanji8FF5Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF5Tex[] = dgMsgKanji8FF5Tex; + +#define dgMsgKanji8FF6Tex "__OTR__textures/kanji/gMsgKanji8FF6Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF6Tex[] = dgMsgKanji8FF6Tex; + +#define dgMsgKanji8FF7Tex "__OTR__textures/kanji/gMsgKanji8FF7Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF7Tex[] = dgMsgKanji8FF7Tex; + +#define dgMsgKanji8FF8Tex "__OTR__textures/kanji/gMsgKanji8FF8Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF8Tex[] = dgMsgKanji8FF8Tex; + +#define dgMsgKanji8FF9Tex "__OTR__textures/kanji/gMsgKanji8FF9Tex" +static const ALIGN_ASSET(2) char gMsgKanji8FF9Tex[] = dgMsgKanji8FF9Tex; + +#define dgMsgKanji8FFATex "__OTR__textures/kanji/gMsgKanji8FFATex" +static const ALIGN_ASSET(2) char gMsgKanji8FFATex[] = dgMsgKanji8FFATex; + +#define dgMsgKanji8FFBTex "__OTR__textures/kanji/gMsgKanji8FFBTex" +static const ALIGN_ASSET(2) char gMsgKanji8FFBTex[] = dgMsgKanji8FFBTex; + +#define dgMsgKanji8FFCTex "__OTR__textures/kanji/gMsgKanji8FFCTex" +static const ALIGN_ASSET(2) char gMsgKanji8FFCTex[] = dgMsgKanji8FFCTex; + +#define dgMsgKanji9040Tex "__OTR__textures/kanji/gMsgKanji9040Tex" +static const ALIGN_ASSET(2) char gMsgKanji9040Tex[] = dgMsgKanji9040Tex; + +#define dgMsgKanji9041Tex "__OTR__textures/kanji/gMsgKanji9041Tex" +static const ALIGN_ASSET(2) char gMsgKanji9041Tex[] = dgMsgKanji9041Tex; + +#define dgMsgKanji9042Tex "__OTR__textures/kanji/gMsgKanji9042Tex" +static const ALIGN_ASSET(2) char gMsgKanji9042Tex[] = dgMsgKanji9042Tex; + +#define dgMsgKanji9043Tex "__OTR__textures/kanji/gMsgKanji9043Tex" +static const ALIGN_ASSET(2) char gMsgKanji9043Tex[] = dgMsgKanji9043Tex; + +#define dgMsgKanji9044Tex "__OTR__textures/kanji/gMsgKanji9044Tex" +static const ALIGN_ASSET(2) char gMsgKanji9044Tex[] = dgMsgKanji9044Tex; + +#define dgMsgKanji9045Tex "__OTR__textures/kanji/gMsgKanji9045Tex" +static const ALIGN_ASSET(2) char gMsgKanji9045Tex[] = dgMsgKanji9045Tex; + +#define dgMsgKanji9046Tex "__OTR__textures/kanji/gMsgKanji9046Tex" +static const ALIGN_ASSET(2) char gMsgKanji9046Tex[] = dgMsgKanji9046Tex; + +#define dgMsgKanji9047Tex "__OTR__textures/kanji/gMsgKanji9047Tex" +static const ALIGN_ASSET(2) char gMsgKanji9047Tex[] = dgMsgKanji9047Tex; + +#define dgMsgKanji9048Tex "__OTR__textures/kanji/gMsgKanji9048Tex" +static const ALIGN_ASSET(2) char gMsgKanji9048Tex[] = dgMsgKanji9048Tex; + +#define dgMsgKanji9049Tex "__OTR__textures/kanji/gMsgKanji9049Tex" +static const ALIGN_ASSET(2) char gMsgKanji9049Tex[] = dgMsgKanji9049Tex; + +#define dgMsgKanji904ATex "__OTR__textures/kanji/gMsgKanji904ATex" +static const ALIGN_ASSET(2) char gMsgKanji904ATex[] = dgMsgKanji904ATex; + +#define dgMsgKanji904BTex "__OTR__textures/kanji/gMsgKanji904BTex" +static const ALIGN_ASSET(2) char gMsgKanji904BTex[] = dgMsgKanji904BTex; + +#define dgMsgKanji904CTex "__OTR__textures/kanji/gMsgKanji904CTex" +static const ALIGN_ASSET(2) char gMsgKanji904CTex[] = dgMsgKanji904CTex; + +#define dgMsgKanji904DTex "__OTR__textures/kanji/gMsgKanji904DTex" +static const ALIGN_ASSET(2) char gMsgKanji904DTex[] = dgMsgKanji904DTex; + +#define dgMsgKanji904ETex "__OTR__textures/kanji/gMsgKanji904ETex" +static const ALIGN_ASSET(2) char gMsgKanji904ETex[] = dgMsgKanji904ETex; + +#define dgMsgKanji904FTex "__OTR__textures/kanji/gMsgKanji904FTex" +static const ALIGN_ASSET(2) char gMsgKanji904FTex[] = dgMsgKanji904FTex; + +#define dgMsgKanji9050Tex "__OTR__textures/kanji/gMsgKanji9050Tex" +static const ALIGN_ASSET(2) char gMsgKanji9050Tex[] = dgMsgKanji9050Tex; + +#define dgMsgKanji9051Tex "__OTR__textures/kanji/gMsgKanji9051Tex" +static const ALIGN_ASSET(2) char gMsgKanji9051Tex[] = dgMsgKanji9051Tex; + +#define dgMsgKanji9052Tex "__OTR__textures/kanji/gMsgKanji9052Tex" +static const ALIGN_ASSET(2) char gMsgKanji9052Tex[] = dgMsgKanji9052Tex; + +#define dgMsgKanji9053Tex "__OTR__textures/kanji/gMsgKanji9053Tex" +static const ALIGN_ASSET(2) char gMsgKanji9053Tex[] = dgMsgKanji9053Tex; + +#define dgMsgKanji9054Tex "__OTR__textures/kanji/gMsgKanji9054Tex" +static const ALIGN_ASSET(2) char gMsgKanji9054Tex[] = dgMsgKanji9054Tex; + +#define dgMsgKanji9055Tex "__OTR__textures/kanji/gMsgKanji9055Tex" +static const ALIGN_ASSET(2) char gMsgKanji9055Tex[] = dgMsgKanji9055Tex; + +#define dgMsgKanji9056Tex "__OTR__textures/kanji/gMsgKanji9056Tex" +static const ALIGN_ASSET(2) char gMsgKanji9056Tex[] = dgMsgKanji9056Tex; + +#define dgMsgKanji9057Tex "__OTR__textures/kanji/gMsgKanji9057Tex" +static const ALIGN_ASSET(2) char gMsgKanji9057Tex[] = dgMsgKanji9057Tex; + +#define dgMsgKanji9058Tex "__OTR__textures/kanji/gMsgKanji9058Tex" +static const ALIGN_ASSET(2) char gMsgKanji9058Tex[] = dgMsgKanji9058Tex; + +#define dgMsgKanji9059Tex "__OTR__textures/kanji/gMsgKanji9059Tex" +static const ALIGN_ASSET(2) char gMsgKanji9059Tex[] = dgMsgKanji9059Tex; + +#define dgMsgKanji905ATex "__OTR__textures/kanji/gMsgKanji905ATex" +static const ALIGN_ASSET(2) char gMsgKanji905ATex[] = dgMsgKanji905ATex; + +#define dgMsgKanji905BTex "__OTR__textures/kanji/gMsgKanji905BTex" +static const ALIGN_ASSET(2) char gMsgKanji905BTex[] = dgMsgKanji905BTex; + +#define dgMsgKanji905CTex "__OTR__textures/kanji/gMsgKanji905CTex" +static const ALIGN_ASSET(2) char gMsgKanji905CTex[] = dgMsgKanji905CTex; + +#define dgMsgKanji905DTex "__OTR__textures/kanji/gMsgKanji905DTex" +static const ALIGN_ASSET(2) char gMsgKanji905DTex[] = dgMsgKanji905DTex; + +#define dgMsgKanji905ETex "__OTR__textures/kanji/gMsgKanji905ETex" +static const ALIGN_ASSET(2) char gMsgKanji905ETex[] = dgMsgKanji905ETex; + +#define dgMsgKanji905FTex "__OTR__textures/kanji/gMsgKanji905FTex" +static const ALIGN_ASSET(2) char gMsgKanji905FTex[] = dgMsgKanji905FTex; + +#define dgMsgKanji9060Tex "__OTR__textures/kanji/gMsgKanji9060Tex" +static const ALIGN_ASSET(2) char gMsgKanji9060Tex[] = dgMsgKanji9060Tex; + +#define dgMsgKanji9061Tex "__OTR__textures/kanji/gMsgKanji9061Tex" +static const ALIGN_ASSET(2) char gMsgKanji9061Tex[] = dgMsgKanji9061Tex; + +#define dgMsgKanji9062Tex "__OTR__textures/kanji/gMsgKanji9062Tex" +static const ALIGN_ASSET(2) char gMsgKanji9062Tex[] = dgMsgKanji9062Tex; + +#define dgMsgKanji9063Tex "__OTR__textures/kanji/gMsgKanji9063Tex" +static const ALIGN_ASSET(2) char gMsgKanji9063Tex[] = dgMsgKanji9063Tex; + +#define dgMsgKanji9064Tex "__OTR__textures/kanji/gMsgKanji9064Tex" +static const ALIGN_ASSET(2) char gMsgKanji9064Tex[] = dgMsgKanji9064Tex; + +#define dgMsgKanji9065Tex "__OTR__textures/kanji/gMsgKanji9065Tex" +static const ALIGN_ASSET(2) char gMsgKanji9065Tex[] = dgMsgKanji9065Tex; + +#define dgMsgKanji9066Tex "__OTR__textures/kanji/gMsgKanji9066Tex" +static const ALIGN_ASSET(2) char gMsgKanji9066Tex[] = dgMsgKanji9066Tex; + +#define dgMsgKanji9067Tex "__OTR__textures/kanji/gMsgKanji9067Tex" +static const ALIGN_ASSET(2) char gMsgKanji9067Tex[] = dgMsgKanji9067Tex; + +#define dgMsgKanji9068Tex "__OTR__textures/kanji/gMsgKanji9068Tex" +static const ALIGN_ASSET(2) char gMsgKanji9068Tex[] = dgMsgKanji9068Tex; + +#define dgMsgKanji9069Tex "__OTR__textures/kanji/gMsgKanji9069Tex" +static const ALIGN_ASSET(2) char gMsgKanji9069Tex[] = dgMsgKanji9069Tex; + +#define dgMsgKanji906ATex "__OTR__textures/kanji/gMsgKanji906ATex" +static const ALIGN_ASSET(2) char gMsgKanji906ATex[] = dgMsgKanji906ATex; + +#define dgMsgKanji906BTex "__OTR__textures/kanji/gMsgKanji906BTex" +static const ALIGN_ASSET(2) char gMsgKanji906BTex[] = dgMsgKanji906BTex; + +#define dgMsgKanji906CTex "__OTR__textures/kanji/gMsgKanji906CTex" +static const ALIGN_ASSET(2) char gMsgKanji906CTex[] = dgMsgKanji906CTex; + +#define dgMsgKanji906DTex "__OTR__textures/kanji/gMsgKanji906DTex" +static const ALIGN_ASSET(2) char gMsgKanji906DTex[] = dgMsgKanji906DTex; + +#define dgMsgKanji906ETex "__OTR__textures/kanji/gMsgKanji906ETex" +static const ALIGN_ASSET(2) char gMsgKanji906ETex[] = dgMsgKanji906ETex; + +#define dgMsgKanji906FTex "__OTR__textures/kanji/gMsgKanji906FTex" +static const ALIGN_ASSET(2) char gMsgKanji906FTex[] = dgMsgKanji906FTex; + +#define dgMsgKanji9070Tex "__OTR__textures/kanji/gMsgKanji9070Tex" +static const ALIGN_ASSET(2) char gMsgKanji9070Tex[] = dgMsgKanji9070Tex; + +#define dgMsgKanji9071Tex "__OTR__textures/kanji/gMsgKanji9071Tex" +static const ALIGN_ASSET(2) char gMsgKanji9071Tex[] = dgMsgKanji9071Tex; + +#define dgMsgKanji9072Tex "__OTR__textures/kanji/gMsgKanji9072Tex" +static const ALIGN_ASSET(2) char gMsgKanji9072Tex[] = dgMsgKanji9072Tex; + +#define dgMsgKanji9073Tex "__OTR__textures/kanji/gMsgKanji9073Tex" +static const ALIGN_ASSET(2) char gMsgKanji9073Tex[] = dgMsgKanji9073Tex; + +#define dgMsgKanji9074Tex "__OTR__textures/kanji/gMsgKanji9074Tex" +static const ALIGN_ASSET(2) char gMsgKanji9074Tex[] = dgMsgKanji9074Tex; + +#define dgMsgKanji9075Tex "__OTR__textures/kanji/gMsgKanji9075Tex" +static const ALIGN_ASSET(2) char gMsgKanji9075Tex[] = dgMsgKanji9075Tex; + +#define dgMsgKanji9076Tex "__OTR__textures/kanji/gMsgKanji9076Tex" +static const ALIGN_ASSET(2) char gMsgKanji9076Tex[] = dgMsgKanji9076Tex; + +#define dgMsgKanji9077Tex "__OTR__textures/kanji/gMsgKanji9077Tex" +static const ALIGN_ASSET(2) char gMsgKanji9077Tex[] = dgMsgKanji9077Tex; + +#define dgMsgKanji9078Tex "__OTR__textures/kanji/gMsgKanji9078Tex" +static const ALIGN_ASSET(2) char gMsgKanji9078Tex[] = dgMsgKanji9078Tex; + +#define dgMsgKanji9079Tex "__OTR__textures/kanji/gMsgKanji9079Tex" +static const ALIGN_ASSET(2) char gMsgKanji9079Tex[] = dgMsgKanji9079Tex; + +#define dgMsgKanji907ATex "__OTR__textures/kanji/gMsgKanji907ATex" +static const ALIGN_ASSET(2) char gMsgKanji907ATex[] = dgMsgKanji907ATex; + +#define dgMsgKanji907BTex "__OTR__textures/kanji/gMsgKanji907BTex" +static const ALIGN_ASSET(2) char gMsgKanji907BTex[] = dgMsgKanji907BTex; + +#define dgMsgKanji907CTex "__OTR__textures/kanji/gMsgKanji907CTex" +static const ALIGN_ASSET(2) char gMsgKanji907CTex[] = dgMsgKanji907CTex; + +#define dgMsgKanji907DTex "__OTR__textures/kanji/gMsgKanji907DTex" +static const ALIGN_ASSET(2) char gMsgKanji907DTex[] = dgMsgKanji907DTex; + +#define dgMsgKanji907ETex "__OTR__textures/kanji/gMsgKanji907ETex" +static const ALIGN_ASSET(2) char gMsgKanji907ETex[] = dgMsgKanji907ETex; + +#define dgMsgKanji9080Tex "__OTR__textures/kanji/gMsgKanji9080Tex" +static const ALIGN_ASSET(2) char gMsgKanji9080Tex[] = dgMsgKanji9080Tex; + +#define dgMsgKanji9081Tex "__OTR__textures/kanji/gMsgKanji9081Tex" +static const ALIGN_ASSET(2) char gMsgKanji9081Tex[] = dgMsgKanji9081Tex; + +#define dgMsgKanji9082Tex "__OTR__textures/kanji/gMsgKanji9082Tex" +static const ALIGN_ASSET(2) char gMsgKanji9082Tex[] = dgMsgKanji9082Tex; + +#define dgMsgKanji9083Tex "__OTR__textures/kanji/gMsgKanji9083Tex" +static const ALIGN_ASSET(2) char gMsgKanji9083Tex[] = dgMsgKanji9083Tex; + +#define dgMsgKanji9084Tex "__OTR__textures/kanji/gMsgKanji9084Tex" +static const ALIGN_ASSET(2) char gMsgKanji9084Tex[] = dgMsgKanji9084Tex; + +#define dgMsgKanji9085Tex "__OTR__textures/kanji/gMsgKanji9085Tex" +static const ALIGN_ASSET(2) char gMsgKanji9085Tex[] = dgMsgKanji9085Tex; + +#define dgMsgKanji9086Tex "__OTR__textures/kanji/gMsgKanji9086Tex" +static const ALIGN_ASSET(2) char gMsgKanji9086Tex[] = dgMsgKanji9086Tex; + +#define dgMsgKanji9087Tex "__OTR__textures/kanji/gMsgKanji9087Tex" +static const ALIGN_ASSET(2) char gMsgKanji9087Tex[] = dgMsgKanji9087Tex; + +#define dgMsgKanji9088Tex "__OTR__textures/kanji/gMsgKanji9088Tex" +static const ALIGN_ASSET(2) char gMsgKanji9088Tex[] = dgMsgKanji9088Tex; + +#define dgMsgKanji9089Tex "__OTR__textures/kanji/gMsgKanji9089Tex" +static const ALIGN_ASSET(2) char gMsgKanji9089Tex[] = dgMsgKanji9089Tex; + +#define dgMsgKanji908ATex "__OTR__textures/kanji/gMsgKanji908ATex" +static const ALIGN_ASSET(2) char gMsgKanji908ATex[] = dgMsgKanji908ATex; + +#define dgMsgKanji908BTex "__OTR__textures/kanji/gMsgKanji908BTex" +static const ALIGN_ASSET(2) char gMsgKanji908BTex[] = dgMsgKanji908BTex; + +#define dgMsgKanji908CTex "__OTR__textures/kanji/gMsgKanji908CTex" +static const ALIGN_ASSET(2) char gMsgKanji908CTex[] = dgMsgKanji908CTex; + +#define dgMsgKanji908DTex "__OTR__textures/kanji/gMsgKanji908DTex" +static const ALIGN_ASSET(2) char gMsgKanji908DTex[] = dgMsgKanji908DTex; + +#define dgMsgKanji908ETex "__OTR__textures/kanji/gMsgKanji908ETex" +static const ALIGN_ASSET(2) char gMsgKanji908ETex[] = dgMsgKanji908ETex; + +#define dgMsgKanji908FTex "__OTR__textures/kanji/gMsgKanji908FTex" +static const ALIGN_ASSET(2) char gMsgKanji908FTex[] = dgMsgKanji908FTex; + +#define dgMsgKanji9090Tex "__OTR__textures/kanji/gMsgKanji9090Tex" +static const ALIGN_ASSET(2) char gMsgKanji9090Tex[] = dgMsgKanji9090Tex; + +#define dgMsgKanji9091Tex "__OTR__textures/kanji/gMsgKanji9091Tex" +static const ALIGN_ASSET(2) char gMsgKanji9091Tex[] = dgMsgKanji9091Tex; + +#define dgMsgKanji9092Tex "__OTR__textures/kanji/gMsgKanji9092Tex" +static const ALIGN_ASSET(2) char gMsgKanji9092Tex[] = dgMsgKanji9092Tex; + +#define dgMsgKanji9093Tex "__OTR__textures/kanji/gMsgKanji9093Tex" +static const ALIGN_ASSET(2) char gMsgKanji9093Tex[] = dgMsgKanji9093Tex; + +#define dgMsgKanji9094Tex "__OTR__textures/kanji/gMsgKanji9094Tex" +static const ALIGN_ASSET(2) char gMsgKanji9094Tex[] = dgMsgKanji9094Tex; + +#define dgMsgKanji9095Tex "__OTR__textures/kanji/gMsgKanji9095Tex" +static const ALIGN_ASSET(2) char gMsgKanji9095Tex[] = dgMsgKanji9095Tex; + +#define dgMsgKanji9096Tex "__OTR__textures/kanji/gMsgKanji9096Tex" +static const ALIGN_ASSET(2) char gMsgKanji9096Tex[] = dgMsgKanji9096Tex; + +#define dgMsgKanji9097Tex "__OTR__textures/kanji/gMsgKanji9097Tex" +static const ALIGN_ASSET(2) char gMsgKanji9097Tex[] = dgMsgKanji9097Tex; + +#define dgMsgKanji9098Tex "__OTR__textures/kanji/gMsgKanji9098Tex" +static const ALIGN_ASSET(2) char gMsgKanji9098Tex[] = dgMsgKanji9098Tex; + +#define dgMsgKanji9099Tex "__OTR__textures/kanji/gMsgKanji9099Tex" +static const ALIGN_ASSET(2) char gMsgKanji9099Tex[] = dgMsgKanji9099Tex; + +#define dgMsgKanji909ATex "__OTR__textures/kanji/gMsgKanji909ATex" +static const ALIGN_ASSET(2) char gMsgKanji909ATex[] = dgMsgKanji909ATex; + +#define dgMsgKanji909BTex "__OTR__textures/kanji/gMsgKanji909BTex" +static const ALIGN_ASSET(2) char gMsgKanji909BTex[] = dgMsgKanji909BTex; + +#define dgMsgKanji909CTex "__OTR__textures/kanji/gMsgKanji909CTex" +static const ALIGN_ASSET(2) char gMsgKanji909CTex[] = dgMsgKanji909CTex; + +#define dgMsgKanji909DTex "__OTR__textures/kanji/gMsgKanji909DTex" +static const ALIGN_ASSET(2) char gMsgKanji909DTex[] = dgMsgKanji909DTex; + +#define dgMsgKanji909ETex "__OTR__textures/kanji/gMsgKanji909ETex" +static const ALIGN_ASSET(2) char gMsgKanji909ETex[] = dgMsgKanji909ETex; + +#define dgMsgKanji909FTex "__OTR__textures/kanji/gMsgKanji909FTex" +static const ALIGN_ASSET(2) char gMsgKanji909FTex[] = dgMsgKanji909FTex; + +#define dgMsgKanji90A0Tex "__OTR__textures/kanji/gMsgKanji90A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A0Tex[] = dgMsgKanji90A0Tex; + +#define dgMsgKanji90A1Tex "__OTR__textures/kanji/gMsgKanji90A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A1Tex[] = dgMsgKanji90A1Tex; + +#define dgMsgKanji90A2Tex "__OTR__textures/kanji/gMsgKanji90A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A2Tex[] = dgMsgKanji90A2Tex; + +#define dgMsgKanji90A3Tex "__OTR__textures/kanji/gMsgKanji90A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A3Tex[] = dgMsgKanji90A3Tex; + +#define dgMsgKanji90A4Tex "__OTR__textures/kanji/gMsgKanji90A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A4Tex[] = dgMsgKanji90A4Tex; + +#define dgMsgKanji90A5Tex "__OTR__textures/kanji/gMsgKanji90A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A5Tex[] = dgMsgKanji90A5Tex; + +#define dgMsgKanji90A6Tex "__OTR__textures/kanji/gMsgKanji90A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A6Tex[] = dgMsgKanji90A6Tex; + +#define dgMsgKanji90A7Tex "__OTR__textures/kanji/gMsgKanji90A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A7Tex[] = dgMsgKanji90A7Tex; + +#define dgMsgKanji90A8Tex "__OTR__textures/kanji/gMsgKanji90A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A8Tex[] = dgMsgKanji90A8Tex; + +#define dgMsgKanji90A9Tex "__OTR__textures/kanji/gMsgKanji90A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji90A9Tex[] = dgMsgKanji90A9Tex; + +#define dgMsgKanji90AATex "__OTR__textures/kanji/gMsgKanji90AATex" +static const ALIGN_ASSET(2) char gMsgKanji90AATex[] = dgMsgKanji90AATex; + +#define dgMsgKanji90ABTex "__OTR__textures/kanji/gMsgKanji90ABTex" +static const ALIGN_ASSET(2) char gMsgKanji90ABTex[] = dgMsgKanji90ABTex; + +#define dgMsgKanji90ACTex "__OTR__textures/kanji/gMsgKanji90ACTex" +static const ALIGN_ASSET(2) char gMsgKanji90ACTex[] = dgMsgKanji90ACTex; + +#define dgMsgKanji90ADTex "__OTR__textures/kanji/gMsgKanji90ADTex" +static const ALIGN_ASSET(2) char gMsgKanji90ADTex[] = dgMsgKanji90ADTex; + +#define dgMsgKanji90AETex "__OTR__textures/kanji/gMsgKanji90AETex" +static const ALIGN_ASSET(2) char gMsgKanji90AETex[] = dgMsgKanji90AETex; + +#define dgMsgKanji90AFTex "__OTR__textures/kanji/gMsgKanji90AFTex" +static const ALIGN_ASSET(2) char gMsgKanji90AFTex[] = dgMsgKanji90AFTex; + +#define dgMsgKanji90B0Tex "__OTR__textures/kanji/gMsgKanji90B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B0Tex[] = dgMsgKanji90B0Tex; + +#define dgMsgKanji90B1Tex "__OTR__textures/kanji/gMsgKanji90B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B1Tex[] = dgMsgKanji90B1Tex; + +#define dgMsgKanji90B2Tex "__OTR__textures/kanji/gMsgKanji90B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B2Tex[] = dgMsgKanji90B2Tex; + +#define dgMsgKanji90B3Tex "__OTR__textures/kanji/gMsgKanji90B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B3Tex[] = dgMsgKanji90B3Tex; + +#define dgMsgKanji90B4Tex "__OTR__textures/kanji/gMsgKanji90B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B4Tex[] = dgMsgKanji90B4Tex; + +#define dgMsgKanji90B5Tex "__OTR__textures/kanji/gMsgKanji90B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B5Tex[] = dgMsgKanji90B5Tex; + +#define dgMsgKanji90B6Tex "__OTR__textures/kanji/gMsgKanji90B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B6Tex[] = dgMsgKanji90B6Tex; + +#define dgMsgKanji90B7Tex "__OTR__textures/kanji/gMsgKanji90B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B7Tex[] = dgMsgKanji90B7Tex; + +#define dgMsgKanji90B8Tex "__OTR__textures/kanji/gMsgKanji90B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B8Tex[] = dgMsgKanji90B8Tex; + +#define dgMsgKanji90B9Tex "__OTR__textures/kanji/gMsgKanji90B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji90B9Tex[] = dgMsgKanji90B9Tex; + +#define dgMsgKanji90BATex "__OTR__textures/kanji/gMsgKanji90BATex" +static const ALIGN_ASSET(2) char gMsgKanji90BATex[] = dgMsgKanji90BATex; + +#define dgMsgKanji90BBTex "__OTR__textures/kanji/gMsgKanji90BBTex" +static const ALIGN_ASSET(2) char gMsgKanji90BBTex[] = dgMsgKanji90BBTex; + +#define dgMsgKanji90BCTex "__OTR__textures/kanji/gMsgKanji90BCTex" +static const ALIGN_ASSET(2) char gMsgKanji90BCTex[] = dgMsgKanji90BCTex; + +#define dgMsgKanji90BDTex "__OTR__textures/kanji/gMsgKanji90BDTex" +static const ALIGN_ASSET(2) char gMsgKanji90BDTex[] = dgMsgKanji90BDTex; + +#define dgMsgKanji90BETex "__OTR__textures/kanji/gMsgKanji90BETex" +static const ALIGN_ASSET(2) char gMsgKanji90BETex[] = dgMsgKanji90BETex; + +#define dgMsgKanji90BFTex "__OTR__textures/kanji/gMsgKanji90BFTex" +static const ALIGN_ASSET(2) char gMsgKanji90BFTex[] = dgMsgKanji90BFTex; + +#define dgMsgKanji90C0Tex "__OTR__textures/kanji/gMsgKanji90C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C0Tex[] = dgMsgKanji90C0Tex; + +#define dgMsgKanji90C1Tex "__OTR__textures/kanji/gMsgKanji90C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C1Tex[] = dgMsgKanji90C1Tex; + +#define dgMsgKanji90C2Tex "__OTR__textures/kanji/gMsgKanji90C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C2Tex[] = dgMsgKanji90C2Tex; + +#define dgMsgKanji90C3Tex "__OTR__textures/kanji/gMsgKanji90C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C3Tex[] = dgMsgKanji90C3Tex; + +#define dgMsgKanji90C4Tex "__OTR__textures/kanji/gMsgKanji90C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C4Tex[] = dgMsgKanji90C4Tex; + +#define dgMsgKanji90C5Tex "__OTR__textures/kanji/gMsgKanji90C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C5Tex[] = dgMsgKanji90C5Tex; + +#define dgMsgKanji90C6Tex "__OTR__textures/kanji/gMsgKanji90C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C6Tex[] = dgMsgKanji90C6Tex; + +#define dgMsgKanji90C7Tex "__OTR__textures/kanji/gMsgKanji90C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C7Tex[] = dgMsgKanji90C7Tex; + +#define dgMsgKanji90C8Tex "__OTR__textures/kanji/gMsgKanji90C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C8Tex[] = dgMsgKanji90C8Tex; + +#define dgMsgKanji90C9Tex "__OTR__textures/kanji/gMsgKanji90C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji90C9Tex[] = dgMsgKanji90C9Tex; + +#define dgMsgKanji90CATex "__OTR__textures/kanji/gMsgKanji90CATex" +static const ALIGN_ASSET(2) char gMsgKanji90CATex[] = dgMsgKanji90CATex; + +#define dgMsgKanji90CBTex "__OTR__textures/kanji/gMsgKanji90CBTex" +static const ALIGN_ASSET(2) char gMsgKanji90CBTex[] = dgMsgKanji90CBTex; + +#define dgMsgKanji90CCTex "__OTR__textures/kanji/gMsgKanji90CCTex" +static const ALIGN_ASSET(2) char gMsgKanji90CCTex[] = dgMsgKanji90CCTex; + +#define dgMsgKanji90CDTex "__OTR__textures/kanji/gMsgKanji90CDTex" +static const ALIGN_ASSET(2) char gMsgKanji90CDTex[] = dgMsgKanji90CDTex; + +#define dgMsgKanji90CETex "__OTR__textures/kanji/gMsgKanji90CETex" +static const ALIGN_ASSET(2) char gMsgKanji90CETex[] = dgMsgKanji90CETex; + +#define dgMsgKanji90CFTex "__OTR__textures/kanji/gMsgKanji90CFTex" +static const ALIGN_ASSET(2) char gMsgKanji90CFTex[] = dgMsgKanji90CFTex; + +#define dgMsgKanji90D0Tex "__OTR__textures/kanji/gMsgKanji90D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D0Tex[] = dgMsgKanji90D0Tex; + +#define dgMsgKanji90D1Tex "__OTR__textures/kanji/gMsgKanji90D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D1Tex[] = dgMsgKanji90D1Tex; + +#define dgMsgKanji90D2Tex "__OTR__textures/kanji/gMsgKanji90D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D2Tex[] = dgMsgKanji90D2Tex; + +#define dgMsgKanji90D3Tex "__OTR__textures/kanji/gMsgKanji90D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D3Tex[] = dgMsgKanji90D3Tex; + +#define dgMsgKanji90D4Tex "__OTR__textures/kanji/gMsgKanji90D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D4Tex[] = dgMsgKanji90D4Tex; + +#define dgMsgKanji90D5Tex "__OTR__textures/kanji/gMsgKanji90D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D5Tex[] = dgMsgKanji90D5Tex; + +#define dgMsgKanji90D6Tex "__OTR__textures/kanji/gMsgKanji90D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D6Tex[] = dgMsgKanji90D6Tex; + +#define dgMsgKanji90D7Tex "__OTR__textures/kanji/gMsgKanji90D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D7Tex[] = dgMsgKanji90D7Tex; + +#define dgMsgKanji90D8Tex "__OTR__textures/kanji/gMsgKanji90D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D8Tex[] = dgMsgKanji90D8Tex; + +#define dgMsgKanji90D9Tex "__OTR__textures/kanji/gMsgKanji90D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji90D9Tex[] = dgMsgKanji90D9Tex; + +#define dgMsgKanji90DATex "__OTR__textures/kanji/gMsgKanji90DATex" +static const ALIGN_ASSET(2) char gMsgKanji90DATex[] = dgMsgKanji90DATex; + +#define dgMsgKanji90DBTex "__OTR__textures/kanji/gMsgKanji90DBTex" +static const ALIGN_ASSET(2) char gMsgKanji90DBTex[] = dgMsgKanji90DBTex; + +#define dgMsgKanji90DCTex "__OTR__textures/kanji/gMsgKanji90DCTex" +static const ALIGN_ASSET(2) char gMsgKanji90DCTex[] = dgMsgKanji90DCTex; + +#define dgMsgKanji90DDTex "__OTR__textures/kanji/gMsgKanji90DDTex" +static const ALIGN_ASSET(2) char gMsgKanji90DDTex[] = dgMsgKanji90DDTex; + +#define dgMsgKanji90DETex "__OTR__textures/kanji/gMsgKanji90DETex" +static const ALIGN_ASSET(2) char gMsgKanji90DETex[] = dgMsgKanji90DETex; + +#define dgMsgKanji90DFTex "__OTR__textures/kanji/gMsgKanji90DFTex" +static const ALIGN_ASSET(2) char gMsgKanji90DFTex[] = dgMsgKanji90DFTex; + +#define dgMsgKanji90E0Tex "__OTR__textures/kanji/gMsgKanji90E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E0Tex[] = dgMsgKanji90E0Tex; + +#define dgMsgKanji90E1Tex "__OTR__textures/kanji/gMsgKanji90E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E1Tex[] = dgMsgKanji90E1Tex; + +#define dgMsgKanji90E2Tex "__OTR__textures/kanji/gMsgKanji90E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E2Tex[] = dgMsgKanji90E2Tex; + +#define dgMsgKanji90E3Tex "__OTR__textures/kanji/gMsgKanji90E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E3Tex[] = dgMsgKanji90E3Tex; + +#define dgMsgKanji90E4Tex "__OTR__textures/kanji/gMsgKanji90E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E4Tex[] = dgMsgKanji90E4Tex; + +#define dgMsgKanji90E5Tex "__OTR__textures/kanji/gMsgKanji90E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E5Tex[] = dgMsgKanji90E5Tex; + +#define dgMsgKanji90E6Tex "__OTR__textures/kanji/gMsgKanji90E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E6Tex[] = dgMsgKanji90E6Tex; + +#define dgMsgKanji90E7Tex "__OTR__textures/kanji/gMsgKanji90E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E7Tex[] = dgMsgKanji90E7Tex; + +#define dgMsgKanji90E8Tex "__OTR__textures/kanji/gMsgKanji90E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E8Tex[] = dgMsgKanji90E8Tex; + +#define dgMsgKanji90E9Tex "__OTR__textures/kanji/gMsgKanji90E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji90E9Tex[] = dgMsgKanji90E9Tex; + +#define dgMsgKanji90EATex "__OTR__textures/kanji/gMsgKanji90EATex" +static const ALIGN_ASSET(2) char gMsgKanji90EATex[] = dgMsgKanji90EATex; + +#define dgMsgKanji90EBTex "__OTR__textures/kanji/gMsgKanji90EBTex" +static const ALIGN_ASSET(2) char gMsgKanji90EBTex[] = dgMsgKanji90EBTex; + +#define dgMsgKanji90ECTex "__OTR__textures/kanji/gMsgKanji90ECTex" +static const ALIGN_ASSET(2) char gMsgKanji90ECTex[] = dgMsgKanji90ECTex; + +#define dgMsgKanji90EDTex "__OTR__textures/kanji/gMsgKanji90EDTex" +static const ALIGN_ASSET(2) char gMsgKanji90EDTex[] = dgMsgKanji90EDTex; + +#define dgMsgKanji90EETex "__OTR__textures/kanji/gMsgKanji90EETex" +static const ALIGN_ASSET(2) char gMsgKanji90EETex[] = dgMsgKanji90EETex; + +#define dgMsgKanji90EFTex "__OTR__textures/kanji/gMsgKanji90EFTex" +static const ALIGN_ASSET(2) char gMsgKanji90EFTex[] = dgMsgKanji90EFTex; + +#define dgMsgKanji90F0Tex "__OTR__textures/kanji/gMsgKanji90F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F0Tex[] = dgMsgKanji90F0Tex; + +#define dgMsgKanji90F1Tex "__OTR__textures/kanji/gMsgKanji90F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F1Tex[] = dgMsgKanji90F1Tex; + +#define dgMsgKanji90F2Tex "__OTR__textures/kanji/gMsgKanji90F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F2Tex[] = dgMsgKanji90F2Tex; + +#define dgMsgKanji90F3Tex "__OTR__textures/kanji/gMsgKanji90F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F3Tex[] = dgMsgKanji90F3Tex; + +#define dgMsgKanji90F4Tex "__OTR__textures/kanji/gMsgKanji90F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F4Tex[] = dgMsgKanji90F4Tex; + +#define dgMsgKanji90F5Tex "__OTR__textures/kanji/gMsgKanji90F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F5Tex[] = dgMsgKanji90F5Tex; + +#define dgMsgKanji90F6Tex "__OTR__textures/kanji/gMsgKanji90F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F6Tex[] = dgMsgKanji90F6Tex; + +#define dgMsgKanji90F7Tex "__OTR__textures/kanji/gMsgKanji90F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F7Tex[] = dgMsgKanji90F7Tex; + +#define dgMsgKanji90F8Tex "__OTR__textures/kanji/gMsgKanji90F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F8Tex[] = dgMsgKanji90F8Tex; + +#define dgMsgKanji90F9Tex "__OTR__textures/kanji/gMsgKanji90F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji90F9Tex[] = dgMsgKanji90F9Tex; + +#define dgMsgKanji90FATex "__OTR__textures/kanji/gMsgKanji90FATex" +static const ALIGN_ASSET(2) char gMsgKanji90FATex[] = dgMsgKanji90FATex; + +#define dgMsgKanji90FBTex "__OTR__textures/kanji/gMsgKanji90FBTex" +static const ALIGN_ASSET(2) char gMsgKanji90FBTex[] = dgMsgKanji90FBTex; + +#define dgMsgKanji90FCTex "__OTR__textures/kanji/gMsgKanji90FCTex" +static const ALIGN_ASSET(2) char gMsgKanji90FCTex[] = dgMsgKanji90FCTex; + +#define dgMsgKanji9140Tex "__OTR__textures/kanji/gMsgKanji9140Tex" +static const ALIGN_ASSET(2) char gMsgKanji9140Tex[] = dgMsgKanji9140Tex; + +#define dgMsgKanji9141Tex "__OTR__textures/kanji/gMsgKanji9141Tex" +static const ALIGN_ASSET(2) char gMsgKanji9141Tex[] = dgMsgKanji9141Tex; + +#define dgMsgKanji9142Tex "__OTR__textures/kanji/gMsgKanji9142Tex" +static const ALIGN_ASSET(2) char gMsgKanji9142Tex[] = dgMsgKanji9142Tex; + +#define dgMsgKanji9143Tex "__OTR__textures/kanji/gMsgKanji9143Tex" +static const ALIGN_ASSET(2) char gMsgKanji9143Tex[] = dgMsgKanji9143Tex; + +#define dgMsgKanji9144Tex "__OTR__textures/kanji/gMsgKanji9144Tex" +static const ALIGN_ASSET(2) char gMsgKanji9144Tex[] = dgMsgKanji9144Tex; + +#define dgMsgKanji9145Tex "__OTR__textures/kanji/gMsgKanji9145Tex" +static const ALIGN_ASSET(2) char gMsgKanji9145Tex[] = dgMsgKanji9145Tex; + +#define dgMsgKanji9146Tex "__OTR__textures/kanji/gMsgKanji9146Tex" +static const ALIGN_ASSET(2) char gMsgKanji9146Tex[] = dgMsgKanji9146Tex; + +#define dgMsgKanji9147Tex "__OTR__textures/kanji/gMsgKanji9147Tex" +static const ALIGN_ASSET(2) char gMsgKanji9147Tex[] = dgMsgKanji9147Tex; + +#define dgMsgKanji9148Tex "__OTR__textures/kanji/gMsgKanji9148Tex" +static const ALIGN_ASSET(2) char gMsgKanji9148Tex[] = dgMsgKanji9148Tex; + +#define dgMsgKanji9149Tex "__OTR__textures/kanji/gMsgKanji9149Tex" +static const ALIGN_ASSET(2) char gMsgKanji9149Tex[] = dgMsgKanji9149Tex; + +#define dgMsgKanji914ATex "__OTR__textures/kanji/gMsgKanji914ATex" +static const ALIGN_ASSET(2) char gMsgKanji914ATex[] = dgMsgKanji914ATex; + +#define dgMsgKanji914BTex "__OTR__textures/kanji/gMsgKanji914BTex" +static const ALIGN_ASSET(2) char gMsgKanji914BTex[] = dgMsgKanji914BTex; + +#define dgMsgKanji914CTex "__OTR__textures/kanji/gMsgKanji914CTex" +static const ALIGN_ASSET(2) char gMsgKanji914CTex[] = dgMsgKanji914CTex; + +#define dgMsgKanji914DTex "__OTR__textures/kanji/gMsgKanji914DTex" +static const ALIGN_ASSET(2) char gMsgKanji914DTex[] = dgMsgKanji914DTex; + +#define dgMsgKanji914ETex "__OTR__textures/kanji/gMsgKanji914ETex" +static const ALIGN_ASSET(2) char gMsgKanji914ETex[] = dgMsgKanji914ETex; + +#define dgMsgKanji914FTex "__OTR__textures/kanji/gMsgKanji914FTex" +static const ALIGN_ASSET(2) char gMsgKanji914FTex[] = dgMsgKanji914FTex; + +#define dgMsgKanji9150Tex "__OTR__textures/kanji/gMsgKanji9150Tex" +static const ALIGN_ASSET(2) char gMsgKanji9150Tex[] = dgMsgKanji9150Tex; + +#define dgMsgKanji9151Tex "__OTR__textures/kanji/gMsgKanji9151Tex" +static const ALIGN_ASSET(2) char gMsgKanji9151Tex[] = dgMsgKanji9151Tex; + +#define dgMsgKanji9152Tex "__OTR__textures/kanji/gMsgKanji9152Tex" +static const ALIGN_ASSET(2) char gMsgKanji9152Tex[] = dgMsgKanji9152Tex; + +#define dgMsgKanji9153Tex "__OTR__textures/kanji/gMsgKanji9153Tex" +static const ALIGN_ASSET(2) char gMsgKanji9153Tex[] = dgMsgKanji9153Tex; + +#define dgMsgKanji9154Tex "__OTR__textures/kanji/gMsgKanji9154Tex" +static const ALIGN_ASSET(2) char gMsgKanji9154Tex[] = dgMsgKanji9154Tex; + +#define dgMsgKanji9155Tex "__OTR__textures/kanji/gMsgKanji9155Tex" +static const ALIGN_ASSET(2) char gMsgKanji9155Tex[] = dgMsgKanji9155Tex; + +#define dgMsgKanji9156Tex "__OTR__textures/kanji/gMsgKanji9156Tex" +static const ALIGN_ASSET(2) char gMsgKanji9156Tex[] = dgMsgKanji9156Tex; + +#define dgMsgKanji9157Tex "__OTR__textures/kanji/gMsgKanji9157Tex" +static const ALIGN_ASSET(2) char gMsgKanji9157Tex[] = dgMsgKanji9157Tex; + +#define dgMsgKanji9158Tex "__OTR__textures/kanji/gMsgKanji9158Tex" +static const ALIGN_ASSET(2) char gMsgKanji9158Tex[] = dgMsgKanji9158Tex; + +#define dgMsgKanji9159Tex "__OTR__textures/kanji/gMsgKanji9159Tex" +static const ALIGN_ASSET(2) char gMsgKanji9159Tex[] = dgMsgKanji9159Tex; + +#define dgMsgKanji915ATex "__OTR__textures/kanji/gMsgKanji915ATex" +static const ALIGN_ASSET(2) char gMsgKanji915ATex[] = dgMsgKanji915ATex; + +#define dgMsgKanji915BTex "__OTR__textures/kanji/gMsgKanji915BTex" +static const ALIGN_ASSET(2) char gMsgKanji915BTex[] = dgMsgKanji915BTex; + +#define dgMsgKanji915CTex "__OTR__textures/kanji/gMsgKanji915CTex" +static const ALIGN_ASSET(2) char gMsgKanji915CTex[] = dgMsgKanji915CTex; + +#define dgMsgKanji915DTex "__OTR__textures/kanji/gMsgKanji915DTex" +static const ALIGN_ASSET(2) char gMsgKanji915DTex[] = dgMsgKanji915DTex; + +#define dgMsgKanji915ETex "__OTR__textures/kanji/gMsgKanji915ETex" +static const ALIGN_ASSET(2) char gMsgKanji915ETex[] = dgMsgKanji915ETex; + +#define dgMsgKanji915FTex "__OTR__textures/kanji/gMsgKanji915FTex" +static const ALIGN_ASSET(2) char gMsgKanji915FTex[] = dgMsgKanji915FTex; + +#define dgMsgKanji9160Tex "__OTR__textures/kanji/gMsgKanji9160Tex" +static const ALIGN_ASSET(2) char gMsgKanji9160Tex[] = dgMsgKanji9160Tex; + +#define dgMsgKanji9161Tex "__OTR__textures/kanji/gMsgKanji9161Tex" +static const ALIGN_ASSET(2) char gMsgKanji9161Tex[] = dgMsgKanji9161Tex; + +#define dgMsgKanji9162Tex "__OTR__textures/kanji/gMsgKanji9162Tex" +static const ALIGN_ASSET(2) char gMsgKanji9162Tex[] = dgMsgKanji9162Tex; + +#define dgMsgKanji9163Tex "__OTR__textures/kanji/gMsgKanji9163Tex" +static const ALIGN_ASSET(2) char gMsgKanji9163Tex[] = dgMsgKanji9163Tex; + +#define dgMsgKanji9164Tex "__OTR__textures/kanji/gMsgKanji9164Tex" +static const ALIGN_ASSET(2) char gMsgKanji9164Tex[] = dgMsgKanji9164Tex; + +#define dgMsgKanji9165Tex "__OTR__textures/kanji/gMsgKanji9165Tex" +static const ALIGN_ASSET(2) char gMsgKanji9165Tex[] = dgMsgKanji9165Tex; + +#define dgMsgKanji9166Tex "__OTR__textures/kanji/gMsgKanji9166Tex" +static const ALIGN_ASSET(2) char gMsgKanji9166Tex[] = dgMsgKanji9166Tex; + +#define dgMsgKanji9167Tex "__OTR__textures/kanji/gMsgKanji9167Tex" +static const ALIGN_ASSET(2) char gMsgKanji9167Tex[] = dgMsgKanji9167Tex; + +#define dgMsgKanji9168Tex "__OTR__textures/kanji/gMsgKanji9168Tex" +static const ALIGN_ASSET(2) char gMsgKanji9168Tex[] = dgMsgKanji9168Tex; + +#define dgMsgKanji9169Tex "__OTR__textures/kanji/gMsgKanji9169Tex" +static const ALIGN_ASSET(2) char gMsgKanji9169Tex[] = dgMsgKanji9169Tex; + +#define dgMsgKanji916ATex "__OTR__textures/kanji/gMsgKanji916ATex" +static const ALIGN_ASSET(2) char gMsgKanji916ATex[] = dgMsgKanji916ATex; + +#define dgMsgKanji916BTex "__OTR__textures/kanji/gMsgKanji916BTex" +static const ALIGN_ASSET(2) char gMsgKanji916BTex[] = dgMsgKanji916BTex; + +#define dgMsgKanji916CTex "__OTR__textures/kanji/gMsgKanji916CTex" +static const ALIGN_ASSET(2) char gMsgKanji916CTex[] = dgMsgKanji916CTex; + +#define dgMsgKanji916DTex "__OTR__textures/kanji/gMsgKanji916DTex" +static const ALIGN_ASSET(2) char gMsgKanji916DTex[] = dgMsgKanji916DTex; + +#define dgMsgKanji916ETex "__OTR__textures/kanji/gMsgKanji916ETex" +static const ALIGN_ASSET(2) char gMsgKanji916ETex[] = dgMsgKanji916ETex; + +#define dgMsgKanji916FTex "__OTR__textures/kanji/gMsgKanji916FTex" +static const ALIGN_ASSET(2) char gMsgKanji916FTex[] = dgMsgKanji916FTex; + +#define dgMsgKanji9170Tex "__OTR__textures/kanji/gMsgKanji9170Tex" +static const ALIGN_ASSET(2) char gMsgKanji9170Tex[] = dgMsgKanji9170Tex; + +#define dgMsgKanji9171Tex "__OTR__textures/kanji/gMsgKanji9171Tex" +static const ALIGN_ASSET(2) char gMsgKanji9171Tex[] = dgMsgKanji9171Tex; + +#define dgMsgKanji9172Tex "__OTR__textures/kanji/gMsgKanji9172Tex" +static const ALIGN_ASSET(2) char gMsgKanji9172Tex[] = dgMsgKanji9172Tex; + +#define dgMsgKanji9173Tex "__OTR__textures/kanji/gMsgKanji9173Tex" +static const ALIGN_ASSET(2) char gMsgKanji9173Tex[] = dgMsgKanji9173Tex; + +#define dgMsgKanji9174Tex "__OTR__textures/kanji/gMsgKanji9174Tex" +static const ALIGN_ASSET(2) char gMsgKanji9174Tex[] = dgMsgKanji9174Tex; + +#define dgMsgKanji9175Tex "__OTR__textures/kanji/gMsgKanji9175Tex" +static const ALIGN_ASSET(2) char gMsgKanji9175Tex[] = dgMsgKanji9175Tex; + +#define dgMsgKanji9176Tex "__OTR__textures/kanji/gMsgKanji9176Tex" +static const ALIGN_ASSET(2) char gMsgKanji9176Tex[] = dgMsgKanji9176Tex; + +#define dgMsgKanji9177Tex "__OTR__textures/kanji/gMsgKanji9177Tex" +static const ALIGN_ASSET(2) char gMsgKanji9177Tex[] = dgMsgKanji9177Tex; + +#define dgMsgKanji9178Tex "__OTR__textures/kanji/gMsgKanji9178Tex" +static const ALIGN_ASSET(2) char gMsgKanji9178Tex[] = dgMsgKanji9178Tex; + +#define dgMsgKanji9179Tex "__OTR__textures/kanji/gMsgKanji9179Tex" +static const ALIGN_ASSET(2) char gMsgKanji9179Tex[] = dgMsgKanji9179Tex; + +#define dgMsgKanji917ATex "__OTR__textures/kanji/gMsgKanji917ATex" +static const ALIGN_ASSET(2) char gMsgKanji917ATex[] = dgMsgKanji917ATex; + +#define dgMsgKanji917BTex "__OTR__textures/kanji/gMsgKanji917BTex" +static const ALIGN_ASSET(2) char gMsgKanji917BTex[] = dgMsgKanji917BTex; + +#define dgMsgKanji917CTex "__OTR__textures/kanji/gMsgKanji917CTex" +static const ALIGN_ASSET(2) char gMsgKanji917CTex[] = dgMsgKanji917CTex; + +#define dgMsgKanji917DTex "__OTR__textures/kanji/gMsgKanji917DTex" +static const ALIGN_ASSET(2) char gMsgKanji917DTex[] = dgMsgKanji917DTex; + +#define dgMsgKanji917ETex "__OTR__textures/kanji/gMsgKanji917ETex" +static const ALIGN_ASSET(2) char gMsgKanji917ETex[] = dgMsgKanji917ETex; + +#define dgMsgKanji9180Tex "__OTR__textures/kanji/gMsgKanji9180Tex" +static const ALIGN_ASSET(2) char gMsgKanji9180Tex[] = dgMsgKanji9180Tex; + +#define dgMsgKanji9181Tex "__OTR__textures/kanji/gMsgKanji9181Tex" +static const ALIGN_ASSET(2) char gMsgKanji9181Tex[] = dgMsgKanji9181Tex; + +#define dgMsgKanji9182Tex "__OTR__textures/kanji/gMsgKanji9182Tex" +static const ALIGN_ASSET(2) char gMsgKanji9182Tex[] = dgMsgKanji9182Tex; + +#define dgMsgKanji9183Tex "__OTR__textures/kanji/gMsgKanji9183Tex" +static const ALIGN_ASSET(2) char gMsgKanji9183Tex[] = dgMsgKanji9183Tex; + +#define dgMsgKanji9184Tex "__OTR__textures/kanji/gMsgKanji9184Tex" +static const ALIGN_ASSET(2) char gMsgKanji9184Tex[] = dgMsgKanji9184Tex; + +#define dgMsgKanji9185Tex "__OTR__textures/kanji/gMsgKanji9185Tex" +static const ALIGN_ASSET(2) char gMsgKanji9185Tex[] = dgMsgKanji9185Tex; + +#define dgMsgKanji9186Tex "__OTR__textures/kanji/gMsgKanji9186Tex" +static const ALIGN_ASSET(2) char gMsgKanji9186Tex[] = dgMsgKanji9186Tex; + +#define dgMsgKanji9187Tex "__OTR__textures/kanji/gMsgKanji9187Tex" +static const ALIGN_ASSET(2) char gMsgKanji9187Tex[] = dgMsgKanji9187Tex; + +#define dgMsgKanji9188Tex "__OTR__textures/kanji/gMsgKanji9188Tex" +static const ALIGN_ASSET(2) char gMsgKanji9188Tex[] = dgMsgKanji9188Tex; + +#define dgMsgKanji9189Tex "__OTR__textures/kanji/gMsgKanji9189Tex" +static const ALIGN_ASSET(2) char gMsgKanji9189Tex[] = dgMsgKanji9189Tex; + +#define dgMsgKanji918ATex "__OTR__textures/kanji/gMsgKanji918ATex" +static const ALIGN_ASSET(2) char gMsgKanji918ATex[] = dgMsgKanji918ATex; + +#define dgMsgKanji918BTex "__OTR__textures/kanji/gMsgKanji918BTex" +static const ALIGN_ASSET(2) char gMsgKanji918BTex[] = dgMsgKanji918BTex; + +#define dgMsgKanji918CTex "__OTR__textures/kanji/gMsgKanji918CTex" +static const ALIGN_ASSET(2) char gMsgKanji918CTex[] = dgMsgKanji918CTex; + +#define dgMsgKanji918DTex "__OTR__textures/kanji/gMsgKanji918DTex" +static const ALIGN_ASSET(2) char gMsgKanji918DTex[] = dgMsgKanji918DTex; + +#define dgMsgKanji918ETex "__OTR__textures/kanji/gMsgKanji918ETex" +static const ALIGN_ASSET(2) char gMsgKanji918ETex[] = dgMsgKanji918ETex; + +#define dgMsgKanji918FTex "__OTR__textures/kanji/gMsgKanji918FTex" +static const ALIGN_ASSET(2) char gMsgKanji918FTex[] = dgMsgKanji918FTex; + +#define dgMsgKanji9190Tex "__OTR__textures/kanji/gMsgKanji9190Tex" +static const ALIGN_ASSET(2) char gMsgKanji9190Tex[] = dgMsgKanji9190Tex; + +#define dgMsgKanji9191Tex "__OTR__textures/kanji/gMsgKanji9191Tex" +static const ALIGN_ASSET(2) char gMsgKanji9191Tex[] = dgMsgKanji9191Tex; + +#define dgMsgKanji9192Tex "__OTR__textures/kanji/gMsgKanji9192Tex" +static const ALIGN_ASSET(2) char gMsgKanji9192Tex[] = dgMsgKanji9192Tex; + +#define dgMsgKanji9193Tex "__OTR__textures/kanji/gMsgKanji9193Tex" +static const ALIGN_ASSET(2) char gMsgKanji9193Tex[] = dgMsgKanji9193Tex; + +#define dgMsgKanji9194Tex "__OTR__textures/kanji/gMsgKanji9194Tex" +static const ALIGN_ASSET(2) char gMsgKanji9194Tex[] = dgMsgKanji9194Tex; + +#define dgMsgKanji9195Tex "__OTR__textures/kanji/gMsgKanji9195Tex" +static const ALIGN_ASSET(2) char gMsgKanji9195Tex[] = dgMsgKanji9195Tex; + +#define dgMsgKanji9196Tex "__OTR__textures/kanji/gMsgKanji9196Tex" +static const ALIGN_ASSET(2) char gMsgKanji9196Tex[] = dgMsgKanji9196Tex; + +#define dgMsgKanji9197Tex "__OTR__textures/kanji/gMsgKanji9197Tex" +static const ALIGN_ASSET(2) char gMsgKanji9197Tex[] = dgMsgKanji9197Tex; + +#define dgMsgKanji9198Tex "__OTR__textures/kanji/gMsgKanji9198Tex" +static const ALIGN_ASSET(2) char gMsgKanji9198Tex[] = dgMsgKanji9198Tex; + +#define dgMsgKanji9199Tex "__OTR__textures/kanji/gMsgKanji9199Tex" +static const ALIGN_ASSET(2) char gMsgKanji9199Tex[] = dgMsgKanji9199Tex; + +#define dgMsgKanji919ATex "__OTR__textures/kanji/gMsgKanji919ATex" +static const ALIGN_ASSET(2) char gMsgKanji919ATex[] = dgMsgKanji919ATex; + +#define dgMsgKanji919BTex "__OTR__textures/kanji/gMsgKanji919BTex" +static const ALIGN_ASSET(2) char gMsgKanji919BTex[] = dgMsgKanji919BTex; + +#define dgMsgKanji919CTex "__OTR__textures/kanji/gMsgKanji919CTex" +static const ALIGN_ASSET(2) char gMsgKanji919CTex[] = dgMsgKanji919CTex; + +#define dgMsgKanji919DTex "__OTR__textures/kanji/gMsgKanji919DTex" +static const ALIGN_ASSET(2) char gMsgKanji919DTex[] = dgMsgKanji919DTex; + +#define dgMsgKanji919ETex "__OTR__textures/kanji/gMsgKanji919ETex" +static const ALIGN_ASSET(2) char gMsgKanji919ETex[] = dgMsgKanji919ETex; + +#define dgMsgKanji919FTex "__OTR__textures/kanji/gMsgKanji919FTex" +static const ALIGN_ASSET(2) char gMsgKanji919FTex[] = dgMsgKanji919FTex; + +#define dgMsgKanji91A0Tex "__OTR__textures/kanji/gMsgKanji91A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A0Tex[] = dgMsgKanji91A0Tex; + +#define dgMsgKanji91A1Tex "__OTR__textures/kanji/gMsgKanji91A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A1Tex[] = dgMsgKanji91A1Tex; + +#define dgMsgKanji91A2Tex "__OTR__textures/kanji/gMsgKanji91A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A2Tex[] = dgMsgKanji91A2Tex; + +#define dgMsgKanji91A3Tex "__OTR__textures/kanji/gMsgKanji91A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A3Tex[] = dgMsgKanji91A3Tex; + +#define dgMsgKanji91A4Tex "__OTR__textures/kanji/gMsgKanji91A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A4Tex[] = dgMsgKanji91A4Tex; + +#define dgMsgKanji91A5Tex "__OTR__textures/kanji/gMsgKanji91A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A5Tex[] = dgMsgKanji91A5Tex; + +#define dgMsgKanji91A6Tex "__OTR__textures/kanji/gMsgKanji91A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A6Tex[] = dgMsgKanji91A6Tex; + +#define dgMsgKanji91A7Tex "__OTR__textures/kanji/gMsgKanji91A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A7Tex[] = dgMsgKanji91A7Tex; + +#define dgMsgKanji91A8Tex "__OTR__textures/kanji/gMsgKanji91A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A8Tex[] = dgMsgKanji91A8Tex; + +#define dgMsgKanji91A9Tex "__OTR__textures/kanji/gMsgKanji91A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji91A9Tex[] = dgMsgKanji91A9Tex; + +#define dgMsgKanji91AATex "__OTR__textures/kanji/gMsgKanji91AATex" +static const ALIGN_ASSET(2) char gMsgKanji91AATex[] = dgMsgKanji91AATex; + +#define dgMsgKanji91ABTex "__OTR__textures/kanji/gMsgKanji91ABTex" +static const ALIGN_ASSET(2) char gMsgKanji91ABTex[] = dgMsgKanji91ABTex; + +#define dgMsgKanji91ACTex "__OTR__textures/kanji/gMsgKanji91ACTex" +static const ALIGN_ASSET(2) char gMsgKanji91ACTex[] = dgMsgKanji91ACTex; + +#define dgMsgKanji91ADTex "__OTR__textures/kanji/gMsgKanji91ADTex" +static const ALIGN_ASSET(2) char gMsgKanji91ADTex[] = dgMsgKanji91ADTex; + +#define dgMsgKanji91AETex "__OTR__textures/kanji/gMsgKanji91AETex" +static const ALIGN_ASSET(2) char gMsgKanji91AETex[] = dgMsgKanji91AETex; + +#define dgMsgKanji91AFTex "__OTR__textures/kanji/gMsgKanji91AFTex" +static const ALIGN_ASSET(2) char gMsgKanji91AFTex[] = dgMsgKanji91AFTex; + +#define dgMsgKanji91B0Tex "__OTR__textures/kanji/gMsgKanji91B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B0Tex[] = dgMsgKanji91B0Tex; + +#define dgMsgKanji91B1Tex "__OTR__textures/kanji/gMsgKanji91B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B1Tex[] = dgMsgKanji91B1Tex; + +#define dgMsgKanji91B2Tex "__OTR__textures/kanji/gMsgKanji91B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B2Tex[] = dgMsgKanji91B2Tex; + +#define dgMsgKanji91B3Tex "__OTR__textures/kanji/gMsgKanji91B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B3Tex[] = dgMsgKanji91B3Tex; + +#define dgMsgKanji91B4Tex "__OTR__textures/kanji/gMsgKanji91B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B4Tex[] = dgMsgKanji91B4Tex; + +#define dgMsgKanji91B5Tex "__OTR__textures/kanji/gMsgKanji91B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B5Tex[] = dgMsgKanji91B5Tex; + +#define dgMsgKanji91B6Tex "__OTR__textures/kanji/gMsgKanji91B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B6Tex[] = dgMsgKanji91B6Tex; + +#define dgMsgKanji91B7Tex "__OTR__textures/kanji/gMsgKanji91B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B7Tex[] = dgMsgKanji91B7Tex; + +#define dgMsgKanji91B8Tex "__OTR__textures/kanji/gMsgKanji91B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B8Tex[] = dgMsgKanji91B8Tex; + +#define dgMsgKanji91B9Tex "__OTR__textures/kanji/gMsgKanji91B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji91B9Tex[] = dgMsgKanji91B9Tex; + +#define dgMsgKanji91BATex "__OTR__textures/kanji/gMsgKanji91BATex" +static const ALIGN_ASSET(2) char gMsgKanji91BATex[] = dgMsgKanji91BATex; + +#define dgMsgKanji91BBTex "__OTR__textures/kanji/gMsgKanji91BBTex" +static const ALIGN_ASSET(2) char gMsgKanji91BBTex[] = dgMsgKanji91BBTex; + +#define dgMsgKanji91BCTex "__OTR__textures/kanji/gMsgKanji91BCTex" +static const ALIGN_ASSET(2) char gMsgKanji91BCTex[] = dgMsgKanji91BCTex; + +#define dgMsgKanji91BDTex "__OTR__textures/kanji/gMsgKanji91BDTex" +static const ALIGN_ASSET(2) char gMsgKanji91BDTex[] = dgMsgKanji91BDTex; + +#define dgMsgKanji91BETex "__OTR__textures/kanji/gMsgKanji91BETex" +static const ALIGN_ASSET(2) char gMsgKanji91BETex[] = dgMsgKanji91BETex; + +#define dgMsgKanji91BFTex "__OTR__textures/kanji/gMsgKanji91BFTex" +static const ALIGN_ASSET(2) char gMsgKanji91BFTex[] = dgMsgKanji91BFTex; + +#define dgMsgKanji91C0Tex "__OTR__textures/kanji/gMsgKanji91C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C0Tex[] = dgMsgKanji91C0Tex; + +#define dgMsgKanji91C1Tex "__OTR__textures/kanji/gMsgKanji91C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C1Tex[] = dgMsgKanji91C1Tex; + +#define dgMsgKanji91C2Tex "__OTR__textures/kanji/gMsgKanji91C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C2Tex[] = dgMsgKanji91C2Tex; + +#define dgMsgKanji91C3Tex "__OTR__textures/kanji/gMsgKanji91C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C3Tex[] = dgMsgKanji91C3Tex; + +#define dgMsgKanji91C4Tex "__OTR__textures/kanji/gMsgKanji91C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C4Tex[] = dgMsgKanji91C4Tex; + +#define dgMsgKanji91C5Tex "__OTR__textures/kanji/gMsgKanji91C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C5Tex[] = dgMsgKanji91C5Tex; + +#define dgMsgKanji91C6Tex "__OTR__textures/kanji/gMsgKanji91C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C6Tex[] = dgMsgKanji91C6Tex; + +#define dgMsgKanji91C7Tex "__OTR__textures/kanji/gMsgKanji91C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C7Tex[] = dgMsgKanji91C7Tex; + +#define dgMsgKanji91C8Tex "__OTR__textures/kanji/gMsgKanji91C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C8Tex[] = dgMsgKanji91C8Tex; + +#define dgMsgKanji91C9Tex "__OTR__textures/kanji/gMsgKanji91C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji91C9Tex[] = dgMsgKanji91C9Tex; + +#define dgMsgKanji91CATex "__OTR__textures/kanji/gMsgKanji91CATex" +static const ALIGN_ASSET(2) char gMsgKanji91CATex[] = dgMsgKanji91CATex; + +#define dgMsgKanji91CBTex "__OTR__textures/kanji/gMsgKanji91CBTex" +static const ALIGN_ASSET(2) char gMsgKanji91CBTex[] = dgMsgKanji91CBTex; + +#define dgMsgKanji91CCTex "__OTR__textures/kanji/gMsgKanji91CCTex" +static const ALIGN_ASSET(2) char gMsgKanji91CCTex[] = dgMsgKanji91CCTex; + +#define dgMsgKanji91CDTex "__OTR__textures/kanji/gMsgKanji91CDTex" +static const ALIGN_ASSET(2) char gMsgKanji91CDTex[] = dgMsgKanji91CDTex; + +#define dgMsgKanji91CETex "__OTR__textures/kanji/gMsgKanji91CETex" +static const ALIGN_ASSET(2) char gMsgKanji91CETex[] = dgMsgKanji91CETex; + +#define dgMsgKanji91CFTex "__OTR__textures/kanji/gMsgKanji91CFTex" +static const ALIGN_ASSET(2) char gMsgKanji91CFTex[] = dgMsgKanji91CFTex; + +#define dgMsgKanji91D0Tex "__OTR__textures/kanji/gMsgKanji91D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D0Tex[] = dgMsgKanji91D0Tex; + +#define dgMsgKanji91D1Tex "__OTR__textures/kanji/gMsgKanji91D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D1Tex[] = dgMsgKanji91D1Tex; + +#define dgMsgKanji91D2Tex "__OTR__textures/kanji/gMsgKanji91D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D2Tex[] = dgMsgKanji91D2Tex; + +#define dgMsgKanji91D3Tex "__OTR__textures/kanji/gMsgKanji91D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D3Tex[] = dgMsgKanji91D3Tex; + +#define dgMsgKanji91D4Tex "__OTR__textures/kanji/gMsgKanji91D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D4Tex[] = dgMsgKanji91D4Tex; + +#define dgMsgKanji91D5Tex "__OTR__textures/kanji/gMsgKanji91D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D5Tex[] = dgMsgKanji91D5Tex; + +#define dgMsgKanji91D6Tex "__OTR__textures/kanji/gMsgKanji91D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D6Tex[] = dgMsgKanji91D6Tex; + +#define dgMsgKanji91D7Tex "__OTR__textures/kanji/gMsgKanji91D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D7Tex[] = dgMsgKanji91D7Tex; + +#define dgMsgKanji91D8Tex "__OTR__textures/kanji/gMsgKanji91D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D8Tex[] = dgMsgKanji91D8Tex; + +#define dgMsgKanji91D9Tex "__OTR__textures/kanji/gMsgKanji91D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji91D9Tex[] = dgMsgKanji91D9Tex; + +#define dgMsgKanji91DATex "__OTR__textures/kanji/gMsgKanji91DATex" +static const ALIGN_ASSET(2) char gMsgKanji91DATex[] = dgMsgKanji91DATex; + +#define dgMsgKanji91DBTex "__OTR__textures/kanji/gMsgKanji91DBTex" +static const ALIGN_ASSET(2) char gMsgKanji91DBTex[] = dgMsgKanji91DBTex; + +#define dgMsgKanji91DCTex "__OTR__textures/kanji/gMsgKanji91DCTex" +static const ALIGN_ASSET(2) char gMsgKanji91DCTex[] = dgMsgKanji91DCTex; + +#define dgMsgKanji91DDTex "__OTR__textures/kanji/gMsgKanji91DDTex" +static const ALIGN_ASSET(2) char gMsgKanji91DDTex[] = dgMsgKanji91DDTex; + +#define dgMsgKanji91DETex "__OTR__textures/kanji/gMsgKanji91DETex" +static const ALIGN_ASSET(2) char gMsgKanji91DETex[] = dgMsgKanji91DETex; + +#define dgMsgKanji91DFTex "__OTR__textures/kanji/gMsgKanji91DFTex" +static const ALIGN_ASSET(2) char gMsgKanji91DFTex[] = dgMsgKanji91DFTex; + +#define dgMsgKanji91E0Tex "__OTR__textures/kanji/gMsgKanji91E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E0Tex[] = dgMsgKanji91E0Tex; + +#define dgMsgKanji91E1Tex "__OTR__textures/kanji/gMsgKanji91E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E1Tex[] = dgMsgKanji91E1Tex; + +#define dgMsgKanji91E2Tex "__OTR__textures/kanji/gMsgKanji91E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E2Tex[] = dgMsgKanji91E2Tex; + +#define dgMsgKanji91E3Tex "__OTR__textures/kanji/gMsgKanji91E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E3Tex[] = dgMsgKanji91E3Tex; + +#define dgMsgKanji91E4Tex "__OTR__textures/kanji/gMsgKanji91E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E4Tex[] = dgMsgKanji91E4Tex; + +#define dgMsgKanji91E5Tex "__OTR__textures/kanji/gMsgKanji91E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E5Tex[] = dgMsgKanji91E5Tex; + +#define dgMsgKanji91E6Tex "__OTR__textures/kanji/gMsgKanji91E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E6Tex[] = dgMsgKanji91E6Tex; + +#define dgMsgKanji91E7Tex "__OTR__textures/kanji/gMsgKanji91E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E7Tex[] = dgMsgKanji91E7Tex; + +#define dgMsgKanji91E8Tex "__OTR__textures/kanji/gMsgKanji91E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E8Tex[] = dgMsgKanji91E8Tex; + +#define dgMsgKanji91E9Tex "__OTR__textures/kanji/gMsgKanji91E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji91E9Tex[] = dgMsgKanji91E9Tex; + +#define dgMsgKanji91EATex "__OTR__textures/kanji/gMsgKanji91EATex" +static const ALIGN_ASSET(2) char gMsgKanji91EATex[] = dgMsgKanji91EATex; + +#define dgMsgKanji91EBTex "__OTR__textures/kanji/gMsgKanji91EBTex" +static const ALIGN_ASSET(2) char gMsgKanji91EBTex[] = dgMsgKanji91EBTex; + +#define dgMsgKanji91ECTex "__OTR__textures/kanji/gMsgKanji91ECTex" +static const ALIGN_ASSET(2) char gMsgKanji91ECTex[] = dgMsgKanji91ECTex; + +#define dgMsgKanji91EDTex "__OTR__textures/kanji/gMsgKanji91EDTex" +static const ALIGN_ASSET(2) char gMsgKanji91EDTex[] = dgMsgKanji91EDTex; + +#define dgMsgKanji91EETex "__OTR__textures/kanji/gMsgKanji91EETex" +static const ALIGN_ASSET(2) char gMsgKanji91EETex[] = dgMsgKanji91EETex; + +#define dgMsgKanji91EFTex "__OTR__textures/kanji/gMsgKanji91EFTex" +static const ALIGN_ASSET(2) char gMsgKanji91EFTex[] = dgMsgKanji91EFTex; + +#define dgMsgKanji91F0Tex "__OTR__textures/kanji/gMsgKanji91F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F0Tex[] = dgMsgKanji91F0Tex; + +#define dgMsgKanji91F1Tex "__OTR__textures/kanji/gMsgKanji91F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F1Tex[] = dgMsgKanji91F1Tex; + +#define dgMsgKanji91F2Tex "__OTR__textures/kanji/gMsgKanji91F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F2Tex[] = dgMsgKanji91F2Tex; + +#define dgMsgKanji91F3Tex "__OTR__textures/kanji/gMsgKanji91F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F3Tex[] = dgMsgKanji91F3Tex; + +#define dgMsgKanji91F4Tex "__OTR__textures/kanji/gMsgKanji91F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F4Tex[] = dgMsgKanji91F4Tex; + +#define dgMsgKanji91F5Tex "__OTR__textures/kanji/gMsgKanji91F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F5Tex[] = dgMsgKanji91F5Tex; + +#define dgMsgKanji91F6Tex "__OTR__textures/kanji/gMsgKanji91F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F6Tex[] = dgMsgKanji91F6Tex; + +#define dgMsgKanji91F7Tex "__OTR__textures/kanji/gMsgKanji91F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F7Tex[] = dgMsgKanji91F7Tex; + +#define dgMsgKanji91F8Tex "__OTR__textures/kanji/gMsgKanji91F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F8Tex[] = dgMsgKanji91F8Tex; + +#define dgMsgKanji91F9Tex "__OTR__textures/kanji/gMsgKanji91F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji91F9Tex[] = dgMsgKanji91F9Tex; + +#define dgMsgKanji91FATex "__OTR__textures/kanji/gMsgKanji91FATex" +static const ALIGN_ASSET(2) char gMsgKanji91FATex[] = dgMsgKanji91FATex; + +#define dgMsgKanji91FBTex "__OTR__textures/kanji/gMsgKanji91FBTex" +static const ALIGN_ASSET(2) char gMsgKanji91FBTex[] = dgMsgKanji91FBTex; + +#define dgMsgKanji91FCTex "__OTR__textures/kanji/gMsgKanji91FCTex" +static const ALIGN_ASSET(2) char gMsgKanji91FCTex[] = dgMsgKanji91FCTex; + +#define dgMsgKanji9240Tex "__OTR__textures/kanji/gMsgKanji9240Tex" +static const ALIGN_ASSET(2) char gMsgKanji9240Tex[] = dgMsgKanji9240Tex; + +#define dgMsgKanji9241Tex "__OTR__textures/kanji/gMsgKanji9241Tex" +static const ALIGN_ASSET(2) char gMsgKanji9241Tex[] = dgMsgKanji9241Tex; + +#define dgMsgKanji9242Tex "__OTR__textures/kanji/gMsgKanji9242Tex" +static const ALIGN_ASSET(2) char gMsgKanji9242Tex[] = dgMsgKanji9242Tex; + +#define dgMsgKanji9243Tex "__OTR__textures/kanji/gMsgKanji9243Tex" +static const ALIGN_ASSET(2) char gMsgKanji9243Tex[] = dgMsgKanji9243Tex; + +#define dgMsgKanji9244Tex "__OTR__textures/kanji/gMsgKanji9244Tex" +static const ALIGN_ASSET(2) char gMsgKanji9244Tex[] = dgMsgKanji9244Tex; + +#define dgMsgKanji9245Tex "__OTR__textures/kanji/gMsgKanji9245Tex" +static const ALIGN_ASSET(2) char gMsgKanji9245Tex[] = dgMsgKanji9245Tex; + +#define dgMsgKanji9246Tex "__OTR__textures/kanji/gMsgKanji9246Tex" +static const ALIGN_ASSET(2) char gMsgKanji9246Tex[] = dgMsgKanji9246Tex; + +#define dgMsgKanji9247Tex "__OTR__textures/kanji/gMsgKanji9247Tex" +static const ALIGN_ASSET(2) char gMsgKanji9247Tex[] = dgMsgKanji9247Tex; + +#define dgMsgKanji9248Tex "__OTR__textures/kanji/gMsgKanji9248Tex" +static const ALIGN_ASSET(2) char gMsgKanji9248Tex[] = dgMsgKanji9248Tex; + +#define dgMsgKanji9249Tex "__OTR__textures/kanji/gMsgKanji9249Tex" +static const ALIGN_ASSET(2) char gMsgKanji9249Tex[] = dgMsgKanji9249Tex; + +#define dgMsgKanji924ATex "__OTR__textures/kanji/gMsgKanji924ATex" +static const ALIGN_ASSET(2) char gMsgKanji924ATex[] = dgMsgKanji924ATex; + +#define dgMsgKanji924BTex "__OTR__textures/kanji/gMsgKanji924BTex" +static const ALIGN_ASSET(2) char gMsgKanji924BTex[] = dgMsgKanji924BTex; + +#define dgMsgKanji924CTex "__OTR__textures/kanji/gMsgKanji924CTex" +static const ALIGN_ASSET(2) char gMsgKanji924CTex[] = dgMsgKanji924CTex; + +#define dgMsgKanji924DTex "__OTR__textures/kanji/gMsgKanji924DTex" +static const ALIGN_ASSET(2) char gMsgKanji924DTex[] = dgMsgKanji924DTex; + +#define dgMsgKanji924ETex "__OTR__textures/kanji/gMsgKanji924ETex" +static const ALIGN_ASSET(2) char gMsgKanji924ETex[] = dgMsgKanji924ETex; + +#define dgMsgKanji924FTex "__OTR__textures/kanji/gMsgKanji924FTex" +static const ALIGN_ASSET(2) char gMsgKanji924FTex[] = dgMsgKanji924FTex; + +#define dgMsgKanji9250Tex "__OTR__textures/kanji/gMsgKanji9250Tex" +static const ALIGN_ASSET(2) char gMsgKanji9250Tex[] = dgMsgKanji9250Tex; + +#define dgMsgKanji9251Tex "__OTR__textures/kanji/gMsgKanji9251Tex" +static const ALIGN_ASSET(2) char gMsgKanji9251Tex[] = dgMsgKanji9251Tex; + +#define dgMsgKanji9252Tex "__OTR__textures/kanji/gMsgKanji9252Tex" +static const ALIGN_ASSET(2) char gMsgKanji9252Tex[] = dgMsgKanji9252Tex; + +#define dgMsgKanji9253Tex "__OTR__textures/kanji/gMsgKanji9253Tex" +static const ALIGN_ASSET(2) char gMsgKanji9253Tex[] = dgMsgKanji9253Tex; + +#define dgMsgKanji9254Tex "__OTR__textures/kanji/gMsgKanji9254Tex" +static const ALIGN_ASSET(2) char gMsgKanji9254Tex[] = dgMsgKanji9254Tex; + +#define dgMsgKanji9255Tex "__OTR__textures/kanji/gMsgKanji9255Tex" +static const ALIGN_ASSET(2) char gMsgKanji9255Tex[] = dgMsgKanji9255Tex; + +#define dgMsgKanji9256Tex "__OTR__textures/kanji/gMsgKanji9256Tex" +static const ALIGN_ASSET(2) char gMsgKanji9256Tex[] = dgMsgKanji9256Tex; + +#define dgMsgKanji9257Tex "__OTR__textures/kanji/gMsgKanji9257Tex" +static const ALIGN_ASSET(2) char gMsgKanji9257Tex[] = dgMsgKanji9257Tex; + +#define dgMsgKanji9258Tex "__OTR__textures/kanji/gMsgKanji9258Tex" +static const ALIGN_ASSET(2) char gMsgKanji9258Tex[] = dgMsgKanji9258Tex; + +#define dgMsgKanji9259Tex "__OTR__textures/kanji/gMsgKanji9259Tex" +static const ALIGN_ASSET(2) char gMsgKanji9259Tex[] = dgMsgKanji9259Tex; + +#define dgMsgKanji925ATex "__OTR__textures/kanji/gMsgKanji925ATex" +static const ALIGN_ASSET(2) char gMsgKanji925ATex[] = dgMsgKanji925ATex; + +#define dgMsgKanji925BTex "__OTR__textures/kanji/gMsgKanji925BTex" +static const ALIGN_ASSET(2) char gMsgKanji925BTex[] = dgMsgKanji925BTex; + +#define dgMsgKanji925CTex "__OTR__textures/kanji/gMsgKanji925CTex" +static const ALIGN_ASSET(2) char gMsgKanji925CTex[] = dgMsgKanji925CTex; + +#define dgMsgKanji925DTex "__OTR__textures/kanji/gMsgKanji925DTex" +static const ALIGN_ASSET(2) char gMsgKanji925DTex[] = dgMsgKanji925DTex; + +#define dgMsgKanji925ETex "__OTR__textures/kanji/gMsgKanji925ETex" +static const ALIGN_ASSET(2) char gMsgKanji925ETex[] = dgMsgKanji925ETex; + +#define dgMsgKanji925FTex "__OTR__textures/kanji/gMsgKanji925FTex" +static const ALIGN_ASSET(2) char gMsgKanji925FTex[] = dgMsgKanji925FTex; + +#define dgMsgKanji9260Tex "__OTR__textures/kanji/gMsgKanji9260Tex" +static const ALIGN_ASSET(2) char gMsgKanji9260Tex[] = dgMsgKanji9260Tex; + +#define dgMsgKanji9261Tex "__OTR__textures/kanji/gMsgKanji9261Tex" +static const ALIGN_ASSET(2) char gMsgKanji9261Tex[] = dgMsgKanji9261Tex; + +#define dgMsgKanji9262Tex "__OTR__textures/kanji/gMsgKanji9262Tex" +static const ALIGN_ASSET(2) char gMsgKanji9262Tex[] = dgMsgKanji9262Tex; + +#define dgMsgKanji9263Tex "__OTR__textures/kanji/gMsgKanji9263Tex" +static const ALIGN_ASSET(2) char gMsgKanji9263Tex[] = dgMsgKanji9263Tex; + +#define dgMsgKanji9264Tex "__OTR__textures/kanji/gMsgKanji9264Tex" +static const ALIGN_ASSET(2) char gMsgKanji9264Tex[] = dgMsgKanji9264Tex; + +#define dgMsgKanji9265Tex "__OTR__textures/kanji/gMsgKanji9265Tex" +static const ALIGN_ASSET(2) char gMsgKanji9265Tex[] = dgMsgKanji9265Tex; + +#define dgMsgKanji9266Tex "__OTR__textures/kanji/gMsgKanji9266Tex" +static const ALIGN_ASSET(2) char gMsgKanji9266Tex[] = dgMsgKanji9266Tex; + +#define dgMsgKanji9267Tex "__OTR__textures/kanji/gMsgKanji9267Tex" +static const ALIGN_ASSET(2) char gMsgKanji9267Tex[] = dgMsgKanji9267Tex; + +#define dgMsgKanji9268Tex "__OTR__textures/kanji/gMsgKanji9268Tex" +static const ALIGN_ASSET(2) char gMsgKanji9268Tex[] = dgMsgKanji9268Tex; + +#define dgMsgKanji9269Tex "__OTR__textures/kanji/gMsgKanji9269Tex" +static const ALIGN_ASSET(2) char gMsgKanji9269Tex[] = dgMsgKanji9269Tex; + +#define dgMsgKanji926ATex "__OTR__textures/kanji/gMsgKanji926ATex" +static const ALIGN_ASSET(2) char gMsgKanji926ATex[] = dgMsgKanji926ATex; + +#define dgMsgKanji926BTex "__OTR__textures/kanji/gMsgKanji926BTex" +static const ALIGN_ASSET(2) char gMsgKanji926BTex[] = dgMsgKanji926BTex; + +#define dgMsgKanji926CTex "__OTR__textures/kanji/gMsgKanji926CTex" +static const ALIGN_ASSET(2) char gMsgKanji926CTex[] = dgMsgKanji926CTex; + +#define dgMsgKanji926DTex "__OTR__textures/kanji/gMsgKanji926DTex" +static const ALIGN_ASSET(2) char gMsgKanji926DTex[] = dgMsgKanji926DTex; + +#define dgMsgKanji926ETex "__OTR__textures/kanji/gMsgKanji926ETex" +static const ALIGN_ASSET(2) char gMsgKanji926ETex[] = dgMsgKanji926ETex; + +#define dgMsgKanji926FTex "__OTR__textures/kanji/gMsgKanji926FTex" +static const ALIGN_ASSET(2) char gMsgKanji926FTex[] = dgMsgKanji926FTex; + +#define dgMsgKanji9270Tex "__OTR__textures/kanji/gMsgKanji9270Tex" +static const ALIGN_ASSET(2) char gMsgKanji9270Tex[] = dgMsgKanji9270Tex; + +#define dgMsgKanji9271Tex "__OTR__textures/kanji/gMsgKanji9271Tex" +static const ALIGN_ASSET(2) char gMsgKanji9271Tex[] = dgMsgKanji9271Tex; + +#define dgMsgKanji9272Tex "__OTR__textures/kanji/gMsgKanji9272Tex" +static const ALIGN_ASSET(2) char gMsgKanji9272Tex[] = dgMsgKanji9272Tex; + +#define dgMsgKanji9273Tex "__OTR__textures/kanji/gMsgKanji9273Tex" +static const ALIGN_ASSET(2) char gMsgKanji9273Tex[] = dgMsgKanji9273Tex; + +#define dgMsgKanji9274Tex "__OTR__textures/kanji/gMsgKanji9274Tex" +static const ALIGN_ASSET(2) char gMsgKanji9274Tex[] = dgMsgKanji9274Tex; + +#define dgMsgKanji9275Tex "__OTR__textures/kanji/gMsgKanji9275Tex" +static const ALIGN_ASSET(2) char gMsgKanji9275Tex[] = dgMsgKanji9275Tex; + +#define dgMsgKanji9276Tex "__OTR__textures/kanji/gMsgKanji9276Tex" +static const ALIGN_ASSET(2) char gMsgKanji9276Tex[] = dgMsgKanji9276Tex; + +#define dgMsgKanji9277Tex "__OTR__textures/kanji/gMsgKanji9277Tex" +static const ALIGN_ASSET(2) char gMsgKanji9277Tex[] = dgMsgKanji9277Tex; + +#define dgMsgKanji9278Tex "__OTR__textures/kanji/gMsgKanji9278Tex" +static const ALIGN_ASSET(2) char gMsgKanji9278Tex[] = dgMsgKanji9278Tex; + +#define dgMsgKanji9279Tex "__OTR__textures/kanji/gMsgKanji9279Tex" +static const ALIGN_ASSET(2) char gMsgKanji9279Tex[] = dgMsgKanji9279Tex; + +#define dgMsgKanji927ATex "__OTR__textures/kanji/gMsgKanji927ATex" +static const ALIGN_ASSET(2) char gMsgKanji927ATex[] = dgMsgKanji927ATex; + +#define dgMsgKanji927BTex "__OTR__textures/kanji/gMsgKanji927BTex" +static const ALIGN_ASSET(2) char gMsgKanji927BTex[] = dgMsgKanji927BTex; + +#define dgMsgKanji927CTex "__OTR__textures/kanji/gMsgKanji927CTex" +static const ALIGN_ASSET(2) char gMsgKanji927CTex[] = dgMsgKanji927CTex; + +#define dgMsgKanji927DTex "__OTR__textures/kanji/gMsgKanji927DTex" +static const ALIGN_ASSET(2) char gMsgKanji927DTex[] = dgMsgKanji927DTex; + +#define dgMsgKanji927ETex "__OTR__textures/kanji/gMsgKanji927ETex" +static const ALIGN_ASSET(2) char gMsgKanji927ETex[] = dgMsgKanji927ETex; + +#define dgMsgKanji9280Tex "__OTR__textures/kanji/gMsgKanji9280Tex" +static const ALIGN_ASSET(2) char gMsgKanji9280Tex[] = dgMsgKanji9280Tex; + +#define dgMsgKanji9281Tex "__OTR__textures/kanji/gMsgKanji9281Tex" +static const ALIGN_ASSET(2) char gMsgKanji9281Tex[] = dgMsgKanji9281Tex; + +#define dgMsgKanji9282Tex "__OTR__textures/kanji/gMsgKanji9282Tex" +static const ALIGN_ASSET(2) char gMsgKanji9282Tex[] = dgMsgKanji9282Tex; + +#define dgMsgKanji9283Tex "__OTR__textures/kanji/gMsgKanji9283Tex" +static const ALIGN_ASSET(2) char gMsgKanji9283Tex[] = dgMsgKanji9283Tex; + +#define dgMsgKanji9284Tex "__OTR__textures/kanji/gMsgKanji9284Tex" +static const ALIGN_ASSET(2) char gMsgKanji9284Tex[] = dgMsgKanji9284Tex; + +#define dgMsgKanji9285Tex "__OTR__textures/kanji/gMsgKanji9285Tex" +static const ALIGN_ASSET(2) char gMsgKanji9285Tex[] = dgMsgKanji9285Tex; + +#define dgMsgKanji9286Tex "__OTR__textures/kanji/gMsgKanji9286Tex" +static const ALIGN_ASSET(2) char gMsgKanji9286Tex[] = dgMsgKanji9286Tex; + +#define dgMsgKanji9287Tex "__OTR__textures/kanji/gMsgKanji9287Tex" +static const ALIGN_ASSET(2) char gMsgKanji9287Tex[] = dgMsgKanji9287Tex; + +#define dgMsgKanji9288Tex "__OTR__textures/kanji/gMsgKanji9288Tex" +static const ALIGN_ASSET(2) char gMsgKanji9288Tex[] = dgMsgKanji9288Tex; + +#define dgMsgKanji9289Tex "__OTR__textures/kanji/gMsgKanji9289Tex" +static const ALIGN_ASSET(2) char gMsgKanji9289Tex[] = dgMsgKanji9289Tex; + +#define dgMsgKanji928ATex "__OTR__textures/kanji/gMsgKanji928ATex" +static const ALIGN_ASSET(2) char gMsgKanji928ATex[] = dgMsgKanji928ATex; + +#define dgMsgKanji928BTex "__OTR__textures/kanji/gMsgKanji928BTex" +static const ALIGN_ASSET(2) char gMsgKanji928BTex[] = dgMsgKanji928BTex; + +#define dgMsgKanji928CTex "__OTR__textures/kanji/gMsgKanji928CTex" +static const ALIGN_ASSET(2) char gMsgKanji928CTex[] = dgMsgKanji928CTex; + +#define dgMsgKanji928DTex "__OTR__textures/kanji/gMsgKanji928DTex" +static const ALIGN_ASSET(2) char gMsgKanji928DTex[] = dgMsgKanji928DTex; + +#define dgMsgKanji928ETex "__OTR__textures/kanji/gMsgKanji928ETex" +static const ALIGN_ASSET(2) char gMsgKanji928ETex[] = dgMsgKanji928ETex; + +#define dgMsgKanji928FTex "__OTR__textures/kanji/gMsgKanji928FTex" +static const ALIGN_ASSET(2) char gMsgKanji928FTex[] = dgMsgKanji928FTex; + +#define dgMsgKanji9290Tex "__OTR__textures/kanji/gMsgKanji9290Tex" +static const ALIGN_ASSET(2) char gMsgKanji9290Tex[] = dgMsgKanji9290Tex; + +#define dgMsgKanji9291Tex "__OTR__textures/kanji/gMsgKanji9291Tex" +static const ALIGN_ASSET(2) char gMsgKanji9291Tex[] = dgMsgKanji9291Tex; + +#define dgMsgKanji9292Tex "__OTR__textures/kanji/gMsgKanji9292Tex" +static const ALIGN_ASSET(2) char gMsgKanji9292Tex[] = dgMsgKanji9292Tex; + +#define dgMsgKanji9293Tex "__OTR__textures/kanji/gMsgKanji9293Tex" +static const ALIGN_ASSET(2) char gMsgKanji9293Tex[] = dgMsgKanji9293Tex; + +#define dgMsgKanji9294Tex "__OTR__textures/kanji/gMsgKanji9294Tex" +static const ALIGN_ASSET(2) char gMsgKanji9294Tex[] = dgMsgKanji9294Tex; + +#define dgMsgKanji9295Tex "__OTR__textures/kanji/gMsgKanji9295Tex" +static const ALIGN_ASSET(2) char gMsgKanji9295Tex[] = dgMsgKanji9295Tex; + +#define dgMsgKanji9296Tex "__OTR__textures/kanji/gMsgKanji9296Tex" +static const ALIGN_ASSET(2) char gMsgKanji9296Tex[] = dgMsgKanji9296Tex; + +#define dgMsgKanji9297Tex "__OTR__textures/kanji/gMsgKanji9297Tex" +static const ALIGN_ASSET(2) char gMsgKanji9297Tex[] = dgMsgKanji9297Tex; + +#define dgMsgKanji9298Tex "__OTR__textures/kanji/gMsgKanji9298Tex" +static const ALIGN_ASSET(2) char gMsgKanji9298Tex[] = dgMsgKanji9298Tex; + +#define dgMsgKanji9299Tex "__OTR__textures/kanji/gMsgKanji9299Tex" +static const ALIGN_ASSET(2) char gMsgKanji9299Tex[] = dgMsgKanji9299Tex; + +#define dgMsgKanji929ATex "__OTR__textures/kanji/gMsgKanji929ATex" +static const ALIGN_ASSET(2) char gMsgKanji929ATex[] = dgMsgKanji929ATex; + +#define dgMsgKanji929BTex "__OTR__textures/kanji/gMsgKanji929BTex" +static const ALIGN_ASSET(2) char gMsgKanji929BTex[] = dgMsgKanji929BTex; + +#define dgMsgKanji929CTex "__OTR__textures/kanji/gMsgKanji929CTex" +static const ALIGN_ASSET(2) char gMsgKanji929CTex[] = dgMsgKanji929CTex; + +#define dgMsgKanji929DTex "__OTR__textures/kanji/gMsgKanji929DTex" +static const ALIGN_ASSET(2) char gMsgKanji929DTex[] = dgMsgKanji929DTex; + +#define dgMsgKanji929ETex "__OTR__textures/kanji/gMsgKanji929ETex" +static const ALIGN_ASSET(2) char gMsgKanji929ETex[] = dgMsgKanji929ETex; + +#define dgMsgKanji929FTex "__OTR__textures/kanji/gMsgKanji929FTex" +static const ALIGN_ASSET(2) char gMsgKanji929FTex[] = dgMsgKanji929FTex; + +#define dgMsgKanji92A0Tex "__OTR__textures/kanji/gMsgKanji92A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A0Tex[] = dgMsgKanji92A0Tex; + +#define dgMsgKanji92A1Tex "__OTR__textures/kanji/gMsgKanji92A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A1Tex[] = dgMsgKanji92A1Tex; + +#define dgMsgKanji92A2Tex "__OTR__textures/kanji/gMsgKanji92A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A2Tex[] = dgMsgKanji92A2Tex; + +#define dgMsgKanji92A3Tex "__OTR__textures/kanji/gMsgKanji92A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A3Tex[] = dgMsgKanji92A3Tex; + +#define dgMsgKanji92A4Tex "__OTR__textures/kanji/gMsgKanji92A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A4Tex[] = dgMsgKanji92A4Tex; + +#define dgMsgKanji92A5Tex "__OTR__textures/kanji/gMsgKanji92A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A5Tex[] = dgMsgKanji92A5Tex; + +#define dgMsgKanji92A6Tex "__OTR__textures/kanji/gMsgKanji92A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A6Tex[] = dgMsgKanji92A6Tex; + +#define dgMsgKanji92A7Tex "__OTR__textures/kanji/gMsgKanji92A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A7Tex[] = dgMsgKanji92A7Tex; + +#define dgMsgKanji92A8Tex "__OTR__textures/kanji/gMsgKanji92A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A8Tex[] = dgMsgKanji92A8Tex; + +#define dgMsgKanji92A9Tex "__OTR__textures/kanji/gMsgKanji92A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji92A9Tex[] = dgMsgKanji92A9Tex; + +#define dgMsgKanji92AATex "__OTR__textures/kanji/gMsgKanji92AATex" +static const ALIGN_ASSET(2) char gMsgKanji92AATex[] = dgMsgKanji92AATex; + +#define dgMsgKanji92ABTex "__OTR__textures/kanji/gMsgKanji92ABTex" +static const ALIGN_ASSET(2) char gMsgKanji92ABTex[] = dgMsgKanji92ABTex; + +#define dgMsgKanji92ACTex "__OTR__textures/kanji/gMsgKanji92ACTex" +static const ALIGN_ASSET(2) char gMsgKanji92ACTex[] = dgMsgKanji92ACTex; + +#define dgMsgKanji92ADTex "__OTR__textures/kanji/gMsgKanji92ADTex" +static const ALIGN_ASSET(2) char gMsgKanji92ADTex[] = dgMsgKanji92ADTex; + +#define dgMsgKanji92AETex "__OTR__textures/kanji/gMsgKanji92AETex" +static const ALIGN_ASSET(2) char gMsgKanji92AETex[] = dgMsgKanji92AETex; + +#define dgMsgKanji92AFTex "__OTR__textures/kanji/gMsgKanji92AFTex" +static const ALIGN_ASSET(2) char gMsgKanji92AFTex[] = dgMsgKanji92AFTex; + +#define dgMsgKanji92B0Tex "__OTR__textures/kanji/gMsgKanji92B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B0Tex[] = dgMsgKanji92B0Tex; + +#define dgMsgKanji92B1Tex "__OTR__textures/kanji/gMsgKanji92B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B1Tex[] = dgMsgKanji92B1Tex; + +#define dgMsgKanji92B2Tex "__OTR__textures/kanji/gMsgKanji92B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B2Tex[] = dgMsgKanji92B2Tex; + +#define dgMsgKanji92B3Tex "__OTR__textures/kanji/gMsgKanji92B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B3Tex[] = dgMsgKanji92B3Tex; + +#define dgMsgKanji92B4Tex "__OTR__textures/kanji/gMsgKanji92B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B4Tex[] = dgMsgKanji92B4Tex; + +#define dgMsgKanji92B5Tex "__OTR__textures/kanji/gMsgKanji92B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B5Tex[] = dgMsgKanji92B5Tex; + +#define dgMsgKanji92B6Tex "__OTR__textures/kanji/gMsgKanji92B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B6Tex[] = dgMsgKanji92B6Tex; + +#define dgMsgKanji92B7Tex "__OTR__textures/kanji/gMsgKanji92B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B7Tex[] = dgMsgKanji92B7Tex; + +#define dgMsgKanji92B8Tex "__OTR__textures/kanji/gMsgKanji92B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B8Tex[] = dgMsgKanji92B8Tex; + +#define dgMsgKanji92B9Tex "__OTR__textures/kanji/gMsgKanji92B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji92B9Tex[] = dgMsgKanji92B9Tex; + +#define dgMsgKanji92BATex "__OTR__textures/kanji/gMsgKanji92BATex" +static const ALIGN_ASSET(2) char gMsgKanji92BATex[] = dgMsgKanji92BATex; + +#define dgMsgKanji92BBTex "__OTR__textures/kanji/gMsgKanji92BBTex" +static const ALIGN_ASSET(2) char gMsgKanji92BBTex[] = dgMsgKanji92BBTex; + +#define dgMsgKanji92BCTex "__OTR__textures/kanji/gMsgKanji92BCTex" +static const ALIGN_ASSET(2) char gMsgKanji92BCTex[] = dgMsgKanji92BCTex; + +#define dgMsgKanji92BDTex "__OTR__textures/kanji/gMsgKanji92BDTex" +static const ALIGN_ASSET(2) char gMsgKanji92BDTex[] = dgMsgKanji92BDTex; + +#define dgMsgKanji92BETex "__OTR__textures/kanji/gMsgKanji92BETex" +static const ALIGN_ASSET(2) char gMsgKanji92BETex[] = dgMsgKanji92BETex; + +#define dgMsgKanji92BFTex "__OTR__textures/kanji/gMsgKanji92BFTex" +static const ALIGN_ASSET(2) char gMsgKanji92BFTex[] = dgMsgKanji92BFTex; + +#define dgMsgKanji92C0Tex "__OTR__textures/kanji/gMsgKanji92C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C0Tex[] = dgMsgKanji92C0Tex; + +#define dgMsgKanji92C1Tex "__OTR__textures/kanji/gMsgKanji92C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C1Tex[] = dgMsgKanji92C1Tex; + +#define dgMsgKanji92C2Tex "__OTR__textures/kanji/gMsgKanji92C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C2Tex[] = dgMsgKanji92C2Tex; + +#define dgMsgKanji92C3Tex "__OTR__textures/kanji/gMsgKanji92C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C3Tex[] = dgMsgKanji92C3Tex; + +#define dgMsgKanji92C4Tex "__OTR__textures/kanji/gMsgKanji92C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C4Tex[] = dgMsgKanji92C4Tex; + +#define dgMsgKanji92C5Tex "__OTR__textures/kanji/gMsgKanji92C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C5Tex[] = dgMsgKanji92C5Tex; + +#define dgMsgKanji92C6Tex "__OTR__textures/kanji/gMsgKanji92C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C6Tex[] = dgMsgKanji92C6Tex; + +#define dgMsgKanji92C7Tex "__OTR__textures/kanji/gMsgKanji92C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C7Tex[] = dgMsgKanji92C7Tex; + +#define dgMsgKanji92C8Tex "__OTR__textures/kanji/gMsgKanji92C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C8Tex[] = dgMsgKanji92C8Tex; + +#define dgMsgKanji92C9Tex "__OTR__textures/kanji/gMsgKanji92C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji92C9Tex[] = dgMsgKanji92C9Tex; + +#define dgMsgKanji92CATex "__OTR__textures/kanji/gMsgKanji92CATex" +static const ALIGN_ASSET(2) char gMsgKanji92CATex[] = dgMsgKanji92CATex; + +#define dgMsgKanji92CBTex "__OTR__textures/kanji/gMsgKanji92CBTex" +static const ALIGN_ASSET(2) char gMsgKanji92CBTex[] = dgMsgKanji92CBTex; + +#define dgMsgKanji92CCTex "__OTR__textures/kanji/gMsgKanji92CCTex" +static const ALIGN_ASSET(2) char gMsgKanji92CCTex[] = dgMsgKanji92CCTex; + +#define dgMsgKanji92CDTex "__OTR__textures/kanji/gMsgKanji92CDTex" +static const ALIGN_ASSET(2) char gMsgKanji92CDTex[] = dgMsgKanji92CDTex; + +#define dgMsgKanji92CETex "__OTR__textures/kanji/gMsgKanji92CETex" +static const ALIGN_ASSET(2) char gMsgKanji92CETex[] = dgMsgKanji92CETex; + +#define dgMsgKanji92CFTex "__OTR__textures/kanji/gMsgKanji92CFTex" +static const ALIGN_ASSET(2) char gMsgKanji92CFTex[] = dgMsgKanji92CFTex; + +#define dgMsgKanji92D0Tex "__OTR__textures/kanji/gMsgKanji92D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D0Tex[] = dgMsgKanji92D0Tex; + +#define dgMsgKanji92D1Tex "__OTR__textures/kanji/gMsgKanji92D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D1Tex[] = dgMsgKanji92D1Tex; + +#define dgMsgKanji92D2Tex "__OTR__textures/kanji/gMsgKanji92D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D2Tex[] = dgMsgKanji92D2Tex; + +#define dgMsgKanji92D3Tex "__OTR__textures/kanji/gMsgKanji92D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D3Tex[] = dgMsgKanji92D3Tex; + +#define dgMsgKanji92D4Tex "__OTR__textures/kanji/gMsgKanji92D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D4Tex[] = dgMsgKanji92D4Tex; + +#define dgMsgKanji92D5Tex "__OTR__textures/kanji/gMsgKanji92D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D5Tex[] = dgMsgKanji92D5Tex; + +#define dgMsgKanji92D6Tex "__OTR__textures/kanji/gMsgKanji92D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D6Tex[] = dgMsgKanji92D6Tex; + +#define dgMsgKanji92D7Tex "__OTR__textures/kanji/gMsgKanji92D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D7Tex[] = dgMsgKanji92D7Tex; + +#define dgMsgKanji92D8Tex "__OTR__textures/kanji/gMsgKanji92D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D8Tex[] = dgMsgKanji92D8Tex; + +#define dgMsgKanji92D9Tex "__OTR__textures/kanji/gMsgKanji92D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji92D9Tex[] = dgMsgKanji92D9Tex; + +#define dgMsgKanji92DATex "__OTR__textures/kanji/gMsgKanji92DATex" +static const ALIGN_ASSET(2) char gMsgKanji92DATex[] = dgMsgKanji92DATex; + +#define dgMsgKanji92DBTex "__OTR__textures/kanji/gMsgKanji92DBTex" +static const ALIGN_ASSET(2) char gMsgKanji92DBTex[] = dgMsgKanji92DBTex; + +#define dgMsgKanji92DCTex "__OTR__textures/kanji/gMsgKanji92DCTex" +static const ALIGN_ASSET(2) char gMsgKanji92DCTex[] = dgMsgKanji92DCTex; + +#define dgMsgKanji92DDTex "__OTR__textures/kanji/gMsgKanji92DDTex" +static const ALIGN_ASSET(2) char gMsgKanji92DDTex[] = dgMsgKanji92DDTex; + +#define dgMsgKanji92DETex "__OTR__textures/kanji/gMsgKanji92DETex" +static const ALIGN_ASSET(2) char gMsgKanji92DETex[] = dgMsgKanji92DETex; + +#define dgMsgKanji92DFTex "__OTR__textures/kanji/gMsgKanji92DFTex" +static const ALIGN_ASSET(2) char gMsgKanji92DFTex[] = dgMsgKanji92DFTex; + +#define dgMsgKanji92E0Tex "__OTR__textures/kanji/gMsgKanji92E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E0Tex[] = dgMsgKanji92E0Tex; + +#define dgMsgKanji92E1Tex "__OTR__textures/kanji/gMsgKanji92E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E1Tex[] = dgMsgKanji92E1Tex; + +#define dgMsgKanji92E2Tex "__OTR__textures/kanji/gMsgKanji92E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E2Tex[] = dgMsgKanji92E2Tex; + +#define dgMsgKanji92E3Tex "__OTR__textures/kanji/gMsgKanji92E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E3Tex[] = dgMsgKanji92E3Tex; + +#define dgMsgKanji92E4Tex "__OTR__textures/kanji/gMsgKanji92E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E4Tex[] = dgMsgKanji92E4Tex; + +#define dgMsgKanji92E5Tex "__OTR__textures/kanji/gMsgKanji92E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E5Tex[] = dgMsgKanji92E5Tex; + +#define dgMsgKanji92E6Tex "__OTR__textures/kanji/gMsgKanji92E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E6Tex[] = dgMsgKanji92E6Tex; + +#define dgMsgKanji92E7Tex "__OTR__textures/kanji/gMsgKanji92E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E7Tex[] = dgMsgKanji92E7Tex; + +#define dgMsgKanji92E8Tex "__OTR__textures/kanji/gMsgKanji92E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E8Tex[] = dgMsgKanji92E8Tex; + +#define dgMsgKanji92E9Tex "__OTR__textures/kanji/gMsgKanji92E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji92E9Tex[] = dgMsgKanji92E9Tex; + +#define dgMsgKanji92EATex "__OTR__textures/kanji/gMsgKanji92EATex" +static const ALIGN_ASSET(2) char gMsgKanji92EATex[] = dgMsgKanji92EATex; + +#define dgMsgKanji92EBTex "__OTR__textures/kanji/gMsgKanji92EBTex" +static const ALIGN_ASSET(2) char gMsgKanji92EBTex[] = dgMsgKanji92EBTex; + +#define dgMsgKanji92ECTex "__OTR__textures/kanji/gMsgKanji92ECTex" +static const ALIGN_ASSET(2) char gMsgKanji92ECTex[] = dgMsgKanji92ECTex; + +#define dgMsgKanji92EDTex "__OTR__textures/kanji/gMsgKanji92EDTex" +static const ALIGN_ASSET(2) char gMsgKanji92EDTex[] = dgMsgKanji92EDTex; + +#define dgMsgKanji92EETex "__OTR__textures/kanji/gMsgKanji92EETex" +static const ALIGN_ASSET(2) char gMsgKanji92EETex[] = dgMsgKanji92EETex; + +#define dgMsgKanji92EFTex "__OTR__textures/kanji/gMsgKanji92EFTex" +static const ALIGN_ASSET(2) char gMsgKanji92EFTex[] = dgMsgKanji92EFTex; + +#define dgMsgKanji92F0Tex "__OTR__textures/kanji/gMsgKanji92F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F0Tex[] = dgMsgKanji92F0Tex; + +#define dgMsgKanji92F1Tex "__OTR__textures/kanji/gMsgKanji92F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F1Tex[] = dgMsgKanji92F1Tex; + +#define dgMsgKanji92F2Tex "__OTR__textures/kanji/gMsgKanji92F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F2Tex[] = dgMsgKanji92F2Tex; + +#define dgMsgKanji92F3Tex "__OTR__textures/kanji/gMsgKanji92F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F3Tex[] = dgMsgKanji92F3Tex; + +#define dgMsgKanji92F4Tex "__OTR__textures/kanji/gMsgKanji92F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F4Tex[] = dgMsgKanji92F4Tex; + +#define dgMsgKanji92F5Tex "__OTR__textures/kanji/gMsgKanji92F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F5Tex[] = dgMsgKanji92F5Tex; + +#define dgMsgKanji92F6Tex "__OTR__textures/kanji/gMsgKanji92F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F6Tex[] = dgMsgKanji92F6Tex; + +#define dgMsgKanji92F7Tex "__OTR__textures/kanji/gMsgKanji92F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F7Tex[] = dgMsgKanji92F7Tex; + +#define dgMsgKanji92F8Tex "__OTR__textures/kanji/gMsgKanji92F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F8Tex[] = dgMsgKanji92F8Tex; + +#define dgMsgKanji92F9Tex "__OTR__textures/kanji/gMsgKanji92F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji92F9Tex[] = dgMsgKanji92F9Tex; + +#define dgMsgKanji92FATex "__OTR__textures/kanji/gMsgKanji92FATex" +static const ALIGN_ASSET(2) char gMsgKanji92FATex[] = dgMsgKanji92FATex; + +#define dgMsgKanji92FBTex "__OTR__textures/kanji/gMsgKanji92FBTex" +static const ALIGN_ASSET(2) char gMsgKanji92FBTex[] = dgMsgKanji92FBTex; + +#define dgMsgKanji92FCTex "__OTR__textures/kanji/gMsgKanji92FCTex" +static const ALIGN_ASSET(2) char gMsgKanji92FCTex[] = dgMsgKanji92FCTex; + +#define dgMsgKanji9340Tex "__OTR__textures/kanji/gMsgKanji9340Tex" +static const ALIGN_ASSET(2) char gMsgKanji9340Tex[] = dgMsgKanji9340Tex; + +#define dgMsgKanji9341Tex "__OTR__textures/kanji/gMsgKanji9341Tex" +static const ALIGN_ASSET(2) char gMsgKanji9341Tex[] = dgMsgKanji9341Tex; + +#define dgMsgKanji9342Tex "__OTR__textures/kanji/gMsgKanji9342Tex" +static const ALIGN_ASSET(2) char gMsgKanji9342Tex[] = dgMsgKanji9342Tex; + +#define dgMsgKanji9343Tex "__OTR__textures/kanji/gMsgKanji9343Tex" +static const ALIGN_ASSET(2) char gMsgKanji9343Tex[] = dgMsgKanji9343Tex; + +#define dgMsgKanji9344Tex "__OTR__textures/kanji/gMsgKanji9344Tex" +static const ALIGN_ASSET(2) char gMsgKanji9344Tex[] = dgMsgKanji9344Tex; + +#define dgMsgKanji9345Tex "__OTR__textures/kanji/gMsgKanji9345Tex" +static const ALIGN_ASSET(2) char gMsgKanji9345Tex[] = dgMsgKanji9345Tex; + +#define dgMsgKanji9346Tex "__OTR__textures/kanji/gMsgKanji9346Tex" +static const ALIGN_ASSET(2) char gMsgKanji9346Tex[] = dgMsgKanji9346Tex; + +#define dgMsgKanji9347Tex "__OTR__textures/kanji/gMsgKanji9347Tex" +static const ALIGN_ASSET(2) char gMsgKanji9347Tex[] = dgMsgKanji9347Tex; + +#define dgMsgKanji9348Tex "__OTR__textures/kanji/gMsgKanji9348Tex" +static const ALIGN_ASSET(2) char gMsgKanji9348Tex[] = dgMsgKanji9348Tex; + +#define dgMsgKanji9349Tex "__OTR__textures/kanji/gMsgKanji9349Tex" +static const ALIGN_ASSET(2) char gMsgKanji9349Tex[] = dgMsgKanji9349Tex; + +#define dgMsgKanji934ATex "__OTR__textures/kanji/gMsgKanji934ATex" +static const ALIGN_ASSET(2) char gMsgKanji934ATex[] = dgMsgKanji934ATex; + +#define dgMsgKanji934BTex "__OTR__textures/kanji/gMsgKanji934BTex" +static const ALIGN_ASSET(2) char gMsgKanji934BTex[] = dgMsgKanji934BTex; + +#define dgMsgKanji934CTex "__OTR__textures/kanji/gMsgKanji934CTex" +static const ALIGN_ASSET(2) char gMsgKanji934CTex[] = dgMsgKanji934CTex; + +#define dgMsgKanji934DTex "__OTR__textures/kanji/gMsgKanji934DTex" +static const ALIGN_ASSET(2) char gMsgKanji934DTex[] = dgMsgKanji934DTex; + +#define dgMsgKanji934ETex "__OTR__textures/kanji/gMsgKanji934ETex" +static const ALIGN_ASSET(2) char gMsgKanji934ETex[] = dgMsgKanji934ETex; + +#define dgMsgKanji934FTex "__OTR__textures/kanji/gMsgKanji934FTex" +static const ALIGN_ASSET(2) char gMsgKanji934FTex[] = dgMsgKanji934FTex; + +#define dgMsgKanji9350Tex "__OTR__textures/kanji/gMsgKanji9350Tex" +static const ALIGN_ASSET(2) char gMsgKanji9350Tex[] = dgMsgKanji9350Tex; + +#define dgMsgKanji9351Tex "__OTR__textures/kanji/gMsgKanji9351Tex" +static const ALIGN_ASSET(2) char gMsgKanji9351Tex[] = dgMsgKanji9351Tex; + +#define dgMsgKanji9352Tex "__OTR__textures/kanji/gMsgKanji9352Tex" +static const ALIGN_ASSET(2) char gMsgKanji9352Tex[] = dgMsgKanji9352Tex; + +#define dgMsgKanji9353Tex "__OTR__textures/kanji/gMsgKanji9353Tex" +static const ALIGN_ASSET(2) char gMsgKanji9353Tex[] = dgMsgKanji9353Tex; + +#define dgMsgKanji9354Tex "__OTR__textures/kanji/gMsgKanji9354Tex" +static const ALIGN_ASSET(2) char gMsgKanji9354Tex[] = dgMsgKanji9354Tex; + +#define dgMsgKanji9355Tex "__OTR__textures/kanji/gMsgKanji9355Tex" +static const ALIGN_ASSET(2) char gMsgKanji9355Tex[] = dgMsgKanji9355Tex; + +#define dgMsgKanji9356Tex "__OTR__textures/kanji/gMsgKanji9356Tex" +static const ALIGN_ASSET(2) char gMsgKanji9356Tex[] = dgMsgKanji9356Tex; + +#define dgMsgKanji9357Tex "__OTR__textures/kanji/gMsgKanji9357Tex" +static const ALIGN_ASSET(2) char gMsgKanji9357Tex[] = dgMsgKanji9357Tex; + +#define dgMsgKanji9358Tex "__OTR__textures/kanji/gMsgKanji9358Tex" +static const ALIGN_ASSET(2) char gMsgKanji9358Tex[] = dgMsgKanji9358Tex; + +#define dgMsgKanji9359Tex "__OTR__textures/kanji/gMsgKanji9359Tex" +static const ALIGN_ASSET(2) char gMsgKanji9359Tex[] = dgMsgKanji9359Tex; + +#define dgMsgKanji935ATex "__OTR__textures/kanji/gMsgKanji935ATex" +static const ALIGN_ASSET(2) char gMsgKanji935ATex[] = dgMsgKanji935ATex; + +#define dgMsgKanji935BTex "__OTR__textures/kanji/gMsgKanji935BTex" +static const ALIGN_ASSET(2) char gMsgKanji935BTex[] = dgMsgKanji935BTex; + +#define dgMsgKanji935CTex "__OTR__textures/kanji/gMsgKanji935CTex" +static const ALIGN_ASSET(2) char gMsgKanji935CTex[] = dgMsgKanji935CTex; + +#define dgMsgKanji935DTex "__OTR__textures/kanji/gMsgKanji935DTex" +static const ALIGN_ASSET(2) char gMsgKanji935DTex[] = dgMsgKanji935DTex; + +#define dgMsgKanji935ETex "__OTR__textures/kanji/gMsgKanji935ETex" +static const ALIGN_ASSET(2) char gMsgKanji935ETex[] = dgMsgKanji935ETex; + +#define dgMsgKanji935FTex "__OTR__textures/kanji/gMsgKanji935FTex" +static const ALIGN_ASSET(2) char gMsgKanji935FTex[] = dgMsgKanji935FTex; + +#define dgMsgKanji9360Tex "__OTR__textures/kanji/gMsgKanji9360Tex" +static const ALIGN_ASSET(2) char gMsgKanji9360Tex[] = dgMsgKanji9360Tex; + +#define dgMsgKanji9361Tex "__OTR__textures/kanji/gMsgKanji9361Tex" +static const ALIGN_ASSET(2) char gMsgKanji9361Tex[] = dgMsgKanji9361Tex; + +#define dgMsgKanji9362Tex "__OTR__textures/kanji/gMsgKanji9362Tex" +static const ALIGN_ASSET(2) char gMsgKanji9362Tex[] = dgMsgKanji9362Tex; + +#define dgMsgKanji9363Tex "__OTR__textures/kanji/gMsgKanji9363Tex" +static const ALIGN_ASSET(2) char gMsgKanji9363Tex[] = dgMsgKanji9363Tex; + +#define dgMsgKanji9364Tex "__OTR__textures/kanji/gMsgKanji9364Tex" +static const ALIGN_ASSET(2) char gMsgKanji9364Tex[] = dgMsgKanji9364Tex; + +#define dgMsgKanji9365Tex "__OTR__textures/kanji/gMsgKanji9365Tex" +static const ALIGN_ASSET(2) char gMsgKanji9365Tex[] = dgMsgKanji9365Tex; + +#define dgMsgKanji9366Tex "__OTR__textures/kanji/gMsgKanji9366Tex" +static const ALIGN_ASSET(2) char gMsgKanji9366Tex[] = dgMsgKanji9366Tex; + +#define dgMsgKanji9367Tex "__OTR__textures/kanji/gMsgKanji9367Tex" +static const ALIGN_ASSET(2) char gMsgKanji9367Tex[] = dgMsgKanji9367Tex; + +#define dgMsgKanji9368Tex "__OTR__textures/kanji/gMsgKanji9368Tex" +static const ALIGN_ASSET(2) char gMsgKanji9368Tex[] = dgMsgKanji9368Tex; + +#define dgMsgKanji9369Tex "__OTR__textures/kanji/gMsgKanji9369Tex" +static const ALIGN_ASSET(2) char gMsgKanji9369Tex[] = dgMsgKanji9369Tex; + +#define dgMsgKanji936ATex "__OTR__textures/kanji/gMsgKanji936ATex" +static const ALIGN_ASSET(2) char gMsgKanji936ATex[] = dgMsgKanji936ATex; + +#define dgMsgKanji936BTex "__OTR__textures/kanji/gMsgKanji936BTex" +static const ALIGN_ASSET(2) char gMsgKanji936BTex[] = dgMsgKanji936BTex; + +#define dgMsgKanji936CTex "__OTR__textures/kanji/gMsgKanji936CTex" +static const ALIGN_ASSET(2) char gMsgKanji936CTex[] = dgMsgKanji936CTex; + +#define dgMsgKanji936DTex "__OTR__textures/kanji/gMsgKanji936DTex" +static const ALIGN_ASSET(2) char gMsgKanji936DTex[] = dgMsgKanji936DTex; + +#define dgMsgKanji936ETex "__OTR__textures/kanji/gMsgKanji936ETex" +static const ALIGN_ASSET(2) char gMsgKanji936ETex[] = dgMsgKanji936ETex; + +#define dgMsgKanji936FTex "__OTR__textures/kanji/gMsgKanji936FTex" +static const ALIGN_ASSET(2) char gMsgKanji936FTex[] = dgMsgKanji936FTex; + +#define dgMsgKanji9370Tex "__OTR__textures/kanji/gMsgKanji9370Tex" +static const ALIGN_ASSET(2) char gMsgKanji9370Tex[] = dgMsgKanji9370Tex; + +#define dgMsgKanji9371Tex "__OTR__textures/kanji/gMsgKanji9371Tex" +static const ALIGN_ASSET(2) char gMsgKanji9371Tex[] = dgMsgKanji9371Tex; + +#define dgMsgKanji9372Tex "__OTR__textures/kanji/gMsgKanji9372Tex" +static const ALIGN_ASSET(2) char gMsgKanji9372Tex[] = dgMsgKanji9372Tex; + +#define dgMsgKanji9373Tex "__OTR__textures/kanji/gMsgKanji9373Tex" +static const ALIGN_ASSET(2) char gMsgKanji9373Tex[] = dgMsgKanji9373Tex; + +#define dgMsgKanji9374Tex "__OTR__textures/kanji/gMsgKanji9374Tex" +static const ALIGN_ASSET(2) char gMsgKanji9374Tex[] = dgMsgKanji9374Tex; + +#define dgMsgKanji9375Tex "__OTR__textures/kanji/gMsgKanji9375Tex" +static const ALIGN_ASSET(2) char gMsgKanji9375Tex[] = dgMsgKanji9375Tex; + +#define dgMsgKanji9376Tex "__OTR__textures/kanji/gMsgKanji9376Tex" +static const ALIGN_ASSET(2) char gMsgKanji9376Tex[] = dgMsgKanji9376Tex; + +#define dgMsgKanji9377Tex "__OTR__textures/kanji/gMsgKanji9377Tex" +static const ALIGN_ASSET(2) char gMsgKanji9377Tex[] = dgMsgKanji9377Tex; + +#define dgMsgKanji9378Tex "__OTR__textures/kanji/gMsgKanji9378Tex" +static const ALIGN_ASSET(2) char gMsgKanji9378Tex[] = dgMsgKanji9378Tex; + +#define dgMsgKanji9379Tex "__OTR__textures/kanji/gMsgKanji9379Tex" +static const ALIGN_ASSET(2) char gMsgKanji9379Tex[] = dgMsgKanji9379Tex; + +#define dgMsgKanji937ATex "__OTR__textures/kanji/gMsgKanji937ATex" +static const ALIGN_ASSET(2) char gMsgKanji937ATex[] = dgMsgKanji937ATex; + +#define dgMsgKanji937BTex "__OTR__textures/kanji/gMsgKanji937BTex" +static const ALIGN_ASSET(2) char gMsgKanji937BTex[] = dgMsgKanji937BTex; + +#define dgMsgKanji937CTex "__OTR__textures/kanji/gMsgKanji937CTex" +static const ALIGN_ASSET(2) char gMsgKanji937CTex[] = dgMsgKanji937CTex; + +#define dgMsgKanji937DTex "__OTR__textures/kanji/gMsgKanji937DTex" +static const ALIGN_ASSET(2) char gMsgKanji937DTex[] = dgMsgKanji937DTex; + +#define dgMsgKanji937ETex "__OTR__textures/kanji/gMsgKanji937ETex" +static const ALIGN_ASSET(2) char gMsgKanji937ETex[] = dgMsgKanji937ETex; + +#define dgMsgKanji9380Tex "__OTR__textures/kanji/gMsgKanji9380Tex" +static const ALIGN_ASSET(2) char gMsgKanji9380Tex[] = dgMsgKanji9380Tex; + +#define dgMsgKanji9381Tex "__OTR__textures/kanji/gMsgKanji9381Tex" +static const ALIGN_ASSET(2) char gMsgKanji9381Tex[] = dgMsgKanji9381Tex; + +#define dgMsgKanji9382Tex "__OTR__textures/kanji/gMsgKanji9382Tex" +static const ALIGN_ASSET(2) char gMsgKanji9382Tex[] = dgMsgKanji9382Tex; + +#define dgMsgKanji9383Tex "__OTR__textures/kanji/gMsgKanji9383Tex" +static const ALIGN_ASSET(2) char gMsgKanji9383Tex[] = dgMsgKanji9383Tex; + +#define dgMsgKanji9384Tex "__OTR__textures/kanji/gMsgKanji9384Tex" +static const ALIGN_ASSET(2) char gMsgKanji9384Tex[] = dgMsgKanji9384Tex; + +#define dgMsgKanji9385Tex "__OTR__textures/kanji/gMsgKanji9385Tex" +static const ALIGN_ASSET(2) char gMsgKanji9385Tex[] = dgMsgKanji9385Tex; + +#define dgMsgKanji9386Tex "__OTR__textures/kanji/gMsgKanji9386Tex" +static const ALIGN_ASSET(2) char gMsgKanji9386Tex[] = dgMsgKanji9386Tex; + +#define dgMsgKanji9387Tex "__OTR__textures/kanji/gMsgKanji9387Tex" +static const ALIGN_ASSET(2) char gMsgKanji9387Tex[] = dgMsgKanji9387Tex; + +#define dgMsgKanji9388Tex "__OTR__textures/kanji/gMsgKanji9388Tex" +static const ALIGN_ASSET(2) char gMsgKanji9388Tex[] = dgMsgKanji9388Tex; + +#define dgMsgKanji9389Tex "__OTR__textures/kanji/gMsgKanji9389Tex" +static const ALIGN_ASSET(2) char gMsgKanji9389Tex[] = dgMsgKanji9389Tex; + +#define dgMsgKanji938ATex "__OTR__textures/kanji/gMsgKanji938ATex" +static const ALIGN_ASSET(2) char gMsgKanji938ATex[] = dgMsgKanji938ATex; + +#define dgMsgKanji938BTex "__OTR__textures/kanji/gMsgKanji938BTex" +static const ALIGN_ASSET(2) char gMsgKanji938BTex[] = dgMsgKanji938BTex; + +#define dgMsgKanji938CTex "__OTR__textures/kanji/gMsgKanji938CTex" +static const ALIGN_ASSET(2) char gMsgKanji938CTex[] = dgMsgKanji938CTex; + +#define dgMsgKanji938DTex "__OTR__textures/kanji/gMsgKanji938DTex" +static const ALIGN_ASSET(2) char gMsgKanji938DTex[] = dgMsgKanji938DTex; + +#define dgMsgKanji938ETex "__OTR__textures/kanji/gMsgKanji938ETex" +static const ALIGN_ASSET(2) char gMsgKanji938ETex[] = dgMsgKanji938ETex; + +#define dgMsgKanji938FTex "__OTR__textures/kanji/gMsgKanji938FTex" +static const ALIGN_ASSET(2) char gMsgKanji938FTex[] = dgMsgKanji938FTex; + +#define dgMsgKanji9390Tex "__OTR__textures/kanji/gMsgKanji9390Tex" +static const ALIGN_ASSET(2) char gMsgKanji9390Tex[] = dgMsgKanji9390Tex; + +#define dgMsgKanji9391Tex "__OTR__textures/kanji/gMsgKanji9391Tex" +static const ALIGN_ASSET(2) char gMsgKanji9391Tex[] = dgMsgKanji9391Tex; + +#define dgMsgKanji9392Tex "__OTR__textures/kanji/gMsgKanji9392Tex" +static const ALIGN_ASSET(2) char gMsgKanji9392Tex[] = dgMsgKanji9392Tex; + +#define dgMsgKanji9393Tex "__OTR__textures/kanji/gMsgKanji9393Tex" +static const ALIGN_ASSET(2) char gMsgKanji9393Tex[] = dgMsgKanji9393Tex; + +#define dgMsgKanji9394Tex "__OTR__textures/kanji/gMsgKanji9394Tex" +static const ALIGN_ASSET(2) char gMsgKanji9394Tex[] = dgMsgKanji9394Tex; + +#define dgMsgKanji9395Tex "__OTR__textures/kanji/gMsgKanji9395Tex" +static const ALIGN_ASSET(2) char gMsgKanji9395Tex[] = dgMsgKanji9395Tex; + +#define dgMsgKanji9396Tex "__OTR__textures/kanji/gMsgKanji9396Tex" +static const ALIGN_ASSET(2) char gMsgKanji9396Tex[] = dgMsgKanji9396Tex; + +#define dgMsgKanji9397Tex "__OTR__textures/kanji/gMsgKanji9397Tex" +static const ALIGN_ASSET(2) char gMsgKanji9397Tex[] = dgMsgKanji9397Tex; + +#define dgMsgKanji9398Tex "__OTR__textures/kanji/gMsgKanji9398Tex" +static const ALIGN_ASSET(2) char gMsgKanji9398Tex[] = dgMsgKanji9398Tex; + +#define dgMsgKanji9399Tex "__OTR__textures/kanji/gMsgKanji9399Tex" +static const ALIGN_ASSET(2) char gMsgKanji9399Tex[] = dgMsgKanji9399Tex; + +#define dgMsgKanji939ATex "__OTR__textures/kanji/gMsgKanji939ATex" +static const ALIGN_ASSET(2) char gMsgKanji939ATex[] = dgMsgKanji939ATex; + +#define dgMsgKanji939BTex "__OTR__textures/kanji/gMsgKanji939BTex" +static const ALIGN_ASSET(2) char gMsgKanji939BTex[] = dgMsgKanji939BTex; + +#define dgMsgKanji939CTex "__OTR__textures/kanji/gMsgKanji939CTex" +static const ALIGN_ASSET(2) char gMsgKanji939CTex[] = dgMsgKanji939CTex; + +#define dgMsgKanji939DTex "__OTR__textures/kanji/gMsgKanji939DTex" +static const ALIGN_ASSET(2) char gMsgKanji939DTex[] = dgMsgKanji939DTex; + +#define dgMsgKanji939ETex "__OTR__textures/kanji/gMsgKanji939ETex" +static const ALIGN_ASSET(2) char gMsgKanji939ETex[] = dgMsgKanji939ETex; + +#define dgMsgKanji939FTex "__OTR__textures/kanji/gMsgKanji939FTex" +static const ALIGN_ASSET(2) char gMsgKanji939FTex[] = dgMsgKanji939FTex; + +#define dgMsgKanji93A0Tex "__OTR__textures/kanji/gMsgKanji93A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A0Tex[] = dgMsgKanji93A0Tex; + +#define dgMsgKanji93A1Tex "__OTR__textures/kanji/gMsgKanji93A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A1Tex[] = dgMsgKanji93A1Tex; + +#define dgMsgKanji93A2Tex "__OTR__textures/kanji/gMsgKanji93A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A2Tex[] = dgMsgKanji93A2Tex; + +#define dgMsgKanji93A3Tex "__OTR__textures/kanji/gMsgKanji93A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A3Tex[] = dgMsgKanji93A3Tex; + +#define dgMsgKanji93A4Tex "__OTR__textures/kanji/gMsgKanji93A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A4Tex[] = dgMsgKanji93A4Tex; + +#define dgMsgKanji93A5Tex "__OTR__textures/kanji/gMsgKanji93A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A5Tex[] = dgMsgKanji93A5Tex; + +#define dgMsgKanji93A6Tex "__OTR__textures/kanji/gMsgKanji93A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A6Tex[] = dgMsgKanji93A6Tex; + +#define dgMsgKanji93A7Tex "__OTR__textures/kanji/gMsgKanji93A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A7Tex[] = dgMsgKanji93A7Tex; + +#define dgMsgKanji93A8Tex "__OTR__textures/kanji/gMsgKanji93A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A8Tex[] = dgMsgKanji93A8Tex; + +#define dgMsgKanji93A9Tex "__OTR__textures/kanji/gMsgKanji93A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji93A9Tex[] = dgMsgKanji93A9Tex; + +#define dgMsgKanji93AATex "__OTR__textures/kanji/gMsgKanji93AATex" +static const ALIGN_ASSET(2) char gMsgKanji93AATex[] = dgMsgKanji93AATex; + +#define dgMsgKanji93ABTex "__OTR__textures/kanji/gMsgKanji93ABTex" +static const ALIGN_ASSET(2) char gMsgKanji93ABTex[] = dgMsgKanji93ABTex; + +#define dgMsgKanji93ACTex "__OTR__textures/kanji/gMsgKanji93ACTex" +static const ALIGN_ASSET(2) char gMsgKanji93ACTex[] = dgMsgKanji93ACTex; + +#define dgMsgKanji93ADTex "__OTR__textures/kanji/gMsgKanji93ADTex" +static const ALIGN_ASSET(2) char gMsgKanji93ADTex[] = dgMsgKanji93ADTex; + +#define dgMsgKanji93AETex "__OTR__textures/kanji/gMsgKanji93AETex" +static const ALIGN_ASSET(2) char gMsgKanji93AETex[] = dgMsgKanji93AETex; + +#define dgMsgKanji93AFTex "__OTR__textures/kanji/gMsgKanji93AFTex" +static const ALIGN_ASSET(2) char gMsgKanji93AFTex[] = dgMsgKanji93AFTex; + +#define dgMsgKanji93B0Tex "__OTR__textures/kanji/gMsgKanji93B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B0Tex[] = dgMsgKanji93B0Tex; + +#define dgMsgKanji93B1Tex "__OTR__textures/kanji/gMsgKanji93B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B1Tex[] = dgMsgKanji93B1Tex; + +#define dgMsgKanji93B2Tex "__OTR__textures/kanji/gMsgKanji93B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B2Tex[] = dgMsgKanji93B2Tex; + +#define dgMsgKanji93B3Tex "__OTR__textures/kanji/gMsgKanji93B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B3Tex[] = dgMsgKanji93B3Tex; + +#define dgMsgKanji93B4Tex "__OTR__textures/kanji/gMsgKanji93B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B4Tex[] = dgMsgKanji93B4Tex; + +#define dgMsgKanji93B5Tex "__OTR__textures/kanji/gMsgKanji93B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B5Tex[] = dgMsgKanji93B5Tex; + +#define dgMsgKanji93B6Tex "__OTR__textures/kanji/gMsgKanji93B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B6Tex[] = dgMsgKanji93B6Tex; + +#define dgMsgKanji93B7Tex "__OTR__textures/kanji/gMsgKanji93B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B7Tex[] = dgMsgKanji93B7Tex; + +#define dgMsgKanji93B8Tex "__OTR__textures/kanji/gMsgKanji93B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B8Tex[] = dgMsgKanji93B8Tex; + +#define dgMsgKanji93B9Tex "__OTR__textures/kanji/gMsgKanji93B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji93B9Tex[] = dgMsgKanji93B9Tex; + +#define dgMsgKanji93BATex "__OTR__textures/kanji/gMsgKanji93BATex" +static const ALIGN_ASSET(2) char gMsgKanji93BATex[] = dgMsgKanji93BATex; + +#define dgMsgKanji93BBTex "__OTR__textures/kanji/gMsgKanji93BBTex" +static const ALIGN_ASSET(2) char gMsgKanji93BBTex[] = dgMsgKanji93BBTex; + +#define dgMsgKanji93BCTex "__OTR__textures/kanji/gMsgKanji93BCTex" +static const ALIGN_ASSET(2) char gMsgKanji93BCTex[] = dgMsgKanji93BCTex; + +#define dgMsgKanji93BDTex "__OTR__textures/kanji/gMsgKanji93BDTex" +static const ALIGN_ASSET(2) char gMsgKanji93BDTex[] = dgMsgKanji93BDTex; + +#define dgMsgKanji93BETex "__OTR__textures/kanji/gMsgKanji93BETex" +static const ALIGN_ASSET(2) char gMsgKanji93BETex[] = dgMsgKanji93BETex; + +#define dgMsgKanji93BFTex "__OTR__textures/kanji/gMsgKanji93BFTex" +static const ALIGN_ASSET(2) char gMsgKanji93BFTex[] = dgMsgKanji93BFTex; + +#define dgMsgKanji93C0Tex "__OTR__textures/kanji/gMsgKanji93C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C0Tex[] = dgMsgKanji93C0Tex; + +#define dgMsgKanji93C1Tex "__OTR__textures/kanji/gMsgKanji93C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C1Tex[] = dgMsgKanji93C1Tex; + +#define dgMsgKanji93C2Tex "__OTR__textures/kanji/gMsgKanji93C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C2Tex[] = dgMsgKanji93C2Tex; + +#define dgMsgKanji93C3Tex "__OTR__textures/kanji/gMsgKanji93C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C3Tex[] = dgMsgKanji93C3Tex; + +#define dgMsgKanji93C4Tex "__OTR__textures/kanji/gMsgKanji93C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C4Tex[] = dgMsgKanji93C4Tex; + +#define dgMsgKanji93C5Tex "__OTR__textures/kanji/gMsgKanji93C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C5Tex[] = dgMsgKanji93C5Tex; + +#define dgMsgKanji93C6Tex "__OTR__textures/kanji/gMsgKanji93C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C6Tex[] = dgMsgKanji93C6Tex; + +#define dgMsgKanji93C7Tex "__OTR__textures/kanji/gMsgKanji93C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C7Tex[] = dgMsgKanji93C7Tex; + +#define dgMsgKanji93C8Tex "__OTR__textures/kanji/gMsgKanji93C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C8Tex[] = dgMsgKanji93C8Tex; + +#define dgMsgKanji93C9Tex "__OTR__textures/kanji/gMsgKanji93C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji93C9Tex[] = dgMsgKanji93C9Tex; + +#define dgMsgKanji93CATex "__OTR__textures/kanji/gMsgKanji93CATex" +static const ALIGN_ASSET(2) char gMsgKanji93CATex[] = dgMsgKanji93CATex; + +#define dgMsgKanji93CBTex "__OTR__textures/kanji/gMsgKanji93CBTex" +static const ALIGN_ASSET(2) char gMsgKanji93CBTex[] = dgMsgKanji93CBTex; + +#define dgMsgKanji93CCTex "__OTR__textures/kanji/gMsgKanji93CCTex" +static const ALIGN_ASSET(2) char gMsgKanji93CCTex[] = dgMsgKanji93CCTex; + +#define dgMsgKanji93CDTex "__OTR__textures/kanji/gMsgKanji93CDTex" +static const ALIGN_ASSET(2) char gMsgKanji93CDTex[] = dgMsgKanji93CDTex; + +#define dgMsgKanji93CETex "__OTR__textures/kanji/gMsgKanji93CETex" +static const ALIGN_ASSET(2) char gMsgKanji93CETex[] = dgMsgKanji93CETex; + +#define dgMsgKanji93CFTex "__OTR__textures/kanji/gMsgKanji93CFTex" +static const ALIGN_ASSET(2) char gMsgKanji93CFTex[] = dgMsgKanji93CFTex; + +#define dgMsgKanji93D0Tex "__OTR__textures/kanji/gMsgKanji93D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D0Tex[] = dgMsgKanji93D0Tex; + +#define dgMsgKanji93D1Tex "__OTR__textures/kanji/gMsgKanji93D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D1Tex[] = dgMsgKanji93D1Tex; + +#define dgMsgKanji93D2Tex "__OTR__textures/kanji/gMsgKanji93D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D2Tex[] = dgMsgKanji93D2Tex; + +#define dgMsgKanji93D3Tex "__OTR__textures/kanji/gMsgKanji93D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D3Tex[] = dgMsgKanji93D3Tex; + +#define dgMsgKanji93D4Tex "__OTR__textures/kanji/gMsgKanji93D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D4Tex[] = dgMsgKanji93D4Tex; + +#define dgMsgKanji93D5Tex "__OTR__textures/kanji/gMsgKanji93D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D5Tex[] = dgMsgKanji93D5Tex; + +#define dgMsgKanji93D6Tex "__OTR__textures/kanji/gMsgKanji93D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D6Tex[] = dgMsgKanji93D6Tex; + +#define dgMsgKanji93D7Tex "__OTR__textures/kanji/gMsgKanji93D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D7Tex[] = dgMsgKanji93D7Tex; + +#define dgMsgKanji93D8Tex "__OTR__textures/kanji/gMsgKanji93D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D8Tex[] = dgMsgKanji93D8Tex; + +#define dgMsgKanji93D9Tex "__OTR__textures/kanji/gMsgKanji93D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji93D9Tex[] = dgMsgKanji93D9Tex; + +#define dgMsgKanji93DATex "__OTR__textures/kanji/gMsgKanji93DATex" +static const ALIGN_ASSET(2) char gMsgKanji93DATex[] = dgMsgKanji93DATex; + +#define dgMsgKanji93DBTex "__OTR__textures/kanji/gMsgKanji93DBTex" +static const ALIGN_ASSET(2) char gMsgKanji93DBTex[] = dgMsgKanji93DBTex; + +#define dgMsgKanji93DCTex "__OTR__textures/kanji/gMsgKanji93DCTex" +static const ALIGN_ASSET(2) char gMsgKanji93DCTex[] = dgMsgKanji93DCTex; + +#define dgMsgKanji93DDTex "__OTR__textures/kanji/gMsgKanji93DDTex" +static const ALIGN_ASSET(2) char gMsgKanji93DDTex[] = dgMsgKanji93DDTex; + +#define dgMsgKanji93DETex "__OTR__textures/kanji/gMsgKanji93DETex" +static const ALIGN_ASSET(2) char gMsgKanji93DETex[] = dgMsgKanji93DETex; + +#define dgMsgKanji93DFTex "__OTR__textures/kanji/gMsgKanji93DFTex" +static const ALIGN_ASSET(2) char gMsgKanji93DFTex[] = dgMsgKanji93DFTex; + +#define dgMsgKanji93E0Tex "__OTR__textures/kanji/gMsgKanji93E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E0Tex[] = dgMsgKanji93E0Tex; + +#define dgMsgKanji93E1Tex "__OTR__textures/kanji/gMsgKanji93E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E1Tex[] = dgMsgKanji93E1Tex; + +#define dgMsgKanji93E2Tex "__OTR__textures/kanji/gMsgKanji93E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E2Tex[] = dgMsgKanji93E2Tex; + +#define dgMsgKanji93E3Tex "__OTR__textures/kanji/gMsgKanji93E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E3Tex[] = dgMsgKanji93E3Tex; + +#define dgMsgKanji93E4Tex "__OTR__textures/kanji/gMsgKanji93E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E4Tex[] = dgMsgKanji93E4Tex; + +#define dgMsgKanji93E5Tex "__OTR__textures/kanji/gMsgKanji93E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E5Tex[] = dgMsgKanji93E5Tex; + +#define dgMsgKanji93E6Tex "__OTR__textures/kanji/gMsgKanji93E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E6Tex[] = dgMsgKanji93E6Tex; + +#define dgMsgKanji93E7Tex "__OTR__textures/kanji/gMsgKanji93E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E7Tex[] = dgMsgKanji93E7Tex; + +#define dgMsgKanji93E8Tex "__OTR__textures/kanji/gMsgKanji93E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E8Tex[] = dgMsgKanji93E8Tex; + +#define dgMsgKanji93E9Tex "__OTR__textures/kanji/gMsgKanji93E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji93E9Tex[] = dgMsgKanji93E9Tex; + +#define dgMsgKanji93EATex "__OTR__textures/kanji/gMsgKanji93EATex" +static const ALIGN_ASSET(2) char gMsgKanji93EATex[] = dgMsgKanji93EATex; + +#define dgMsgKanji93EBTex "__OTR__textures/kanji/gMsgKanji93EBTex" +static const ALIGN_ASSET(2) char gMsgKanji93EBTex[] = dgMsgKanji93EBTex; + +#define dgMsgKanji93ECTex "__OTR__textures/kanji/gMsgKanji93ECTex" +static const ALIGN_ASSET(2) char gMsgKanji93ECTex[] = dgMsgKanji93ECTex; + +#define dgMsgKanji93EDTex "__OTR__textures/kanji/gMsgKanji93EDTex" +static const ALIGN_ASSET(2) char gMsgKanji93EDTex[] = dgMsgKanji93EDTex; + +#define dgMsgKanji93EETex "__OTR__textures/kanji/gMsgKanji93EETex" +static const ALIGN_ASSET(2) char gMsgKanji93EETex[] = dgMsgKanji93EETex; + +#define dgMsgKanji93EFTex "__OTR__textures/kanji/gMsgKanji93EFTex" +static const ALIGN_ASSET(2) char gMsgKanji93EFTex[] = dgMsgKanji93EFTex; + +#define dgMsgKanji93F0Tex "__OTR__textures/kanji/gMsgKanji93F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F0Tex[] = dgMsgKanji93F0Tex; + +#define dgMsgKanji93F1Tex "__OTR__textures/kanji/gMsgKanji93F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F1Tex[] = dgMsgKanji93F1Tex; + +#define dgMsgKanji93F2Tex "__OTR__textures/kanji/gMsgKanji93F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F2Tex[] = dgMsgKanji93F2Tex; + +#define dgMsgKanji93F3Tex "__OTR__textures/kanji/gMsgKanji93F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F3Tex[] = dgMsgKanji93F3Tex; + +#define dgMsgKanji93F4Tex "__OTR__textures/kanji/gMsgKanji93F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F4Tex[] = dgMsgKanji93F4Tex; + +#define dgMsgKanji93F5Tex "__OTR__textures/kanji/gMsgKanji93F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F5Tex[] = dgMsgKanji93F5Tex; + +#define dgMsgKanji93F6Tex "__OTR__textures/kanji/gMsgKanji93F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F6Tex[] = dgMsgKanji93F6Tex; + +#define dgMsgKanji93F7Tex "__OTR__textures/kanji/gMsgKanji93F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F7Tex[] = dgMsgKanji93F7Tex; + +#define dgMsgKanji93F8Tex "__OTR__textures/kanji/gMsgKanji93F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F8Tex[] = dgMsgKanji93F8Tex; + +#define dgMsgKanji93F9Tex "__OTR__textures/kanji/gMsgKanji93F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji93F9Tex[] = dgMsgKanji93F9Tex; + +#define dgMsgKanji93FATex "__OTR__textures/kanji/gMsgKanji93FATex" +static const ALIGN_ASSET(2) char gMsgKanji93FATex[] = dgMsgKanji93FATex; + +#define dgMsgKanji93FBTex "__OTR__textures/kanji/gMsgKanji93FBTex" +static const ALIGN_ASSET(2) char gMsgKanji93FBTex[] = dgMsgKanji93FBTex; + +#define dgMsgKanji93FCTex "__OTR__textures/kanji/gMsgKanji93FCTex" +static const ALIGN_ASSET(2) char gMsgKanji93FCTex[] = dgMsgKanji93FCTex; + +#define dgMsgKanji9440Tex "__OTR__textures/kanji/gMsgKanji9440Tex" +static const ALIGN_ASSET(2) char gMsgKanji9440Tex[] = dgMsgKanji9440Tex; + +#define dgMsgKanji9441Tex "__OTR__textures/kanji/gMsgKanji9441Tex" +static const ALIGN_ASSET(2) char gMsgKanji9441Tex[] = dgMsgKanji9441Tex; + +#define dgMsgKanji9442Tex "__OTR__textures/kanji/gMsgKanji9442Tex" +static const ALIGN_ASSET(2) char gMsgKanji9442Tex[] = dgMsgKanji9442Tex; + +#define dgMsgKanji9443Tex "__OTR__textures/kanji/gMsgKanji9443Tex" +static const ALIGN_ASSET(2) char gMsgKanji9443Tex[] = dgMsgKanji9443Tex; + +#define dgMsgKanji9444Tex "__OTR__textures/kanji/gMsgKanji9444Tex" +static const ALIGN_ASSET(2) char gMsgKanji9444Tex[] = dgMsgKanji9444Tex; + +#define dgMsgKanji9445Tex "__OTR__textures/kanji/gMsgKanji9445Tex" +static const ALIGN_ASSET(2) char gMsgKanji9445Tex[] = dgMsgKanji9445Tex; + +#define dgMsgKanji9446Tex "__OTR__textures/kanji/gMsgKanji9446Tex" +static const ALIGN_ASSET(2) char gMsgKanji9446Tex[] = dgMsgKanji9446Tex; + +#define dgMsgKanji9447Tex "__OTR__textures/kanji/gMsgKanji9447Tex" +static const ALIGN_ASSET(2) char gMsgKanji9447Tex[] = dgMsgKanji9447Tex; + +#define dgMsgKanji9448Tex "__OTR__textures/kanji/gMsgKanji9448Tex" +static const ALIGN_ASSET(2) char gMsgKanji9448Tex[] = dgMsgKanji9448Tex; + +#define dgMsgKanji9449Tex "__OTR__textures/kanji/gMsgKanji9449Tex" +static const ALIGN_ASSET(2) char gMsgKanji9449Tex[] = dgMsgKanji9449Tex; + +#define dgMsgKanji944ATex "__OTR__textures/kanji/gMsgKanji944ATex" +static const ALIGN_ASSET(2) char gMsgKanji944ATex[] = dgMsgKanji944ATex; + +#define dgMsgKanji944BTex "__OTR__textures/kanji/gMsgKanji944BTex" +static const ALIGN_ASSET(2) char gMsgKanji944BTex[] = dgMsgKanji944BTex; + +#define dgMsgKanji944CTex "__OTR__textures/kanji/gMsgKanji944CTex" +static const ALIGN_ASSET(2) char gMsgKanji944CTex[] = dgMsgKanji944CTex; + +#define dgMsgKanji944DTex "__OTR__textures/kanji/gMsgKanji944DTex" +static const ALIGN_ASSET(2) char gMsgKanji944DTex[] = dgMsgKanji944DTex; + +#define dgMsgKanji944ETex "__OTR__textures/kanji/gMsgKanji944ETex" +static const ALIGN_ASSET(2) char gMsgKanji944ETex[] = dgMsgKanji944ETex; + +#define dgMsgKanji944FTex "__OTR__textures/kanji/gMsgKanji944FTex" +static const ALIGN_ASSET(2) char gMsgKanji944FTex[] = dgMsgKanji944FTex; + +#define dgMsgKanji9450Tex "__OTR__textures/kanji/gMsgKanji9450Tex" +static const ALIGN_ASSET(2) char gMsgKanji9450Tex[] = dgMsgKanji9450Tex; + +#define dgMsgKanji9451Tex "__OTR__textures/kanji/gMsgKanji9451Tex" +static const ALIGN_ASSET(2) char gMsgKanji9451Tex[] = dgMsgKanji9451Tex; + +#define dgMsgKanji9452Tex "__OTR__textures/kanji/gMsgKanji9452Tex" +static const ALIGN_ASSET(2) char gMsgKanji9452Tex[] = dgMsgKanji9452Tex; + +#define dgMsgKanji9453Tex "__OTR__textures/kanji/gMsgKanji9453Tex" +static const ALIGN_ASSET(2) char gMsgKanji9453Tex[] = dgMsgKanji9453Tex; + +#define dgMsgKanji9454Tex "__OTR__textures/kanji/gMsgKanji9454Tex" +static const ALIGN_ASSET(2) char gMsgKanji9454Tex[] = dgMsgKanji9454Tex; + +#define dgMsgKanji9455Tex "__OTR__textures/kanji/gMsgKanji9455Tex" +static const ALIGN_ASSET(2) char gMsgKanji9455Tex[] = dgMsgKanji9455Tex; + +#define dgMsgKanji9456Tex "__OTR__textures/kanji/gMsgKanji9456Tex" +static const ALIGN_ASSET(2) char gMsgKanji9456Tex[] = dgMsgKanji9456Tex; + +#define dgMsgKanji9457Tex "__OTR__textures/kanji/gMsgKanji9457Tex" +static const ALIGN_ASSET(2) char gMsgKanji9457Tex[] = dgMsgKanji9457Tex; + +#define dgMsgKanji9458Tex "__OTR__textures/kanji/gMsgKanji9458Tex" +static const ALIGN_ASSET(2) char gMsgKanji9458Tex[] = dgMsgKanji9458Tex; + +#define dgMsgKanji9459Tex "__OTR__textures/kanji/gMsgKanji9459Tex" +static const ALIGN_ASSET(2) char gMsgKanji9459Tex[] = dgMsgKanji9459Tex; + +#define dgMsgKanji945ATex "__OTR__textures/kanji/gMsgKanji945ATex" +static const ALIGN_ASSET(2) char gMsgKanji945ATex[] = dgMsgKanji945ATex; + +#define dgMsgKanji945BTex "__OTR__textures/kanji/gMsgKanji945BTex" +static const ALIGN_ASSET(2) char gMsgKanji945BTex[] = dgMsgKanji945BTex; + +#define dgMsgKanji945CTex "__OTR__textures/kanji/gMsgKanji945CTex" +static const ALIGN_ASSET(2) char gMsgKanji945CTex[] = dgMsgKanji945CTex; + +#define dgMsgKanji945DTex "__OTR__textures/kanji/gMsgKanji945DTex" +static const ALIGN_ASSET(2) char gMsgKanji945DTex[] = dgMsgKanji945DTex; + +#define dgMsgKanji945ETex "__OTR__textures/kanji/gMsgKanji945ETex" +static const ALIGN_ASSET(2) char gMsgKanji945ETex[] = dgMsgKanji945ETex; + +#define dgMsgKanji945FTex "__OTR__textures/kanji/gMsgKanji945FTex" +static const ALIGN_ASSET(2) char gMsgKanji945FTex[] = dgMsgKanji945FTex; + +#define dgMsgKanji9460Tex "__OTR__textures/kanji/gMsgKanji9460Tex" +static const ALIGN_ASSET(2) char gMsgKanji9460Tex[] = dgMsgKanji9460Tex; + +#define dgMsgKanji9461Tex "__OTR__textures/kanji/gMsgKanji9461Tex" +static const ALIGN_ASSET(2) char gMsgKanji9461Tex[] = dgMsgKanji9461Tex; + +#define dgMsgKanji9462Tex "__OTR__textures/kanji/gMsgKanji9462Tex" +static const ALIGN_ASSET(2) char gMsgKanji9462Tex[] = dgMsgKanji9462Tex; + +#define dgMsgKanji9463Tex "__OTR__textures/kanji/gMsgKanji9463Tex" +static const ALIGN_ASSET(2) char gMsgKanji9463Tex[] = dgMsgKanji9463Tex; + +#define dgMsgKanji9464Tex "__OTR__textures/kanji/gMsgKanji9464Tex" +static const ALIGN_ASSET(2) char gMsgKanji9464Tex[] = dgMsgKanji9464Tex; + +#define dgMsgKanji9465Tex "__OTR__textures/kanji/gMsgKanji9465Tex" +static const ALIGN_ASSET(2) char gMsgKanji9465Tex[] = dgMsgKanji9465Tex; + +#define dgMsgKanji9466Tex "__OTR__textures/kanji/gMsgKanji9466Tex" +static const ALIGN_ASSET(2) char gMsgKanji9466Tex[] = dgMsgKanji9466Tex; + +#define dgMsgKanji9467Tex "__OTR__textures/kanji/gMsgKanji9467Tex" +static const ALIGN_ASSET(2) char gMsgKanji9467Tex[] = dgMsgKanji9467Tex; + +#define dgMsgKanji9468Tex "__OTR__textures/kanji/gMsgKanji9468Tex" +static const ALIGN_ASSET(2) char gMsgKanji9468Tex[] = dgMsgKanji9468Tex; + +#define dgMsgKanji9469Tex "__OTR__textures/kanji/gMsgKanji9469Tex" +static const ALIGN_ASSET(2) char gMsgKanji9469Tex[] = dgMsgKanji9469Tex; + +#define dgMsgKanji946ATex "__OTR__textures/kanji/gMsgKanji946ATex" +static const ALIGN_ASSET(2) char gMsgKanji946ATex[] = dgMsgKanji946ATex; + +#define dgMsgKanji946BTex "__OTR__textures/kanji/gMsgKanji946BTex" +static const ALIGN_ASSET(2) char gMsgKanji946BTex[] = dgMsgKanji946BTex; + +#define dgMsgKanji946CTex "__OTR__textures/kanji/gMsgKanji946CTex" +static const ALIGN_ASSET(2) char gMsgKanji946CTex[] = dgMsgKanji946CTex; + +#define dgMsgKanji946DTex "__OTR__textures/kanji/gMsgKanji946DTex" +static const ALIGN_ASSET(2) char gMsgKanji946DTex[] = dgMsgKanji946DTex; + +#define dgMsgKanji946ETex "__OTR__textures/kanji/gMsgKanji946ETex" +static const ALIGN_ASSET(2) char gMsgKanji946ETex[] = dgMsgKanji946ETex; + +#define dgMsgKanji946FTex "__OTR__textures/kanji/gMsgKanji946FTex" +static const ALIGN_ASSET(2) char gMsgKanji946FTex[] = dgMsgKanji946FTex; + +#define dgMsgKanji9470Tex "__OTR__textures/kanji/gMsgKanji9470Tex" +static const ALIGN_ASSET(2) char gMsgKanji9470Tex[] = dgMsgKanji9470Tex; + +#define dgMsgKanji9471Tex "__OTR__textures/kanji/gMsgKanji9471Tex" +static const ALIGN_ASSET(2) char gMsgKanji9471Tex[] = dgMsgKanji9471Tex; + +#define dgMsgKanji9472Tex "__OTR__textures/kanji/gMsgKanji9472Tex" +static const ALIGN_ASSET(2) char gMsgKanji9472Tex[] = dgMsgKanji9472Tex; + +#define dgMsgKanji9473Tex "__OTR__textures/kanji/gMsgKanji9473Tex" +static const ALIGN_ASSET(2) char gMsgKanji9473Tex[] = dgMsgKanji9473Tex; + +#define dgMsgKanji9474Tex "__OTR__textures/kanji/gMsgKanji9474Tex" +static const ALIGN_ASSET(2) char gMsgKanji9474Tex[] = dgMsgKanji9474Tex; + +#define dgMsgKanji9475Tex "__OTR__textures/kanji/gMsgKanji9475Tex" +static const ALIGN_ASSET(2) char gMsgKanji9475Tex[] = dgMsgKanji9475Tex; + +#define dgMsgKanji9476Tex "__OTR__textures/kanji/gMsgKanji9476Tex" +static const ALIGN_ASSET(2) char gMsgKanji9476Tex[] = dgMsgKanji9476Tex; + +#define dgMsgKanji9477Tex "__OTR__textures/kanji/gMsgKanji9477Tex" +static const ALIGN_ASSET(2) char gMsgKanji9477Tex[] = dgMsgKanji9477Tex; + +#define dgMsgKanji9478Tex "__OTR__textures/kanji/gMsgKanji9478Tex" +static const ALIGN_ASSET(2) char gMsgKanji9478Tex[] = dgMsgKanji9478Tex; + +#define dgMsgKanji9479Tex "__OTR__textures/kanji/gMsgKanji9479Tex" +static const ALIGN_ASSET(2) char gMsgKanji9479Tex[] = dgMsgKanji9479Tex; + +#define dgMsgKanji947ATex "__OTR__textures/kanji/gMsgKanji947ATex" +static const ALIGN_ASSET(2) char gMsgKanji947ATex[] = dgMsgKanji947ATex; + +#define dgMsgKanji947BTex "__OTR__textures/kanji/gMsgKanji947BTex" +static const ALIGN_ASSET(2) char gMsgKanji947BTex[] = dgMsgKanji947BTex; + +#define dgMsgKanji947CTex "__OTR__textures/kanji/gMsgKanji947CTex" +static const ALIGN_ASSET(2) char gMsgKanji947CTex[] = dgMsgKanji947CTex; + +#define dgMsgKanji947DTex "__OTR__textures/kanji/gMsgKanji947DTex" +static const ALIGN_ASSET(2) char gMsgKanji947DTex[] = dgMsgKanji947DTex; + +#define dgMsgKanji947ETex "__OTR__textures/kanji/gMsgKanji947ETex" +static const ALIGN_ASSET(2) char gMsgKanji947ETex[] = dgMsgKanji947ETex; + +#define dgMsgKanji9480Tex "__OTR__textures/kanji/gMsgKanji9480Tex" +static const ALIGN_ASSET(2) char gMsgKanji9480Tex[] = dgMsgKanji9480Tex; + +#define dgMsgKanji9481Tex "__OTR__textures/kanji/gMsgKanji9481Tex" +static const ALIGN_ASSET(2) char gMsgKanji9481Tex[] = dgMsgKanji9481Tex; + +#define dgMsgKanji9482Tex "__OTR__textures/kanji/gMsgKanji9482Tex" +static const ALIGN_ASSET(2) char gMsgKanji9482Tex[] = dgMsgKanji9482Tex; + +#define dgMsgKanji9483Tex "__OTR__textures/kanji/gMsgKanji9483Tex" +static const ALIGN_ASSET(2) char gMsgKanji9483Tex[] = dgMsgKanji9483Tex; + +#define dgMsgKanji9484Tex "__OTR__textures/kanji/gMsgKanji9484Tex" +static const ALIGN_ASSET(2) char gMsgKanji9484Tex[] = dgMsgKanji9484Tex; + +#define dgMsgKanji9485Tex "__OTR__textures/kanji/gMsgKanji9485Tex" +static const ALIGN_ASSET(2) char gMsgKanji9485Tex[] = dgMsgKanji9485Tex; + +#define dgMsgKanji9486Tex "__OTR__textures/kanji/gMsgKanji9486Tex" +static const ALIGN_ASSET(2) char gMsgKanji9486Tex[] = dgMsgKanji9486Tex; + +#define dgMsgKanji9487Tex "__OTR__textures/kanji/gMsgKanji9487Tex" +static const ALIGN_ASSET(2) char gMsgKanji9487Tex[] = dgMsgKanji9487Tex; + +#define dgMsgKanji9488Tex "__OTR__textures/kanji/gMsgKanji9488Tex" +static const ALIGN_ASSET(2) char gMsgKanji9488Tex[] = dgMsgKanji9488Tex; + +#define dgMsgKanji9489Tex "__OTR__textures/kanji/gMsgKanji9489Tex" +static const ALIGN_ASSET(2) char gMsgKanji9489Tex[] = dgMsgKanji9489Tex; + +#define dgMsgKanji948ATex "__OTR__textures/kanji/gMsgKanji948ATex" +static const ALIGN_ASSET(2) char gMsgKanji948ATex[] = dgMsgKanji948ATex; + +#define dgMsgKanji948BTex "__OTR__textures/kanji/gMsgKanji948BTex" +static const ALIGN_ASSET(2) char gMsgKanji948BTex[] = dgMsgKanji948BTex; + +#define dgMsgKanji948CTex "__OTR__textures/kanji/gMsgKanji948CTex" +static const ALIGN_ASSET(2) char gMsgKanji948CTex[] = dgMsgKanji948CTex; + +#define dgMsgKanji948DTex "__OTR__textures/kanji/gMsgKanji948DTex" +static const ALIGN_ASSET(2) char gMsgKanji948DTex[] = dgMsgKanji948DTex; + +#define dgMsgKanji948ETex "__OTR__textures/kanji/gMsgKanji948ETex" +static const ALIGN_ASSET(2) char gMsgKanji948ETex[] = dgMsgKanji948ETex; + +#define dgMsgKanji948FTex "__OTR__textures/kanji/gMsgKanji948FTex" +static const ALIGN_ASSET(2) char gMsgKanji948FTex[] = dgMsgKanji948FTex; + +#define dgMsgKanji9490Tex "__OTR__textures/kanji/gMsgKanji9490Tex" +static const ALIGN_ASSET(2) char gMsgKanji9490Tex[] = dgMsgKanji9490Tex; + +#define dgMsgKanji9491Tex "__OTR__textures/kanji/gMsgKanji9491Tex" +static const ALIGN_ASSET(2) char gMsgKanji9491Tex[] = dgMsgKanji9491Tex; + +#define dgMsgKanji9492Tex "__OTR__textures/kanji/gMsgKanji9492Tex" +static const ALIGN_ASSET(2) char gMsgKanji9492Tex[] = dgMsgKanji9492Tex; + +#define dgMsgKanji9493Tex "__OTR__textures/kanji/gMsgKanji9493Tex" +static const ALIGN_ASSET(2) char gMsgKanji9493Tex[] = dgMsgKanji9493Tex; + +#define dgMsgKanji9494Tex "__OTR__textures/kanji/gMsgKanji9494Tex" +static const ALIGN_ASSET(2) char gMsgKanji9494Tex[] = dgMsgKanji9494Tex; + +#define dgMsgKanji9495Tex "__OTR__textures/kanji/gMsgKanji9495Tex" +static const ALIGN_ASSET(2) char gMsgKanji9495Tex[] = dgMsgKanji9495Tex; + +#define dgMsgKanji9496Tex "__OTR__textures/kanji/gMsgKanji9496Tex" +static const ALIGN_ASSET(2) char gMsgKanji9496Tex[] = dgMsgKanji9496Tex; + +#define dgMsgKanji9497Tex "__OTR__textures/kanji/gMsgKanji9497Tex" +static const ALIGN_ASSET(2) char gMsgKanji9497Tex[] = dgMsgKanji9497Tex; + +#define dgMsgKanji9498Tex "__OTR__textures/kanji/gMsgKanji9498Tex" +static const ALIGN_ASSET(2) char gMsgKanji9498Tex[] = dgMsgKanji9498Tex; + +#define dgMsgKanji9499Tex "__OTR__textures/kanji/gMsgKanji9499Tex" +static const ALIGN_ASSET(2) char gMsgKanji9499Tex[] = dgMsgKanji9499Tex; + +#define dgMsgKanji949ATex "__OTR__textures/kanji/gMsgKanji949ATex" +static const ALIGN_ASSET(2) char gMsgKanji949ATex[] = dgMsgKanji949ATex; + +#define dgMsgKanji949BTex "__OTR__textures/kanji/gMsgKanji949BTex" +static const ALIGN_ASSET(2) char gMsgKanji949BTex[] = dgMsgKanji949BTex; + +#define dgMsgKanji949CTex "__OTR__textures/kanji/gMsgKanji949CTex" +static const ALIGN_ASSET(2) char gMsgKanji949CTex[] = dgMsgKanji949CTex; + +#define dgMsgKanji949DTex "__OTR__textures/kanji/gMsgKanji949DTex" +static const ALIGN_ASSET(2) char gMsgKanji949DTex[] = dgMsgKanji949DTex; + +#define dgMsgKanji949ETex "__OTR__textures/kanji/gMsgKanji949ETex" +static const ALIGN_ASSET(2) char gMsgKanji949ETex[] = dgMsgKanji949ETex; + +#define dgMsgKanji949FTex "__OTR__textures/kanji/gMsgKanji949FTex" +static const ALIGN_ASSET(2) char gMsgKanji949FTex[] = dgMsgKanji949FTex; + +#define dgMsgKanji94A0Tex "__OTR__textures/kanji/gMsgKanji94A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A0Tex[] = dgMsgKanji94A0Tex; + +#define dgMsgKanji94A1Tex "__OTR__textures/kanji/gMsgKanji94A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A1Tex[] = dgMsgKanji94A1Tex; + +#define dgMsgKanji94A2Tex "__OTR__textures/kanji/gMsgKanji94A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A2Tex[] = dgMsgKanji94A2Tex; + +#define dgMsgKanji94A3Tex "__OTR__textures/kanji/gMsgKanji94A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A3Tex[] = dgMsgKanji94A3Tex; + +#define dgMsgKanji94A4Tex "__OTR__textures/kanji/gMsgKanji94A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A4Tex[] = dgMsgKanji94A4Tex; + +#define dgMsgKanji94A5Tex "__OTR__textures/kanji/gMsgKanji94A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A5Tex[] = dgMsgKanji94A5Tex; + +#define dgMsgKanji94A6Tex "__OTR__textures/kanji/gMsgKanji94A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A6Tex[] = dgMsgKanji94A6Tex; + +#define dgMsgKanji94A7Tex "__OTR__textures/kanji/gMsgKanji94A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A7Tex[] = dgMsgKanji94A7Tex; + +#define dgMsgKanji94A8Tex "__OTR__textures/kanji/gMsgKanji94A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A8Tex[] = dgMsgKanji94A8Tex; + +#define dgMsgKanji94A9Tex "__OTR__textures/kanji/gMsgKanji94A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji94A9Tex[] = dgMsgKanji94A9Tex; + +#define dgMsgKanji94AATex "__OTR__textures/kanji/gMsgKanji94AATex" +static const ALIGN_ASSET(2) char gMsgKanji94AATex[] = dgMsgKanji94AATex; + +#define dgMsgKanji94ABTex "__OTR__textures/kanji/gMsgKanji94ABTex" +static const ALIGN_ASSET(2) char gMsgKanji94ABTex[] = dgMsgKanji94ABTex; + +#define dgMsgKanji94ACTex "__OTR__textures/kanji/gMsgKanji94ACTex" +static const ALIGN_ASSET(2) char gMsgKanji94ACTex[] = dgMsgKanji94ACTex; + +#define dgMsgKanji94ADTex "__OTR__textures/kanji/gMsgKanji94ADTex" +static const ALIGN_ASSET(2) char gMsgKanji94ADTex[] = dgMsgKanji94ADTex; + +#define dgMsgKanji94AETex "__OTR__textures/kanji/gMsgKanji94AETex" +static const ALIGN_ASSET(2) char gMsgKanji94AETex[] = dgMsgKanji94AETex; + +#define dgMsgKanji94AFTex "__OTR__textures/kanji/gMsgKanji94AFTex" +static const ALIGN_ASSET(2) char gMsgKanji94AFTex[] = dgMsgKanji94AFTex; + +#define dgMsgKanji94B0Tex "__OTR__textures/kanji/gMsgKanji94B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B0Tex[] = dgMsgKanji94B0Tex; + +#define dgMsgKanji94B1Tex "__OTR__textures/kanji/gMsgKanji94B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B1Tex[] = dgMsgKanji94B1Tex; + +#define dgMsgKanji94B2Tex "__OTR__textures/kanji/gMsgKanji94B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B2Tex[] = dgMsgKanji94B2Tex; + +#define dgMsgKanji94B3Tex "__OTR__textures/kanji/gMsgKanji94B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B3Tex[] = dgMsgKanji94B3Tex; + +#define dgMsgKanji94B4Tex "__OTR__textures/kanji/gMsgKanji94B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B4Tex[] = dgMsgKanji94B4Tex; + +#define dgMsgKanji94B5Tex "__OTR__textures/kanji/gMsgKanji94B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B5Tex[] = dgMsgKanji94B5Tex; + +#define dgMsgKanji94B6Tex "__OTR__textures/kanji/gMsgKanji94B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B6Tex[] = dgMsgKanji94B6Tex; + +#define dgMsgKanji94B7Tex "__OTR__textures/kanji/gMsgKanji94B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B7Tex[] = dgMsgKanji94B7Tex; + +#define dgMsgKanji94B8Tex "__OTR__textures/kanji/gMsgKanji94B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B8Tex[] = dgMsgKanji94B8Tex; + +#define dgMsgKanji94B9Tex "__OTR__textures/kanji/gMsgKanji94B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji94B9Tex[] = dgMsgKanji94B9Tex; + +#define dgMsgKanji94BATex "__OTR__textures/kanji/gMsgKanji94BATex" +static const ALIGN_ASSET(2) char gMsgKanji94BATex[] = dgMsgKanji94BATex; + +#define dgMsgKanji94BBTex "__OTR__textures/kanji/gMsgKanji94BBTex" +static const ALIGN_ASSET(2) char gMsgKanji94BBTex[] = dgMsgKanji94BBTex; + +#define dgMsgKanji94BCTex "__OTR__textures/kanji/gMsgKanji94BCTex" +static const ALIGN_ASSET(2) char gMsgKanji94BCTex[] = dgMsgKanji94BCTex; + +#define dgMsgKanji94BDTex "__OTR__textures/kanji/gMsgKanji94BDTex" +static const ALIGN_ASSET(2) char gMsgKanji94BDTex[] = dgMsgKanji94BDTex; + +#define dgMsgKanji94BETex "__OTR__textures/kanji/gMsgKanji94BETex" +static const ALIGN_ASSET(2) char gMsgKanji94BETex[] = dgMsgKanji94BETex; + +#define dgMsgKanji94BFTex "__OTR__textures/kanji/gMsgKanji94BFTex" +static const ALIGN_ASSET(2) char gMsgKanji94BFTex[] = dgMsgKanji94BFTex; + +#define dgMsgKanji94C0Tex "__OTR__textures/kanji/gMsgKanji94C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C0Tex[] = dgMsgKanji94C0Tex; + +#define dgMsgKanji94C1Tex "__OTR__textures/kanji/gMsgKanji94C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C1Tex[] = dgMsgKanji94C1Tex; + +#define dgMsgKanji94C2Tex "__OTR__textures/kanji/gMsgKanji94C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C2Tex[] = dgMsgKanji94C2Tex; + +#define dgMsgKanji94C3Tex "__OTR__textures/kanji/gMsgKanji94C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C3Tex[] = dgMsgKanji94C3Tex; + +#define dgMsgKanji94C4Tex "__OTR__textures/kanji/gMsgKanji94C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C4Tex[] = dgMsgKanji94C4Tex; + +#define dgMsgKanji94C5Tex "__OTR__textures/kanji/gMsgKanji94C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C5Tex[] = dgMsgKanji94C5Tex; + +#define dgMsgKanji94C6Tex "__OTR__textures/kanji/gMsgKanji94C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C6Tex[] = dgMsgKanji94C6Tex; + +#define dgMsgKanji94C7Tex "__OTR__textures/kanji/gMsgKanji94C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C7Tex[] = dgMsgKanji94C7Tex; + +#define dgMsgKanji94C8Tex "__OTR__textures/kanji/gMsgKanji94C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C8Tex[] = dgMsgKanji94C8Tex; + +#define dgMsgKanji94C9Tex "__OTR__textures/kanji/gMsgKanji94C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji94C9Tex[] = dgMsgKanji94C9Tex; + +#define dgMsgKanji94CATex "__OTR__textures/kanji/gMsgKanji94CATex" +static const ALIGN_ASSET(2) char gMsgKanji94CATex[] = dgMsgKanji94CATex; + +#define dgMsgKanji94CBTex "__OTR__textures/kanji/gMsgKanji94CBTex" +static const ALIGN_ASSET(2) char gMsgKanji94CBTex[] = dgMsgKanji94CBTex; + +#define dgMsgKanji94CCTex "__OTR__textures/kanji/gMsgKanji94CCTex" +static const ALIGN_ASSET(2) char gMsgKanji94CCTex[] = dgMsgKanji94CCTex; + +#define dgMsgKanji94CDTex "__OTR__textures/kanji/gMsgKanji94CDTex" +static const ALIGN_ASSET(2) char gMsgKanji94CDTex[] = dgMsgKanji94CDTex; + +#define dgMsgKanji94CETex "__OTR__textures/kanji/gMsgKanji94CETex" +static const ALIGN_ASSET(2) char gMsgKanji94CETex[] = dgMsgKanji94CETex; + +#define dgMsgKanji94CFTex "__OTR__textures/kanji/gMsgKanji94CFTex" +static const ALIGN_ASSET(2) char gMsgKanji94CFTex[] = dgMsgKanji94CFTex; + +#define dgMsgKanji94D0Tex "__OTR__textures/kanji/gMsgKanji94D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D0Tex[] = dgMsgKanji94D0Tex; + +#define dgMsgKanji94D1Tex "__OTR__textures/kanji/gMsgKanji94D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D1Tex[] = dgMsgKanji94D1Tex; + +#define dgMsgKanji94D2Tex "__OTR__textures/kanji/gMsgKanji94D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D2Tex[] = dgMsgKanji94D2Tex; + +#define dgMsgKanji94D3Tex "__OTR__textures/kanji/gMsgKanji94D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D3Tex[] = dgMsgKanji94D3Tex; + +#define dgMsgKanji94D4Tex "__OTR__textures/kanji/gMsgKanji94D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D4Tex[] = dgMsgKanji94D4Tex; + +#define dgMsgKanji94D5Tex "__OTR__textures/kanji/gMsgKanji94D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D5Tex[] = dgMsgKanji94D5Tex; + +#define dgMsgKanji94D6Tex "__OTR__textures/kanji/gMsgKanji94D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D6Tex[] = dgMsgKanji94D6Tex; + +#define dgMsgKanji94D7Tex "__OTR__textures/kanji/gMsgKanji94D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D7Tex[] = dgMsgKanji94D7Tex; + +#define dgMsgKanji94D8Tex "__OTR__textures/kanji/gMsgKanji94D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D8Tex[] = dgMsgKanji94D8Tex; + +#define dgMsgKanji94D9Tex "__OTR__textures/kanji/gMsgKanji94D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji94D9Tex[] = dgMsgKanji94D9Tex; + +#define dgMsgKanji94DATex "__OTR__textures/kanji/gMsgKanji94DATex" +static const ALIGN_ASSET(2) char gMsgKanji94DATex[] = dgMsgKanji94DATex; + +#define dgMsgKanji94DBTex "__OTR__textures/kanji/gMsgKanji94DBTex" +static const ALIGN_ASSET(2) char gMsgKanji94DBTex[] = dgMsgKanji94DBTex; + +#define dgMsgKanji94DCTex "__OTR__textures/kanji/gMsgKanji94DCTex" +static const ALIGN_ASSET(2) char gMsgKanji94DCTex[] = dgMsgKanji94DCTex; + +#define dgMsgKanji94DDTex "__OTR__textures/kanji/gMsgKanji94DDTex" +static const ALIGN_ASSET(2) char gMsgKanji94DDTex[] = dgMsgKanji94DDTex; + +#define dgMsgKanji94DETex "__OTR__textures/kanji/gMsgKanji94DETex" +static const ALIGN_ASSET(2) char gMsgKanji94DETex[] = dgMsgKanji94DETex; + +#define dgMsgKanji94DFTex "__OTR__textures/kanji/gMsgKanji94DFTex" +static const ALIGN_ASSET(2) char gMsgKanji94DFTex[] = dgMsgKanji94DFTex; + +#define dgMsgKanji94E0Tex "__OTR__textures/kanji/gMsgKanji94E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E0Tex[] = dgMsgKanji94E0Tex; + +#define dgMsgKanji94E1Tex "__OTR__textures/kanji/gMsgKanji94E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E1Tex[] = dgMsgKanji94E1Tex; + +#define dgMsgKanji94E2Tex "__OTR__textures/kanji/gMsgKanji94E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E2Tex[] = dgMsgKanji94E2Tex; + +#define dgMsgKanji94E3Tex "__OTR__textures/kanji/gMsgKanji94E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E3Tex[] = dgMsgKanji94E3Tex; + +#define dgMsgKanji94E4Tex "__OTR__textures/kanji/gMsgKanji94E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E4Tex[] = dgMsgKanji94E4Tex; + +#define dgMsgKanji94E5Tex "__OTR__textures/kanji/gMsgKanji94E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E5Tex[] = dgMsgKanji94E5Tex; + +#define dgMsgKanji94E6Tex "__OTR__textures/kanji/gMsgKanji94E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E6Tex[] = dgMsgKanji94E6Tex; + +#define dgMsgKanji94E7Tex "__OTR__textures/kanji/gMsgKanji94E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E7Tex[] = dgMsgKanji94E7Tex; + +#define dgMsgKanji94E8Tex "__OTR__textures/kanji/gMsgKanji94E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E8Tex[] = dgMsgKanji94E8Tex; + +#define dgMsgKanji94E9Tex "__OTR__textures/kanji/gMsgKanji94E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji94E9Tex[] = dgMsgKanji94E9Tex; + +#define dgMsgKanji94EATex "__OTR__textures/kanji/gMsgKanji94EATex" +static const ALIGN_ASSET(2) char gMsgKanji94EATex[] = dgMsgKanji94EATex; + +#define dgMsgKanji94EBTex "__OTR__textures/kanji/gMsgKanji94EBTex" +static const ALIGN_ASSET(2) char gMsgKanji94EBTex[] = dgMsgKanji94EBTex; + +#define dgMsgKanji94ECTex "__OTR__textures/kanji/gMsgKanji94ECTex" +static const ALIGN_ASSET(2) char gMsgKanji94ECTex[] = dgMsgKanji94ECTex; + +#define dgMsgKanji94EDTex "__OTR__textures/kanji/gMsgKanji94EDTex" +static const ALIGN_ASSET(2) char gMsgKanji94EDTex[] = dgMsgKanji94EDTex; + +#define dgMsgKanji94EETex "__OTR__textures/kanji/gMsgKanji94EETex" +static const ALIGN_ASSET(2) char gMsgKanji94EETex[] = dgMsgKanji94EETex; + +#define dgMsgKanji94EFTex "__OTR__textures/kanji/gMsgKanji94EFTex" +static const ALIGN_ASSET(2) char gMsgKanji94EFTex[] = dgMsgKanji94EFTex; + +#define dgMsgKanji94F0Tex "__OTR__textures/kanji/gMsgKanji94F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F0Tex[] = dgMsgKanji94F0Tex; + +#define dgMsgKanji94F1Tex "__OTR__textures/kanji/gMsgKanji94F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F1Tex[] = dgMsgKanji94F1Tex; + +#define dgMsgKanji94F2Tex "__OTR__textures/kanji/gMsgKanji94F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F2Tex[] = dgMsgKanji94F2Tex; + +#define dgMsgKanji94F3Tex "__OTR__textures/kanji/gMsgKanji94F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F3Tex[] = dgMsgKanji94F3Tex; + +#define dgMsgKanji94F4Tex "__OTR__textures/kanji/gMsgKanji94F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F4Tex[] = dgMsgKanji94F4Tex; + +#define dgMsgKanji94F5Tex "__OTR__textures/kanji/gMsgKanji94F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F5Tex[] = dgMsgKanji94F5Tex; + +#define dgMsgKanji94F6Tex "__OTR__textures/kanji/gMsgKanji94F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F6Tex[] = dgMsgKanji94F6Tex; + +#define dgMsgKanji94F7Tex "__OTR__textures/kanji/gMsgKanji94F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F7Tex[] = dgMsgKanji94F7Tex; + +#define dgMsgKanji94F8Tex "__OTR__textures/kanji/gMsgKanji94F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F8Tex[] = dgMsgKanji94F8Tex; + +#define dgMsgKanji94F9Tex "__OTR__textures/kanji/gMsgKanji94F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji94F9Tex[] = dgMsgKanji94F9Tex; + +#define dgMsgKanji94FATex "__OTR__textures/kanji/gMsgKanji94FATex" +static const ALIGN_ASSET(2) char gMsgKanji94FATex[] = dgMsgKanji94FATex; + +#define dgMsgKanji94FBTex "__OTR__textures/kanji/gMsgKanji94FBTex" +static const ALIGN_ASSET(2) char gMsgKanji94FBTex[] = dgMsgKanji94FBTex; + +#define dgMsgKanji94FCTex "__OTR__textures/kanji/gMsgKanji94FCTex" +static const ALIGN_ASSET(2) char gMsgKanji94FCTex[] = dgMsgKanji94FCTex; + +#define dgMsgKanji9540Tex "__OTR__textures/kanji/gMsgKanji9540Tex" +static const ALIGN_ASSET(2) char gMsgKanji9540Tex[] = dgMsgKanji9540Tex; + +#define dgMsgKanji9541Tex "__OTR__textures/kanji/gMsgKanji9541Tex" +static const ALIGN_ASSET(2) char gMsgKanji9541Tex[] = dgMsgKanji9541Tex; + +#define dgMsgKanji9542Tex "__OTR__textures/kanji/gMsgKanji9542Tex" +static const ALIGN_ASSET(2) char gMsgKanji9542Tex[] = dgMsgKanji9542Tex; + +#define dgMsgKanji9543Tex "__OTR__textures/kanji/gMsgKanji9543Tex" +static const ALIGN_ASSET(2) char gMsgKanji9543Tex[] = dgMsgKanji9543Tex; + +#define dgMsgKanji9544Tex "__OTR__textures/kanji/gMsgKanji9544Tex" +static const ALIGN_ASSET(2) char gMsgKanji9544Tex[] = dgMsgKanji9544Tex; + +#define dgMsgKanji9545Tex "__OTR__textures/kanji/gMsgKanji9545Tex" +static const ALIGN_ASSET(2) char gMsgKanji9545Tex[] = dgMsgKanji9545Tex; + +#define dgMsgKanji9546Tex "__OTR__textures/kanji/gMsgKanji9546Tex" +static const ALIGN_ASSET(2) char gMsgKanji9546Tex[] = dgMsgKanji9546Tex; + +#define dgMsgKanji9547Tex "__OTR__textures/kanji/gMsgKanji9547Tex" +static const ALIGN_ASSET(2) char gMsgKanji9547Tex[] = dgMsgKanji9547Tex; + +#define dgMsgKanji9548Tex "__OTR__textures/kanji/gMsgKanji9548Tex" +static const ALIGN_ASSET(2) char gMsgKanji9548Tex[] = dgMsgKanji9548Tex; + +#define dgMsgKanji9549Tex "__OTR__textures/kanji/gMsgKanji9549Tex" +static const ALIGN_ASSET(2) char gMsgKanji9549Tex[] = dgMsgKanji9549Tex; + +#define dgMsgKanji954ATex "__OTR__textures/kanji/gMsgKanji954ATex" +static const ALIGN_ASSET(2) char gMsgKanji954ATex[] = dgMsgKanji954ATex; + +#define dgMsgKanji954BTex "__OTR__textures/kanji/gMsgKanji954BTex" +static const ALIGN_ASSET(2) char gMsgKanji954BTex[] = dgMsgKanji954BTex; + +#define dgMsgKanji954CTex "__OTR__textures/kanji/gMsgKanji954CTex" +static const ALIGN_ASSET(2) char gMsgKanji954CTex[] = dgMsgKanji954CTex; + +#define dgMsgKanji954DTex "__OTR__textures/kanji/gMsgKanji954DTex" +static const ALIGN_ASSET(2) char gMsgKanji954DTex[] = dgMsgKanji954DTex; + +#define dgMsgKanji954ETex "__OTR__textures/kanji/gMsgKanji954ETex" +static const ALIGN_ASSET(2) char gMsgKanji954ETex[] = dgMsgKanji954ETex; + +#define dgMsgKanji954FTex "__OTR__textures/kanji/gMsgKanji954FTex" +static const ALIGN_ASSET(2) char gMsgKanji954FTex[] = dgMsgKanji954FTex; + +#define dgMsgKanji9550Tex "__OTR__textures/kanji/gMsgKanji9550Tex" +static const ALIGN_ASSET(2) char gMsgKanji9550Tex[] = dgMsgKanji9550Tex; + +#define dgMsgKanji9551Tex "__OTR__textures/kanji/gMsgKanji9551Tex" +static const ALIGN_ASSET(2) char gMsgKanji9551Tex[] = dgMsgKanji9551Tex; + +#define dgMsgKanji9552Tex "__OTR__textures/kanji/gMsgKanji9552Tex" +static const ALIGN_ASSET(2) char gMsgKanji9552Tex[] = dgMsgKanji9552Tex; + +#define dgMsgKanji9553Tex "__OTR__textures/kanji/gMsgKanji9553Tex" +static const ALIGN_ASSET(2) char gMsgKanji9553Tex[] = dgMsgKanji9553Tex; + +#define dgMsgKanji9554Tex "__OTR__textures/kanji/gMsgKanji9554Tex" +static const ALIGN_ASSET(2) char gMsgKanji9554Tex[] = dgMsgKanji9554Tex; + +#define dgMsgKanji9555Tex "__OTR__textures/kanji/gMsgKanji9555Tex" +static const ALIGN_ASSET(2) char gMsgKanji9555Tex[] = dgMsgKanji9555Tex; + +#define dgMsgKanji9556Tex "__OTR__textures/kanji/gMsgKanji9556Tex" +static const ALIGN_ASSET(2) char gMsgKanji9556Tex[] = dgMsgKanji9556Tex; + +#define dgMsgKanji9557Tex "__OTR__textures/kanji/gMsgKanji9557Tex" +static const ALIGN_ASSET(2) char gMsgKanji9557Tex[] = dgMsgKanji9557Tex; + +#define dgMsgKanji9558Tex "__OTR__textures/kanji/gMsgKanji9558Tex" +static const ALIGN_ASSET(2) char gMsgKanji9558Tex[] = dgMsgKanji9558Tex; + +#define dgMsgKanji9559Tex "__OTR__textures/kanji/gMsgKanji9559Tex" +static const ALIGN_ASSET(2) char gMsgKanji9559Tex[] = dgMsgKanji9559Tex; + +#define dgMsgKanji955ATex "__OTR__textures/kanji/gMsgKanji955ATex" +static const ALIGN_ASSET(2) char gMsgKanji955ATex[] = dgMsgKanji955ATex; + +#define dgMsgKanji955BTex "__OTR__textures/kanji/gMsgKanji955BTex" +static const ALIGN_ASSET(2) char gMsgKanji955BTex[] = dgMsgKanji955BTex; + +#define dgMsgKanji955CTex "__OTR__textures/kanji/gMsgKanji955CTex" +static const ALIGN_ASSET(2) char gMsgKanji955CTex[] = dgMsgKanji955CTex; + +#define dgMsgKanji955DTex "__OTR__textures/kanji/gMsgKanji955DTex" +static const ALIGN_ASSET(2) char gMsgKanji955DTex[] = dgMsgKanji955DTex; + +#define dgMsgKanji955ETex "__OTR__textures/kanji/gMsgKanji955ETex" +static const ALIGN_ASSET(2) char gMsgKanji955ETex[] = dgMsgKanji955ETex; + +#define dgMsgKanji955FTex "__OTR__textures/kanji/gMsgKanji955FTex" +static const ALIGN_ASSET(2) char gMsgKanji955FTex[] = dgMsgKanji955FTex; + +#define dgMsgKanji9560Tex "__OTR__textures/kanji/gMsgKanji9560Tex" +static const ALIGN_ASSET(2) char gMsgKanji9560Tex[] = dgMsgKanji9560Tex; + +#define dgMsgKanji9561Tex "__OTR__textures/kanji/gMsgKanji9561Tex" +static const ALIGN_ASSET(2) char gMsgKanji9561Tex[] = dgMsgKanji9561Tex; + +#define dgMsgKanji9562Tex "__OTR__textures/kanji/gMsgKanji9562Tex" +static const ALIGN_ASSET(2) char gMsgKanji9562Tex[] = dgMsgKanji9562Tex; + +#define dgMsgKanji9563Tex "__OTR__textures/kanji/gMsgKanji9563Tex" +static const ALIGN_ASSET(2) char gMsgKanji9563Tex[] = dgMsgKanji9563Tex; + +#define dgMsgKanji9564Tex "__OTR__textures/kanji/gMsgKanji9564Tex" +static const ALIGN_ASSET(2) char gMsgKanji9564Tex[] = dgMsgKanji9564Tex; + +#define dgMsgKanji9565Tex "__OTR__textures/kanji/gMsgKanji9565Tex" +static const ALIGN_ASSET(2) char gMsgKanji9565Tex[] = dgMsgKanji9565Tex; + +#define dgMsgKanji9566Tex "__OTR__textures/kanji/gMsgKanji9566Tex" +static const ALIGN_ASSET(2) char gMsgKanji9566Tex[] = dgMsgKanji9566Tex; + +#define dgMsgKanji9567Tex "__OTR__textures/kanji/gMsgKanji9567Tex" +static const ALIGN_ASSET(2) char gMsgKanji9567Tex[] = dgMsgKanji9567Tex; + +#define dgMsgKanji9568Tex "__OTR__textures/kanji/gMsgKanji9568Tex" +static const ALIGN_ASSET(2) char gMsgKanji9568Tex[] = dgMsgKanji9568Tex; + +#define dgMsgKanji9569Tex "__OTR__textures/kanji/gMsgKanji9569Tex" +static const ALIGN_ASSET(2) char gMsgKanji9569Tex[] = dgMsgKanji9569Tex; + +#define dgMsgKanji956ATex "__OTR__textures/kanji/gMsgKanji956ATex" +static const ALIGN_ASSET(2) char gMsgKanji956ATex[] = dgMsgKanji956ATex; + +#define dgMsgKanji956BTex "__OTR__textures/kanji/gMsgKanji956BTex" +static const ALIGN_ASSET(2) char gMsgKanji956BTex[] = dgMsgKanji956BTex; + +#define dgMsgKanji956CTex "__OTR__textures/kanji/gMsgKanji956CTex" +static const ALIGN_ASSET(2) char gMsgKanji956CTex[] = dgMsgKanji956CTex; + +#define dgMsgKanji956DTex "__OTR__textures/kanji/gMsgKanji956DTex" +static const ALIGN_ASSET(2) char gMsgKanji956DTex[] = dgMsgKanji956DTex; + +#define dgMsgKanji956ETex "__OTR__textures/kanji/gMsgKanji956ETex" +static const ALIGN_ASSET(2) char gMsgKanji956ETex[] = dgMsgKanji956ETex; + +#define dgMsgKanji956FTex "__OTR__textures/kanji/gMsgKanji956FTex" +static const ALIGN_ASSET(2) char gMsgKanji956FTex[] = dgMsgKanji956FTex; + +#define dgMsgKanji9570Tex "__OTR__textures/kanji/gMsgKanji9570Tex" +static const ALIGN_ASSET(2) char gMsgKanji9570Tex[] = dgMsgKanji9570Tex; + +#define dgMsgKanji9571Tex "__OTR__textures/kanji/gMsgKanji9571Tex" +static const ALIGN_ASSET(2) char gMsgKanji9571Tex[] = dgMsgKanji9571Tex; + +#define dgMsgKanji9572Tex "__OTR__textures/kanji/gMsgKanji9572Tex" +static const ALIGN_ASSET(2) char gMsgKanji9572Tex[] = dgMsgKanji9572Tex; + +#define dgMsgKanji9573Tex "__OTR__textures/kanji/gMsgKanji9573Tex" +static const ALIGN_ASSET(2) char gMsgKanji9573Tex[] = dgMsgKanji9573Tex; + +#define dgMsgKanji9574Tex "__OTR__textures/kanji/gMsgKanji9574Tex" +static const ALIGN_ASSET(2) char gMsgKanji9574Tex[] = dgMsgKanji9574Tex; + +#define dgMsgKanji9575Tex "__OTR__textures/kanji/gMsgKanji9575Tex" +static const ALIGN_ASSET(2) char gMsgKanji9575Tex[] = dgMsgKanji9575Tex; + +#define dgMsgKanji9576Tex "__OTR__textures/kanji/gMsgKanji9576Tex" +static const ALIGN_ASSET(2) char gMsgKanji9576Tex[] = dgMsgKanji9576Tex; + +#define dgMsgKanji9577Tex "__OTR__textures/kanji/gMsgKanji9577Tex" +static const ALIGN_ASSET(2) char gMsgKanji9577Tex[] = dgMsgKanji9577Tex; + +#define dgMsgKanji9578Tex "__OTR__textures/kanji/gMsgKanji9578Tex" +static const ALIGN_ASSET(2) char gMsgKanji9578Tex[] = dgMsgKanji9578Tex; + +#define dgMsgKanji9579Tex "__OTR__textures/kanji/gMsgKanji9579Tex" +static const ALIGN_ASSET(2) char gMsgKanji9579Tex[] = dgMsgKanji9579Tex; + +#define dgMsgKanji957ATex "__OTR__textures/kanji/gMsgKanji957ATex" +static const ALIGN_ASSET(2) char gMsgKanji957ATex[] = dgMsgKanji957ATex; + +#define dgMsgKanji957BTex "__OTR__textures/kanji/gMsgKanji957BTex" +static const ALIGN_ASSET(2) char gMsgKanji957BTex[] = dgMsgKanji957BTex; + +#define dgMsgKanji957CTex "__OTR__textures/kanji/gMsgKanji957CTex" +static const ALIGN_ASSET(2) char gMsgKanji957CTex[] = dgMsgKanji957CTex; + +#define dgMsgKanji957DTex "__OTR__textures/kanji/gMsgKanji957DTex" +static const ALIGN_ASSET(2) char gMsgKanji957DTex[] = dgMsgKanji957DTex; + +#define dgMsgKanji957ETex "__OTR__textures/kanji/gMsgKanji957ETex" +static const ALIGN_ASSET(2) char gMsgKanji957ETex[] = dgMsgKanji957ETex; + +#define dgMsgKanji9580Tex "__OTR__textures/kanji/gMsgKanji9580Tex" +static const ALIGN_ASSET(2) char gMsgKanji9580Tex[] = dgMsgKanji9580Tex; + +#define dgMsgKanji9581Tex "__OTR__textures/kanji/gMsgKanji9581Tex" +static const ALIGN_ASSET(2) char gMsgKanji9581Tex[] = dgMsgKanji9581Tex; + +#define dgMsgKanji9582Tex "__OTR__textures/kanji/gMsgKanji9582Tex" +static const ALIGN_ASSET(2) char gMsgKanji9582Tex[] = dgMsgKanji9582Tex; + +#define dgMsgKanji9583Tex "__OTR__textures/kanji/gMsgKanji9583Tex" +static const ALIGN_ASSET(2) char gMsgKanji9583Tex[] = dgMsgKanji9583Tex; + +#define dgMsgKanji9584Tex "__OTR__textures/kanji/gMsgKanji9584Tex" +static const ALIGN_ASSET(2) char gMsgKanji9584Tex[] = dgMsgKanji9584Tex; + +#define dgMsgKanji9585Tex "__OTR__textures/kanji/gMsgKanji9585Tex" +static const ALIGN_ASSET(2) char gMsgKanji9585Tex[] = dgMsgKanji9585Tex; + +#define dgMsgKanji9586Tex "__OTR__textures/kanji/gMsgKanji9586Tex" +static const ALIGN_ASSET(2) char gMsgKanji9586Tex[] = dgMsgKanji9586Tex; + +#define dgMsgKanji9587Tex "__OTR__textures/kanji/gMsgKanji9587Tex" +static const ALIGN_ASSET(2) char gMsgKanji9587Tex[] = dgMsgKanji9587Tex; + +#define dgMsgKanji9588Tex "__OTR__textures/kanji/gMsgKanji9588Tex" +static const ALIGN_ASSET(2) char gMsgKanji9588Tex[] = dgMsgKanji9588Tex; + +#define dgMsgKanji9589Tex "__OTR__textures/kanji/gMsgKanji9589Tex" +static const ALIGN_ASSET(2) char gMsgKanji9589Tex[] = dgMsgKanji9589Tex; + +#define dgMsgKanji958ATex "__OTR__textures/kanji/gMsgKanji958ATex" +static const ALIGN_ASSET(2) char gMsgKanji958ATex[] = dgMsgKanji958ATex; + +#define dgMsgKanji958BTex "__OTR__textures/kanji/gMsgKanji958BTex" +static const ALIGN_ASSET(2) char gMsgKanji958BTex[] = dgMsgKanji958BTex; + +#define dgMsgKanji958CTex "__OTR__textures/kanji/gMsgKanji958CTex" +static const ALIGN_ASSET(2) char gMsgKanji958CTex[] = dgMsgKanji958CTex; + +#define dgMsgKanji958DTex "__OTR__textures/kanji/gMsgKanji958DTex" +static const ALIGN_ASSET(2) char gMsgKanji958DTex[] = dgMsgKanji958DTex; + +#define dgMsgKanji958ETex "__OTR__textures/kanji/gMsgKanji958ETex" +static const ALIGN_ASSET(2) char gMsgKanji958ETex[] = dgMsgKanji958ETex; + +#define dgMsgKanji958FTex "__OTR__textures/kanji/gMsgKanji958FTex" +static const ALIGN_ASSET(2) char gMsgKanji958FTex[] = dgMsgKanji958FTex; + +#define dgMsgKanji9590Tex "__OTR__textures/kanji/gMsgKanji9590Tex" +static const ALIGN_ASSET(2) char gMsgKanji9590Tex[] = dgMsgKanji9590Tex; + +#define dgMsgKanji9591Tex "__OTR__textures/kanji/gMsgKanji9591Tex" +static const ALIGN_ASSET(2) char gMsgKanji9591Tex[] = dgMsgKanji9591Tex; + +#define dgMsgKanji9592Tex "__OTR__textures/kanji/gMsgKanji9592Tex" +static const ALIGN_ASSET(2) char gMsgKanji9592Tex[] = dgMsgKanji9592Tex; + +#define dgMsgKanji9593Tex "__OTR__textures/kanji/gMsgKanji9593Tex" +static const ALIGN_ASSET(2) char gMsgKanji9593Tex[] = dgMsgKanji9593Tex; + +#define dgMsgKanji9594Tex "__OTR__textures/kanji/gMsgKanji9594Tex" +static const ALIGN_ASSET(2) char gMsgKanji9594Tex[] = dgMsgKanji9594Tex; + +#define dgMsgKanji9595Tex "__OTR__textures/kanji/gMsgKanji9595Tex" +static const ALIGN_ASSET(2) char gMsgKanji9595Tex[] = dgMsgKanji9595Tex; + +#define dgMsgKanji9596Tex "__OTR__textures/kanji/gMsgKanji9596Tex" +static const ALIGN_ASSET(2) char gMsgKanji9596Tex[] = dgMsgKanji9596Tex; + +#define dgMsgKanji9597Tex "__OTR__textures/kanji/gMsgKanji9597Tex" +static const ALIGN_ASSET(2) char gMsgKanji9597Tex[] = dgMsgKanji9597Tex; + +#define dgMsgKanji9598Tex "__OTR__textures/kanji/gMsgKanji9598Tex" +static const ALIGN_ASSET(2) char gMsgKanji9598Tex[] = dgMsgKanji9598Tex; + +#define dgMsgKanji9599Tex "__OTR__textures/kanji/gMsgKanji9599Tex" +static const ALIGN_ASSET(2) char gMsgKanji9599Tex[] = dgMsgKanji9599Tex; + +#define dgMsgKanji959ATex "__OTR__textures/kanji/gMsgKanji959ATex" +static const ALIGN_ASSET(2) char gMsgKanji959ATex[] = dgMsgKanji959ATex; + +#define dgMsgKanji959BTex "__OTR__textures/kanji/gMsgKanji959BTex" +static const ALIGN_ASSET(2) char gMsgKanji959BTex[] = dgMsgKanji959BTex; + +#define dgMsgKanji959CTex "__OTR__textures/kanji/gMsgKanji959CTex" +static const ALIGN_ASSET(2) char gMsgKanji959CTex[] = dgMsgKanji959CTex; + +#define dgMsgKanji959DTex "__OTR__textures/kanji/gMsgKanji959DTex" +static const ALIGN_ASSET(2) char gMsgKanji959DTex[] = dgMsgKanji959DTex; + +#define dgMsgKanji959ETex "__OTR__textures/kanji/gMsgKanji959ETex" +static const ALIGN_ASSET(2) char gMsgKanji959ETex[] = dgMsgKanji959ETex; + +#define dgMsgKanji959FTex "__OTR__textures/kanji/gMsgKanji959FTex" +static const ALIGN_ASSET(2) char gMsgKanji959FTex[] = dgMsgKanji959FTex; + +#define dgMsgKanji95A0Tex "__OTR__textures/kanji/gMsgKanji95A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A0Tex[] = dgMsgKanji95A0Tex; + +#define dgMsgKanji95A1Tex "__OTR__textures/kanji/gMsgKanji95A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A1Tex[] = dgMsgKanji95A1Tex; + +#define dgMsgKanji95A2Tex "__OTR__textures/kanji/gMsgKanji95A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A2Tex[] = dgMsgKanji95A2Tex; + +#define dgMsgKanji95A3Tex "__OTR__textures/kanji/gMsgKanji95A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A3Tex[] = dgMsgKanji95A3Tex; + +#define dgMsgKanji95A4Tex "__OTR__textures/kanji/gMsgKanji95A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A4Tex[] = dgMsgKanji95A4Tex; + +#define dgMsgKanji95A5Tex "__OTR__textures/kanji/gMsgKanji95A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A5Tex[] = dgMsgKanji95A5Tex; + +#define dgMsgKanji95A6Tex "__OTR__textures/kanji/gMsgKanji95A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A6Tex[] = dgMsgKanji95A6Tex; + +#define dgMsgKanji95A7Tex "__OTR__textures/kanji/gMsgKanji95A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A7Tex[] = dgMsgKanji95A7Tex; + +#define dgMsgKanji95A8Tex "__OTR__textures/kanji/gMsgKanji95A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A8Tex[] = dgMsgKanji95A8Tex; + +#define dgMsgKanji95A9Tex "__OTR__textures/kanji/gMsgKanji95A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji95A9Tex[] = dgMsgKanji95A9Tex; + +#define dgMsgKanji95AATex "__OTR__textures/kanji/gMsgKanji95AATex" +static const ALIGN_ASSET(2) char gMsgKanji95AATex[] = dgMsgKanji95AATex; + +#define dgMsgKanji95ABTex "__OTR__textures/kanji/gMsgKanji95ABTex" +static const ALIGN_ASSET(2) char gMsgKanji95ABTex[] = dgMsgKanji95ABTex; + +#define dgMsgKanji95ACTex "__OTR__textures/kanji/gMsgKanji95ACTex" +static const ALIGN_ASSET(2) char gMsgKanji95ACTex[] = dgMsgKanji95ACTex; + +#define dgMsgKanji95ADTex "__OTR__textures/kanji/gMsgKanji95ADTex" +static const ALIGN_ASSET(2) char gMsgKanji95ADTex[] = dgMsgKanji95ADTex; + +#define dgMsgKanji95AETex "__OTR__textures/kanji/gMsgKanji95AETex" +static const ALIGN_ASSET(2) char gMsgKanji95AETex[] = dgMsgKanji95AETex; + +#define dgMsgKanji95AFTex "__OTR__textures/kanji/gMsgKanji95AFTex" +static const ALIGN_ASSET(2) char gMsgKanji95AFTex[] = dgMsgKanji95AFTex; + +#define dgMsgKanji95B0Tex "__OTR__textures/kanji/gMsgKanji95B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B0Tex[] = dgMsgKanji95B0Tex; + +#define dgMsgKanji95B1Tex "__OTR__textures/kanji/gMsgKanji95B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B1Tex[] = dgMsgKanji95B1Tex; + +#define dgMsgKanji95B2Tex "__OTR__textures/kanji/gMsgKanji95B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B2Tex[] = dgMsgKanji95B2Tex; + +#define dgMsgKanji95B3Tex "__OTR__textures/kanji/gMsgKanji95B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B3Tex[] = dgMsgKanji95B3Tex; + +#define dgMsgKanji95B4Tex "__OTR__textures/kanji/gMsgKanji95B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B4Tex[] = dgMsgKanji95B4Tex; + +#define dgMsgKanji95B5Tex "__OTR__textures/kanji/gMsgKanji95B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B5Tex[] = dgMsgKanji95B5Tex; + +#define dgMsgKanji95B6Tex "__OTR__textures/kanji/gMsgKanji95B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B6Tex[] = dgMsgKanji95B6Tex; + +#define dgMsgKanji95B7Tex "__OTR__textures/kanji/gMsgKanji95B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B7Tex[] = dgMsgKanji95B7Tex; + +#define dgMsgKanji95B8Tex "__OTR__textures/kanji/gMsgKanji95B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B8Tex[] = dgMsgKanji95B8Tex; + +#define dgMsgKanji95B9Tex "__OTR__textures/kanji/gMsgKanji95B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji95B9Tex[] = dgMsgKanji95B9Tex; + +#define dgMsgKanji95BATex "__OTR__textures/kanji/gMsgKanji95BATex" +static const ALIGN_ASSET(2) char gMsgKanji95BATex[] = dgMsgKanji95BATex; + +#define dgMsgKanji95BBTex "__OTR__textures/kanji/gMsgKanji95BBTex" +static const ALIGN_ASSET(2) char gMsgKanji95BBTex[] = dgMsgKanji95BBTex; + +#define dgMsgKanji95BCTex "__OTR__textures/kanji/gMsgKanji95BCTex" +static const ALIGN_ASSET(2) char gMsgKanji95BCTex[] = dgMsgKanji95BCTex; + +#define dgMsgKanji95BDTex "__OTR__textures/kanji/gMsgKanji95BDTex" +static const ALIGN_ASSET(2) char gMsgKanji95BDTex[] = dgMsgKanji95BDTex; + +#define dgMsgKanji95BETex "__OTR__textures/kanji/gMsgKanji95BETex" +static const ALIGN_ASSET(2) char gMsgKanji95BETex[] = dgMsgKanji95BETex; + +#define dgMsgKanji95BFTex "__OTR__textures/kanji/gMsgKanji95BFTex" +static const ALIGN_ASSET(2) char gMsgKanji95BFTex[] = dgMsgKanji95BFTex; + +#define dgMsgKanji95C0Tex "__OTR__textures/kanji/gMsgKanji95C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C0Tex[] = dgMsgKanji95C0Tex; + +#define dgMsgKanji95C1Tex "__OTR__textures/kanji/gMsgKanji95C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C1Tex[] = dgMsgKanji95C1Tex; + +#define dgMsgKanji95C2Tex "__OTR__textures/kanji/gMsgKanji95C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C2Tex[] = dgMsgKanji95C2Tex; + +#define dgMsgKanji95C3Tex "__OTR__textures/kanji/gMsgKanji95C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C3Tex[] = dgMsgKanji95C3Tex; + +#define dgMsgKanji95C4Tex "__OTR__textures/kanji/gMsgKanji95C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C4Tex[] = dgMsgKanji95C4Tex; + +#define dgMsgKanji95C5Tex "__OTR__textures/kanji/gMsgKanji95C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C5Tex[] = dgMsgKanji95C5Tex; + +#define dgMsgKanji95C6Tex "__OTR__textures/kanji/gMsgKanji95C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C6Tex[] = dgMsgKanji95C6Tex; + +#define dgMsgKanji95C7Tex "__OTR__textures/kanji/gMsgKanji95C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C7Tex[] = dgMsgKanji95C7Tex; + +#define dgMsgKanji95C8Tex "__OTR__textures/kanji/gMsgKanji95C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C8Tex[] = dgMsgKanji95C8Tex; + +#define dgMsgKanji95C9Tex "__OTR__textures/kanji/gMsgKanji95C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji95C9Tex[] = dgMsgKanji95C9Tex; + +#define dgMsgKanji95CATex "__OTR__textures/kanji/gMsgKanji95CATex" +static const ALIGN_ASSET(2) char gMsgKanji95CATex[] = dgMsgKanji95CATex; + +#define dgMsgKanji95CBTex "__OTR__textures/kanji/gMsgKanji95CBTex" +static const ALIGN_ASSET(2) char gMsgKanji95CBTex[] = dgMsgKanji95CBTex; + +#define dgMsgKanji95CCTex "__OTR__textures/kanji/gMsgKanji95CCTex" +static const ALIGN_ASSET(2) char gMsgKanji95CCTex[] = dgMsgKanji95CCTex; + +#define dgMsgKanji95CDTex "__OTR__textures/kanji/gMsgKanji95CDTex" +static const ALIGN_ASSET(2) char gMsgKanji95CDTex[] = dgMsgKanji95CDTex; + +#define dgMsgKanji95CETex "__OTR__textures/kanji/gMsgKanji95CETex" +static const ALIGN_ASSET(2) char gMsgKanji95CETex[] = dgMsgKanji95CETex; + +#define dgMsgKanji95CFTex "__OTR__textures/kanji/gMsgKanji95CFTex" +static const ALIGN_ASSET(2) char gMsgKanji95CFTex[] = dgMsgKanji95CFTex; + +#define dgMsgKanji95D0Tex "__OTR__textures/kanji/gMsgKanji95D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D0Tex[] = dgMsgKanji95D0Tex; + +#define dgMsgKanji95D1Tex "__OTR__textures/kanji/gMsgKanji95D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D1Tex[] = dgMsgKanji95D1Tex; + +#define dgMsgKanji95D2Tex "__OTR__textures/kanji/gMsgKanji95D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D2Tex[] = dgMsgKanji95D2Tex; + +#define dgMsgKanji95D3Tex "__OTR__textures/kanji/gMsgKanji95D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D3Tex[] = dgMsgKanji95D3Tex; + +#define dgMsgKanji95D4Tex "__OTR__textures/kanji/gMsgKanji95D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D4Tex[] = dgMsgKanji95D4Tex; + +#define dgMsgKanji95D5Tex "__OTR__textures/kanji/gMsgKanji95D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D5Tex[] = dgMsgKanji95D5Tex; + +#define dgMsgKanji95D6Tex "__OTR__textures/kanji/gMsgKanji95D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D6Tex[] = dgMsgKanji95D6Tex; + +#define dgMsgKanji95D7Tex "__OTR__textures/kanji/gMsgKanji95D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D7Tex[] = dgMsgKanji95D7Tex; + +#define dgMsgKanji95D8Tex "__OTR__textures/kanji/gMsgKanji95D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D8Tex[] = dgMsgKanji95D8Tex; + +#define dgMsgKanji95D9Tex "__OTR__textures/kanji/gMsgKanji95D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji95D9Tex[] = dgMsgKanji95D9Tex; + +#define dgMsgKanji95DATex "__OTR__textures/kanji/gMsgKanji95DATex" +static const ALIGN_ASSET(2) char gMsgKanji95DATex[] = dgMsgKanji95DATex; + +#define dgMsgKanji95DBTex "__OTR__textures/kanji/gMsgKanji95DBTex" +static const ALIGN_ASSET(2) char gMsgKanji95DBTex[] = dgMsgKanji95DBTex; + +#define dgMsgKanji95DCTex "__OTR__textures/kanji/gMsgKanji95DCTex" +static const ALIGN_ASSET(2) char gMsgKanji95DCTex[] = dgMsgKanji95DCTex; + +#define dgMsgKanji95DDTex "__OTR__textures/kanji/gMsgKanji95DDTex" +static const ALIGN_ASSET(2) char gMsgKanji95DDTex[] = dgMsgKanji95DDTex; + +#define dgMsgKanji95DETex "__OTR__textures/kanji/gMsgKanji95DETex" +static const ALIGN_ASSET(2) char gMsgKanji95DETex[] = dgMsgKanji95DETex; + +#define dgMsgKanji95DFTex "__OTR__textures/kanji/gMsgKanji95DFTex" +static const ALIGN_ASSET(2) char gMsgKanji95DFTex[] = dgMsgKanji95DFTex; + +#define dgMsgKanji95E0Tex "__OTR__textures/kanji/gMsgKanji95E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E0Tex[] = dgMsgKanji95E0Tex; + +#define dgMsgKanji95E1Tex "__OTR__textures/kanji/gMsgKanji95E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E1Tex[] = dgMsgKanji95E1Tex; + +#define dgMsgKanji95E2Tex "__OTR__textures/kanji/gMsgKanji95E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E2Tex[] = dgMsgKanji95E2Tex; + +#define dgMsgKanji95E3Tex "__OTR__textures/kanji/gMsgKanji95E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E3Tex[] = dgMsgKanji95E3Tex; + +#define dgMsgKanji95E4Tex "__OTR__textures/kanji/gMsgKanji95E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E4Tex[] = dgMsgKanji95E4Tex; + +#define dgMsgKanji95E5Tex "__OTR__textures/kanji/gMsgKanji95E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E5Tex[] = dgMsgKanji95E5Tex; + +#define dgMsgKanji95E6Tex "__OTR__textures/kanji/gMsgKanji95E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E6Tex[] = dgMsgKanji95E6Tex; + +#define dgMsgKanji95E7Tex "__OTR__textures/kanji/gMsgKanji95E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E7Tex[] = dgMsgKanji95E7Tex; + +#define dgMsgKanji95E8Tex "__OTR__textures/kanji/gMsgKanji95E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E8Tex[] = dgMsgKanji95E8Tex; + +#define dgMsgKanji95E9Tex "__OTR__textures/kanji/gMsgKanji95E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji95E9Tex[] = dgMsgKanji95E9Tex; + +#define dgMsgKanji95EATex "__OTR__textures/kanji/gMsgKanji95EATex" +static const ALIGN_ASSET(2) char gMsgKanji95EATex[] = dgMsgKanji95EATex; + +#define dgMsgKanji95EBTex "__OTR__textures/kanji/gMsgKanji95EBTex" +static const ALIGN_ASSET(2) char gMsgKanji95EBTex[] = dgMsgKanji95EBTex; + +#define dgMsgKanji95ECTex "__OTR__textures/kanji/gMsgKanji95ECTex" +static const ALIGN_ASSET(2) char gMsgKanji95ECTex[] = dgMsgKanji95ECTex; + +#define dgMsgKanji95EDTex "__OTR__textures/kanji/gMsgKanji95EDTex" +static const ALIGN_ASSET(2) char gMsgKanji95EDTex[] = dgMsgKanji95EDTex; + +#define dgMsgKanji95EETex "__OTR__textures/kanji/gMsgKanji95EETex" +static const ALIGN_ASSET(2) char gMsgKanji95EETex[] = dgMsgKanji95EETex; + +#define dgMsgKanji95EFTex "__OTR__textures/kanji/gMsgKanji95EFTex" +static const ALIGN_ASSET(2) char gMsgKanji95EFTex[] = dgMsgKanji95EFTex; + +#define dgMsgKanji95F0Tex "__OTR__textures/kanji/gMsgKanji95F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F0Tex[] = dgMsgKanji95F0Tex; + +#define dgMsgKanji95F1Tex "__OTR__textures/kanji/gMsgKanji95F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F1Tex[] = dgMsgKanji95F1Tex; + +#define dgMsgKanji95F2Tex "__OTR__textures/kanji/gMsgKanji95F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F2Tex[] = dgMsgKanji95F2Tex; + +#define dgMsgKanji95F3Tex "__OTR__textures/kanji/gMsgKanji95F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F3Tex[] = dgMsgKanji95F3Tex; + +#define dgMsgKanji95F4Tex "__OTR__textures/kanji/gMsgKanji95F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F4Tex[] = dgMsgKanji95F4Tex; + +#define dgMsgKanji95F5Tex "__OTR__textures/kanji/gMsgKanji95F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F5Tex[] = dgMsgKanji95F5Tex; + +#define dgMsgKanji95F6Tex "__OTR__textures/kanji/gMsgKanji95F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F6Tex[] = dgMsgKanji95F6Tex; + +#define dgMsgKanji95F7Tex "__OTR__textures/kanji/gMsgKanji95F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F7Tex[] = dgMsgKanji95F7Tex; + +#define dgMsgKanji95F8Tex "__OTR__textures/kanji/gMsgKanji95F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F8Tex[] = dgMsgKanji95F8Tex; + +#define dgMsgKanji95F9Tex "__OTR__textures/kanji/gMsgKanji95F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji95F9Tex[] = dgMsgKanji95F9Tex; + +#define dgMsgKanji95FATex "__OTR__textures/kanji/gMsgKanji95FATex" +static const ALIGN_ASSET(2) char gMsgKanji95FATex[] = dgMsgKanji95FATex; + +#define dgMsgKanji95FBTex "__OTR__textures/kanji/gMsgKanji95FBTex" +static const ALIGN_ASSET(2) char gMsgKanji95FBTex[] = dgMsgKanji95FBTex; + +#define dgMsgKanji95FCTex "__OTR__textures/kanji/gMsgKanji95FCTex" +static const ALIGN_ASSET(2) char gMsgKanji95FCTex[] = dgMsgKanji95FCTex; + +#define dgMsgKanji9640Tex "__OTR__textures/kanji/gMsgKanji9640Tex" +static const ALIGN_ASSET(2) char gMsgKanji9640Tex[] = dgMsgKanji9640Tex; + +#define dgMsgKanji9641Tex "__OTR__textures/kanji/gMsgKanji9641Tex" +static const ALIGN_ASSET(2) char gMsgKanji9641Tex[] = dgMsgKanji9641Tex; + +#define dgMsgKanji9642Tex "__OTR__textures/kanji/gMsgKanji9642Tex" +static const ALIGN_ASSET(2) char gMsgKanji9642Tex[] = dgMsgKanji9642Tex; + +#define dgMsgKanji9643Tex "__OTR__textures/kanji/gMsgKanji9643Tex" +static const ALIGN_ASSET(2) char gMsgKanji9643Tex[] = dgMsgKanji9643Tex; + +#define dgMsgKanji9644Tex "__OTR__textures/kanji/gMsgKanji9644Tex" +static const ALIGN_ASSET(2) char gMsgKanji9644Tex[] = dgMsgKanji9644Tex; + +#define dgMsgKanji9645Tex "__OTR__textures/kanji/gMsgKanji9645Tex" +static const ALIGN_ASSET(2) char gMsgKanji9645Tex[] = dgMsgKanji9645Tex; + +#define dgMsgKanji9646Tex "__OTR__textures/kanji/gMsgKanji9646Tex" +static const ALIGN_ASSET(2) char gMsgKanji9646Tex[] = dgMsgKanji9646Tex; + +#define dgMsgKanji9647Tex "__OTR__textures/kanji/gMsgKanji9647Tex" +static const ALIGN_ASSET(2) char gMsgKanji9647Tex[] = dgMsgKanji9647Tex; + +#define dgMsgKanji9648Tex "__OTR__textures/kanji/gMsgKanji9648Tex" +static const ALIGN_ASSET(2) char gMsgKanji9648Tex[] = dgMsgKanji9648Tex; + +#define dgMsgKanji9649Tex "__OTR__textures/kanji/gMsgKanji9649Tex" +static const ALIGN_ASSET(2) char gMsgKanji9649Tex[] = dgMsgKanji9649Tex; + +#define dgMsgKanji964ATex "__OTR__textures/kanji/gMsgKanji964ATex" +static const ALIGN_ASSET(2) char gMsgKanji964ATex[] = dgMsgKanji964ATex; + +#define dgMsgKanji964BTex "__OTR__textures/kanji/gMsgKanji964BTex" +static const ALIGN_ASSET(2) char gMsgKanji964BTex[] = dgMsgKanji964BTex; + +#define dgMsgKanji964CTex "__OTR__textures/kanji/gMsgKanji964CTex" +static const ALIGN_ASSET(2) char gMsgKanji964CTex[] = dgMsgKanji964CTex; + +#define dgMsgKanji964DTex "__OTR__textures/kanji/gMsgKanji964DTex" +static const ALIGN_ASSET(2) char gMsgKanji964DTex[] = dgMsgKanji964DTex; + +#define dgMsgKanji964ETex "__OTR__textures/kanji/gMsgKanji964ETex" +static const ALIGN_ASSET(2) char gMsgKanji964ETex[] = dgMsgKanji964ETex; + +#define dgMsgKanji964FTex "__OTR__textures/kanji/gMsgKanji964FTex" +static const ALIGN_ASSET(2) char gMsgKanji964FTex[] = dgMsgKanji964FTex; + +#define dgMsgKanji9650Tex "__OTR__textures/kanji/gMsgKanji9650Tex" +static const ALIGN_ASSET(2) char gMsgKanji9650Tex[] = dgMsgKanji9650Tex; + +#define dgMsgKanji9651Tex "__OTR__textures/kanji/gMsgKanji9651Tex" +static const ALIGN_ASSET(2) char gMsgKanji9651Tex[] = dgMsgKanji9651Tex; + +#define dgMsgKanji9652Tex "__OTR__textures/kanji/gMsgKanji9652Tex" +static const ALIGN_ASSET(2) char gMsgKanji9652Tex[] = dgMsgKanji9652Tex; + +#define dgMsgKanji9653Tex "__OTR__textures/kanji/gMsgKanji9653Tex" +static const ALIGN_ASSET(2) char gMsgKanji9653Tex[] = dgMsgKanji9653Tex; + +#define dgMsgKanji9654Tex "__OTR__textures/kanji/gMsgKanji9654Tex" +static const ALIGN_ASSET(2) char gMsgKanji9654Tex[] = dgMsgKanji9654Tex; + +#define dgMsgKanji9655Tex "__OTR__textures/kanji/gMsgKanji9655Tex" +static const ALIGN_ASSET(2) char gMsgKanji9655Tex[] = dgMsgKanji9655Tex; + +#define dgMsgKanji9656Tex "__OTR__textures/kanji/gMsgKanji9656Tex" +static const ALIGN_ASSET(2) char gMsgKanji9656Tex[] = dgMsgKanji9656Tex; + +#define dgMsgKanji9657Tex "__OTR__textures/kanji/gMsgKanji9657Tex" +static const ALIGN_ASSET(2) char gMsgKanji9657Tex[] = dgMsgKanji9657Tex; + +#define dgMsgKanji9658Tex "__OTR__textures/kanji/gMsgKanji9658Tex" +static const ALIGN_ASSET(2) char gMsgKanji9658Tex[] = dgMsgKanji9658Tex; + +#define dgMsgKanji9659Tex "__OTR__textures/kanji/gMsgKanji9659Tex" +static const ALIGN_ASSET(2) char gMsgKanji9659Tex[] = dgMsgKanji9659Tex; + +#define dgMsgKanji965ATex "__OTR__textures/kanji/gMsgKanji965ATex" +static const ALIGN_ASSET(2) char gMsgKanji965ATex[] = dgMsgKanji965ATex; + +#define dgMsgKanji965BTex "__OTR__textures/kanji/gMsgKanji965BTex" +static const ALIGN_ASSET(2) char gMsgKanji965BTex[] = dgMsgKanji965BTex; + +#define dgMsgKanji965CTex "__OTR__textures/kanji/gMsgKanji965CTex" +static const ALIGN_ASSET(2) char gMsgKanji965CTex[] = dgMsgKanji965CTex; + +#define dgMsgKanji965DTex "__OTR__textures/kanji/gMsgKanji965DTex" +static const ALIGN_ASSET(2) char gMsgKanji965DTex[] = dgMsgKanji965DTex; + +#define dgMsgKanji965ETex "__OTR__textures/kanji/gMsgKanji965ETex" +static const ALIGN_ASSET(2) char gMsgKanji965ETex[] = dgMsgKanji965ETex; + +#define dgMsgKanji965FTex "__OTR__textures/kanji/gMsgKanji965FTex" +static const ALIGN_ASSET(2) char gMsgKanji965FTex[] = dgMsgKanji965FTex; + +#define dgMsgKanji9660Tex "__OTR__textures/kanji/gMsgKanji9660Tex" +static const ALIGN_ASSET(2) char gMsgKanji9660Tex[] = dgMsgKanji9660Tex; + +#define dgMsgKanji9661Tex "__OTR__textures/kanji/gMsgKanji9661Tex" +static const ALIGN_ASSET(2) char gMsgKanji9661Tex[] = dgMsgKanji9661Tex; + +#define dgMsgKanji9662Tex "__OTR__textures/kanji/gMsgKanji9662Tex" +static const ALIGN_ASSET(2) char gMsgKanji9662Tex[] = dgMsgKanji9662Tex; + +#define dgMsgKanji9663Tex "__OTR__textures/kanji/gMsgKanji9663Tex" +static const ALIGN_ASSET(2) char gMsgKanji9663Tex[] = dgMsgKanji9663Tex; + +#define dgMsgKanji9664Tex "__OTR__textures/kanji/gMsgKanji9664Tex" +static const ALIGN_ASSET(2) char gMsgKanji9664Tex[] = dgMsgKanji9664Tex; + +#define dgMsgKanji9665Tex "__OTR__textures/kanji/gMsgKanji9665Tex" +static const ALIGN_ASSET(2) char gMsgKanji9665Tex[] = dgMsgKanji9665Tex; + +#define dgMsgKanji9666Tex "__OTR__textures/kanji/gMsgKanji9666Tex" +static const ALIGN_ASSET(2) char gMsgKanji9666Tex[] = dgMsgKanji9666Tex; + +#define dgMsgKanji9667Tex "__OTR__textures/kanji/gMsgKanji9667Tex" +static const ALIGN_ASSET(2) char gMsgKanji9667Tex[] = dgMsgKanji9667Tex; + +#define dgMsgKanji9668Tex "__OTR__textures/kanji/gMsgKanji9668Tex" +static const ALIGN_ASSET(2) char gMsgKanji9668Tex[] = dgMsgKanji9668Tex; + +#define dgMsgKanji9669Tex "__OTR__textures/kanji/gMsgKanji9669Tex" +static const ALIGN_ASSET(2) char gMsgKanji9669Tex[] = dgMsgKanji9669Tex; + +#define dgMsgKanji966ATex "__OTR__textures/kanji/gMsgKanji966ATex" +static const ALIGN_ASSET(2) char gMsgKanji966ATex[] = dgMsgKanji966ATex; + +#define dgMsgKanji966BTex "__OTR__textures/kanji/gMsgKanji966BTex" +static const ALIGN_ASSET(2) char gMsgKanji966BTex[] = dgMsgKanji966BTex; + +#define dgMsgKanji966CTex "__OTR__textures/kanji/gMsgKanji966CTex" +static const ALIGN_ASSET(2) char gMsgKanji966CTex[] = dgMsgKanji966CTex; + +#define dgMsgKanji966DTex "__OTR__textures/kanji/gMsgKanji966DTex" +static const ALIGN_ASSET(2) char gMsgKanji966DTex[] = dgMsgKanji966DTex; + +#define dgMsgKanji966ETex "__OTR__textures/kanji/gMsgKanji966ETex" +static const ALIGN_ASSET(2) char gMsgKanji966ETex[] = dgMsgKanji966ETex; + +#define dgMsgKanji966FTex "__OTR__textures/kanji/gMsgKanji966FTex" +static const ALIGN_ASSET(2) char gMsgKanji966FTex[] = dgMsgKanji966FTex; + +#define dgMsgKanji9670Tex "__OTR__textures/kanji/gMsgKanji9670Tex" +static const ALIGN_ASSET(2) char gMsgKanji9670Tex[] = dgMsgKanji9670Tex; + +#define dgMsgKanji9671Tex "__OTR__textures/kanji/gMsgKanji9671Tex" +static const ALIGN_ASSET(2) char gMsgKanji9671Tex[] = dgMsgKanji9671Tex; + +#define dgMsgKanji9672Tex "__OTR__textures/kanji/gMsgKanji9672Tex" +static const ALIGN_ASSET(2) char gMsgKanji9672Tex[] = dgMsgKanji9672Tex; + +#define dgMsgKanji9673Tex "__OTR__textures/kanji/gMsgKanji9673Tex" +static const ALIGN_ASSET(2) char gMsgKanji9673Tex[] = dgMsgKanji9673Tex; + +#define dgMsgKanji9674Tex "__OTR__textures/kanji/gMsgKanji9674Tex" +static const ALIGN_ASSET(2) char gMsgKanji9674Tex[] = dgMsgKanji9674Tex; + +#define dgMsgKanji9675Tex "__OTR__textures/kanji/gMsgKanji9675Tex" +static const ALIGN_ASSET(2) char gMsgKanji9675Tex[] = dgMsgKanji9675Tex; + +#define dgMsgKanji9676Tex "__OTR__textures/kanji/gMsgKanji9676Tex" +static const ALIGN_ASSET(2) char gMsgKanji9676Tex[] = dgMsgKanji9676Tex; + +#define dgMsgKanji9677Tex "__OTR__textures/kanji/gMsgKanji9677Tex" +static const ALIGN_ASSET(2) char gMsgKanji9677Tex[] = dgMsgKanji9677Tex; + +#define dgMsgKanji9678Tex "__OTR__textures/kanji/gMsgKanji9678Tex" +static const ALIGN_ASSET(2) char gMsgKanji9678Tex[] = dgMsgKanji9678Tex; + +#define dgMsgKanji9679Tex "__OTR__textures/kanji/gMsgKanji9679Tex" +static const ALIGN_ASSET(2) char gMsgKanji9679Tex[] = dgMsgKanji9679Tex; + +#define dgMsgKanji967ATex "__OTR__textures/kanji/gMsgKanji967ATex" +static const ALIGN_ASSET(2) char gMsgKanji967ATex[] = dgMsgKanji967ATex; + +#define dgMsgKanji967BTex "__OTR__textures/kanji/gMsgKanji967BTex" +static const ALIGN_ASSET(2) char gMsgKanji967BTex[] = dgMsgKanji967BTex; + +#define dgMsgKanji967CTex "__OTR__textures/kanji/gMsgKanji967CTex" +static const ALIGN_ASSET(2) char gMsgKanji967CTex[] = dgMsgKanji967CTex; + +#define dgMsgKanji967DTex "__OTR__textures/kanji/gMsgKanji967DTex" +static const ALIGN_ASSET(2) char gMsgKanji967DTex[] = dgMsgKanji967DTex; + +#define dgMsgKanji967ETex "__OTR__textures/kanji/gMsgKanji967ETex" +static const ALIGN_ASSET(2) char gMsgKanji967ETex[] = dgMsgKanji967ETex; + +#define dgMsgKanji9680Tex "__OTR__textures/kanji/gMsgKanji9680Tex" +static const ALIGN_ASSET(2) char gMsgKanji9680Tex[] = dgMsgKanji9680Tex; + +#define dgMsgKanji9681Tex "__OTR__textures/kanji/gMsgKanji9681Tex" +static const ALIGN_ASSET(2) char gMsgKanji9681Tex[] = dgMsgKanji9681Tex; + +#define dgMsgKanji9682Tex "__OTR__textures/kanji/gMsgKanji9682Tex" +static const ALIGN_ASSET(2) char gMsgKanji9682Tex[] = dgMsgKanji9682Tex; + +#define dgMsgKanji9683Tex "__OTR__textures/kanji/gMsgKanji9683Tex" +static const ALIGN_ASSET(2) char gMsgKanji9683Tex[] = dgMsgKanji9683Tex; + +#define dgMsgKanji9684Tex "__OTR__textures/kanji/gMsgKanji9684Tex" +static const ALIGN_ASSET(2) char gMsgKanji9684Tex[] = dgMsgKanji9684Tex; + +#define dgMsgKanji9685Tex "__OTR__textures/kanji/gMsgKanji9685Tex" +static const ALIGN_ASSET(2) char gMsgKanji9685Tex[] = dgMsgKanji9685Tex; + +#define dgMsgKanji9686Tex "__OTR__textures/kanji/gMsgKanji9686Tex" +static const ALIGN_ASSET(2) char gMsgKanji9686Tex[] = dgMsgKanji9686Tex; + +#define dgMsgKanji9687Tex "__OTR__textures/kanji/gMsgKanji9687Tex" +static const ALIGN_ASSET(2) char gMsgKanji9687Tex[] = dgMsgKanji9687Tex; + +#define dgMsgKanji9688Tex "__OTR__textures/kanji/gMsgKanji9688Tex" +static const ALIGN_ASSET(2) char gMsgKanji9688Tex[] = dgMsgKanji9688Tex; + +#define dgMsgKanji9689Tex "__OTR__textures/kanji/gMsgKanji9689Tex" +static const ALIGN_ASSET(2) char gMsgKanji9689Tex[] = dgMsgKanji9689Tex; + +#define dgMsgKanji968ATex "__OTR__textures/kanji/gMsgKanji968ATex" +static const ALIGN_ASSET(2) char gMsgKanji968ATex[] = dgMsgKanji968ATex; + +#define dgMsgKanji968BTex "__OTR__textures/kanji/gMsgKanji968BTex" +static const ALIGN_ASSET(2) char gMsgKanji968BTex[] = dgMsgKanji968BTex; + +#define dgMsgKanji968CTex "__OTR__textures/kanji/gMsgKanji968CTex" +static const ALIGN_ASSET(2) char gMsgKanji968CTex[] = dgMsgKanji968CTex; + +#define dgMsgKanji968DTex "__OTR__textures/kanji/gMsgKanji968DTex" +static const ALIGN_ASSET(2) char gMsgKanji968DTex[] = dgMsgKanji968DTex; + +#define dgMsgKanji968ETex "__OTR__textures/kanji/gMsgKanji968ETex" +static const ALIGN_ASSET(2) char gMsgKanji968ETex[] = dgMsgKanji968ETex; + +#define dgMsgKanji968FTex "__OTR__textures/kanji/gMsgKanji968FTex" +static const ALIGN_ASSET(2) char gMsgKanji968FTex[] = dgMsgKanji968FTex; + +#define dgMsgKanji9690Tex "__OTR__textures/kanji/gMsgKanji9690Tex" +static const ALIGN_ASSET(2) char gMsgKanji9690Tex[] = dgMsgKanji9690Tex; + +#define dgMsgKanji9691Tex "__OTR__textures/kanji/gMsgKanji9691Tex" +static const ALIGN_ASSET(2) char gMsgKanji9691Tex[] = dgMsgKanji9691Tex; + +#define dgMsgKanji9692Tex "__OTR__textures/kanji/gMsgKanji9692Tex" +static const ALIGN_ASSET(2) char gMsgKanji9692Tex[] = dgMsgKanji9692Tex; + +#define dgMsgKanji9693Tex "__OTR__textures/kanji/gMsgKanji9693Tex" +static const ALIGN_ASSET(2) char gMsgKanji9693Tex[] = dgMsgKanji9693Tex; + +#define dgMsgKanji9694Tex "__OTR__textures/kanji/gMsgKanji9694Tex" +static const ALIGN_ASSET(2) char gMsgKanji9694Tex[] = dgMsgKanji9694Tex; + +#define dgMsgKanji9695Tex "__OTR__textures/kanji/gMsgKanji9695Tex" +static const ALIGN_ASSET(2) char gMsgKanji9695Tex[] = dgMsgKanji9695Tex; + +#define dgMsgKanji9696Tex "__OTR__textures/kanji/gMsgKanji9696Tex" +static const ALIGN_ASSET(2) char gMsgKanji9696Tex[] = dgMsgKanji9696Tex; + +#define dgMsgKanji9697Tex "__OTR__textures/kanji/gMsgKanji9697Tex" +static const ALIGN_ASSET(2) char gMsgKanji9697Tex[] = dgMsgKanji9697Tex; + +#define dgMsgKanji9698Tex "__OTR__textures/kanji/gMsgKanji9698Tex" +static const ALIGN_ASSET(2) char gMsgKanji9698Tex[] = dgMsgKanji9698Tex; + +#define dgMsgKanji9699Tex "__OTR__textures/kanji/gMsgKanji9699Tex" +static const ALIGN_ASSET(2) char gMsgKanji9699Tex[] = dgMsgKanji9699Tex; + +#define dgMsgKanji969ATex "__OTR__textures/kanji/gMsgKanji969ATex" +static const ALIGN_ASSET(2) char gMsgKanji969ATex[] = dgMsgKanji969ATex; + +#define dgMsgKanji969BTex "__OTR__textures/kanji/gMsgKanji969BTex" +static const ALIGN_ASSET(2) char gMsgKanji969BTex[] = dgMsgKanji969BTex; + +#define dgMsgKanji969CTex "__OTR__textures/kanji/gMsgKanji969CTex" +static const ALIGN_ASSET(2) char gMsgKanji969CTex[] = dgMsgKanji969CTex; + +#define dgMsgKanji969DTex "__OTR__textures/kanji/gMsgKanji969DTex" +static const ALIGN_ASSET(2) char gMsgKanji969DTex[] = dgMsgKanji969DTex; + +#define dgMsgKanji969ETex "__OTR__textures/kanji/gMsgKanji969ETex" +static const ALIGN_ASSET(2) char gMsgKanji969ETex[] = dgMsgKanji969ETex; + +#define dgMsgKanji969FTex "__OTR__textures/kanji/gMsgKanji969FTex" +static const ALIGN_ASSET(2) char gMsgKanji969FTex[] = dgMsgKanji969FTex; + +#define dgMsgKanji96A0Tex "__OTR__textures/kanji/gMsgKanji96A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A0Tex[] = dgMsgKanji96A0Tex; + +#define dgMsgKanji96A1Tex "__OTR__textures/kanji/gMsgKanji96A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A1Tex[] = dgMsgKanji96A1Tex; + +#define dgMsgKanji96A2Tex "__OTR__textures/kanji/gMsgKanji96A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A2Tex[] = dgMsgKanji96A2Tex; + +#define dgMsgKanji96A3Tex "__OTR__textures/kanji/gMsgKanji96A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A3Tex[] = dgMsgKanji96A3Tex; + +#define dgMsgKanji96A4Tex "__OTR__textures/kanji/gMsgKanji96A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A4Tex[] = dgMsgKanji96A4Tex; + +#define dgMsgKanji96A5Tex "__OTR__textures/kanji/gMsgKanji96A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A5Tex[] = dgMsgKanji96A5Tex; + +#define dgMsgKanji96A6Tex "__OTR__textures/kanji/gMsgKanji96A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A6Tex[] = dgMsgKanji96A6Tex; + +#define dgMsgKanji96A7Tex "__OTR__textures/kanji/gMsgKanji96A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A7Tex[] = dgMsgKanji96A7Tex; + +#define dgMsgKanji96A8Tex "__OTR__textures/kanji/gMsgKanji96A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A8Tex[] = dgMsgKanji96A8Tex; + +#define dgMsgKanji96A9Tex "__OTR__textures/kanji/gMsgKanji96A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji96A9Tex[] = dgMsgKanji96A9Tex; + +#define dgMsgKanji96AATex "__OTR__textures/kanji/gMsgKanji96AATex" +static const ALIGN_ASSET(2) char gMsgKanji96AATex[] = dgMsgKanji96AATex; + +#define dgMsgKanji96ABTex "__OTR__textures/kanji/gMsgKanji96ABTex" +static const ALIGN_ASSET(2) char gMsgKanji96ABTex[] = dgMsgKanji96ABTex; + +#define dgMsgKanji96ACTex "__OTR__textures/kanji/gMsgKanji96ACTex" +static const ALIGN_ASSET(2) char gMsgKanji96ACTex[] = dgMsgKanji96ACTex; + +#define dgMsgKanji96ADTex "__OTR__textures/kanji/gMsgKanji96ADTex" +static const ALIGN_ASSET(2) char gMsgKanji96ADTex[] = dgMsgKanji96ADTex; + +#define dgMsgKanji96AETex "__OTR__textures/kanji/gMsgKanji96AETex" +static const ALIGN_ASSET(2) char gMsgKanji96AETex[] = dgMsgKanji96AETex; + +#define dgMsgKanji96AFTex "__OTR__textures/kanji/gMsgKanji96AFTex" +static const ALIGN_ASSET(2) char gMsgKanji96AFTex[] = dgMsgKanji96AFTex; + +#define dgMsgKanji96B0Tex "__OTR__textures/kanji/gMsgKanji96B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B0Tex[] = dgMsgKanji96B0Tex; + +#define dgMsgKanji96B1Tex "__OTR__textures/kanji/gMsgKanji96B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B1Tex[] = dgMsgKanji96B1Tex; + +#define dgMsgKanji96B2Tex "__OTR__textures/kanji/gMsgKanji96B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B2Tex[] = dgMsgKanji96B2Tex; + +#define dgMsgKanji96B3Tex "__OTR__textures/kanji/gMsgKanji96B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B3Tex[] = dgMsgKanji96B3Tex; + +#define dgMsgKanji96B4Tex "__OTR__textures/kanji/gMsgKanji96B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B4Tex[] = dgMsgKanji96B4Tex; + +#define dgMsgKanji96B5Tex "__OTR__textures/kanji/gMsgKanji96B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B5Tex[] = dgMsgKanji96B5Tex; + +#define dgMsgKanji96B6Tex "__OTR__textures/kanji/gMsgKanji96B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B6Tex[] = dgMsgKanji96B6Tex; + +#define dgMsgKanji96B7Tex "__OTR__textures/kanji/gMsgKanji96B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B7Tex[] = dgMsgKanji96B7Tex; + +#define dgMsgKanji96B8Tex "__OTR__textures/kanji/gMsgKanji96B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B8Tex[] = dgMsgKanji96B8Tex; + +#define dgMsgKanji96B9Tex "__OTR__textures/kanji/gMsgKanji96B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji96B9Tex[] = dgMsgKanji96B9Tex; + +#define dgMsgKanji96BATex "__OTR__textures/kanji/gMsgKanji96BATex" +static const ALIGN_ASSET(2) char gMsgKanji96BATex[] = dgMsgKanji96BATex; + +#define dgMsgKanji96BBTex "__OTR__textures/kanji/gMsgKanji96BBTex" +static const ALIGN_ASSET(2) char gMsgKanji96BBTex[] = dgMsgKanji96BBTex; + +#define dgMsgKanji96BCTex "__OTR__textures/kanji/gMsgKanji96BCTex" +static const ALIGN_ASSET(2) char gMsgKanji96BCTex[] = dgMsgKanji96BCTex; + +#define dgMsgKanji96BDTex "__OTR__textures/kanji/gMsgKanji96BDTex" +static const ALIGN_ASSET(2) char gMsgKanji96BDTex[] = dgMsgKanji96BDTex; + +#define dgMsgKanji96BETex "__OTR__textures/kanji/gMsgKanji96BETex" +static const ALIGN_ASSET(2) char gMsgKanji96BETex[] = dgMsgKanji96BETex; + +#define dgMsgKanji96BFTex "__OTR__textures/kanji/gMsgKanji96BFTex" +static const ALIGN_ASSET(2) char gMsgKanji96BFTex[] = dgMsgKanji96BFTex; + +#define dgMsgKanji96C0Tex "__OTR__textures/kanji/gMsgKanji96C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C0Tex[] = dgMsgKanji96C0Tex; + +#define dgMsgKanji96C1Tex "__OTR__textures/kanji/gMsgKanji96C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C1Tex[] = dgMsgKanji96C1Tex; + +#define dgMsgKanji96C2Tex "__OTR__textures/kanji/gMsgKanji96C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C2Tex[] = dgMsgKanji96C2Tex; + +#define dgMsgKanji96C3Tex "__OTR__textures/kanji/gMsgKanji96C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C3Tex[] = dgMsgKanji96C3Tex; + +#define dgMsgKanji96C4Tex "__OTR__textures/kanji/gMsgKanji96C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C4Tex[] = dgMsgKanji96C4Tex; + +#define dgMsgKanji96C5Tex "__OTR__textures/kanji/gMsgKanji96C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C5Tex[] = dgMsgKanji96C5Tex; + +#define dgMsgKanji96C6Tex "__OTR__textures/kanji/gMsgKanji96C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C6Tex[] = dgMsgKanji96C6Tex; + +#define dgMsgKanji96C7Tex "__OTR__textures/kanji/gMsgKanji96C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C7Tex[] = dgMsgKanji96C7Tex; + +#define dgMsgKanji96C8Tex "__OTR__textures/kanji/gMsgKanji96C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C8Tex[] = dgMsgKanji96C8Tex; + +#define dgMsgKanji96C9Tex "__OTR__textures/kanji/gMsgKanji96C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji96C9Tex[] = dgMsgKanji96C9Tex; + +#define dgMsgKanji96CATex "__OTR__textures/kanji/gMsgKanji96CATex" +static const ALIGN_ASSET(2) char gMsgKanji96CATex[] = dgMsgKanji96CATex; + +#define dgMsgKanji96CBTex "__OTR__textures/kanji/gMsgKanji96CBTex" +static const ALIGN_ASSET(2) char gMsgKanji96CBTex[] = dgMsgKanji96CBTex; + +#define dgMsgKanji96CCTex "__OTR__textures/kanji/gMsgKanji96CCTex" +static const ALIGN_ASSET(2) char gMsgKanji96CCTex[] = dgMsgKanji96CCTex; + +#define dgMsgKanji96CDTex "__OTR__textures/kanji/gMsgKanji96CDTex" +static const ALIGN_ASSET(2) char gMsgKanji96CDTex[] = dgMsgKanji96CDTex; + +#define dgMsgKanji96CETex "__OTR__textures/kanji/gMsgKanji96CETex" +static const ALIGN_ASSET(2) char gMsgKanji96CETex[] = dgMsgKanji96CETex; + +#define dgMsgKanji96CFTex "__OTR__textures/kanji/gMsgKanji96CFTex" +static const ALIGN_ASSET(2) char gMsgKanji96CFTex[] = dgMsgKanji96CFTex; + +#define dgMsgKanji96D0Tex "__OTR__textures/kanji/gMsgKanji96D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D0Tex[] = dgMsgKanji96D0Tex; + +#define dgMsgKanji96D1Tex "__OTR__textures/kanji/gMsgKanji96D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D1Tex[] = dgMsgKanji96D1Tex; + +#define dgMsgKanji96D2Tex "__OTR__textures/kanji/gMsgKanji96D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D2Tex[] = dgMsgKanji96D2Tex; + +#define dgMsgKanji96D3Tex "__OTR__textures/kanji/gMsgKanji96D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D3Tex[] = dgMsgKanji96D3Tex; + +#define dgMsgKanji96D4Tex "__OTR__textures/kanji/gMsgKanji96D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D4Tex[] = dgMsgKanji96D4Tex; + +#define dgMsgKanji96D5Tex "__OTR__textures/kanji/gMsgKanji96D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D5Tex[] = dgMsgKanji96D5Tex; + +#define dgMsgKanji96D6Tex "__OTR__textures/kanji/gMsgKanji96D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D6Tex[] = dgMsgKanji96D6Tex; + +#define dgMsgKanji96D7Tex "__OTR__textures/kanji/gMsgKanji96D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D7Tex[] = dgMsgKanji96D7Tex; + +#define dgMsgKanji96D8Tex "__OTR__textures/kanji/gMsgKanji96D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D8Tex[] = dgMsgKanji96D8Tex; + +#define dgMsgKanji96D9Tex "__OTR__textures/kanji/gMsgKanji96D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji96D9Tex[] = dgMsgKanji96D9Tex; + +#define dgMsgKanji96DATex "__OTR__textures/kanji/gMsgKanji96DATex" +static const ALIGN_ASSET(2) char gMsgKanji96DATex[] = dgMsgKanji96DATex; + +#define dgMsgKanji96DBTex "__OTR__textures/kanji/gMsgKanji96DBTex" +static const ALIGN_ASSET(2) char gMsgKanji96DBTex[] = dgMsgKanji96DBTex; + +#define dgMsgKanji96DCTex "__OTR__textures/kanji/gMsgKanji96DCTex" +static const ALIGN_ASSET(2) char gMsgKanji96DCTex[] = dgMsgKanji96DCTex; + +#define dgMsgKanji96DDTex "__OTR__textures/kanji/gMsgKanji96DDTex" +static const ALIGN_ASSET(2) char gMsgKanji96DDTex[] = dgMsgKanji96DDTex; + +#define dgMsgKanji96DETex "__OTR__textures/kanji/gMsgKanji96DETex" +static const ALIGN_ASSET(2) char gMsgKanji96DETex[] = dgMsgKanji96DETex; + +#define dgMsgKanji96DFTex "__OTR__textures/kanji/gMsgKanji96DFTex" +static const ALIGN_ASSET(2) char gMsgKanji96DFTex[] = dgMsgKanji96DFTex; + +#define dgMsgKanji96E0Tex "__OTR__textures/kanji/gMsgKanji96E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E0Tex[] = dgMsgKanji96E0Tex; + +#define dgMsgKanji96E1Tex "__OTR__textures/kanji/gMsgKanji96E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E1Tex[] = dgMsgKanji96E1Tex; + +#define dgMsgKanji96E2Tex "__OTR__textures/kanji/gMsgKanji96E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E2Tex[] = dgMsgKanji96E2Tex; + +#define dgMsgKanji96E3Tex "__OTR__textures/kanji/gMsgKanji96E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E3Tex[] = dgMsgKanji96E3Tex; + +#define dgMsgKanji96E4Tex "__OTR__textures/kanji/gMsgKanji96E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E4Tex[] = dgMsgKanji96E4Tex; + +#define dgMsgKanji96E5Tex "__OTR__textures/kanji/gMsgKanji96E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E5Tex[] = dgMsgKanji96E5Tex; + +#define dgMsgKanji96E6Tex "__OTR__textures/kanji/gMsgKanji96E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E6Tex[] = dgMsgKanji96E6Tex; + +#define dgMsgKanji96E7Tex "__OTR__textures/kanji/gMsgKanji96E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E7Tex[] = dgMsgKanji96E7Tex; + +#define dgMsgKanji96E8Tex "__OTR__textures/kanji/gMsgKanji96E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E8Tex[] = dgMsgKanji96E8Tex; + +#define dgMsgKanji96E9Tex "__OTR__textures/kanji/gMsgKanji96E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji96E9Tex[] = dgMsgKanji96E9Tex; + +#define dgMsgKanji96EATex "__OTR__textures/kanji/gMsgKanji96EATex" +static const ALIGN_ASSET(2) char gMsgKanji96EATex[] = dgMsgKanji96EATex; + +#define dgMsgKanji96EBTex "__OTR__textures/kanji/gMsgKanji96EBTex" +static const ALIGN_ASSET(2) char gMsgKanji96EBTex[] = dgMsgKanji96EBTex; + +#define dgMsgKanji96ECTex "__OTR__textures/kanji/gMsgKanji96ECTex" +static const ALIGN_ASSET(2) char gMsgKanji96ECTex[] = dgMsgKanji96ECTex; + +#define dgMsgKanji96EDTex "__OTR__textures/kanji/gMsgKanji96EDTex" +static const ALIGN_ASSET(2) char gMsgKanji96EDTex[] = dgMsgKanji96EDTex; + +#define dgMsgKanji96EETex "__OTR__textures/kanji/gMsgKanji96EETex" +static const ALIGN_ASSET(2) char gMsgKanji96EETex[] = dgMsgKanji96EETex; + +#define dgMsgKanji96EFTex "__OTR__textures/kanji/gMsgKanji96EFTex" +static const ALIGN_ASSET(2) char gMsgKanji96EFTex[] = dgMsgKanji96EFTex; + +#define dgMsgKanji96F0Tex "__OTR__textures/kanji/gMsgKanji96F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F0Tex[] = dgMsgKanji96F0Tex; + +#define dgMsgKanji96F1Tex "__OTR__textures/kanji/gMsgKanji96F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F1Tex[] = dgMsgKanji96F1Tex; + +#define dgMsgKanji96F2Tex "__OTR__textures/kanji/gMsgKanji96F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F2Tex[] = dgMsgKanji96F2Tex; + +#define dgMsgKanji96F3Tex "__OTR__textures/kanji/gMsgKanji96F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F3Tex[] = dgMsgKanji96F3Tex; + +#define dgMsgKanji96F4Tex "__OTR__textures/kanji/gMsgKanji96F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F4Tex[] = dgMsgKanji96F4Tex; + +#define dgMsgKanji96F5Tex "__OTR__textures/kanji/gMsgKanji96F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F5Tex[] = dgMsgKanji96F5Tex; + +#define dgMsgKanji96F6Tex "__OTR__textures/kanji/gMsgKanji96F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F6Tex[] = dgMsgKanji96F6Tex; + +#define dgMsgKanji96F7Tex "__OTR__textures/kanji/gMsgKanji96F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F7Tex[] = dgMsgKanji96F7Tex; + +#define dgMsgKanji96F8Tex "__OTR__textures/kanji/gMsgKanji96F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F8Tex[] = dgMsgKanji96F8Tex; + +#define dgMsgKanji96F9Tex "__OTR__textures/kanji/gMsgKanji96F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji96F9Tex[] = dgMsgKanji96F9Tex; + +#define dgMsgKanji96FATex "__OTR__textures/kanji/gMsgKanji96FATex" +static const ALIGN_ASSET(2) char gMsgKanji96FATex[] = dgMsgKanji96FATex; + +#define dgMsgKanji96FBTex "__OTR__textures/kanji/gMsgKanji96FBTex" +static const ALIGN_ASSET(2) char gMsgKanji96FBTex[] = dgMsgKanji96FBTex; + +#define dgMsgKanji96FCTex "__OTR__textures/kanji/gMsgKanji96FCTex" +static const ALIGN_ASSET(2) char gMsgKanji96FCTex[] = dgMsgKanji96FCTex; + +#define dgMsgKanji9740Tex "__OTR__textures/kanji/gMsgKanji9740Tex" +static const ALIGN_ASSET(2) char gMsgKanji9740Tex[] = dgMsgKanji9740Tex; + +#define dgMsgKanji9741Tex "__OTR__textures/kanji/gMsgKanji9741Tex" +static const ALIGN_ASSET(2) char gMsgKanji9741Tex[] = dgMsgKanji9741Tex; + +#define dgMsgKanji9742Tex "__OTR__textures/kanji/gMsgKanji9742Tex" +static const ALIGN_ASSET(2) char gMsgKanji9742Tex[] = dgMsgKanji9742Tex; + +#define dgMsgKanji9743Tex "__OTR__textures/kanji/gMsgKanji9743Tex" +static const ALIGN_ASSET(2) char gMsgKanji9743Tex[] = dgMsgKanji9743Tex; + +#define dgMsgKanji9744Tex "__OTR__textures/kanji/gMsgKanji9744Tex" +static const ALIGN_ASSET(2) char gMsgKanji9744Tex[] = dgMsgKanji9744Tex; + +#define dgMsgKanji9745Tex "__OTR__textures/kanji/gMsgKanji9745Tex" +static const ALIGN_ASSET(2) char gMsgKanji9745Tex[] = dgMsgKanji9745Tex; + +#define dgMsgKanji9746Tex "__OTR__textures/kanji/gMsgKanji9746Tex" +static const ALIGN_ASSET(2) char gMsgKanji9746Tex[] = dgMsgKanji9746Tex; + +#define dgMsgKanji9747Tex "__OTR__textures/kanji/gMsgKanji9747Tex" +static const ALIGN_ASSET(2) char gMsgKanji9747Tex[] = dgMsgKanji9747Tex; + +#define dgMsgKanji9748Tex "__OTR__textures/kanji/gMsgKanji9748Tex" +static const ALIGN_ASSET(2) char gMsgKanji9748Tex[] = dgMsgKanji9748Tex; + +#define dgMsgKanji9749Tex "__OTR__textures/kanji/gMsgKanji9749Tex" +static const ALIGN_ASSET(2) char gMsgKanji9749Tex[] = dgMsgKanji9749Tex; + +#define dgMsgKanji974ATex "__OTR__textures/kanji/gMsgKanji974ATex" +static const ALIGN_ASSET(2) char gMsgKanji974ATex[] = dgMsgKanji974ATex; + +#define dgMsgKanji974BTex "__OTR__textures/kanji/gMsgKanji974BTex" +static const ALIGN_ASSET(2) char gMsgKanji974BTex[] = dgMsgKanji974BTex; + +#define dgMsgKanji974CTex "__OTR__textures/kanji/gMsgKanji974CTex" +static const ALIGN_ASSET(2) char gMsgKanji974CTex[] = dgMsgKanji974CTex; + +#define dgMsgKanji974DTex "__OTR__textures/kanji/gMsgKanji974DTex" +static const ALIGN_ASSET(2) char gMsgKanji974DTex[] = dgMsgKanji974DTex; + +#define dgMsgKanji974ETex "__OTR__textures/kanji/gMsgKanji974ETex" +static const ALIGN_ASSET(2) char gMsgKanji974ETex[] = dgMsgKanji974ETex; + +#define dgMsgKanji974FTex "__OTR__textures/kanji/gMsgKanji974FTex" +static const ALIGN_ASSET(2) char gMsgKanji974FTex[] = dgMsgKanji974FTex; + +#define dgMsgKanji9750Tex "__OTR__textures/kanji/gMsgKanji9750Tex" +static const ALIGN_ASSET(2) char gMsgKanji9750Tex[] = dgMsgKanji9750Tex; + +#define dgMsgKanji9751Tex "__OTR__textures/kanji/gMsgKanji9751Tex" +static const ALIGN_ASSET(2) char gMsgKanji9751Tex[] = dgMsgKanji9751Tex; + +#define dgMsgKanji9752Tex "__OTR__textures/kanji/gMsgKanji9752Tex" +static const ALIGN_ASSET(2) char gMsgKanji9752Tex[] = dgMsgKanji9752Tex; + +#define dgMsgKanji9753Tex "__OTR__textures/kanji/gMsgKanji9753Tex" +static const ALIGN_ASSET(2) char gMsgKanji9753Tex[] = dgMsgKanji9753Tex; + +#define dgMsgKanji9754Tex "__OTR__textures/kanji/gMsgKanji9754Tex" +static const ALIGN_ASSET(2) char gMsgKanji9754Tex[] = dgMsgKanji9754Tex; + +#define dgMsgKanji9755Tex "__OTR__textures/kanji/gMsgKanji9755Tex" +static const ALIGN_ASSET(2) char gMsgKanji9755Tex[] = dgMsgKanji9755Tex; + +#define dgMsgKanji9756Tex "__OTR__textures/kanji/gMsgKanji9756Tex" +static const ALIGN_ASSET(2) char gMsgKanji9756Tex[] = dgMsgKanji9756Tex; + +#define dgMsgKanji9757Tex "__OTR__textures/kanji/gMsgKanji9757Tex" +static const ALIGN_ASSET(2) char gMsgKanji9757Tex[] = dgMsgKanji9757Tex; + +#define dgMsgKanji9758Tex "__OTR__textures/kanji/gMsgKanji9758Tex" +static const ALIGN_ASSET(2) char gMsgKanji9758Tex[] = dgMsgKanji9758Tex; + +#define dgMsgKanji9759Tex "__OTR__textures/kanji/gMsgKanji9759Tex" +static const ALIGN_ASSET(2) char gMsgKanji9759Tex[] = dgMsgKanji9759Tex; + +#define dgMsgKanji975ATex "__OTR__textures/kanji/gMsgKanji975ATex" +static const ALIGN_ASSET(2) char gMsgKanji975ATex[] = dgMsgKanji975ATex; + +#define dgMsgKanji975BTex "__OTR__textures/kanji/gMsgKanji975BTex" +static const ALIGN_ASSET(2) char gMsgKanji975BTex[] = dgMsgKanji975BTex; + +#define dgMsgKanji975CTex "__OTR__textures/kanji/gMsgKanji975CTex" +static const ALIGN_ASSET(2) char gMsgKanji975CTex[] = dgMsgKanji975CTex; + +#define dgMsgKanji975DTex "__OTR__textures/kanji/gMsgKanji975DTex" +static const ALIGN_ASSET(2) char gMsgKanji975DTex[] = dgMsgKanji975DTex; + +#define dgMsgKanji975ETex "__OTR__textures/kanji/gMsgKanji975ETex" +static const ALIGN_ASSET(2) char gMsgKanji975ETex[] = dgMsgKanji975ETex; + +#define dgMsgKanji975FTex "__OTR__textures/kanji/gMsgKanji975FTex" +static const ALIGN_ASSET(2) char gMsgKanji975FTex[] = dgMsgKanji975FTex; + +#define dgMsgKanji9760Tex "__OTR__textures/kanji/gMsgKanji9760Tex" +static const ALIGN_ASSET(2) char gMsgKanji9760Tex[] = dgMsgKanji9760Tex; + +#define dgMsgKanji9761Tex "__OTR__textures/kanji/gMsgKanji9761Tex" +static const ALIGN_ASSET(2) char gMsgKanji9761Tex[] = dgMsgKanji9761Tex; + +#define dgMsgKanji9762Tex "__OTR__textures/kanji/gMsgKanji9762Tex" +static const ALIGN_ASSET(2) char gMsgKanji9762Tex[] = dgMsgKanji9762Tex; + +#define dgMsgKanji9763Tex "__OTR__textures/kanji/gMsgKanji9763Tex" +static const ALIGN_ASSET(2) char gMsgKanji9763Tex[] = dgMsgKanji9763Tex; + +#define dgMsgKanji9764Tex "__OTR__textures/kanji/gMsgKanji9764Tex" +static const ALIGN_ASSET(2) char gMsgKanji9764Tex[] = dgMsgKanji9764Tex; + +#define dgMsgKanji9765Tex "__OTR__textures/kanji/gMsgKanji9765Tex" +static const ALIGN_ASSET(2) char gMsgKanji9765Tex[] = dgMsgKanji9765Tex; + +#define dgMsgKanji9766Tex "__OTR__textures/kanji/gMsgKanji9766Tex" +static const ALIGN_ASSET(2) char gMsgKanji9766Tex[] = dgMsgKanji9766Tex; + +#define dgMsgKanji9767Tex "__OTR__textures/kanji/gMsgKanji9767Tex" +static const ALIGN_ASSET(2) char gMsgKanji9767Tex[] = dgMsgKanji9767Tex; + +#define dgMsgKanji9768Tex "__OTR__textures/kanji/gMsgKanji9768Tex" +static const ALIGN_ASSET(2) char gMsgKanji9768Tex[] = dgMsgKanji9768Tex; + +#define dgMsgKanji9769Tex "__OTR__textures/kanji/gMsgKanji9769Tex" +static const ALIGN_ASSET(2) char gMsgKanji9769Tex[] = dgMsgKanji9769Tex; + +#define dgMsgKanji976ATex "__OTR__textures/kanji/gMsgKanji976ATex" +static const ALIGN_ASSET(2) char gMsgKanji976ATex[] = dgMsgKanji976ATex; + +#define dgMsgKanji976BTex "__OTR__textures/kanji/gMsgKanji976BTex" +static const ALIGN_ASSET(2) char gMsgKanji976BTex[] = dgMsgKanji976BTex; + +#define dgMsgKanji976CTex "__OTR__textures/kanji/gMsgKanji976CTex" +static const ALIGN_ASSET(2) char gMsgKanji976CTex[] = dgMsgKanji976CTex; + +#define dgMsgKanji976DTex "__OTR__textures/kanji/gMsgKanji976DTex" +static const ALIGN_ASSET(2) char gMsgKanji976DTex[] = dgMsgKanji976DTex; + +#define dgMsgKanji976ETex "__OTR__textures/kanji/gMsgKanji976ETex" +static const ALIGN_ASSET(2) char gMsgKanji976ETex[] = dgMsgKanji976ETex; + +#define dgMsgKanji976FTex "__OTR__textures/kanji/gMsgKanji976FTex" +static const ALIGN_ASSET(2) char gMsgKanji976FTex[] = dgMsgKanji976FTex; + +#define dgMsgKanji9770Tex "__OTR__textures/kanji/gMsgKanji9770Tex" +static const ALIGN_ASSET(2) char gMsgKanji9770Tex[] = dgMsgKanji9770Tex; + +#define dgMsgKanji9771Tex "__OTR__textures/kanji/gMsgKanji9771Tex" +static const ALIGN_ASSET(2) char gMsgKanji9771Tex[] = dgMsgKanji9771Tex; + +#define dgMsgKanji9772Tex "__OTR__textures/kanji/gMsgKanji9772Tex" +static const ALIGN_ASSET(2) char gMsgKanji9772Tex[] = dgMsgKanji9772Tex; + +#define dgMsgKanji9773Tex "__OTR__textures/kanji/gMsgKanji9773Tex" +static const ALIGN_ASSET(2) char gMsgKanji9773Tex[] = dgMsgKanji9773Tex; + +#define dgMsgKanji9774Tex "__OTR__textures/kanji/gMsgKanji9774Tex" +static const ALIGN_ASSET(2) char gMsgKanji9774Tex[] = dgMsgKanji9774Tex; + +#define dgMsgKanji9775Tex "__OTR__textures/kanji/gMsgKanji9775Tex" +static const ALIGN_ASSET(2) char gMsgKanji9775Tex[] = dgMsgKanji9775Tex; + +#define dgMsgKanji9776Tex "__OTR__textures/kanji/gMsgKanji9776Tex" +static const ALIGN_ASSET(2) char gMsgKanji9776Tex[] = dgMsgKanji9776Tex; + +#define dgMsgKanji9777Tex "__OTR__textures/kanji/gMsgKanji9777Tex" +static const ALIGN_ASSET(2) char gMsgKanji9777Tex[] = dgMsgKanji9777Tex; + +#define dgMsgKanji9778Tex "__OTR__textures/kanji/gMsgKanji9778Tex" +static const ALIGN_ASSET(2) char gMsgKanji9778Tex[] = dgMsgKanji9778Tex; + +#define dgMsgKanji9779Tex "__OTR__textures/kanji/gMsgKanji9779Tex" +static const ALIGN_ASSET(2) char gMsgKanji9779Tex[] = dgMsgKanji9779Tex; + +#define dgMsgKanji977ATex "__OTR__textures/kanji/gMsgKanji977ATex" +static const ALIGN_ASSET(2) char gMsgKanji977ATex[] = dgMsgKanji977ATex; + +#define dgMsgKanji977BTex "__OTR__textures/kanji/gMsgKanji977BTex" +static const ALIGN_ASSET(2) char gMsgKanji977BTex[] = dgMsgKanji977BTex; + +#define dgMsgKanji977CTex "__OTR__textures/kanji/gMsgKanji977CTex" +static const ALIGN_ASSET(2) char gMsgKanji977CTex[] = dgMsgKanji977CTex; + +#define dgMsgKanji977DTex "__OTR__textures/kanji/gMsgKanji977DTex" +static const ALIGN_ASSET(2) char gMsgKanji977DTex[] = dgMsgKanji977DTex; + +#define dgMsgKanji977ETex "__OTR__textures/kanji/gMsgKanji977ETex" +static const ALIGN_ASSET(2) char gMsgKanji977ETex[] = dgMsgKanji977ETex; + +#define dgMsgKanji9780Tex "__OTR__textures/kanji/gMsgKanji9780Tex" +static const ALIGN_ASSET(2) char gMsgKanji9780Tex[] = dgMsgKanji9780Tex; + +#define dgMsgKanji9781Tex "__OTR__textures/kanji/gMsgKanji9781Tex" +static const ALIGN_ASSET(2) char gMsgKanji9781Tex[] = dgMsgKanji9781Tex; + +#define dgMsgKanji9782Tex "__OTR__textures/kanji/gMsgKanji9782Tex" +static const ALIGN_ASSET(2) char gMsgKanji9782Tex[] = dgMsgKanji9782Tex; + +#define dgMsgKanji9783Tex "__OTR__textures/kanji/gMsgKanji9783Tex" +static const ALIGN_ASSET(2) char gMsgKanji9783Tex[] = dgMsgKanji9783Tex; + +#define dgMsgKanji9784Tex "__OTR__textures/kanji/gMsgKanji9784Tex" +static const ALIGN_ASSET(2) char gMsgKanji9784Tex[] = dgMsgKanji9784Tex; + +#define dgMsgKanji9785Tex "__OTR__textures/kanji/gMsgKanji9785Tex" +static const ALIGN_ASSET(2) char gMsgKanji9785Tex[] = dgMsgKanji9785Tex; + +#define dgMsgKanji9786Tex "__OTR__textures/kanji/gMsgKanji9786Tex" +static const ALIGN_ASSET(2) char gMsgKanji9786Tex[] = dgMsgKanji9786Tex; + +#define dgMsgKanji9787Tex "__OTR__textures/kanji/gMsgKanji9787Tex" +static const ALIGN_ASSET(2) char gMsgKanji9787Tex[] = dgMsgKanji9787Tex; + +#define dgMsgKanji9788Tex "__OTR__textures/kanji/gMsgKanji9788Tex" +static const ALIGN_ASSET(2) char gMsgKanji9788Tex[] = dgMsgKanji9788Tex; + +#define dgMsgKanji9789Tex "__OTR__textures/kanji/gMsgKanji9789Tex" +static const ALIGN_ASSET(2) char gMsgKanji9789Tex[] = dgMsgKanji9789Tex; + +#define dgMsgKanji978ATex "__OTR__textures/kanji/gMsgKanji978ATex" +static const ALIGN_ASSET(2) char gMsgKanji978ATex[] = dgMsgKanji978ATex; + +#define dgMsgKanji978BTex "__OTR__textures/kanji/gMsgKanji978BTex" +static const ALIGN_ASSET(2) char gMsgKanji978BTex[] = dgMsgKanji978BTex; + +#define dgMsgKanji978CTex "__OTR__textures/kanji/gMsgKanji978CTex" +static const ALIGN_ASSET(2) char gMsgKanji978CTex[] = dgMsgKanji978CTex; + +#define dgMsgKanji978DTex "__OTR__textures/kanji/gMsgKanji978DTex" +static const ALIGN_ASSET(2) char gMsgKanji978DTex[] = dgMsgKanji978DTex; + +#define dgMsgKanji978ETex "__OTR__textures/kanji/gMsgKanji978ETex" +static const ALIGN_ASSET(2) char gMsgKanji978ETex[] = dgMsgKanji978ETex; + +#define dgMsgKanji978FTex "__OTR__textures/kanji/gMsgKanji978FTex" +static const ALIGN_ASSET(2) char gMsgKanji978FTex[] = dgMsgKanji978FTex; + +#define dgMsgKanji9790Tex "__OTR__textures/kanji/gMsgKanji9790Tex" +static const ALIGN_ASSET(2) char gMsgKanji9790Tex[] = dgMsgKanji9790Tex; + +#define dgMsgKanji9791Tex "__OTR__textures/kanji/gMsgKanji9791Tex" +static const ALIGN_ASSET(2) char gMsgKanji9791Tex[] = dgMsgKanji9791Tex; + +#define dgMsgKanji9792Tex "__OTR__textures/kanji/gMsgKanji9792Tex" +static const ALIGN_ASSET(2) char gMsgKanji9792Tex[] = dgMsgKanji9792Tex; + +#define dgMsgKanji9793Tex "__OTR__textures/kanji/gMsgKanji9793Tex" +static const ALIGN_ASSET(2) char gMsgKanji9793Tex[] = dgMsgKanji9793Tex; + +#define dgMsgKanji9794Tex "__OTR__textures/kanji/gMsgKanji9794Tex" +static const ALIGN_ASSET(2) char gMsgKanji9794Tex[] = dgMsgKanji9794Tex; + +#define dgMsgKanji9795Tex "__OTR__textures/kanji/gMsgKanji9795Tex" +static const ALIGN_ASSET(2) char gMsgKanji9795Tex[] = dgMsgKanji9795Tex; + +#define dgMsgKanji9796Tex "__OTR__textures/kanji/gMsgKanji9796Tex" +static const ALIGN_ASSET(2) char gMsgKanji9796Tex[] = dgMsgKanji9796Tex; + +#define dgMsgKanji9797Tex "__OTR__textures/kanji/gMsgKanji9797Tex" +static const ALIGN_ASSET(2) char gMsgKanji9797Tex[] = dgMsgKanji9797Tex; + +#define dgMsgKanji9798Tex "__OTR__textures/kanji/gMsgKanji9798Tex" +static const ALIGN_ASSET(2) char gMsgKanji9798Tex[] = dgMsgKanji9798Tex; + +#define dgMsgKanji9799Tex "__OTR__textures/kanji/gMsgKanji9799Tex" +static const ALIGN_ASSET(2) char gMsgKanji9799Tex[] = dgMsgKanji9799Tex; + +#define dgMsgKanji979ATex "__OTR__textures/kanji/gMsgKanji979ATex" +static const ALIGN_ASSET(2) char gMsgKanji979ATex[] = dgMsgKanji979ATex; + +#define dgMsgKanji979BTex "__OTR__textures/kanji/gMsgKanji979BTex" +static const ALIGN_ASSET(2) char gMsgKanji979BTex[] = dgMsgKanji979BTex; + +#define dgMsgKanji979CTex "__OTR__textures/kanji/gMsgKanji979CTex" +static const ALIGN_ASSET(2) char gMsgKanji979CTex[] = dgMsgKanji979CTex; + +#define dgMsgKanji979DTex "__OTR__textures/kanji/gMsgKanji979DTex" +static const ALIGN_ASSET(2) char gMsgKanji979DTex[] = dgMsgKanji979DTex; + +#define dgMsgKanji979ETex "__OTR__textures/kanji/gMsgKanji979ETex" +static const ALIGN_ASSET(2) char gMsgKanji979ETex[] = dgMsgKanji979ETex; + +#define dgMsgKanji979FTex "__OTR__textures/kanji/gMsgKanji979FTex" +static const ALIGN_ASSET(2) char gMsgKanji979FTex[] = dgMsgKanji979FTex; + +#define dgMsgKanji97A0Tex "__OTR__textures/kanji/gMsgKanji97A0Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A0Tex[] = dgMsgKanji97A0Tex; + +#define dgMsgKanji97A1Tex "__OTR__textures/kanji/gMsgKanji97A1Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A1Tex[] = dgMsgKanji97A1Tex; + +#define dgMsgKanji97A2Tex "__OTR__textures/kanji/gMsgKanji97A2Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A2Tex[] = dgMsgKanji97A2Tex; + +#define dgMsgKanji97A3Tex "__OTR__textures/kanji/gMsgKanji97A3Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A3Tex[] = dgMsgKanji97A3Tex; + +#define dgMsgKanji97A4Tex "__OTR__textures/kanji/gMsgKanji97A4Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A4Tex[] = dgMsgKanji97A4Tex; + +#define dgMsgKanji97A5Tex "__OTR__textures/kanji/gMsgKanji97A5Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A5Tex[] = dgMsgKanji97A5Tex; + +#define dgMsgKanji97A6Tex "__OTR__textures/kanji/gMsgKanji97A6Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A6Tex[] = dgMsgKanji97A6Tex; + +#define dgMsgKanji97A7Tex "__OTR__textures/kanji/gMsgKanji97A7Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A7Tex[] = dgMsgKanji97A7Tex; + +#define dgMsgKanji97A8Tex "__OTR__textures/kanji/gMsgKanji97A8Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A8Tex[] = dgMsgKanji97A8Tex; + +#define dgMsgKanji97A9Tex "__OTR__textures/kanji/gMsgKanji97A9Tex" +static const ALIGN_ASSET(2) char gMsgKanji97A9Tex[] = dgMsgKanji97A9Tex; + +#define dgMsgKanji97AATex "__OTR__textures/kanji/gMsgKanji97AATex" +static const ALIGN_ASSET(2) char gMsgKanji97AATex[] = dgMsgKanji97AATex; + +#define dgMsgKanji97ABTex "__OTR__textures/kanji/gMsgKanji97ABTex" +static const ALIGN_ASSET(2) char gMsgKanji97ABTex[] = dgMsgKanji97ABTex; + +#define dgMsgKanji97ACTex "__OTR__textures/kanji/gMsgKanji97ACTex" +static const ALIGN_ASSET(2) char gMsgKanji97ACTex[] = dgMsgKanji97ACTex; + +#define dgMsgKanji97ADTex "__OTR__textures/kanji/gMsgKanji97ADTex" +static const ALIGN_ASSET(2) char gMsgKanji97ADTex[] = dgMsgKanji97ADTex; + +#define dgMsgKanji97AETex "__OTR__textures/kanji/gMsgKanji97AETex" +static const ALIGN_ASSET(2) char gMsgKanji97AETex[] = dgMsgKanji97AETex; + +#define dgMsgKanji97AFTex "__OTR__textures/kanji/gMsgKanji97AFTex" +static const ALIGN_ASSET(2) char gMsgKanji97AFTex[] = dgMsgKanji97AFTex; + +#define dgMsgKanji97B0Tex "__OTR__textures/kanji/gMsgKanji97B0Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B0Tex[] = dgMsgKanji97B0Tex; + +#define dgMsgKanji97B1Tex "__OTR__textures/kanji/gMsgKanji97B1Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B1Tex[] = dgMsgKanji97B1Tex; + +#define dgMsgKanji97B2Tex "__OTR__textures/kanji/gMsgKanji97B2Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B2Tex[] = dgMsgKanji97B2Tex; + +#define dgMsgKanji97B3Tex "__OTR__textures/kanji/gMsgKanji97B3Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B3Tex[] = dgMsgKanji97B3Tex; + +#define dgMsgKanji97B4Tex "__OTR__textures/kanji/gMsgKanji97B4Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B4Tex[] = dgMsgKanji97B4Tex; + +#define dgMsgKanji97B5Tex "__OTR__textures/kanji/gMsgKanji97B5Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B5Tex[] = dgMsgKanji97B5Tex; + +#define dgMsgKanji97B6Tex "__OTR__textures/kanji/gMsgKanji97B6Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B6Tex[] = dgMsgKanji97B6Tex; + +#define dgMsgKanji97B7Tex "__OTR__textures/kanji/gMsgKanji97B7Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B7Tex[] = dgMsgKanji97B7Tex; + +#define dgMsgKanji97B8Tex "__OTR__textures/kanji/gMsgKanji97B8Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B8Tex[] = dgMsgKanji97B8Tex; + +#define dgMsgKanji97B9Tex "__OTR__textures/kanji/gMsgKanji97B9Tex" +static const ALIGN_ASSET(2) char gMsgKanji97B9Tex[] = dgMsgKanji97B9Tex; + +#define dgMsgKanji97BATex "__OTR__textures/kanji/gMsgKanji97BATex" +static const ALIGN_ASSET(2) char gMsgKanji97BATex[] = dgMsgKanji97BATex; + +#define dgMsgKanji97BBTex "__OTR__textures/kanji/gMsgKanji97BBTex" +static const ALIGN_ASSET(2) char gMsgKanji97BBTex[] = dgMsgKanji97BBTex; + +#define dgMsgKanji97BCTex "__OTR__textures/kanji/gMsgKanji97BCTex" +static const ALIGN_ASSET(2) char gMsgKanji97BCTex[] = dgMsgKanji97BCTex; + +#define dgMsgKanji97BDTex "__OTR__textures/kanji/gMsgKanji97BDTex" +static const ALIGN_ASSET(2) char gMsgKanji97BDTex[] = dgMsgKanji97BDTex; + +#define dgMsgKanji97BETex "__OTR__textures/kanji/gMsgKanji97BETex" +static const ALIGN_ASSET(2) char gMsgKanji97BETex[] = dgMsgKanji97BETex; + +#define dgMsgKanji97BFTex "__OTR__textures/kanji/gMsgKanji97BFTex" +static const ALIGN_ASSET(2) char gMsgKanji97BFTex[] = dgMsgKanji97BFTex; + +#define dgMsgKanji97C0Tex "__OTR__textures/kanji/gMsgKanji97C0Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C0Tex[] = dgMsgKanji97C0Tex; + +#define dgMsgKanji97C1Tex "__OTR__textures/kanji/gMsgKanji97C1Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C1Tex[] = dgMsgKanji97C1Tex; + +#define dgMsgKanji97C2Tex "__OTR__textures/kanji/gMsgKanji97C2Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C2Tex[] = dgMsgKanji97C2Tex; + +#define dgMsgKanji97C3Tex "__OTR__textures/kanji/gMsgKanji97C3Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C3Tex[] = dgMsgKanji97C3Tex; + +#define dgMsgKanji97C4Tex "__OTR__textures/kanji/gMsgKanji97C4Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C4Tex[] = dgMsgKanji97C4Tex; + +#define dgMsgKanji97C5Tex "__OTR__textures/kanji/gMsgKanji97C5Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C5Tex[] = dgMsgKanji97C5Tex; + +#define dgMsgKanji97C6Tex "__OTR__textures/kanji/gMsgKanji97C6Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C6Tex[] = dgMsgKanji97C6Tex; + +#define dgMsgKanji97C7Tex "__OTR__textures/kanji/gMsgKanji97C7Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C7Tex[] = dgMsgKanji97C7Tex; + +#define dgMsgKanji97C8Tex "__OTR__textures/kanji/gMsgKanji97C8Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C8Tex[] = dgMsgKanji97C8Tex; + +#define dgMsgKanji97C9Tex "__OTR__textures/kanji/gMsgKanji97C9Tex" +static const ALIGN_ASSET(2) char gMsgKanji97C9Tex[] = dgMsgKanji97C9Tex; + +#define dgMsgKanji97CATex "__OTR__textures/kanji/gMsgKanji97CATex" +static const ALIGN_ASSET(2) char gMsgKanji97CATex[] = dgMsgKanji97CATex; + +#define dgMsgKanji97CBTex "__OTR__textures/kanji/gMsgKanji97CBTex" +static const ALIGN_ASSET(2) char gMsgKanji97CBTex[] = dgMsgKanji97CBTex; + +#define dgMsgKanji97CCTex "__OTR__textures/kanji/gMsgKanji97CCTex" +static const ALIGN_ASSET(2) char gMsgKanji97CCTex[] = dgMsgKanji97CCTex; + +#define dgMsgKanji97CDTex "__OTR__textures/kanji/gMsgKanji97CDTex" +static const ALIGN_ASSET(2) char gMsgKanji97CDTex[] = dgMsgKanji97CDTex; + +#define dgMsgKanji97CETex "__OTR__textures/kanji/gMsgKanji97CETex" +static const ALIGN_ASSET(2) char gMsgKanji97CETex[] = dgMsgKanji97CETex; + +#define dgMsgKanji97CFTex "__OTR__textures/kanji/gMsgKanji97CFTex" +static const ALIGN_ASSET(2) char gMsgKanji97CFTex[] = dgMsgKanji97CFTex; + +#define dgMsgKanji97D0Tex "__OTR__textures/kanji/gMsgKanji97D0Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D0Tex[] = dgMsgKanji97D0Tex; + +#define dgMsgKanji97D1Tex "__OTR__textures/kanji/gMsgKanji97D1Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D1Tex[] = dgMsgKanji97D1Tex; + +#define dgMsgKanji97D2Tex "__OTR__textures/kanji/gMsgKanji97D2Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D2Tex[] = dgMsgKanji97D2Tex; + +#define dgMsgKanji97D3Tex "__OTR__textures/kanji/gMsgKanji97D3Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D3Tex[] = dgMsgKanji97D3Tex; + +#define dgMsgKanji97D4Tex "__OTR__textures/kanji/gMsgKanji97D4Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D4Tex[] = dgMsgKanji97D4Tex; + +#define dgMsgKanji97D5Tex "__OTR__textures/kanji/gMsgKanji97D5Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D5Tex[] = dgMsgKanji97D5Tex; + +#define dgMsgKanji97D6Tex "__OTR__textures/kanji/gMsgKanji97D6Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D6Tex[] = dgMsgKanji97D6Tex; + +#define dgMsgKanji97D7Tex "__OTR__textures/kanji/gMsgKanji97D7Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D7Tex[] = dgMsgKanji97D7Tex; + +#define dgMsgKanji97D8Tex "__OTR__textures/kanji/gMsgKanji97D8Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D8Tex[] = dgMsgKanji97D8Tex; + +#define dgMsgKanji97D9Tex "__OTR__textures/kanji/gMsgKanji97D9Tex" +static const ALIGN_ASSET(2) char gMsgKanji97D9Tex[] = dgMsgKanji97D9Tex; + +#define dgMsgKanji97DATex "__OTR__textures/kanji/gMsgKanji97DATex" +static const ALIGN_ASSET(2) char gMsgKanji97DATex[] = dgMsgKanji97DATex; + +#define dgMsgKanji97DBTex "__OTR__textures/kanji/gMsgKanji97DBTex" +static const ALIGN_ASSET(2) char gMsgKanji97DBTex[] = dgMsgKanji97DBTex; + +#define dgMsgKanji97DCTex "__OTR__textures/kanji/gMsgKanji97DCTex" +static const ALIGN_ASSET(2) char gMsgKanji97DCTex[] = dgMsgKanji97DCTex; + +#define dgMsgKanji97DDTex "__OTR__textures/kanji/gMsgKanji97DDTex" +static const ALIGN_ASSET(2) char gMsgKanji97DDTex[] = dgMsgKanji97DDTex; + +#define dgMsgKanji97DETex "__OTR__textures/kanji/gMsgKanji97DETex" +static const ALIGN_ASSET(2) char gMsgKanji97DETex[] = dgMsgKanji97DETex; + +#define dgMsgKanji97DFTex "__OTR__textures/kanji/gMsgKanji97DFTex" +static const ALIGN_ASSET(2) char gMsgKanji97DFTex[] = dgMsgKanji97DFTex; + +#define dgMsgKanji97E0Tex "__OTR__textures/kanji/gMsgKanji97E0Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E0Tex[] = dgMsgKanji97E0Tex; + +#define dgMsgKanji97E1Tex "__OTR__textures/kanji/gMsgKanji97E1Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E1Tex[] = dgMsgKanji97E1Tex; + +#define dgMsgKanji97E2Tex "__OTR__textures/kanji/gMsgKanji97E2Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E2Tex[] = dgMsgKanji97E2Tex; + +#define dgMsgKanji97E3Tex "__OTR__textures/kanji/gMsgKanji97E3Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E3Tex[] = dgMsgKanji97E3Tex; + +#define dgMsgKanji97E4Tex "__OTR__textures/kanji/gMsgKanji97E4Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E4Tex[] = dgMsgKanji97E4Tex; + +#define dgMsgKanji97E5Tex "__OTR__textures/kanji/gMsgKanji97E5Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E5Tex[] = dgMsgKanji97E5Tex; + +#define dgMsgKanji97E6Tex "__OTR__textures/kanji/gMsgKanji97E6Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E6Tex[] = dgMsgKanji97E6Tex; + +#define dgMsgKanji97E7Tex "__OTR__textures/kanji/gMsgKanji97E7Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E7Tex[] = dgMsgKanji97E7Tex; + +#define dgMsgKanji97E8Tex "__OTR__textures/kanji/gMsgKanji97E8Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E8Tex[] = dgMsgKanji97E8Tex; + +#define dgMsgKanji97E9Tex "__OTR__textures/kanji/gMsgKanji97E9Tex" +static const ALIGN_ASSET(2) char gMsgKanji97E9Tex[] = dgMsgKanji97E9Tex; + +#define dgMsgKanji97EATex "__OTR__textures/kanji/gMsgKanji97EATex" +static const ALIGN_ASSET(2) char gMsgKanji97EATex[] = dgMsgKanji97EATex; + +#define dgMsgKanji97EBTex "__OTR__textures/kanji/gMsgKanji97EBTex" +static const ALIGN_ASSET(2) char gMsgKanji97EBTex[] = dgMsgKanji97EBTex; + +#define dgMsgKanji97ECTex "__OTR__textures/kanji/gMsgKanji97ECTex" +static const ALIGN_ASSET(2) char gMsgKanji97ECTex[] = dgMsgKanji97ECTex; + +#define dgMsgKanji97EDTex "__OTR__textures/kanji/gMsgKanji97EDTex" +static const ALIGN_ASSET(2) char gMsgKanji97EDTex[] = dgMsgKanji97EDTex; + +#define dgMsgKanji97EETex "__OTR__textures/kanji/gMsgKanji97EETex" +static const ALIGN_ASSET(2) char gMsgKanji97EETex[] = dgMsgKanji97EETex; + +#define dgMsgKanji97EFTex "__OTR__textures/kanji/gMsgKanji97EFTex" +static const ALIGN_ASSET(2) char gMsgKanji97EFTex[] = dgMsgKanji97EFTex; + +#define dgMsgKanji97F0Tex "__OTR__textures/kanji/gMsgKanji97F0Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F0Tex[] = dgMsgKanji97F0Tex; + +#define dgMsgKanji97F1Tex "__OTR__textures/kanji/gMsgKanji97F1Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F1Tex[] = dgMsgKanji97F1Tex; + +#define dgMsgKanji97F2Tex "__OTR__textures/kanji/gMsgKanji97F2Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F2Tex[] = dgMsgKanji97F2Tex; + +#define dgMsgKanji97F3Tex "__OTR__textures/kanji/gMsgKanji97F3Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F3Tex[] = dgMsgKanji97F3Tex; + +#define dgMsgKanji97F4Tex "__OTR__textures/kanji/gMsgKanji97F4Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F4Tex[] = dgMsgKanji97F4Tex; + +#define dgMsgKanji97F5Tex "__OTR__textures/kanji/gMsgKanji97F5Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F5Tex[] = dgMsgKanji97F5Tex; + +#define dgMsgKanji97F6Tex "__OTR__textures/kanji/gMsgKanji97F6Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F6Tex[] = dgMsgKanji97F6Tex; + +#define dgMsgKanji97F7Tex "__OTR__textures/kanji/gMsgKanji97F7Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F7Tex[] = dgMsgKanji97F7Tex; + +#define dgMsgKanji97F8Tex "__OTR__textures/kanji/gMsgKanji97F8Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F8Tex[] = dgMsgKanji97F8Tex; + +#define dgMsgKanji97F9Tex "__OTR__textures/kanji/gMsgKanji97F9Tex" +static const ALIGN_ASSET(2) char gMsgKanji97F9Tex[] = dgMsgKanji97F9Tex; + +#define dgMsgKanji97FATex "__OTR__textures/kanji/gMsgKanji97FATex" +static const ALIGN_ASSET(2) char gMsgKanji97FATex[] = dgMsgKanji97FATex; + +#define dgMsgKanji97FBTex "__OTR__textures/kanji/gMsgKanji97FBTex" +static const ALIGN_ASSET(2) char gMsgKanji97FBTex[] = dgMsgKanji97FBTex; + +#define dgMsgKanji97FCTex "__OTR__textures/kanji/gMsgKanji97FCTex" +static const ALIGN_ASSET(2) char gMsgKanji97FCTex[] = dgMsgKanji97FCTex; + +#define dgMsgKanji9840Tex "__OTR__textures/kanji/gMsgKanji9840Tex" +static const ALIGN_ASSET(2) char gMsgKanji9840Tex[] = dgMsgKanji9840Tex; + +#define dgMsgKanji9841Tex "__OTR__textures/kanji/gMsgKanji9841Tex" +static const ALIGN_ASSET(2) char gMsgKanji9841Tex[] = dgMsgKanji9841Tex; + +#define dgMsgKanji9842Tex "__OTR__textures/kanji/gMsgKanji9842Tex" +static const ALIGN_ASSET(2) char gMsgKanji9842Tex[] = dgMsgKanji9842Tex; + +#define dgMsgKanji9843Tex "__OTR__textures/kanji/gMsgKanji9843Tex" +static const ALIGN_ASSET(2) char gMsgKanji9843Tex[] = dgMsgKanji9843Tex; + +#define dgMsgKanji9844Tex "__OTR__textures/kanji/gMsgKanji9844Tex" +static const ALIGN_ASSET(2) char gMsgKanji9844Tex[] = dgMsgKanji9844Tex; + +#define dgMsgKanji9845Tex "__OTR__textures/kanji/gMsgKanji9845Tex" +static const ALIGN_ASSET(2) char gMsgKanji9845Tex[] = dgMsgKanji9845Tex; + +#define dgMsgKanji9846Tex "__OTR__textures/kanji/gMsgKanji9846Tex" +static const ALIGN_ASSET(2) char gMsgKanji9846Tex[] = dgMsgKanji9846Tex; + +#define dgMsgKanji9847Tex "__OTR__textures/kanji/gMsgKanji9847Tex" +static const ALIGN_ASSET(2) char gMsgKanji9847Tex[] = dgMsgKanji9847Tex; + +#define dgMsgKanji9848Tex "__OTR__textures/kanji/gMsgKanji9848Tex" +static const ALIGN_ASSET(2) char gMsgKanji9848Tex[] = dgMsgKanji9848Tex; + +#define dgMsgKanji9849Tex "__OTR__textures/kanji/gMsgKanji9849Tex" +static const ALIGN_ASSET(2) char gMsgKanji9849Tex[] = dgMsgKanji9849Tex; + +#define dgMsgKanji984ATex "__OTR__textures/kanji/gMsgKanji984ATex" +static const ALIGN_ASSET(2) char gMsgKanji984ATex[] = dgMsgKanji984ATex; + +#define dgMsgKanji984BTex "__OTR__textures/kanji/gMsgKanji984BTex" +static const ALIGN_ASSET(2) char gMsgKanji984BTex[] = dgMsgKanji984BTex; + +#define dgMsgKanji984CTex "__OTR__textures/kanji/gMsgKanji984CTex" +static const ALIGN_ASSET(2) char gMsgKanji984CTex[] = dgMsgKanji984CTex; + +#define dgMsgKanji984DTex "__OTR__textures/kanji/gMsgKanji984DTex" +static const ALIGN_ASSET(2) char gMsgKanji984DTex[] = dgMsgKanji984DTex; + +#define dgMsgKanji984ETex "__OTR__textures/kanji/gMsgKanji984ETex" +static const ALIGN_ASSET(2) char gMsgKanji984ETex[] = dgMsgKanji984ETex; + +#define dgMsgKanji984FTex "__OTR__textures/kanji/gMsgKanji984FTex" +static const ALIGN_ASSET(2) char gMsgKanji984FTex[] = dgMsgKanji984FTex; + +#define dgMsgKanji9850Tex "__OTR__textures/kanji/gMsgKanji9850Tex" +static const ALIGN_ASSET(2) char gMsgKanji9850Tex[] = dgMsgKanji9850Tex; + +#define dgMsgKanji9851Tex "__OTR__textures/kanji/gMsgKanji9851Tex" +static const ALIGN_ASSET(2) char gMsgKanji9851Tex[] = dgMsgKanji9851Tex; + +#define dgMsgKanji9852Tex "__OTR__textures/kanji/gMsgKanji9852Tex" +static const ALIGN_ASSET(2) char gMsgKanji9852Tex[] = dgMsgKanji9852Tex; + +#define dgMsgKanji9853Tex "__OTR__textures/kanji/gMsgKanji9853Tex" +static const ALIGN_ASSET(2) char gMsgKanji9853Tex[] = dgMsgKanji9853Tex; + +#define dgMsgKanji9854Tex "__OTR__textures/kanji/gMsgKanji9854Tex" +static const ALIGN_ASSET(2) char gMsgKanji9854Tex[] = dgMsgKanji9854Tex; + +#define dgMsgKanji9855Tex "__OTR__textures/kanji/gMsgKanji9855Tex" +static const ALIGN_ASSET(2) char gMsgKanji9855Tex[] = dgMsgKanji9855Tex; + +#define dgMsgKanji9856Tex "__OTR__textures/kanji/gMsgKanji9856Tex" +static const ALIGN_ASSET(2) char gMsgKanji9856Tex[] = dgMsgKanji9856Tex; + +#define dgMsgKanji9857Tex "__OTR__textures/kanji/gMsgKanji9857Tex" +static const ALIGN_ASSET(2) char gMsgKanji9857Tex[] = dgMsgKanji9857Tex; + +#define dgMsgKanji9858Tex "__OTR__textures/kanji/gMsgKanji9858Tex" +static const ALIGN_ASSET(2) char gMsgKanji9858Tex[] = dgMsgKanji9858Tex; + +#define dgMsgKanji9859Tex "__OTR__textures/kanji/gMsgKanji9859Tex" +static const ALIGN_ASSET(2) char gMsgKanji9859Tex[] = dgMsgKanji9859Tex; + +#define dgMsgKanji985ATex "__OTR__textures/kanji/gMsgKanji985ATex" +static const ALIGN_ASSET(2) char gMsgKanji985ATex[] = dgMsgKanji985ATex; + +#define dgMsgKanji985BTex "__OTR__textures/kanji/gMsgKanji985BTex" +static const ALIGN_ASSET(2) char gMsgKanji985BTex[] = dgMsgKanji985BTex; + +#define dgMsgKanji985CTex "__OTR__textures/kanji/gMsgKanji985CTex" +static const ALIGN_ASSET(2) char gMsgKanji985CTex[] = dgMsgKanji985CTex; + +#define dgMsgKanji985DTex "__OTR__textures/kanji/gMsgKanji985DTex" +static const ALIGN_ASSET(2) char gMsgKanji985DTex[] = dgMsgKanji985DTex; + +#define dgMsgKanji985ETex "__OTR__textures/kanji/gMsgKanji985ETex" +static const ALIGN_ASSET(2) char gMsgKanji985ETex[] = dgMsgKanji985ETex; + +#define dgMsgKanji985FTex "__OTR__textures/kanji/gMsgKanji985FTex" +static const ALIGN_ASSET(2) char gMsgKanji985FTex[] = dgMsgKanji985FTex; + +#define dgMsgKanji9860Tex "__OTR__textures/kanji/gMsgKanji9860Tex" +static const ALIGN_ASSET(2) char gMsgKanji9860Tex[] = dgMsgKanji9860Tex; + +#define dgMsgKanji9861Tex "__OTR__textures/kanji/gMsgKanji9861Tex" +static const ALIGN_ASSET(2) char gMsgKanji9861Tex[] = dgMsgKanji9861Tex; + +#define dgMsgKanji9862Tex "__OTR__textures/kanji/gMsgKanji9862Tex" +static const ALIGN_ASSET(2) char gMsgKanji9862Tex[] = dgMsgKanji9862Tex; + +#define dgMsgKanji9863Tex "__OTR__textures/kanji/gMsgKanji9863Tex" +static const ALIGN_ASSET(2) char gMsgKanji9863Tex[] = dgMsgKanji9863Tex; + +#define dgMsgKanji9864Tex "__OTR__textures/kanji/gMsgKanji9864Tex" +static const ALIGN_ASSET(2) char gMsgKanji9864Tex[] = dgMsgKanji9864Tex; + +#define dgMsgKanji9865Tex "__OTR__textures/kanji/gMsgKanji9865Tex" +static const ALIGN_ASSET(2) char gMsgKanji9865Tex[] = dgMsgKanji9865Tex; + +#define dgMsgKanji9866Tex "__OTR__textures/kanji/gMsgKanji9866Tex" +static const ALIGN_ASSET(2) char gMsgKanji9866Tex[] = dgMsgKanji9866Tex; + +#define dgMsgKanji9867Tex "__OTR__textures/kanji/gMsgKanji9867Tex" +static const ALIGN_ASSET(2) char gMsgKanji9867Tex[] = dgMsgKanji9867Tex; + +#define dgMsgKanji9868Tex "__OTR__textures/kanji/gMsgKanji9868Tex" +static const ALIGN_ASSET(2) char gMsgKanji9868Tex[] = dgMsgKanji9868Tex; + +#define dgMsgKanji9869Tex "__OTR__textures/kanji/gMsgKanji9869Tex" +static const ALIGN_ASSET(2) char gMsgKanji9869Tex[] = dgMsgKanji9869Tex; + +#define dgMsgKanji986ATex "__OTR__textures/kanji/gMsgKanji986ATex" +static const ALIGN_ASSET(2) char gMsgKanji986ATex[] = dgMsgKanji986ATex; + +#define dgMsgKanji986BTex "__OTR__textures/kanji/gMsgKanji986BTex" +static const ALIGN_ASSET(2) char gMsgKanji986BTex[] = dgMsgKanji986BTex; + +#define dgMsgKanji986CTex "__OTR__textures/kanji/gMsgKanji986CTex" +static const ALIGN_ASSET(2) char gMsgKanji986CTex[] = dgMsgKanji986CTex; + +#define dgMsgKanji986DTex "__OTR__textures/kanji/gMsgKanji986DTex" +static const ALIGN_ASSET(2) char gMsgKanji986DTex[] = dgMsgKanji986DTex; + +#define dgMsgKanji986ETex "__OTR__textures/kanji/gMsgKanji986ETex" +static const ALIGN_ASSET(2) char gMsgKanji986ETex[] = dgMsgKanji986ETex; + +#define dgMsgKanji986FTex "__OTR__textures/kanji/gMsgKanji986FTex" +static const ALIGN_ASSET(2) char gMsgKanji986FTex[] = dgMsgKanji986FTex; + +#define dgMsgKanji9870Tex "__OTR__textures/kanji/gMsgKanji9870Tex" +static const ALIGN_ASSET(2) char gMsgKanji9870Tex[] = dgMsgKanji9870Tex; + +#define dgMsgKanji9871Tex "__OTR__textures/kanji/gMsgKanji9871Tex" +static const ALIGN_ASSET(2) char gMsgKanji9871Tex[] = dgMsgKanji9871Tex; + +#define dgMsgKanji9872Tex "__OTR__textures/kanji/gMsgKanji9872Tex" +static const ALIGN_ASSET(2) char gMsgKanji9872Tex[] = dgMsgKanji9872Tex; + +#define dgMsgKanji9873EmptyTex "__OTR__textures/kanji/gMsgKanji9873EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9873EmptyTex[] = dgMsgKanji9873EmptyTex; + +#define dgMsgKanji9874EmptyTex "__OTR__textures/kanji/gMsgKanji9874EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9874EmptyTex[] = dgMsgKanji9874EmptyTex; + +#define dgMsgKanji9875EmptyTex "__OTR__textures/kanji/gMsgKanji9875EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9875EmptyTex[] = dgMsgKanji9875EmptyTex; + +#define dgMsgKanji9876EmptyTex "__OTR__textures/kanji/gMsgKanji9876EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9876EmptyTex[] = dgMsgKanji9876EmptyTex; + +#define dgMsgKanji9877EmptyTex "__OTR__textures/kanji/gMsgKanji9877EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9877EmptyTex[] = dgMsgKanji9877EmptyTex; + +#define dgMsgKanji9878EmptyTex "__OTR__textures/kanji/gMsgKanji9878EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9878EmptyTex[] = dgMsgKanji9878EmptyTex; + +#define dgMsgKanji9879EmptyTex "__OTR__textures/kanji/gMsgKanji9879EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9879EmptyTex[] = dgMsgKanji9879EmptyTex; + +#define dgMsgKanji987AEmptyTex "__OTR__textures/kanji/gMsgKanji987AEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji987AEmptyTex[] = dgMsgKanji987AEmptyTex; + +#define dgMsgKanji987BEmptyTex "__OTR__textures/kanji/gMsgKanji987BEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji987BEmptyTex[] = dgMsgKanji987BEmptyTex; + +#define dgMsgKanji987CEmptyTex "__OTR__textures/kanji/gMsgKanji987CEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji987CEmptyTex[] = dgMsgKanji987CEmptyTex; + +#define dgMsgKanji987DEmptyTex "__OTR__textures/kanji/gMsgKanji987DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji987DEmptyTex[] = dgMsgKanji987DEmptyTex; + +#define dgMsgKanji987EEmptyTex "__OTR__textures/kanji/gMsgKanji987EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji987EEmptyTex[] = dgMsgKanji987EEmptyTex; + +#define dgMsgKanji9880EmptyTex "__OTR__textures/kanji/gMsgKanji9880EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9880EmptyTex[] = dgMsgKanji9880EmptyTex; + +#define dgMsgKanji9881EmptyTex "__OTR__textures/kanji/gMsgKanji9881EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9881EmptyTex[] = dgMsgKanji9881EmptyTex; + +#define dgMsgKanji9882EmptyTex "__OTR__textures/kanji/gMsgKanji9882EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9882EmptyTex[] = dgMsgKanji9882EmptyTex; + +#define dgMsgKanji9883EmptyTex "__OTR__textures/kanji/gMsgKanji9883EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9883EmptyTex[] = dgMsgKanji9883EmptyTex; + +#define dgMsgKanji9884EmptyTex "__OTR__textures/kanji/gMsgKanji9884EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9884EmptyTex[] = dgMsgKanji9884EmptyTex; + +#define dgMsgKanji9885EmptyTex "__OTR__textures/kanji/gMsgKanji9885EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9885EmptyTex[] = dgMsgKanji9885EmptyTex; + +#define dgMsgKanji9886EmptyTex "__OTR__textures/kanji/gMsgKanji9886EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9886EmptyTex[] = dgMsgKanji9886EmptyTex; + +#define dgMsgKanji9887EmptyTex "__OTR__textures/kanji/gMsgKanji9887EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9887EmptyTex[] = dgMsgKanji9887EmptyTex; + +#define dgMsgKanji9888EmptyTex "__OTR__textures/kanji/gMsgKanji9888EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9888EmptyTex[] = dgMsgKanji9888EmptyTex; + +#define dgMsgKanji9889EmptyTex "__OTR__textures/kanji/gMsgKanji9889EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9889EmptyTex[] = dgMsgKanji9889EmptyTex; + +#define dgMsgKanji988AEmptyTex "__OTR__textures/kanji/gMsgKanji988AEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji988AEmptyTex[] = dgMsgKanji988AEmptyTex; + +#define dgMsgKanji988BEmptyTex "__OTR__textures/kanji/gMsgKanji988BEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji988BEmptyTex[] = dgMsgKanji988BEmptyTex; + +#define dgMsgKanji988CEmptyTex "__OTR__textures/kanji/gMsgKanji988CEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji988CEmptyTex[] = dgMsgKanji988CEmptyTex; + +#define dgMsgKanji988DEmptyTex "__OTR__textures/kanji/gMsgKanji988DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji988DEmptyTex[] = dgMsgKanji988DEmptyTex; + +#define dgMsgKanji988EEmptyTex "__OTR__textures/kanji/gMsgKanji988EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji988EEmptyTex[] = dgMsgKanji988EEmptyTex; + +#define dgMsgKanji988FEmptyTex "__OTR__textures/kanji/gMsgKanji988FEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji988FEmptyTex[] = dgMsgKanji988FEmptyTex; + +#define dgMsgKanji9890EmptyTex "__OTR__textures/kanji/gMsgKanji9890EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9890EmptyTex[] = dgMsgKanji9890EmptyTex; + +#define dgMsgKanji9891EmptyTex "__OTR__textures/kanji/gMsgKanji9891EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9891EmptyTex[] = dgMsgKanji9891EmptyTex; + +#define dgMsgKanji9892EmptyTex "__OTR__textures/kanji/gMsgKanji9892EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9892EmptyTex[] = dgMsgKanji9892EmptyTex; + +#define dgMsgKanji9893EmptyTex "__OTR__textures/kanji/gMsgKanji9893EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9893EmptyTex[] = dgMsgKanji9893EmptyTex; + +#define dgMsgKanji9894EmptyTex "__OTR__textures/kanji/gMsgKanji9894EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9894EmptyTex[] = dgMsgKanji9894EmptyTex; + +#define dgMsgKanji9895EmptyTex "__OTR__textures/kanji/gMsgKanji9895EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9895EmptyTex[] = dgMsgKanji9895EmptyTex; + +#define dgMsgKanji9896EmptyTex "__OTR__textures/kanji/gMsgKanji9896EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9896EmptyTex[] = dgMsgKanji9896EmptyTex; + +#define dgMsgKanji9897EmptyTex "__OTR__textures/kanji/gMsgKanji9897EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9897EmptyTex[] = dgMsgKanji9897EmptyTex; + +#define dgMsgKanji9898EmptyTex "__OTR__textures/kanji/gMsgKanji9898EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9898EmptyTex[] = dgMsgKanji9898EmptyTex; + +#define dgMsgKanji9899EmptyTex "__OTR__textures/kanji/gMsgKanji9899EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji9899EmptyTex[] = dgMsgKanji9899EmptyTex; + +#define dgMsgKanji989AEmptyTex "__OTR__textures/kanji/gMsgKanji989AEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji989AEmptyTex[] = dgMsgKanji989AEmptyTex; + +#define dgMsgKanji989BEmptyTex "__OTR__textures/kanji/gMsgKanji989BEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji989BEmptyTex[] = dgMsgKanji989BEmptyTex; + +#define dgMsgKanji989CEmptyTex "__OTR__textures/kanji/gMsgKanji989CEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji989CEmptyTex[] = dgMsgKanji989CEmptyTex; + +#define dgMsgKanji989DEmptyTex "__OTR__textures/kanji/gMsgKanji989DEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji989DEmptyTex[] = dgMsgKanji989DEmptyTex; + +#define dgMsgKanji989EEmptyTex "__OTR__textures/kanji/gMsgKanji989EEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji989EEmptyTex[] = dgMsgKanji989EEmptyTex; + +#define dgMsgKanji989FEmptyTex "__OTR__textures/kanji/gMsgKanji989FEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji989FEmptyTex[] = dgMsgKanji989FEmptyTex; + +#define dgMsgKanji98A0EmptyTex "__OTR__textures/kanji/gMsgKanji98A0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A0EmptyTex[] = dgMsgKanji98A0EmptyTex; + +#define dgMsgKanji98A1EmptyTex "__OTR__textures/kanji/gMsgKanji98A1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A1EmptyTex[] = dgMsgKanji98A1EmptyTex; + +#define dgMsgKanji98A2EmptyTex "__OTR__textures/kanji/gMsgKanji98A2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A2EmptyTex[] = dgMsgKanji98A2EmptyTex; + +#define dgMsgKanji98A3EmptyTex "__OTR__textures/kanji/gMsgKanji98A3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A3EmptyTex[] = dgMsgKanji98A3EmptyTex; + +#define dgMsgKanji98A4EmptyTex "__OTR__textures/kanji/gMsgKanji98A4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A4EmptyTex[] = dgMsgKanji98A4EmptyTex; + +#define dgMsgKanji98A5EmptyTex "__OTR__textures/kanji/gMsgKanji98A5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A5EmptyTex[] = dgMsgKanji98A5EmptyTex; + +#define dgMsgKanji98A6EmptyTex "__OTR__textures/kanji/gMsgKanji98A6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A6EmptyTex[] = dgMsgKanji98A6EmptyTex; + +#define dgMsgKanji98A7EmptyTex "__OTR__textures/kanji/gMsgKanji98A7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A7EmptyTex[] = dgMsgKanji98A7EmptyTex; + +#define dgMsgKanji98A8EmptyTex "__OTR__textures/kanji/gMsgKanji98A8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A8EmptyTex[] = dgMsgKanji98A8EmptyTex; + +#define dgMsgKanji98A9EmptyTex "__OTR__textures/kanji/gMsgKanji98A9EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98A9EmptyTex[] = dgMsgKanji98A9EmptyTex; + +#define dgMsgKanji98AAEmptyTex "__OTR__textures/kanji/gMsgKanji98AAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98AAEmptyTex[] = dgMsgKanji98AAEmptyTex; + +#define dgMsgKanji98ABEmptyTex "__OTR__textures/kanji/gMsgKanji98ABEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98ABEmptyTex[] = dgMsgKanji98ABEmptyTex; + +#define dgMsgKanji98ACEmptyTex "__OTR__textures/kanji/gMsgKanji98ACEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98ACEmptyTex[] = dgMsgKanji98ACEmptyTex; + +#define dgMsgKanji98ADEmptyTex "__OTR__textures/kanji/gMsgKanji98ADEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98ADEmptyTex[] = dgMsgKanji98ADEmptyTex; + +#define dgMsgKanji98AEEmptyTex "__OTR__textures/kanji/gMsgKanji98AEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98AEEmptyTex[] = dgMsgKanji98AEEmptyTex; + +#define dgMsgKanji98AFEmptyTex "__OTR__textures/kanji/gMsgKanji98AFEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98AFEmptyTex[] = dgMsgKanji98AFEmptyTex; + +#define dgMsgKanji98B0EmptyTex "__OTR__textures/kanji/gMsgKanji98B0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B0EmptyTex[] = dgMsgKanji98B0EmptyTex; + +#define dgMsgKanji98B1EmptyTex "__OTR__textures/kanji/gMsgKanji98B1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B1EmptyTex[] = dgMsgKanji98B1EmptyTex; + +#define dgMsgKanji98B2EmptyTex "__OTR__textures/kanji/gMsgKanji98B2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B2EmptyTex[] = dgMsgKanji98B2EmptyTex; + +#define dgMsgKanji98B3EmptyTex "__OTR__textures/kanji/gMsgKanji98B3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B3EmptyTex[] = dgMsgKanji98B3EmptyTex; + +#define dgMsgKanji98B4EmptyTex "__OTR__textures/kanji/gMsgKanji98B4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B4EmptyTex[] = dgMsgKanji98B4EmptyTex; + +#define dgMsgKanji98B5EmptyTex "__OTR__textures/kanji/gMsgKanji98B5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B5EmptyTex[] = dgMsgKanji98B5EmptyTex; + +#define dgMsgKanji98B6EmptyTex "__OTR__textures/kanji/gMsgKanji98B6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B6EmptyTex[] = dgMsgKanji98B6EmptyTex; + +#define dgMsgKanji98B7EmptyTex "__OTR__textures/kanji/gMsgKanji98B7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B7EmptyTex[] = dgMsgKanji98B7EmptyTex; + +#define dgMsgKanji98B8EmptyTex "__OTR__textures/kanji/gMsgKanji98B8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B8EmptyTex[] = dgMsgKanji98B8EmptyTex; + +#define dgMsgKanji98B9EmptyTex "__OTR__textures/kanji/gMsgKanji98B9EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98B9EmptyTex[] = dgMsgKanji98B9EmptyTex; + +#define dgMsgKanji98BAEmptyTex "__OTR__textures/kanji/gMsgKanji98BAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98BAEmptyTex[] = dgMsgKanji98BAEmptyTex; + +#define dgMsgKanji98BBEmptyTex "__OTR__textures/kanji/gMsgKanji98BBEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98BBEmptyTex[] = dgMsgKanji98BBEmptyTex; + +#define dgMsgKanji98BCEmptyTex "__OTR__textures/kanji/gMsgKanji98BCEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98BCEmptyTex[] = dgMsgKanji98BCEmptyTex; + +#define dgMsgKanji98BDEmptyTex "__OTR__textures/kanji/gMsgKanji98BDEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98BDEmptyTex[] = dgMsgKanji98BDEmptyTex; + +#define dgMsgKanji98BEEmptyTex "__OTR__textures/kanji/gMsgKanji98BEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98BEEmptyTex[] = dgMsgKanji98BEEmptyTex; + +#define dgMsgKanji98BFEmptyTex "__OTR__textures/kanji/gMsgKanji98BFEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98BFEmptyTex[] = dgMsgKanji98BFEmptyTex; + +#define dgMsgKanji98C0EmptyTex "__OTR__textures/kanji/gMsgKanji98C0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C0EmptyTex[] = dgMsgKanji98C0EmptyTex; + +#define dgMsgKanji98C1EmptyTex "__OTR__textures/kanji/gMsgKanji98C1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C1EmptyTex[] = dgMsgKanji98C1EmptyTex; + +#define dgMsgKanji98C2EmptyTex "__OTR__textures/kanji/gMsgKanji98C2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C2EmptyTex[] = dgMsgKanji98C2EmptyTex; + +#define dgMsgKanji98C3EmptyTex "__OTR__textures/kanji/gMsgKanji98C3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C3EmptyTex[] = dgMsgKanji98C3EmptyTex; + +#define dgMsgKanji98C4EmptyTex "__OTR__textures/kanji/gMsgKanji98C4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C4EmptyTex[] = dgMsgKanji98C4EmptyTex; + +#define dgMsgKanji98C5EmptyTex "__OTR__textures/kanji/gMsgKanji98C5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C5EmptyTex[] = dgMsgKanji98C5EmptyTex; + +#define dgMsgKanji98C6EmptyTex "__OTR__textures/kanji/gMsgKanji98C6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C6EmptyTex[] = dgMsgKanji98C6EmptyTex; + +#define dgMsgKanji98C7EmptyTex "__OTR__textures/kanji/gMsgKanji98C7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C7EmptyTex[] = dgMsgKanji98C7EmptyTex; + +#define dgMsgKanji98C8EmptyTex "__OTR__textures/kanji/gMsgKanji98C8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C8EmptyTex[] = dgMsgKanji98C8EmptyTex; + +#define dgMsgKanji98C9EmptyTex "__OTR__textures/kanji/gMsgKanji98C9EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98C9EmptyTex[] = dgMsgKanji98C9EmptyTex; + +#define dgMsgKanji98CAEmptyTex "__OTR__textures/kanji/gMsgKanji98CAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98CAEmptyTex[] = dgMsgKanji98CAEmptyTex; + +#define dgMsgKanji98CBEmptyTex "__OTR__textures/kanji/gMsgKanji98CBEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98CBEmptyTex[] = dgMsgKanji98CBEmptyTex; + +#define dgMsgKanji98CCEmptyTex "__OTR__textures/kanji/gMsgKanji98CCEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98CCEmptyTex[] = dgMsgKanji98CCEmptyTex; + +#define dgMsgKanji98CDEmptyTex "__OTR__textures/kanji/gMsgKanji98CDEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98CDEmptyTex[] = dgMsgKanji98CDEmptyTex; + +#define dgMsgKanji98CEEmptyTex "__OTR__textures/kanji/gMsgKanji98CEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98CEEmptyTex[] = dgMsgKanji98CEEmptyTex; + +#define dgMsgKanji98CFEmptyTex "__OTR__textures/kanji/gMsgKanji98CFEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98CFEmptyTex[] = dgMsgKanji98CFEmptyTex; + +#define dgMsgKanji98D0EmptyTex "__OTR__textures/kanji/gMsgKanji98D0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D0EmptyTex[] = dgMsgKanji98D0EmptyTex; + +#define dgMsgKanji98D1EmptyTex "__OTR__textures/kanji/gMsgKanji98D1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D1EmptyTex[] = dgMsgKanji98D1EmptyTex; + +#define dgMsgKanji98D2EmptyTex "__OTR__textures/kanji/gMsgKanji98D2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D2EmptyTex[] = dgMsgKanji98D2EmptyTex; + +#define dgMsgKanji98D3EmptyTex "__OTR__textures/kanji/gMsgKanji98D3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D3EmptyTex[] = dgMsgKanji98D3EmptyTex; + +#define dgMsgKanji98D4EmptyTex "__OTR__textures/kanji/gMsgKanji98D4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D4EmptyTex[] = dgMsgKanji98D4EmptyTex; + +#define dgMsgKanji98D5EmptyTex "__OTR__textures/kanji/gMsgKanji98D5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D5EmptyTex[] = dgMsgKanji98D5EmptyTex; + +#define dgMsgKanji98D6EmptyTex "__OTR__textures/kanji/gMsgKanji98D6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D6EmptyTex[] = dgMsgKanji98D6EmptyTex; + +#define dgMsgKanji98D7EmptyTex "__OTR__textures/kanji/gMsgKanji98D7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D7EmptyTex[] = dgMsgKanji98D7EmptyTex; + +#define dgMsgKanji98D8EmptyTex "__OTR__textures/kanji/gMsgKanji98D8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D8EmptyTex[] = dgMsgKanji98D8EmptyTex; + +#define dgMsgKanji98D9EmptyTex "__OTR__textures/kanji/gMsgKanji98D9EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98D9EmptyTex[] = dgMsgKanji98D9EmptyTex; + +#define dgMsgKanji98DAEmptyTex "__OTR__textures/kanji/gMsgKanji98DAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98DAEmptyTex[] = dgMsgKanji98DAEmptyTex; + +#define dgMsgKanji98DBEmptyTex "__OTR__textures/kanji/gMsgKanji98DBEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98DBEmptyTex[] = dgMsgKanji98DBEmptyTex; + +#define dgMsgKanji98DCEmptyTex "__OTR__textures/kanji/gMsgKanji98DCEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98DCEmptyTex[] = dgMsgKanji98DCEmptyTex; + +#define dgMsgKanji98DDEmptyTex "__OTR__textures/kanji/gMsgKanji98DDEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98DDEmptyTex[] = dgMsgKanji98DDEmptyTex; + +#define dgMsgKanji98DEEmptyTex "__OTR__textures/kanji/gMsgKanji98DEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98DEEmptyTex[] = dgMsgKanji98DEEmptyTex; + +#define dgMsgKanji98DFEmptyTex "__OTR__textures/kanji/gMsgKanji98DFEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98DFEmptyTex[] = dgMsgKanji98DFEmptyTex; + +#define dgMsgKanji98E0EmptyTex "__OTR__textures/kanji/gMsgKanji98E0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E0EmptyTex[] = dgMsgKanji98E0EmptyTex; + +#define dgMsgKanji98E1EmptyTex "__OTR__textures/kanji/gMsgKanji98E1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E1EmptyTex[] = dgMsgKanji98E1EmptyTex; + +#define dgMsgKanji98E2EmptyTex "__OTR__textures/kanji/gMsgKanji98E2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E2EmptyTex[] = dgMsgKanji98E2EmptyTex; + +#define dgMsgKanji98E3EmptyTex "__OTR__textures/kanji/gMsgKanji98E3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E3EmptyTex[] = dgMsgKanji98E3EmptyTex; + +#define dgMsgKanji98E4EmptyTex "__OTR__textures/kanji/gMsgKanji98E4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E4EmptyTex[] = dgMsgKanji98E4EmptyTex; + +#define dgMsgKanji98E5EmptyTex "__OTR__textures/kanji/gMsgKanji98E5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E5EmptyTex[] = dgMsgKanji98E5EmptyTex; + +#define dgMsgKanji98E6EmptyTex "__OTR__textures/kanji/gMsgKanji98E6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E6EmptyTex[] = dgMsgKanji98E6EmptyTex; + +#define dgMsgKanji98E7EmptyTex "__OTR__textures/kanji/gMsgKanji98E7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E7EmptyTex[] = dgMsgKanji98E7EmptyTex; + +#define dgMsgKanji98E8EmptyTex "__OTR__textures/kanji/gMsgKanji98E8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E8EmptyTex[] = dgMsgKanji98E8EmptyTex; + +#define dgMsgKanji98E9EmptyTex "__OTR__textures/kanji/gMsgKanji98E9EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98E9EmptyTex[] = dgMsgKanji98E9EmptyTex; + +#define dgMsgKanji98EAEmptyTex "__OTR__textures/kanji/gMsgKanji98EAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98EAEmptyTex[] = dgMsgKanji98EAEmptyTex; + +#define dgMsgKanji98EBEmptyTex "__OTR__textures/kanji/gMsgKanji98EBEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98EBEmptyTex[] = dgMsgKanji98EBEmptyTex; + +#define dgMsgKanji98ECEmptyTex "__OTR__textures/kanji/gMsgKanji98ECEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98ECEmptyTex[] = dgMsgKanji98ECEmptyTex; + +#define dgMsgKanji98EDEmptyTex "__OTR__textures/kanji/gMsgKanji98EDEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98EDEmptyTex[] = dgMsgKanji98EDEmptyTex; + +#define dgMsgKanji98EEEmptyTex "__OTR__textures/kanji/gMsgKanji98EEEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98EEEmptyTex[] = dgMsgKanji98EEEmptyTex; + +#define dgMsgKanji98EFEmptyTex "__OTR__textures/kanji/gMsgKanji98EFEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98EFEmptyTex[] = dgMsgKanji98EFEmptyTex; + +#define dgMsgKanji98F0EmptyTex "__OTR__textures/kanji/gMsgKanji98F0EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F0EmptyTex[] = dgMsgKanji98F0EmptyTex; + +#define dgMsgKanji98F1EmptyTex "__OTR__textures/kanji/gMsgKanji98F1EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F1EmptyTex[] = dgMsgKanji98F1EmptyTex; + +#define dgMsgKanji98F2EmptyTex "__OTR__textures/kanji/gMsgKanji98F2EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F2EmptyTex[] = dgMsgKanji98F2EmptyTex; + +#define dgMsgKanji98F3EmptyTex "__OTR__textures/kanji/gMsgKanji98F3EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F3EmptyTex[] = dgMsgKanji98F3EmptyTex; + +#define dgMsgKanji98F4EmptyTex "__OTR__textures/kanji/gMsgKanji98F4EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F4EmptyTex[] = dgMsgKanji98F4EmptyTex; + +#define dgMsgKanji98F5EmptyTex "__OTR__textures/kanji/gMsgKanji98F5EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F5EmptyTex[] = dgMsgKanji98F5EmptyTex; + +#define dgMsgKanji98F6EmptyTex "__OTR__textures/kanji/gMsgKanji98F6EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F6EmptyTex[] = dgMsgKanji98F6EmptyTex; + +#define dgMsgKanji98F7EmptyTex "__OTR__textures/kanji/gMsgKanji98F7EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F7EmptyTex[] = dgMsgKanji98F7EmptyTex; + +#define dgMsgKanji98F8EmptyTex "__OTR__textures/kanji/gMsgKanji98F8EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F8EmptyTex[] = dgMsgKanji98F8EmptyTex; + +#define dgMsgKanji98F9EmptyTex "__OTR__textures/kanji/gMsgKanji98F9EmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98F9EmptyTex[] = dgMsgKanji98F9EmptyTex; + +#define dgMsgKanji98FAEmptyTex "__OTR__textures/kanji/gMsgKanji98FAEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98FAEmptyTex[] = dgMsgKanji98FAEmptyTex; + +#define dgMsgKanji98FBEmptyTex "__OTR__textures/kanji/gMsgKanji98FBEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98FBEmptyTex[] = dgMsgKanji98FBEmptyTex; + +#define dgMsgKanji98FCEmptyTex "__OTR__textures/kanji/gMsgKanji98FCEmptyTex" +static const ALIGN_ASSET(2) char gMsgKanji98FCEmptyTex[] = dgMsgKanji98FCEmptyTex; +#endif // INTERFACE_KANJI_H \ No newline at end of file diff --git a/soh/assets/textures/map_name_static/map_name_static.h b/soh/assets/textures/map_name_static/map_name_static.h index dcec5afcb..b165356db 100644 --- a/soh/assets/textures/map_name_static/map_name_static.h +++ b/soh/assets/textures/map_name_static/map_name_static.h @@ -309,4 +309,107 @@ static const ALIGN_ASSET(2) char gQuestionMarkPositionNameFRATex[] = dgQuestionM #define dgGanonsCastlePositionNameFRATex "__OTR__textures/map_name_static/gGanonsCastlePositionNameFRATex" static const ALIGN_ASSET(2) char gGanonsCastlePositionNameFRATex[] = dgGanonsCastlePositionNameFRATex; +#define dgHauntedWastelandPointNameJPNTex "__OTR__textures/map_name_static/gHauntedWastelandPointNameJPNTex" +static const ALIGN_ASSET(2) char gHauntedWastelandPointNameJPNTex[] = dgHauntedWastelandPointNameJPNTex; + +#define dgGerudosFortressPointNameJPNTex "__OTR__textures/map_name_static/gGerudosFortressPointNameJPNTex" +static const ALIGN_ASSET(2) char gGerudosFortressPointNameJPNTex[] = dgGerudosFortressPointNameJPNTex; + +#define dgGerudoValleyPointNameJPNTex "__OTR__textures/map_name_static/gGerudoValleyPointNameJPNTex" +static const ALIGN_ASSET(2) char gGerudoValleyPointNameJPNTex[] = dgGerudoValleyPointNameJPNTex; + +#define dgHyliaLakesidePointNameJPNTex "__OTR__textures/map_name_static/gHyliaLakesidePointNameJPNTex" +static const ALIGN_ASSET(2) char gHyliaLakesidePointNameJPNTex[] = dgHyliaLakesidePointNameJPNTex; + +#define dgLonLonRanchPointNameJPNTex "__OTR__textures/map_name_static/gLonLonRanchPointNameJPNTex" +static const ALIGN_ASSET(2) char gLonLonRanchPointNameJPNTex[] = dgLonLonRanchPointNameJPNTex; + +#define dgMarketPointNameJPNTex "__OTR__textures/map_name_static/gMarketPointNameJPNTex" +static const ALIGN_ASSET(2) char gMarketPointNameJPNTex[] = dgMarketPointNameJPNTex; + +#define dgHyruleFieldPointNameJPNTex "__OTR__textures/map_name_static/gHyruleFieldPointNameJPNTex" +static const ALIGN_ASSET(2) char gHyruleFieldPointNameJPNTex[] = dgHyruleFieldPointNameJPNTex; + +#define dgDeathMountainPointNameJPNTex "__OTR__textures/map_name_static/gDeathMountainPointNameJPNTex" +static const ALIGN_ASSET(2) char gDeathMountainPointNameJPNTex[] = dgDeathMountainPointNameJPNTex; + +#define dgKakarikoVillagePointNameJPNTex "__OTR__textures/map_name_static/gKakarikoVillagePointNameJPNTex" +static const ALIGN_ASSET(2) char gKakarikoVillagePointNameJPNTex[] = dgKakarikoVillagePointNameJPNTex; + +#define dgLostWoodsPointNameJPNTex "__OTR__textures/map_name_static/gLostWoodsPointNameJPNTex" +static const ALIGN_ASSET(2) char gLostWoodsPointNameJPNTex[] = dgLostWoodsPointNameJPNTex; + +#define dgKokiriForestPointNameJPNTex "__OTR__textures/map_name_static/gKokiriForestPointNameJPNTex" +static const ALIGN_ASSET(2) char gKokiriForestPointNameJPNTex[] = dgKokiriForestPointNameJPNTex; + +#define dgZorasDomainPointNameJPNTex "__OTR__textures/map_name_static/gZorasDomainPointNameJPNTex" +static const ALIGN_ASSET(2) char gZorasDomainPointNameJPNTex[] = dgZorasDomainPointNameJPNTex; + +#define dgHyruleFieldPositionNameJPNTex "__OTR__textures/map_name_static/gHyruleFieldPositionNameJPNTex" +static const ALIGN_ASSET(2) char gHyruleFieldPositionNameJPNTex[] = dgHyruleFieldPositionNameJPNTex; + +#define dgKakarikoVillagePositionNameJPNTex "__OTR__textures/map_name_static/gKakarikoVillagePositionNameJPNTex" +static const ALIGN_ASSET(2) char gKakarikoVillagePositionNameJPNTex[] = dgKakarikoVillagePositionNameJPNTex; + +#define dgGraveyardPositionNameJPNTex "__OTR__textures/map_name_static/gGraveyardPositionNameJPNTex" +static const ALIGN_ASSET(2) char gGraveyardPositionNameJPNTex[] = dgGraveyardPositionNameJPNTex; + +#define dgZorasRiverPositionNameJPNTex "__OTR__textures/map_name_static/gZorasRiverPositionNameJPNTex" +static const ALIGN_ASSET(2) char gZorasRiverPositionNameJPNTex[] = dgZorasRiverPositionNameJPNTex; + +#define dgKokiriForestPositionNameJPNTex "__OTR__textures/map_name_static/gKokiriForestPositionNameJPNTex" +static const ALIGN_ASSET(2) char gKokiriForestPositionNameJPNTex[] = dgKokiriForestPositionNameJPNTex; + +#define dgSacredForestMeadowPositionNameJPNTex "__OTR__textures/map_name_static/gSacredForestMeadowPositionNameJPNTex" +static const ALIGN_ASSET(2) char gSacredForestMeadowPositionNameJPNTex[] = dgSacredForestMeadowPositionNameJPNTex; + +#define dgLakeHyliaPositionNameJPNTex "__OTR__textures/map_name_static/gLakeHyliaPositionNameJPNTex" +static const ALIGN_ASSET(2) char gLakeHyliaPositionNameJPNTex[] = dgLakeHyliaPositionNameJPNTex; + +#define dgZorasDomainPositionNameJPNTex "__OTR__textures/map_name_static/gZorasDomainPositionNameJPNTex" +static const ALIGN_ASSET(2) char gZorasDomainPositionNameJPNTex[] = dgZorasDomainPositionNameJPNTex; + +#define dgZorasFountainPositionNameJPNTex "__OTR__textures/map_name_static/gZorasFountainPositionNameJPNTex" +static const ALIGN_ASSET(2) char gZorasFountainPositionNameJPNTex[] = dgZorasFountainPositionNameJPNTex; + +#define dgGerudoValleyPositionNameJPNTex "__OTR__textures/map_name_static/gGerudoValleyPositionNameJPNTex" +static const ALIGN_ASSET(2) char gGerudoValleyPositionNameJPNTex[] = dgGerudoValleyPositionNameJPNTex; + +#define dgLostWoodsPositionNameJPNTex "__OTR__textures/map_name_static/gLostWoodsPositionNameJPNTex" +static const ALIGN_ASSET(2) char gLostWoodsPositionNameJPNTex[] = dgLostWoodsPositionNameJPNTex; + +#define dgDesertColossusPositionNameJPNTex "__OTR__textures/map_name_static/gDesertColossusPositionNameJPNTex" +static const ALIGN_ASSET(2) char gDesertColossusPositionNameJPNTex[] = dgDesertColossusPositionNameJPNTex; + +#define dgGerudosFortressPositionNameJPNTex "__OTR__textures/map_name_static/gGerudosFortressPositionNameJPNTex" +static const ALIGN_ASSET(2) char gGerudosFortressPositionNameJPNTex[] = dgGerudosFortressPositionNameJPNTex; + +#define dgHauntedWastelandPositionNameJPNTex "__OTR__textures/map_name_static/gHauntedWastelandPositionNameJPNTex" +static const ALIGN_ASSET(2) char gHauntedWastelandPositionNameJPNTex[] = dgHauntedWastelandPositionNameJPNTex; + +#define dgMarketPositionNameJPNTex "__OTR__textures/map_name_static/gMarketPositionNameJPNTex" +static const ALIGN_ASSET(2) char gMarketPositionNameJPNTex[] = dgMarketPositionNameJPNTex; + +#define dgHyruleCastlePositionNameJPNTex "__OTR__textures/map_name_static/gHyruleCastlePositionNameJPNTex" +static const ALIGN_ASSET(2) char gHyruleCastlePositionNameJPNTex[] = dgHyruleCastlePositionNameJPNTex; + +#define dgDeathMountainTrailPositionNameJPNTex "__OTR__textures/map_name_static/gDeathMountainTrailPositionNameJPNTex" +static const ALIGN_ASSET(2) char gDeathMountainTrailPositionNameJPNTex[] = dgDeathMountainTrailPositionNameJPNTex; + +#define dgDeathMountainCraterPositionNameJPNTex "__OTR__textures/map_name_static/gDeathMountainCraterPositionNameJPNTex" +static const ALIGN_ASSET(2) char gDeathMountainCraterPositionNameJPNTex[] = dgDeathMountainCraterPositionNameJPNTex; + +#define dgGoronCityPositionNameJPNTex "__OTR__textures/map_name_static/gGoronCityPositionNameJPNTex" +static const ALIGN_ASSET(2) char gGoronCityPositionNameJPNTex[] = dgGoronCityPositionNameJPNTex; + +#define dgLonLonRanchPositionNameJPNTex "__OTR__textures/map_name_static/gLonLonRanchPositionNameJPNTex" +static const ALIGN_ASSET(2) char gLonLonRanchPositionNameJPNTex[] = dgLonLonRanchPositionNameJPNTex; + +#define dgQuestionMarkPositionNameJPNTex "__OTR__textures/map_name_static/gQuestionMarkPositionNameJPNTex" +static const ALIGN_ASSET(2) char gQuestionMarkPositionNameJPNTex[] = dgQuestionMarkPositionNameJPNTex; + +#define dgGanonsCastlePositionNameJPNTex "__OTR__textures/map_name_static/gGanonsCastlePositionNameJPNTex" +static const ALIGN_ASSET(2) char gGanonsCastlePositionNameJPNTex[] = dgGanonsCastlePositionNameJPNTex; + + #endif // TEXTURES_MAP_NAME_STATIC_H diff --git a/soh/assets/textures/title_static/title_static.h b/soh/assets/textures/title_static/title_static.h index 88ea9a555..b3baf985f 100644 --- a/soh/assets/textures/title_static/title_static.h +++ b/soh/assets/textures/title_static/title_static.h @@ -423,6 +423,9 @@ static const ALIGN_ASSET(2) char gFileSelHoldFRATex[] = dgFileSelHoldFRATex; #define dgFileSelCheckBrightnessENGTex "__OTR__textures/title_static/gFileSelCheckBrightnessENGTex" static const ALIGN_ASSET(2) char gFileSelCheckBrightnessENGTex[] = dgFileSelCheckBrightnessENGTex; +#define dgFileSelCheckBrightnessENGNTSCTex "__OTR__textures/title_static/gFileSelCheckBrightnessENGNTSCTex" +static const ALIGN_ASSET(2) char gFileSelCheckBrightnessENGNTSCTex[] = dgFileSelCheckBrightnessENGNTSCTex; + #define dgFileSelCheckBrightnessGERTex "__OTR__textures/title_static/gFileSelCheckBrightnessGERTex" static const ALIGN_ASSET(2) char gFileSelCheckBrightnessGERTex[] = dgFileSelCheckBrightnessGERTex; @@ -447,4 +450,110 @@ static const ALIGN_ASSET(2) char gFileSelWindow2DL[] = dgFileSelWindow2DL; #define dgFileSelWindow3DL "__OTR__textures/title_static/gFileSelWindow3DL" static const ALIGN_ASSET(2) char gFileSelWindow3DL[] = dgFileSelWindow3DL; +#define dgFileSelNoFileToCopyJPNTex "__OTR__textures/title_static/gFileSelNoFileToCopyJPNTex" +static const ALIGN_ASSET(2) char gFileSelNoFileToCopyJPNTex[] = dgFileSelNoFileToCopyJPNTex; + +#define dgFileSelNoFileToEraseJPNTex "__OTR__textures/title_static/gFileSelNoFileToEraseJPNTex" +static const ALIGN_ASSET(2) char gFileSelNoFileToEraseJPNTex[] = dgFileSelNoFileToEraseJPNTex; + +#define dgFileSelNoEmptyFileJPNTex "__OTR__textures/title_static/gFileSelNoEmptyFileJPNTex" +static const ALIGN_ASSET(2) char gFileSelNoEmptyFileJPNTex[] = dgFileSelNoEmptyFileJPNTex; + +#define dgFileSelFileEmptyJPNTex "__OTR__textures/title_static/gFileSelFileEmptyJPNTex" +static const ALIGN_ASSET(2) char gFileSelFileEmptyJPNTex[] = dgFileSelFileEmptyJPNTex; + +#define dgFileSelFileInUseJPNTex "__OTR__textures/title_static/gFileSelFileInUseJPNTex" +static const ALIGN_ASSET(2) char gFileSelFileInUseJPNTex[] = dgFileSelFileInUseJPNTex; + +#define dgFileSelWhichFile1JPNTex "__OTR__textures/title_static/gFileSelWhichFile1JPNTex" +static const ALIGN_ASSET(2) char gFileSelWhichFile1JPNTex[] = dgFileSelWhichFile1JPNTex; + +#define dgFileSelCopyToWhichFileJPNTex "__OTR__textures/title_static/gFileSelCopyToWhichFileJPNTex" +static const ALIGN_ASSET(2) char gFileSelCopyToWhichFileJPNTex[] = dgFileSelCopyToWhichFileJPNTex; + +#define dgFileSelAreYouSureJPNTex "__OTR__textures/title_static/gFileSelAreYouSureJPNTex" +static const ALIGN_ASSET(2) char gFileSelAreYouSureJPNTex[] = dgFileSelAreYouSureJPNTex; + +#define dgFileSelFileCopiedJPNTex "__OTR__textures/title_static/gFileSelFileCopiedJPNTex" +static const ALIGN_ASSET(2) char gFileSelFileCopiedJPNTex[] = dgFileSelFileCopiedJPNTex; + +#define dgFileSelPleaseSelectAFileJPNTex "__OTR__textures/title_static/gFileSelPleaseSelectAFileJPNTex" +static const ALIGN_ASSET(2) char gFileSelPleaseSelectAFileJPNTex[] = dgFileSelPleaseSelectAFileJPNTex; + +#define dgFileSelOpenThisFileJPNTex "__OTR__textures/title_static/gFileSelOpenThisFileJPNTex" +static const ALIGN_ASSET(2) char gFileSelOpenThisFileJPNTex[] = dgFileSelOpenThisFileJPNTex; + +#define dgFileSelEraseWhichFileJPNTex "__OTR__textures/title_static/gFileSelEraseWhichFileJPNTex" +static const ALIGN_ASSET(2) char gFileSelEraseWhichFileJPNTex[] = dgFileSelEraseWhichFileJPNTex; + +#define dgFileSelAreYouSure2JPNTex "__OTR__textures/title_static/gFileSelAreYouSure2JPNTex" +static const ALIGN_ASSET(2) char gFileSelAreYouSure2JPNTex[] = dgFileSelAreYouSure2JPNTex; + +#define dgFileSelFileErasedJPNTex "__OTR__textures/title_static/gFileSelFileErasedJPNTex" +static const ALIGN_ASSET(2) char gFileSelFileErasedJPNTex[] = dgFileSelFileErasedJPNTex; + +#define dgFileSelOptionsJPNTex "__OTR__textures/title_static/gFileSelOptionsJPNTex" +static const ALIGN_ASSET(2) char gFileSelOptionsJPNTex[] = dgFileSelOptionsJPNTex; + +#define dgFileSelNameJPNTex "__OTR__textures/title_static/gFileSelNameJPNTex" +static const ALIGN_ASSET(2) char gFileSelNameJPNTex[] = dgFileSelNameJPNTex; + +#define dgFileSelSurroundJPNTex "__OTR__textures/title_static/gFileSelSurroundJPNTex" +static const ALIGN_ASSET(2) char gFileSelSurroundJPNTex[] = dgFileSelSurroundJPNTex; + +#define dgFileSelHeadsetJPNTex "__OTR__textures/title_static/gFileSelHeadsetJPNTex" +static const ALIGN_ASSET(2) char gFileSelHeadsetJPNTex[] = dgFileSelHeadsetJPNTex; + +#define dgFileSelMonoJPNTex "__OTR__textures/title_static/gFileSelMonoJPNTex" +static const ALIGN_ASSET(2) char gFileSelMonoJPNTex[] = dgFileSelMonoJPNTex; + +#define dgFileSelStereoJPNTex "__OTR__textures/title_static/gFileSelStereoJPNTex" +static const ALIGN_ASSET(2) char gFileSelStereoJPNTex[] = dgFileSelStereoJPNTex; + +#define dgFileSelLTargetingJPNTex "__OTR__textures/title_static/gFileSelLTargetingJPNTex" +static const ALIGN_ASSET(2) char gFileSelLTargetingJPNTex[] = dgFileSelLTargetingJPNTex; + +#define dgFileSelSwitchJPNTex "__OTR__textures/title_static/gFileSelSwitchJPNTex" +static const ALIGN_ASSET(2) char gFileSelSwitchJPNTex[] = dgFileSelSwitchJPNTex; + +#define dgFileSelHoldJPNTex "__OTR__textures/title_static/gFileSelHoldJPNTex" +static const ALIGN_ASSET(2) char gFileSelHoldJPNTex[] = dgFileSelHoldJPNTex; + +#define dgFileSelControlsJPNTex "__OTR__textures/title_static/gFileSelControlsJPNTex" +static const ALIGN_ASSET(2) char gFileSelControlsJPNTex[] = dgFileSelControlsJPNTex; + +#define dgFileSelCheckBrightnessJPNTex "__OTR__textures/title_static/gFileSelCheckBrightnessJPNTex" +static const ALIGN_ASSET(2) char gFileSelCheckBrightnessJPNTex[] = dgFileSelCheckBrightnessJPNTex; + +#define dgFileSelCopyButtonJPNTex "__OTR__textures/title_static/gFileSelCopyButtonJPNTex" +static const ALIGN_ASSET(2) char gFileSelCopyButtonJPNTex[] = dgFileSelCopyButtonJPNTex; + +#define dgFileSelFile1ButtonJPNTex "__OTR__textures/title_static/gFileSelFile1ButtonJPNTex" +static const ALIGN_ASSET(2) char gFileSelFile1ButtonJPNTex[] = dgFileSelFile1ButtonJPNTex; + +#define dgFileSelFile2ButtonJPNTex "__OTR__textures/title_static/gFileSelFile2ButtonJPNTex" +static const ALIGN_ASSET(2) char gFileSelFile2ButtonJPNTex[] = dgFileSelFile2ButtonJPNTex; + +#define dgFileSelFile3ButtonJPNTex "__OTR__textures/title_static/gFileSelFile3ButtonJPNTex" +static const ALIGN_ASSET(2) char gFileSelFile3ButtonJPNTex[] = dgFileSelFile3ButtonJPNTex; + +#define dgFileSelYesButtonJPNTex "__OTR__textures/title_static/gFileSelYesButtonJPNTex" +static const ALIGN_ASSET(2) char gFileSelYesButtonJPNTex[] = dgFileSelYesButtonJPNTex; + +#define dgFileSelEraseButtonJPNTex "__OTR__textures/title_static/gFileSelEraseButtonJPNTex" +static const ALIGN_ASSET(2) char gFileSelEraseButtonJPNTex[] = dgFileSelEraseButtonJPNTex; + +#define dgFileSelOptionsButtonJPNTex "__OTR__textures/title_static/gFileSelOptionsButtonJPNTex" +static const ALIGN_ASSET(2) char gFileSelOptionsButtonJPNTex[] = dgFileSelOptionsButtonJPNTex; + +#define dgFileSelQuitButtonJPNTex "__OTR__textures/title_static/gFileSelQuitButtonJPNTex" +static const ALIGN_ASSET(2) char gFileSelQuitButtonJPNTex[] = dgFileSelQuitButtonJPNTex; + +#define dgFileSelSaveXJPNTex "__OTR__textures/title_static/gFileSelSaveXJPNTex" +static const ALIGN_ASSET(2) char gFileSelSaveXJPNTex[] = dgFileSelSaveXJPNTex; + +#define dgFileSelSaveXENGTex "__OTR__textures/title_static/gFileSelSaveXENGTex" +static const ALIGN_ASSET(2) char gFileSelSaveXENGTex[] = dgFileSelSaveXENGTex; + + #endif // TEXTURES_TITLE_STATIC_H diff --git a/soh/assets/xml/GC_MQ_D/code/sys_matrix.xml b/soh/assets/xml/GC_MQ_D/code/sys_matrix.xml index 28a2adc4c..389503056 100644 --- a/soh/assets/xml/GC_MQ_D/code/sys_matrix.xml +++ b/soh/assets/xml/GC_MQ_D/code/sys_matrix.xml @@ -1,5 +1,5 @@ - + diff --git a/soh/assets/xml/GC_MQ_D/objects/gameplay_keep.xml b/soh/assets/xml/GC_MQ_D/objects/gameplay_keep.xml index 992525114..4a071ef98 100644 --- a/soh/assets/xml/GC_MQ_D/objects/gameplay_keep.xml +++ b/soh/assets/xml/GC_MQ_D/objects/gameplay_keep.xml @@ -7,6 +7,8 @@ + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/audio/Audio.xml b/soh/assets/xml/GC_MQ_NTSC_J/audio/Audio.xml new file mode 100644 index 000000000..90f5dee24 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/audio/Audio.xml @@ -0,0 +1,1558 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/code/fbdemo_circle.xml b/soh/assets/xml/GC_MQ_NTSC_J/code/fbdemo_circle.xml new file mode 100644 index 000000000..e6b4bba12 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/code/fbdemo_circle.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/code/fbdemo_triforce.xml b/soh/assets/xml/GC_MQ_NTSC_J/code/fbdemo_triforce.xml new file mode 100644 index 000000000..bbc709a4f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/code/fbdemo_triforce.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/code/fbdemo_wipe1.xml b/soh/assets/xml/GC_MQ_NTSC_J/code/fbdemo_wipe1.xml new file mode 100644 index 000000000..9d2e12231 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/code/fbdemo_wipe1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/code/sys_matrix.xml b/soh/assets/xml/GC_MQ_NTSC_J/code/sys_matrix.xml new file mode 100644 index 000000000..1521be9f1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/code/sys_matrix.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/misc/link_animetion.xml b/soh/assets/xml/GC_MQ_NTSC_J/misc/link_animetion.xml new file mode 100644 index 000000000..9de1e92d3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/misc/link_animetion.xml @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/gameplay_dangeon_keep.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/gameplay_dangeon_keep.xml new file mode 100644 index 000000000..5b1a9050d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/gameplay_dangeon_keep.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/gameplay_field_keep.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/gameplay_field_keep.xml new file mode 100644 index 000000000..011e8f7fc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/gameplay_field_keep.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/gameplay_keep.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/gameplay_keep.xml new file mode 100644 index 000000000..94eee8845 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/gameplay_keep.xml @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_Bb.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_Bb.xml new file mode 100644 index 000000000..5d04bde45 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_Bb.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ahg.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ahg.xml new file mode 100644 index 000000000..4d37b1b11 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ahg.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_am.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_am.xml new file mode 100644 index 000000000..b70c70d70 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_am.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ane.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ane.xml new file mode 100644 index 000000000..1e29b351e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ane.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ani.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ani.xml new file mode 100644 index 000000000..c70621c6f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ani.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_anubice.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_anubice.xml new file mode 100644 index 000000000..fb029586b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_anubice.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_aob.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_aob.xml new file mode 100644 index 000000000..e6202d0cf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_aob.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_b_heart.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_b_heart.xml new file mode 100644 index 000000000..00f7cd677 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_b_heart.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bba.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bba.xml new file mode 100644 index 000000000..ccc5c2136 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bba.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bdan_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bdan_objects.xml new file mode 100644 index 000000000..dcd56d385 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bdan_objects.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bdoor.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bdoor.xml new file mode 100644 index 000000000..a092f0c23 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bdoor.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bg.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bg.xml new file mode 100644 index 000000000..791226b71 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bg.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bigokuta.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bigokuta.xml new file mode 100644 index 000000000..1c7d39e31 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bigokuta.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bird.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bird.xml new file mode 100644 index 000000000..167a5022d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bird.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bji.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bji.xml new file mode 100644 index 000000000..c665b6b00 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bji.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bl.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bl.xml new file mode 100644 index 000000000..1c2ef4ec6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_blkobj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_blkobj.xml new file mode 100644 index 000000000..345a8ebd9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_blkobj.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bob.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bob.xml new file mode 100644 index 000000000..289e994e4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bob.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_boj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_boj.xml new file mode 100644 index 000000000..4be4764ab --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_boj.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bombf.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bombf.xml new file mode 100644 index 000000000..83e60248d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bombf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bombiwa.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bombiwa.xml new file mode 100644 index 000000000..26ab6b4f3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bombiwa.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bowl.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bowl.xml new file mode 100644 index 000000000..ffe6d43db --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bowl.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_box.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_box.xml new file mode 100644 index 000000000..106d2d335 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_box.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_brob.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_brob.xml new file mode 100644 index 000000000..718dcd561 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_brob.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bubble.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bubble.xml new file mode 100644 index 000000000..f5de18692 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bubble.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bv.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bv.xml new file mode 100644 index 000000000..58db6e1d4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bv.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bw.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bw.xml new file mode 100644 index 000000000..6fd39fbb1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bw.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bwall.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bwall.xml new file mode 100644 index 000000000..d4f43ddc1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bwall.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bxa.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bxa.xml new file mode 100644 index 000000000..fb78c117e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_bxa.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cne.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cne.xml new file mode 100644 index 000000000..0c14d0bc5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cne.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cob.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cob.xml new file mode 100644 index 000000000..ba051cfa7 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cob.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cow.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cow.xml new file mode 100644 index 000000000..5d067c329 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cow.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_crow.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_crow.xml new file mode 100644 index 000000000..77337c644 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_crow.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cs.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cs.xml new file mode 100644 index 000000000..83804ccaf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_cs.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_d_elevator.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_d_elevator.xml new file mode 100644 index 000000000..6be59c154 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_d_elevator.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_d_hsblock.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_d_hsblock.xml new file mode 100644 index 000000000..4bb50c2b4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_d_hsblock.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_d_lift.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_d_lift.xml new file mode 100644 index 000000000..291238519 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_d_lift.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_daiku.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_daiku.xml new file mode 100644 index 000000000..1524c7a26 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_daiku.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ddan_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ddan_objects.xml new file mode 100644 index 000000000..3fc563b96 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ddan_objects.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dekubaba.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dekubaba.xml new file mode 100644 index 000000000..7202a833f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dekubaba.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dekujr.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dekujr.xml new file mode 100644 index 000000000..e906bf61c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dekujr.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dekunuts.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dekunuts.xml new file mode 100644 index 000000000..5fceef416 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dekunuts.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_demo_6k.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_demo_6k.xml new file mode 100644 index 000000000..73058d5e4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_demo_6k.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_demo_kekkai.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_demo_kekkai.xml new file mode 100644 index 000000000..aa54bc2ee --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_demo_kekkai.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_demo_tre_lgt.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_demo_tre_lgt.xml new file mode 100644 index 000000000..9ea19012b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_demo_tre_lgt.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dh.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dh.xml new file mode 100644 index 000000000..7a52d7dbe --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dh.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dnk.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dnk.xml new file mode 100644 index 000000000..3bce34304 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dnk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dns.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dns.xml new file mode 100644 index 000000000..8b78ffcf2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dns.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dodojr.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dodojr.xml new file mode 100644 index 000000000..4dfd7d6e4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dodojr.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dodongo.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dodongo.xml new file mode 100644 index 000000000..779e20e9d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dodongo.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dog.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dog.xml new file mode 100644 index 000000000..ef00442b6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dog.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_door_gerudo.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_door_gerudo.xml new file mode 100644 index 000000000..2f1726204 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_door_gerudo.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_door_killer.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_door_killer.xml new file mode 100644 index 000000000..a37f590d6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_door_killer.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ds.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ds.xml new file mode 100644 index 000000000..0413a9e2e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ds.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ds2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ds2.xml new file mode 100644 index 000000000..683bcc68d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ds2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_du.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_du.xml new file mode 100644 index 000000000..0babd962b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_du.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dy_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dy_obj.xml new file mode 100644 index 000000000..5e792edb5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_dy_obj.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ec.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ec.xml new file mode 100644 index 000000000..7ec83e284 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ec.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_crystal_light.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_crystal_light.xml new file mode 100644 index 000000000..9215b6a39 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_crystal_light.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_doughnut.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_doughnut.xml new file mode 100644 index 000000000..7f12c56f5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_doughnut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_erupc.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_erupc.xml new file mode 100644 index 000000000..800d9535f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_erupc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_fire_ball.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_fire_ball.xml new file mode 100644 index 000000000..2fc65b16f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_fire_ball.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_flash.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_flash.xml new file mode 100644 index 000000000..5f962f162 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_flash.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_lgt_shower.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_lgt_shower.xml new file mode 100644 index 000000000..67ef5ce7e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_lgt_shower.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_star_field.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_star_field.xml new file mode 100644 index 000000000..00b47c460 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_star_field.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_tw.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_tw.xml new file mode 100644 index 000000000..de5376569 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_efc_tw.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ei.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ei.xml new file mode 100644 index 000000000..e4132491f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ei.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fa.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fa.xml new file mode 100644 index 000000000..2f1bf9a5e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fa.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fd.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fd.xml new file mode 100644 index 000000000..9bc25d3a6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fd.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fd2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fd2.xml new file mode 100644 index 000000000..44b5f5f9c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fd2.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fhg.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fhg.xml new file mode 100644 index 000000000..6a275daeb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fhg.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fire.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fire.xml new file mode 100644 index 000000000..49bf620cb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fire.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_firefly.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_firefly.xml new file mode 100644 index 000000000..8c26a4341 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_firefly.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fish.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fish.xml new file mode 100644 index 000000000..f5ad4f6da --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fish.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fr.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fr.xml new file mode 100644 index 000000000..25ee2ad42 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fr.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fu.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fu.xml new file mode 100644 index 000000000..82c449e3d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fu.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fw.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fw.xml new file mode 100644 index 000000000..ee9821d26 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fw.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fz.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fz.xml new file mode 100644 index 000000000..dad6fec5c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_fz.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon.xml new file mode 100644 index 000000000..5b68602ba --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon2.xml new file mode 100644 index 000000000..7e715dd41 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon2.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_anime1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_anime1.xml new file mode 100644 index 000000000..b1016299b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_anime1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_anime2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_anime2.xml new file mode 100644 index 000000000..180e5995c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_anime2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_anime3.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_anime3.xml new file mode 100644 index 000000000..be4c4dcb1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_anime3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_objects.xml new file mode 100644 index 000000000..5e32610ff --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ganon_objects.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ge1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ge1.xml new file mode 100644 index 000000000..79e0768b8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ge1.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_geff.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_geff.xml new file mode 100644 index 000000000..f0667743b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_geff.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_geldb.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_geldb.xml new file mode 100644 index 000000000..49b12ef2e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_geldb.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_arrow.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_arrow.xml new file mode 100644 index 000000000..4b58787a9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_arrow.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_arrowcase.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_arrowcase.xml new file mode 100644 index 000000000..267b0a734 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_arrowcase.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bean.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bean.xml new file mode 100644 index 000000000..e74247816 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bean.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bomb_1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bomb_1.xml new file mode 100644 index 000000000..bae86c11d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bomb_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bomb_2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bomb_2.xml new file mode 100644 index 000000000..1400c4a4d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bomb_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bombpouch.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bombpouch.xml new file mode 100644 index 000000000..07134748c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bombpouch.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_boomerang.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_boomerang.xml new file mode 100644 index 000000000..3c1a0fe7f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_boomerang.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_boots_2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_boots_2.xml new file mode 100644 index 000000000..3bcb6a47a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_boots_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bosskey.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bosskey.xml new file mode 100644 index 000000000..e5e4bc86c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bosskey.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bottle.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bottle.xml new file mode 100644 index 000000000..3b0884a03 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bottle.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bottle_letter.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bottle_letter.xml new file mode 100644 index 000000000..443219caf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bottle_letter.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bow.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bow.xml new file mode 100644 index 000000000..946e9c496 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bow.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bracelet.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bracelet.xml new file mode 100644 index 000000000..5a0b62a60 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_bracelet.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_brokensword.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_brokensword.xml new file mode 100644 index 000000000..408741ac5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_brokensword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_butterfly.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_butterfly.xml new file mode 100644 index 000000000..7b60a7724 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_butterfly.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_clothes.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_clothes.xml new file mode 100644 index 000000000..3f897b6d1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_clothes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_coin.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_coin.xml new file mode 100644 index 000000000..22e29f255 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_coin.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_compass.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_compass.xml new file mode 100644 index 000000000..076229b11 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_compass.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_dekupouch.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_dekupouch.xml new file mode 100644 index 000000000..8925e6fa5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_dekupouch.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_egg.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_egg.xml new file mode 100644 index 000000000..2b2e2847d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_egg.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_eye_lotion.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_eye_lotion.xml new file mode 100644 index 000000000..5128c5f6f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_eye_lotion.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_fire.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_fire.xml new file mode 100644 index 000000000..4bfd76a7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_fire.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_fish.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_fish.xml new file mode 100644 index 000000000..edb39dc29 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_fish.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_frog.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_frog.xml new file mode 100644 index 000000000..a656c306b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_frog.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_gerudo.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_gerudo.xml new file mode 100644 index 000000000..d65daee8e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_gerudo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_gerudomask.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_gerudomask.xml new file mode 100644 index 000000000..cfcb878d9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_gerudomask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ghost.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ghost.xml new file mode 100644 index 000000000..795f0cfd1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ghost.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_glasses.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_glasses.xml new file mode 100644 index 000000000..63d32ab5a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_glasses.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_gloves.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_gloves.xml new file mode 100644 index 000000000..0e1c4259d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_gloves.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_goddess.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_goddess.xml new file mode 100644 index 000000000..50cbdd891 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_goddess.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_golonmask.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_golonmask.xml new file mode 100644 index 000000000..844d90e71 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_golonmask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_grass.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_grass.xml new file mode 100644 index 000000000..ae7834201 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_grass.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hammer.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hammer.xml new file mode 100644 index 000000000..feb5c8659 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hammer.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_heart.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_heart.xml new file mode 100644 index 000000000..48e78b1b5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_heart.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hearts.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hearts.xml new file mode 100644 index 000000000..d2e763e63 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hearts.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hookshot.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hookshot.xml new file mode 100644 index 000000000..a6b3b0fda --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hookshot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hoverboots.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hoverboots.xml new file mode 100644 index 000000000..6d41df8fd --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_hoverboots.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_insect.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_insect.xml new file mode 100644 index 000000000..7af5b5b3b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_insect.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_jewel.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_jewel.xml new file mode 100644 index 000000000..e83c65116 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_jewel.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_key.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_key.xml new file mode 100644 index 000000000..a37d45a71 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_key.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ki_tan_mask.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ki_tan_mask.xml new file mode 100644 index 000000000..46eff7d3e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ki_tan_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_letter.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_letter.xml new file mode 100644 index 000000000..bea868339 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_letter.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_liquid.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_liquid.xml new file mode 100644 index 000000000..18a5c3d7a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_liquid.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_longsword.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_longsword.xml new file mode 100644 index 000000000..7161e42e3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_longsword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_m_arrow.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_m_arrow.xml new file mode 100644 index 000000000..0fd659ae9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_m_arrow.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_magicpot.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_magicpot.xml new file mode 100644 index 000000000..7623e6353 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_magicpot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_map.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_map.xml new file mode 100644 index 000000000..471c1dab9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_map.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_medal.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_medal.xml new file mode 100644 index 000000000..28e5b1e68 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_medal.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_melody.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_melody.xml new file mode 100644 index 000000000..b01fca953 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_melody.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_milk.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_milk.xml new file mode 100644 index 000000000..a3e223b3e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_milk.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_mushroom.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_mushroom.xml new file mode 100644 index 000000000..5b19bca74 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_mushroom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_niwatori.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_niwatori.xml new file mode 100644 index 000000000..c8389f62c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_niwatori.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_nuts.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_nuts.xml new file mode 100644 index 000000000..c59903c43 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_nuts.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ocarina.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ocarina.xml new file mode 100644 index 000000000..82607677d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ocarina.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ocarina_0.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ocarina_0.xml new file mode 100644 index 000000000..2c5f70d98 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ocarina_0.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_pachinko.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_pachinko.xml new file mode 100644 index 000000000..5f808baf9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_pachinko.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_powder.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_powder.xml new file mode 100644 index 000000000..fb7dc0155 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_powder.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_prescription.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_prescription.xml new file mode 100644 index 000000000..75ae7eb2b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_prescription.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_purse.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_purse.xml new file mode 100644 index 000000000..054731dec --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_purse.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_rabit_mask.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_rabit_mask.xml new file mode 100644 index 000000000..9d4eb9487 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_rabit_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_redead_mask.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_redead_mask.xml new file mode 100644 index 000000000..7de08487f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_redead_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_rupy.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_rupy.xml new file mode 100644 index 000000000..0a1af96d0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_rupy.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_saw.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_saw.xml new file mode 100644 index 000000000..dcc038b7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_saw.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_scale.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_scale.xml new file mode 100644 index 000000000..1cf5de5b9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_scale.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_seed.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_seed.xml new file mode 100644 index 000000000..82c15c82d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_seed.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_shield_1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_shield_1.xml new file mode 100644 index 000000000..2f11e3f6d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_shield_1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_shield_2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_shield_2.xml new file mode 100644 index 000000000..176ae025f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_shield_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_shield_3.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_shield_3.xml new file mode 100644 index 000000000..8d1e5dafd --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_shield_3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_skj_mask.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_skj_mask.xml new file mode 100644 index 000000000..e6c90f76f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_skj_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_soldout.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_soldout.xml new file mode 100644 index 000000000..a15b1253e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_soldout.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_soul.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_soul.xml new file mode 100644 index 000000000..a68178eba --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_soul.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_stick.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_stick.xml new file mode 100644 index 000000000..fed89f465 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_stick.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_sutaru.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_sutaru.xml new file mode 100644 index 000000000..a2606afbe --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_sutaru.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_sword_1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_sword_1.xml new file mode 100644 index 000000000..e1119abca --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_sword_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ticketstone.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ticketstone.xml new file mode 100644 index 000000000..73bf888d1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_ticketstone.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_truth_mask.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_truth_mask.xml new file mode 100644 index 000000000..3b4edf3de --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_truth_mask.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_zoramask.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_zoramask.xml new file mode 100644 index 000000000..e3b1ab10e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gi_zoramask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gj.xml new file mode 100644 index 000000000..ee6dab74f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gj.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gjyo_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gjyo_objects.xml new file mode 100644 index 000000000..ea4f8444f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gjyo_objects.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gla.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gla.xml new file mode 100644 index 000000000..499a3720d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gla.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gm.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gm.xml new file mode 100644 index 000000000..91b10cc42 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gm.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gnd.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gnd.xml new file mode 100644 index 000000000..3ae3b57f3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gnd.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gnd_magic.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gnd_magic.xml new file mode 100644 index 000000000..a88d419d7 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gnd_magic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gndd.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gndd.xml new file mode 100644 index 000000000..8bf5d770c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gndd.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_god_lgt.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_god_lgt.xml new file mode 100644 index 000000000..60df9e469 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_god_lgt.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gol.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gol.xml new file mode 100644 index 000000000..7e04508cb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gol.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_goma.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_goma.xml new file mode 100644 index 000000000..ec3e42114 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_goma.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_goroiwa.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_goroiwa.xml new file mode 100644 index 000000000..5d406e957 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_goroiwa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gr.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gr.xml new file mode 100644 index 000000000..5f7360ae5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gr.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gs.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gs.xml new file mode 100644 index 000000000..145be1665 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gs.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gt.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gt.xml new file mode 100644 index 000000000..1d79d4e39 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_gt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_haka.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_haka.xml new file mode 100644 index 000000000..f6b263c37 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_haka.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_haka_door.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_haka_door.xml new file mode 100644 index 000000000..1376d0356 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_haka_door.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_haka_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_haka_objects.xml new file mode 100644 index 000000000..3ca6d27c0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_haka_objects.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hakach_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hakach_objects.xml new file mode 100644 index 000000000..0de02aaf1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hakach_objects.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hata.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hata.xml new file mode 100644 index 000000000..b0324c3be --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hata.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_heavy_object.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_heavy_object.xml new file mode 100644 index 000000000..ecc795321 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_heavy_object.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hidan_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hidan_objects.xml new file mode 100644 index 000000000..f41c0ee5e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hidan_objects.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hintnuts.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hintnuts.xml new file mode 100644 index 000000000..a7290f395 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hintnuts.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hni.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hni.xml new file mode 100644 index 000000000..6b317eb7a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hni.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse.xml new file mode 100644 index 000000000..74619e597 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_ganon.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_ganon.xml new file mode 100644 index 000000000..0a55462e2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_ganon.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_link_child.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_link_child.xml new file mode 100644 index 000000000..146c564f5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_link_child.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_normal.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_normal.xml new file mode 100644 index 000000000..2facab39c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_normal.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_zelda.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_zelda.xml new file mode 100644 index 000000000..af270c658 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_horse_zelda.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hs.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hs.xml new file mode 100644 index 000000000..cf5d06e1a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_hs.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_human.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_human.xml new file mode 100644 index 000000000..05795cb33 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_human.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ice_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ice_objects.xml new file mode 100644 index 000000000..c7d059d70 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ice_objects.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ik.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ik.xml new file mode 100644 index 000000000..8a6028f7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ik.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_im.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_im.xml new file mode 100644 index 000000000..a628a113a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_im.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_in.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_in.xml new file mode 100644 index 000000000..84c114047 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_in.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ingate.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ingate.xml new file mode 100644 index 000000000..e6be42beb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ingate.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jj.xml new file mode 100644 index 000000000..62bae8cb9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jj.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_js.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_js.xml new file mode 100644 index 000000000..ff7bd3efa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_js.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jya_door.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jya_door.xml new file mode 100644 index 000000000..60a7b3788 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jya_door.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jya_iron.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jya_iron.xml new file mode 100644 index 000000000..c6f6773c6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jya_iron.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jya_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jya_obj.xml new file mode 100644 index 000000000..a1f19b806 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_jya_obj.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ka.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ka.xml new file mode 100644 index 000000000..eb952732b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ka.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kanban.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kanban.xml new file mode 100644 index 000000000..9ffc7a2ce --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kanban.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kibako2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kibako2.xml new file mode 100644 index 000000000..a701b294d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kibako2.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kingdodongo.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kingdodongo.xml new file mode 100644 index 000000000..a865c15de --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kingdodongo.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_km1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_km1.xml new file mode 100644 index 000000000..0a918a798 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_km1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kusa.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kusa.xml new file mode 100644 index 000000000..67291a554 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kusa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kw1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kw1.xml new file mode 100644 index 000000000..eab561b1f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kw1.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kz.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kz.xml new file mode 100644 index 000000000..4624fefdb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_kz.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_light_ring.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_light_ring.xml new file mode 100644 index 000000000..babe7d2aa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_light_ring.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_lightbox.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_lightbox.xml new file mode 100644 index 000000000..552a79d7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_lightbox.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_lightswitch.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_lightswitch.xml new file mode 100644 index 000000000..cfd5dcfb4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_lightswitch.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_link_boy.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_link_boy.xml new file mode 100644 index 000000000..6351af505 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_link_boy.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_link_child.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_link_child.xml new file mode 100644 index 000000000..0de400373 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_link_child.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ma1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ma1.xml new file mode 100644 index 000000000..63eeb3895 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ma1.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ma2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ma2.xml new file mode 100644 index 000000000..ce5910fb8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ma2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mag.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mag.xml new file mode 100644 index 000000000..b2b082e6b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mag.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mamenoki.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mamenoki.xml new file mode 100644 index 000000000..819d89022 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mamenoki.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mastergolon.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mastergolon.xml new file mode 100644 index 000000000..6dd9d1659 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mastergolon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_masterkokiri.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_masterkokiri.xml new file mode 100644 index 000000000..af5a9ec15 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_masterkokiri.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_masterkokirihead.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_masterkokirihead.xml new file mode 100644 index 000000000..c64aa1c49 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_masterkokirihead.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_masterzoora.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_masterzoora.xml new file mode 100644 index 000000000..2c703274e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_masterzoora.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mb.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mb.xml new file mode 100644 index 000000000..23c0930c0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mb.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_md.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_md.xml new file mode 100644 index 000000000..161c73dca --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_md.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_medal.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_medal.xml new file mode 100644 index 000000000..533872a55 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_medal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_menkuri_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_menkuri_objects.xml new file mode 100644 index 000000000..4c2b51df5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_menkuri_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mir_ray.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mir_ray.xml new file mode 100644 index 000000000..2acc9391a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mir_ray.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mizu_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mizu_objects.xml new file mode 100644 index 000000000..5a18b95cf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mizu_objects.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin.xml new file mode 100644 index 000000000..daf9b0541 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_dark.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_dark.xml new file mode 100644 index 000000000..2fa0bdbe4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_dark.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_flame.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_flame.xml new file mode 100644 index 000000000..6274feaee --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_flame.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_flash.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_flash.xml new file mode 100644 index 000000000..c1040ea11 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_flash.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_ice.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_ice.xml new file mode 100644 index 000000000..1aaeea193 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_ice.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_oka.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_oka.xml new file mode 100644 index 000000000..0f823b923 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_oka.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_soul.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_soul.xml new file mode 100644 index 000000000..6386f7f9e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_soul.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_wind.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_wind.xml new file mode 100644 index 000000000..8bba7eb91 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mjin_wind.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mk.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mk.xml new file mode 100644 index 000000000..0b4aaae8a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mk.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mm.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mm.xml new file mode 100644 index 000000000..b27837e57 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mo.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mo.xml new file mode 100644 index 000000000..f450368f3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mo.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri1.xml new file mode 100644 index 000000000..bb1b31e2f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri1a.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri1a.xml new file mode 100644 index 000000000..c750ce20d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri1a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri2.xml new file mode 100644 index 000000000..785b85857 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri2a.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri2a.xml new file mode 100644 index 000000000..ad1bb4d5f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_hineri2a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_objects.xml new file mode 100644 index 000000000..58ea8c085 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_tex.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_tex.xml new file mode 100644 index 000000000..8ba4ff2d3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mori_tex.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ms.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ms.xml new file mode 100644 index 000000000..a87d0e6b3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ms.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mu.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mu.xml new file mode 100644 index 000000000..7251ff721 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_mu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_nb.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_nb.xml new file mode 100644 index 000000000..74de9e285 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_nb.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_niw.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_niw.xml new file mode 100644 index 000000000..4eafec956 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_niw.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_nwc.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_nwc.xml new file mode 100644 index 000000000..96ffa3238 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_nwc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ny.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ny.xml new file mode 100644 index 000000000..e2e8187ff --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ny.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA1.xml new file mode 100644 index 000000000..1d665f101 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA10.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA10.xml new file mode 100644 index 000000000..65d080834 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA10.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA11.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA11.xml new file mode 100644 index 000000000..92ae474b6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA11.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA2.xml new file mode 100644 index 000000000..ffdcd7989 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA2.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA3.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA3.xml new file mode 100644 index 000000000..a492bd875 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA4.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA4.xml new file mode 100644 index 000000000..dcdbbfff9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA5.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA5.xml new file mode 100644 index 000000000..55072176d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA6.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA6.xml new file mode 100644 index 000000000..c17a51088 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA6.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA7.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA7.xml new file mode 100644 index 000000000..52c68f639 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA7.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA8.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA8.xml new file mode 100644 index 000000000..8ed2d3df5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA8.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA9.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA9.xml new file mode 100644 index 000000000..d5c16abfc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oA9.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB1.xml new file mode 100644 index 000000000..2f50c967b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB2.xml new file mode 100644 index 000000000..230783cea --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB3.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB3.xml new file mode 100644 index 000000000..1c42ddacc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB3.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB4.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB4.xml new file mode 100644 index 000000000..2924c9e75 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oB4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE1.xml new file mode 100644 index 000000000..4d5b1663f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE1.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE10.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE10.xml new file mode 100644 index 000000000..04ce91437 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE10.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE11.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE11.xml new file mode 100644 index 000000000..04f6f186d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE11.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE12.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE12.xml new file mode 100644 index 000000000..a5fa39fd2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE12.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE1s.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE1s.xml new file mode 100644 index 000000000..d311e6010 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE1s.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE2.xml new file mode 100644 index 000000000..af62ad6d1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE2.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE3.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE3.xml new file mode 100644 index 000000000..95227da38 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE3.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE4.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE4.xml new file mode 100644 index 000000000..ae48d2ade --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE4.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE4s.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE4s.xml new file mode 100644 index 000000000..6037de52f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE4s.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE5.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE5.xml new file mode 100644 index 000000000..f5edf745a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE6.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE6.xml new file mode 100644 index 000000000..95bb602b6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE6.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE7.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE7.xml new file mode 100644 index 000000000..b3e588d4c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE7.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE8.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE8.xml new file mode 100644 index 000000000..be5de2494 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE8.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE9.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE9.xml new file mode 100644 index 000000000..8ea7ee18c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE9.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE_anime.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE_anime.xml new file mode 100644 index 000000000..f6b4659e2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oE_anime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oF1d_map.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oF1d_map.xml new file mode 100644 index 000000000..f14fecd82 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oF1d_map.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oF1s.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oF1s.xml new file mode 100644 index 000000000..fe41dde63 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_oF1s.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_o_anime.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_o_anime.xml new file mode 100644 index 000000000..4ef4ac44c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_o_anime.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_okuta.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_okuta.xml new file mode 100644 index 000000000..b4fccea6f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_okuta.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_opening_demo1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_opening_demo1.xml new file mode 100644 index 000000000..fd0323027 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_opening_demo1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_os.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_os.xml new file mode 100644 index 000000000..5880a9293 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_os.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_os_anime.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_os_anime.xml new file mode 100644 index 000000000..f23636343 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_os_anime.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ossan.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ossan.xml new file mode 100644 index 000000000..5788e3a20 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ossan.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ouke_haka.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ouke_haka.xml new file mode 100644 index 000000000..11da9b26e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ouke_haka.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_owl.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_owl.xml new file mode 100644 index 000000000..64fdf64c5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_owl.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_peehat.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_peehat.xml new file mode 100644 index 000000000..42ee66cde --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_peehat.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_po_composer.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_po_composer.xml new file mode 100644 index 000000000..ff995efce --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_po_composer.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_po_field.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_po_field.xml new file mode 100644 index 000000000..78bc0d65a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_po_field.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_po_sisters.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_po_sisters.xml new file mode 100644 index 000000000..b429be258 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_po_sisters.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_poh.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_poh.xml new file mode 100644 index 000000000..be6d6eff4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_poh.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ps.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ps.xml new file mode 100644 index 000000000..9f9c894a6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ps.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_pu_box.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_pu_box.xml new file mode 100644 index 000000000..e1d686e97 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_pu_box.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rd.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rd.xml new file mode 100644 index 000000000..22c7d3373 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rd.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_reeba.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_reeba.xml new file mode 100644 index 000000000..32c697bd9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_reeba.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_relay_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_relay_objects.xml new file mode 100644 index 000000000..47b92fcd2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_relay_objects.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rl.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rl.xml new file mode 100644 index 000000000..2a5ad30f6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rl.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rr.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rr.xml new file mode 100644 index 000000000..98726b14b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rr.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rs.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rs.xml new file mode 100644 index 000000000..152b5489e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_rs.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ru1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ru1.xml new file mode 100644 index 000000000..3d413619f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ru1.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ru2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ru2.xml new file mode 100644 index 000000000..fedf37d48 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ru2.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sa.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sa.xml new file mode 100644 index 000000000..ec45ac961 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sa.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sb.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sb.xml new file mode 100644 index 000000000..64d3bb005 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sb.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sd.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sd.xml new file mode 100644 index 000000000..fb58428c3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sd.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_shop_dungen.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_shop_dungen.xml new file mode 100644 index 000000000..594c43d39 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_shop_dungen.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_shopnuts.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_shopnuts.xml new file mode 100644 index 000000000..7065f8941 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_shopnuts.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_siofuki.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_siofuki.xml new file mode 100644 index 000000000..a23240a72 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_siofuki.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sk2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sk2.xml new file mode 100644 index 000000000..f2e7ef6d8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sk2.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_skb.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_skb.xml new file mode 100644 index 000000000..5b5efb484 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_skb.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_skj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_skj.xml new file mode 100644 index 000000000..74548e518 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_skj.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot00_break.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot00_break.xml new file mode 100644 index 000000000..d3be88315 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot00_break.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot00_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot00_objects.xml new file mode 100644 index 000000000..10fb13aea --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot00_objects.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_matoya.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_matoya.xml new file mode 100644 index 000000000..d44b944e0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_matoya.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_matoyab.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_matoyab.xml new file mode 100644 index 000000000..720f50cd3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_matoyab.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_objects.xml new file mode 100644 index 000000000..413e032a9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_objects.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_objects2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_objects2.xml new file mode 100644 index 000000000..36741a949 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot01_objects2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot02_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot02_objects.xml new file mode 100644 index 000000000..65f45ff51 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot02_objects.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot03_object.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot03_object.xml new file mode 100644 index 000000000..f182e7d99 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot03_object.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot04_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot04_objects.xml new file mode 100644 index 000000000..66293d752 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot04_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot05_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot05_objects.xml new file mode 100644 index 000000000..6e7079149 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot05_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot06_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot06_objects.xml new file mode 100644 index 000000000..e3da63b0f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot06_objects.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot07_object.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot07_object.xml new file mode 100644 index 000000000..5bc2bfb6b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot07_object.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot08_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot08_obj.xml new file mode 100644 index 000000000..4d71f3473 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot08_obj.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot09_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot09_obj.xml new file mode 100644 index 000000000..eb6528393 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot09_obj.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot11_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot11_obj.xml new file mode 100644 index 000000000..257298f7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot11_obj.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot12_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot12_obj.xml new file mode 100644 index 000000000..d619c781e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot12_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot15_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot15_obj.xml new file mode 100644 index 000000000..bd59b8cd1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot15_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot16_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot16_obj.xml new file mode 100644 index 000000000..d39de812a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot16_obj.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot17_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot17_obj.xml new file mode 100644 index 000000000..d4239d8d2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot17_obj.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot18_obj.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot18_obj.xml new file mode 100644 index 000000000..cc12b7894 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_spot18_obj.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ssh.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ssh.xml new file mode 100644 index 000000000..6283f8e9f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ssh.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sst.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sst.xml new file mode 100644 index 000000000..d64787fa1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_sst.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_st.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_st.xml new file mode 100644 index 000000000..983b9e2ea --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_st.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_stream.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_stream.xml new file mode 100644 index 000000000..59b0838e4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_stream.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_syokudai.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_syokudai.xml new file mode 100644 index 000000000..c1670edec --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_syokudai.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ta.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ta.xml new file mode 100644 index 000000000..5e446bf5c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ta.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_timeblock.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_timeblock.xml new file mode 100644 index 000000000..1d6b9e698 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_timeblock.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tite.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tite.xml new file mode 100644 index 000000000..1be65c495 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tite.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tk.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tk.xml new file mode 100644 index 000000000..6b6cce724 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_toki_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_toki_objects.xml new file mode 100644 index 000000000..cd07e60d2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_toki_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_torch2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_torch2.xml new file mode 100644 index 000000000..3388e7d34 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_torch2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_toryo.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_toryo.xml new file mode 100644 index 000000000..73f3dcb1e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_toryo.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tp.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tp.xml new file mode 100644 index 000000000..8ea908825 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tp.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tr.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tr.xml new file mode 100644 index 000000000..17ab9ae39 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tr.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_trap.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_trap.xml new file mode 100644 index 000000000..56195cf41 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_trap.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_triforce_spot.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_triforce_spot.xml new file mode 100644 index 000000000..87d449458 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_triforce_spot.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ts.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ts.xml new file mode 100644 index 000000000..567277bc3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ts.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tsubo.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tsubo.xml new file mode 100644 index 000000000..ee2c5e184 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tsubo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tw.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tw.xml new file mode 100644 index 000000000..d238e10ab --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_tw.xml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_umajump.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_umajump.xml new file mode 100644 index 000000000..2ee4ade46 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_umajump.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_vali.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_vali.xml new file mode 100644 index 000000000..2bab5efaa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_vali.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_vase.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_vase.xml new file mode 100644 index 000000000..091d4c51e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_vase.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_vm.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_vm.xml new file mode 100644 index 000000000..c5b949b36 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_vm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_wallmaster.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_wallmaster.xml new file mode 100644 index 000000000..fbbc4f4af --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_wallmaster.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_warp1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_warp1.xml new file mode 100644 index 000000000..1497d7a10 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_warp1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_warp2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_warp2.xml new file mode 100644 index 000000000..b6d1b3624 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_warp2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_wf.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_wf.xml new file mode 100644 index 000000000..ebfb708d2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_wf.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_wood02.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_wood02.xml new file mode 100644 index 000000000..47ec342ca --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_wood02.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_xc.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_xc.xml new file mode 100644 index 000000000..bb2bf3e7a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_xc.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_yabusame_point.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_yabusame_point.xml new file mode 100644 index 000000000..bed9e8a60 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_yabusame_point.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ydan_objects.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ydan_objects.xml new file mode 100644 index 000000000..e2adf307f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_ydan_objects.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_yukabyun.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_yukabyun.xml new file mode 100644 index 000000000..d594ebbb8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_yukabyun.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zf.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zf.xml new file mode 100644 index 000000000..7f20eb786 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zf.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zg.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zg.xml new file mode 100644 index 000000000..79005516c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zg.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl1.xml new file mode 100644 index 000000000..001e5be14 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl1.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl2.xml new file mode 100644 index 000000000..959a919ec --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl2_anime1.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl2_anime1.xml new file mode 100644 index 000000000..cada50486 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl2_anime1.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl2_anime2.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl2_anime2.xml new file mode 100644 index 000000000..47016e2e0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl2_anime2.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl4.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl4.xml new file mode 100644 index 000000000..8e7a2837e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zl4.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zo.xml b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zo.xml new file mode 100644 index 000000000..77465760e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/objects/object_zo.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Arrow_Fire.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Arrow_Fire.xml new file mode 100644 index 000000000..c4e829f1c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Arrow_Fire.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Arrow_Ice.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Arrow_Ice.xml new file mode 100644 index 000000000..bfb83104f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Arrow_Ice.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Arrow_Light.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Arrow_Light.xml new file mode 100644 index 000000000..d7348bd6c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Arrow_Light.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Bg_Ganon_Otyuka.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Bg_Ganon_Otyuka.xml new file mode 100644 index 000000000..5e7096391 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Bg_Ganon_Otyuka.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Bg_Jya_Cobra.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Bg_Jya_Cobra.xml new file mode 100644 index 000000000..0798a1de0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Bg_Jya_Cobra.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Dodongo.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Dodongo.xml new file mode 100644 index 000000000..25396b7f9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Dodongo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Ganon.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Ganon.xml new file mode 100644 index 000000000..d85ebbea2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Ganon.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Ganon2.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Ganon2.xml new file mode 100644 index 000000000..d70769842 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Ganon2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Sst.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Sst.xml new file mode 100644 index 000000000..51ded47f4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Boss_Sst.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Demo_Shd.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Demo_Shd.xml new file mode 100644 index 000000000..3f6d5243c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Demo_Shd.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Bili.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Bili.xml new file mode 100644 index 000000000..ed0ebdec3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Bili.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Clear_Tag.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Clear_Tag.xml new file mode 100644 index 000000000..f4022c46e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Clear_Tag.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Ganon_Mant.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Ganon_Mant.xml new file mode 100644 index 000000000..fea6529a6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Ganon_Mant.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Ganon_Organ.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Ganon_Organ.xml new file mode 100644 index 000000000..7b3b03732 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Ganon_Organ.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Holl.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Holl.xml new file mode 100644 index 000000000..9a6be6182 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Holl.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Jsjutan.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Jsjutan.xml new file mode 100644 index 000000000..95e53a79b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Jsjutan.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Kanban.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Kanban.xml new file mode 100644 index 000000000..1c470beaa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Kanban.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Sda.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Sda.xml new file mode 100644 index 000000000..ae9ea715f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Sda.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Ssh.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Ssh.xml new file mode 100644 index 000000000..8dd8e396d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Ssh.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_St.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_St.xml new file mode 100644 index 000000000..2b959296f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_St.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Sth.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Sth.xml new file mode 100644 index 000000000..75dc7ea35 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_En_Sth.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_End_Title.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_End_Title.xml new file mode 100644 index 000000000..c9dbe3384 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_End_Title.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_File_Choose.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_File_Choose.xml new file mode 100644 index 000000000..6b0b7848d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_File_Choose.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Magic_Dark.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Magic_Dark.xml new file mode 100644 index 000000000..c5153a78e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Magic_Dark.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Magic_Fire.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Magic_Fire.xml new file mode 100644 index 000000000..e5a353ba3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Magic_Fire.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Magic_Wind.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Magic_Wind.xml new file mode 100644 index 000000000..053730eea --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Magic_Wind.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Spot.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Spot.xml new file mode 100644 index 000000000..5f83c9b1a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Spot.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Storm.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Storm.xml new file mode 100644 index 000000000..0eecf0387 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Storm.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe.xml new file mode 100644 index 000000000..5af20cff6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe2.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe2.xml new file mode 100644 index 000000000..a79d02b74 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe3.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe3.xml new file mode 100644 index 000000000..f55d57ca4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe4.xml b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe4.xml new file mode 100644 index 000000000..d6cfddde8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/overlays/ovl_Oceff_Wipe4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/Bmori1.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/Bmori1.xml new file mode 100644 index 000000000..a39e5ccd1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/Bmori1.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/FIRE_bs.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/FIRE_bs.xml new file mode 100644 index 000000000..89331ecc2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/FIRE_bs.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HAKAdan.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HAKAdan.xml new file mode 100644 index 000000000..a2c20d692 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HAKAdan.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HAKAdanCH.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HAKAdanCH.xml new file mode 100644 index 000000000..ea300b96c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HAKAdanCH.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HAKAdan_bs.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HAKAdan_bs.xml new file mode 100644 index 000000000..d36ac6b77 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HAKAdan_bs.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HIDAN.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HIDAN.xml new file mode 100644 index 000000000..502dcd839 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/HIDAN.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/MIZUsin.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/MIZUsin.xml new file mode 100644 index 000000000..f8b5d8b6c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/MIZUsin.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/MIZUsin_bs.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/MIZUsin_bs.xml new file mode 100644 index 000000000..99ae2b3ef --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/MIZUsin_bs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/bdan.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/bdan.xml new file mode 100644 index 000000000..9eb1ee61a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/bdan.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/bdan_boss.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/bdan_boss.xml new file mode 100644 index 000000000..9fccf2c30 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/bdan_boss.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ddan.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ddan.xml new file mode 100644 index 000000000..c46e8ad27 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ddan.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ddan_boss.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ddan_boss.xml new file mode 100644 index 000000000..05633e53e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ddan_boss.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon.xml new file mode 100644 index 000000000..f857dbe94 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_boss.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_boss.xml new file mode 100644 index 000000000..36c5e8107 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_boss.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_demo.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_demo.xml new file mode 100644 index 000000000..56c98efed --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_demo.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_final.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_final.xml new file mode 100644 index 000000000..1c9bf84b4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_final.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_sonogo.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_sonogo.xml new file mode 100644 index 000000000..7d5f5a123 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_sonogo.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_tou.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_tou.xml new file mode 100644 index 000000000..1ae37b963 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganon_tou.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganontika.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganontika.xml new file mode 100644 index 000000000..ba5542faa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganontika.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganontikasonogo.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganontikasonogo.xml new file mode 100644 index 000000000..a441206b0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ganontikasonogo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/gerudoway.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/gerudoway.xml new file mode 100644 index 000000000..f2d07a288 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/gerudoway.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ice_doukutu.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ice_doukutu.xml new file mode 100644 index 000000000..7ad60c2a0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ice_doukutu.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/jyasinboss.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/jyasinboss.xml new file mode 100644 index 000000000..86c0d317b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/jyasinboss.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/jyasinzou.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/jyasinzou.xml new file mode 100644 index 000000000..166244e29 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/jyasinzou.xml @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/men.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/men.xml new file mode 100644 index 000000000..679436de0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/men.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/moribossroom.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/moribossroom.xml new file mode 100644 index 000000000..b9959eefa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/moribossroom.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ydan.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ydan.xml new file mode 100644 index 000000000..377c7a682 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ydan.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ydan_boss.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ydan_boss.xml new file mode 100644 index 000000000..7ea240547 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/dungeons/ydan_boss.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/bowling.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/bowling.xml new file mode 100644 index 000000000..9a41763a2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/bowling.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/daiyousei_izumi.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/daiyousei_izumi.xml new file mode 100644 index 000000000..4f9a03fc0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/daiyousei_izumi.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hairal_niwa.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hairal_niwa.xml new file mode 100644 index 000000000..06d89f2fe --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hairal_niwa.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hairal_niwa_n.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hairal_niwa_n.xml new file mode 100644 index 000000000..6f4c181e0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hairal_niwa_n.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hakasitarelay.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hakasitarelay.xml new file mode 100644 index 000000000..91be63d14 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hakasitarelay.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hut.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hut.xml new file mode 100644 index 000000000..a4ef5715f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hylia_labo.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hylia_labo.xml new file mode 100644 index 000000000..56822e67a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/hylia_labo.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/impa.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/impa.xml new file mode 100644 index 000000000..db757e3d3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/impa.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kakariko.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kakariko.xml new file mode 100644 index 000000000..e4e9b102c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kakariko.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kenjyanoma.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kenjyanoma.xml new file mode 100644 index 000000000..4e8a58f3b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kenjyanoma.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home.xml new file mode 100644 index 000000000..8c0305493 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home3.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home3.xml new file mode 100644 index 000000000..9f36eb41c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home4.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home4.xml new file mode 100644 index 000000000..eb861aedb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home4.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home5.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home5.xml new file mode 100644 index 000000000..974987fed --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/kokiri_home5.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/labo.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/labo.xml new file mode 100644 index 000000000..c0a9d2eb8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/labo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/link_home.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/link_home.xml new file mode 100644 index 000000000..2fb88ae34 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/link_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/mahouya.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/mahouya.xml new file mode 100644 index 000000000..8ae462f9d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/mahouya.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/malon_stable.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/malon_stable.xml new file mode 100644 index 000000000..aff97eeb8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/malon_stable.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/miharigoya.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/miharigoya.xml new file mode 100644 index 000000000..63f8676ac --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/miharigoya.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/nakaniwa.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/nakaniwa.xml new file mode 100644 index 000000000..2fb2d5e6a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/nakaniwa.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/syatekijyou.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/syatekijyou.xml new file mode 100644 index 000000000..05243b52c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/syatekijyou.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/takaraya.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/takaraya.xml new file mode 100644 index 000000000..5b438980b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/takaraya.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/tent.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/tent.xml new file mode 100644 index 000000000..de72cc5f4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/tent.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/tokinoma.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/tokinoma.xml new file mode 100644 index 000000000..d7878b895 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/tokinoma.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/yousei_izumi_tate.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/yousei_izumi_tate.xml new file mode 100644 index 000000000..3b6dd2dec --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/yousei_izumi_tate.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/yousei_izumi_yoko.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/yousei_izumi_yoko.xml new file mode 100644 index 000000000..90a8d95d0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/indoors/yousei_izumi_yoko.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/enrui.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/enrui.xml new file mode 100644 index 000000000..d8c06e545 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/enrui.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/entra_n.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/entra_n.xml new file mode 100644 index 000000000..5b408ac3a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/entra_n.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hakaana.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hakaana.xml new file mode 100644 index 000000000..e7dc93dd0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hakaana.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hakaana2.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hakaana2.xml new file mode 100644 index 000000000..2d8ba4906 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hakaana2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hakaana_ouke.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hakaana_ouke.xml new file mode 100644 index 000000000..17f53613e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hakaana_ouke.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hiral_demo.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hiral_demo.xml new file mode 100644 index 000000000..1331fdd4c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/hiral_demo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/kakariko3.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/kakariko3.xml new file mode 100644 index 000000000..07b62c44d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/kakariko3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/kakusiana.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/kakusiana.xml new file mode 100644 index 000000000..c3f993ff4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/kakusiana.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/kinsuta.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/kinsuta.xml new file mode 100644 index 000000000..aac0f6c4e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/kinsuta.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_alley.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_alley.xml new file mode 100644 index 000000000..c30467303 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_alley.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_alley_n.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_alley_n.xml new file mode 100644 index 000000000..65db60411 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_alley_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_day.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_day.xml new file mode 100644 index 000000000..00887e69c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_day.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_night.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_night.xml new file mode 100644 index 000000000..c58e38744 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_night.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_ruins.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_ruins.xml new file mode 100644 index 000000000..f0ec75e75 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/market_ruins.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/shrine.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/shrine.xml new file mode 100644 index 000000000..b9ddf2cf7 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/shrine.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/shrine_n.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/shrine_n.xml new file mode 100644 index 000000000..4878338aa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/shrine_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/shrine_r.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/shrine_r.xml new file mode 100644 index 000000000..122036791 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/shrine_r.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/turibori.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/turibori.xml new file mode 100644 index 000000000..0633224d9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/misc/turibori.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/entra.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/entra.xml new file mode 100644 index 000000000..92ee57f59 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/entra.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/souko.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/souko.xml new file mode 100644 index 000000000..8dd9d9e48 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/souko.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot00.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot00.xml new file mode 100644 index 000000000..508d9309b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot00.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot01.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot01.xml new file mode 100644 index 000000000..eb725afa6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot01.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot02.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot02.xml new file mode 100644 index 000000000..c7924c29d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot02.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot03.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot03.xml new file mode 100644 index 000000000..9434185f4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot03.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot04.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot04.xml new file mode 100644 index 000000000..f33860420 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot04.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot05.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot05.xml new file mode 100644 index 000000000..4f7c62b91 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot05.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot06.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot06.xml new file mode 100644 index 000000000..f4af602cf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot06.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot07.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot07.xml new file mode 100644 index 000000000..eeb976f7f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot07.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot08.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot08.xml new file mode 100644 index 000000000..86582f0dc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot08.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot09.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot09.xml new file mode 100644 index 000000000..5bb9e059c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot09.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot10.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot10.xml new file mode 100644 index 000000000..66365e3d8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot11.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot11.xml new file mode 100644 index 000000000..76ff3b822 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot11.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot12.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot12.xml new file mode 100644 index 000000000..e21523b21 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot12.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot13.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot13.xml new file mode 100644 index 000000000..c68913065 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot13.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot15.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot15.xml new file mode 100644 index 000000000..e75f7b684 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot15.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot16.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot16.xml new file mode 100644 index 000000000..f41b226f8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot16.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot17.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot17.xml new file mode 100644 index 000000000..feb267251 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot17.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot18.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot18.xml new file mode 100644 index 000000000..d70fccf4b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot18.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot20.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot20.xml new file mode 100644 index 000000000..1381f6ecb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/overworld/spot20.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/alley_shop.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/alley_shop.xml new file mode 100644 index 000000000..95548de1b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/alley_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/drag.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/drag.xml new file mode 100644 index 000000000..acb6515fb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/drag.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/face_shop.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/face_shop.xml new file mode 100644 index 000000000..16a974608 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/face_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/golon.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/golon.xml new file mode 100644 index 000000000..c58672798 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/golon.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/kokiri_shop.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/kokiri_shop.xml new file mode 100644 index 000000000..50cd633e5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/kokiri_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/night_shop.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/night_shop.xml new file mode 100644 index 000000000..5954d9c83 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/night_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/shop1.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/shop1.xml new file mode 100644 index 000000000..525a06d63 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/shop1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/zoora.xml b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/zoora.xml new file mode 100644 index 000000000..0e4ac18f8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/scenes/shops/zoora.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/text/elf_message_field.xml b/soh/assets/xml/GC_MQ_NTSC_J/text/elf_message_field.xml new file mode 100644 index 000000000..789a554ce --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/text/elf_message_field.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_J/text/elf_message_ydan.xml b/soh/assets/xml/GC_MQ_NTSC_J/text/elf_message_ydan.xml new file mode 100644 index 000000000..f784afcf4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/text/elf_message_ydan.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_J/text/message_data_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/text/message_data_static.xml new file mode 100644 index 000000000..94948fa8e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/text/message_data_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/backgrounds.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/backgrounds.xml new file mode 100644 index 000000000..c60ff57a8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/backgrounds.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/boss_title_cards.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/boss_title_cards.xml new file mode 100644 index 000000000..84f555bd1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/boss_title_cards.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/do_action_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/do_action_static.xml new file mode 100644 index 000000000..efabd54a5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/do_action_static.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_24_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_24_static.xml new file mode 100644 index 000000000..cdb8cc737 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_24_static.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_dungeon_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_dungeon_static.xml new file mode 100644 index 000000000..873c490fc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_dungeon_static.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_field_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_field_static.xml new file mode 100644 index 000000000..ed991406b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_field_static.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_gameover_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_gameover_static.xml new file mode 100644 index 000000000..ffd392868 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_gameover_static.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_jpn_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_jpn_static.xml new file mode 100644 index 000000000..f2fe854b8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_jpn_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_nes_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_nes_static.xml new file mode 100644 index 000000000..6cd92acfc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_nes_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_static.xml new file mode 100644 index 000000000..9e844615b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/icon_item_static.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/item_name_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/item_name_static.xml new file mode 100644 index 000000000..266b3c200 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/item_name_static.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/kanji.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/kanji.xml new file mode 100644 index 000000000..5159387a1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/kanji.xml @@ -0,0 +1,3984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/map_48x85_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/map_48x85_static.xml new file mode 100644 index 000000000..b2ea46340 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/map_48x85_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/map_grand_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/map_grand_static.xml new file mode 100644 index 000000000..201955bfc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/map_grand_static.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/map_i_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/map_i_static.xml new file mode 100644 index 000000000..1721f6d84 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/map_i_static.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/map_name_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/map_name_static.xml new file mode 100644 index 000000000..ca4c4c0bd --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/map_name_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/message_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/message_static.xml new file mode 100644 index 000000000..afdde60de --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/message_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/message_texture_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/message_texture_static.xml new file mode 100644 index 000000000..bbf7e1259 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/message_texture_static.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/nes_font_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/nes_font_static.xml new file mode 100644 index 000000000..f1b80ee04 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/nes_font_static.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/nintendo_rogo_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/nintendo_rogo_static.xml new file mode 100644 index 000000000..f09de3b0f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/nintendo_rogo_static.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/parameter_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/parameter_static.xml new file mode 100644 index 000000000..c51dacf1f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/parameter_static.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/place_title_cards.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/place_title_cards.xml new file mode 100644 index 000000000..b688cce00 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/place_title_cards.xml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/skyboxes.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/skyboxes.xml new file mode 100644 index 000000000..104ffb2a3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/skyboxes.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_J/textures/title_static.xml b/soh/assets/xml/GC_MQ_NTSC_J/textures/title_static.xml new file mode 100644 index 000000000..5f58c5a82 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_J/textures/title_static.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/audio/Audio.xml b/soh/assets/xml/GC_MQ_NTSC_U/audio/Audio.xml new file mode 100644 index 000000000..4c5b001e0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/audio/Audio.xml @@ -0,0 +1,1558 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/code/fbdemo_circle.xml b/soh/assets/xml/GC_MQ_NTSC_U/code/fbdemo_circle.xml new file mode 100644 index 000000000..a117b43ae --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/code/fbdemo_circle.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/code/fbdemo_triforce.xml b/soh/assets/xml/GC_MQ_NTSC_U/code/fbdemo_triforce.xml new file mode 100644 index 000000000..2353ae220 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/code/fbdemo_triforce.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/code/fbdemo_wipe1.xml b/soh/assets/xml/GC_MQ_NTSC_U/code/fbdemo_wipe1.xml new file mode 100644 index 000000000..f2de3afce --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/code/fbdemo_wipe1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/code/sys_matrix.xml b/soh/assets/xml/GC_MQ_NTSC_U/code/sys_matrix.xml new file mode 100644 index 000000000..7d1e905d3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/code/sys_matrix.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/misc/link_animetion.xml b/soh/assets/xml/GC_MQ_NTSC_U/misc/link_animetion.xml new file mode 100644 index 000000000..9de1e92d3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/misc/link_animetion.xml @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/gameplay_dangeon_keep.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/gameplay_dangeon_keep.xml new file mode 100644 index 000000000..5b1a9050d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/gameplay_dangeon_keep.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/gameplay_field_keep.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/gameplay_field_keep.xml new file mode 100644 index 000000000..011e8f7fc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/gameplay_field_keep.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/gameplay_keep.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/gameplay_keep.xml new file mode 100644 index 000000000..94eee8845 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/gameplay_keep.xml @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_Bb.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_Bb.xml new file mode 100644 index 000000000..5d04bde45 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_Bb.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ahg.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ahg.xml new file mode 100644 index 000000000..4d37b1b11 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ahg.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_am.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_am.xml new file mode 100644 index 000000000..b70c70d70 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_am.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ane.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ane.xml new file mode 100644 index 000000000..1e29b351e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ane.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ani.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ani.xml new file mode 100644 index 000000000..c70621c6f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ani.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_anubice.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_anubice.xml new file mode 100644 index 000000000..fb029586b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_anubice.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_aob.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_aob.xml new file mode 100644 index 000000000..e6202d0cf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_aob.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_b_heart.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_b_heart.xml new file mode 100644 index 000000000..00f7cd677 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_b_heart.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bba.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bba.xml new file mode 100644 index 000000000..ccc5c2136 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bba.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bdan_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bdan_objects.xml new file mode 100644 index 000000000..dcd56d385 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bdan_objects.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bdoor.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bdoor.xml new file mode 100644 index 000000000..a092f0c23 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bdoor.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bg.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bg.xml new file mode 100644 index 000000000..791226b71 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bg.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bigokuta.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bigokuta.xml new file mode 100644 index 000000000..1c7d39e31 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bigokuta.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bird.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bird.xml new file mode 100644 index 000000000..167a5022d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bird.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bji.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bji.xml new file mode 100644 index 000000000..c665b6b00 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bji.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bl.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bl.xml new file mode 100644 index 000000000..1c2ef4ec6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_blkobj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_blkobj.xml new file mode 100644 index 000000000..345a8ebd9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_blkobj.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bob.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bob.xml new file mode 100644 index 000000000..289e994e4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bob.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_boj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_boj.xml new file mode 100644 index 000000000..4be4764ab --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_boj.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bombf.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bombf.xml new file mode 100644 index 000000000..83e60248d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bombf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bombiwa.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bombiwa.xml new file mode 100644 index 000000000..26ab6b4f3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bombiwa.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bowl.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bowl.xml new file mode 100644 index 000000000..ffe6d43db --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bowl.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_box.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_box.xml new file mode 100644 index 000000000..106d2d335 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_box.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_brob.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_brob.xml new file mode 100644 index 000000000..718dcd561 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_brob.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bubble.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bubble.xml new file mode 100644 index 000000000..f5de18692 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bubble.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bv.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bv.xml new file mode 100644 index 000000000..58db6e1d4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bv.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bw.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bw.xml new file mode 100644 index 000000000..6fd39fbb1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bw.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bwall.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bwall.xml new file mode 100644 index 000000000..d4f43ddc1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bwall.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bxa.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bxa.xml new file mode 100644 index 000000000..fb78c117e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_bxa.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cne.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cne.xml new file mode 100644 index 000000000..0c14d0bc5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cne.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cob.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cob.xml new file mode 100644 index 000000000..ba051cfa7 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cob.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cow.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cow.xml new file mode 100644 index 000000000..5d067c329 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cow.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_crow.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_crow.xml new file mode 100644 index 000000000..77337c644 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_crow.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cs.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cs.xml new file mode 100644 index 000000000..83804ccaf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_cs.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_d_elevator.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_d_elevator.xml new file mode 100644 index 000000000..6be59c154 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_d_elevator.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_d_hsblock.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_d_hsblock.xml new file mode 100644 index 000000000..4bb50c2b4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_d_hsblock.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_d_lift.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_d_lift.xml new file mode 100644 index 000000000..291238519 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_d_lift.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_daiku.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_daiku.xml new file mode 100644 index 000000000..1524c7a26 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_daiku.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ddan_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ddan_objects.xml new file mode 100644 index 000000000..3fc563b96 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ddan_objects.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dekubaba.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dekubaba.xml new file mode 100644 index 000000000..7202a833f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dekubaba.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dekujr.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dekujr.xml new file mode 100644 index 000000000..e906bf61c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dekujr.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dekunuts.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dekunuts.xml new file mode 100644 index 000000000..5fceef416 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dekunuts.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_demo_6k.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_demo_6k.xml new file mode 100644 index 000000000..73058d5e4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_demo_6k.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_demo_kekkai.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_demo_kekkai.xml new file mode 100644 index 000000000..aa54bc2ee --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_demo_kekkai.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_demo_tre_lgt.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_demo_tre_lgt.xml new file mode 100644 index 000000000..9ea19012b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_demo_tre_lgt.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dh.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dh.xml new file mode 100644 index 000000000..7a52d7dbe --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dh.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dnk.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dnk.xml new file mode 100644 index 000000000..3bce34304 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dnk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dns.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dns.xml new file mode 100644 index 000000000..8b78ffcf2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dns.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dodojr.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dodojr.xml new file mode 100644 index 000000000..4dfd7d6e4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dodojr.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dodongo.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dodongo.xml new file mode 100644 index 000000000..779e20e9d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dodongo.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dog.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dog.xml new file mode 100644 index 000000000..ef00442b6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dog.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_door_gerudo.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_door_gerudo.xml new file mode 100644 index 000000000..2f1726204 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_door_gerudo.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_door_killer.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_door_killer.xml new file mode 100644 index 000000000..a37f590d6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_door_killer.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ds.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ds.xml new file mode 100644 index 000000000..0413a9e2e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ds.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ds2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ds2.xml new file mode 100644 index 000000000..683bcc68d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ds2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_du.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_du.xml new file mode 100644 index 000000000..0babd962b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_du.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dy_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dy_obj.xml new file mode 100644 index 000000000..5e792edb5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_dy_obj.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ec.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ec.xml new file mode 100644 index 000000000..7ec83e284 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ec.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_crystal_light.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_crystal_light.xml new file mode 100644 index 000000000..9215b6a39 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_crystal_light.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_doughnut.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_doughnut.xml new file mode 100644 index 000000000..7f12c56f5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_doughnut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_erupc.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_erupc.xml new file mode 100644 index 000000000..800d9535f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_erupc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_fire_ball.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_fire_ball.xml new file mode 100644 index 000000000..2fc65b16f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_fire_ball.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_flash.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_flash.xml new file mode 100644 index 000000000..5f962f162 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_flash.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_lgt_shower.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_lgt_shower.xml new file mode 100644 index 000000000..67ef5ce7e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_lgt_shower.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_star_field.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_star_field.xml new file mode 100644 index 000000000..00b47c460 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_star_field.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_tw.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_tw.xml new file mode 100644 index 000000000..de5376569 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_efc_tw.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ei.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ei.xml new file mode 100644 index 000000000..e4132491f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ei.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fa.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fa.xml new file mode 100644 index 000000000..2f1bf9a5e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fa.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fd.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fd.xml new file mode 100644 index 000000000..9bc25d3a6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fd.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fd2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fd2.xml new file mode 100644 index 000000000..44b5f5f9c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fd2.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fhg.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fhg.xml new file mode 100644 index 000000000..6a275daeb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fhg.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fire.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fire.xml new file mode 100644 index 000000000..49bf620cb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fire.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_firefly.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_firefly.xml new file mode 100644 index 000000000..8c26a4341 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_firefly.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fish.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fish.xml new file mode 100644 index 000000000..f5ad4f6da --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fish.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fr.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fr.xml new file mode 100644 index 000000000..25ee2ad42 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fr.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fu.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fu.xml new file mode 100644 index 000000000..82c449e3d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fu.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fw.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fw.xml new file mode 100644 index 000000000..ee9821d26 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fw.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fz.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fz.xml new file mode 100644 index 000000000..dad6fec5c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_fz.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon.xml new file mode 100644 index 000000000..5b68602ba --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon2.xml new file mode 100644 index 000000000..7e715dd41 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon2.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_anime1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_anime1.xml new file mode 100644 index 000000000..b1016299b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_anime1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_anime2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_anime2.xml new file mode 100644 index 000000000..180e5995c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_anime2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_anime3.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_anime3.xml new file mode 100644 index 000000000..be4c4dcb1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_anime3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_objects.xml new file mode 100644 index 000000000..5e32610ff --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ganon_objects.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ge1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ge1.xml new file mode 100644 index 000000000..79e0768b8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ge1.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_geff.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_geff.xml new file mode 100644 index 000000000..f0667743b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_geff.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_geldb.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_geldb.xml new file mode 100644 index 000000000..49b12ef2e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_geldb.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_arrow.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_arrow.xml new file mode 100644 index 000000000..4b58787a9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_arrow.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_arrowcase.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_arrowcase.xml new file mode 100644 index 000000000..267b0a734 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_arrowcase.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bean.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bean.xml new file mode 100644 index 000000000..e74247816 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bean.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bomb_1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bomb_1.xml new file mode 100644 index 000000000..bae86c11d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bomb_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bomb_2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bomb_2.xml new file mode 100644 index 000000000..1400c4a4d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bomb_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bombpouch.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bombpouch.xml new file mode 100644 index 000000000..07134748c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bombpouch.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_boomerang.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_boomerang.xml new file mode 100644 index 000000000..3c1a0fe7f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_boomerang.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_boots_2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_boots_2.xml new file mode 100644 index 000000000..3bcb6a47a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_boots_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bosskey.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bosskey.xml new file mode 100644 index 000000000..e5e4bc86c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bosskey.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bottle.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bottle.xml new file mode 100644 index 000000000..3b0884a03 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bottle.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bottle_letter.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bottle_letter.xml new file mode 100644 index 000000000..443219caf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bottle_letter.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bow.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bow.xml new file mode 100644 index 000000000..946e9c496 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bow.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bracelet.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bracelet.xml new file mode 100644 index 000000000..5a0b62a60 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_bracelet.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_brokensword.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_brokensword.xml new file mode 100644 index 000000000..408741ac5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_brokensword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_butterfly.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_butterfly.xml new file mode 100644 index 000000000..7b60a7724 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_butterfly.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_clothes.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_clothes.xml new file mode 100644 index 000000000..3f897b6d1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_clothes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_coin.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_coin.xml new file mode 100644 index 000000000..22e29f255 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_coin.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_compass.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_compass.xml new file mode 100644 index 000000000..076229b11 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_compass.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_dekupouch.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_dekupouch.xml new file mode 100644 index 000000000..8925e6fa5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_dekupouch.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_egg.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_egg.xml new file mode 100644 index 000000000..2b2e2847d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_egg.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_eye_lotion.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_eye_lotion.xml new file mode 100644 index 000000000..5128c5f6f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_eye_lotion.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_fire.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_fire.xml new file mode 100644 index 000000000..4bfd76a7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_fire.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_fish.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_fish.xml new file mode 100644 index 000000000..edb39dc29 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_fish.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_frog.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_frog.xml new file mode 100644 index 000000000..a656c306b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_frog.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_gerudo.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_gerudo.xml new file mode 100644 index 000000000..d65daee8e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_gerudo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_gerudomask.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_gerudomask.xml new file mode 100644 index 000000000..cfcb878d9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_gerudomask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ghost.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ghost.xml new file mode 100644 index 000000000..795f0cfd1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ghost.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_glasses.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_glasses.xml new file mode 100644 index 000000000..63d32ab5a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_glasses.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_gloves.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_gloves.xml new file mode 100644 index 000000000..0e1c4259d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_gloves.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_goddess.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_goddess.xml new file mode 100644 index 000000000..50cbdd891 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_goddess.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_golonmask.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_golonmask.xml new file mode 100644 index 000000000..844d90e71 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_golonmask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_grass.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_grass.xml new file mode 100644 index 000000000..ae7834201 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_grass.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hammer.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hammer.xml new file mode 100644 index 000000000..feb5c8659 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hammer.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_heart.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_heart.xml new file mode 100644 index 000000000..48e78b1b5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_heart.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hearts.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hearts.xml new file mode 100644 index 000000000..d2e763e63 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hearts.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hookshot.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hookshot.xml new file mode 100644 index 000000000..a6b3b0fda --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hookshot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hoverboots.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hoverboots.xml new file mode 100644 index 000000000..6d41df8fd --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_hoverboots.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_insect.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_insect.xml new file mode 100644 index 000000000..7af5b5b3b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_insect.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_jewel.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_jewel.xml new file mode 100644 index 000000000..e83c65116 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_jewel.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_key.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_key.xml new file mode 100644 index 000000000..a37d45a71 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_key.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ki_tan_mask.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ki_tan_mask.xml new file mode 100644 index 000000000..46eff7d3e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ki_tan_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_letter.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_letter.xml new file mode 100644 index 000000000..bea868339 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_letter.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_liquid.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_liquid.xml new file mode 100644 index 000000000..18a5c3d7a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_liquid.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_longsword.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_longsword.xml new file mode 100644 index 000000000..7161e42e3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_longsword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_m_arrow.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_m_arrow.xml new file mode 100644 index 000000000..0fd659ae9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_m_arrow.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_magicpot.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_magicpot.xml new file mode 100644 index 000000000..7623e6353 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_magicpot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_map.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_map.xml new file mode 100644 index 000000000..471c1dab9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_map.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_medal.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_medal.xml new file mode 100644 index 000000000..28e5b1e68 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_medal.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_melody.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_melody.xml new file mode 100644 index 000000000..b01fca953 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_melody.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_milk.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_milk.xml new file mode 100644 index 000000000..a3e223b3e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_milk.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_mushroom.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_mushroom.xml new file mode 100644 index 000000000..5b19bca74 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_mushroom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_niwatori.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_niwatori.xml new file mode 100644 index 000000000..c8389f62c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_niwatori.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_nuts.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_nuts.xml new file mode 100644 index 000000000..c59903c43 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_nuts.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ocarina.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ocarina.xml new file mode 100644 index 000000000..82607677d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ocarina.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ocarina_0.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ocarina_0.xml new file mode 100644 index 000000000..2c5f70d98 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ocarina_0.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_pachinko.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_pachinko.xml new file mode 100644 index 000000000..5f808baf9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_pachinko.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_powder.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_powder.xml new file mode 100644 index 000000000..fb7dc0155 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_powder.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_prescription.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_prescription.xml new file mode 100644 index 000000000..75ae7eb2b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_prescription.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_purse.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_purse.xml new file mode 100644 index 000000000..054731dec --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_purse.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_rabit_mask.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_rabit_mask.xml new file mode 100644 index 000000000..9d4eb9487 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_rabit_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_redead_mask.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_redead_mask.xml new file mode 100644 index 000000000..7de08487f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_redead_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_rupy.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_rupy.xml new file mode 100644 index 000000000..0a1af96d0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_rupy.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_saw.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_saw.xml new file mode 100644 index 000000000..dcc038b7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_saw.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_scale.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_scale.xml new file mode 100644 index 000000000..1cf5de5b9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_scale.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_seed.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_seed.xml new file mode 100644 index 000000000..82c15c82d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_seed.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_shield_1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_shield_1.xml new file mode 100644 index 000000000..2f11e3f6d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_shield_1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_shield_2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_shield_2.xml new file mode 100644 index 000000000..176ae025f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_shield_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_shield_3.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_shield_3.xml new file mode 100644 index 000000000..8d1e5dafd --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_shield_3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_skj_mask.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_skj_mask.xml new file mode 100644 index 000000000..e6c90f76f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_skj_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_soldout.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_soldout.xml new file mode 100644 index 000000000..a15b1253e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_soldout.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_soul.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_soul.xml new file mode 100644 index 000000000..a68178eba --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_soul.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_stick.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_stick.xml new file mode 100644 index 000000000..fed89f465 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_stick.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_sutaru.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_sutaru.xml new file mode 100644 index 000000000..a2606afbe --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_sutaru.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_sword_1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_sword_1.xml new file mode 100644 index 000000000..e1119abca --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_sword_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ticketstone.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ticketstone.xml new file mode 100644 index 000000000..73bf888d1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_ticketstone.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_truth_mask.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_truth_mask.xml new file mode 100644 index 000000000..3b4edf3de --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_truth_mask.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_zoramask.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_zoramask.xml new file mode 100644 index 000000000..e3b1ab10e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gi_zoramask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gj.xml new file mode 100644 index 000000000..ee6dab74f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gj.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gjyo_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gjyo_objects.xml new file mode 100644 index 000000000..ea4f8444f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gjyo_objects.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gla.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gla.xml new file mode 100644 index 000000000..499a3720d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gla.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gm.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gm.xml new file mode 100644 index 000000000..91b10cc42 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gm.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gnd.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gnd.xml new file mode 100644 index 000000000..3ae3b57f3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gnd.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gnd_magic.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gnd_magic.xml new file mode 100644 index 000000000..a88d419d7 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gnd_magic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gndd.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gndd.xml new file mode 100644 index 000000000..8bf5d770c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gndd.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_god_lgt.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_god_lgt.xml new file mode 100644 index 000000000..60df9e469 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_god_lgt.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gol.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gol.xml new file mode 100644 index 000000000..7e04508cb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gol.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_goma.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_goma.xml new file mode 100644 index 000000000..ec3e42114 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_goma.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_goroiwa.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_goroiwa.xml new file mode 100644 index 000000000..5d406e957 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_goroiwa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gr.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gr.xml new file mode 100644 index 000000000..5f7360ae5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gr.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gs.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gs.xml new file mode 100644 index 000000000..145be1665 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gs.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gt.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gt.xml new file mode 100644 index 000000000..1d79d4e39 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_gt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_haka.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_haka.xml new file mode 100644 index 000000000..f6b263c37 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_haka.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_haka_door.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_haka_door.xml new file mode 100644 index 000000000..1376d0356 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_haka_door.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_haka_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_haka_objects.xml new file mode 100644 index 000000000..3ca6d27c0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_haka_objects.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hakach_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hakach_objects.xml new file mode 100644 index 000000000..0de02aaf1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hakach_objects.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hata.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hata.xml new file mode 100644 index 000000000..b0324c3be --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hata.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_heavy_object.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_heavy_object.xml new file mode 100644 index 000000000..ecc795321 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_heavy_object.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hidan_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hidan_objects.xml new file mode 100644 index 000000000..f41c0ee5e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hidan_objects.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hintnuts.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hintnuts.xml new file mode 100644 index 000000000..a7290f395 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hintnuts.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hni.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hni.xml new file mode 100644 index 000000000..6b317eb7a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hni.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse.xml new file mode 100644 index 000000000..74619e597 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_ganon.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_ganon.xml new file mode 100644 index 000000000..0a55462e2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_ganon.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_link_child.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_link_child.xml new file mode 100644 index 000000000..146c564f5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_link_child.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_normal.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_normal.xml new file mode 100644 index 000000000..2facab39c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_normal.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_zelda.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_zelda.xml new file mode 100644 index 000000000..af270c658 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_horse_zelda.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hs.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hs.xml new file mode 100644 index 000000000..cf5d06e1a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_hs.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_human.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_human.xml new file mode 100644 index 000000000..05795cb33 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_human.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ice_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ice_objects.xml new file mode 100644 index 000000000..c7d059d70 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ice_objects.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ik.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ik.xml new file mode 100644 index 000000000..8a6028f7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ik.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_im.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_im.xml new file mode 100644 index 000000000..a628a113a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_im.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_in.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_in.xml new file mode 100644 index 000000000..84c114047 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_in.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ingate.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ingate.xml new file mode 100644 index 000000000..e6be42beb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ingate.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jj.xml new file mode 100644 index 000000000..62bae8cb9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jj.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_js.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_js.xml new file mode 100644 index 000000000..ff7bd3efa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_js.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jya_door.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jya_door.xml new file mode 100644 index 000000000..60a7b3788 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jya_door.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jya_iron.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jya_iron.xml new file mode 100644 index 000000000..c6f6773c6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jya_iron.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jya_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jya_obj.xml new file mode 100644 index 000000000..a1f19b806 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_jya_obj.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ka.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ka.xml new file mode 100644 index 000000000..eb952732b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ka.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kanban.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kanban.xml new file mode 100644 index 000000000..9ffc7a2ce --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kanban.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kibako2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kibako2.xml new file mode 100644 index 000000000..a701b294d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kibako2.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kingdodongo.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kingdodongo.xml new file mode 100644 index 000000000..a865c15de --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kingdodongo.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_km1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_km1.xml new file mode 100644 index 000000000..0a918a798 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_km1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kusa.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kusa.xml new file mode 100644 index 000000000..67291a554 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kusa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kw1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kw1.xml new file mode 100644 index 000000000..eab561b1f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kw1.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kz.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kz.xml new file mode 100644 index 000000000..4624fefdb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_kz.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_light_ring.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_light_ring.xml new file mode 100644 index 000000000..babe7d2aa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_light_ring.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_lightbox.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_lightbox.xml new file mode 100644 index 000000000..552a79d7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_lightbox.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_lightswitch.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_lightswitch.xml new file mode 100644 index 000000000..cfd5dcfb4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_lightswitch.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_link_boy.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_link_boy.xml new file mode 100644 index 000000000..6351af505 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_link_boy.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_link_child.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_link_child.xml new file mode 100644 index 000000000..0de400373 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_link_child.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ma1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ma1.xml new file mode 100644 index 000000000..63eeb3895 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ma1.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ma2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ma2.xml new file mode 100644 index 000000000..ce5910fb8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ma2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mag.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mag.xml new file mode 100644 index 000000000..dfe25df27 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mag.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mamenoki.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mamenoki.xml new file mode 100644 index 000000000..819d89022 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mamenoki.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mastergolon.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mastergolon.xml new file mode 100644 index 000000000..6dd9d1659 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mastergolon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_masterkokiri.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_masterkokiri.xml new file mode 100644 index 000000000..af5a9ec15 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_masterkokiri.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_masterkokirihead.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_masterkokirihead.xml new file mode 100644 index 000000000..c64aa1c49 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_masterkokirihead.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_masterzoora.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_masterzoora.xml new file mode 100644 index 000000000..2c703274e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_masterzoora.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mb.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mb.xml new file mode 100644 index 000000000..23c0930c0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mb.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_md.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_md.xml new file mode 100644 index 000000000..161c73dca --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_md.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_medal.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_medal.xml new file mode 100644 index 000000000..533872a55 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_medal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_menkuri_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_menkuri_objects.xml new file mode 100644 index 000000000..4c2b51df5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_menkuri_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mir_ray.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mir_ray.xml new file mode 100644 index 000000000..2acc9391a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mir_ray.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mizu_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mizu_objects.xml new file mode 100644 index 000000000..5a18b95cf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mizu_objects.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin.xml new file mode 100644 index 000000000..daf9b0541 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_dark.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_dark.xml new file mode 100644 index 000000000..2fa0bdbe4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_dark.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_flame.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_flame.xml new file mode 100644 index 000000000..6274feaee --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_flame.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_flash.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_flash.xml new file mode 100644 index 000000000..c1040ea11 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_flash.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_ice.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_ice.xml new file mode 100644 index 000000000..1aaeea193 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_ice.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_oka.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_oka.xml new file mode 100644 index 000000000..0f823b923 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_oka.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_soul.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_soul.xml new file mode 100644 index 000000000..6386f7f9e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_soul.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_wind.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_wind.xml new file mode 100644 index 000000000..8bba7eb91 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mjin_wind.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mk.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mk.xml new file mode 100644 index 000000000..0b4aaae8a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mk.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mm.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mm.xml new file mode 100644 index 000000000..b27837e57 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mo.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mo.xml new file mode 100644 index 000000000..f450368f3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mo.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri1.xml new file mode 100644 index 000000000..bb1b31e2f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri1a.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri1a.xml new file mode 100644 index 000000000..c750ce20d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri1a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri2.xml new file mode 100644 index 000000000..785b85857 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri2a.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri2a.xml new file mode 100644 index 000000000..ad1bb4d5f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_hineri2a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_objects.xml new file mode 100644 index 000000000..58ea8c085 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_tex.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_tex.xml new file mode 100644 index 000000000..8ba4ff2d3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mori_tex.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ms.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ms.xml new file mode 100644 index 000000000..a87d0e6b3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ms.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mu.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mu.xml new file mode 100644 index 000000000..7251ff721 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_mu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_nb.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_nb.xml new file mode 100644 index 000000000..74de9e285 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_nb.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_niw.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_niw.xml new file mode 100644 index 000000000..4eafec956 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_niw.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_nwc.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_nwc.xml new file mode 100644 index 000000000..96ffa3238 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_nwc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ny.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ny.xml new file mode 100644 index 000000000..e2e8187ff --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ny.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA1.xml new file mode 100644 index 000000000..1d665f101 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA10.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA10.xml new file mode 100644 index 000000000..65d080834 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA10.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA11.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA11.xml new file mode 100644 index 000000000..92ae474b6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA11.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA2.xml new file mode 100644 index 000000000..ffdcd7989 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA2.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA3.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA3.xml new file mode 100644 index 000000000..a492bd875 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA4.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA4.xml new file mode 100644 index 000000000..dcdbbfff9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA5.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA5.xml new file mode 100644 index 000000000..55072176d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA6.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA6.xml new file mode 100644 index 000000000..c17a51088 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA6.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA7.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA7.xml new file mode 100644 index 000000000..52c68f639 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA7.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA8.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA8.xml new file mode 100644 index 000000000..8ed2d3df5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA8.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA9.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA9.xml new file mode 100644 index 000000000..d5c16abfc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oA9.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB1.xml new file mode 100644 index 000000000..2f50c967b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB2.xml new file mode 100644 index 000000000..230783cea --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB3.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB3.xml new file mode 100644 index 000000000..1c42ddacc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB3.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB4.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB4.xml new file mode 100644 index 000000000..2924c9e75 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oB4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE1.xml new file mode 100644 index 000000000..4d5b1663f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE1.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE10.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE10.xml new file mode 100644 index 000000000..04ce91437 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE10.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE11.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE11.xml new file mode 100644 index 000000000..04f6f186d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE11.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE12.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE12.xml new file mode 100644 index 000000000..a5fa39fd2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE12.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE1s.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE1s.xml new file mode 100644 index 000000000..d311e6010 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE1s.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE2.xml new file mode 100644 index 000000000..af62ad6d1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE2.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE3.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE3.xml new file mode 100644 index 000000000..95227da38 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE3.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE4.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE4.xml new file mode 100644 index 000000000..ae48d2ade --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE4.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE4s.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE4s.xml new file mode 100644 index 000000000..6037de52f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE4s.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE5.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE5.xml new file mode 100644 index 000000000..f5edf745a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE6.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE6.xml new file mode 100644 index 000000000..95bb602b6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE6.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE7.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE7.xml new file mode 100644 index 000000000..b3e588d4c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE7.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE8.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE8.xml new file mode 100644 index 000000000..be5de2494 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE8.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE9.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE9.xml new file mode 100644 index 000000000..8ea7ee18c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE9.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE_anime.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE_anime.xml new file mode 100644 index 000000000..f6b4659e2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oE_anime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oF1d_map.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oF1d_map.xml new file mode 100644 index 000000000..f14fecd82 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oF1d_map.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oF1s.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oF1s.xml new file mode 100644 index 000000000..fe41dde63 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_oF1s.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_o_anime.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_o_anime.xml new file mode 100644 index 000000000..4ef4ac44c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_o_anime.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_okuta.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_okuta.xml new file mode 100644 index 000000000..b4fccea6f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_okuta.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_opening_demo1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_opening_demo1.xml new file mode 100644 index 000000000..fd0323027 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_opening_demo1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_os.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_os.xml new file mode 100644 index 000000000..5880a9293 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_os.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_os_anime.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_os_anime.xml new file mode 100644 index 000000000..f23636343 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_os_anime.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ossan.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ossan.xml new file mode 100644 index 000000000..5788e3a20 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ossan.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ouke_haka.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ouke_haka.xml new file mode 100644 index 000000000..11da9b26e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ouke_haka.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_owl.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_owl.xml new file mode 100644 index 000000000..64fdf64c5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_owl.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_peehat.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_peehat.xml new file mode 100644 index 000000000..42ee66cde --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_peehat.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_po_composer.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_po_composer.xml new file mode 100644 index 000000000..ff995efce --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_po_composer.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_po_field.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_po_field.xml new file mode 100644 index 000000000..78bc0d65a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_po_field.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_po_sisters.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_po_sisters.xml new file mode 100644 index 000000000..b429be258 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_po_sisters.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_poh.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_poh.xml new file mode 100644 index 000000000..be6d6eff4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_poh.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ps.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ps.xml new file mode 100644 index 000000000..9f9c894a6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ps.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_pu_box.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_pu_box.xml new file mode 100644 index 000000000..e1d686e97 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_pu_box.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rd.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rd.xml new file mode 100644 index 000000000..22c7d3373 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rd.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_reeba.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_reeba.xml new file mode 100644 index 000000000..32c697bd9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_reeba.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_relay_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_relay_objects.xml new file mode 100644 index 000000000..47b92fcd2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_relay_objects.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rl.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rl.xml new file mode 100644 index 000000000..2a5ad30f6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rl.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rr.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rr.xml new file mode 100644 index 000000000..98726b14b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rr.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rs.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rs.xml new file mode 100644 index 000000000..152b5489e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_rs.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ru1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ru1.xml new file mode 100644 index 000000000..3d413619f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ru1.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ru2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ru2.xml new file mode 100644 index 000000000..fedf37d48 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ru2.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sa.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sa.xml new file mode 100644 index 000000000..ec45ac961 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sa.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sb.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sb.xml new file mode 100644 index 000000000..64d3bb005 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sb.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sd.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sd.xml new file mode 100644 index 000000000..fb58428c3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sd.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_shop_dungen.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_shop_dungen.xml new file mode 100644 index 000000000..594c43d39 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_shop_dungen.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_shopnuts.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_shopnuts.xml new file mode 100644 index 000000000..7065f8941 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_shopnuts.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_siofuki.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_siofuki.xml new file mode 100644 index 000000000..a23240a72 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_siofuki.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sk2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sk2.xml new file mode 100644 index 000000000..f2e7ef6d8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sk2.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_skb.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_skb.xml new file mode 100644 index 000000000..5b5efb484 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_skb.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_skj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_skj.xml new file mode 100644 index 000000000..74548e518 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_skj.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot00_break.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot00_break.xml new file mode 100644 index 000000000..d3be88315 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot00_break.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot00_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot00_objects.xml new file mode 100644 index 000000000..10fb13aea --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot00_objects.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_matoya.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_matoya.xml new file mode 100644 index 000000000..d44b944e0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_matoya.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_matoyab.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_matoyab.xml new file mode 100644 index 000000000..720f50cd3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_matoyab.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_objects.xml new file mode 100644 index 000000000..413e032a9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_objects.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_objects2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_objects2.xml new file mode 100644 index 000000000..36741a949 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot01_objects2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot02_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot02_objects.xml new file mode 100644 index 000000000..65f45ff51 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot02_objects.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot03_object.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot03_object.xml new file mode 100644 index 000000000..f182e7d99 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot03_object.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot04_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot04_objects.xml new file mode 100644 index 000000000..66293d752 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot04_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot05_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot05_objects.xml new file mode 100644 index 000000000..6e7079149 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot05_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot06_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot06_objects.xml new file mode 100644 index 000000000..e3da63b0f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot06_objects.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot07_object.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot07_object.xml new file mode 100644 index 000000000..5bc2bfb6b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot07_object.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot08_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot08_obj.xml new file mode 100644 index 000000000..4d71f3473 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot08_obj.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot09_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot09_obj.xml new file mode 100644 index 000000000..eb6528393 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot09_obj.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot11_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot11_obj.xml new file mode 100644 index 000000000..257298f7c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot11_obj.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot12_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot12_obj.xml new file mode 100644 index 000000000..d619c781e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot12_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot15_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot15_obj.xml new file mode 100644 index 000000000..bd59b8cd1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot15_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot16_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot16_obj.xml new file mode 100644 index 000000000..d39de812a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot16_obj.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot17_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot17_obj.xml new file mode 100644 index 000000000..d4239d8d2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot17_obj.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot18_obj.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot18_obj.xml new file mode 100644 index 000000000..cc12b7894 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_spot18_obj.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ssh.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ssh.xml new file mode 100644 index 000000000..6283f8e9f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ssh.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sst.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sst.xml new file mode 100644 index 000000000..d64787fa1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_sst.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_st.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_st.xml new file mode 100644 index 000000000..983b9e2ea --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_st.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_stream.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_stream.xml new file mode 100644 index 000000000..59b0838e4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_stream.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_syokudai.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_syokudai.xml new file mode 100644 index 000000000..c1670edec --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_syokudai.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ta.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ta.xml new file mode 100644 index 000000000..5e446bf5c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ta.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_timeblock.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_timeblock.xml new file mode 100644 index 000000000..1d6b9e698 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_timeblock.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tite.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tite.xml new file mode 100644 index 000000000..1be65c495 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tite.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tk.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tk.xml new file mode 100644 index 000000000..6b6cce724 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_toki_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_toki_objects.xml new file mode 100644 index 000000000..cd07e60d2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_toki_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_torch2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_torch2.xml new file mode 100644 index 000000000..3388e7d34 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_torch2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_toryo.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_toryo.xml new file mode 100644 index 000000000..73f3dcb1e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_toryo.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tp.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tp.xml new file mode 100644 index 000000000..8ea908825 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tp.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tr.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tr.xml new file mode 100644 index 000000000..17ab9ae39 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tr.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_trap.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_trap.xml new file mode 100644 index 000000000..56195cf41 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_trap.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_triforce_spot.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_triforce_spot.xml new file mode 100644 index 000000000..87d449458 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_triforce_spot.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ts.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ts.xml new file mode 100644 index 000000000..567277bc3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ts.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tsubo.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tsubo.xml new file mode 100644 index 000000000..ee2c5e184 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tsubo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tw.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tw.xml new file mode 100644 index 000000000..d238e10ab --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_tw.xml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_umajump.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_umajump.xml new file mode 100644 index 000000000..2ee4ade46 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_umajump.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_vali.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_vali.xml new file mode 100644 index 000000000..2bab5efaa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_vali.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_vase.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_vase.xml new file mode 100644 index 000000000..091d4c51e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_vase.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_vm.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_vm.xml new file mode 100644 index 000000000..c5b949b36 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_vm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_wallmaster.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_wallmaster.xml new file mode 100644 index 000000000..fbbc4f4af --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_wallmaster.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_warp1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_warp1.xml new file mode 100644 index 000000000..1497d7a10 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_warp1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_warp2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_warp2.xml new file mode 100644 index 000000000..b6d1b3624 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_warp2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_wf.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_wf.xml new file mode 100644 index 000000000..ebfb708d2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_wf.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_wood02.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_wood02.xml new file mode 100644 index 000000000..47ec342ca --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_wood02.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_xc.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_xc.xml new file mode 100644 index 000000000..bb2bf3e7a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_xc.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_yabusame_point.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_yabusame_point.xml new file mode 100644 index 000000000..bed9e8a60 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_yabusame_point.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ydan_objects.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ydan_objects.xml new file mode 100644 index 000000000..e2adf307f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_ydan_objects.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_yukabyun.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_yukabyun.xml new file mode 100644 index 000000000..d594ebbb8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_yukabyun.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zf.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zf.xml new file mode 100644 index 000000000..7f20eb786 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zf.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zg.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zg.xml new file mode 100644 index 000000000..79005516c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zg.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl1.xml new file mode 100644 index 000000000..001e5be14 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl1.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl2.xml new file mode 100644 index 000000000..959a919ec --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl2_anime1.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl2_anime1.xml new file mode 100644 index 000000000..cada50486 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl2_anime1.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl2_anime2.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl2_anime2.xml new file mode 100644 index 000000000..47016e2e0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl2_anime2.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl4.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl4.xml new file mode 100644 index 000000000..8e7a2837e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zl4.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zo.xml b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zo.xml new file mode 100644 index 000000000..77465760e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/objects/object_zo.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Arrow_Fire.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Arrow_Fire.xml new file mode 100644 index 000000000..dce4da772 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Arrow_Fire.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Arrow_Ice.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Arrow_Ice.xml new file mode 100644 index 000000000..76d82579e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Arrow_Ice.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Arrow_Light.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Arrow_Light.xml new file mode 100644 index 000000000..8bee2c8dd --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Arrow_Light.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Bg_Ganon_Otyuka.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Bg_Ganon_Otyuka.xml new file mode 100644 index 000000000..f7795146c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Bg_Ganon_Otyuka.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Bg_Jya_Cobra.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Bg_Jya_Cobra.xml new file mode 100644 index 000000000..84910e5f0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Bg_Jya_Cobra.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Dodongo.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Dodongo.xml new file mode 100644 index 000000000..a19dbed0f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Dodongo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Ganon.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Ganon.xml new file mode 100644 index 000000000..4ecda6020 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Ganon.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Ganon2.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Ganon2.xml new file mode 100644 index 000000000..89e10b5b4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Ganon2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Sst.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Sst.xml new file mode 100644 index 000000000..14195ccf8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Boss_Sst.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Demo_Shd.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Demo_Shd.xml new file mode 100644 index 000000000..b286b9612 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Demo_Shd.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Bili.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Bili.xml new file mode 100644 index 000000000..f5d5f1708 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Bili.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Clear_Tag.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Clear_Tag.xml new file mode 100644 index 000000000..9dd01857a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Clear_Tag.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Ganon_Mant.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Ganon_Mant.xml new file mode 100644 index 000000000..b69dbff0e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Ganon_Mant.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Ganon_Organ.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Ganon_Organ.xml new file mode 100644 index 000000000..37953cff5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Ganon_Organ.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Holl.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Holl.xml new file mode 100644 index 000000000..193e86796 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Holl.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Jsjutan.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Jsjutan.xml new file mode 100644 index 000000000..64d24dd76 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Jsjutan.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Kanban.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Kanban.xml new file mode 100644 index 000000000..20230c5ce --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Kanban.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Sda.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Sda.xml new file mode 100644 index 000000000..ece03e8ff --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Sda.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Ssh.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Ssh.xml new file mode 100644 index 000000000..5d05b4faf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Ssh.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_St.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_St.xml new file mode 100644 index 000000000..4b87f9a6f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_St.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Sth.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Sth.xml new file mode 100644 index 000000000..263813cce --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_En_Sth.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_End_Title.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_End_Title.xml new file mode 100644 index 000000000..539e97f48 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_End_Title.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_File_Choose.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_File_Choose.xml new file mode 100644 index 000000000..5fa756368 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_File_Choose.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Magic_Dark.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Magic_Dark.xml new file mode 100644 index 000000000..8e77b2ead --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Magic_Dark.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Magic_Fire.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Magic_Fire.xml new file mode 100644 index 000000000..d7b3b3293 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Magic_Fire.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Magic_Wind.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Magic_Wind.xml new file mode 100644 index 000000000..0229a1587 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Magic_Wind.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Spot.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Spot.xml new file mode 100644 index 000000000..556c166a9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Spot.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Storm.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Storm.xml new file mode 100644 index 000000000..fab89b3aa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Storm.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe.xml new file mode 100644 index 000000000..3d813da57 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe2.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe2.xml new file mode 100644 index 000000000..88eb30653 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe3.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe3.xml new file mode 100644 index 000000000..7604e81ff --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe4.xml b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe4.xml new file mode 100644 index 000000000..7fa56605f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/overlays/ovl_Oceff_Wipe4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/Bmori1.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/Bmori1.xml new file mode 100644 index 000000000..a39e5ccd1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/Bmori1.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/FIRE_bs.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/FIRE_bs.xml new file mode 100644 index 000000000..89331ecc2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/FIRE_bs.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HAKAdan.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HAKAdan.xml new file mode 100644 index 000000000..a2c20d692 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HAKAdan.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HAKAdanCH.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HAKAdanCH.xml new file mode 100644 index 000000000..ea300b96c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HAKAdanCH.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HAKAdan_bs.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HAKAdan_bs.xml new file mode 100644 index 000000000..d36ac6b77 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HAKAdan_bs.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HIDAN.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HIDAN.xml new file mode 100644 index 000000000..502dcd839 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/HIDAN.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/MIZUsin.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/MIZUsin.xml new file mode 100644 index 000000000..f8b5d8b6c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/MIZUsin.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/MIZUsin_bs.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/MIZUsin_bs.xml new file mode 100644 index 000000000..99ae2b3ef --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/MIZUsin_bs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/bdan.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/bdan.xml new file mode 100644 index 000000000..9eb1ee61a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/bdan.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/bdan_boss.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/bdan_boss.xml new file mode 100644 index 000000000..9fccf2c30 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/bdan_boss.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ddan.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ddan.xml new file mode 100644 index 000000000..c46e8ad27 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ddan.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ddan_boss.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ddan_boss.xml new file mode 100644 index 000000000..05633e53e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ddan_boss.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon.xml new file mode 100644 index 000000000..f857dbe94 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_boss.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_boss.xml new file mode 100644 index 000000000..36c5e8107 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_boss.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_demo.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_demo.xml new file mode 100644 index 000000000..56c98efed --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_demo.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_final.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_final.xml new file mode 100644 index 000000000..1c9bf84b4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_final.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_sonogo.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_sonogo.xml new file mode 100644 index 000000000..7d5f5a123 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_sonogo.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_tou.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_tou.xml new file mode 100644 index 000000000..1ae37b963 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganon_tou.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganontika.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganontika.xml new file mode 100644 index 000000000..ba5542faa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganontika.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganontikasonogo.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganontikasonogo.xml new file mode 100644 index 000000000..a441206b0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ganontikasonogo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/gerudoway.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/gerudoway.xml new file mode 100644 index 000000000..f2d07a288 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/gerudoway.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ice_doukutu.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ice_doukutu.xml new file mode 100644 index 000000000..7ad60c2a0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ice_doukutu.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/jyasinboss.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/jyasinboss.xml new file mode 100644 index 000000000..86c0d317b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/jyasinboss.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/jyasinzou.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/jyasinzou.xml new file mode 100644 index 000000000..166244e29 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/jyasinzou.xml @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/men.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/men.xml new file mode 100644 index 000000000..679436de0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/men.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/moribossroom.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/moribossroom.xml new file mode 100644 index 000000000..b9959eefa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/moribossroom.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ydan.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ydan.xml new file mode 100644 index 000000000..377c7a682 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ydan.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ydan_boss.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ydan_boss.xml new file mode 100644 index 000000000..7ea240547 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/dungeons/ydan_boss.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/bowling.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/bowling.xml new file mode 100644 index 000000000..9a41763a2 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/bowling.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/daiyousei_izumi.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/daiyousei_izumi.xml new file mode 100644 index 000000000..4f9a03fc0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/daiyousei_izumi.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hairal_niwa.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hairal_niwa.xml new file mode 100644 index 000000000..06d89f2fe --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hairal_niwa.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hairal_niwa_n.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hairal_niwa_n.xml new file mode 100644 index 000000000..6f4c181e0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hairal_niwa_n.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hakasitarelay.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hakasitarelay.xml new file mode 100644 index 000000000..91be63d14 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hakasitarelay.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hut.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hut.xml new file mode 100644 index 000000000..a4ef5715f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hylia_labo.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hylia_labo.xml new file mode 100644 index 000000000..56822e67a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/hylia_labo.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/impa.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/impa.xml new file mode 100644 index 000000000..db757e3d3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/impa.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kakariko.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kakariko.xml new file mode 100644 index 000000000..e4e9b102c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kakariko.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kenjyanoma.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kenjyanoma.xml new file mode 100644 index 000000000..4e8a58f3b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kenjyanoma.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home.xml new file mode 100644 index 000000000..8c0305493 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home3.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home3.xml new file mode 100644 index 000000000..9f36eb41c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home4.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home4.xml new file mode 100644 index 000000000..eb861aedb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home4.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home5.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home5.xml new file mode 100644 index 000000000..974987fed --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/kokiri_home5.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/labo.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/labo.xml new file mode 100644 index 000000000..c0a9d2eb8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/labo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/link_home.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/link_home.xml new file mode 100644 index 000000000..2fb88ae34 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/link_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/mahouya.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/mahouya.xml new file mode 100644 index 000000000..8ae462f9d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/mahouya.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/malon_stable.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/malon_stable.xml new file mode 100644 index 000000000..aff97eeb8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/malon_stable.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/miharigoya.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/miharigoya.xml new file mode 100644 index 000000000..63f8676ac --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/miharigoya.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/nakaniwa.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/nakaniwa.xml new file mode 100644 index 000000000..2fb2d5e6a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/nakaniwa.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/syatekijyou.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/syatekijyou.xml new file mode 100644 index 000000000..05243b52c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/syatekijyou.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/takaraya.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/takaraya.xml new file mode 100644 index 000000000..5b438980b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/takaraya.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/tent.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/tent.xml new file mode 100644 index 000000000..de72cc5f4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/tent.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/tokinoma.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/tokinoma.xml new file mode 100644 index 000000000..d7878b895 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/tokinoma.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/yousei_izumi_tate.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/yousei_izumi_tate.xml new file mode 100644 index 000000000..3b6dd2dec --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/yousei_izumi_tate.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/yousei_izumi_yoko.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/yousei_izumi_yoko.xml new file mode 100644 index 000000000..90a8d95d0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/indoors/yousei_izumi_yoko.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/enrui.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/enrui.xml new file mode 100644 index 000000000..d8c06e545 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/enrui.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/entra_n.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/entra_n.xml new file mode 100644 index 000000000..5b408ac3a --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/entra_n.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hakaana.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hakaana.xml new file mode 100644 index 000000000..e7dc93dd0 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hakaana.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hakaana2.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hakaana2.xml new file mode 100644 index 000000000..2d8ba4906 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hakaana2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hakaana_ouke.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hakaana_ouke.xml new file mode 100644 index 000000000..17f53613e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hakaana_ouke.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hiral_demo.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hiral_demo.xml new file mode 100644 index 000000000..1331fdd4c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/hiral_demo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/kakariko3.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/kakariko3.xml new file mode 100644 index 000000000..07b62c44d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/kakariko3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/kakusiana.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/kakusiana.xml new file mode 100644 index 000000000..c3f993ff4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/kakusiana.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/kinsuta.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/kinsuta.xml new file mode 100644 index 000000000..aac0f6c4e --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/kinsuta.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_alley.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_alley.xml new file mode 100644 index 000000000..c30467303 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_alley.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_alley_n.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_alley_n.xml new file mode 100644 index 000000000..65db60411 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_alley_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_day.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_day.xml new file mode 100644 index 000000000..00887e69c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_day.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_night.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_night.xml new file mode 100644 index 000000000..c58e38744 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_night.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_ruins.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_ruins.xml new file mode 100644 index 000000000..f0ec75e75 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/market_ruins.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/shrine.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/shrine.xml new file mode 100644 index 000000000..b9ddf2cf7 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/shrine.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/shrine_n.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/shrine_n.xml new file mode 100644 index 000000000..4878338aa --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/shrine_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/shrine_r.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/shrine_r.xml new file mode 100644 index 000000000..122036791 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/shrine_r.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/turibori.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/turibori.xml new file mode 100644 index 000000000..0633224d9 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/misc/turibori.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/entra.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/entra.xml new file mode 100644 index 000000000..92ee57f59 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/entra.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/souko.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/souko.xml new file mode 100644 index 000000000..8dd9d9e48 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/souko.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot00.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot00.xml new file mode 100644 index 000000000..508d9309b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot00.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot01.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot01.xml new file mode 100644 index 000000000..eb725afa6 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot01.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot02.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot02.xml new file mode 100644 index 000000000..c7924c29d --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot02.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot03.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot03.xml new file mode 100644 index 000000000..9434185f4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot03.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot04.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot04.xml new file mode 100644 index 000000000..f33860420 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot04.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot05.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot05.xml new file mode 100644 index 000000000..4f7c62b91 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot05.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot06.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot06.xml new file mode 100644 index 000000000..f4af602cf --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot06.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot07.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot07.xml new file mode 100644 index 000000000..eeb976f7f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot07.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot08.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot08.xml new file mode 100644 index 000000000..86582f0dc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot08.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot09.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot09.xml new file mode 100644 index 000000000..5bb9e059c --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot09.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot10.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot10.xml new file mode 100644 index 000000000..66365e3d8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot11.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot11.xml new file mode 100644 index 000000000..76ff3b822 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot11.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot12.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot12.xml new file mode 100644 index 000000000..e21523b21 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot12.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot13.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot13.xml new file mode 100644 index 000000000..c68913065 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot13.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot15.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot15.xml new file mode 100644 index 000000000..e75f7b684 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot15.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot16.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot16.xml new file mode 100644 index 000000000..f41b226f8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot16.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot17.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot17.xml new file mode 100644 index 000000000..feb267251 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot17.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot18.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot18.xml new file mode 100644 index 000000000..d70fccf4b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot18.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot20.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot20.xml new file mode 100644 index 000000000..1381f6ecb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/overworld/spot20.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/alley_shop.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/alley_shop.xml new file mode 100644 index 000000000..95548de1b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/alley_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/drag.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/drag.xml new file mode 100644 index 000000000..acb6515fb --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/drag.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/face_shop.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/face_shop.xml new file mode 100644 index 000000000..16a974608 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/face_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/golon.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/golon.xml new file mode 100644 index 000000000..c58672798 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/golon.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/kokiri_shop.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/kokiri_shop.xml new file mode 100644 index 000000000..50cd633e5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/kokiri_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/night_shop.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/night_shop.xml new file mode 100644 index 000000000..5954d9c83 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/night_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/shop1.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/shop1.xml new file mode 100644 index 000000000..525a06d63 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/shop1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/zoora.xml b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/zoora.xml new file mode 100644 index 000000000..0e4ac18f8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/scenes/shops/zoora.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/text/elf_message_field.xml b/soh/assets/xml/GC_MQ_NTSC_U/text/elf_message_field.xml new file mode 100644 index 000000000..789a554ce --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/text/elf_message_field.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_U/text/elf_message_ydan.xml b/soh/assets/xml/GC_MQ_NTSC_U/text/elf_message_ydan.xml new file mode 100644 index 000000000..f784afcf4 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/text/elf_message_ydan.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_U/text/message_data_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/text/message_data_static.xml new file mode 100644 index 000000000..ff37dac65 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/text/message_data_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/backgrounds.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/backgrounds.xml new file mode 100644 index 000000000..c60ff57a8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/backgrounds.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/boss_title_cards.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/boss_title_cards.xml new file mode 100644 index 000000000..84f555bd1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/boss_title_cards.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/do_action_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/do_action_static.xml new file mode 100644 index 000000000..efabd54a5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/do_action_static.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_24_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_24_static.xml new file mode 100644 index 000000000..cdb8cc737 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_24_static.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_dungeon_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_dungeon_static.xml new file mode 100644 index 000000000..873c490fc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_dungeon_static.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_field_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_field_static.xml new file mode 100644 index 000000000..ed991406b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_field_static.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_gameover_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_gameover_static.xml new file mode 100644 index 000000000..ffd392868 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_gameover_static.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_jpn_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_jpn_static.xml new file mode 100644 index 000000000..f2fe854b8 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_jpn_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_nes_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_nes_static.xml new file mode 100644 index 000000000..6cd92acfc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_nes_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_static.xml new file mode 100644 index 000000000..9e844615b --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/icon_item_static.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/item_name_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/item_name_static.xml new file mode 100644 index 000000000..266b3c200 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/item_name_static.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/kanji.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/kanji.xml new file mode 100644 index 000000000..5159387a1 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/kanji.xml @@ -0,0 +1,3984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/map_48x85_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/map_48x85_static.xml new file mode 100644 index 000000000..b2ea46340 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/map_48x85_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/map_grand_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/map_grand_static.xml new file mode 100644 index 000000000..201955bfc --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/map_grand_static.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/map_i_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/map_i_static.xml new file mode 100644 index 000000000..1721f6d84 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/map_i_static.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/map_name_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/map_name_static.xml new file mode 100644 index 000000000..ca4c4c0bd --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/map_name_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/message_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/message_static.xml new file mode 100644 index 000000000..afdde60de --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/message_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/message_texture_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/message_texture_static.xml new file mode 100644 index 000000000..bbf7e1259 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/message_texture_static.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/nes_font_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/nes_font_static.xml new file mode 100644 index 000000000..b01646cb5 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/nes_font_static.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/nintendo_rogo_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/nintendo_rogo_static.xml new file mode 100644 index 000000000..f09de3b0f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/nintendo_rogo_static.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/parameter_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/parameter_static.xml new file mode 100644 index 000000000..c51dacf1f --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/parameter_static.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/place_title_cards.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/place_title_cards.xml new file mode 100644 index 000000000..b688cce00 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/place_title_cards.xml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/skyboxes.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/skyboxes.xml new file mode 100644 index 000000000..104ffb2a3 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/skyboxes.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_NTSC_U/textures/title_static.xml b/soh/assets/xml/GC_MQ_NTSC_U/textures/title_static.xml new file mode 100644 index 000000000..5f58c5a82 --- /dev/null +++ b/soh/assets/xml/GC_MQ_NTSC_U/textures/title_static.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_MQ_PAL_F/code/sys_matrix.xml b/soh/assets/xml/GC_MQ_PAL_F/code/sys_matrix.xml index 52e78bcb1..580fead4a 100644 --- a/soh/assets/xml/GC_MQ_PAL_F/code/sys_matrix.xml +++ b/soh/assets/xml/GC_MQ_PAL_F/code/sys_matrix.xml @@ -1,5 +1,5 @@ - + diff --git a/soh/assets/xml/GC_MQ_PAL_F/objects/gameplay_keep.xml b/soh/assets/xml/GC_MQ_PAL_F/objects/gameplay_keep.xml index 5ffc52f65..882422884 100644 --- a/soh/assets/xml/GC_MQ_PAL_F/objects/gameplay_keep.xml +++ b/soh/assets/xml/GC_MQ_PAL_F/objects/gameplay_keep.xml @@ -7,6 +7,8 @@ + + diff --git a/soh/assets/xml/GC_NMQ_D/code/sys_matrix.xml b/soh/assets/xml/GC_NMQ_D/code/sys_matrix.xml index 3811322d3..99b5dbafd 100644 --- a/soh/assets/xml/GC_NMQ_D/code/sys_matrix.xml +++ b/soh/assets/xml/GC_NMQ_D/code/sys_matrix.xml @@ -1,5 +1,5 @@ - + diff --git a/soh/assets/xml/GC_NMQ_D/objects/gameplay_keep.xml b/soh/assets/xml/GC_NMQ_D/objects/gameplay_keep.xml index 5ffc52f65..905f5d272 100644 --- a/soh/assets/xml/GC_NMQ_D/objects/gameplay_keep.xml +++ b/soh/assets/xml/GC_NMQ_D/objects/gameplay_keep.xml @@ -7,6 +7,8 @@ + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/audio/Audio.xml b/soh/assets/xml/GC_NMQ_NTSC_J/audio/Audio.xml new file mode 100644 index 000000000..849499cc2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/audio/Audio.xml @@ -0,0 +1,1558 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/code/fbdemo_circle.xml b/soh/assets/xml/GC_NMQ_NTSC_J/code/fbdemo_circle.xml new file mode 100644 index 000000000..0c552b70e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/code/fbdemo_circle.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/code/fbdemo_triforce.xml b/soh/assets/xml/GC_NMQ_NTSC_J/code/fbdemo_triforce.xml new file mode 100644 index 000000000..ee0922d81 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/code/fbdemo_triforce.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/code/fbdemo_wipe1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/code/fbdemo_wipe1.xml new file mode 100644 index 000000000..f45e58536 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/code/fbdemo_wipe1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/code/sys_matrix.xml b/soh/assets/xml/GC_NMQ_NTSC_J/code/sys_matrix.xml new file mode 100644 index 000000000..9088e3a63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/code/sys_matrix.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/misc/link_animetion.xml b/soh/assets/xml/GC_NMQ_NTSC_J/misc/link_animetion.xml new file mode 100644 index 000000000..9de1e92d3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/misc/link_animetion.xml @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/gameplay_dangeon_keep.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/gameplay_dangeon_keep.xml new file mode 100644 index 000000000..5b1a9050d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/gameplay_dangeon_keep.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/gameplay_field_keep.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/gameplay_field_keep.xml new file mode 100644 index 000000000..011e8f7fc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/gameplay_field_keep.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/gameplay_keep.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/gameplay_keep.xml new file mode 100644 index 000000000..94eee8845 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/gameplay_keep.xml @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_Bb.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_Bb.xml new file mode 100644 index 000000000..5d04bde45 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_Bb.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ahg.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ahg.xml new file mode 100644 index 000000000..4d37b1b11 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ahg.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_am.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_am.xml new file mode 100644 index 000000000..b70c70d70 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_am.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ane.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ane.xml new file mode 100644 index 000000000..1e29b351e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ane.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ani.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ani.xml new file mode 100644 index 000000000..c70621c6f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ani.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_anubice.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_anubice.xml new file mode 100644 index 000000000..fb029586b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_anubice.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_aob.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_aob.xml new file mode 100644 index 000000000..e6202d0cf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_aob.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_b_heart.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_b_heart.xml new file mode 100644 index 000000000..00f7cd677 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_b_heart.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bba.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bba.xml new file mode 100644 index 000000000..ccc5c2136 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bba.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bdan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bdan_objects.xml new file mode 100644 index 000000000..dcd56d385 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bdan_objects.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bdoor.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bdoor.xml new file mode 100644 index 000000000..a092f0c23 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bdoor.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bg.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bg.xml new file mode 100644 index 000000000..791226b71 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bg.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bigokuta.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bigokuta.xml new file mode 100644 index 000000000..1c7d39e31 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bigokuta.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bird.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bird.xml new file mode 100644 index 000000000..167a5022d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bird.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bji.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bji.xml new file mode 100644 index 000000000..c665b6b00 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bji.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bl.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bl.xml new file mode 100644 index 000000000..1c2ef4ec6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_blkobj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_blkobj.xml new file mode 100644 index 000000000..345a8ebd9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_blkobj.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bob.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bob.xml new file mode 100644 index 000000000..289e994e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bob.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_boj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_boj.xml new file mode 100644 index 000000000..4be4764ab --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_boj.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bombf.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bombf.xml new file mode 100644 index 000000000..83e60248d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bombf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bombiwa.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bombiwa.xml new file mode 100644 index 000000000..26ab6b4f3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bombiwa.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bowl.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bowl.xml new file mode 100644 index 000000000..ffe6d43db --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bowl.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_box.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_box.xml new file mode 100644 index 000000000..106d2d335 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_box.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_brob.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_brob.xml new file mode 100644 index 000000000..718dcd561 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_brob.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bubble.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bubble.xml new file mode 100644 index 000000000..f5de18692 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bubble.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bv.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bv.xml new file mode 100644 index 000000000..58db6e1d4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bv.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bw.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bw.xml new file mode 100644 index 000000000..6fd39fbb1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bw.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bwall.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bwall.xml new file mode 100644 index 000000000..d4f43ddc1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bwall.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bxa.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bxa.xml new file mode 100644 index 000000000..fb78c117e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_bxa.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cne.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cne.xml new file mode 100644 index 000000000..0c14d0bc5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cne.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cob.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cob.xml new file mode 100644 index 000000000..ba051cfa7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cob.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cow.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cow.xml new file mode 100644 index 000000000..5d067c329 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cow.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_crow.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_crow.xml new file mode 100644 index 000000000..77337c644 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_crow.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cs.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cs.xml new file mode 100644 index 000000000..83804ccaf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_cs.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_d_elevator.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_d_elevator.xml new file mode 100644 index 000000000..6be59c154 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_d_elevator.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_d_hsblock.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_d_hsblock.xml new file mode 100644 index 000000000..4bb50c2b4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_d_hsblock.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_d_lift.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_d_lift.xml new file mode 100644 index 000000000..291238519 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_d_lift.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_daiku.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_daiku.xml new file mode 100644 index 000000000..1524c7a26 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_daiku.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ddan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ddan_objects.xml new file mode 100644 index 000000000..3fc563b96 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ddan_objects.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dekubaba.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dekubaba.xml new file mode 100644 index 000000000..7202a833f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dekubaba.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dekujr.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dekujr.xml new file mode 100644 index 000000000..e906bf61c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dekujr.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dekunuts.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dekunuts.xml new file mode 100644 index 000000000..5fceef416 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dekunuts.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_demo_6k.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_demo_6k.xml new file mode 100644 index 000000000..73058d5e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_demo_6k.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_demo_kekkai.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_demo_kekkai.xml new file mode 100644 index 000000000..aa54bc2ee --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_demo_kekkai.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_demo_tre_lgt.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_demo_tre_lgt.xml new file mode 100644 index 000000000..9ea19012b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_demo_tre_lgt.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dh.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dh.xml new file mode 100644 index 000000000..7a52d7dbe --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dh.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dnk.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dnk.xml new file mode 100644 index 000000000..3bce34304 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dnk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dns.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dns.xml new file mode 100644 index 000000000..8b78ffcf2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dns.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dodojr.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dodojr.xml new file mode 100644 index 000000000..4dfd7d6e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dodojr.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dodongo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dodongo.xml new file mode 100644 index 000000000..779e20e9d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dodongo.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dog.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dog.xml new file mode 100644 index 000000000..ef00442b6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dog.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_door_gerudo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_door_gerudo.xml new file mode 100644 index 000000000..2f1726204 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_door_gerudo.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_door_killer.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_door_killer.xml new file mode 100644 index 000000000..a37f590d6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_door_killer.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ds.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ds.xml new file mode 100644 index 000000000..0413a9e2e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ds.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ds2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ds2.xml new file mode 100644 index 000000000..683bcc68d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ds2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_du.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_du.xml new file mode 100644 index 000000000..0babd962b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_du.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dy_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dy_obj.xml new file mode 100644 index 000000000..5e792edb5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_dy_obj.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ec.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ec.xml new file mode 100644 index 000000000..7ec83e284 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ec.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_crystal_light.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_crystal_light.xml new file mode 100644 index 000000000..9215b6a39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_crystal_light.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_doughnut.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_doughnut.xml new file mode 100644 index 000000000..7f12c56f5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_doughnut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_erupc.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_erupc.xml new file mode 100644 index 000000000..800d9535f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_erupc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_fire_ball.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_fire_ball.xml new file mode 100644 index 000000000..2fc65b16f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_fire_ball.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_flash.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_flash.xml new file mode 100644 index 000000000..5f962f162 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_flash.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_lgt_shower.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_lgt_shower.xml new file mode 100644 index 000000000..67ef5ce7e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_lgt_shower.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_star_field.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_star_field.xml new file mode 100644 index 000000000..00b47c460 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_star_field.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_tw.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_tw.xml new file mode 100644 index 000000000..de5376569 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_efc_tw.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ei.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ei.xml new file mode 100644 index 000000000..e4132491f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ei.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fa.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fa.xml new file mode 100644 index 000000000..2f1bf9a5e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fa.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fd.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fd.xml new file mode 100644 index 000000000..9bc25d3a6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fd.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fd2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fd2.xml new file mode 100644 index 000000000..44b5f5f9c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fd2.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fhg.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fhg.xml new file mode 100644 index 000000000..6a275daeb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fhg.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fire.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fire.xml new file mode 100644 index 000000000..49bf620cb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fire.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_firefly.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_firefly.xml new file mode 100644 index 000000000..8c26a4341 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_firefly.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fish.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fish.xml new file mode 100644 index 000000000..f5ad4f6da --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fish.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fr.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fr.xml new file mode 100644 index 000000000..25ee2ad42 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fr.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fu.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fu.xml new file mode 100644 index 000000000..82c449e3d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fu.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fw.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fw.xml new file mode 100644 index 000000000..ee9821d26 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fw.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fz.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fz.xml new file mode 100644 index 000000000..dad6fec5c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_fz.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon.xml new file mode 100644 index 000000000..5b68602ba --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon2.xml new file mode 100644 index 000000000..7e715dd41 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon2.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_anime1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_anime1.xml new file mode 100644 index 000000000..b1016299b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_anime1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_anime2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_anime2.xml new file mode 100644 index 000000000..180e5995c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_anime2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_anime3.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_anime3.xml new file mode 100644 index 000000000..be4c4dcb1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_anime3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_objects.xml new file mode 100644 index 000000000..5e32610ff --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ganon_objects.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ge1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ge1.xml new file mode 100644 index 000000000..79e0768b8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ge1.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_geff.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_geff.xml new file mode 100644 index 000000000..f0667743b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_geff.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_geldb.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_geldb.xml new file mode 100644 index 000000000..49b12ef2e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_geldb.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_arrow.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_arrow.xml new file mode 100644 index 000000000..4b58787a9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_arrow.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_arrowcase.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_arrowcase.xml new file mode 100644 index 000000000..267b0a734 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_arrowcase.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bean.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bean.xml new file mode 100644 index 000000000..e74247816 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bean.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bomb_1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bomb_1.xml new file mode 100644 index 000000000..bae86c11d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bomb_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bomb_2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bomb_2.xml new file mode 100644 index 000000000..1400c4a4d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bomb_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bombpouch.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bombpouch.xml new file mode 100644 index 000000000..07134748c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bombpouch.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_boomerang.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_boomerang.xml new file mode 100644 index 000000000..3c1a0fe7f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_boomerang.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_boots_2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_boots_2.xml new file mode 100644 index 000000000..3bcb6a47a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_boots_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bosskey.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bosskey.xml new file mode 100644 index 000000000..e5e4bc86c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bosskey.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bottle.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bottle.xml new file mode 100644 index 000000000..3b0884a03 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bottle.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bottle_letter.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bottle_letter.xml new file mode 100644 index 000000000..443219caf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bottle_letter.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bow.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bow.xml new file mode 100644 index 000000000..946e9c496 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bow.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bracelet.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bracelet.xml new file mode 100644 index 000000000..5a0b62a60 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_bracelet.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_brokensword.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_brokensword.xml new file mode 100644 index 000000000..408741ac5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_brokensword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_butterfly.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_butterfly.xml new file mode 100644 index 000000000..7b60a7724 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_butterfly.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_clothes.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_clothes.xml new file mode 100644 index 000000000..3f897b6d1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_clothes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_coin.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_coin.xml new file mode 100644 index 000000000..22e29f255 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_coin.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_compass.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_compass.xml new file mode 100644 index 000000000..076229b11 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_compass.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_dekupouch.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_dekupouch.xml new file mode 100644 index 000000000..8925e6fa5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_dekupouch.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_egg.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_egg.xml new file mode 100644 index 000000000..2b2e2847d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_egg.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_eye_lotion.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_eye_lotion.xml new file mode 100644 index 000000000..5128c5f6f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_eye_lotion.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_fire.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_fire.xml new file mode 100644 index 000000000..4bfd76a7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_fire.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_fish.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_fish.xml new file mode 100644 index 000000000..edb39dc29 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_fish.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_frog.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_frog.xml new file mode 100644 index 000000000..a656c306b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_frog.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_gerudo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_gerudo.xml new file mode 100644 index 000000000..d65daee8e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_gerudo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_gerudomask.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_gerudomask.xml new file mode 100644 index 000000000..cfcb878d9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_gerudomask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ghost.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ghost.xml new file mode 100644 index 000000000..795f0cfd1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ghost.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_glasses.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_glasses.xml new file mode 100644 index 000000000..63d32ab5a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_glasses.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_gloves.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_gloves.xml new file mode 100644 index 000000000..0e1c4259d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_gloves.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_goddess.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_goddess.xml new file mode 100644 index 000000000..50cbdd891 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_goddess.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_golonmask.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_golonmask.xml new file mode 100644 index 000000000..844d90e71 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_golonmask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_grass.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_grass.xml new file mode 100644 index 000000000..ae7834201 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_grass.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hammer.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hammer.xml new file mode 100644 index 000000000..feb5c8659 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hammer.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_heart.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_heart.xml new file mode 100644 index 000000000..48e78b1b5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_heart.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hearts.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hearts.xml new file mode 100644 index 000000000..d2e763e63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hearts.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hookshot.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hookshot.xml new file mode 100644 index 000000000..a6b3b0fda --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hookshot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hoverboots.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hoverboots.xml new file mode 100644 index 000000000..6d41df8fd --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_hoverboots.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_insect.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_insect.xml new file mode 100644 index 000000000..7af5b5b3b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_insect.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_jewel.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_jewel.xml new file mode 100644 index 000000000..e83c65116 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_jewel.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_key.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_key.xml new file mode 100644 index 000000000..a37d45a71 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_key.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ki_tan_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ki_tan_mask.xml new file mode 100644 index 000000000..46eff7d3e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ki_tan_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_letter.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_letter.xml new file mode 100644 index 000000000..bea868339 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_letter.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_liquid.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_liquid.xml new file mode 100644 index 000000000..18a5c3d7a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_liquid.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_longsword.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_longsword.xml new file mode 100644 index 000000000..7161e42e3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_longsword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_m_arrow.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_m_arrow.xml new file mode 100644 index 000000000..0fd659ae9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_m_arrow.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_magicpot.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_magicpot.xml new file mode 100644 index 000000000..7623e6353 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_magicpot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_map.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_map.xml new file mode 100644 index 000000000..471c1dab9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_map.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_medal.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_medal.xml new file mode 100644 index 000000000..28e5b1e68 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_medal.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_melody.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_melody.xml new file mode 100644 index 000000000..b01fca953 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_melody.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_milk.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_milk.xml new file mode 100644 index 000000000..a3e223b3e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_milk.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_mushroom.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_mushroom.xml new file mode 100644 index 000000000..5b19bca74 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_mushroom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_niwatori.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_niwatori.xml new file mode 100644 index 000000000..c8389f62c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_niwatori.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_nuts.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_nuts.xml new file mode 100644 index 000000000..c59903c43 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_nuts.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ocarina.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ocarina.xml new file mode 100644 index 000000000..82607677d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ocarina.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ocarina_0.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ocarina_0.xml new file mode 100644 index 000000000..2c5f70d98 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ocarina_0.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_pachinko.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_pachinko.xml new file mode 100644 index 000000000..5f808baf9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_pachinko.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_powder.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_powder.xml new file mode 100644 index 000000000..fb7dc0155 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_powder.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_prescription.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_prescription.xml new file mode 100644 index 000000000..75ae7eb2b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_prescription.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_purse.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_purse.xml new file mode 100644 index 000000000..054731dec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_purse.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_rabit_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_rabit_mask.xml new file mode 100644 index 000000000..9d4eb9487 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_rabit_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_redead_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_redead_mask.xml new file mode 100644 index 000000000..7de08487f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_redead_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_rupy.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_rupy.xml new file mode 100644 index 000000000..0a1af96d0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_rupy.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_saw.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_saw.xml new file mode 100644 index 000000000..dcc038b7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_saw.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_scale.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_scale.xml new file mode 100644 index 000000000..1cf5de5b9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_scale.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_seed.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_seed.xml new file mode 100644 index 000000000..82c15c82d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_seed.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_shield_1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_shield_1.xml new file mode 100644 index 000000000..2f11e3f6d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_shield_1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_shield_2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_shield_2.xml new file mode 100644 index 000000000..176ae025f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_shield_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_shield_3.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_shield_3.xml new file mode 100644 index 000000000..8d1e5dafd --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_shield_3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_skj_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_skj_mask.xml new file mode 100644 index 000000000..e6c90f76f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_skj_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_soldout.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_soldout.xml new file mode 100644 index 000000000..a15b1253e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_soldout.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_soul.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_soul.xml new file mode 100644 index 000000000..a68178eba --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_soul.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_stick.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_stick.xml new file mode 100644 index 000000000..fed89f465 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_stick.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_sutaru.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_sutaru.xml new file mode 100644 index 000000000..a2606afbe --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_sutaru.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_sword_1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_sword_1.xml new file mode 100644 index 000000000..e1119abca --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_sword_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ticketstone.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ticketstone.xml new file mode 100644 index 000000000..73bf888d1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_ticketstone.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_truth_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_truth_mask.xml new file mode 100644 index 000000000..3b4edf3de --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_truth_mask.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_zoramask.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_zoramask.xml new file mode 100644 index 000000000..e3b1ab10e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gi_zoramask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gj.xml new file mode 100644 index 000000000..ee6dab74f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gj.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gjyo_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gjyo_objects.xml new file mode 100644 index 000000000..ea4f8444f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gjyo_objects.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gla.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gla.xml new file mode 100644 index 000000000..499a3720d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gla.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gm.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gm.xml new file mode 100644 index 000000000..91b10cc42 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gm.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gnd.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gnd.xml new file mode 100644 index 000000000..3ae3b57f3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gnd.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gnd_magic.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gnd_magic.xml new file mode 100644 index 000000000..a88d419d7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gnd_magic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gndd.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gndd.xml new file mode 100644 index 000000000..8bf5d770c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gndd.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_god_lgt.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_god_lgt.xml new file mode 100644 index 000000000..60df9e469 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_god_lgt.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gol.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gol.xml new file mode 100644 index 000000000..7e04508cb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gol.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_goma.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_goma.xml new file mode 100644 index 000000000..ec3e42114 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_goma.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_goroiwa.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_goroiwa.xml new file mode 100644 index 000000000..5d406e957 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_goroiwa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gr.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gr.xml new file mode 100644 index 000000000..5f7360ae5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gr.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gs.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gs.xml new file mode 100644 index 000000000..145be1665 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gs.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gt.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gt.xml new file mode 100644 index 000000000..1d79d4e39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_gt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_haka.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_haka.xml new file mode 100644 index 000000000..f6b263c37 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_haka.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_haka_door.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_haka_door.xml new file mode 100644 index 000000000..1376d0356 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_haka_door.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_haka_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_haka_objects.xml new file mode 100644 index 000000000..3ca6d27c0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_haka_objects.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hakach_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hakach_objects.xml new file mode 100644 index 000000000..0de02aaf1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hakach_objects.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hata.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hata.xml new file mode 100644 index 000000000..b0324c3be --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hata.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_heavy_object.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_heavy_object.xml new file mode 100644 index 000000000..ecc795321 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_heavy_object.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hidan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hidan_objects.xml new file mode 100644 index 000000000..f41c0ee5e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hidan_objects.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hintnuts.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hintnuts.xml new file mode 100644 index 000000000..a7290f395 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hintnuts.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hni.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hni.xml new file mode 100644 index 000000000..6b317eb7a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hni.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse.xml new file mode 100644 index 000000000..74619e597 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_ganon.xml new file mode 100644 index 000000000..0a55462e2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_ganon.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_link_child.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_link_child.xml new file mode 100644 index 000000000..146c564f5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_link_child.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_normal.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_normal.xml new file mode 100644 index 000000000..2facab39c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_normal.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_zelda.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_zelda.xml new file mode 100644 index 000000000..af270c658 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_horse_zelda.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hs.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hs.xml new file mode 100644 index 000000000..cf5d06e1a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_hs.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_human.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_human.xml new file mode 100644 index 000000000..05795cb33 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_human.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ice_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ice_objects.xml new file mode 100644 index 000000000..c7d059d70 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ice_objects.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ik.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ik.xml new file mode 100644 index 000000000..8a6028f7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ik.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_im.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_im.xml new file mode 100644 index 000000000..a628a113a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_im.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_in.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_in.xml new file mode 100644 index 000000000..84c114047 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_in.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ingate.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ingate.xml new file mode 100644 index 000000000..e6be42beb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ingate.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jj.xml new file mode 100644 index 000000000..62bae8cb9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jj.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_js.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_js.xml new file mode 100644 index 000000000..ff7bd3efa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_js.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jya_door.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jya_door.xml new file mode 100644 index 000000000..60a7b3788 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jya_door.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jya_iron.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jya_iron.xml new file mode 100644 index 000000000..c6f6773c6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jya_iron.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jya_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jya_obj.xml new file mode 100644 index 000000000..a1f19b806 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_jya_obj.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ka.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ka.xml new file mode 100644 index 000000000..eb952732b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ka.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kanban.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kanban.xml new file mode 100644 index 000000000..9ffc7a2ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kanban.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kibako2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kibako2.xml new file mode 100644 index 000000000..a701b294d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kibako2.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kingdodongo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kingdodongo.xml new file mode 100644 index 000000000..a865c15de --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kingdodongo.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_km1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_km1.xml new file mode 100644 index 000000000..0a918a798 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_km1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kusa.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kusa.xml new file mode 100644 index 000000000..67291a554 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kusa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kw1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kw1.xml new file mode 100644 index 000000000..eab561b1f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kw1.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kz.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kz.xml new file mode 100644 index 000000000..4624fefdb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_kz.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_light_ring.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_light_ring.xml new file mode 100644 index 000000000..babe7d2aa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_light_ring.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_lightbox.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_lightbox.xml new file mode 100644 index 000000000..552a79d7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_lightbox.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_lightswitch.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_lightswitch.xml new file mode 100644 index 000000000..cfd5dcfb4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_lightswitch.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_link_boy.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_link_boy.xml new file mode 100644 index 000000000..6351af505 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_link_boy.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_link_child.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_link_child.xml new file mode 100644 index 000000000..0de400373 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_link_child.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ma1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ma1.xml new file mode 100644 index 000000000..63eeb3895 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ma1.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ma2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ma2.xml new file mode 100644 index 000000000..ce5910fb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ma2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mag.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mag.xml new file mode 100644 index 000000000..b68d4227a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mag.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mamenoki.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mamenoki.xml new file mode 100644 index 000000000..819d89022 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mamenoki.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mastergolon.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mastergolon.xml new file mode 100644 index 000000000..6dd9d1659 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mastergolon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_masterkokiri.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_masterkokiri.xml new file mode 100644 index 000000000..af5a9ec15 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_masterkokiri.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_masterkokirihead.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_masterkokirihead.xml new file mode 100644 index 000000000..c64aa1c49 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_masterkokirihead.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_masterzoora.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_masterzoora.xml new file mode 100644 index 000000000..2c703274e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_masterzoora.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mb.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mb.xml new file mode 100644 index 000000000..23c0930c0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mb.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_md.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_md.xml new file mode 100644 index 000000000..161c73dca --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_md.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_medal.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_medal.xml new file mode 100644 index 000000000..533872a55 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_medal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_menkuri_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_menkuri_objects.xml new file mode 100644 index 000000000..4c2b51df5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_menkuri_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mir_ray.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mir_ray.xml new file mode 100644 index 000000000..2acc9391a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mir_ray.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mizu_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mizu_objects.xml new file mode 100644 index 000000000..5a18b95cf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mizu_objects.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin.xml new file mode 100644 index 000000000..daf9b0541 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_dark.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_dark.xml new file mode 100644 index 000000000..2fa0bdbe4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_dark.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_flame.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_flame.xml new file mode 100644 index 000000000..6274feaee --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_flame.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_flash.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_flash.xml new file mode 100644 index 000000000..c1040ea11 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_flash.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_ice.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_ice.xml new file mode 100644 index 000000000..1aaeea193 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_ice.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_oka.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_oka.xml new file mode 100644 index 000000000..0f823b923 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_oka.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_soul.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_soul.xml new file mode 100644 index 000000000..6386f7f9e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_soul.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_wind.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_wind.xml new file mode 100644 index 000000000..8bba7eb91 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mjin_wind.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mk.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mk.xml new file mode 100644 index 000000000..0b4aaae8a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mk.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mm.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mm.xml new file mode 100644 index 000000000..b27837e57 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mo.xml new file mode 100644 index 000000000..f450368f3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mo.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri1.xml new file mode 100644 index 000000000..bb1b31e2f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri1a.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri1a.xml new file mode 100644 index 000000000..c750ce20d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri1a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri2.xml new file mode 100644 index 000000000..785b85857 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri2a.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri2a.xml new file mode 100644 index 000000000..ad1bb4d5f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_hineri2a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_objects.xml new file mode 100644 index 000000000..58ea8c085 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_tex.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_tex.xml new file mode 100644 index 000000000..8ba4ff2d3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mori_tex.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ms.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ms.xml new file mode 100644 index 000000000..a87d0e6b3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ms.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mu.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mu.xml new file mode 100644 index 000000000..7251ff721 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_mu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_nb.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_nb.xml new file mode 100644 index 000000000..74de9e285 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_nb.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_niw.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_niw.xml new file mode 100644 index 000000000..4eafec956 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_niw.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_nwc.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_nwc.xml new file mode 100644 index 000000000..96ffa3238 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_nwc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ny.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ny.xml new file mode 100644 index 000000000..e2e8187ff --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ny.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA1.xml new file mode 100644 index 000000000..1d665f101 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA10.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA10.xml new file mode 100644 index 000000000..65d080834 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA10.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA11.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA11.xml new file mode 100644 index 000000000..92ae474b6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA11.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA2.xml new file mode 100644 index 000000000..ffdcd7989 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA2.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA3.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA3.xml new file mode 100644 index 000000000..a492bd875 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA4.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA4.xml new file mode 100644 index 000000000..dcdbbfff9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA5.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA5.xml new file mode 100644 index 000000000..55072176d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA6.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA6.xml new file mode 100644 index 000000000..c17a51088 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA6.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA7.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA7.xml new file mode 100644 index 000000000..52c68f639 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA7.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA8.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA8.xml new file mode 100644 index 000000000..8ed2d3df5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA8.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA9.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA9.xml new file mode 100644 index 000000000..d5c16abfc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oA9.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB1.xml new file mode 100644 index 000000000..2f50c967b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB2.xml new file mode 100644 index 000000000..230783cea --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB3.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB3.xml new file mode 100644 index 000000000..1c42ddacc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB3.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB4.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB4.xml new file mode 100644 index 000000000..2924c9e75 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oB4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE1.xml new file mode 100644 index 000000000..4d5b1663f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE1.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE10.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE10.xml new file mode 100644 index 000000000..04ce91437 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE10.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE11.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE11.xml new file mode 100644 index 000000000..04f6f186d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE11.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE12.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE12.xml new file mode 100644 index 000000000..a5fa39fd2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE12.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE1s.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE1s.xml new file mode 100644 index 000000000..d311e6010 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE1s.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE2.xml new file mode 100644 index 000000000..af62ad6d1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE2.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE3.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE3.xml new file mode 100644 index 000000000..95227da38 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE3.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE4.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE4.xml new file mode 100644 index 000000000..ae48d2ade --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE4.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE4s.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE4s.xml new file mode 100644 index 000000000..6037de52f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE4s.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE5.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE5.xml new file mode 100644 index 000000000..f5edf745a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE6.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE6.xml new file mode 100644 index 000000000..95bb602b6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE6.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE7.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE7.xml new file mode 100644 index 000000000..b3e588d4c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE7.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE8.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE8.xml new file mode 100644 index 000000000..be5de2494 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE8.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE9.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE9.xml new file mode 100644 index 000000000..8ea7ee18c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE9.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE_anime.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE_anime.xml new file mode 100644 index 000000000..f6b4659e2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oE_anime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oF1d_map.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oF1d_map.xml new file mode 100644 index 000000000..f14fecd82 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oF1d_map.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oF1s.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oF1s.xml new file mode 100644 index 000000000..fe41dde63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_oF1s.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_o_anime.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_o_anime.xml new file mode 100644 index 000000000..4ef4ac44c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_o_anime.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_okuta.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_okuta.xml new file mode 100644 index 000000000..b4fccea6f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_okuta.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_opening_demo1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_opening_demo1.xml new file mode 100644 index 000000000..fd0323027 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_opening_demo1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_os.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_os.xml new file mode 100644 index 000000000..5880a9293 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_os.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_os_anime.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_os_anime.xml new file mode 100644 index 000000000..f23636343 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_os_anime.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ossan.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ossan.xml new file mode 100644 index 000000000..5788e3a20 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ossan.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ouke_haka.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ouke_haka.xml new file mode 100644 index 000000000..11da9b26e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ouke_haka.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_owl.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_owl.xml new file mode 100644 index 000000000..64fdf64c5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_owl.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_peehat.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_peehat.xml new file mode 100644 index 000000000..42ee66cde --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_peehat.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_po_composer.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_po_composer.xml new file mode 100644 index 000000000..ff995efce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_po_composer.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_po_field.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_po_field.xml new file mode 100644 index 000000000..78bc0d65a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_po_field.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_po_sisters.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_po_sisters.xml new file mode 100644 index 000000000..b429be258 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_po_sisters.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_poh.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_poh.xml new file mode 100644 index 000000000..be6d6eff4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_poh.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ps.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ps.xml new file mode 100644 index 000000000..9f9c894a6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ps.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_pu_box.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_pu_box.xml new file mode 100644 index 000000000..e1d686e97 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_pu_box.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rd.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rd.xml new file mode 100644 index 000000000..22c7d3373 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rd.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_reeba.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_reeba.xml new file mode 100644 index 000000000..32c697bd9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_reeba.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_relay_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_relay_objects.xml new file mode 100644 index 000000000..47b92fcd2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_relay_objects.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rl.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rl.xml new file mode 100644 index 000000000..2a5ad30f6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rl.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rr.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rr.xml new file mode 100644 index 000000000..98726b14b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rr.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rs.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rs.xml new file mode 100644 index 000000000..152b5489e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_rs.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ru1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ru1.xml new file mode 100644 index 000000000..3d413619f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ru1.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ru2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ru2.xml new file mode 100644 index 000000000..fedf37d48 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ru2.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sa.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sa.xml new file mode 100644 index 000000000..ec45ac961 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sa.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sb.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sb.xml new file mode 100644 index 000000000..64d3bb005 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sb.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sd.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sd.xml new file mode 100644 index 000000000..fb58428c3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sd.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_shop_dungen.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_shop_dungen.xml new file mode 100644 index 000000000..594c43d39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_shop_dungen.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_shopnuts.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_shopnuts.xml new file mode 100644 index 000000000..7065f8941 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_shopnuts.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_siofuki.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_siofuki.xml new file mode 100644 index 000000000..a23240a72 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_siofuki.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sk2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sk2.xml new file mode 100644 index 000000000..f2e7ef6d8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sk2.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_skb.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_skb.xml new file mode 100644 index 000000000..5b5efb484 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_skb.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_skj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_skj.xml new file mode 100644 index 000000000..74548e518 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_skj.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot00_break.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot00_break.xml new file mode 100644 index 000000000..d3be88315 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot00_break.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot00_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot00_objects.xml new file mode 100644 index 000000000..10fb13aea --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot00_objects.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_matoya.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_matoya.xml new file mode 100644 index 000000000..d44b944e0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_matoya.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_matoyab.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_matoyab.xml new file mode 100644 index 000000000..720f50cd3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_matoyab.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_objects.xml new file mode 100644 index 000000000..413e032a9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_objects.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_objects2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_objects2.xml new file mode 100644 index 000000000..36741a949 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot01_objects2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot02_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot02_objects.xml new file mode 100644 index 000000000..65f45ff51 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot02_objects.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot03_object.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot03_object.xml new file mode 100644 index 000000000..f182e7d99 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot03_object.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot04_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot04_objects.xml new file mode 100644 index 000000000..66293d752 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot04_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot05_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot05_objects.xml new file mode 100644 index 000000000..6e7079149 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot05_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot06_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot06_objects.xml new file mode 100644 index 000000000..e3da63b0f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot06_objects.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot07_object.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot07_object.xml new file mode 100644 index 000000000..5bc2bfb6b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot07_object.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot08_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot08_obj.xml new file mode 100644 index 000000000..4d71f3473 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot08_obj.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot09_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot09_obj.xml new file mode 100644 index 000000000..eb6528393 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot09_obj.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot11_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot11_obj.xml new file mode 100644 index 000000000..257298f7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot11_obj.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot12_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot12_obj.xml new file mode 100644 index 000000000..d619c781e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot12_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot15_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot15_obj.xml new file mode 100644 index 000000000..bd59b8cd1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot15_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot16_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot16_obj.xml new file mode 100644 index 000000000..d39de812a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot16_obj.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot17_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot17_obj.xml new file mode 100644 index 000000000..d4239d8d2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot17_obj.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot18_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot18_obj.xml new file mode 100644 index 000000000..cc12b7894 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_spot18_obj.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ssh.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ssh.xml new file mode 100644 index 000000000..6283f8e9f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ssh.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sst.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sst.xml new file mode 100644 index 000000000..d64787fa1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_sst.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_st.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_st.xml new file mode 100644 index 000000000..983b9e2ea --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_st.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_stream.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_stream.xml new file mode 100644 index 000000000..59b0838e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_stream.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_syokudai.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_syokudai.xml new file mode 100644 index 000000000..c1670edec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_syokudai.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ta.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ta.xml new file mode 100644 index 000000000..5e446bf5c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ta.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_timeblock.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_timeblock.xml new file mode 100644 index 000000000..1d6b9e698 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_timeblock.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tite.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tite.xml new file mode 100644 index 000000000..1be65c495 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tite.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tk.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tk.xml new file mode 100644 index 000000000..6b6cce724 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_toki_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_toki_objects.xml new file mode 100644 index 000000000..cd07e60d2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_toki_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_torch2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_torch2.xml new file mode 100644 index 000000000..3388e7d34 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_torch2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_toryo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_toryo.xml new file mode 100644 index 000000000..73f3dcb1e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_toryo.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tp.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tp.xml new file mode 100644 index 000000000..8ea908825 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tp.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tr.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tr.xml new file mode 100644 index 000000000..17ab9ae39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tr.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_trap.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_trap.xml new file mode 100644 index 000000000..56195cf41 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_trap.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_triforce_spot.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_triforce_spot.xml new file mode 100644 index 000000000..87d449458 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_triforce_spot.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ts.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ts.xml new file mode 100644 index 000000000..567277bc3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ts.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tsubo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tsubo.xml new file mode 100644 index 000000000..ee2c5e184 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tsubo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tw.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tw.xml new file mode 100644 index 000000000..d238e10ab --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_tw.xml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_umajump.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_umajump.xml new file mode 100644 index 000000000..2ee4ade46 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_umajump.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_vali.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_vali.xml new file mode 100644 index 000000000..2bab5efaa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_vali.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_vase.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_vase.xml new file mode 100644 index 000000000..091d4c51e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_vase.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_vm.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_vm.xml new file mode 100644 index 000000000..c5b949b36 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_vm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_wallmaster.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_wallmaster.xml new file mode 100644 index 000000000..fbbc4f4af --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_wallmaster.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_warp1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_warp1.xml new file mode 100644 index 000000000..1497d7a10 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_warp1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_warp2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_warp2.xml new file mode 100644 index 000000000..b6d1b3624 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_warp2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_wf.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_wf.xml new file mode 100644 index 000000000..ebfb708d2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_wf.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_wood02.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_wood02.xml new file mode 100644 index 000000000..47ec342ca --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_wood02.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_xc.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_xc.xml new file mode 100644 index 000000000..bb2bf3e7a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_xc.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_yabusame_point.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_yabusame_point.xml new file mode 100644 index 000000000..bed9e8a60 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_yabusame_point.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ydan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ydan_objects.xml new file mode 100644 index 000000000..e2adf307f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_ydan_objects.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_yukabyun.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_yukabyun.xml new file mode 100644 index 000000000..d594ebbb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_yukabyun.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zf.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zf.xml new file mode 100644 index 000000000..7f20eb786 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zf.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zg.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zg.xml new file mode 100644 index 000000000..79005516c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zg.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl1.xml new file mode 100644 index 000000000..001e5be14 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl1.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl2.xml new file mode 100644 index 000000000..959a919ec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl2_anime1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl2_anime1.xml new file mode 100644 index 000000000..cada50486 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl2_anime1.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl2_anime2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl2_anime2.xml new file mode 100644 index 000000000..47016e2e0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl2_anime2.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl4.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl4.xml new file mode 100644 index 000000000..8e7a2837e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zl4.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zo.xml new file mode 100644 index 000000000..77465760e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/objects/object_zo.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Arrow_Fire.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Arrow_Fire.xml new file mode 100644 index 000000000..ef34ff91e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Arrow_Fire.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Arrow_Ice.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Arrow_Ice.xml new file mode 100644 index 000000000..13bb1b610 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Arrow_Ice.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Arrow_Light.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Arrow_Light.xml new file mode 100644 index 000000000..6f985a0b1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Arrow_Light.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Bg_Ganon_Otyuka.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Bg_Ganon_Otyuka.xml new file mode 100644 index 000000000..c3c809065 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Bg_Ganon_Otyuka.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Bg_Jya_Cobra.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Bg_Jya_Cobra.xml new file mode 100644 index 000000000..3106fdab5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Bg_Jya_Cobra.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Dodongo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Dodongo.xml new file mode 100644 index 000000000..ddc03690e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Dodongo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Ganon.xml new file mode 100644 index 000000000..72b81e798 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Ganon.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Ganon2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Ganon2.xml new file mode 100644 index 000000000..802a42bd2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Ganon2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Sst.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Sst.xml new file mode 100644 index 000000000..23093c9f1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Boss_Sst.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Demo_Shd.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Demo_Shd.xml new file mode 100644 index 000000000..e9d9ba222 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Demo_Shd.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Bili.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Bili.xml new file mode 100644 index 000000000..5db330f6e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Bili.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Clear_Tag.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Clear_Tag.xml new file mode 100644 index 000000000..ddbf1bb91 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Clear_Tag.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Ganon_Mant.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Ganon_Mant.xml new file mode 100644 index 000000000..cab7d3ce4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Ganon_Mant.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Ganon_Organ.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Ganon_Organ.xml new file mode 100644 index 000000000..a4cea2ff9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Ganon_Organ.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Holl.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Holl.xml new file mode 100644 index 000000000..0a02bddb1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Holl.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Jsjutan.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Jsjutan.xml new file mode 100644 index 000000000..de46f6ed3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Jsjutan.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Kanban.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Kanban.xml new file mode 100644 index 000000000..e181840b8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Kanban.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Sda.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Sda.xml new file mode 100644 index 000000000..cd24cb8d7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Sda.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Ssh.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Ssh.xml new file mode 100644 index 000000000..2e419c8c4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Ssh.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_St.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_St.xml new file mode 100644 index 000000000..fecbf6f1e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_St.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Sth.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Sth.xml new file mode 100644 index 000000000..22f1e683e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_En_Sth.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_End_Title.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_End_Title.xml new file mode 100644 index 000000000..7b083bdd2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_End_Title.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_File_Choose.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_File_Choose.xml new file mode 100644 index 000000000..6b0b7848d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_File_Choose.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Magic_Dark.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Magic_Dark.xml new file mode 100644 index 000000000..a037bbdf6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Magic_Dark.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Magic_Fire.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Magic_Fire.xml new file mode 100644 index 000000000..1f42916e2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Magic_Fire.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Magic_Wind.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Magic_Wind.xml new file mode 100644 index 000000000..19bdd2f32 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Magic_Wind.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Spot.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Spot.xml new file mode 100644 index 000000000..ff49072ab --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Spot.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Storm.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Storm.xml new file mode 100644 index 000000000..8e0c6beac --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Storm.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe.xml new file mode 100644 index 000000000..c35e96db1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe2.xml new file mode 100644 index 000000000..a56c505ad --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe3.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe3.xml new file mode 100644 index 000000000..7d0f5ddc5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe4.xml b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe4.xml new file mode 100644 index 000000000..c7513e94c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/overlays/ovl_Oceff_Wipe4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/Bmori1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/Bmori1.xml new file mode 100644 index 000000000..373f36030 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/Bmori1.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/FIRE_bs.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/FIRE_bs.xml new file mode 100644 index 000000000..89331ecc2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/FIRE_bs.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HAKAdan.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HAKAdan.xml new file mode 100644 index 000000000..e557c80a5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HAKAdan.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HAKAdanCH.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HAKAdanCH.xml new file mode 100644 index 000000000..97401aff6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HAKAdanCH.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HAKAdan_bs.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HAKAdan_bs.xml new file mode 100644 index 000000000..d36ac6b77 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HAKAdan_bs.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HIDAN.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HIDAN.xml new file mode 100644 index 000000000..fa4d784f1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/HIDAN.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/MIZUsin.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/MIZUsin.xml new file mode 100644 index 000000000..00c5aa82d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/MIZUsin.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/MIZUsin_bs.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/MIZUsin_bs.xml new file mode 100644 index 000000000..99ae2b3ef --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/MIZUsin_bs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/bdan.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/bdan.xml new file mode 100644 index 000000000..a9e520f4c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/bdan.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/bdan_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/bdan_boss.xml new file mode 100644 index 000000000..9fccf2c30 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/bdan_boss.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ddan.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ddan.xml new file mode 100644 index 000000000..1446a9c98 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ddan.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ddan_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ddan_boss.xml new file mode 100644 index 000000000..05633e53e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ddan_boss.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon.xml new file mode 100644 index 000000000..f857dbe94 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_boss.xml new file mode 100644 index 000000000..36c5e8107 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_boss.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_demo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_demo.xml new file mode 100644 index 000000000..56c98efed --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_demo.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_final.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_final.xml new file mode 100644 index 000000000..3ec568cfb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_final.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_sonogo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_sonogo.xml new file mode 100644 index 000000000..84ef36950 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_sonogo.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_tou.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_tou.xml new file mode 100644 index 000000000..1ae37b963 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganon_tou.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganontika.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganontika.xml new file mode 100644 index 000000000..a5ff210ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganontika.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganontikasonogo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganontikasonogo.xml new file mode 100644 index 000000000..060d4941b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ganontikasonogo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/gerudoway.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/gerudoway.xml new file mode 100644 index 000000000..827277614 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/gerudoway.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ice_doukutu.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ice_doukutu.xml new file mode 100644 index 000000000..0f1bc3b28 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ice_doukutu.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/jyasinboss.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/jyasinboss.xml new file mode 100644 index 000000000..86c0d317b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/jyasinboss.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/jyasinzou.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/jyasinzou.xml new file mode 100644 index 000000000..bc14a46ac --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/jyasinzou.xml @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/men.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/men.xml new file mode 100644 index 000000000..d9e5960e8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/men.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/moribossroom.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/moribossroom.xml new file mode 100644 index 000000000..b9959eefa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/moribossroom.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ydan.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ydan.xml new file mode 100644 index 000000000..aed7d2660 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ydan.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ydan_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ydan_boss.xml new file mode 100644 index 000000000..7ea240547 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/dungeons/ydan_boss.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/bowling.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/bowling.xml new file mode 100644 index 000000000..9a41763a2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/bowling.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/daiyousei_izumi.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/daiyousei_izumi.xml new file mode 100644 index 000000000..4f9a03fc0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/daiyousei_izumi.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hairal_niwa.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hairal_niwa.xml new file mode 100644 index 000000000..06d89f2fe --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hairal_niwa.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hairal_niwa_n.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hairal_niwa_n.xml new file mode 100644 index 000000000..6f4c181e0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hairal_niwa_n.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hakasitarelay.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hakasitarelay.xml new file mode 100644 index 000000000..91be63d14 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hakasitarelay.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hut.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hut.xml new file mode 100644 index 000000000..a4ef5715f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hylia_labo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hylia_labo.xml new file mode 100644 index 000000000..56822e67a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/hylia_labo.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/impa.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/impa.xml new file mode 100644 index 000000000..db757e3d3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/impa.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kakariko.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kakariko.xml new file mode 100644 index 000000000..e4e9b102c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kakariko.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kenjyanoma.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kenjyanoma.xml new file mode 100644 index 000000000..4e8a58f3b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kenjyanoma.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home.xml new file mode 100644 index 000000000..8c0305493 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home3.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home3.xml new file mode 100644 index 000000000..9f36eb41c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home4.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home4.xml new file mode 100644 index 000000000..eb861aedb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home4.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home5.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home5.xml new file mode 100644 index 000000000..974987fed --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/kokiri_home5.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/labo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/labo.xml new file mode 100644 index 000000000..c0a9d2eb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/labo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/link_home.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/link_home.xml new file mode 100644 index 000000000..2fb88ae34 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/link_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/mahouya.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/mahouya.xml new file mode 100644 index 000000000..8ae462f9d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/mahouya.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/malon_stable.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/malon_stable.xml new file mode 100644 index 000000000..aff97eeb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/malon_stable.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/miharigoya.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/miharigoya.xml new file mode 100644 index 000000000..63f8676ac --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/miharigoya.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/nakaniwa.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/nakaniwa.xml new file mode 100644 index 000000000..2fb2d5e6a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/nakaniwa.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/syatekijyou.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/syatekijyou.xml new file mode 100644 index 000000000..05243b52c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/syatekijyou.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/takaraya.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/takaraya.xml new file mode 100644 index 000000000..5b438980b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/takaraya.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/tent.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/tent.xml new file mode 100644 index 000000000..de72cc5f4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/tent.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/tokinoma.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/tokinoma.xml new file mode 100644 index 000000000..d7878b895 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/tokinoma.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/yousei_izumi_tate.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/yousei_izumi_tate.xml new file mode 100644 index 000000000..3b6dd2dec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/yousei_izumi_tate.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/yousei_izumi_yoko.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/yousei_izumi_yoko.xml new file mode 100644 index 000000000..90a8d95d0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/indoors/yousei_izumi_yoko.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/enrui.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/enrui.xml new file mode 100644 index 000000000..d8c06e545 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/enrui.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/entra_n.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/entra_n.xml new file mode 100644 index 000000000..5b408ac3a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/entra_n.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hakaana.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hakaana.xml new file mode 100644 index 000000000..e7dc93dd0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hakaana.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hakaana2.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hakaana2.xml new file mode 100644 index 000000000..2d8ba4906 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hakaana2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hakaana_ouke.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hakaana_ouke.xml new file mode 100644 index 000000000..17f53613e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hakaana_ouke.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hiral_demo.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hiral_demo.xml new file mode 100644 index 000000000..1331fdd4c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/hiral_demo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/kakariko3.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/kakariko3.xml new file mode 100644 index 000000000..07b62c44d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/kakariko3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/kakusiana.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/kakusiana.xml new file mode 100644 index 000000000..c3f993ff4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/kakusiana.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/kinsuta.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/kinsuta.xml new file mode 100644 index 000000000..aac0f6c4e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/kinsuta.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_alley.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_alley.xml new file mode 100644 index 000000000..c30467303 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_alley.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_alley_n.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_alley_n.xml new file mode 100644 index 000000000..65db60411 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_alley_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_day.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_day.xml new file mode 100644 index 000000000..00887e69c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_day.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_night.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_night.xml new file mode 100644 index 000000000..c58e38744 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_night.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_ruins.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_ruins.xml new file mode 100644 index 000000000..f0ec75e75 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/market_ruins.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/shrine.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/shrine.xml new file mode 100644 index 000000000..b9ddf2cf7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/shrine.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/shrine_n.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/shrine_n.xml new file mode 100644 index 000000000..4878338aa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/shrine_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/shrine_r.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/shrine_r.xml new file mode 100644 index 000000000..122036791 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/shrine_r.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/turibori.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/turibori.xml new file mode 100644 index 000000000..0633224d9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/misc/turibori.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/entra.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/entra.xml new file mode 100644 index 000000000..92ee57f59 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/entra.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/souko.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/souko.xml new file mode 100644 index 000000000..8dd9d9e48 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/souko.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot00.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot00.xml new file mode 100644 index 000000000..508d9309b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot00.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot01.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot01.xml new file mode 100644 index 000000000..eb725afa6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot01.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot02.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot02.xml new file mode 100644 index 000000000..c7924c29d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot02.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot03.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot03.xml new file mode 100644 index 000000000..9434185f4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot03.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot04.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot04.xml new file mode 100644 index 000000000..f33860420 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot04.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot05.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot05.xml new file mode 100644 index 000000000..4f7c62b91 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot05.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot06.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot06.xml new file mode 100644 index 000000000..f4af602cf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot06.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot07.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot07.xml new file mode 100644 index 000000000..eeb976f7f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot07.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot08.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot08.xml new file mode 100644 index 000000000..86582f0dc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot08.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot09.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot09.xml new file mode 100644 index 000000000..5bb9e059c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot09.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot10.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot10.xml new file mode 100644 index 000000000..66365e3d8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot11.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot11.xml new file mode 100644 index 000000000..76ff3b822 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot11.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot12.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot12.xml new file mode 100644 index 000000000..e21523b21 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot12.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot13.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot13.xml new file mode 100644 index 000000000..c68913065 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot13.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot15.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot15.xml new file mode 100644 index 000000000..e75f7b684 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot15.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot16.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot16.xml new file mode 100644 index 000000000..f41b226f8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot16.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot17.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot17.xml new file mode 100644 index 000000000..feb267251 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot17.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot18.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot18.xml new file mode 100644 index 000000000..d70fccf4b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot18.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot20.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot20.xml new file mode 100644 index 000000000..1381f6ecb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/overworld/spot20.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/alley_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/alley_shop.xml new file mode 100644 index 000000000..95548de1b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/alley_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/drag.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/drag.xml new file mode 100644 index 000000000..acb6515fb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/drag.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/face_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/face_shop.xml new file mode 100644 index 000000000..16a974608 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/face_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/golon.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/golon.xml new file mode 100644 index 000000000..c58672798 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/golon.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/kokiri_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/kokiri_shop.xml new file mode 100644 index 000000000..50cd633e5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/kokiri_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/night_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/night_shop.xml new file mode 100644 index 000000000..5954d9c83 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/night_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/shop1.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/shop1.xml new file mode 100644 index 000000000..525a06d63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/shop1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/zoora.xml b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/zoora.xml new file mode 100644 index 000000000..0e4ac18f8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/scenes/shops/zoora.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/text/elf_message_field.xml b/soh/assets/xml/GC_NMQ_NTSC_J/text/elf_message_field.xml new file mode 100644 index 000000000..789a554ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/text/elf_message_field.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/text/elf_message_ydan.xml b/soh/assets/xml/GC_NMQ_NTSC_J/text/elf_message_ydan.xml new file mode 100644 index 000000000..f784afcf4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/text/elf_message_ydan.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/text/message_data_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/text/message_data_static.xml new file mode 100644 index 000000000..fc181170a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/text/message_data_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/backgrounds.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/backgrounds.xml new file mode 100644 index 000000000..c60ff57a8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/backgrounds.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/boss_title_cards.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/boss_title_cards.xml new file mode 100644 index 000000000..84f555bd1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/boss_title_cards.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/do_action_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/do_action_static.xml new file mode 100644 index 000000000..efabd54a5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/do_action_static.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_24_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_24_static.xml new file mode 100644 index 000000000..cdb8cc737 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_24_static.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_dungeon_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_dungeon_static.xml new file mode 100644 index 000000000..873c490fc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_dungeon_static.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_field_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_field_static.xml new file mode 100644 index 000000000..ed991406b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_field_static.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_gameover_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_gameover_static.xml new file mode 100644 index 000000000..ffd392868 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_gameover_static.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_jpn_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_jpn_static.xml new file mode 100644 index 000000000..f2fe854b8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_jpn_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_nes_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_nes_static.xml new file mode 100644 index 000000000..6cd92acfc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_nes_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_static.xml new file mode 100644 index 000000000..9e844615b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/icon_item_static.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/item_name_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/item_name_static.xml new file mode 100644 index 000000000..266b3c200 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/item_name_static.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/kanji.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/kanji.xml new file mode 100644 index 000000000..5159387a1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/kanji.xml @@ -0,0 +1,3984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_48x85_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_48x85_static.xml new file mode 100644 index 000000000..b2ea46340 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_48x85_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_grand_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_grand_static.xml new file mode 100644 index 000000000..201955bfc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_grand_static.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_i_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_i_static.xml new file mode 100644 index 000000000..1721f6d84 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_i_static.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_name_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_name_static.xml new file mode 100644 index 000000000..ca4c4c0bd --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/map_name_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/message_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/message_static.xml new file mode 100644 index 000000000..afdde60de --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/message_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/message_texture_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/message_texture_static.xml new file mode 100644 index 000000000..bbf7e1259 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/message_texture_static.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/nes_font_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/nes_font_static.xml new file mode 100644 index 000000000..f1b80ee04 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/nes_font_static.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/nintendo_rogo_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/nintendo_rogo_static.xml new file mode 100644 index 000000000..f09de3b0f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/nintendo_rogo_static.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/parameter_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/parameter_static.xml new file mode 100644 index 000000000..c51dacf1f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/parameter_static.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/place_title_cards.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/place_title_cards.xml new file mode 100644 index 000000000..b688cce00 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/place_title_cards.xml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/skyboxes.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/skyboxes.xml new file mode 100644 index 000000000..104ffb2a3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/skyboxes.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J/textures/title_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J/textures/title_static.xml new file mode 100644 index 000000000..5f58c5a82 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J/textures/title_static.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/audio/Audio.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/audio/Audio.xml new file mode 100644 index 000000000..90f5dee24 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/audio/Audio.xml @@ -0,0 +1,1558 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/fbdemo_circle.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/fbdemo_circle.xml new file mode 100644 index 000000000..e6b4bba12 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/fbdemo_circle.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/fbdemo_triforce.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/fbdemo_triforce.xml new file mode 100644 index 000000000..bbc709a4f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/fbdemo_triforce.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/fbdemo_wipe1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/fbdemo_wipe1.xml new file mode 100644 index 000000000..9d2e12231 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/fbdemo_wipe1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/sys_matrix.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/sys_matrix.xml new file mode 100644 index 000000000..1521be9f1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/code/sys_matrix.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/misc/link_animetion.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/misc/link_animetion.xml new file mode 100644 index 000000000..9de1e92d3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/misc/link_animetion.xml @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/gameplay_dangeon_keep.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/gameplay_dangeon_keep.xml new file mode 100644 index 000000000..5b1a9050d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/gameplay_dangeon_keep.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/gameplay_field_keep.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/gameplay_field_keep.xml new file mode 100644 index 000000000..011e8f7fc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/gameplay_field_keep.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/gameplay_keep.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/gameplay_keep.xml new file mode 100644 index 000000000..94eee8845 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/gameplay_keep.xml @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_Bb.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_Bb.xml new file mode 100644 index 000000000..5d04bde45 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_Bb.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ahg.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ahg.xml new file mode 100644 index 000000000..4d37b1b11 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ahg.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_am.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_am.xml new file mode 100644 index 000000000..b70c70d70 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_am.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ane.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ane.xml new file mode 100644 index 000000000..1e29b351e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ane.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ani.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ani.xml new file mode 100644 index 000000000..c70621c6f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ani.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_anubice.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_anubice.xml new file mode 100644 index 000000000..fb029586b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_anubice.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_aob.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_aob.xml new file mode 100644 index 000000000..e6202d0cf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_aob.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_b_heart.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_b_heart.xml new file mode 100644 index 000000000..00f7cd677 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_b_heart.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bba.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bba.xml new file mode 100644 index 000000000..ccc5c2136 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bba.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bdan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bdan_objects.xml new file mode 100644 index 000000000..dcd56d385 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bdan_objects.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bdoor.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bdoor.xml new file mode 100644 index 000000000..a092f0c23 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bdoor.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bg.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bg.xml new file mode 100644 index 000000000..791226b71 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bg.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bigokuta.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bigokuta.xml new file mode 100644 index 000000000..1c7d39e31 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bigokuta.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bird.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bird.xml new file mode 100644 index 000000000..167a5022d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bird.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bji.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bji.xml new file mode 100644 index 000000000..c665b6b00 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bji.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bl.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bl.xml new file mode 100644 index 000000000..1c2ef4ec6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_blkobj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_blkobj.xml new file mode 100644 index 000000000..345a8ebd9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_blkobj.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bob.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bob.xml new file mode 100644 index 000000000..289e994e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bob.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_boj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_boj.xml new file mode 100644 index 000000000..4be4764ab --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_boj.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bombf.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bombf.xml new file mode 100644 index 000000000..83e60248d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bombf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bombiwa.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bombiwa.xml new file mode 100644 index 000000000..26ab6b4f3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bombiwa.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bowl.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bowl.xml new file mode 100644 index 000000000..ffe6d43db --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bowl.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_box.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_box.xml new file mode 100644 index 000000000..106d2d335 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_box.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_brob.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_brob.xml new file mode 100644 index 000000000..718dcd561 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_brob.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bubble.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bubble.xml new file mode 100644 index 000000000..f5de18692 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bubble.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bv.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bv.xml new file mode 100644 index 000000000..58db6e1d4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bv.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bw.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bw.xml new file mode 100644 index 000000000..6fd39fbb1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bw.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bwall.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bwall.xml new file mode 100644 index 000000000..d4f43ddc1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bwall.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bxa.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bxa.xml new file mode 100644 index 000000000..fb78c117e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_bxa.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cne.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cne.xml new file mode 100644 index 000000000..0c14d0bc5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cne.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cob.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cob.xml new file mode 100644 index 000000000..ba051cfa7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cob.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cow.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cow.xml new file mode 100644 index 000000000..5d067c329 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cow.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_crow.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_crow.xml new file mode 100644 index 000000000..77337c644 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_crow.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cs.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cs.xml new file mode 100644 index 000000000..83804ccaf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_cs.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_d_elevator.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_d_elevator.xml new file mode 100644 index 000000000..6be59c154 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_d_elevator.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_d_hsblock.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_d_hsblock.xml new file mode 100644 index 000000000..4bb50c2b4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_d_hsblock.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_d_lift.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_d_lift.xml new file mode 100644 index 000000000..291238519 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_d_lift.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_daiku.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_daiku.xml new file mode 100644 index 000000000..1524c7a26 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_daiku.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ddan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ddan_objects.xml new file mode 100644 index 000000000..3fc563b96 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ddan_objects.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dekubaba.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dekubaba.xml new file mode 100644 index 000000000..7202a833f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dekubaba.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dekujr.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dekujr.xml new file mode 100644 index 000000000..e906bf61c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dekujr.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dekunuts.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dekunuts.xml new file mode 100644 index 000000000..5fceef416 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dekunuts.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_demo_6k.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_demo_6k.xml new file mode 100644 index 000000000..73058d5e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_demo_6k.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_demo_kekkai.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_demo_kekkai.xml new file mode 100644 index 000000000..aa54bc2ee --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_demo_kekkai.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_demo_tre_lgt.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_demo_tre_lgt.xml new file mode 100644 index 000000000..9ea19012b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_demo_tre_lgt.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dh.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dh.xml new file mode 100644 index 000000000..7a52d7dbe --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dh.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dnk.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dnk.xml new file mode 100644 index 000000000..3bce34304 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dnk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dns.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dns.xml new file mode 100644 index 000000000..8b78ffcf2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dns.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dodojr.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dodojr.xml new file mode 100644 index 000000000..4dfd7d6e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dodojr.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dodongo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dodongo.xml new file mode 100644 index 000000000..779e20e9d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dodongo.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dog.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dog.xml new file mode 100644 index 000000000..ef00442b6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dog.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_door_gerudo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_door_gerudo.xml new file mode 100644 index 000000000..2f1726204 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_door_gerudo.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_door_killer.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_door_killer.xml new file mode 100644 index 000000000..a37f590d6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_door_killer.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ds.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ds.xml new file mode 100644 index 000000000..0413a9e2e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ds.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ds2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ds2.xml new file mode 100644 index 000000000..683bcc68d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ds2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_du.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_du.xml new file mode 100644 index 000000000..0babd962b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_du.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dy_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dy_obj.xml new file mode 100644 index 000000000..5e792edb5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_dy_obj.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ec.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ec.xml new file mode 100644 index 000000000..7ec83e284 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ec.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_crystal_light.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_crystal_light.xml new file mode 100644 index 000000000..9215b6a39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_crystal_light.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_doughnut.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_doughnut.xml new file mode 100644 index 000000000..7f12c56f5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_doughnut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_erupc.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_erupc.xml new file mode 100644 index 000000000..800d9535f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_erupc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_fire_ball.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_fire_ball.xml new file mode 100644 index 000000000..2fc65b16f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_fire_ball.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_flash.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_flash.xml new file mode 100644 index 000000000..5f962f162 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_flash.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_lgt_shower.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_lgt_shower.xml new file mode 100644 index 000000000..67ef5ce7e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_lgt_shower.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_star_field.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_star_field.xml new file mode 100644 index 000000000..00b47c460 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_star_field.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_tw.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_tw.xml new file mode 100644 index 000000000..de5376569 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_efc_tw.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ei.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ei.xml new file mode 100644 index 000000000..e4132491f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ei.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fa.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fa.xml new file mode 100644 index 000000000..2f1bf9a5e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fa.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fd.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fd.xml new file mode 100644 index 000000000..9bc25d3a6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fd.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fd2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fd2.xml new file mode 100644 index 000000000..44b5f5f9c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fd2.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fhg.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fhg.xml new file mode 100644 index 000000000..6a275daeb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fhg.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fire.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fire.xml new file mode 100644 index 000000000..49bf620cb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fire.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_firefly.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_firefly.xml new file mode 100644 index 000000000..8c26a4341 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_firefly.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fish.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fish.xml new file mode 100644 index 000000000..f5ad4f6da --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fish.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fr.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fr.xml new file mode 100644 index 000000000..25ee2ad42 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fr.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fu.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fu.xml new file mode 100644 index 000000000..82c449e3d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fu.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fw.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fw.xml new file mode 100644 index 000000000..ee9821d26 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fw.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fz.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fz.xml new file mode 100644 index 000000000..dad6fec5c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_fz.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon.xml new file mode 100644 index 000000000..5b68602ba --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon2.xml new file mode 100644 index 000000000..7e715dd41 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon2.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_anime1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_anime1.xml new file mode 100644 index 000000000..b1016299b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_anime1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_anime2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_anime2.xml new file mode 100644 index 000000000..180e5995c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_anime2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_anime3.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_anime3.xml new file mode 100644 index 000000000..be4c4dcb1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_anime3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_objects.xml new file mode 100644 index 000000000..5e32610ff --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ganon_objects.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ge1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ge1.xml new file mode 100644 index 000000000..79e0768b8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ge1.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_geff.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_geff.xml new file mode 100644 index 000000000..f0667743b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_geff.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_geldb.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_geldb.xml new file mode 100644 index 000000000..49b12ef2e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_geldb.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_arrow.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_arrow.xml new file mode 100644 index 000000000..4b58787a9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_arrow.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_arrowcase.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_arrowcase.xml new file mode 100644 index 000000000..267b0a734 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_arrowcase.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bean.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bean.xml new file mode 100644 index 000000000..e74247816 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bean.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bomb_1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bomb_1.xml new file mode 100644 index 000000000..bae86c11d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bomb_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bomb_2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bomb_2.xml new file mode 100644 index 000000000..1400c4a4d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bomb_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bombpouch.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bombpouch.xml new file mode 100644 index 000000000..07134748c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bombpouch.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_boomerang.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_boomerang.xml new file mode 100644 index 000000000..3c1a0fe7f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_boomerang.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_boots_2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_boots_2.xml new file mode 100644 index 000000000..3bcb6a47a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_boots_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bosskey.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bosskey.xml new file mode 100644 index 000000000..e5e4bc86c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bosskey.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bottle.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bottle.xml new file mode 100644 index 000000000..3b0884a03 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bottle.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bottle_letter.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bottle_letter.xml new file mode 100644 index 000000000..443219caf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bottle_letter.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bow.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bow.xml new file mode 100644 index 000000000..946e9c496 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bow.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bracelet.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bracelet.xml new file mode 100644 index 000000000..5a0b62a60 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_bracelet.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_brokensword.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_brokensword.xml new file mode 100644 index 000000000..408741ac5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_brokensword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_butterfly.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_butterfly.xml new file mode 100644 index 000000000..7b60a7724 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_butterfly.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_clothes.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_clothes.xml new file mode 100644 index 000000000..3f897b6d1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_clothes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_coin.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_coin.xml new file mode 100644 index 000000000..22e29f255 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_coin.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_compass.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_compass.xml new file mode 100644 index 000000000..076229b11 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_compass.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_dekupouch.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_dekupouch.xml new file mode 100644 index 000000000..8925e6fa5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_dekupouch.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_egg.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_egg.xml new file mode 100644 index 000000000..2b2e2847d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_egg.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_eye_lotion.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_eye_lotion.xml new file mode 100644 index 000000000..5128c5f6f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_eye_lotion.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_fire.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_fire.xml new file mode 100644 index 000000000..4bfd76a7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_fire.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_fish.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_fish.xml new file mode 100644 index 000000000..edb39dc29 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_fish.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_frog.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_frog.xml new file mode 100644 index 000000000..a656c306b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_frog.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_gerudo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_gerudo.xml new file mode 100644 index 000000000..d65daee8e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_gerudo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_gerudomask.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_gerudomask.xml new file mode 100644 index 000000000..cfcb878d9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_gerudomask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ghost.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ghost.xml new file mode 100644 index 000000000..795f0cfd1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ghost.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_glasses.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_glasses.xml new file mode 100644 index 000000000..63d32ab5a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_glasses.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_gloves.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_gloves.xml new file mode 100644 index 000000000..0e1c4259d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_gloves.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_goddess.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_goddess.xml new file mode 100644 index 000000000..50cbdd891 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_goddess.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_golonmask.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_golonmask.xml new file mode 100644 index 000000000..844d90e71 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_golonmask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_grass.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_grass.xml new file mode 100644 index 000000000..ae7834201 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_grass.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hammer.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hammer.xml new file mode 100644 index 000000000..feb5c8659 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hammer.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_heart.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_heart.xml new file mode 100644 index 000000000..48e78b1b5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_heart.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hearts.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hearts.xml new file mode 100644 index 000000000..d2e763e63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hearts.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hookshot.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hookshot.xml new file mode 100644 index 000000000..a6b3b0fda --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hookshot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hoverboots.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hoverboots.xml new file mode 100644 index 000000000..6d41df8fd --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_hoverboots.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_insect.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_insect.xml new file mode 100644 index 000000000..7af5b5b3b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_insect.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_jewel.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_jewel.xml new file mode 100644 index 000000000..e83c65116 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_jewel.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_key.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_key.xml new file mode 100644 index 000000000..a37d45a71 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_key.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ki_tan_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ki_tan_mask.xml new file mode 100644 index 000000000..46eff7d3e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ki_tan_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_letter.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_letter.xml new file mode 100644 index 000000000..bea868339 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_letter.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_liquid.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_liquid.xml new file mode 100644 index 000000000..18a5c3d7a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_liquid.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_longsword.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_longsword.xml new file mode 100644 index 000000000..7161e42e3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_longsword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_m_arrow.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_m_arrow.xml new file mode 100644 index 000000000..0fd659ae9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_m_arrow.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_magicpot.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_magicpot.xml new file mode 100644 index 000000000..7623e6353 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_magicpot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_map.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_map.xml new file mode 100644 index 000000000..471c1dab9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_map.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_medal.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_medal.xml new file mode 100644 index 000000000..28e5b1e68 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_medal.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_melody.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_melody.xml new file mode 100644 index 000000000..b01fca953 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_melody.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_milk.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_milk.xml new file mode 100644 index 000000000..a3e223b3e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_milk.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_mushroom.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_mushroom.xml new file mode 100644 index 000000000..5b19bca74 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_mushroom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_niwatori.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_niwatori.xml new file mode 100644 index 000000000..c8389f62c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_niwatori.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_nuts.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_nuts.xml new file mode 100644 index 000000000..c59903c43 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_nuts.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ocarina.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ocarina.xml new file mode 100644 index 000000000..82607677d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ocarina.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ocarina_0.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ocarina_0.xml new file mode 100644 index 000000000..2c5f70d98 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ocarina_0.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_pachinko.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_pachinko.xml new file mode 100644 index 000000000..5f808baf9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_pachinko.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_powder.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_powder.xml new file mode 100644 index 000000000..fb7dc0155 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_powder.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_prescription.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_prescription.xml new file mode 100644 index 000000000..75ae7eb2b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_prescription.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_purse.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_purse.xml new file mode 100644 index 000000000..054731dec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_purse.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_rabit_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_rabit_mask.xml new file mode 100644 index 000000000..9d4eb9487 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_rabit_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_redead_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_redead_mask.xml new file mode 100644 index 000000000..7de08487f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_redead_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_rupy.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_rupy.xml new file mode 100644 index 000000000..0a1af96d0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_rupy.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_saw.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_saw.xml new file mode 100644 index 000000000..dcc038b7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_saw.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_scale.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_scale.xml new file mode 100644 index 000000000..1cf5de5b9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_scale.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_seed.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_seed.xml new file mode 100644 index 000000000..82c15c82d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_seed.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_shield_1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_shield_1.xml new file mode 100644 index 000000000..2f11e3f6d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_shield_1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_shield_2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_shield_2.xml new file mode 100644 index 000000000..176ae025f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_shield_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_shield_3.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_shield_3.xml new file mode 100644 index 000000000..8d1e5dafd --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_shield_3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_skj_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_skj_mask.xml new file mode 100644 index 000000000..e6c90f76f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_skj_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_soldout.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_soldout.xml new file mode 100644 index 000000000..a15b1253e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_soldout.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_soul.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_soul.xml new file mode 100644 index 000000000..a68178eba --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_soul.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_stick.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_stick.xml new file mode 100644 index 000000000..fed89f465 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_stick.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_sutaru.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_sutaru.xml new file mode 100644 index 000000000..a2606afbe --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_sutaru.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_sword_1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_sword_1.xml new file mode 100644 index 000000000..e1119abca --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_sword_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ticketstone.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ticketstone.xml new file mode 100644 index 000000000..73bf888d1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_ticketstone.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_truth_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_truth_mask.xml new file mode 100644 index 000000000..3b4edf3de --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_truth_mask.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_zoramask.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_zoramask.xml new file mode 100644 index 000000000..e3b1ab10e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gi_zoramask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gj.xml new file mode 100644 index 000000000..ee6dab74f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gj.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gjyo_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gjyo_objects.xml new file mode 100644 index 000000000..ea4f8444f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gjyo_objects.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gla.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gla.xml new file mode 100644 index 000000000..499a3720d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gla.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gm.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gm.xml new file mode 100644 index 000000000..91b10cc42 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gm.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gnd.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gnd.xml new file mode 100644 index 000000000..3ae3b57f3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gnd.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gnd_magic.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gnd_magic.xml new file mode 100644 index 000000000..a88d419d7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gnd_magic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gndd.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gndd.xml new file mode 100644 index 000000000..8bf5d770c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gndd.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_god_lgt.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_god_lgt.xml new file mode 100644 index 000000000..60df9e469 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_god_lgt.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gol.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gol.xml new file mode 100644 index 000000000..7e04508cb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gol.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_goma.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_goma.xml new file mode 100644 index 000000000..ec3e42114 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_goma.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_goroiwa.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_goroiwa.xml new file mode 100644 index 000000000..5d406e957 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_goroiwa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gr.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gr.xml new file mode 100644 index 000000000..5f7360ae5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gr.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gs.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gs.xml new file mode 100644 index 000000000..145be1665 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gs.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gt.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gt.xml new file mode 100644 index 000000000..1d79d4e39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_gt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_haka.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_haka.xml new file mode 100644 index 000000000..f6b263c37 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_haka.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_haka_door.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_haka_door.xml new file mode 100644 index 000000000..1376d0356 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_haka_door.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_haka_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_haka_objects.xml new file mode 100644 index 000000000..3ca6d27c0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_haka_objects.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hakach_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hakach_objects.xml new file mode 100644 index 000000000..0de02aaf1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hakach_objects.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hata.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hata.xml new file mode 100644 index 000000000..b0324c3be --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hata.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_heavy_object.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_heavy_object.xml new file mode 100644 index 000000000..ecc795321 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_heavy_object.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hidan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hidan_objects.xml new file mode 100644 index 000000000..f41c0ee5e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hidan_objects.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hintnuts.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hintnuts.xml new file mode 100644 index 000000000..a7290f395 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hintnuts.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hni.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hni.xml new file mode 100644 index 000000000..6b317eb7a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hni.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse.xml new file mode 100644 index 000000000..74619e597 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_ganon.xml new file mode 100644 index 000000000..0a55462e2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_ganon.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_link_child.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_link_child.xml new file mode 100644 index 000000000..146c564f5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_link_child.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_normal.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_normal.xml new file mode 100644 index 000000000..2facab39c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_normal.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_zelda.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_zelda.xml new file mode 100644 index 000000000..af270c658 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_horse_zelda.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hs.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hs.xml new file mode 100644 index 000000000..cf5d06e1a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_hs.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_human.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_human.xml new file mode 100644 index 000000000..05795cb33 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_human.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ice_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ice_objects.xml new file mode 100644 index 000000000..c7d059d70 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ice_objects.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ik.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ik.xml new file mode 100644 index 000000000..8a6028f7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ik.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_im.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_im.xml new file mode 100644 index 000000000..a628a113a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_im.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_in.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_in.xml new file mode 100644 index 000000000..84c114047 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_in.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ingate.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ingate.xml new file mode 100644 index 000000000..e6be42beb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ingate.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jj.xml new file mode 100644 index 000000000..62bae8cb9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jj.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_js.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_js.xml new file mode 100644 index 000000000..ff7bd3efa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_js.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jya_door.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jya_door.xml new file mode 100644 index 000000000..60a7b3788 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jya_door.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jya_iron.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jya_iron.xml new file mode 100644 index 000000000..c6f6773c6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jya_iron.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jya_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jya_obj.xml new file mode 100644 index 000000000..a1f19b806 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_jya_obj.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ka.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ka.xml new file mode 100644 index 000000000..eb952732b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ka.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kanban.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kanban.xml new file mode 100644 index 000000000..9ffc7a2ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kanban.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kibako2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kibako2.xml new file mode 100644 index 000000000..a701b294d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kibako2.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kingdodongo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kingdodongo.xml new file mode 100644 index 000000000..a865c15de --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kingdodongo.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_km1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_km1.xml new file mode 100644 index 000000000..0a918a798 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_km1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kusa.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kusa.xml new file mode 100644 index 000000000..67291a554 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kusa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kw1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kw1.xml new file mode 100644 index 000000000..eab561b1f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kw1.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kz.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kz.xml new file mode 100644 index 000000000..4624fefdb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_kz.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_light_ring.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_light_ring.xml new file mode 100644 index 000000000..babe7d2aa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_light_ring.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_lightbox.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_lightbox.xml new file mode 100644 index 000000000..552a79d7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_lightbox.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_lightswitch.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_lightswitch.xml new file mode 100644 index 000000000..cfd5dcfb4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_lightswitch.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_link_boy.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_link_boy.xml new file mode 100644 index 000000000..6351af505 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_link_boy.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_link_child.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_link_child.xml new file mode 100644 index 000000000..0de400373 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_link_child.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ma1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ma1.xml new file mode 100644 index 000000000..63eeb3895 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ma1.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ma2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ma2.xml new file mode 100644 index 000000000..ce5910fb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ma2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mag.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mag.xml new file mode 100644 index 000000000..84467d76d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mag.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mamenoki.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mamenoki.xml new file mode 100644 index 000000000..819d89022 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mamenoki.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mastergolon.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mastergolon.xml new file mode 100644 index 000000000..6dd9d1659 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mastergolon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_masterkokiri.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_masterkokiri.xml new file mode 100644 index 000000000..af5a9ec15 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_masterkokiri.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_masterkokirihead.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_masterkokirihead.xml new file mode 100644 index 000000000..c64aa1c49 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_masterkokirihead.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_masterzoora.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_masterzoora.xml new file mode 100644 index 000000000..2c703274e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_masterzoora.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mb.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mb.xml new file mode 100644 index 000000000..23c0930c0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mb.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_md.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_md.xml new file mode 100644 index 000000000..161c73dca --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_md.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_medal.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_medal.xml new file mode 100644 index 000000000..533872a55 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_medal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_menkuri_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_menkuri_objects.xml new file mode 100644 index 000000000..4c2b51df5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_menkuri_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mir_ray.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mir_ray.xml new file mode 100644 index 000000000..2acc9391a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mir_ray.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mizu_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mizu_objects.xml new file mode 100644 index 000000000..5a18b95cf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mizu_objects.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin.xml new file mode 100644 index 000000000..daf9b0541 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_dark.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_dark.xml new file mode 100644 index 000000000..2fa0bdbe4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_dark.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_flame.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_flame.xml new file mode 100644 index 000000000..6274feaee --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_flame.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_flash.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_flash.xml new file mode 100644 index 000000000..c1040ea11 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_flash.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_ice.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_ice.xml new file mode 100644 index 000000000..1aaeea193 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_ice.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_oka.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_oka.xml new file mode 100644 index 000000000..0f823b923 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_oka.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_soul.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_soul.xml new file mode 100644 index 000000000..6386f7f9e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_soul.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_wind.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_wind.xml new file mode 100644 index 000000000..8bba7eb91 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mjin_wind.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mk.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mk.xml new file mode 100644 index 000000000..0b4aaae8a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mk.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mm.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mm.xml new file mode 100644 index 000000000..b27837e57 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mo.xml new file mode 100644 index 000000000..f450368f3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mo.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri1.xml new file mode 100644 index 000000000..bb1b31e2f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri1a.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri1a.xml new file mode 100644 index 000000000..c750ce20d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri1a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri2.xml new file mode 100644 index 000000000..785b85857 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri2a.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri2a.xml new file mode 100644 index 000000000..ad1bb4d5f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_hineri2a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_objects.xml new file mode 100644 index 000000000..58ea8c085 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_tex.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_tex.xml new file mode 100644 index 000000000..8ba4ff2d3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mori_tex.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ms.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ms.xml new file mode 100644 index 000000000..a87d0e6b3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ms.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mu.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mu.xml new file mode 100644 index 000000000..7251ff721 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_mu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_nb.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_nb.xml new file mode 100644 index 000000000..74de9e285 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_nb.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_niw.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_niw.xml new file mode 100644 index 000000000..4eafec956 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_niw.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_nwc.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_nwc.xml new file mode 100644 index 000000000..96ffa3238 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_nwc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ny.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ny.xml new file mode 100644 index 000000000..e2e8187ff --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ny.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA1.xml new file mode 100644 index 000000000..1d665f101 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA10.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA10.xml new file mode 100644 index 000000000..65d080834 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA10.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA11.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA11.xml new file mode 100644 index 000000000..92ae474b6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA11.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA2.xml new file mode 100644 index 000000000..ffdcd7989 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA2.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA3.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA3.xml new file mode 100644 index 000000000..a492bd875 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA4.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA4.xml new file mode 100644 index 000000000..dcdbbfff9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA5.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA5.xml new file mode 100644 index 000000000..55072176d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA6.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA6.xml new file mode 100644 index 000000000..c17a51088 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA6.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA7.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA7.xml new file mode 100644 index 000000000..52c68f639 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA7.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA8.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA8.xml new file mode 100644 index 000000000..8ed2d3df5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA8.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA9.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA9.xml new file mode 100644 index 000000000..d5c16abfc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oA9.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB1.xml new file mode 100644 index 000000000..2f50c967b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB2.xml new file mode 100644 index 000000000..230783cea --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB3.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB3.xml new file mode 100644 index 000000000..1c42ddacc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB3.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB4.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB4.xml new file mode 100644 index 000000000..2924c9e75 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oB4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE1.xml new file mode 100644 index 000000000..4d5b1663f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE1.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE10.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE10.xml new file mode 100644 index 000000000..04ce91437 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE10.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE11.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE11.xml new file mode 100644 index 000000000..04f6f186d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE11.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE12.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE12.xml new file mode 100644 index 000000000..a5fa39fd2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE12.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE1s.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE1s.xml new file mode 100644 index 000000000..d311e6010 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE1s.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE2.xml new file mode 100644 index 000000000..af62ad6d1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE2.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE3.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE3.xml new file mode 100644 index 000000000..95227da38 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE3.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE4.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE4.xml new file mode 100644 index 000000000..ae48d2ade --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE4.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE4s.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE4s.xml new file mode 100644 index 000000000..6037de52f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE4s.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE5.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE5.xml new file mode 100644 index 000000000..f5edf745a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE6.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE6.xml new file mode 100644 index 000000000..95bb602b6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE6.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE7.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE7.xml new file mode 100644 index 000000000..b3e588d4c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE7.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE8.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE8.xml new file mode 100644 index 000000000..be5de2494 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE8.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE9.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE9.xml new file mode 100644 index 000000000..8ea7ee18c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE9.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE_anime.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE_anime.xml new file mode 100644 index 000000000..f6b4659e2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oE_anime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oF1d_map.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oF1d_map.xml new file mode 100644 index 000000000..f14fecd82 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oF1d_map.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oF1s.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oF1s.xml new file mode 100644 index 000000000..fe41dde63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_oF1s.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_o_anime.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_o_anime.xml new file mode 100644 index 000000000..4ef4ac44c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_o_anime.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_okuta.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_okuta.xml new file mode 100644 index 000000000..b4fccea6f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_okuta.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_opening_demo1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_opening_demo1.xml new file mode 100644 index 000000000..fd0323027 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_opening_demo1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_os.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_os.xml new file mode 100644 index 000000000..5880a9293 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_os.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_os_anime.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_os_anime.xml new file mode 100644 index 000000000..f23636343 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_os_anime.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ossan.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ossan.xml new file mode 100644 index 000000000..5788e3a20 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ossan.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ouke_haka.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ouke_haka.xml new file mode 100644 index 000000000..11da9b26e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ouke_haka.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_owl.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_owl.xml new file mode 100644 index 000000000..64fdf64c5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_owl.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_peehat.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_peehat.xml new file mode 100644 index 000000000..42ee66cde --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_peehat.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_po_composer.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_po_composer.xml new file mode 100644 index 000000000..ff995efce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_po_composer.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_po_field.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_po_field.xml new file mode 100644 index 000000000..78bc0d65a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_po_field.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_po_sisters.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_po_sisters.xml new file mode 100644 index 000000000..b429be258 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_po_sisters.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_poh.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_poh.xml new file mode 100644 index 000000000..be6d6eff4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_poh.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ps.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ps.xml new file mode 100644 index 000000000..9f9c894a6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ps.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_pu_box.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_pu_box.xml new file mode 100644 index 000000000..e1d686e97 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_pu_box.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rd.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rd.xml new file mode 100644 index 000000000..22c7d3373 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rd.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_reeba.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_reeba.xml new file mode 100644 index 000000000..32c697bd9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_reeba.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_relay_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_relay_objects.xml new file mode 100644 index 000000000..47b92fcd2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_relay_objects.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rl.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rl.xml new file mode 100644 index 000000000..2a5ad30f6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rl.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rr.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rr.xml new file mode 100644 index 000000000..98726b14b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rr.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rs.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rs.xml new file mode 100644 index 000000000..152b5489e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_rs.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ru1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ru1.xml new file mode 100644 index 000000000..3d413619f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ru1.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ru2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ru2.xml new file mode 100644 index 000000000..fedf37d48 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ru2.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sa.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sa.xml new file mode 100644 index 000000000..ec45ac961 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sa.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sb.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sb.xml new file mode 100644 index 000000000..64d3bb005 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sb.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sd.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sd.xml new file mode 100644 index 000000000..fb58428c3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sd.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_shop_dungen.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_shop_dungen.xml new file mode 100644 index 000000000..594c43d39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_shop_dungen.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_shopnuts.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_shopnuts.xml new file mode 100644 index 000000000..7065f8941 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_shopnuts.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_siofuki.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_siofuki.xml new file mode 100644 index 000000000..a23240a72 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_siofuki.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sk2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sk2.xml new file mode 100644 index 000000000..f2e7ef6d8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sk2.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_skb.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_skb.xml new file mode 100644 index 000000000..5b5efb484 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_skb.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_skj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_skj.xml new file mode 100644 index 000000000..74548e518 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_skj.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot00_break.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot00_break.xml new file mode 100644 index 000000000..d3be88315 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot00_break.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot00_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot00_objects.xml new file mode 100644 index 000000000..10fb13aea --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot00_objects.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_matoya.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_matoya.xml new file mode 100644 index 000000000..d44b944e0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_matoya.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_matoyab.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_matoyab.xml new file mode 100644 index 000000000..720f50cd3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_matoyab.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_objects.xml new file mode 100644 index 000000000..413e032a9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_objects.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_objects2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_objects2.xml new file mode 100644 index 000000000..36741a949 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot01_objects2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot02_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot02_objects.xml new file mode 100644 index 000000000..65f45ff51 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot02_objects.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot03_object.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot03_object.xml new file mode 100644 index 000000000..f182e7d99 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot03_object.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot04_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot04_objects.xml new file mode 100644 index 000000000..66293d752 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot04_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot05_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot05_objects.xml new file mode 100644 index 000000000..6e7079149 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot05_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot06_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot06_objects.xml new file mode 100644 index 000000000..e3da63b0f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot06_objects.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot07_object.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot07_object.xml new file mode 100644 index 000000000..5bc2bfb6b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot07_object.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot08_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot08_obj.xml new file mode 100644 index 000000000..4d71f3473 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot08_obj.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot09_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot09_obj.xml new file mode 100644 index 000000000..eb6528393 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot09_obj.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot11_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot11_obj.xml new file mode 100644 index 000000000..257298f7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot11_obj.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot12_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot12_obj.xml new file mode 100644 index 000000000..d619c781e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot12_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot15_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot15_obj.xml new file mode 100644 index 000000000..bd59b8cd1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot15_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot16_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot16_obj.xml new file mode 100644 index 000000000..d39de812a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot16_obj.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot17_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot17_obj.xml new file mode 100644 index 000000000..d4239d8d2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot17_obj.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot18_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot18_obj.xml new file mode 100644 index 000000000..cc12b7894 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_spot18_obj.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ssh.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ssh.xml new file mode 100644 index 000000000..6283f8e9f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ssh.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sst.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sst.xml new file mode 100644 index 000000000..d64787fa1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_sst.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_st.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_st.xml new file mode 100644 index 000000000..983b9e2ea --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_st.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_stream.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_stream.xml new file mode 100644 index 000000000..59b0838e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_stream.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_syokudai.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_syokudai.xml new file mode 100644 index 000000000..c1670edec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_syokudai.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ta.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ta.xml new file mode 100644 index 000000000..5e446bf5c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ta.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_timeblock.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_timeblock.xml new file mode 100644 index 000000000..1d6b9e698 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_timeblock.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tite.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tite.xml new file mode 100644 index 000000000..1be65c495 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tite.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tk.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tk.xml new file mode 100644 index 000000000..6b6cce724 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_toki_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_toki_objects.xml new file mode 100644 index 000000000..cd07e60d2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_toki_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_torch2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_torch2.xml new file mode 100644 index 000000000..3388e7d34 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_torch2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_toryo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_toryo.xml new file mode 100644 index 000000000..73f3dcb1e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_toryo.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tp.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tp.xml new file mode 100644 index 000000000..8ea908825 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tp.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tr.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tr.xml new file mode 100644 index 000000000..17ab9ae39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tr.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_trap.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_trap.xml new file mode 100644 index 000000000..56195cf41 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_trap.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_triforce_spot.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_triforce_spot.xml new file mode 100644 index 000000000..87d449458 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_triforce_spot.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ts.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ts.xml new file mode 100644 index 000000000..567277bc3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ts.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tsubo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tsubo.xml new file mode 100644 index 000000000..ee2c5e184 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tsubo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tw.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tw.xml new file mode 100644 index 000000000..d238e10ab --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_tw.xml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_umajump.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_umajump.xml new file mode 100644 index 000000000..2ee4ade46 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_umajump.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_vali.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_vali.xml new file mode 100644 index 000000000..2bab5efaa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_vali.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_vase.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_vase.xml new file mode 100644 index 000000000..091d4c51e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_vase.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_vm.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_vm.xml new file mode 100644 index 000000000..c5b949b36 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_vm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_wallmaster.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_wallmaster.xml new file mode 100644 index 000000000..fbbc4f4af --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_wallmaster.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_warp1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_warp1.xml new file mode 100644 index 000000000..1497d7a10 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_warp1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_warp2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_warp2.xml new file mode 100644 index 000000000..b6d1b3624 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_warp2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_wf.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_wf.xml new file mode 100644 index 000000000..ebfb708d2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_wf.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_wood02.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_wood02.xml new file mode 100644 index 000000000..47ec342ca --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_wood02.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_xc.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_xc.xml new file mode 100644 index 000000000..bb2bf3e7a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_xc.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_yabusame_point.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_yabusame_point.xml new file mode 100644 index 000000000..bed9e8a60 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_yabusame_point.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ydan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ydan_objects.xml new file mode 100644 index 000000000..e2adf307f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_ydan_objects.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_yukabyun.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_yukabyun.xml new file mode 100644 index 000000000..d594ebbb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_yukabyun.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zf.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zf.xml new file mode 100644 index 000000000..7f20eb786 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zf.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zg.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zg.xml new file mode 100644 index 000000000..79005516c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zg.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl1.xml new file mode 100644 index 000000000..001e5be14 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl1.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl2.xml new file mode 100644 index 000000000..959a919ec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl2_anime1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl2_anime1.xml new file mode 100644 index 000000000..cada50486 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl2_anime1.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl2_anime2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl2_anime2.xml new file mode 100644 index 000000000..47016e2e0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl2_anime2.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl4.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl4.xml new file mode 100644 index 000000000..8e7a2837e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zl4.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zo.xml new file mode 100644 index 000000000..77465760e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/objects/object_zo.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Arrow_Fire.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Arrow_Fire.xml new file mode 100644 index 000000000..b894516eb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Arrow_Fire.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Arrow_Ice.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Arrow_Ice.xml new file mode 100644 index 000000000..9337a2fc0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Arrow_Ice.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Arrow_Light.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Arrow_Light.xml new file mode 100644 index 000000000..0d5ce829a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Arrow_Light.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Bg_Ganon_Otyuka.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Bg_Ganon_Otyuka.xml new file mode 100644 index 000000000..0f3862138 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Bg_Ganon_Otyuka.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Bg_Jya_Cobra.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Bg_Jya_Cobra.xml new file mode 100644 index 000000000..a3fdd07b7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Bg_Jya_Cobra.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Dodongo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Dodongo.xml new file mode 100644 index 000000000..9e2db033b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Dodongo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Ganon.xml new file mode 100644 index 000000000..0d2f36720 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Ganon.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Ganon2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Ganon2.xml new file mode 100644 index 000000000..d14798ac3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Ganon2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Sst.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Sst.xml new file mode 100644 index 000000000..49909db29 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Boss_Sst.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Demo_Shd.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Demo_Shd.xml new file mode 100644 index 000000000..b48f36ba0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Demo_Shd.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Bili.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Bili.xml new file mode 100644 index 000000000..7501319f0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Bili.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Clear_Tag.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Clear_Tag.xml new file mode 100644 index 000000000..fb53e6224 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Clear_Tag.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Ganon_Mant.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Ganon_Mant.xml new file mode 100644 index 000000000..c00e7c5b0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Ganon_Mant.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Ganon_Organ.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Ganon_Organ.xml new file mode 100644 index 000000000..0aa7e71df --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Ganon_Organ.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Holl.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Holl.xml new file mode 100644 index 000000000..62f8a3375 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Holl.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Jsjutan.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Jsjutan.xml new file mode 100644 index 000000000..ed9f58adc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Jsjutan.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Kanban.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Kanban.xml new file mode 100644 index 000000000..20bea0c8e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Kanban.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Sda.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Sda.xml new file mode 100644 index 000000000..f9d5e322c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Sda.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Ssh.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Ssh.xml new file mode 100644 index 000000000..6d85ff620 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Ssh.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_St.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_St.xml new file mode 100644 index 000000000..a41477d9e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_St.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Sth.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Sth.xml new file mode 100644 index 000000000..187e5ae76 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_En_Sth.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_End_Title.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_End_Title.xml new file mode 100644 index 000000000..f307aa446 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_End_Title.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_File_Choose.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_File_Choose.xml new file mode 100644 index 000000000..5fa756368 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_File_Choose.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Magic_Dark.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Magic_Dark.xml new file mode 100644 index 000000000..7e1315d50 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Magic_Dark.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Magic_Fire.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Magic_Fire.xml new file mode 100644 index 000000000..22a94dcce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Magic_Fire.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Magic_Wind.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Magic_Wind.xml new file mode 100644 index 000000000..229cb9eae --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Magic_Wind.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Spot.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Spot.xml new file mode 100644 index 000000000..e5aa927a7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Spot.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Storm.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Storm.xml new file mode 100644 index 000000000..f927d1db2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Storm.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe.xml new file mode 100644 index 000000000..d822d5238 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe2.xml new file mode 100644 index 000000000..9213b354f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe3.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe3.xml new file mode 100644 index 000000000..e7ed30c0b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe4.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe4.xml new file mode 100644 index 000000000..796db3ee1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/overlays/ovl_Oceff_Wipe4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/Bmori1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/Bmori1.xml new file mode 100644 index 000000000..373f36030 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/Bmori1.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/FIRE_bs.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/FIRE_bs.xml new file mode 100644 index 000000000..89331ecc2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/FIRE_bs.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HAKAdan.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HAKAdan.xml new file mode 100644 index 000000000..e557c80a5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HAKAdan.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HAKAdanCH.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HAKAdanCH.xml new file mode 100644 index 000000000..97401aff6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HAKAdanCH.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HAKAdan_bs.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HAKAdan_bs.xml new file mode 100644 index 000000000..d36ac6b77 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HAKAdan_bs.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HIDAN.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HIDAN.xml new file mode 100644 index 000000000..fa4d784f1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/HIDAN.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/MIZUsin.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/MIZUsin.xml new file mode 100644 index 000000000..00c5aa82d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/MIZUsin.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/MIZUsin_bs.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/MIZUsin_bs.xml new file mode 100644 index 000000000..99ae2b3ef --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/MIZUsin_bs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/bdan.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/bdan.xml new file mode 100644 index 000000000..a9e520f4c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/bdan.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/bdan_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/bdan_boss.xml new file mode 100644 index 000000000..9fccf2c30 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/bdan_boss.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ddan.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ddan.xml new file mode 100644 index 000000000..1446a9c98 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ddan.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ddan_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ddan_boss.xml new file mode 100644 index 000000000..05633e53e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ddan_boss.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon.xml new file mode 100644 index 000000000..f857dbe94 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_boss.xml new file mode 100644 index 000000000..36c5e8107 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_boss.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_demo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_demo.xml new file mode 100644 index 000000000..56c98efed --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_demo.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_final.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_final.xml new file mode 100644 index 000000000..3ec568cfb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_final.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_sonogo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_sonogo.xml new file mode 100644 index 000000000..84ef36950 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_sonogo.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_tou.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_tou.xml new file mode 100644 index 000000000..1ae37b963 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganon_tou.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganontika.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganontika.xml new file mode 100644 index 000000000..a5ff210ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganontika.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganontikasonogo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganontikasonogo.xml new file mode 100644 index 000000000..060d4941b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ganontikasonogo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/gerudoway.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/gerudoway.xml new file mode 100644 index 000000000..827277614 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/gerudoway.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ice_doukutu.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ice_doukutu.xml new file mode 100644 index 000000000..0f1bc3b28 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ice_doukutu.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/jyasinboss.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/jyasinboss.xml new file mode 100644 index 000000000..86c0d317b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/jyasinboss.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/jyasinzou.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/jyasinzou.xml new file mode 100644 index 000000000..bc14a46ac --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/jyasinzou.xml @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/men.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/men.xml new file mode 100644 index 000000000..d9e5960e8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/men.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/moribossroom.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/moribossroom.xml new file mode 100644 index 000000000..b9959eefa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/moribossroom.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ydan.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ydan.xml new file mode 100644 index 000000000..aed7d2660 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ydan.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ydan_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ydan_boss.xml new file mode 100644 index 000000000..7ea240547 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/dungeons/ydan_boss.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/bowling.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/bowling.xml new file mode 100644 index 000000000..9a41763a2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/bowling.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/daiyousei_izumi.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/daiyousei_izumi.xml new file mode 100644 index 000000000..4f9a03fc0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/daiyousei_izumi.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hairal_niwa.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hairal_niwa.xml new file mode 100644 index 000000000..06d89f2fe --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hairal_niwa.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hairal_niwa_n.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hairal_niwa_n.xml new file mode 100644 index 000000000..6f4c181e0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hairal_niwa_n.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hakasitarelay.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hakasitarelay.xml new file mode 100644 index 000000000..91be63d14 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hakasitarelay.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hut.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hut.xml new file mode 100644 index 000000000..a4ef5715f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hylia_labo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hylia_labo.xml new file mode 100644 index 000000000..56822e67a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/hylia_labo.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/impa.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/impa.xml new file mode 100644 index 000000000..db757e3d3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/impa.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kakariko.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kakariko.xml new file mode 100644 index 000000000..e4e9b102c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kakariko.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kenjyanoma.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kenjyanoma.xml new file mode 100644 index 000000000..4e8a58f3b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kenjyanoma.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home.xml new file mode 100644 index 000000000..8c0305493 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home3.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home3.xml new file mode 100644 index 000000000..9f36eb41c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home4.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home4.xml new file mode 100644 index 000000000..eb861aedb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home4.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home5.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home5.xml new file mode 100644 index 000000000..974987fed --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/kokiri_home5.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/labo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/labo.xml new file mode 100644 index 000000000..c0a9d2eb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/labo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/link_home.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/link_home.xml new file mode 100644 index 000000000..2fb88ae34 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/link_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/mahouya.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/mahouya.xml new file mode 100644 index 000000000..8ae462f9d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/mahouya.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/malon_stable.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/malon_stable.xml new file mode 100644 index 000000000..aff97eeb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/malon_stable.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/miharigoya.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/miharigoya.xml new file mode 100644 index 000000000..63f8676ac --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/miharigoya.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/nakaniwa.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/nakaniwa.xml new file mode 100644 index 000000000..2fb2d5e6a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/nakaniwa.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/syatekijyou.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/syatekijyou.xml new file mode 100644 index 000000000..05243b52c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/syatekijyou.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/takaraya.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/takaraya.xml new file mode 100644 index 000000000..5b438980b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/takaraya.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/tent.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/tent.xml new file mode 100644 index 000000000..de72cc5f4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/tent.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/tokinoma.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/tokinoma.xml new file mode 100644 index 000000000..d7878b895 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/tokinoma.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/yousei_izumi_tate.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/yousei_izumi_tate.xml new file mode 100644 index 000000000..3b6dd2dec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/yousei_izumi_tate.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/yousei_izumi_yoko.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/yousei_izumi_yoko.xml new file mode 100644 index 000000000..90a8d95d0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/indoors/yousei_izumi_yoko.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/enrui.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/enrui.xml new file mode 100644 index 000000000..d8c06e545 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/enrui.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/entra_n.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/entra_n.xml new file mode 100644 index 000000000..5b408ac3a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/entra_n.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hakaana.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hakaana.xml new file mode 100644 index 000000000..e7dc93dd0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hakaana.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hakaana2.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hakaana2.xml new file mode 100644 index 000000000..2d8ba4906 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hakaana2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hakaana_ouke.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hakaana_ouke.xml new file mode 100644 index 000000000..17f53613e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hakaana_ouke.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hiral_demo.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hiral_demo.xml new file mode 100644 index 000000000..1331fdd4c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/hiral_demo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/kakariko3.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/kakariko3.xml new file mode 100644 index 000000000..07b62c44d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/kakariko3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/kakusiana.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/kakusiana.xml new file mode 100644 index 000000000..c3f993ff4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/kakusiana.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/kinsuta.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/kinsuta.xml new file mode 100644 index 000000000..aac0f6c4e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/kinsuta.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_alley.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_alley.xml new file mode 100644 index 000000000..c30467303 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_alley.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_alley_n.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_alley_n.xml new file mode 100644 index 000000000..65db60411 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_alley_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_day.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_day.xml new file mode 100644 index 000000000..00887e69c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_day.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_night.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_night.xml new file mode 100644 index 000000000..c58e38744 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_night.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_ruins.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_ruins.xml new file mode 100644 index 000000000..f0ec75e75 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/market_ruins.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/shrine.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/shrine.xml new file mode 100644 index 000000000..b9ddf2cf7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/shrine.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/shrine_n.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/shrine_n.xml new file mode 100644 index 000000000..4878338aa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/shrine_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/shrine_r.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/shrine_r.xml new file mode 100644 index 000000000..122036791 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/shrine_r.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/turibori.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/turibori.xml new file mode 100644 index 000000000..0633224d9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/misc/turibori.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/entra.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/entra.xml new file mode 100644 index 000000000..92ee57f59 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/entra.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/souko.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/souko.xml new file mode 100644 index 000000000..8dd9d9e48 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/souko.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot00.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot00.xml new file mode 100644 index 000000000..508d9309b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot00.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot01.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot01.xml new file mode 100644 index 000000000..eb725afa6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot01.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot02.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot02.xml new file mode 100644 index 000000000..c7924c29d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot02.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot03.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot03.xml new file mode 100644 index 000000000..9434185f4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot03.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot04.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot04.xml new file mode 100644 index 000000000..f33860420 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot04.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot05.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot05.xml new file mode 100644 index 000000000..4f7c62b91 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot05.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot06.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot06.xml new file mode 100644 index 000000000..f4af602cf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot06.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot07.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot07.xml new file mode 100644 index 000000000..eeb976f7f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot07.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot08.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot08.xml new file mode 100644 index 000000000..86582f0dc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot08.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot09.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot09.xml new file mode 100644 index 000000000..5bb9e059c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot09.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot10.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot10.xml new file mode 100644 index 000000000..66365e3d8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot11.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot11.xml new file mode 100644 index 000000000..76ff3b822 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot11.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot12.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot12.xml new file mode 100644 index 000000000..e21523b21 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot12.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot13.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot13.xml new file mode 100644 index 000000000..c68913065 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot13.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot15.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot15.xml new file mode 100644 index 000000000..e75f7b684 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot15.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot16.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot16.xml new file mode 100644 index 000000000..f41b226f8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot16.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot17.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot17.xml new file mode 100644 index 000000000..feb267251 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot17.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot18.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot18.xml new file mode 100644 index 000000000..d70fccf4b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot18.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot20.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot20.xml new file mode 100644 index 000000000..1381f6ecb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/overworld/spot20.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/alley_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/alley_shop.xml new file mode 100644 index 000000000..95548de1b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/alley_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/drag.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/drag.xml new file mode 100644 index 000000000..acb6515fb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/drag.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/face_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/face_shop.xml new file mode 100644 index 000000000..16a974608 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/face_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/golon.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/golon.xml new file mode 100644 index 000000000..c58672798 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/golon.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/kokiri_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/kokiri_shop.xml new file mode 100644 index 000000000..50cd633e5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/kokiri_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/night_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/night_shop.xml new file mode 100644 index 000000000..5954d9c83 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/night_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/shop1.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/shop1.xml new file mode 100644 index 000000000..525a06d63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/shop1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/zoora.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/zoora.xml new file mode 100644 index 000000000..0e4ac18f8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/scenes/shops/zoora.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/text/elf_message_field.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/text/elf_message_field.xml new file mode 100644 index 000000000..789a554ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/text/elf_message_field.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/text/elf_message_ydan.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/text/elf_message_ydan.xml new file mode 100644 index 000000000..f784afcf4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/text/elf_message_ydan.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/text/message_data_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/text/message_data_static.xml new file mode 100644 index 000000000..94948fa8e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/text/message_data_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/backgrounds.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/backgrounds.xml new file mode 100644 index 000000000..c60ff57a8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/backgrounds.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/boss_title_cards.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/boss_title_cards.xml new file mode 100644 index 000000000..84f555bd1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/boss_title_cards.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/do_action_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/do_action_static.xml new file mode 100644 index 000000000..efabd54a5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/do_action_static.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_24_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_24_static.xml new file mode 100644 index 000000000..cdb8cc737 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_24_static.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_dungeon_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_dungeon_static.xml new file mode 100644 index 000000000..873c490fc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_dungeon_static.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_field_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_field_static.xml new file mode 100644 index 000000000..ed991406b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_field_static.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_gameover_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_gameover_static.xml new file mode 100644 index 000000000..ffd392868 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_gameover_static.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_jpn_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_jpn_static.xml new file mode 100644 index 000000000..f2fe854b8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_jpn_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_nes_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_nes_static.xml new file mode 100644 index 000000000..6cd92acfc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_nes_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_static.xml new file mode 100644 index 000000000..9e844615b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/icon_item_static.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/item_name_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/item_name_static.xml new file mode 100644 index 000000000..266b3c200 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/item_name_static.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/kanji.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/kanji.xml new file mode 100644 index 000000000..5159387a1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/kanji.xml @@ -0,0 +1,3984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_48x85_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_48x85_static.xml new file mode 100644 index 000000000..b2ea46340 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_48x85_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_grand_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_grand_static.xml new file mode 100644 index 000000000..201955bfc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_grand_static.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_i_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_i_static.xml new file mode 100644 index 000000000..1721f6d84 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_i_static.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_name_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_name_static.xml new file mode 100644 index 000000000..ca4c4c0bd --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/map_name_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/message_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/message_static.xml new file mode 100644 index 000000000..afdde60de --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/message_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/message_texture_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/message_texture_static.xml new file mode 100644 index 000000000..bbf7e1259 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/message_texture_static.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/nes_font_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/nes_font_static.xml new file mode 100644 index 000000000..b01646cb5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/nes_font_static.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/nintendo_rogo_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/nintendo_rogo_static.xml new file mode 100644 index 000000000..f09de3b0f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/nintendo_rogo_static.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/parameter_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/parameter_static.xml new file mode 100644 index 000000000..c51dacf1f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/parameter_static.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/place_title_cards.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/place_title_cards.xml new file mode 100644 index 000000000..b688cce00 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/place_title_cards.xml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/skyboxes.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/skyboxes.xml new file mode 100644 index 000000000..104ffb2a3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/skyboxes.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/title_static.xml b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/title_static.xml new file mode 100644 index 000000000..5f58c5a82 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_J_CE/textures/title_static.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/audio/Audio.xml b/soh/assets/xml/GC_NMQ_NTSC_U/audio/Audio.xml new file mode 100644 index 000000000..90f5dee24 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/audio/Audio.xml @@ -0,0 +1,1558 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/code/fbdemo_circle.xml b/soh/assets/xml/GC_NMQ_NTSC_U/code/fbdemo_circle.xml new file mode 100644 index 000000000..e6b4bba12 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/code/fbdemo_circle.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/code/fbdemo_triforce.xml b/soh/assets/xml/GC_NMQ_NTSC_U/code/fbdemo_triforce.xml new file mode 100644 index 000000000..bbc709a4f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/code/fbdemo_triforce.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/code/fbdemo_wipe1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/code/fbdemo_wipe1.xml new file mode 100644 index 000000000..9d2e12231 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/code/fbdemo_wipe1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/code/sys_matrix.xml b/soh/assets/xml/GC_NMQ_NTSC_U/code/sys_matrix.xml new file mode 100644 index 000000000..1521be9f1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/code/sys_matrix.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/misc/link_animetion.xml b/soh/assets/xml/GC_NMQ_NTSC_U/misc/link_animetion.xml new file mode 100644 index 000000000..9de1e92d3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/misc/link_animetion.xml @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/gameplay_dangeon_keep.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/gameplay_dangeon_keep.xml new file mode 100644 index 000000000..5b1a9050d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/gameplay_dangeon_keep.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/gameplay_field_keep.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/gameplay_field_keep.xml new file mode 100644 index 000000000..011e8f7fc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/gameplay_field_keep.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/gameplay_keep.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/gameplay_keep.xml new file mode 100644 index 000000000..94eee8845 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/gameplay_keep.xml @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_Bb.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_Bb.xml new file mode 100644 index 000000000..5d04bde45 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_Bb.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ahg.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ahg.xml new file mode 100644 index 000000000..4d37b1b11 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ahg.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_am.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_am.xml new file mode 100644 index 000000000..b70c70d70 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_am.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ane.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ane.xml new file mode 100644 index 000000000..1e29b351e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ane.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ani.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ani.xml new file mode 100644 index 000000000..c70621c6f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ani.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_anubice.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_anubice.xml new file mode 100644 index 000000000..fb029586b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_anubice.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_aob.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_aob.xml new file mode 100644 index 000000000..e6202d0cf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_aob.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_b_heart.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_b_heart.xml new file mode 100644 index 000000000..00f7cd677 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_b_heart.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bba.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bba.xml new file mode 100644 index 000000000..ccc5c2136 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bba.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bdan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bdan_objects.xml new file mode 100644 index 000000000..dcd56d385 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bdan_objects.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bdoor.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bdoor.xml new file mode 100644 index 000000000..a092f0c23 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bdoor.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bg.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bg.xml new file mode 100644 index 000000000..791226b71 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bg.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bigokuta.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bigokuta.xml new file mode 100644 index 000000000..1c7d39e31 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bigokuta.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bird.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bird.xml new file mode 100644 index 000000000..167a5022d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bird.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bji.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bji.xml new file mode 100644 index 000000000..c665b6b00 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bji.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bl.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bl.xml new file mode 100644 index 000000000..1c2ef4ec6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_blkobj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_blkobj.xml new file mode 100644 index 000000000..345a8ebd9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_blkobj.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bob.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bob.xml new file mode 100644 index 000000000..289e994e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bob.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_boj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_boj.xml new file mode 100644 index 000000000..4be4764ab --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_boj.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bombf.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bombf.xml new file mode 100644 index 000000000..83e60248d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bombf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bombiwa.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bombiwa.xml new file mode 100644 index 000000000..26ab6b4f3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bombiwa.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bowl.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bowl.xml new file mode 100644 index 000000000..ffe6d43db --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bowl.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_box.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_box.xml new file mode 100644 index 000000000..106d2d335 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_box.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_brob.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_brob.xml new file mode 100644 index 000000000..718dcd561 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_brob.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bubble.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bubble.xml new file mode 100644 index 000000000..f5de18692 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bubble.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bv.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bv.xml new file mode 100644 index 000000000..58db6e1d4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bv.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bw.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bw.xml new file mode 100644 index 000000000..6fd39fbb1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bw.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bwall.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bwall.xml new file mode 100644 index 000000000..d4f43ddc1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bwall.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bxa.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bxa.xml new file mode 100644 index 000000000..fb78c117e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_bxa.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cne.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cne.xml new file mode 100644 index 000000000..0c14d0bc5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cne.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cob.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cob.xml new file mode 100644 index 000000000..ba051cfa7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cob.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cow.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cow.xml new file mode 100644 index 000000000..5d067c329 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cow.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_crow.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_crow.xml new file mode 100644 index 000000000..77337c644 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_crow.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cs.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cs.xml new file mode 100644 index 000000000..83804ccaf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_cs.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_d_elevator.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_d_elevator.xml new file mode 100644 index 000000000..6be59c154 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_d_elevator.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_d_hsblock.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_d_hsblock.xml new file mode 100644 index 000000000..4bb50c2b4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_d_hsblock.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_d_lift.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_d_lift.xml new file mode 100644 index 000000000..291238519 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_d_lift.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_daiku.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_daiku.xml new file mode 100644 index 000000000..1524c7a26 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_daiku.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ddan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ddan_objects.xml new file mode 100644 index 000000000..3fc563b96 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ddan_objects.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dekubaba.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dekubaba.xml new file mode 100644 index 000000000..7202a833f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dekubaba.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dekujr.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dekujr.xml new file mode 100644 index 000000000..e906bf61c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dekujr.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dekunuts.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dekunuts.xml new file mode 100644 index 000000000..5fceef416 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dekunuts.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_demo_6k.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_demo_6k.xml new file mode 100644 index 000000000..73058d5e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_demo_6k.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_demo_kekkai.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_demo_kekkai.xml new file mode 100644 index 000000000..aa54bc2ee --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_demo_kekkai.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_demo_tre_lgt.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_demo_tre_lgt.xml new file mode 100644 index 000000000..9ea19012b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_demo_tre_lgt.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dh.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dh.xml new file mode 100644 index 000000000..7a52d7dbe --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dh.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dnk.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dnk.xml new file mode 100644 index 000000000..3bce34304 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dnk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dns.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dns.xml new file mode 100644 index 000000000..8b78ffcf2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dns.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dodojr.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dodojr.xml new file mode 100644 index 000000000..4dfd7d6e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dodojr.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dodongo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dodongo.xml new file mode 100644 index 000000000..779e20e9d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dodongo.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dog.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dog.xml new file mode 100644 index 000000000..ef00442b6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dog.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_door_gerudo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_door_gerudo.xml new file mode 100644 index 000000000..2f1726204 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_door_gerudo.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_door_killer.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_door_killer.xml new file mode 100644 index 000000000..a37f590d6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_door_killer.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ds.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ds.xml new file mode 100644 index 000000000..0413a9e2e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ds.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ds2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ds2.xml new file mode 100644 index 000000000..683bcc68d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ds2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_du.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_du.xml new file mode 100644 index 000000000..0babd962b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_du.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dy_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dy_obj.xml new file mode 100644 index 000000000..5e792edb5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_dy_obj.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ec.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ec.xml new file mode 100644 index 000000000..7ec83e284 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ec.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_crystal_light.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_crystal_light.xml new file mode 100644 index 000000000..9215b6a39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_crystal_light.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_doughnut.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_doughnut.xml new file mode 100644 index 000000000..7f12c56f5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_doughnut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_erupc.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_erupc.xml new file mode 100644 index 000000000..800d9535f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_erupc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_fire_ball.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_fire_ball.xml new file mode 100644 index 000000000..2fc65b16f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_fire_ball.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_flash.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_flash.xml new file mode 100644 index 000000000..5f962f162 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_flash.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_lgt_shower.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_lgt_shower.xml new file mode 100644 index 000000000..67ef5ce7e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_lgt_shower.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_star_field.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_star_field.xml new file mode 100644 index 000000000..00b47c460 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_star_field.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_tw.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_tw.xml new file mode 100644 index 000000000..de5376569 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_efc_tw.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ei.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ei.xml new file mode 100644 index 000000000..e4132491f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ei.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fa.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fa.xml new file mode 100644 index 000000000..2f1bf9a5e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fa.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fd.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fd.xml new file mode 100644 index 000000000..9bc25d3a6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fd.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fd2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fd2.xml new file mode 100644 index 000000000..44b5f5f9c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fd2.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fhg.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fhg.xml new file mode 100644 index 000000000..6a275daeb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fhg.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fire.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fire.xml new file mode 100644 index 000000000..49bf620cb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fire.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_firefly.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_firefly.xml new file mode 100644 index 000000000..8c26a4341 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_firefly.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fish.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fish.xml new file mode 100644 index 000000000..f5ad4f6da --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fish.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fr.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fr.xml new file mode 100644 index 000000000..25ee2ad42 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fr.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fu.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fu.xml new file mode 100644 index 000000000..82c449e3d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fu.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fw.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fw.xml new file mode 100644 index 000000000..ee9821d26 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fw.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fz.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fz.xml new file mode 100644 index 000000000..dad6fec5c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_fz.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon.xml new file mode 100644 index 000000000..5b68602ba --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon2.xml new file mode 100644 index 000000000..7e715dd41 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon2.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_anime1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_anime1.xml new file mode 100644 index 000000000..b1016299b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_anime1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_anime2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_anime2.xml new file mode 100644 index 000000000..180e5995c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_anime2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_anime3.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_anime3.xml new file mode 100644 index 000000000..be4c4dcb1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_anime3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_objects.xml new file mode 100644 index 000000000..5e32610ff --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ganon_objects.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ge1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ge1.xml new file mode 100644 index 000000000..79e0768b8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ge1.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_geff.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_geff.xml new file mode 100644 index 000000000..f0667743b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_geff.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_geldb.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_geldb.xml new file mode 100644 index 000000000..49b12ef2e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_geldb.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_arrow.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_arrow.xml new file mode 100644 index 000000000..4b58787a9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_arrow.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_arrowcase.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_arrowcase.xml new file mode 100644 index 000000000..267b0a734 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_arrowcase.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bean.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bean.xml new file mode 100644 index 000000000..e74247816 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bean.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bomb_1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bomb_1.xml new file mode 100644 index 000000000..bae86c11d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bomb_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bomb_2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bomb_2.xml new file mode 100644 index 000000000..1400c4a4d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bomb_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bombpouch.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bombpouch.xml new file mode 100644 index 000000000..07134748c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bombpouch.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_boomerang.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_boomerang.xml new file mode 100644 index 000000000..3c1a0fe7f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_boomerang.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_boots_2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_boots_2.xml new file mode 100644 index 000000000..3bcb6a47a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_boots_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bosskey.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bosskey.xml new file mode 100644 index 000000000..e5e4bc86c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bosskey.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bottle.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bottle.xml new file mode 100644 index 000000000..3b0884a03 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bottle.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bottle_letter.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bottle_letter.xml new file mode 100644 index 000000000..443219caf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bottle_letter.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bow.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bow.xml new file mode 100644 index 000000000..946e9c496 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bow.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bracelet.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bracelet.xml new file mode 100644 index 000000000..5a0b62a60 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_bracelet.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_brokensword.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_brokensword.xml new file mode 100644 index 000000000..408741ac5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_brokensword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_butterfly.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_butterfly.xml new file mode 100644 index 000000000..7b60a7724 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_butterfly.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_clothes.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_clothes.xml new file mode 100644 index 000000000..3f897b6d1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_clothes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_coin.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_coin.xml new file mode 100644 index 000000000..22e29f255 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_coin.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_compass.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_compass.xml new file mode 100644 index 000000000..076229b11 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_compass.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_dekupouch.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_dekupouch.xml new file mode 100644 index 000000000..8925e6fa5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_dekupouch.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_egg.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_egg.xml new file mode 100644 index 000000000..2b2e2847d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_egg.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_eye_lotion.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_eye_lotion.xml new file mode 100644 index 000000000..5128c5f6f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_eye_lotion.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_fire.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_fire.xml new file mode 100644 index 000000000..4bfd76a7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_fire.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_fish.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_fish.xml new file mode 100644 index 000000000..edb39dc29 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_fish.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_frog.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_frog.xml new file mode 100644 index 000000000..a656c306b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_frog.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_gerudo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_gerudo.xml new file mode 100644 index 000000000..d65daee8e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_gerudo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_gerudomask.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_gerudomask.xml new file mode 100644 index 000000000..cfcb878d9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_gerudomask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ghost.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ghost.xml new file mode 100644 index 000000000..795f0cfd1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ghost.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_glasses.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_glasses.xml new file mode 100644 index 000000000..63d32ab5a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_glasses.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_gloves.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_gloves.xml new file mode 100644 index 000000000..0e1c4259d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_gloves.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_goddess.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_goddess.xml new file mode 100644 index 000000000..50cbdd891 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_goddess.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_golonmask.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_golonmask.xml new file mode 100644 index 000000000..844d90e71 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_golonmask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_grass.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_grass.xml new file mode 100644 index 000000000..ae7834201 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_grass.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hammer.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hammer.xml new file mode 100644 index 000000000..feb5c8659 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hammer.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_heart.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_heart.xml new file mode 100644 index 000000000..48e78b1b5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_heart.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hearts.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hearts.xml new file mode 100644 index 000000000..d2e763e63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hearts.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hookshot.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hookshot.xml new file mode 100644 index 000000000..a6b3b0fda --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hookshot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hoverboots.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hoverboots.xml new file mode 100644 index 000000000..6d41df8fd --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_hoverboots.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_insect.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_insect.xml new file mode 100644 index 000000000..7af5b5b3b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_insect.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_jewel.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_jewel.xml new file mode 100644 index 000000000..e83c65116 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_jewel.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_key.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_key.xml new file mode 100644 index 000000000..a37d45a71 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_key.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ki_tan_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ki_tan_mask.xml new file mode 100644 index 000000000..46eff7d3e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ki_tan_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_letter.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_letter.xml new file mode 100644 index 000000000..bea868339 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_letter.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_liquid.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_liquid.xml new file mode 100644 index 000000000..18a5c3d7a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_liquid.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_longsword.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_longsword.xml new file mode 100644 index 000000000..7161e42e3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_longsword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_m_arrow.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_m_arrow.xml new file mode 100644 index 000000000..0fd659ae9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_m_arrow.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_magicpot.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_magicpot.xml new file mode 100644 index 000000000..7623e6353 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_magicpot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_map.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_map.xml new file mode 100644 index 000000000..471c1dab9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_map.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_medal.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_medal.xml new file mode 100644 index 000000000..28e5b1e68 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_medal.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_melody.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_melody.xml new file mode 100644 index 000000000..b01fca953 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_melody.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_milk.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_milk.xml new file mode 100644 index 000000000..a3e223b3e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_milk.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_mushroom.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_mushroom.xml new file mode 100644 index 000000000..5b19bca74 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_mushroom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_niwatori.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_niwatori.xml new file mode 100644 index 000000000..c8389f62c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_niwatori.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_nuts.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_nuts.xml new file mode 100644 index 000000000..c59903c43 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_nuts.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ocarina.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ocarina.xml new file mode 100644 index 000000000..82607677d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ocarina.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ocarina_0.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ocarina_0.xml new file mode 100644 index 000000000..2c5f70d98 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ocarina_0.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_pachinko.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_pachinko.xml new file mode 100644 index 000000000..5f808baf9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_pachinko.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_powder.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_powder.xml new file mode 100644 index 000000000..fb7dc0155 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_powder.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_prescription.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_prescription.xml new file mode 100644 index 000000000..75ae7eb2b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_prescription.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_purse.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_purse.xml new file mode 100644 index 000000000..054731dec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_purse.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_rabit_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_rabit_mask.xml new file mode 100644 index 000000000..9d4eb9487 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_rabit_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_redead_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_redead_mask.xml new file mode 100644 index 000000000..7de08487f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_redead_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_rupy.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_rupy.xml new file mode 100644 index 000000000..0a1af96d0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_rupy.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_saw.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_saw.xml new file mode 100644 index 000000000..dcc038b7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_saw.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_scale.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_scale.xml new file mode 100644 index 000000000..1cf5de5b9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_scale.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_seed.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_seed.xml new file mode 100644 index 000000000..82c15c82d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_seed.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_shield_1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_shield_1.xml new file mode 100644 index 000000000..2f11e3f6d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_shield_1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_shield_2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_shield_2.xml new file mode 100644 index 000000000..176ae025f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_shield_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_shield_3.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_shield_3.xml new file mode 100644 index 000000000..8d1e5dafd --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_shield_3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_skj_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_skj_mask.xml new file mode 100644 index 000000000..e6c90f76f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_skj_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_soldout.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_soldout.xml new file mode 100644 index 000000000..a15b1253e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_soldout.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_soul.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_soul.xml new file mode 100644 index 000000000..a68178eba --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_soul.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_stick.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_stick.xml new file mode 100644 index 000000000..fed89f465 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_stick.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_sutaru.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_sutaru.xml new file mode 100644 index 000000000..a2606afbe --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_sutaru.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_sword_1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_sword_1.xml new file mode 100644 index 000000000..e1119abca --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_sword_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ticketstone.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ticketstone.xml new file mode 100644 index 000000000..73bf888d1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_ticketstone.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_truth_mask.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_truth_mask.xml new file mode 100644 index 000000000..3b4edf3de --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_truth_mask.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_zoramask.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_zoramask.xml new file mode 100644 index 000000000..e3b1ab10e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gi_zoramask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gj.xml new file mode 100644 index 000000000..ee6dab74f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gj.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gjyo_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gjyo_objects.xml new file mode 100644 index 000000000..ea4f8444f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gjyo_objects.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gla.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gla.xml new file mode 100644 index 000000000..499a3720d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gla.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gm.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gm.xml new file mode 100644 index 000000000..91b10cc42 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gm.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gnd.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gnd.xml new file mode 100644 index 000000000..3ae3b57f3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gnd.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gnd_magic.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gnd_magic.xml new file mode 100644 index 000000000..a88d419d7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gnd_magic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gndd.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gndd.xml new file mode 100644 index 000000000..8bf5d770c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gndd.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_god_lgt.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_god_lgt.xml new file mode 100644 index 000000000..60df9e469 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_god_lgt.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gol.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gol.xml new file mode 100644 index 000000000..7e04508cb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gol.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_goma.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_goma.xml new file mode 100644 index 000000000..ec3e42114 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_goma.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_goroiwa.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_goroiwa.xml new file mode 100644 index 000000000..5d406e957 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_goroiwa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gr.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gr.xml new file mode 100644 index 000000000..5f7360ae5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gr.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gs.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gs.xml new file mode 100644 index 000000000..145be1665 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gs.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gt.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gt.xml new file mode 100644 index 000000000..1d79d4e39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_gt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_haka.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_haka.xml new file mode 100644 index 000000000..f6b263c37 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_haka.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_haka_door.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_haka_door.xml new file mode 100644 index 000000000..1376d0356 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_haka_door.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_haka_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_haka_objects.xml new file mode 100644 index 000000000..3ca6d27c0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_haka_objects.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hakach_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hakach_objects.xml new file mode 100644 index 000000000..0de02aaf1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hakach_objects.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hata.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hata.xml new file mode 100644 index 000000000..b0324c3be --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hata.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_heavy_object.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_heavy_object.xml new file mode 100644 index 000000000..ecc795321 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_heavy_object.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hidan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hidan_objects.xml new file mode 100644 index 000000000..f41c0ee5e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hidan_objects.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hintnuts.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hintnuts.xml new file mode 100644 index 000000000..a7290f395 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hintnuts.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hni.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hni.xml new file mode 100644 index 000000000..6b317eb7a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hni.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse.xml new file mode 100644 index 000000000..74619e597 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_ganon.xml new file mode 100644 index 000000000..0a55462e2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_ganon.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_link_child.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_link_child.xml new file mode 100644 index 000000000..146c564f5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_link_child.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_normal.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_normal.xml new file mode 100644 index 000000000..2facab39c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_normal.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_zelda.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_zelda.xml new file mode 100644 index 000000000..af270c658 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_horse_zelda.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hs.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hs.xml new file mode 100644 index 000000000..cf5d06e1a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_hs.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_human.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_human.xml new file mode 100644 index 000000000..05795cb33 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_human.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ice_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ice_objects.xml new file mode 100644 index 000000000..c7d059d70 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ice_objects.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ik.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ik.xml new file mode 100644 index 000000000..8a6028f7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ik.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_im.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_im.xml new file mode 100644 index 000000000..a628a113a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_im.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_in.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_in.xml new file mode 100644 index 000000000..84c114047 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_in.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ingate.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ingate.xml new file mode 100644 index 000000000..e6be42beb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ingate.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jj.xml new file mode 100644 index 000000000..62bae8cb9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jj.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_js.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_js.xml new file mode 100644 index 000000000..ff7bd3efa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_js.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jya_door.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jya_door.xml new file mode 100644 index 000000000..60a7b3788 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jya_door.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jya_iron.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jya_iron.xml new file mode 100644 index 000000000..c6f6773c6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jya_iron.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jya_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jya_obj.xml new file mode 100644 index 000000000..a1f19b806 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_jya_obj.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ka.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ka.xml new file mode 100644 index 000000000..eb952732b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ka.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kanban.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kanban.xml new file mode 100644 index 000000000..9ffc7a2ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kanban.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kibako2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kibako2.xml new file mode 100644 index 000000000..a701b294d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kibako2.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kingdodongo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kingdodongo.xml new file mode 100644 index 000000000..a865c15de --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kingdodongo.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_km1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_km1.xml new file mode 100644 index 000000000..0a918a798 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_km1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kusa.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kusa.xml new file mode 100644 index 000000000..67291a554 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kusa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kw1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kw1.xml new file mode 100644 index 000000000..eab561b1f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kw1.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kz.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kz.xml new file mode 100644 index 000000000..4624fefdb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_kz.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_light_ring.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_light_ring.xml new file mode 100644 index 000000000..babe7d2aa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_light_ring.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_lightbox.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_lightbox.xml new file mode 100644 index 000000000..552a79d7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_lightbox.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_lightswitch.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_lightswitch.xml new file mode 100644 index 000000000..cfd5dcfb4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_lightswitch.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_link_boy.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_link_boy.xml new file mode 100644 index 000000000..6351af505 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_link_boy.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_link_child.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_link_child.xml new file mode 100644 index 000000000..0de400373 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_link_child.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ma1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ma1.xml new file mode 100644 index 000000000..63eeb3895 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ma1.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ma2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ma2.xml new file mode 100644 index 000000000..ce5910fb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ma2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mag.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mag.xml new file mode 100644 index 000000000..84467d76d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mag.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mamenoki.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mamenoki.xml new file mode 100644 index 000000000..819d89022 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mamenoki.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mastergolon.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mastergolon.xml new file mode 100644 index 000000000..6dd9d1659 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mastergolon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_masterkokiri.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_masterkokiri.xml new file mode 100644 index 000000000..af5a9ec15 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_masterkokiri.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_masterkokirihead.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_masterkokirihead.xml new file mode 100644 index 000000000..c64aa1c49 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_masterkokirihead.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_masterzoora.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_masterzoora.xml new file mode 100644 index 000000000..2c703274e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_masterzoora.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mb.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mb.xml new file mode 100644 index 000000000..23c0930c0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mb.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_md.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_md.xml new file mode 100644 index 000000000..161c73dca --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_md.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_medal.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_medal.xml new file mode 100644 index 000000000..533872a55 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_medal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_menkuri_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_menkuri_objects.xml new file mode 100644 index 000000000..4c2b51df5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_menkuri_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mir_ray.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mir_ray.xml new file mode 100644 index 000000000..2acc9391a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mir_ray.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mizu_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mizu_objects.xml new file mode 100644 index 000000000..5a18b95cf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mizu_objects.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin.xml new file mode 100644 index 000000000..daf9b0541 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_dark.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_dark.xml new file mode 100644 index 000000000..2fa0bdbe4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_dark.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_flame.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_flame.xml new file mode 100644 index 000000000..6274feaee --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_flame.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_flash.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_flash.xml new file mode 100644 index 000000000..c1040ea11 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_flash.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_ice.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_ice.xml new file mode 100644 index 000000000..1aaeea193 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_ice.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_oka.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_oka.xml new file mode 100644 index 000000000..0f823b923 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_oka.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_soul.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_soul.xml new file mode 100644 index 000000000..6386f7f9e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_soul.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_wind.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_wind.xml new file mode 100644 index 000000000..8bba7eb91 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mjin_wind.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mk.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mk.xml new file mode 100644 index 000000000..0b4aaae8a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mk.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mm.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mm.xml new file mode 100644 index 000000000..b27837e57 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mo.xml new file mode 100644 index 000000000..f450368f3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mo.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri1.xml new file mode 100644 index 000000000..bb1b31e2f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri1a.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri1a.xml new file mode 100644 index 000000000..c750ce20d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri1a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri2.xml new file mode 100644 index 000000000..785b85857 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri2a.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri2a.xml new file mode 100644 index 000000000..ad1bb4d5f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_hineri2a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_objects.xml new file mode 100644 index 000000000..58ea8c085 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_tex.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_tex.xml new file mode 100644 index 000000000..8ba4ff2d3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mori_tex.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ms.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ms.xml new file mode 100644 index 000000000..a87d0e6b3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ms.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mu.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mu.xml new file mode 100644 index 000000000..7251ff721 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_mu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_nb.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_nb.xml new file mode 100644 index 000000000..74de9e285 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_nb.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_niw.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_niw.xml new file mode 100644 index 000000000..4eafec956 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_niw.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_nwc.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_nwc.xml new file mode 100644 index 000000000..96ffa3238 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_nwc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ny.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ny.xml new file mode 100644 index 000000000..e2e8187ff --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ny.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA1.xml new file mode 100644 index 000000000..1d665f101 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA10.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA10.xml new file mode 100644 index 000000000..65d080834 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA10.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA11.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA11.xml new file mode 100644 index 000000000..92ae474b6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA11.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA2.xml new file mode 100644 index 000000000..ffdcd7989 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA2.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA3.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA3.xml new file mode 100644 index 000000000..a492bd875 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA4.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA4.xml new file mode 100644 index 000000000..dcdbbfff9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA5.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA5.xml new file mode 100644 index 000000000..55072176d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA6.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA6.xml new file mode 100644 index 000000000..c17a51088 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA6.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA7.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA7.xml new file mode 100644 index 000000000..52c68f639 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA7.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA8.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA8.xml new file mode 100644 index 000000000..8ed2d3df5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA8.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA9.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA9.xml new file mode 100644 index 000000000..d5c16abfc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oA9.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB1.xml new file mode 100644 index 000000000..2f50c967b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB2.xml new file mode 100644 index 000000000..230783cea --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB3.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB3.xml new file mode 100644 index 000000000..1c42ddacc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB3.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB4.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB4.xml new file mode 100644 index 000000000..2924c9e75 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oB4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE1.xml new file mode 100644 index 000000000..4d5b1663f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE1.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE10.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE10.xml new file mode 100644 index 000000000..04ce91437 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE10.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE11.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE11.xml new file mode 100644 index 000000000..04f6f186d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE11.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE12.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE12.xml new file mode 100644 index 000000000..a5fa39fd2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE12.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE1s.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE1s.xml new file mode 100644 index 000000000..d311e6010 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE1s.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE2.xml new file mode 100644 index 000000000..af62ad6d1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE2.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE3.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE3.xml new file mode 100644 index 000000000..95227da38 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE3.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE4.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE4.xml new file mode 100644 index 000000000..ae48d2ade --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE4.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE4s.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE4s.xml new file mode 100644 index 000000000..6037de52f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE4s.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE5.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE5.xml new file mode 100644 index 000000000..f5edf745a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE6.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE6.xml new file mode 100644 index 000000000..95bb602b6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE6.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE7.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE7.xml new file mode 100644 index 000000000..b3e588d4c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE7.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE8.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE8.xml new file mode 100644 index 000000000..be5de2494 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE8.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE9.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE9.xml new file mode 100644 index 000000000..8ea7ee18c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE9.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE_anime.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE_anime.xml new file mode 100644 index 000000000..f6b4659e2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oE_anime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oF1d_map.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oF1d_map.xml new file mode 100644 index 000000000..f14fecd82 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oF1d_map.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oF1s.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oF1s.xml new file mode 100644 index 000000000..fe41dde63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_oF1s.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_o_anime.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_o_anime.xml new file mode 100644 index 000000000..4ef4ac44c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_o_anime.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_okuta.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_okuta.xml new file mode 100644 index 000000000..b4fccea6f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_okuta.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_opening_demo1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_opening_demo1.xml new file mode 100644 index 000000000..fd0323027 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_opening_demo1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_os.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_os.xml new file mode 100644 index 000000000..5880a9293 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_os.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_os_anime.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_os_anime.xml new file mode 100644 index 000000000..f23636343 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_os_anime.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ossan.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ossan.xml new file mode 100644 index 000000000..5788e3a20 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ossan.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ouke_haka.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ouke_haka.xml new file mode 100644 index 000000000..11da9b26e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ouke_haka.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_owl.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_owl.xml new file mode 100644 index 000000000..64fdf64c5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_owl.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_peehat.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_peehat.xml new file mode 100644 index 000000000..42ee66cde --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_peehat.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_po_composer.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_po_composer.xml new file mode 100644 index 000000000..ff995efce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_po_composer.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_po_field.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_po_field.xml new file mode 100644 index 000000000..78bc0d65a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_po_field.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_po_sisters.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_po_sisters.xml new file mode 100644 index 000000000..b429be258 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_po_sisters.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_poh.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_poh.xml new file mode 100644 index 000000000..be6d6eff4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_poh.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ps.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ps.xml new file mode 100644 index 000000000..9f9c894a6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ps.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_pu_box.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_pu_box.xml new file mode 100644 index 000000000..e1d686e97 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_pu_box.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rd.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rd.xml new file mode 100644 index 000000000..22c7d3373 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rd.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_reeba.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_reeba.xml new file mode 100644 index 000000000..32c697bd9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_reeba.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_relay_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_relay_objects.xml new file mode 100644 index 000000000..47b92fcd2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_relay_objects.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rl.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rl.xml new file mode 100644 index 000000000..2a5ad30f6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rl.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rr.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rr.xml new file mode 100644 index 000000000..98726b14b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rr.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rs.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rs.xml new file mode 100644 index 000000000..152b5489e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_rs.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ru1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ru1.xml new file mode 100644 index 000000000..3d413619f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ru1.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ru2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ru2.xml new file mode 100644 index 000000000..fedf37d48 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ru2.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sa.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sa.xml new file mode 100644 index 000000000..ec45ac961 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sa.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sb.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sb.xml new file mode 100644 index 000000000..64d3bb005 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sb.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sd.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sd.xml new file mode 100644 index 000000000..fb58428c3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sd.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_shop_dungen.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_shop_dungen.xml new file mode 100644 index 000000000..594c43d39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_shop_dungen.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_shopnuts.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_shopnuts.xml new file mode 100644 index 000000000..7065f8941 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_shopnuts.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_siofuki.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_siofuki.xml new file mode 100644 index 000000000..a23240a72 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_siofuki.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sk2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sk2.xml new file mode 100644 index 000000000..f2e7ef6d8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sk2.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_skb.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_skb.xml new file mode 100644 index 000000000..5b5efb484 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_skb.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_skj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_skj.xml new file mode 100644 index 000000000..74548e518 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_skj.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot00_break.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot00_break.xml new file mode 100644 index 000000000..d3be88315 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot00_break.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot00_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot00_objects.xml new file mode 100644 index 000000000..10fb13aea --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot00_objects.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_matoya.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_matoya.xml new file mode 100644 index 000000000..d44b944e0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_matoya.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_matoyab.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_matoyab.xml new file mode 100644 index 000000000..720f50cd3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_matoyab.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_objects.xml new file mode 100644 index 000000000..413e032a9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_objects.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_objects2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_objects2.xml new file mode 100644 index 000000000..36741a949 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot01_objects2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot02_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot02_objects.xml new file mode 100644 index 000000000..65f45ff51 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot02_objects.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot03_object.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot03_object.xml new file mode 100644 index 000000000..f182e7d99 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot03_object.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot04_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot04_objects.xml new file mode 100644 index 000000000..66293d752 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot04_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot05_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot05_objects.xml new file mode 100644 index 000000000..6e7079149 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot05_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot06_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot06_objects.xml new file mode 100644 index 000000000..e3da63b0f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot06_objects.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot07_object.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot07_object.xml new file mode 100644 index 000000000..5bc2bfb6b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot07_object.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot08_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot08_obj.xml new file mode 100644 index 000000000..4d71f3473 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot08_obj.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot09_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot09_obj.xml new file mode 100644 index 000000000..eb6528393 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot09_obj.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot11_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot11_obj.xml new file mode 100644 index 000000000..257298f7c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot11_obj.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot12_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot12_obj.xml new file mode 100644 index 000000000..d619c781e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot12_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot15_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot15_obj.xml new file mode 100644 index 000000000..bd59b8cd1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot15_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot16_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot16_obj.xml new file mode 100644 index 000000000..d39de812a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot16_obj.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot17_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot17_obj.xml new file mode 100644 index 000000000..d4239d8d2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot17_obj.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot18_obj.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot18_obj.xml new file mode 100644 index 000000000..cc12b7894 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_spot18_obj.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ssh.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ssh.xml new file mode 100644 index 000000000..6283f8e9f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ssh.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sst.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sst.xml new file mode 100644 index 000000000..d64787fa1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_sst.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_st.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_st.xml new file mode 100644 index 000000000..983b9e2ea --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_st.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_stream.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_stream.xml new file mode 100644 index 000000000..59b0838e4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_stream.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_syokudai.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_syokudai.xml new file mode 100644 index 000000000..c1670edec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_syokudai.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ta.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ta.xml new file mode 100644 index 000000000..5e446bf5c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ta.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_timeblock.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_timeblock.xml new file mode 100644 index 000000000..1d6b9e698 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_timeblock.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tite.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tite.xml new file mode 100644 index 000000000..1be65c495 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tite.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tk.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tk.xml new file mode 100644 index 000000000..6b6cce724 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_toki_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_toki_objects.xml new file mode 100644 index 000000000..cd07e60d2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_toki_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_torch2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_torch2.xml new file mode 100644 index 000000000..3388e7d34 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_torch2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_toryo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_toryo.xml new file mode 100644 index 000000000..73f3dcb1e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_toryo.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tp.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tp.xml new file mode 100644 index 000000000..8ea908825 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tp.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tr.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tr.xml new file mode 100644 index 000000000..17ab9ae39 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tr.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_trap.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_trap.xml new file mode 100644 index 000000000..56195cf41 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_trap.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_triforce_spot.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_triforce_spot.xml new file mode 100644 index 000000000..87d449458 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_triforce_spot.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ts.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ts.xml new file mode 100644 index 000000000..567277bc3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ts.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tsubo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tsubo.xml new file mode 100644 index 000000000..ee2c5e184 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tsubo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tw.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tw.xml new file mode 100644 index 000000000..d238e10ab --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_tw.xml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_umajump.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_umajump.xml new file mode 100644 index 000000000..2ee4ade46 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_umajump.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_vali.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_vali.xml new file mode 100644 index 000000000..2bab5efaa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_vali.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_vase.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_vase.xml new file mode 100644 index 000000000..091d4c51e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_vase.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_vm.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_vm.xml new file mode 100644 index 000000000..c5b949b36 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_vm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_wallmaster.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_wallmaster.xml new file mode 100644 index 000000000..fbbc4f4af --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_wallmaster.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_warp1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_warp1.xml new file mode 100644 index 000000000..1497d7a10 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_warp1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_warp2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_warp2.xml new file mode 100644 index 000000000..b6d1b3624 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_warp2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_wf.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_wf.xml new file mode 100644 index 000000000..ebfb708d2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_wf.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_wood02.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_wood02.xml new file mode 100644 index 000000000..47ec342ca --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_wood02.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_xc.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_xc.xml new file mode 100644 index 000000000..bb2bf3e7a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_xc.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_yabusame_point.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_yabusame_point.xml new file mode 100644 index 000000000..bed9e8a60 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_yabusame_point.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ydan_objects.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ydan_objects.xml new file mode 100644 index 000000000..e2adf307f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_ydan_objects.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_yukabyun.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_yukabyun.xml new file mode 100644 index 000000000..d594ebbb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_yukabyun.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zf.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zf.xml new file mode 100644 index 000000000..7f20eb786 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zf.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zg.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zg.xml new file mode 100644 index 000000000..79005516c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zg.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl1.xml new file mode 100644 index 000000000..001e5be14 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl1.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl2.xml new file mode 100644 index 000000000..959a919ec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl2_anime1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl2_anime1.xml new file mode 100644 index 000000000..cada50486 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl2_anime1.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl2_anime2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl2_anime2.xml new file mode 100644 index 000000000..47016e2e0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl2_anime2.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl4.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl4.xml new file mode 100644 index 000000000..8e7a2837e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zl4.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zo.xml new file mode 100644 index 000000000..77465760e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/objects/object_zo.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Arrow_Fire.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Arrow_Fire.xml new file mode 100644 index 000000000..4c562a20d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Arrow_Fire.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Arrow_Ice.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Arrow_Ice.xml new file mode 100644 index 000000000..9a5798ff0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Arrow_Ice.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Arrow_Light.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Arrow_Light.xml new file mode 100644 index 000000000..4f183e040 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Arrow_Light.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Bg_Ganon_Otyuka.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Bg_Ganon_Otyuka.xml new file mode 100644 index 000000000..745a1974f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Bg_Ganon_Otyuka.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Bg_Jya_Cobra.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Bg_Jya_Cobra.xml new file mode 100644 index 000000000..752a28b0a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Bg_Jya_Cobra.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Dodongo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Dodongo.xml new file mode 100644 index 000000000..5dba82099 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Dodongo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Ganon.xml new file mode 100644 index 000000000..d69b3d473 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Ganon.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Ganon2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Ganon2.xml new file mode 100644 index 000000000..da1dba0c2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Ganon2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Sst.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Sst.xml new file mode 100644 index 000000000..83576e0ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Boss_Sst.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Demo_Shd.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Demo_Shd.xml new file mode 100644 index 000000000..d898616a7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Demo_Shd.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Bili.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Bili.xml new file mode 100644 index 000000000..1e806241e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Bili.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Clear_Tag.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Clear_Tag.xml new file mode 100644 index 000000000..e5394879f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Clear_Tag.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Ganon_Mant.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Ganon_Mant.xml new file mode 100644 index 000000000..9b59ab564 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Ganon_Mant.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Ganon_Organ.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Ganon_Organ.xml new file mode 100644 index 000000000..109aa0056 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Ganon_Organ.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Holl.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Holl.xml new file mode 100644 index 000000000..5118d7a03 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Holl.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Jsjutan.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Jsjutan.xml new file mode 100644 index 000000000..7d25a4015 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Jsjutan.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Kanban.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Kanban.xml new file mode 100644 index 000000000..00ef7e06d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Kanban.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Sda.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Sda.xml new file mode 100644 index 000000000..13a75e568 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Sda.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Ssh.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Ssh.xml new file mode 100644 index 000000000..3028aa3f6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Ssh.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_St.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_St.xml new file mode 100644 index 000000000..0bbe47ce0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_St.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Sth.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Sth.xml new file mode 100644 index 000000000..517a47630 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_En_Sth.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_End_Title.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_End_Title.xml new file mode 100644 index 000000000..5fa2fa107 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_End_Title.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_File_Choose.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_File_Choose.xml new file mode 100644 index 000000000..9fe7266ac --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_File_Choose.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Magic_Dark.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Magic_Dark.xml new file mode 100644 index 000000000..d5579801b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Magic_Dark.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Magic_Fire.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Magic_Fire.xml new file mode 100644 index 000000000..87a8d3258 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Magic_Fire.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Magic_Wind.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Magic_Wind.xml new file mode 100644 index 000000000..261606e52 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Magic_Wind.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Spot.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Spot.xml new file mode 100644 index 000000000..dfc63dca1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Spot.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Storm.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Storm.xml new file mode 100644 index 000000000..131239ad9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Storm.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe.xml new file mode 100644 index 000000000..e32e56a4e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe2.xml new file mode 100644 index 000000000..f31b1201d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe3.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe3.xml new file mode 100644 index 000000000..a9bb00657 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe4.xml b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe4.xml new file mode 100644 index 000000000..1cfceb7a5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/overlays/ovl_Oceff_Wipe4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/Bmori1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/Bmori1.xml new file mode 100644 index 000000000..373f36030 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/Bmori1.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/FIRE_bs.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/FIRE_bs.xml new file mode 100644 index 000000000..89331ecc2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/FIRE_bs.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HAKAdan.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HAKAdan.xml new file mode 100644 index 000000000..e557c80a5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HAKAdan.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HAKAdanCH.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HAKAdanCH.xml new file mode 100644 index 000000000..97401aff6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HAKAdanCH.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HAKAdan_bs.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HAKAdan_bs.xml new file mode 100644 index 000000000..d36ac6b77 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HAKAdan_bs.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HIDAN.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HIDAN.xml new file mode 100644 index 000000000..fa4d784f1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/HIDAN.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/MIZUsin.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/MIZUsin.xml new file mode 100644 index 000000000..00c5aa82d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/MIZUsin.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/MIZUsin_bs.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/MIZUsin_bs.xml new file mode 100644 index 000000000..99ae2b3ef --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/MIZUsin_bs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/bdan.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/bdan.xml new file mode 100644 index 000000000..a9e520f4c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/bdan.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/bdan_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/bdan_boss.xml new file mode 100644 index 000000000..9fccf2c30 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/bdan_boss.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ddan.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ddan.xml new file mode 100644 index 000000000..1446a9c98 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ddan.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ddan_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ddan_boss.xml new file mode 100644 index 000000000..05633e53e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ddan_boss.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon.xml new file mode 100644 index 000000000..f857dbe94 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_boss.xml new file mode 100644 index 000000000..36c5e8107 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_boss.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_demo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_demo.xml new file mode 100644 index 000000000..56c98efed --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_demo.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_final.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_final.xml new file mode 100644 index 000000000..3ec568cfb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_final.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_sonogo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_sonogo.xml new file mode 100644 index 000000000..84ef36950 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_sonogo.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_tou.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_tou.xml new file mode 100644 index 000000000..1ae37b963 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganon_tou.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganontika.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganontika.xml new file mode 100644 index 000000000..a5ff210ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganontika.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganontikasonogo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganontikasonogo.xml new file mode 100644 index 000000000..060d4941b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ganontikasonogo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/gerudoway.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/gerudoway.xml new file mode 100644 index 000000000..827277614 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/gerudoway.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ice_doukutu.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ice_doukutu.xml new file mode 100644 index 000000000..0f1bc3b28 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ice_doukutu.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/jyasinboss.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/jyasinboss.xml new file mode 100644 index 000000000..86c0d317b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/jyasinboss.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/jyasinzou.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/jyasinzou.xml new file mode 100644 index 000000000..bc14a46ac --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/jyasinzou.xml @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/men.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/men.xml new file mode 100644 index 000000000..d9e5960e8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/men.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/moribossroom.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/moribossroom.xml new file mode 100644 index 000000000..b9959eefa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/moribossroom.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ydan.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ydan.xml new file mode 100644 index 000000000..aed7d2660 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ydan.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ydan_boss.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ydan_boss.xml new file mode 100644 index 000000000..7ea240547 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/dungeons/ydan_boss.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/bowling.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/bowling.xml new file mode 100644 index 000000000..9a41763a2 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/bowling.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/daiyousei_izumi.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/daiyousei_izumi.xml new file mode 100644 index 000000000..4f9a03fc0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/daiyousei_izumi.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hairal_niwa.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hairal_niwa.xml new file mode 100644 index 000000000..06d89f2fe --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hairal_niwa.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hairal_niwa_n.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hairal_niwa_n.xml new file mode 100644 index 000000000..6f4c181e0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hairal_niwa_n.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hakasitarelay.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hakasitarelay.xml new file mode 100644 index 000000000..91be63d14 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hakasitarelay.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hut.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hut.xml new file mode 100644 index 000000000..a4ef5715f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hylia_labo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hylia_labo.xml new file mode 100644 index 000000000..56822e67a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/hylia_labo.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/impa.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/impa.xml new file mode 100644 index 000000000..db757e3d3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/impa.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kakariko.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kakariko.xml new file mode 100644 index 000000000..e4e9b102c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kakariko.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kenjyanoma.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kenjyanoma.xml new file mode 100644 index 000000000..4e8a58f3b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kenjyanoma.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home.xml new file mode 100644 index 000000000..8c0305493 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home3.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home3.xml new file mode 100644 index 000000000..9f36eb41c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home4.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home4.xml new file mode 100644 index 000000000..eb861aedb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home4.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home5.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home5.xml new file mode 100644 index 000000000..974987fed --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/kokiri_home5.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/labo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/labo.xml new file mode 100644 index 000000000..c0a9d2eb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/labo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/link_home.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/link_home.xml new file mode 100644 index 000000000..2fb88ae34 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/link_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/mahouya.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/mahouya.xml new file mode 100644 index 000000000..8ae462f9d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/mahouya.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/malon_stable.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/malon_stable.xml new file mode 100644 index 000000000..aff97eeb8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/malon_stable.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/miharigoya.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/miharigoya.xml new file mode 100644 index 000000000..63f8676ac --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/miharigoya.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/nakaniwa.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/nakaniwa.xml new file mode 100644 index 000000000..2fb2d5e6a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/nakaniwa.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/syatekijyou.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/syatekijyou.xml new file mode 100644 index 000000000..05243b52c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/syatekijyou.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/takaraya.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/takaraya.xml new file mode 100644 index 000000000..5b438980b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/takaraya.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/tent.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/tent.xml new file mode 100644 index 000000000..de72cc5f4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/tent.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/tokinoma.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/tokinoma.xml new file mode 100644 index 000000000..d7878b895 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/tokinoma.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/yousei_izumi_tate.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/yousei_izumi_tate.xml new file mode 100644 index 000000000..3b6dd2dec --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/yousei_izumi_tate.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/yousei_izumi_yoko.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/yousei_izumi_yoko.xml new file mode 100644 index 000000000..90a8d95d0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/indoors/yousei_izumi_yoko.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/enrui.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/enrui.xml new file mode 100644 index 000000000..d8c06e545 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/enrui.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/entra_n.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/entra_n.xml new file mode 100644 index 000000000..5b408ac3a --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/entra_n.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hakaana.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hakaana.xml new file mode 100644 index 000000000..e7dc93dd0 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hakaana.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hakaana2.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hakaana2.xml new file mode 100644 index 000000000..2d8ba4906 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hakaana2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hakaana_ouke.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hakaana_ouke.xml new file mode 100644 index 000000000..17f53613e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hakaana_ouke.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hiral_demo.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hiral_demo.xml new file mode 100644 index 000000000..1331fdd4c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/hiral_demo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/kakariko3.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/kakariko3.xml new file mode 100644 index 000000000..07b62c44d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/kakariko3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/kakusiana.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/kakusiana.xml new file mode 100644 index 000000000..c3f993ff4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/kakusiana.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/kinsuta.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/kinsuta.xml new file mode 100644 index 000000000..aac0f6c4e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/kinsuta.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_alley.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_alley.xml new file mode 100644 index 000000000..c30467303 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_alley.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_alley_n.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_alley_n.xml new file mode 100644 index 000000000..65db60411 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_alley_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_day.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_day.xml new file mode 100644 index 000000000..00887e69c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_day.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_night.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_night.xml new file mode 100644 index 000000000..c58e38744 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_night.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_ruins.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_ruins.xml new file mode 100644 index 000000000..f0ec75e75 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/market_ruins.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/shrine.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/shrine.xml new file mode 100644 index 000000000..b9ddf2cf7 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/shrine.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/shrine_n.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/shrine_n.xml new file mode 100644 index 000000000..4878338aa --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/shrine_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/shrine_r.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/shrine_r.xml new file mode 100644 index 000000000..122036791 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/shrine_r.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/turibori.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/turibori.xml new file mode 100644 index 000000000..0633224d9 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/misc/turibori.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/entra.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/entra.xml new file mode 100644 index 000000000..92ee57f59 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/entra.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/souko.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/souko.xml new file mode 100644 index 000000000..8dd9d9e48 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/souko.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot00.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot00.xml new file mode 100644 index 000000000..508d9309b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot00.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot01.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot01.xml new file mode 100644 index 000000000..eb725afa6 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot01.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot02.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot02.xml new file mode 100644 index 000000000..c7924c29d --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot02.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot03.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot03.xml new file mode 100644 index 000000000..9434185f4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot03.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot04.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot04.xml new file mode 100644 index 000000000..f33860420 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot04.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot05.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot05.xml new file mode 100644 index 000000000..4f7c62b91 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot05.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot06.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot06.xml new file mode 100644 index 000000000..f4af602cf --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot06.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot07.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot07.xml new file mode 100644 index 000000000..eeb976f7f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot07.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot08.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot08.xml new file mode 100644 index 000000000..86582f0dc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot08.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot09.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot09.xml new file mode 100644 index 000000000..5bb9e059c --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot09.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot10.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot10.xml new file mode 100644 index 000000000..66365e3d8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot11.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot11.xml new file mode 100644 index 000000000..76ff3b822 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot11.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot12.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot12.xml new file mode 100644 index 000000000..e21523b21 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot12.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot13.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot13.xml new file mode 100644 index 000000000..c68913065 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot13.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot15.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot15.xml new file mode 100644 index 000000000..e75f7b684 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot15.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot16.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot16.xml new file mode 100644 index 000000000..f41b226f8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot16.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot17.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot17.xml new file mode 100644 index 000000000..feb267251 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot17.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot18.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot18.xml new file mode 100644 index 000000000..d70fccf4b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot18.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot20.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot20.xml new file mode 100644 index 000000000..1381f6ecb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/overworld/spot20.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/alley_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/alley_shop.xml new file mode 100644 index 000000000..95548de1b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/alley_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/drag.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/drag.xml new file mode 100644 index 000000000..acb6515fb --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/drag.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/face_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/face_shop.xml new file mode 100644 index 000000000..16a974608 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/face_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/golon.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/golon.xml new file mode 100644 index 000000000..c58672798 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/golon.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/kokiri_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/kokiri_shop.xml new file mode 100644 index 000000000..50cd633e5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/kokiri_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/night_shop.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/night_shop.xml new file mode 100644 index 000000000..5954d9c83 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/night_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/shop1.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/shop1.xml new file mode 100644 index 000000000..525a06d63 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/shop1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/zoora.xml b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/zoora.xml new file mode 100644 index 000000000..0e4ac18f8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/scenes/shops/zoora.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/text/elf_message_field.xml b/soh/assets/xml/GC_NMQ_NTSC_U/text/elf_message_field.xml new file mode 100644 index 000000000..789a554ce --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/text/elf_message_field.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/text/elf_message_ydan.xml b/soh/assets/xml/GC_NMQ_NTSC_U/text/elf_message_ydan.xml new file mode 100644 index 000000000..f784afcf4 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/text/elf_message_ydan.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/text/message_data_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/text/message_data_static.xml new file mode 100644 index 000000000..94948fa8e --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/text/message_data_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/backgrounds.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/backgrounds.xml new file mode 100644 index 000000000..c60ff57a8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/backgrounds.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/boss_title_cards.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/boss_title_cards.xml new file mode 100644 index 000000000..84f555bd1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/boss_title_cards.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/do_action_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/do_action_static.xml new file mode 100644 index 000000000..efabd54a5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/do_action_static.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_24_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_24_static.xml new file mode 100644 index 000000000..cdb8cc737 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_24_static.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_dungeon_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_dungeon_static.xml new file mode 100644 index 000000000..873c490fc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_dungeon_static.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_field_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_field_static.xml new file mode 100644 index 000000000..ed991406b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_field_static.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_gameover_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_gameover_static.xml new file mode 100644 index 000000000..ffd392868 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_gameover_static.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_jpn_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_jpn_static.xml new file mode 100644 index 000000000..f2fe854b8 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_jpn_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_nes_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_nes_static.xml new file mode 100644 index 000000000..6cd92acfc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_nes_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_static.xml new file mode 100644 index 000000000..9e844615b --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/icon_item_static.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/item_name_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/item_name_static.xml new file mode 100644 index 000000000..266b3c200 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/item_name_static.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/kanji.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/kanji.xml new file mode 100644 index 000000000..5159387a1 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/kanji.xml @@ -0,0 +1,3984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_48x85_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_48x85_static.xml new file mode 100644 index 000000000..b2ea46340 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_48x85_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_grand_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_grand_static.xml new file mode 100644 index 000000000..201955bfc --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_grand_static.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_i_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_i_static.xml new file mode 100644 index 000000000..1721f6d84 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_i_static.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_name_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_name_static.xml new file mode 100644 index 000000000..ca4c4c0bd --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/map_name_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/message_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/message_static.xml new file mode 100644 index 000000000..afdde60de --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/message_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/message_texture_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/message_texture_static.xml new file mode 100644 index 000000000..bbf7e1259 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/message_texture_static.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/nes_font_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/nes_font_static.xml new file mode 100644 index 000000000..b01646cb5 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/nes_font_static.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/nintendo_rogo_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/nintendo_rogo_static.xml new file mode 100644 index 000000000..f09de3b0f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/nintendo_rogo_static.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/parameter_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/parameter_static.xml new file mode 100644 index 000000000..c51dacf1f --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/parameter_static.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/place_title_cards.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/place_title_cards.xml new file mode 100644 index 000000000..b688cce00 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/place_title_cards.xml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/skyboxes.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/skyboxes.xml new file mode 100644 index 000000000..104ffb2a3 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/skyboxes.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_NTSC_U/textures/title_static.xml b/soh/assets/xml/GC_NMQ_NTSC_U/textures/title_static.xml new file mode 100644 index 000000000..5f58c5a82 --- /dev/null +++ b/soh/assets/xml/GC_NMQ_NTSC_U/textures/title_static.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/GC_NMQ_PAL_F/code/sys_matrix.xml b/soh/assets/xml/GC_NMQ_PAL_F/code/sys_matrix.xml index 486cb244d..045ad0c76 100644 --- a/soh/assets/xml/GC_NMQ_PAL_F/code/sys_matrix.xml +++ b/soh/assets/xml/GC_NMQ_PAL_F/code/sys_matrix.xml @@ -1,5 +1,5 @@ - + diff --git a/soh/assets/xml/GC_NMQ_PAL_F/objects/gameplay_keep.xml b/soh/assets/xml/GC_NMQ_PAL_F/objects/gameplay_keep.xml index 5ffc52f65..882422884 100644 --- a/soh/assets/xml/GC_NMQ_PAL_F/objects/gameplay_keep.xml +++ b/soh/assets/xml/GC_NMQ_PAL_F/objects/gameplay_keep.xml @@ -7,6 +7,8 @@ + + diff --git a/soh/assets/xml/N64_NTSC_10/audio/Audio.xml b/soh/assets/xml/N64_NTSC_10/audio/Audio.xml new file mode 100644 index 000000000..a546214d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/audio/Audio.xml @@ -0,0 +1,1570 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/code/fbdemo_circle.xml b/soh/assets/xml/N64_NTSC_10/code/fbdemo_circle.xml new file mode 100644 index 000000000..9217b2f27 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/code/fbdemo_circle.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/code/fbdemo_triforce.xml b/soh/assets/xml/N64_NTSC_10/code/fbdemo_triforce.xml new file mode 100644 index 000000000..ac3221234 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/code/fbdemo_triforce.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/code/fbdemo_wipe1.xml b/soh/assets/xml/N64_NTSC_10/code/fbdemo_wipe1.xml new file mode 100644 index 000000000..aeb78987d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/code/fbdemo_wipe1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/code/sys_matrix.xml b/soh/assets/xml/N64_NTSC_10/code/sys_matrix.xml new file mode 100644 index 000000000..66bd15b59 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/code/sys_matrix.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/misc/link_animetion.xml b/soh/assets/xml/N64_NTSC_10/misc/link_animetion.xml new file mode 100644 index 000000000..9de1e92d3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/misc/link_animetion.xml @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/gameplay_dangeon_keep.xml b/soh/assets/xml/N64_NTSC_10/objects/gameplay_dangeon_keep.xml new file mode 100644 index 000000000..5b1a9050d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/gameplay_dangeon_keep.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/gameplay_field_keep.xml b/soh/assets/xml/N64_NTSC_10/objects/gameplay_field_keep.xml new file mode 100644 index 000000000..011e8f7fc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/gameplay_field_keep.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/gameplay_keep.xml b/soh/assets/xml/N64_NTSC_10/objects/gameplay_keep.xml new file mode 100644 index 000000000..94eee8845 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/gameplay_keep.xml @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_Bb.xml b/soh/assets/xml/N64_NTSC_10/objects/object_Bb.xml new file mode 100644 index 000000000..5d04bde45 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_Bb.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ahg.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ahg.xml new file mode 100644 index 000000000..4d37b1b11 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ahg.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_am.xml b/soh/assets/xml/N64_NTSC_10/objects/object_am.xml new file mode 100644 index 000000000..b70c70d70 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_am.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ane.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ane.xml new file mode 100644 index 000000000..1e29b351e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ane.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ani.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ani.xml new file mode 100644 index 000000000..c70621c6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ani.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_anubice.xml b/soh/assets/xml/N64_NTSC_10/objects/object_anubice.xml new file mode 100644 index 000000000..fb029586b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_anubice.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_aob.xml b/soh/assets/xml/N64_NTSC_10/objects/object_aob.xml new file mode 100644 index 000000000..e6202d0cf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_aob.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_b_heart.xml b/soh/assets/xml/N64_NTSC_10/objects/object_b_heart.xml new file mode 100644 index 000000000..00f7cd677 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_b_heart.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bba.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bba.xml new file mode 100644 index 000000000..ccc5c2136 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bba.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bdan_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bdan_objects.xml new file mode 100644 index 000000000..dcd56d385 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bdan_objects.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bdoor.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bdoor.xml new file mode 100644 index 000000000..a092f0c23 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bdoor.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bg.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bg.xml new file mode 100644 index 000000000..791226b71 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bg.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bigokuta.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bigokuta.xml new file mode 100644 index 000000000..1c7d39e31 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bigokuta.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bird.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bird.xml new file mode 100644 index 000000000..167a5022d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bird.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bji.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bji.xml new file mode 100644 index 000000000..c665b6b00 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bji.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bl.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bl.xml new file mode 100644 index 000000000..1c2ef4ec6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_blkobj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_blkobj.xml new file mode 100644 index 000000000..345a8ebd9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_blkobj.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bob.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bob.xml new file mode 100644 index 000000000..289e994e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bob.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_boj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_boj.xml new file mode 100644 index 000000000..4be4764ab --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_boj.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bombf.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bombf.xml new file mode 100644 index 000000000..83e60248d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bombf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bombiwa.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bombiwa.xml new file mode 100644 index 000000000..26ab6b4f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bombiwa.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bowl.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bowl.xml new file mode 100644 index 000000000..ffe6d43db --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bowl.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_box.xml b/soh/assets/xml/N64_NTSC_10/objects/object_box.xml new file mode 100644 index 000000000..106d2d335 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_box.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_brob.xml b/soh/assets/xml/N64_NTSC_10/objects/object_brob.xml new file mode 100644 index 000000000..718dcd561 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_brob.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bubble.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bubble.xml new file mode 100644 index 000000000..f5de18692 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bubble.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bv.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bv.xml new file mode 100644 index 000000000..58db6e1d4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bv.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bw.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bw.xml new file mode 100644 index 000000000..6fd39fbb1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bw.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bwall.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bwall.xml new file mode 100644 index 000000000..d4f43ddc1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bwall.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_bxa.xml b/soh/assets/xml/N64_NTSC_10/objects/object_bxa.xml new file mode 100644 index 000000000..fb78c117e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_bxa.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_cne.xml b/soh/assets/xml/N64_NTSC_10/objects/object_cne.xml new file mode 100644 index 000000000..0c14d0bc5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_cne.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_cob.xml b/soh/assets/xml/N64_NTSC_10/objects/object_cob.xml new file mode 100644 index 000000000..ba051cfa7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_cob.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_cow.xml b/soh/assets/xml/N64_NTSC_10/objects/object_cow.xml new file mode 100644 index 000000000..5d067c329 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_cow.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_crow.xml b/soh/assets/xml/N64_NTSC_10/objects/object_crow.xml new file mode 100644 index 000000000..77337c644 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_crow.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_cs.xml b/soh/assets/xml/N64_NTSC_10/objects/object_cs.xml new file mode 100644 index 000000000..83804ccaf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_cs.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_d_elevator.xml b/soh/assets/xml/N64_NTSC_10/objects/object_d_elevator.xml new file mode 100644 index 000000000..6be59c154 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_d_elevator.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_d_hsblock.xml b/soh/assets/xml/N64_NTSC_10/objects/object_d_hsblock.xml new file mode 100644 index 000000000..4bb50c2b4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_d_hsblock.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_d_lift.xml b/soh/assets/xml/N64_NTSC_10/objects/object_d_lift.xml new file mode 100644 index 000000000..291238519 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_d_lift.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_daiku.xml b/soh/assets/xml/N64_NTSC_10/objects/object_daiku.xml new file mode 100644 index 000000000..1524c7a26 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_daiku.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ddan_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ddan_objects.xml new file mode 100644 index 000000000..3fc563b96 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ddan_objects.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dekubaba.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dekubaba.xml new file mode 100644 index 000000000..7202a833f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dekubaba.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dekujr.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dekujr.xml new file mode 100644 index 000000000..e906bf61c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dekujr.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dekunuts.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dekunuts.xml new file mode 100644 index 000000000..5fceef416 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dekunuts.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_demo_6k.xml b/soh/assets/xml/N64_NTSC_10/objects/object_demo_6k.xml new file mode 100644 index 000000000..73058d5e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_demo_6k.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_demo_kekkai.xml b/soh/assets/xml/N64_NTSC_10/objects/object_demo_kekkai.xml new file mode 100644 index 000000000..aa54bc2ee --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_demo_kekkai.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_demo_tre_lgt.xml b/soh/assets/xml/N64_NTSC_10/objects/object_demo_tre_lgt.xml new file mode 100644 index 000000000..9ea19012b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_demo_tre_lgt.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dh.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dh.xml new file mode 100644 index 000000000..7a52d7dbe --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dh.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dnk.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dnk.xml new file mode 100644 index 000000000..3bce34304 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dnk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dns.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dns.xml new file mode 100644 index 000000000..8b78ffcf2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dns.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dodojr.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dodojr.xml new file mode 100644 index 000000000..4dfd7d6e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dodojr.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dodongo.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dodongo.xml new file mode 100644 index 000000000..779e20e9d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dodongo.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dog.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dog.xml new file mode 100644 index 000000000..ef00442b6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dog.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_door_gerudo.xml b/soh/assets/xml/N64_NTSC_10/objects/object_door_gerudo.xml new file mode 100644 index 000000000..2f1726204 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_door_gerudo.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_door_killer.xml b/soh/assets/xml/N64_NTSC_10/objects/object_door_killer.xml new file mode 100644 index 000000000..a37f590d6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_door_killer.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ds.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ds.xml new file mode 100644 index 000000000..0413a9e2e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ds.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ds2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ds2.xml new file mode 100644 index 000000000..683bcc68d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ds2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_du.xml b/soh/assets/xml/N64_NTSC_10/objects/object_du.xml new file mode 100644 index 000000000..0babd962b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_du.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_dy_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_dy_obj.xml new file mode 100644 index 000000000..5e792edb5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_dy_obj.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ec.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ec.xml new file mode 100644 index 000000000..7ec83e284 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ec.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_efc_crystal_light.xml b/soh/assets/xml/N64_NTSC_10/objects/object_efc_crystal_light.xml new file mode 100644 index 000000000..9215b6a39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_efc_crystal_light.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_efc_doughnut.xml b/soh/assets/xml/N64_NTSC_10/objects/object_efc_doughnut.xml new file mode 100644 index 000000000..7f12c56f5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_efc_doughnut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_efc_erupc.xml b/soh/assets/xml/N64_NTSC_10/objects/object_efc_erupc.xml new file mode 100644 index 000000000..800d9535f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_efc_erupc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_efc_fire_ball.xml b/soh/assets/xml/N64_NTSC_10/objects/object_efc_fire_ball.xml new file mode 100644 index 000000000..2fc65b16f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_efc_fire_ball.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_efc_flash.xml b/soh/assets/xml/N64_NTSC_10/objects/object_efc_flash.xml new file mode 100644 index 000000000..5f962f162 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_efc_flash.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_efc_lgt_shower.xml b/soh/assets/xml/N64_NTSC_10/objects/object_efc_lgt_shower.xml new file mode 100644 index 000000000..67ef5ce7e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_efc_lgt_shower.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_efc_star_field.xml b/soh/assets/xml/N64_NTSC_10/objects/object_efc_star_field.xml new file mode 100644 index 000000000..00b47c460 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_efc_star_field.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_efc_tw.xml b/soh/assets/xml/N64_NTSC_10/objects/object_efc_tw.xml new file mode 100644 index 000000000..de5376569 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_efc_tw.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ei.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ei.xml new file mode 100644 index 000000000..e4132491f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ei.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fa.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fa.xml new file mode 100644 index 000000000..2f1bf9a5e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fa.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fd.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fd.xml new file mode 100644 index 000000000..9bc25d3a6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fd.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fd2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fd2.xml new file mode 100644 index 000000000..44b5f5f9c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fd2.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fhg.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fhg.xml new file mode 100644 index 000000000..6a275daeb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fhg.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fire.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fire.xml new file mode 100644 index 000000000..49bf620cb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fire.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_firefly.xml b/soh/assets/xml/N64_NTSC_10/objects/object_firefly.xml new file mode 100644 index 000000000..8c26a4341 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_firefly.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fish.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fish.xml new file mode 100644 index 000000000..f5ad4f6da --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fish.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fr.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fr.xml new file mode 100644 index 000000000..25ee2ad42 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fr.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fu.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fu.xml new file mode 100644 index 000000000..82c449e3d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fu.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fw.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fw.xml new file mode 100644 index 000000000..ee9821d26 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fw.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_fz.xml b/soh/assets/xml/N64_NTSC_10/objects/object_fz.xml new file mode 100644 index 000000000..dad6fec5c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_fz.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ganon.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ganon.xml new file mode 100644 index 000000000..5b68602ba --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ganon.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ganon2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ganon2.xml new file mode 100644 index 000000000..7e715dd41 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ganon2.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ganon_anime1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ganon_anime1.xml new file mode 100644 index 000000000..b1016299b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ganon_anime1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ganon_anime2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ganon_anime2.xml new file mode 100644 index 000000000..180e5995c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ganon_anime2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ganon_anime3.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ganon_anime3.xml new file mode 100644 index 000000000..be4c4dcb1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ganon_anime3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ganon_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ganon_objects.xml new file mode 100644 index 000000000..5e32610ff --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ganon_objects.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ge1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ge1.xml new file mode 100644 index 000000000..79e0768b8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ge1.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_geff.xml b/soh/assets/xml/N64_NTSC_10/objects/object_geff.xml new file mode 100644 index 000000000..f0667743b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_geff.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_geldb.xml b/soh/assets/xml/N64_NTSC_10/objects/object_geldb.xml new file mode 100644 index 000000000..49b12ef2e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_geldb.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_arrow.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_arrow.xml new file mode 100644 index 000000000..4b58787a9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_arrow.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_arrowcase.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_arrowcase.xml new file mode 100644 index 000000000..267b0a734 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_arrowcase.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_bean.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bean.xml new file mode 100644 index 000000000..e74247816 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bean.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_bomb_1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bomb_1.xml new file mode 100644 index 000000000..bae86c11d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bomb_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_bomb_2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bomb_2.xml new file mode 100644 index 000000000..1400c4a4d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bomb_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_bombpouch.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bombpouch.xml new file mode 100644 index 000000000..07134748c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bombpouch.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_boomerang.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_boomerang.xml new file mode 100644 index 000000000..3c1a0fe7f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_boomerang.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_boots_2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_boots_2.xml new file mode 100644 index 000000000..3bcb6a47a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_boots_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_bosskey.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bosskey.xml new file mode 100644 index 000000000..e5e4bc86c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bosskey.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_bottle.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bottle.xml new file mode 100644 index 000000000..3b0884a03 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bottle.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_bottle_letter.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bottle_letter.xml new file mode 100644 index 000000000..443219caf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bottle_letter.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_bow.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bow.xml new file mode 100644 index 000000000..946e9c496 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bow.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_bracelet.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bracelet.xml new file mode 100644 index 000000000..5a0b62a60 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_bracelet.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_brokensword.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_brokensword.xml new file mode 100644 index 000000000..408741ac5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_brokensword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_butterfly.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_butterfly.xml new file mode 100644 index 000000000..7b60a7724 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_butterfly.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_clothes.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_clothes.xml new file mode 100644 index 000000000..3f897b6d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_clothes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_coin.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_coin.xml new file mode 100644 index 000000000..22e29f255 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_coin.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_compass.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_compass.xml new file mode 100644 index 000000000..076229b11 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_compass.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_dekupouch.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_dekupouch.xml new file mode 100644 index 000000000..8925e6fa5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_dekupouch.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_egg.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_egg.xml new file mode 100644 index 000000000..2b2e2847d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_egg.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_eye_lotion.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_eye_lotion.xml new file mode 100644 index 000000000..5128c5f6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_eye_lotion.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_fire.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_fire.xml new file mode 100644 index 000000000..4bfd76a7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_fire.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_fish.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_fish.xml new file mode 100644 index 000000000..edb39dc29 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_fish.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_frog.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_frog.xml new file mode 100644 index 000000000..a656c306b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_frog.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_gerudo.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_gerudo.xml new file mode 100644 index 000000000..d65daee8e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_gerudo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_gerudomask.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_gerudomask.xml new file mode 100644 index 000000000..cfcb878d9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_gerudomask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_ghost.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ghost.xml new file mode 100644 index 000000000..795f0cfd1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ghost.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_glasses.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_glasses.xml new file mode 100644 index 000000000..63d32ab5a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_glasses.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_gloves.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_gloves.xml new file mode 100644 index 000000000..0e1c4259d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_gloves.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_goddess.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_goddess.xml new file mode 100644 index 000000000..50cbdd891 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_goddess.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_golonmask.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_golonmask.xml new file mode 100644 index 000000000..844d90e71 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_golonmask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_grass.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_grass.xml new file mode 100644 index 000000000..ae7834201 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_grass.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_hammer.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_hammer.xml new file mode 100644 index 000000000..feb5c8659 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_hammer.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_heart.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_heart.xml new file mode 100644 index 000000000..48e78b1b5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_heart.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_hearts.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_hearts.xml new file mode 100644 index 000000000..d2e763e63 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_hearts.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_hookshot.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_hookshot.xml new file mode 100644 index 000000000..a6b3b0fda --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_hookshot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_hoverboots.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_hoverboots.xml new file mode 100644 index 000000000..6d41df8fd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_hoverboots.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_insect.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_insect.xml new file mode 100644 index 000000000..7af5b5b3b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_insect.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_jewel.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_jewel.xml new file mode 100644 index 000000000..e83c65116 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_jewel.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_key.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_key.xml new file mode 100644 index 000000000..a37d45a71 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_key.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_ki_tan_mask.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ki_tan_mask.xml new file mode 100644 index 000000000..46eff7d3e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ki_tan_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_letter.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_letter.xml new file mode 100644 index 000000000..bea868339 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_letter.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_liquid.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_liquid.xml new file mode 100644 index 000000000..18a5c3d7a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_liquid.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_longsword.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_longsword.xml new file mode 100644 index 000000000..7161e42e3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_longsword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_m_arrow.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_m_arrow.xml new file mode 100644 index 000000000..0fd659ae9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_m_arrow.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_magicpot.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_magicpot.xml new file mode 100644 index 000000000..7623e6353 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_magicpot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_map.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_map.xml new file mode 100644 index 000000000..471c1dab9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_map.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_medal.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_medal.xml new file mode 100644 index 000000000..28e5b1e68 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_medal.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_melody.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_melody.xml new file mode 100644 index 000000000..b01fca953 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_melody.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_milk.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_milk.xml new file mode 100644 index 000000000..a3e223b3e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_milk.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_mushroom.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_mushroom.xml new file mode 100644 index 000000000..5b19bca74 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_mushroom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_niwatori.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_niwatori.xml new file mode 100644 index 000000000..c8389f62c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_niwatori.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_nuts.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_nuts.xml new file mode 100644 index 000000000..c59903c43 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_nuts.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_ocarina.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ocarina.xml new file mode 100644 index 000000000..82607677d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ocarina.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_ocarina_0.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ocarina_0.xml new file mode 100644 index 000000000..2c5f70d98 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ocarina_0.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_pachinko.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_pachinko.xml new file mode 100644 index 000000000..5f808baf9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_pachinko.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_powder.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_powder.xml new file mode 100644 index 000000000..fb7dc0155 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_powder.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_prescription.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_prescription.xml new file mode 100644 index 000000000..75ae7eb2b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_prescription.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_purse.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_purse.xml new file mode 100644 index 000000000..054731dec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_purse.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_rabit_mask.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_rabit_mask.xml new file mode 100644 index 000000000..9d4eb9487 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_rabit_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_redead_mask.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_redead_mask.xml new file mode 100644 index 000000000..7de08487f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_redead_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_rupy.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_rupy.xml new file mode 100644 index 000000000..0a1af96d0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_rupy.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_saw.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_saw.xml new file mode 100644 index 000000000..dcc038b7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_saw.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_scale.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_scale.xml new file mode 100644 index 000000000..1cf5de5b9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_scale.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_seed.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_seed.xml new file mode 100644 index 000000000..82c15c82d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_seed.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_shield_1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_shield_1.xml new file mode 100644 index 000000000..2f11e3f6d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_shield_1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_shield_2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_shield_2.xml new file mode 100644 index 000000000..176ae025f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_shield_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_shield_3.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_shield_3.xml new file mode 100644 index 000000000..8d1e5dafd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_shield_3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_skj_mask.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_skj_mask.xml new file mode 100644 index 000000000..e6c90f76f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_skj_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_soldout.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_soldout.xml new file mode 100644 index 000000000..a15b1253e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_soldout.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_soul.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_soul.xml new file mode 100644 index 000000000..a68178eba --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_soul.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_stick.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_stick.xml new file mode 100644 index 000000000..fed89f465 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_stick.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_sutaru.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_sutaru.xml new file mode 100644 index 000000000..a2606afbe --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_sutaru.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_sword_1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_sword_1.xml new file mode 100644 index 000000000..e1119abca --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_sword_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_ticketstone.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ticketstone.xml new file mode 100644 index 000000000..73bf888d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_ticketstone.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_truth_mask.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_truth_mask.xml new file mode 100644 index 000000000..3b4edf3de --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_truth_mask.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gi_zoramask.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gi_zoramask.xml new file mode 100644 index 000000000..e3b1ab10e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gi_zoramask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gj.xml new file mode 100644 index 000000000..ee6dab74f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gj.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gjyo_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gjyo_objects.xml new file mode 100644 index 000000000..ea4f8444f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gjyo_objects.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gla.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gla.xml new file mode 100644 index 000000000..499a3720d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gla.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gm.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gm.xml new file mode 100644 index 000000000..91b10cc42 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gm.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gnd.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gnd.xml new file mode 100644 index 000000000..3ae3b57f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gnd.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gnd_magic.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gnd_magic.xml new file mode 100644 index 000000000..a88d419d7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gnd_magic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gndd.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gndd.xml new file mode 100644 index 000000000..8bf5d770c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gndd.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_god_lgt.xml b/soh/assets/xml/N64_NTSC_10/objects/object_god_lgt.xml new file mode 100644 index 000000000..60df9e469 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_god_lgt.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gol.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gol.xml new file mode 100644 index 000000000..7e04508cb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gol.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_goma.xml b/soh/assets/xml/N64_NTSC_10/objects/object_goma.xml new file mode 100644 index 000000000..ec3e42114 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_goma.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_goroiwa.xml b/soh/assets/xml/N64_NTSC_10/objects/object_goroiwa.xml new file mode 100644 index 000000000..5d406e957 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_goroiwa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gr.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gr.xml new file mode 100644 index 000000000..5f7360ae5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gr.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gs.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gs.xml new file mode 100644 index 000000000..145be1665 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gs.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_gt.xml b/soh/assets/xml/N64_NTSC_10/objects/object_gt.xml new file mode 100644 index 000000000..1d79d4e39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_gt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_haka.xml b/soh/assets/xml/N64_NTSC_10/objects/object_haka.xml new file mode 100644 index 000000000..f6b263c37 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_haka.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_haka_door.xml b/soh/assets/xml/N64_NTSC_10/objects/object_haka_door.xml new file mode 100644 index 000000000..1376d0356 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_haka_door.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_haka_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_haka_objects.xml new file mode 100644 index 000000000..3ca6d27c0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_haka_objects.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_hakach_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_hakach_objects.xml new file mode 100644 index 000000000..0de02aaf1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_hakach_objects.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_hata.xml b/soh/assets/xml/N64_NTSC_10/objects/object_hata.xml new file mode 100644 index 000000000..b0324c3be --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_hata.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_heavy_object.xml b/soh/assets/xml/N64_NTSC_10/objects/object_heavy_object.xml new file mode 100644 index 000000000..ecc795321 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_heavy_object.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_hidan_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_hidan_objects.xml new file mode 100644 index 000000000..f41c0ee5e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_hidan_objects.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_hintnuts.xml b/soh/assets/xml/N64_NTSC_10/objects/object_hintnuts.xml new file mode 100644 index 000000000..a7290f395 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_hintnuts.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_hni.xml b/soh/assets/xml/N64_NTSC_10/objects/object_hni.xml new file mode 100644 index 000000000..6b317eb7a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_hni.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_horse.xml b/soh/assets/xml/N64_NTSC_10/objects/object_horse.xml new file mode 100644 index 000000000..74619e597 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_horse.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_horse_ganon.xml b/soh/assets/xml/N64_NTSC_10/objects/object_horse_ganon.xml new file mode 100644 index 000000000..0a55462e2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_horse_ganon.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_horse_link_child.xml b/soh/assets/xml/N64_NTSC_10/objects/object_horse_link_child.xml new file mode 100644 index 000000000..146c564f5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_horse_link_child.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_horse_normal.xml b/soh/assets/xml/N64_NTSC_10/objects/object_horse_normal.xml new file mode 100644 index 000000000..2facab39c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_horse_normal.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_horse_zelda.xml b/soh/assets/xml/N64_NTSC_10/objects/object_horse_zelda.xml new file mode 100644 index 000000000..af270c658 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_horse_zelda.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_hs.xml b/soh/assets/xml/N64_NTSC_10/objects/object_hs.xml new file mode 100644 index 000000000..cf5d06e1a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_hs.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_human.xml b/soh/assets/xml/N64_NTSC_10/objects/object_human.xml new file mode 100644 index 000000000..05795cb33 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_human.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ice_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ice_objects.xml new file mode 100644 index 000000000..c7d059d70 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ice_objects.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ik.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ik.xml new file mode 100644 index 000000000..8a6028f7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ik.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_im.xml b/soh/assets/xml/N64_NTSC_10/objects/object_im.xml new file mode 100644 index 000000000..a628a113a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_im.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_in.xml b/soh/assets/xml/N64_NTSC_10/objects/object_in.xml new file mode 100644 index 000000000..84c114047 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_in.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ingate.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ingate.xml new file mode 100644 index 000000000..e6be42beb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ingate.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_jj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_jj.xml new file mode 100644 index 000000000..62bae8cb9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_jj.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_js.xml b/soh/assets/xml/N64_NTSC_10/objects/object_js.xml new file mode 100644 index 000000000..ff7bd3efa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_js.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_jya_door.xml b/soh/assets/xml/N64_NTSC_10/objects/object_jya_door.xml new file mode 100644 index 000000000..60a7b3788 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_jya_door.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_jya_iron.xml b/soh/assets/xml/N64_NTSC_10/objects/object_jya_iron.xml new file mode 100644 index 000000000..c6f6773c6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_jya_iron.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_jya_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_jya_obj.xml new file mode 100644 index 000000000..a1f19b806 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_jya_obj.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ka.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ka.xml new file mode 100644 index 000000000..eb952732b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ka.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_kanban.xml b/soh/assets/xml/N64_NTSC_10/objects/object_kanban.xml new file mode 100644 index 000000000..9ffc7a2ce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_kanban.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_kibako2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_kibako2.xml new file mode 100644 index 000000000..a701b294d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_kibako2.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_kingdodongo.xml b/soh/assets/xml/N64_NTSC_10/objects/object_kingdodongo.xml new file mode 100644 index 000000000..a865c15de --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_kingdodongo.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_km1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_km1.xml new file mode 100644 index 000000000..0a918a798 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_km1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_kusa.xml b/soh/assets/xml/N64_NTSC_10/objects/object_kusa.xml new file mode 100644 index 000000000..67291a554 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_kusa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_kw1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_kw1.xml new file mode 100644 index 000000000..eab561b1f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_kw1.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_kz.xml b/soh/assets/xml/N64_NTSC_10/objects/object_kz.xml new file mode 100644 index 000000000..4624fefdb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_kz.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_light_ring.xml b/soh/assets/xml/N64_NTSC_10/objects/object_light_ring.xml new file mode 100644 index 000000000..babe7d2aa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_light_ring.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_lightbox.xml b/soh/assets/xml/N64_NTSC_10/objects/object_lightbox.xml new file mode 100644 index 000000000..552a79d7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_lightbox.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_lightswitch.xml b/soh/assets/xml/N64_NTSC_10/objects/object_lightswitch.xml new file mode 100644 index 000000000..cfd5dcfb4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_lightswitch.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_link_boy.xml b/soh/assets/xml/N64_NTSC_10/objects/object_link_boy.xml new file mode 100644 index 000000000..6351af505 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_link_boy.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_link_child.xml b/soh/assets/xml/N64_NTSC_10/objects/object_link_child.xml new file mode 100644 index 000000000..0de400373 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_link_child.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ma1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ma1.xml new file mode 100644 index 000000000..63eeb3895 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ma1.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ma2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ma2.xml new file mode 100644 index 000000000..ce5910fb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ma2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mag.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mag.xml new file mode 100644 index 000000000..257f72363 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mag.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mamenoki.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mamenoki.xml new file mode 100644 index 000000000..819d89022 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mamenoki.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mastergolon.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mastergolon.xml new file mode 100644 index 000000000..6dd9d1659 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mastergolon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_masterkokiri.xml b/soh/assets/xml/N64_NTSC_10/objects/object_masterkokiri.xml new file mode 100644 index 000000000..af5a9ec15 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_masterkokiri.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_masterkokirihead.xml b/soh/assets/xml/N64_NTSC_10/objects/object_masterkokirihead.xml new file mode 100644 index 000000000..c64aa1c49 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_masterkokirihead.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_masterzoora.xml b/soh/assets/xml/N64_NTSC_10/objects/object_masterzoora.xml new file mode 100644 index 000000000..2c703274e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_masterzoora.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mb.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mb.xml new file mode 100644 index 000000000..23c0930c0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mb.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_md.xml b/soh/assets/xml/N64_NTSC_10/objects/object_md.xml new file mode 100644 index 000000000..161c73dca --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_md.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_medal.xml b/soh/assets/xml/N64_NTSC_10/objects/object_medal.xml new file mode 100644 index 000000000..533872a55 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_medal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_menkuri_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_menkuri_objects.xml new file mode 100644 index 000000000..4c2b51df5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_menkuri_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mir_ray.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mir_ray.xml new file mode 100644 index 000000000..2acc9391a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mir_ray.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mizu_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mizu_objects.xml new file mode 100644 index 000000000..5a18b95cf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mizu_objects.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mjin.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mjin.xml new file mode 100644 index 000000000..daf9b0541 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mjin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mjin_dark.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_dark.xml new file mode 100644 index 000000000..2fa0bdbe4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_dark.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mjin_flame.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_flame.xml new file mode 100644 index 000000000..6274feaee --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_flame.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mjin_flash.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_flash.xml new file mode 100644 index 000000000..c1040ea11 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_flash.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mjin_ice.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_ice.xml new file mode 100644 index 000000000..1aaeea193 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_ice.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mjin_oka.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_oka.xml new file mode 100644 index 000000000..0f823b923 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_oka.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mjin_soul.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_soul.xml new file mode 100644 index 000000000..6386f7f9e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_soul.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mjin_wind.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_wind.xml new file mode 100644 index 000000000..8bba7eb91 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mjin_wind.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mk.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mk.xml new file mode 100644 index 000000000..0b4aaae8a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mk.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mm.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mm.xml new file mode 100644 index 000000000..b27837e57 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mo.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mo.xml new file mode 100644 index 000000000..f450368f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mo.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri1.xml new file mode 100644 index 000000000..bb1b31e2f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri1a.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri1a.xml new file mode 100644 index 000000000..c750ce20d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri1a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri2.xml new file mode 100644 index 000000000..785b85857 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri2a.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri2a.xml new file mode 100644 index 000000000..ad1bb4d5f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mori_hineri2a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mori_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mori_objects.xml new file mode 100644 index 000000000..58ea8c085 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mori_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mori_tex.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mori_tex.xml new file mode 100644 index 000000000..8ba4ff2d3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mori_tex.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ms.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ms.xml new file mode 100644 index 000000000..a87d0e6b3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ms.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_mu.xml b/soh/assets/xml/N64_NTSC_10/objects/object_mu.xml new file mode 100644 index 000000000..7251ff721 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_mu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_nb.xml b/soh/assets/xml/N64_NTSC_10/objects/object_nb.xml new file mode 100644 index 000000000..74de9e285 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_nb.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_niw.xml b/soh/assets/xml/N64_NTSC_10/objects/object_niw.xml new file mode 100644 index 000000000..4eafec956 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_niw.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_nwc.xml b/soh/assets/xml/N64_NTSC_10/objects/object_nwc.xml new file mode 100644 index 000000000..96ffa3238 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_nwc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ny.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ny.xml new file mode 100644 index 000000000..e2e8187ff --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ny.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA1.xml new file mode 100644 index 000000000..1d665f101 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA10.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA10.xml new file mode 100644 index 000000000..65d080834 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA10.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA11.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA11.xml new file mode 100644 index 000000000..92ae474b6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA11.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA2.xml new file mode 100644 index 000000000..ffdcd7989 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA2.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA3.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA3.xml new file mode 100644 index 000000000..a492bd875 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA4.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA4.xml new file mode 100644 index 000000000..dcdbbfff9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA5.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA5.xml new file mode 100644 index 000000000..55072176d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA6.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA6.xml new file mode 100644 index 000000000..c17a51088 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA6.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA7.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA7.xml new file mode 100644 index 000000000..52c68f639 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA7.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA8.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA8.xml new file mode 100644 index 000000000..8ed2d3df5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA8.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oA9.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oA9.xml new file mode 100644 index 000000000..d5c16abfc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oA9.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oB1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oB1.xml new file mode 100644 index 000000000..2f50c967b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oB1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oB2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oB2.xml new file mode 100644 index 000000000..230783cea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oB2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oB3.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oB3.xml new file mode 100644 index 000000000..1c42ddacc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oB3.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oB4.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oB4.xml new file mode 100644 index 000000000..2924c9e75 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oB4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE1.xml new file mode 100644 index 000000000..4d5b1663f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE1.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE10.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE10.xml new file mode 100644 index 000000000..04ce91437 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE10.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE11.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE11.xml new file mode 100644 index 000000000..04f6f186d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE11.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE12.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE12.xml new file mode 100644 index 000000000..a5fa39fd2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE12.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE1s.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE1s.xml new file mode 100644 index 000000000..d311e6010 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE1s.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE2.xml new file mode 100644 index 000000000..af62ad6d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE2.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE3.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE3.xml new file mode 100644 index 000000000..95227da38 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE3.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE4.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE4.xml new file mode 100644 index 000000000..ae48d2ade --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE4.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE4s.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE4s.xml new file mode 100644 index 000000000..6037de52f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE4s.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE5.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE5.xml new file mode 100644 index 000000000..f5edf745a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE6.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE6.xml new file mode 100644 index 000000000..95bb602b6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE6.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE7.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE7.xml new file mode 100644 index 000000000..b3e588d4c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE7.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE8.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE8.xml new file mode 100644 index 000000000..be5de2494 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE8.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE9.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE9.xml new file mode 100644 index 000000000..8ea7ee18c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE9.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oE_anime.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oE_anime.xml new file mode 100644 index 000000000..f6b4659e2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oE_anime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oF1d_map.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oF1d_map.xml new file mode 100644 index 000000000..f14fecd82 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oF1d_map.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_oF1s.xml b/soh/assets/xml/N64_NTSC_10/objects/object_oF1s.xml new file mode 100644 index 000000000..fe41dde63 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_oF1s.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_o_anime.xml b/soh/assets/xml/N64_NTSC_10/objects/object_o_anime.xml new file mode 100644 index 000000000..4ef4ac44c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_o_anime.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_okuta.xml b/soh/assets/xml/N64_NTSC_10/objects/object_okuta.xml new file mode 100644 index 000000000..b4fccea6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_okuta.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_opening_demo1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_opening_demo1.xml new file mode 100644 index 000000000..fd0323027 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_opening_demo1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_os.xml b/soh/assets/xml/N64_NTSC_10/objects/object_os.xml new file mode 100644 index 000000000..5880a9293 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_os.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_os_anime.xml b/soh/assets/xml/N64_NTSC_10/objects/object_os_anime.xml new file mode 100644 index 000000000..f23636343 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_os_anime.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ossan.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ossan.xml new file mode 100644 index 000000000..5788e3a20 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ossan.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ouke_haka.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ouke_haka.xml new file mode 100644 index 000000000..11da9b26e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ouke_haka.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_owl.xml b/soh/assets/xml/N64_NTSC_10/objects/object_owl.xml new file mode 100644 index 000000000..64fdf64c5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_owl.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_peehat.xml b/soh/assets/xml/N64_NTSC_10/objects/object_peehat.xml new file mode 100644 index 000000000..42ee66cde --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_peehat.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_po_composer.xml b/soh/assets/xml/N64_NTSC_10/objects/object_po_composer.xml new file mode 100644 index 000000000..ff995efce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_po_composer.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_po_field.xml b/soh/assets/xml/N64_NTSC_10/objects/object_po_field.xml new file mode 100644 index 000000000..78bc0d65a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_po_field.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_po_sisters.xml b/soh/assets/xml/N64_NTSC_10/objects/object_po_sisters.xml new file mode 100644 index 000000000..b429be258 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_po_sisters.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_poh.xml b/soh/assets/xml/N64_NTSC_10/objects/object_poh.xml new file mode 100644 index 000000000..be6d6eff4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_poh.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ps.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ps.xml new file mode 100644 index 000000000..9f9c894a6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ps.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_pu_box.xml b/soh/assets/xml/N64_NTSC_10/objects/object_pu_box.xml new file mode 100644 index 000000000..e1d686e97 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_pu_box.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_rd.xml b/soh/assets/xml/N64_NTSC_10/objects/object_rd.xml new file mode 100644 index 000000000..22c7d3373 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_rd.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_reeba.xml b/soh/assets/xml/N64_NTSC_10/objects/object_reeba.xml new file mode 100644 index 000000000..32c697bd9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_reeba.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_relay_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_relay_objects.xml new file mode 100644 index 000000000..47b92fcd2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_relay_objects.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_rl.xml b/soh/assets/xml/N64_NTSC_10/objects/object_rl.xml new file mode 100644 index 000000000..2a5ad30f6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_rl.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_rr.xml b/soh/assets/xml/N64_NTSC_10/objects/object_rr.xml new file mode 100644 index 000000000..98726b14b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_rr.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_rs.xml b/soh/assets/xml/N64_NTSC_10/objects/object_rs.xml new file mode 100644 index 000000000..152b5489e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_rs.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ru1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ru1.xml new file mode 100644 index 000000000..3d413619f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ru1.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ru2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ru2.xml new file mode 100644 index 000000000..fedf37d48 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ru2.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_sa.xml b/soh/assets/xml/N64_NTSC_10/objects/object_sa.xml new file mode 100644 index 000000000..ec45ac961 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_sa.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_sb.xml b/soh/assets/xml/N64_NTSC_10/objects/object_sb.xml new file mode 100644 index 000000000..64d3bb005 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_sb.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_sd.xml b/soh/assets/xml/N64_NTSC_10/objects/object_sd.xml new file mode 100644 index 000000000..fb58428c3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_sd.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_shop_dungen.xml b/soh/assets/xml/N64_NTSC_10/objects/object_shop_dungen.xml new file mode 100644 index 000000000..594c43d39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_shop_dungen.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_shopnuts.xml b/soh/assets/xml/N64_NTSC_10/objects/object_shopnuts.xml new file mode 100644 index 000000000..7065f8941 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_shopnuts.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_siofuki.xml b/soh/assets/xml/N64_NTSC_10/objects/object_siofuki.xml new file mode 100644 index 000000000..a23240a72 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_siofuki.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_sk2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_sk2.xml new file mode 100644 index 000000000..f2e7ef6d8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_sk2.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_skb.xml b/soh/assets/xml/N64_NTSC_10/objects/object_skb.xml new file mode 100644 index 000000000..5b5efb484 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_skb.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_skj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_skj.xml new file mode 100644 index 000000000..74548e518 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_skj.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot00_break.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot00_break.xml new file mode 100644 index 000000000..d3be88315 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot00_break.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot00_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot00_objects.xml new file mode 100644 index 000000000..10fb13aea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot00_objects.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot01_matoya.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot01_matoya.xml new file mode 100644 index 000000000..d44b944e0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot01_matoya.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot01_matoyab.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot01_matoyab.xml new file mode 100644 index 000000000..720f50cd3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot01_matoyab.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot01_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot01_objects.xml new file mode 100644 index 000000000..413e032a9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot01_objects.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot01_objects2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot01_objects2.xml new file mode 100644 index 000000000..36741a949 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot01_objects2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot02_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot02_objects.xml new file mode 100644 index 000000000..65f45ff51 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot02_objects.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot03_object.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot03_object.xml new file mode 100644 index 000000000..f182e7d99 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot03_object.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot04_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot04_objects.xml new file mode 100644 index 000000000..66293d752 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot04_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot05_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot05_objects.xml new file mode 100644 index 000000000..6e7079149 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot05_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot06_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot06_objects.xml new file mode 100644 index 000000000..e3da63b0f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot06_objects.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot07_object.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot07_object.xml new file mode 100644 index 000000000..5bc2bfb6b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot07_object.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot08_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot08_obj.xml new file mode 100644 index 000000000..4d71f3473 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot08_obj.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot09_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot09_obj.xml new file mode 100644 index 000000000..eb6528393 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot09_obj.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot11_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot11_obj.xml new file mode 100644 index 000000000..257298f7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot11_obj.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot12_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot12_obj.xml new file mode 100644 index 000000000..d619c781e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot12_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot15_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot15_obj.xml new file mode 100644 index 000000000..bd59b8cd1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot15_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot16_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot16_obj.xml new file mode 100644 index 000000000..d39de812a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot16_obj.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot17_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot17_obj.xml new file mode 100644 index 000000000..d4239d8d2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot17_obj.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_spot18_obj.xml b/soh/assets/xml/N64_NTSC_10/objects/object_spot18_obj.xml new file mode 100644 index 000000000..cc12b7894 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_spot18_obj.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ssh.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ssh.xml new file mode 100644 index 000000000..6283f8e9f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ssh.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_sst.xml b/soh/assets/xml/N64_NTSC_10/objects/object_sst.xml new file mode 100644 index 000000000..d64787fa1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_sst.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_st.xml b/soh/assets/xml/N64_NTSC_10/objects/object_st.xml new file mode 100644 index 000000000..983b9e2ea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_st.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_stream.xml b/soh/assets/xml/N64_NTSC_10/objects/object_stream.xml new file mode 100644 index 000000000..59b0838e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_stream.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_syokudai.xml b/soh/assets/xml/N64_NTSC_10/objects/object_syokudai.xml new file mode 100644 index 000000000..c1670edec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_syokudai.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ta.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ta.xml new file mode 100644 index 000000000..5e446bf5c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ta.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_timeblock.xml b/soh/assets/xml/N64_NTSC_10/objects/object_timeblock.xml new file mode 100644 index 000000000..1d6b9e698 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_timeblock.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_tite.xml b/soh/assets/xml/N64_NTSC_10/objects/object_tite.xml new file mode 100644 index 000000000..1be65c495 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_tite.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_tk.xml b/soh/assets/xml/N64_NTSC_10/objects/object_tk.xml new file mode 100644 index 000000000..6b6cce724 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_tk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_toki_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_toki_objects.xml new file mode 100644 index 000000000..cd07e60d2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_toki_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_torch2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_torch2.xml new file mode 100644 index 000000000..3388e7d34 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_torch2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_toryo.xml b/soh/assets/xml/N64_NTSC_10/objects/object_toryo.xml new file mode 100644 index 000000000..73f3dcb1e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_toryo.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_tp.xml b/soh/assets/xml/N64_NTSC_10/objects/object_tp.xml new file mode 100644 index 000000000..8ea908825 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_tp.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_tr.xml b/soh/assets/xml/N64_NTSC_10/objects/object_tr.xml new file mode 100644 index 000000000..17ab9ae39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_tr.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_trap.xml b/soh/assets/xml/N64_NTSC_10/objects/object_trap.xml new file mode 100644 index 000000000..56195cf41 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_trap.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_triforce_spot.xml b/soh/assets/xml/N64_NTSC_10/objects/object_triforce_spot.xml new file mode 100644 index 000000000..87d449458 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_triforce_spot.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ts.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ts.xml new file mode 100644 index 000000000..567277bc3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ts.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_tsubo.xml b/soh/assets/xml/N64_NTSC_10/objects/object_tsubo.xml new file mode 100644 index 000000000..ee2c5e184 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_tsubo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_tw.xml b/soh/assets/xml/N64_NTSC_10/objects/object_tw.xml new file mode 100644 index 000000000..d238e10ab --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_tw.xml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_umajump.xml b/soh/assets/xml/N64_NTSC_10/objects/object_umajump.xml new file mode 100644 index 000000000..2ee4ade46 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_umajump.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_vali.xml b/soh/assets/xml/N64_NTSC_10/objects/object_vali.xml new file mode 100644 index 000000000..2bab5efaa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_vali.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_vase.xml b/soh/assets/xml/N64_NTSC_10/objects/object_vase.xml new file mode 100644 index 000000000..091d4c51e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_vase.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_vm.xml b/soh/assets/xml/N64_NTSC_10/objects/object_vm.xml new file mode 100644 index 000000000..c5b949b36 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_vm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_wallmaster.xml b/soh/assets/xml/N64_NTSC_10/objects/object_wallmaster.xml new file mode 100644 index 000000000..fbbc4f4af --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_wallmaster.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_warp1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_warp1.xml new file mode 100644 index 000000000..1497d7a10 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_warp1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_warp2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_warp2.xml new file mode 100644 index 000000000..b6d1b3624 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_warp2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_wf.xml b/soh/assets/xml/N64_NTSC_10/objects/object_wf.xml new file mode 100644 index 000000000..ebfb708d2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_wf.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_wood02.xml b/soh/assets/xml/N64_NTSC_10/objects/object_wood02.xml new file mode 100644 index 000000000..47ec342ca --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_wood02.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_xc.xml b/soh/assets/xml/N64_NTSC_10/objects/object_xc.xml new file mode 100644 index 000000000..bb2bf3e7a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_xc.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_yabusame_point.xml b/soh/assets/xml/N64_NTSC_10/objects/object_yabusame_point.xml new file mode 100644 index 000000000..bed9e8a60 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_yabusame_point.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_ydan_objects.xml b/soh/assets/xml/N64_NTSC_10/objects/object_ydan_objects.xml new file mode 100644 index 000000000..e2adf307f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_ydan_objects.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_yukabyun.xml b/soh/assets/xml/N64_NTSC_10/objects/object_yukabyun.xml new file mode 100644 index 000000000..d594ebbb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_yukabyun.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_zf.xml b/soh/assets/xml/N64_NTSC_10/objects/object_zf.xml new file mode 100644 index 000000000..7f20eb786 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_zf.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_zg.xml b/soh/assets/xml/N64_NTSC_10/objects/object_zg.xml new file mode 100644 index 000000000..79005516c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_zg.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_zl1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_zl1.xml new file mode 100644 index 000000000..001e5be14 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_zl1.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_zl2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_zl2.xml new file mode 100644 index 000000000..959a919ec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_zl2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_zl2_anime1.xml b/soh/assets/xml/N64_NTSC_10/objects/object_zl2_anime1.xml new file mode 100644 index 000000000..cada50486 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_zl2_anime1.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_zl2_anime2.xml b/soh/assets/xml/N64_NTSC_10/objects/object_zl2_anime2.xml new file mode 100644 index 000000000..47016e2e0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_zl2_anime2.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_zl4.xml b/soh/assets/xml/N64_NTSC_10/objects/object_zl4.xml new file mode 100644 index 000000000..8e7a2837e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_zl4.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/objects/object_zo.xml b/soh/assets/xml/N64_NTSC_10/objects/object_zo.xml new file mode 100644 index 000000000..77465760e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/objects/object_zo.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Arrow_Fire.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Arrow_Fire.xml new file mode 100644 index 000000000..a92c788b1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Arrow_Fire.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Arrow_Ice.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Arrow_Ice.xml new file mode 100644 index 000000000..1b6bdb3ea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Arrow_Ice.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Arrow_Light.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Arrow_Light.xml new file mode 100644 index 000000000..eb21fa199 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Arrow_Light.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Bg_Ganon_Otyuka.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Bg_Ganon_Otyuka.xml new file mode 100644 index 000000000..2bb0ffa27 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Bg_Ganon_Otyuka.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Bg_Jya_Cobra.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Bg_Jya_Cobra.xml new file mode 100644 index 000000000..c853b0050 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Bg_Jya_Cobra.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Dodongo.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Dodongo.xml new file mode 100644 index 000000000..8c9033240 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Dodongo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Ganon.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Ganon.xml new file mode 100644 index 000000000..4e799c180 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Ganon.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Ganon2.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Ganon2.xml new file mode 100644 index 000000000..86a2ec496 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Ganon2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Sst.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Sst.xml new file mode 100644 index 000000000..c966abf2a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Boss_Sst.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Demo_Shd.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Demo_Shd.xml new file mode 100644 index 000000000..ed1893f48 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Demo_Shd.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Bili.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Bili.xml new file mode 100644 index 000000000..841bacb54 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Bili.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Clear_Tag.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Clear_Tag.xml new file mode 100644 index 000000000..422eab05e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Clear_Tag.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Ganon_Mant.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Ganon_Mant.xml new file mode 100644 index 000000000..e3e231614 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Ganon_Mant.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Ganon_Organ.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Ganon_Organ.xml new file mode 100644 index 000000000..dbb80db7f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Ganon_Organ.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Holl.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Holl.xml new file mode 100644 index 000000000..d2e1411f5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Holl.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Jsjutan.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Jsjutan.xml new file mode 100644 index 000000000..47435e670 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Jsjutan.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Kanban.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Kanban.xml new file mode 100644 index 000000000..3b327d96f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Kanban.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Sda.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Sda.xml new file mode 100644 index 000000000..755bbb834 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Sda.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Ssh.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Ssh.xml new file mode 100644 index 000000000..0c0c21667 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Ssh.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_St.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_St.xml new file mode 100644 index 000000000..07e49caf0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_St.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Sth.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Sth.xml new file mode 100644 index 000000000..4d22847a4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_En_Sth.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_End_Title.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_End_Title.xml new file mode 100644 index 000000000..6bead07a5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_End_Title.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_File_Choose.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_File_Choose.xml new file mode 100644 index 000000000..dba3fe1bb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_File_Choose.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Magic_Dark.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Magic_Dark.xml new file mode 100644 index 000000000..f62ff8f76 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Magic_Dark.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Magic_Fire.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Magic_Fire.xml new file mode 100644 index 000000000..3cd0cf127 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Magic_Fire.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Magic_Wind.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Magic_Wind.xml new file mode 100644 index 000000000..612714ddb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Magic_Wind.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Spot.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Spot.xml new file mode 100644 index 000000000..74ee6fb57 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Spot.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Storm.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Storm.xml new file mode 100644 index 000000000..96b2a24df --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Storm.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe.xml new file mode 100644 index 000000000..f2ba83827 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe2.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe2.xml new file mode 100644 index 000000000..d5ef928e8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe3.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe3.xml new file mode 100644 index 000000000..5ff3cebac --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe4.xml b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe4.xml new file mode 100644 index 000000000..f6c728a49 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/overlays/ovl_Oceff_Wipe4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/Bmori1.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/Bmori1.xml new file mode 100644 index 000000000..ad4311426 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/Bmori1.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/FIRE_bs.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/FIRE_bs.xml new file mode 100644 index 000000000..89331ecc2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/FIRE_bs.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HAKAdan.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HAKAdan.xml new file mode 100644 index 000000000..e557c80a5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HAKAdan.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HAKAdanCH.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HAKAdanCH.xml new file mode 100644 index 000000000..97401aff6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HAKAdanCH.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HAKAdan_bs.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HAKAdan_bs.xml new file mode 100644 index 000000000..d36ac6b77 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HAKAdan_bs.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HIDAN.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HIDAN.xml new file mode 100644 index 000000000..fa4d784f1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/HIDAN.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/MIZUsin.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/MIZUsin.xml new file mode 100644 index 000000000..00c5aa82d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/MIZUsin.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/MIZUsin_bs.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/MIZUsin_bs.xml new file mode 100644 index 000000000..99ae2b3ef --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/MIZUsin_bs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/bdan.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/bdan.xml new file mode 100644 index 000000000..a9e520f4c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/bdan.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/bdan_boss.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/bdan_boss.xml new file mode 100644 index 000000000..9fccf2c30 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/bdan_boss.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ddan.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ddan.xml new file mode 100644 index 000000000..1446a9c98 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ddan.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ddan_boss.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ddan_boss.xml new file mode 100644 index 000000000..6b22223cd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ddan_boss.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon.xml new file mode 100644 index 000000000..f857dbe94 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_boss.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_boss.xml new file mode 100644 index 000000000..36c5e8107 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_boss.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_demo.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_demo.xml new file mode 100644 index 000000000..56c98efed --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_demo.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_final.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_final.xml new file mode 100644 index 000000000..3ec568cfb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_final.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_sonogo.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_sonogo.xml new file mode 100644 index 000000000..84ef36950 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_sonogo.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_tou.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_tou.xml new file mode 100644 index 000000000..1ae37b963 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganon_tou.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganontika.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganontika.xml new file mode 100644 index 000000000..a5ff210ce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganontika.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganontikasonogo.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganontikasonogo.xml new file mode 100644 index 000000000..060d4941b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ganontikasonogo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/gerudoway.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/gerudoway.xml new file mode 100644 index 000000000..827277614 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/gerudoway.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ice_doukutu.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ice_doukutu.xml new file mode 100644 index 000000000..b27962889 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ice_doukutu.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/jyasinboss.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/jyasinboss.xml new file mode 100644 index 000000000..86c0d317b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/jyasinboss.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/jyasinzou.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/jyasinzou.xml new file mode 100644 index 000000000..bc14a46ac --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/jyasinzou.xml @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/men.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/men.xml new file mode 100644 index 000000000..d9e5960e8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/men.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/moribossroom.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/moribossroom.xml new file mode 100644 index 000000000..b9959eefa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/moribossroom.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ydan.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ydan.xml new file mode 100644 index 000000000..aed7d2660 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ydan.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ydan_boss.xml b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ydan_boss.xml new file mode 100644 index 000000000..7ea240547 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/dungeons/ydan_boss.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/bowling.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/bowling.xml new file mode 100644 index 000000000..9a41763a2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/bowling.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/daiyousei_izumi.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/daiyousei_izumi.xml new file mode 100644 index 000000000..4f9a03fc0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/daiyousei_izumi.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/hairal_niwa.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hairal_niwa.xml new file mode 100644 index 000000000..06d89f2fe --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hairal_niwa.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/hairal_niwa_n.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hairal_niwa_n.xml new file mode 100644 index 000000000..6f4c181e0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hairal_niwa_n.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/hakasitarelay.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hakasitarelay.xml new file mode 100644 index 000000000..91be63d14 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hakasitarelay.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/hut.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hut.xml new file mode 100644 index 000000000..a4ef5715f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/hylia_labo.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hylia_labo.xml new file mode 100644 index 000000000..56822e67a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/hylia_labo.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/impa.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/impa.xml new file mode 100644 index 000000000..db757e3d3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/impa.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/kakariko.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kakariko.xml new file mode 100644 index 000000000..e4e9b102c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kakariko.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/kenjyanoma.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kenjyanoma.xml new file mode 100644 index 000000000..4e8a58f3b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kenjyanoma.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home.xml new file mode 100644 index 000000000..8c0305493 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home3.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home3.xml new file mode 100644 index 000000000..9f36eb41c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home4.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home4.xml new file mode 100644 index 000000000..eb861aedb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home4.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home5.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home5.xml new file mode 100644 index 000000000..974987fed --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/kokiri_home5.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/labo.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/labo.xml new file mode 100644 index 000000000..c0a9d2eb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/labo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/link_home.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/link_home.xml new file mode 100644 index 000000000..2fb88ae34 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/link_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/mahouya.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/mahouya.xml new file mode 100644 index 000000000..8ae462f9d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/mahouya.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/malon_stable.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/malon_stable.xml new file mode 100644 index 000000000..aff97eeb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/malon_stable.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/miharigoya.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/miharigoya.xml new file mode 100644 index 000000000..63f8676ac --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/miharigoya.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/nakaniwa.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/nakaniwa.xml new file mode 100644 index 000000000..2fb2d5e6a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/nakaniwa.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/syatekijyou.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/syatekijyou.xml new file mode 100644 index 000000000..05243b52c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/syatekijyou.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/takaraya.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/takaraya.xml new file mode 100644 index 000000000..5b438980b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/takaraya.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/tent.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/tent.xml new file mode 100644 index 000000000..de72cc5f4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/tent.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/tokinoma.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/tokinoma.xml new file mode 100644 index 000000000..d7878b895 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/tokinoma.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/yousei_izumi_tate.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/yousei_izumi_tate.xml new file mode 100644 index 000000000..3b6dd2dec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/yousei_izumi_tate.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/indoors/yousei_izumi_yoko.xml b/soh/assets/xml/N64_NTSC_10/scenes/indoors/yousei_izumi_yoko.xml new file mode 100644 index 000000000..90a8d95d0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/indoors/yousei_izumi_yoko.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/enrui.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/enrui.xml new file mode 100644 index 000000000..d8c06e545 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/enrui.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/entra_n.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/entra_n.xml new file mode 100644 index 000000000..5b408ac3a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/entra_n.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/hakaana.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/hakaana.xml new file mode 100644 index 000000000..e7dc93dd0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/hakaana.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/hakaana2.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/hakaana2.xml new file mode 100644 index 000000000..2d8ba4906 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/hakaana2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/hakaana_ouke.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/hakaana_ouke.xml new file mode 100644 index 000000000..17f53613e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/hakaana_ouke.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/hiral_demo.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/hiral_demo.xml new file mode 100644 index 000000000..1331fdd4c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/hiral_demo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/kakariko3.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/kakariko3.xml new file mode 100644 index 000000000..07b62c44d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/kakariko3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/kakusiana.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/kakusiana.xml new file mode 100644 index 000000000..c3f993ff4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/kakusiana.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/kinsuta.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/kinsuta.xml new file mode 100644 index 000000000..aac0f6c4e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/kinsuta.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/market_alley.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_alley.xml new file mode 100644 index 000000000..c30467303 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_alley.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/market_alley_n.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_alley_n.xml new file mode 100644 index 000000000..65db60411 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_alley_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/market_day.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_day.xml new file mode 100644 index 000000000..00887e69c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_day.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/market_night.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_night.xml new file mode 100644 index 000000000..c58e38744 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_night.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/market_ruins.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_ruins.xml new file mode 100644 index 000000000..f0ec75e75 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/market_ruins.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/shrine.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/shrine.xml new file mode 100644 index 000000000..b9ddf2cf7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/shrine.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/shrine_n.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/shrine_n.xml new file mode 100644 index 000000000..4878338aa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/shrine_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/shrine_r.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/shrine_r.xml new file mode 100644 index 000000000..122036791 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/shrine_r.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/misc/turibori.xml b/soh/assets/xml/N64_NTSC_10/scenes/misc/turibori.xml new file mode 100644 index 000000000..0633224d9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/misc/turibori.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/entra.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/entra.xml new file mode 100644 index 000000000..92ee57f59 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/entra.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/souko.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/souko.xml new file mode 100644 index 000000000..8dd9d9e48 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/souko.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot00.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot00.xml new file mode 100644 index 000000000..508d9309b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot00.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot01.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot01.xml new file mode 100644 index 000000000..dcee38761 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot01.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot02.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot02.xml new file mode 100644 index 000000000..54a8ea321 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot02.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot03.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot03.xml new file mode 100644 index 000000000..9434185f4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot03.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot04.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot04.xml new file mode 100644 index 000000000..ccff0d05b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot04.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot05.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot05.xml new file mode 100644 index 000000000..4f7c62b91 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot05.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot06.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot06.xml new file mode 100644 index 000000000..f4af602cf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot06.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot07.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot07.xml new file mode 100644 index 000000000..eeb976f7f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot07.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot08.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot08.xml new file mode 100644 index 000000000..86582f0dc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot08.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot09.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot09.xml new file mode 100644 index 000000000..58f1f7502 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot09.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot10.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot10.xml new file mode 100644 index 000000000..66365e3d8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot11.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot11.xml new file mode 100644 index 000000000..76ff3b822 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot11.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot12.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot12.xml new file mode 100644 index 000000000..e21523b21 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot12.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot13.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot13.xml new file mode 100644 index 000000000..c68913065 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot13.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot15.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot15.xml new file mode 100644 index 000000000..e75f7b684 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot15.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot16.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot16.xml new file mode 100644 index 000000000..6c059858b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot16.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot17.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot17.xml new file mode 100644 index 000000000..c50cacdb3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot17.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot18.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot18.xml new file mode 100644 index 000000000..d70fccf4b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot18.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot20.xml b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot20.xml new file mode 100644 index 000000000..1381f6ecb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/overworld/spot20.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/shops/alley_shop.xml b/soh/assets/xml/N64_NTSC_10/scenes/shops/alley_shop.xml new file mode 100644 index 000000000..95548de1b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/shops/alley_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/shops/drag.xml b/soh/assets/xml/N64_NTSC_10/scenes/shops/drag.xml new file mode 100644 index 000000000..acb6515fb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/shops/drag.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/shops/face_shop.xml b/soh/assets/xml/N64_NTSC_10/scenes/shops/face_shop.xml new file mode 100644 index 000000000..16a974608 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/shops/face_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/shops/golon.xml b/soh/assets/xml/N64_NTSC_10/scenes/shops/golon.xml new file mode 100644 index 000000000..c58672798 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/shops/golon.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/shops/kokiri_shop.xml b/soh/assets/xml/N64_NTSC_10/scenes/shops/kokiri_shop.xml new file mode 100644 index 000000000..50cd633e5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/shops/kokiri_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/shops/night_shop.xml b/soh/assets/xml/N64_NTSC_10/scenes/shops/night_shop.xml new file mode 100644 index 000000000..5954d9c83 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/shops/night_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/shops/shop1.xml b/soh/assets/xml/N64_NTSC_10/scenes/shops/shop1.xml new file mode 100644 index 000000000..525a06d63 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/shops/shop1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/scenes/shops/zoora.xml b/soh/assets/xml/N64_NTSC_10/scenes/shops/zoora.xml new file mode 100644 index 000000000..0e4ac18f8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/scenes/shops/zoora.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/text/elf_message_field.xml b/soh/assets/xml/N64_NTSC_10/text/elf_message_field.xml new file mode 100644 index 000000000..789a554ce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/text/elf_message_field.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_10/text/elf_message_ydan.xml b/soh/assets/xml/N64_NTSC_10/text/elf_message_ydan.xml new file mode 100644 index 000000000..f784afcf4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/text/elf_message_ydan.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_10/text/message_data_static.xml b/soh/assets/xml/N64_NTSC_10/text/message_data_static.xml new file mode 100644 index 000000000..dc08d4e02 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/text/message_data_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/backgrounds.xml b/soh/assets/xml/N64_NTSC_10/textures/backgrounds.xml new file mode 100644 index 000000000..c60ff57a8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/backgrounds.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/boss_title_cards.xml b/soh/assets/xml/N64_NTSC_10/textures/boss_title_cards.xml new file mode 100644 index 000000000..84f555bd1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/boss_title_cards.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_10/textures/do_action_static.xml b/soh/assets/xml/N64_NTSC_10/textures/do_action_static.xml new file mode 100644 index 000000000..efabd54a5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/do_action_static.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/icon_item_24_static.xml b/soh/assets/xml/N64_NTSC_10/textures/icon_item_24_static.xml new file mode 100644 index 000000000..cdb8cc737 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/icon_item_24_static.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/icon_item_dungeon_static.xml b/soh/assets/xml/N64_NTSC_10/textures/icon_item_dungeon_static.xml new file mode 100644 index 000000000..873c490fc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/icon_item_dungeon_static.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/icon_item_field_static.xml b/soh/assets/xml/N64_NTSC_10/textures/icon_item_field_static.xml new file mode 100644 index 000000000..ed991406b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/icon_item_field_static.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/icon_item_gameover_static.xml b/soh/assets/xml/N64_NTSC_10/textures/icon_item_gameover_static.xml new file mode 100644 index 000000000..ffd392868 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/icon_item_gameover_static.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/icon_item_jpn_static.xml b/soh/assets/xml/N64_NTSC_10/textures/icon_item_jpn_static.xml new file mode 100644 index 000000000..f2fe854b8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/icon_item_jpn_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/icon_item_nes_static.xml b/soh/assets/xml/N64_NTSC_10/textures/icon_item_nes_static.xml new file mode 100644 index 000000000..6cd92acfc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/icon_item_nes_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/icon_item_static.xml b/soh/assets/xml/N64_NTSC_10/textures/icon_item_static.xml new file mode 100644 index 000000000..9e844615b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/icon_item_static.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/item_name_static.xml b/soh/assets/xml/N64_NTSC_10/textures/item_name_static.xml new file mode 100644 index 000000000..266b3c200 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/item_name_static.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/kanji.xml b/soh/assets/xml/N64_NTSC_10/textures/kanji.xml new file mode 100644 index 000000000..5159387a1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/kanji.xml @@ -0,0 +1,3984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_10/textures/map_48x85_static.xml b/soh/assets/xml/N64_NTSC_10/textures/map_48x85_static.xml new file mode 100644 index 000000000..b2ea46340 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/map_48x85_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_10/textures/map_grand_static.xml b/soh/assets/xml/N64_NTSC_10/textures/map_grand_static.xml new file mode 100644 index 000000000..201955bfc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/map_grand_static.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/map_i_static.xml b/soh/assets/xml/N64_NTSC_10/textures/map_i_static.xml new file mode 100644 index 000000000..1721f6d84 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/map_i_static.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/map_name_static.xml b/soh/assets/xml/N64_NTSC_10/textures/map_name_static.xml new file mode 100644 index 000000000..ca4c4c0bd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/map_name_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/message_static.xml b/soh/assets/xml/N64_NTSC_10/textures/message_static.xml new file mode 100644 index 000000000..afdde60de --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/message_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/message_texture_static.xml b/soh/assets/xml/N64_NTSC_10/textures/message_texture_static.xml new file mode 100644 index 000000000..bbf7e1259 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/message_texture_static.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/nes_font_static.xml b/soh/assets/xml/N64_NTSC_10/textures/nes_font_static.xml new file mode 100644 index 000000000..f1b80ee04 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/nes_font_static.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/nintendo_rogo_static.xml b/soh/assets/xml/N64_NTSC_10/textures/nintendo_rogo_static.xml new file mode 100644 index 000000000..aa5c7c9ea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/nintendo_rogo_static.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/parameter_static.xml b/soh/assets/xml/N64_NTSC_10/textures/parameter_static.xml new file mode 100644 index 000000000..c51dacf1f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/parameter_static.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/place_title_cards.xml b/soh/assets/xml/N64_NTSC_10/textures/place_title_cards.xml new file mode 100644 index 000000000..b688cce00 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/place_title_cards.xml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/skyboxes.xml b/soh/assets/xml/N64_NTSC_10/textures/skyboxes.xml new file mode 100644 index 000000000..104ffb2a3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/skyboxes.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_10/textures/title_static.xml b/soh/assets/xml/N64_NTSC_10/textures/title_static.xml new file mode 100644 index 000000000..5f58c5a82 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_10/textures/title_static.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/audio/Audio.xml b/soh/assets/xml/N64_NTSC_11/audio/Audio.xml new file mode 100644 index 000000000..e0fa4543b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/audio/Audio.xml @@ -0,0 +1,1570 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/code/fbdemo_circle.xml b/soh/assets/xml/N64_NTSC_11/code/fbdemo_circle.xml new file mode 100644 index 000000000..0d4f5766f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/code/fbdemo_circle.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/code/fbdemo_triforce.xml b/soh/assets/xml/N64_NTSC_11/code/fbdemo_triforce.xml new file mode 100644 index 000000000..f7d695946 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/code/fbdemo_triforce.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/code/fbdemo_wipe1.xml b/soh/assets/xml/N64_NTSC_11/code/fbdemo_wipe1.xml new file mode 100644 index 000000000..61a6da385 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/code/fbdemo_wipe1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/code/sys_matrix.xml b/soh/assets/xml/N64_NTSC_11/code/sys_matrix.xml new file mode 100644 index 000000000..3760c930c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/code/sys_matrix.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/misc/link_animetion.xml b/soh/assets/xml/N64_NTSC_11/misc/link_animetion.xml new file mode 100644 index 000000000..9de1e92d3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/misc/link_animetion.xml @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/gameplay_dangeon_keep.xml b/soh/assets/xml/N64_NTSC_11/objects/gameplay_dangeon_keep.xml new file mode 100644 index 000000000..5b1a9050d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/gameplay_dangeon_keep.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/gameplay_field_keep.xml b/soh/assets/xml/N64_NTSC_11/objects/gameplay_field_keep.xml new file mode 100644 index 000000000..011e8f7fc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/gameplay_field_keep.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/gameplay_keep.xml b/soh/assets/xml/N64_NTSC_11/objects/gameplay_keep.xml new file mode 100644 index 000000000..94eee8845 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/gameplay_keep.xml @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_Bb.xml b/soh/assets/xml/N64_NTSC_11/objects/object_Bb.xml new file mode 100644 index 000000000..5d04bde45 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_Bb.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ahg.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ahg.xml new file mode 100644 index 000000000..4d37b1b11 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ahg.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_am.xml b/soh/assets/xml/N64_NTSC_11/objects/object_am.xml new file mode 100644 index 000000000..b70c70d70 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_am.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ane.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ane.xml new file mode 100644 index 000000000..1e29b351e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ane.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ani.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ani.xml new file mode 100644 index 000000000..c70621c6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ani.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_anubice.xml b/soh/assets/xml/N64_NTSC_11/objects/object_anubice.xml new file mode 100644 index 000000000..fb029586b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_anubice.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_aob.xml b/soh/assets/xml/N64_NTSC_11/objects/object_aob.xml new file mode 100644 index 000000000..e6202d0cf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_aob.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_b_heart.xml b/soh/assets/xml/N64_NTSC_11/objects/object_b_heart.xml new file mode 100644 index 000000000..00f7cd677 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_b_heart.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bba.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bba.xml new file mode 100644 index 000000000..ccc5c2136 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bba.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bdan_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bdan_objects.xml new file mode 100644 index 000000000..dcd56d385 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bdan_objects.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bdoor.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bdoor.xml new file mode 100644 index 000000000..a092f0c23 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bdoor.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bg.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bg.xml new file mode 100644 index 000000000..791226b71 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bg.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bigokuta.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bigokuta.xml new file mode 100644 index 000000000..1c7d39e31 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bigokuta.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bird.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bird.xml new file mode 100644 index 000000000..167a5022d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bird.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bji.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bji.xml new file mode 100644 index 000000000..c665b6b00 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bji.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bl.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bl.xml new file mode 100644 index 000000000..1c2ef4ec6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_blkobj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_blkobj.xml new file mode 100644 index 000000000..345a8ebd9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_blkobj.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bob.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bob.xml new file mode 100644 index 000000000..289e994e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bob.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_boj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_boj.xml new file mode 100644 index 000000000..4be4764ab --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_boj.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bombf.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bombf.xml new file mode 100644 index 000000000..83e60248d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bombf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bombiwa.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bombiwa.xml new file mode 100644 index 000000000..26ab6b4f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bombiwa.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bowl.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bowl.xml new file mode 100644 index 000000000..ffe6d43db --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bowl.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_box.xml b/soh/assets/xml/N64_NTSC_11/objects/object_box.xml new file mode 100644 index 000000000..106d2d335 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_box.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_brob.xml b/soh/assets/xml/N64_NTSC_11/objects/object_brob.xml new file mode 100644 index 000000000..718dcd561 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_brob.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bubble.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bubble.xml new file mode 100644 index 000000000..f5de18692 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bubble.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bv.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bv.xml new file mode 100644 index 000000000..58db6e1d4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bv.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bw.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bw.xml new file mode 100644 index 000000000..6fd39fbb1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bw.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bwall.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bwall.xml new file mode 100644 index 000000000..d4f43ddc1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bwall.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_bxa.xml b/soh/assets/xml/N64_NTSC_11/objects/object_bxa.xml new file mode 100644 index 000000000..fb78c117e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_bxa.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_cne.xml b/soh/assets/xml/N64_NTSC_11/objects/object_cne.xml new file mode 100644 index 000000000..0c14d0bc5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_cne.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_cob.xml b/soh/assets/xml/N64_NTSC_11/objects/object_cob.xml new file mode 100644 index 000000000..ba051cfa7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_cob.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_cow.xml b/soh/assets/xml/N64_NTSC_11/objects/object_cow.xml new file mode 100644 index 000000000..5d067c329 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_cow.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_crow.xml b/soh/assets/xml/N64_NTSC_11/objects/object_crow.xml new file mode 100644 index 000000000..77337c644 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_crow.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_cs.xml b/soh/assets/xml/N64_NTSC_11/objects/object_cs.xml new file mode 100644 index 000000000..83804ccaf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_cs.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_d_elevator.xml b/soh/assets/xml/N64_NTSC_11/objects/object_d_elevator.xml new file mode 100644 index 000000000..6be59c154 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_d_elevator.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_d_hsblock.xml b/soh/assets/xml/N64_NTSC_11/objects/object_d_hsblock.xml new file mode 100644 index 000000000..4bb50c2b4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_d_hsblock.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_d_lift.xml b/soh/assets/xml/N64_NTSC_11/objects/object_d_lift.xml new file mode 100644 index 000000000..291238519 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_d_lift.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_daiku.xml b/soh/assets/xml/N64_NTSC_11/objects/object_daiku.xml new file mode 100644 index 000000000..1524c7a26 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_daiku.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ddan_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ddan_objects.xml new file mode 100644 index 000000000..3fc563b96 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ddan_objects.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dekubaba.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dekubaba.xml new file mode 100644 index 000000000..7202a833f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dekubaba.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dekujr.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dekujr.xml new file mode 100644 index 000000000..e906bf61c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dekujr.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dekunuts.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dekunuts.xml new file mode 100644 index 000000000..5fceef416 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dekunuts.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_demo_6k.xml b/soh/assets/xml/N64_NTSC_11/objects/object_demo_6k.xml new file mode 100644 index 000000000..73058d5e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_demo_6k.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_demo_kekkai.xml b/soh/assets/xml/N64_NTSC_11/objects/object_demo_kekkai.xml new file mode 100644 index 000000000..aa54bc2ee --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_demo_kekkai.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_demo_tre_lgt.xml b/soh/assets/xml/N64_NTSC_11/objects/object_demo_tre_lgt.xml new file mode 100644 index 000000000..9ea19012b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_demo_tre_lgt.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dh.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dh.xml new file mode 100644 index 000000000..7a52d7dbe --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dh.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dnk.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dnk.xml new file mode 100644 index 000000000..3bce34304 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dnk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dns.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dns.xml new file mode 100644 index 000000000..8b78ffcf2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dns.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dodojr.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dodojr.xml new file mode 100644 index 000000000..4dfd7d6e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dodojr.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dodongo.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dodongo.xml new file mode 100644 index 000000000..779e20e9d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dodongo.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dog.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dog.xml new file mode 100644 index 000000000..ef00442b6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dog.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_door_gerudo.xml b/soh/assets/xml/N64_NTSC_11/objects/object_door_gerudo.xml new file mode 100644 index 000000000..2f1726204 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_door_gerudo.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_door_killer.xml b/soh/assets/xml/N64_NTSC_11/objects/object_door_killer.xml new file mode 100644 index 000000000..a37f590d6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_door_killer.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ds.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ds.xml new file mode 100644 index 000000000..0413a9e2e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ds.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ds2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ds2.xml new file mode 100644 index 000000000..683bcc68d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ds2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_du.xml b/soh/assets/xml/N64_NTSC_11/objects/object_du.xml new file mode 100644 index 000000000..0babd962b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_du.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_dy_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_dy_obj.xml new file mode 100644 index 000000000..5e792edb5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_dy_obj.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ec.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ec.xml new file mode 100644 index 000000000..7ec83e284 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ec.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_efc_crystal_light.xml b/soh/assets/xml/N64_NTSC_11/objects/object_efc_crystal_light.xml new file mode 100644 index 000000000..9215b6a39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_efc_crystal_light.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_efc_doughnut.xml b/soh/assets/xml/N64_NTSC_11/objects/object_efc_doughnut.xml new file mode 100644 index 000000000..7f12c56f5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_efc_doughnut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_efc_erupc.xml b/soh/assets/xml/N64_NTSC_11/objects/object_efc_erupc.xml new file mode 100644 index 000000000..800d9535f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_efc_erupc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_efc_fire_ball.xml b/soh/assets/xml/N64_NTSC_11/objects/object_efc_fire_ball.xml new file mode 100644 index 000000000..2fc65b16f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_efc_fire_ball.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_efc_flash.xml b/soh/assets/xml/N64_NTSC_11/objects/object_efc_flash.xml new file mode 100644 index 000000000..5f962f162 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_efc_flash.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_efc_lgt_shower.xml b/soh/assets/xml/N64_NTSC_11/objects/object_efc_lgt_shower.xml new file mode 100644 index 000000000..67ef5ce7e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_efc_lgt_shower.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_efc_star_field.xml b/soh/assets/xml/N64_NTSC_11/objects/object_efc_star_field.xml new file mode 100644 index 000000000..00b47c460 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_efc_star_field.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_efc_tw.xml b/soh/assets/xml/N64_NTSC_11/objects/object_efc_tw.xml new file mode 100644 index 000000000..de5376569 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_efc_tw.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ei.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ei.xml new file mode 100644 index 000000000..e4132491f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ei.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fa.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fa.xml new file mode 100644 index 000000000..2f1bf9a5e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fa.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fd.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fd.xml new file mode 100644 index 000000000..9bc25d3a6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fd.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fd2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fd2.xml new file mode 100644 index 000000000..44b5f5f9c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fd2.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fhg.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fhg.xml new file mode 100644 index 000000000..6a275daeb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fhg.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fire.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fire.xml new file mode 100644 index 000000000..49bf620cb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fire.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_firefly.xml b/soh/assets/xml/N64_NTSC_11/objects/object_firefly.xml new file mode 100644 index 000000000..8c26a4341 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_firefly.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fish.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fish.xml new file mode 100644 index 000000000..f5ad4f6da --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fish.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fr.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fr.xml new file mode 100644 index 000000000..25ee2ad42 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fr.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fu.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fu.xml new file mode 100644 index 000000000..82c449e3d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fu.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fw.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fw.xml new file mode 100644 index 000000000..ee9821d26 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fw.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_fz.xml b/soh/assets/xml/N64_NTSC_11/objects/object_fz.xml new file mode 100644 index 000000000..dad6fec5c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_fz.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ganon.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ganon.xml new file mode 100644 index 000000000..5b68602ba --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ganon.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ganon2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ganon2.xml new file mode 100644 index 000000000..7e715dd41 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ganon2.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ganon_anime1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ganon_anime1.xml new file mode 100644 index 000000000..b1016299b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ganon_anime1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ganon_anime2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ganon_anime2.xml new file mode 100644 index 000000000..180e5995c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ganon_anime2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ganon_anime3.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ganon_anime3.xml new file mode 100644 index 000000000..be4c4dcb1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ganon_anime3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ganon_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ganon_objects.xml new file mode 100644 index 000000000..5e32610ff --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ganon_objects.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ge1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ge1.xml new file mode 100644 index 000000000..79e0768b8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ge1.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_geff.xml b/soh/assets/xml/N64_NTSC_11/objects/object_geff.xml new file mode 100644 index 000000000..f0667743b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_geff.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_geldb.xml b/soh/assets/xml/N64_NTSC_11/objects/object_geldb.xml new file mode 100644 index 000000000..49b12ef2e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_geldb.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_arrow.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_arrow.xml new file mode 100644 index 000000000..4b58787a9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_arrow.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_arrowcase.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_arrowcase.xml new file mode 100644 index 000000000..267b0a734 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_arrowcase.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_bean.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bean.xml new file mode 100644 index 000000000..e74247816 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bean.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_bomb_1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bomb_1.xml new file mode 100644 index 000000000..bae86c11d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bomb_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_bomb_2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bomb_2.xml new file mode 100644 index 000000000..1400c4a4d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bomb_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_bombpouch.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bombpouch.xml new file mode 100644 index 000000000..07134748c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bombpouch.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_boomerang.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_boomerang.xml new file mode 100644 index 000000000..3c1a0fe7f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_boomerang.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_boots_2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_boots_2.xml new file mode 100644 index 000000000..3bcb6a47a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_boots_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_bosskey.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bosskey.xml new file mode 100644 index 000000000..e5e4bc86c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bosskey.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_bottle.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bottle.xml new file mode 100644 index 000000000..3b0884a03 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bottle.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_bottle_letter.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bottle_letter.xml new file mode 100644 index 000000000..443219caf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bottle_letter.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_bow.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bow.xml new file mode 100644 index 000000000..946e9c496 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bow.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_bracelet.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bracelet.xml new file mode 100644 index 000000000..5a0b62a60 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_bracelet.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_brokensword.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_brokensword.xml new file mode 100644 index 000000000..408741ac5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_brokensword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_butterfly.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_butterfly.xml new file mode 100644 index 000000000..7b60a7724 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_butterfly.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_clothes.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_clothes.xml new file mode 100644 index 000000000..3f897b6d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_clothes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_coin.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_coin.xml new file mode 100644 index 000000000..22e29f255 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_coin.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_compass.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_compass.xml new file mode 100644 index 000000000..076229b11 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_compass.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_dekupouch.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_dekupouch.xml new file mode 100644 index 000000000..8925e6fa5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_dekupouch.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_egg.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_egg.xml new file mode 100644 index 000000000..2b2e2847d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_egg.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_eye_lotion.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_eye_lotion.xml new file mode 100644 index 000000000..5128c5f6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_eye_lotion.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_fire.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_fire.xml new file mode 100644 index 000000000..4bfd76a7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_fire.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_fish.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_fish.xml new file mode 100644 index 000000000..edb39dc29 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_fish.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_frog.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_frog.xml new file mode 100644 index 000000000..a656c306b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_frog.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_gerudo.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_gerudo.xml new file mode 100644 index 000000000..d65daee8e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_gerudo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_gerudomask.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_gerudomask.xml new file mode 100644 index 000000000..cfcb878d9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_gerudomask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_ghost.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ghost.xml new file mode 100644 index 000000000..795f0cfd1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ghost.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_glasses.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_glasses.xml new file mode 100644 index 000000000..63d32ab5a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_glasses.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_gloves.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_gloves.xml new file mode 100644 index 000000000..0e1c4259d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_gloves.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_goddess.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_goddess.xml new file mode 100644 index 000000000..50cbdd891 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_goddess.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_golonmask.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_golonmask.xml new file mode 100644 index 000000000..844d90e71 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_golonmask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_grass.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_grass.xml new file mode 100644 index 000000000..ae7834201 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_grass.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_hammer.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_hammer.xml new file mode 100644 index 000000000..feb5c8659 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_hammer.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_heart.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_heart.xml new file mode 100644 index 000000000..48e78b1b5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_heart.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_hearts.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_hearts.xml new file mode 100644 index 000000000..d2e763e63 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_hearts.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_hookshot.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_hookshot.xml new file mode 100644 index 000000000..a6b3b0fda --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_hookshot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_hoverboots.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_hoverboots.xml new file mode 100644 index 000000000..6d41df8fd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_hoverboots.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_insect.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_insect.xml new file mode 100644 index 000000000..7af5b5b3b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_insect.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_jewel.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_jewel.xml new file mode 100644 index 000000000..e83c65116 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_jewel.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_key.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_key.xml new file mode 100644 index 000000000..a37d45a71 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_key.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_ki_tan_mask.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ki_tan_mask.xml new file mode 100644 index 000000000..46eff7d3e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ki_tan_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_letter.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_letter.xml new file mode 100644 index 000000000..bea868339 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_letter.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_liquid.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_liquid.xml new file mode 100644 index 000000000..18a5c3d7a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_liquid.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_longsword.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_longsword.xml new file mode 100644 index 000000000..7161e42e3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_longsword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_m_arrow.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_m_arrow.xml new file mode 100644 index 000000000..0fd659ae9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_m_arrow.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_magicpot.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_magicpot.xml new file mode 100644 index 000000000..7623e6353 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_magicpot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_map.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_map.xml new file mode 100644 index 000000000..471c1dab9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_map.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_medal.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_medal.xml new file mode 100644 index 000000000..28e5b1e68 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_medal.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_melody.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_melody.xml new file mode 100644 index 000000000..b01fca953 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_melody.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_milk.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_milk.xml new file mode 100644 index 000000000..a3e223b3e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_milk.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_mushroom.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_mushroom.xml new file mode 100644 index 000000000..5b19bca74 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_mushroom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_niwatori.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_niwatori.xml new file mode 100644 index 000000000..c8389f62c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_niwatori.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_nuts.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_nuts.xml new file mode 100644 index 000000000..c59903c43 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_nuts.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_ocarina.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ocarina.xml new file mode 100644 index 000000000..82607677d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ocarina.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_ocarina_0.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ocarina_0.xml new file mode 100644 index 000000000..2c5f70d98 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ocarina_0.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_pachinko.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_pachinko.xml new file mode 100644 index 000000000..5f808baf9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_pachinko.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_powder.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_powder.xml new file mode 100644 index 000000000..fb7dc0155 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_powder.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_prescription.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_prescription.xml new file mode 100644 index 000000000..75ae7eb2b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_prescription.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_purse.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_purse.xml new file mode 100644 index 000000000..054731dec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_purse.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_rabit_mask.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_rabit_mask.xml new file mode 100644 index 000000000..9d4eb9487 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_rabit_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_redead_mask.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_redead_mask.xml new file mode 100644 index 000000000..7de08487f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_redead_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_rupy.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_rupy.xml new file mode 100644 index 000000000..0a1af96d0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_rupy.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_saw.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_saw.xml new file mode 100644 index 000000000..dcc038b7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_saw.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_scale.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_scale.xml new file mode 100644 index 000000000..1cf5de5b9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_scale.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_seed.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_seed.xml new file mode 100644 index 000000000..82c15c82d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_seed.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_shield_1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_shield_1.xml new file mode 100644 index 000000000..2f11e3f6d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_shield_1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_shield_2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_shield_2.xml new file mode 100644 index 000000000..176ae025f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_shield_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_shield_3.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_shield_3.xml new file mode 100644 index 000000000..8d1e5dafd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_shield_3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_skj_mask.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_skj_mask.xml new file mode 100644 index 000000000..e6c90f76f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_skj_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_soldout.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_soldout.xml new file mode 100644 index 000000000..a15b1253e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_soldout.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_soul.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_soul.xml new file mode 100644 index 000000000..a68178eba --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_soul.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_stick.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_stick.xml new file mode 100644 index 000000000..fed89f465 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_stick.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_sutaru.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_sutaru.xml new file mode 100644 index 000000000..a2606afbe --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_sutaru.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_sword_1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_sword_1.xml new file mode 100644 index 000000000..e1119abca --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_sword_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_ticketstone.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ticketstone.xml new file mode 100644 index 000000000..73bf888d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_ticketstone.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_truth_mask.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_truth_mask.xml new file mode 100644 index 000000000..3b4edf3de --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_truth_mask.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gi_zoramask.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gi_zoramask.xml new file mode 100644 index 000000000..e3b1ab10e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gi_zoramask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gj.xml new file mode 100644 index 000000000..ee6dab74f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gj.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gjyo_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gjyo_objects.xml new file mode 100644 index 000000000..ea4f8444f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gjyo_objects.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gla.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gla.xml new file mode 100644 index 000000000..499a3720d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gla.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gm.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gm.xml new file mode 100644 index 000000000..91b10cc42 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gm.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gnd.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gnd.xml new file mode 100644 index 000000000..3ae3b57f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gnd.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gnd_magic.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gnd_magic.xml new file mode 100644 index 000000000..a88d419d7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gnd_magic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gndd.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gndd.xml new file mode 100644 index 000000000..8bf5d770c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gndd.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_god_lgt.xml b/soh/assets/xml/N64_NTSC_11/objects/object_god_lgt.xml new file mode 100644 index 000000000..60df9e469 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_god_lgt.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gol.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gol.xml new file mode 100644 index 000000000..7e04508cb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gol.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_goma.xml b/soh/assets/xml/N64_NTSC_11/objects/object_goma.xml new file mode 100644 index 000000000..ec3e42114 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_goma.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_goroiwa.xml b/soh/assets/xml/N64_NTSC_11/objects/object_goroiwa.xml new file mode 100644 index 000000000..5d406e957 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_goroiwa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gr.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gr.xml new file mode 100644 index 000000000..5f7360ae5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gr.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gs.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gs.xml new file mode 100644 index 000000000..145be1665 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gs.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_gt.xml b/soh/assets/xml/N64_NTSC_11/objects/object_gt.xml new file mode 100644 index 000000000..1d79d4e39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_gt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_haka.xml b/soh/assets/xml/N64_NTSC_11/objects/object_haka.xml new file mode 100644 index 000000000..f6b263c37 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_haka.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_haka_door.xml b/soh/assets/xml/N64_NTSC_11/objects/object_haka_door.xml new file mode 100644 index 000000000..1376d0356 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_haka_door.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_haka_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_haka_objects.xml new file mode 100644 index 000000000..3ca6d27c0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_haka_objects.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_hakach_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_hakach_objects.xml new file mode 100644 index 000000000..0de02aaf1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_hakach_objects.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_hata.xml b/soh/assets/xml/N64_NTSC_11/objects/object_hata.xml new file mode 100644 index 000000000..b0324c3be --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_hata.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_heavy_object.xml b/soh/assets/xml/N64_NTSC_11/objects/object_heavy_object.xml new file mode 100644 index 000000000..ecc795321 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_heavy_object.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_hidan_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_hidan_objects.xml new file mode 100644 index 000000000..f41c0ee5e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_hidan_objects.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_hintnuts.xml b/soh/assets/xml/N64_NTSC_11/objects/object_hintnuts.xml new file mode 100644 index 000000000..a7290f395 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_hintnuts.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_hni.xml b/soh/assets/xml/N64_NTSC_11/objects/object_hni.xml new file mode 100644 index 000000000..6b317eb7a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_hni.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_horse.xml b/soh/assets/xml/N64_NTSC_11/objects/object_horse.xml new file mode 100644 index 000000000..74619e597 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_horse.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_horse_ganon.xml b/soh/assets/xml/N64_NTSC_11/objects/object_horse_ganon.xml new file mode 100644 index 000000000..0a55462e2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_horse_ganon.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_horse_link_child.xml b/soh/assets/xml/N64_NTSC_11/objects/object_horse_link_child.xml new file mode 100644 index 000000000..146c564f5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_horse_link_child.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_horse_normal.xml b/soh/assets/xml/N64_NTSC_11/objects/object_horse_normal.xml new file mode 100644 index 000000000..2facab39c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_horse_normal.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_horse_zelda.xml b/soh/assets/xml/N64_NTSC_11/objects/object_horse_zelda.xml new file mode 100644 index 000000000..af270c658 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_horse_zelda.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_hs.xml b/soh/assets/xml/N64_NTSC_11/objects/object_hs.xml new file mode 100644 index 000000000..cf5d06e1a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_hs.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_human.xml b/soh/assets/xml/N64_NTSC_11/objects/object_human.xml new file mode 100644 index 000000000..05795cb33 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_human.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ice_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ice_objects.xml new file mode 100644 index 000000000..c7d059d70 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ice_objects.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ik.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ik.xml new file mode 100644 index 000000000..8a6028f7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ik.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_im.xml b/soh/assets/xml/N64_NTSC_11/objects/object_im.xml new file mode 100644 index 000000000..a628a113a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_im.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_in.xml b/soh/assets/xml/N64_NTSC_11/objects/object_in.xml new file mode 100644 index 000000000..84c114047 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_in.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ingate.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ingate.xml new file mode 100644 index 000000000..e6be42beb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ingate.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_jj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_jj.xml new file mode 100644 index 000000000..62bae8cb9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_jj.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_js.xml b/soh/assets/xml/N64_NTSC_11/objects/object_js.xml new file mode 100644 index 000000000..ff7bd3efa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_js.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_jya_door.xml b/soh/assets/xml/N64_NTSC_11/objects/object_jya_door.xml new file mode 100644 index 000000000..60a7b3788 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_jya_door.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_jya_iron.xml b/soh/assets/xml/N64_NTSC_11/objects/object_jya_iron.xml new file mode 100644 index 000000000..c6f6773c6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_jya_iron.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_jya_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_jya_obj.xml new file mode 100644 index 000000000..a1f19b806 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_jya_obj.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ka.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ka.xml new file mode 100644 index 000000000..eb952732b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ka.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_kanban.xml b/soh/assets/xml/N64_NTSC_11/objects/object_kanban.xml new file mode 100644 index 000000000..9ffc7a2ce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_kanban.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_kibako2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_kibako2.xml new file mode 100644 index 000000000..a701b294d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_kibako2.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_kingdodongo.xml b/soh/assets/xml/N64_NTSC_11/objects/object_kingdodongo.xml new file mode 100644 index 000000000..a865c15de --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_kingdodongo.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_km1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_km1.xml new file mode 100644 index 000000000..0a918a798 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_km1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_kusa.xml b/soh/assets/xml/N64_NTSC_11/objects/object_kusa.xml new file mode 100644 index 000000000..67291a554 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_kusa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_kw1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_kw1.xml new file mode 100644 index 000000000..eab561b1f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_kw1.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_kz.xml b/soh/assets/xml/N64_NTSC_11/objects/object_kz.xml new file mode 100644 index 000000000..4624fefdb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_kz.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_light_ring.xml b/soh/assets/xml/N64_NTSC_11/objects/object_light_ring.xml new file mode 100644 index 000000000..babe7d2aa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_light_ring.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_lightbox.xml b/soh/assets/xml/N64_NTSC_11/objects/object_lightbox.xml new file mode 100644 index 000000000..552a79d7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_lightbox.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_lightswitch.xml b/soh/assets/xml/N64_NTSC_11/objects/object_lightswitch.xml new file mode 100644 index 000000000..cfd5dcfb4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_lightswitch.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_link_boy.xml b/soh/assets/xml/N64_NTSC_11/objects/object_link_boy.xml new file mode 100644 index 000000000..6351af505 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_link_boy.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_link_child.xml b/soh/assets/xml/N64_NTSC_11/objects/object_link_child.xml new file mode 100644 index 000000000..0de400373 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_link_child.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ma1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ma1.xml new file mode 100644 index 000000000..63eeb3895 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ma1.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ma2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ma2.xml new file mode 100644 index 000000000..ce5910fb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ma2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mag.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mag.xml new file mode 100644 index 000000000..257f72363 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mag.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mamenoki.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mamenoki.xml new file mode 100644 index 000000000..819d89022 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mamenoki.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mastergolon.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mastergolon.xml new file mode 100644 index 000000000..6dd9d1659 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mastergolon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_masterkokiri.xml b/soh/assets/xml/N64_NTSC_11/objects/object_masterkokiri.xml new file mode 100644 index 000000000..af5a9ec15 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_masterkokiri.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_masterkokirihead.xml b/soh/assets/xml/N64_NTSC_11/objects/object_masterkokirihead.xml new file mode 100644 index 000000000..c64aa1c49 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_masterkokirihead.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_masterzoora.xml b/soh/assets/xml/N64_NTSC_11/objects/object_masterzoora.xml new file mode 100644 index 000000000..2c703274e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_masterzoora.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mb.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mb.xml new file mode 100644 index 000000000..23c0930c0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mb.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_md.xml b/soh/assets/xml/N64_NTSC_11/objects/object_md.xml new file mode 100644 index 000000000..161c73dca --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_md.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_medal.xml b/soh/assets/xml/N64_NTSC_11/objects/object_medal.xml new file mode 100644 index 000000000..533872a55 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_medal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_menkuri_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_menkuri_objects.xml new file mode 100644 index 000000000..4c2b51df5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_menkuri_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mir_ray.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mir_ray.xml new file mode 100644 index 000000000..2acc9391a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mir_ray.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mizu_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mizu_objects.xml new file mode 100644 index 000000000..5a18b95cf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mizu_objects.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mjin.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mjin.xml new file mode 100644 index 000000000..daf9b0541 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mjin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mjin_dark.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_dark.xml new file mode 100644 index 000000000..2fa0bdbe4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_dark.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mjin_flame.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_flame.xml new file mode 100644 index 000000000..6274feaee --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_flame.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mjin_flash.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_flash.xml new file mode 100644 index 000000000..c1040ea11 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_flash.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mjin_ice.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_ice.xml new file mode 100644 index 000000000..1aaeea193 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_ice.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mjin_oka.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_oka.xml new file mode 100644 index 000000000..0f823b923 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_oka.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mjin_soul.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_soul.xml new file mode 100644 index 000000000..6386f7f9e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_soul.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mjin_wind.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_wind.xml new file mode 100644 index 000000000..8bba7eb91 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mjin_wind.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mk.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mk.xml new file mode 100644 index 000000000..0b4aaae8a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mk.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mm.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mm.xml new file mode 100644 index 000000000..b27837e57 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mo.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mo.xml new file mode 100644 index 000000000..f450368f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mo.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri1.xml new file mode 100644 index 000000000..bb1b31e2f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri1a.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri1a.xml new file mode 100644 index 000000000..c750ce20d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri1a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri2.xml new file mode 100644 index 000000000..785b85857 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri2a.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri2a.xml new file mode 100644 index 000000000..ad1bb4d5f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mori_hineri2a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mori_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mori_objects.xml new file mode 100644 index 000000000..58ea8c085 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mori_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mori_tex.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mori_tex.xml new file mode 100644 index 000000000..8ba4ff2d3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mori_tex.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ms.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ms.xml new file mode 100644 index 000000000..a87d0e6b3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ms.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_mu.xml b/soh/assets/xml/N64_NTSC_11/objects/object_mu.xml new file mode 100644 index 000000000..7251ff721 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_mu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_nb.xml b/soh/assets/xml/N64_NTSC_11/objects/object_nb.xml new file mode 100644 index 000000000..74de9e285 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_nb.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_niw.xml b/soh/assets/xml/N64_NTSC_11/objects/object_niw.xml new file mode 100644 index 000000000..4eafec956 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_niw.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_nwc.xml b/soh/assets/xml/N64_NTSC_11/objects/object_nwc.xml new file mode 100644 index 000000000..96ffa3238 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_nwc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ny.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ny.xml new file mode 100644 index 000000000..e2e8187ff --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ny.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA1.xml new file mode 100644 index 000000000..1d665f101 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA10.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA10.xml new file mode 100644 index 000000000..65d080834 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA10.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA11.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA11.xml new file mode 100644 index 000000000..92ae474b6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA11.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA2.xml new file mode 100644 index 000000000..ffdcd7989 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA2.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA3.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA3.xml new file mode 100644 index 000000000..a492bd875 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA4.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA4.xml new file mode 100644 index 000000000..dcdbbfff9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA5.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA5.xml new file mode 100644 index 000000000..55072176d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA6.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA6.xml new file mode 100644 index 000000000..c17a51088 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA6.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA7.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA7.xml new file mode 100644 index 000000000..52c68f639 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA7.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA8.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA8.xml new file mode 100644 index 000000000..8ed2d3df5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA8.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oA9.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oA9.xml new file mode 100644 index 000000000..d5c16abfc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oA9.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oB1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oB1.xml new file mode 100644 index 000000000..2f50c967b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oB1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oB2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oB2.xml new file mode 100644 index 000000000..230783cea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oB2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oB3.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oB3.xml new file mode 100644 index 000000000..1c42ddacc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oB3.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oB4.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oB4.xml new file mode 100644 index 000000000..2924c9e75 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oB4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE1.xml new file mode 100644 index 000000000..4d5b1663f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE1.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE10.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE10.xml new file mode 100644 index 000000000..04ce91437 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE10.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE11.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE11.xml new file mode 100644 index 000000000..04f6f186d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE11.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE12.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE12.xml new file mode 100644 index 000000000..a5fa39fd2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE12.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE1s.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE1s.xml new file mode 100644 index 000000000..d311e6010 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE1s.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE2.xml new file mode 100644 index 000000000..af62ad6d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE2.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE3.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE3.xml new file mode 100644 index 000000000..95227da38 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE3.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE4.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE4.xml new file mode 100644 index 000000000..ae48d2ade --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE4.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE4s.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE4s.xml new file mode 100644 index 000000000..6037de52f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE4s.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE5.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE5.xml new file mode 100644 index 000000000..f5edf745a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE6.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE6.xml new file mode 100644 index 000000000..95bb602b6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE6.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE7.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE7.xml new file mode 100644 index 000000000..b3e588d4c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE7.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE8.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE8.xml new file mode 100644 index 000000000..be5de2494 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE8.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE9.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE9.xml new file mode 100644 index 000000000..8ea7ee18c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE9.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oE_anime.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oE_anime.xml new file mode 100644 index 000000000..f6b4659e2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oE_anime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oF1d_map.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oF1d_map.xml new file mode 100644 index 000000000..f14fecd82 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oF1d_map.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_oF1s.xml b/soh/assets/xml/N64_NTSC_11/objects/object_oF1s.xml new file mode 100644 index 000000000..fe41dde63 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_oF1s.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_o_anime.xml b/soh/assets/xml/N64_NTSC_11/objects/object_o_anime.xml new file mode 100644 index 000000000..4ef4ac44c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_o_anime.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_okuta.xml b/soh/assets/xml/N64_NTSC_11/objects/object_okuta.xml new file mode 100644 index 000000000..b4fccea6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_okuta.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_opening_demo1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_opening_demo1.xml new file mode 100644 index 000000000..fd0323027 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_opening_demo1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_os.xml b/soh/assets/xml/N64_NTSC_11/objects/object_os.xml new file mode 100644 index 000000000..5880a9293 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_os.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_os_anime.xml b/soh/assets/xml/N64_NTSC_11/objects/object_os_anime.xml new file mode 100644 index 000000000..f23636343 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_os_anime.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ossan.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ossan.xml new file mode 100644 index 000000000..5788e3a20 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ossan.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ouke_haka.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ouke_haka.xml new file mode 100644 index 000000000..11da9b26e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ouke_haka.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_owl.xml b/soh/assets/xml/N64_NTSC_11/objects/object_owl.xml new file mode 100644 index 000000000..64fdf64c5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_owl.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_peehat.xml b/soh/assets/xml/N64_NTSC_11/objects/object_peehat.xml new file mode 100644 index 000000000..42ee66cde --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_peehat.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_po_composer.xml b/soh/assets/xml/N64_NTSC_11/objects/object_po_composer.xml new file mode 100644 index 000000000..ff995efce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_po_composer.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_po_field.xml b/soh/assets/xml/N64_NTSC_11/objects/object_po_field.xml new file mode 100644 index 000000000..78bc0d65a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_po_field.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_po_sisters.xml b/soh/assets/xml/N64_NTSC_11/objects/object_po_sisters.xml new file mode 100644 index 000000000..b429be258 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_po_sisters.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_poh.xml b/soh/assets/xml/N64_NTSC_11/objects/object_poh.xml new file mode 100644 index 000000000..be6d6eff4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_poh.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ps.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ps.xml new file mode 100644 index 000000000..9f9c894a6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ps.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_pu_box.xml b/soh/assets/xml/N64_NTSC_11/objects/object_pu_box.xml new file mode 100644 index 000000000..e1d686e97 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_pu_box.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_rd.xml b/soh/assets/xml/N64_NTSC_11/objects/object_rd.xml new file mode 100644 index 000000000..22c7d3373 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_rd.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_reeba.xml b/soh/assets/xml/N64_NTSC_11/objects/object_reeba.xml new file mode 100644 index 000000000..32c697bd9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_reeba.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_relay_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_relay_objects.xml new file mode 100644 index 000000000..47b92fcd2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_relay_objects.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_rl.xml b/soh/assets/xml/N64_NTSC_11/objects/object_rl.xml new file mode 100644 index 000000000..2a5ad30f6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_rl.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_rr.xml b/soh/assets/xml/N64_NTSC_11/objects/object_rr.xml new file mode 100644 index 000000000..98726b14b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_rr.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_rs.xml b/soh/assets/xml/N64_NTSC_11/objects/object_rs.xml new file mode 100644 index 000000000..152b5489e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_rs.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ru1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ru1.xml new file mode 100644 index 000000000..3d413619f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ru1.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ru2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ru2.xml new file mode 100644 index 000000000..fedf37d48 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ru2.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_sa.xml b/soh/assets/xml/N64_NTSC_11/objects/object_sa.xml new file mode 100644 index 000000000..ec45ac961 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_sa.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_sb.xml b/soh/assets/xml/N64_NTSC_11/objects/object_sb.xml new file mode 100644 index 000000000..64d3bb005 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_sb.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_sd.xml b/soh/assets/xml/N64_NTSC_11/objects/object_sd.xml new file mode 100644 index 000000000..fb58428c3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_sd.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_shop_dungen.xml b/soh/assets/xml/N64_NTSC_11/objects/object_shop_dungen.xml new file mode 100644 index 000000000..594c43d39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_shop_dungen.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_shopnuts.xml b/soh/assets/xml/N64_NTSC_11/objects/object_shopnuts.xml new file mode 100644 index 000000000..7065f8941 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_shopnuts.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_siofuki.xml b/soh/assets/xml/N64_NTSC_11/objects/object_siofuki.xml new file mode 100644 index 000000000..a23240a72 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_siofuki.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_sk2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_sk2.xml new file mode 100644 index 000000000..f2e7ef6d8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_sk2.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_skb.xml b/soh/assets/xml/N64_NTSC_11/objects/object_skb.xml new file mode 100644 index 000000000..5b5efb484 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_skb.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_skj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_skj.xml new file mode 100644 index 000000000..74548e518 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_skj.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot00_break.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot00_break.xml new file mode 100644 index 000000000..d3be88315 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot00_break.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot00_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot00_objects.xml new file mode 100644 index 000000000..10fb13aea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot00_objects.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot01_matoya.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot01_matoya.xml new file mode 100644 index 000000000..d44b944e0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot01_matoya.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot01_matoyab.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot01_matoyab.xml new file mode 100644 index 000000000..720f50cd3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot01_matoyab.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot01_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot01_objects.xml new file mode 100644 index 000000000..413e032a9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot01_objects.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot01_objects2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot01_objects2.xml new file mode 100644 index 000000000..36741a949 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot01_objects2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot02_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot02_objects.xml new file mode 100644 index 000000000..65f45ff51 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot02_objects.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot03_object.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot03_object.xml new file mode 100644 index 000000000..f182e7d99 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot03_object.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot04_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot04_objects.xml new file mode 100644 index 000000000..66293d752 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot04_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot05_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot05_objects.xml new file mode 100644 index 000000000..6e7079149 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot05_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot06_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot06_objects.xml new file mode 100644 index 000000000..e3da63b0f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot06_objects.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot07_object.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot07_object.xml new file mode 100644 index 000000000..5bc2bfb6b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot07_object.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot08_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot08_obj.xml new file mode 100644 index 000000000..4d71f3473 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot08_obj.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot09_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot09_obj.xml new file mode 100644 index 000000000..eb6528393 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot09_obj.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot11_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot11_obj.xml new file mode 100644 index 000000000..257298f7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot11_obj.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot12_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot12_obj.xml new file mode 100644 index 000000000..d619c781e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot12_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot15_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot15_obj.xml new file mode 100644 index 000000000..bd59b8cd1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot15_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot16_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot16_obj.xml new file mode 100644 index 000000000..d39de812a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot16_obj.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot17_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot17_obj.xml new file mode 100644 index 000000000..d4239d8d2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot17_obj.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_spot18_obj.xml b/soh/assets/xml/N64_NTSC_11/objects/object_spot18_obj.xml new file mode 100644 index 000000000..cc12b7894 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_spot18_obj.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ssh.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ssh.xml new file mode 100644 index 000000000..6283f8e9f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ssh.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_sst.xml b/soh/assets/xml/N64_NTSC_11/objects/object_sst.xml new file mode 100644 index 000000000..d64787fa1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_sst.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_st.xml b/soh/assets/xml/N64_NTSC_11/objects/object_st.xml new file mode 100644 index 000000000..983b9e2ea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_st.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_stream.xml b/soh/assets/xml/N64_NTSC_11/objects/object_stream.xml new file mode 100644 index 000000000..59b0838e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_stream.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_syokudai.xml b/soh/assets/xml/N64_NTSC_11/objects/object_syokudai.xml new file mode 100644 index 000000000..c1670edec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_syokudai.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ta.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ta.xml new file mode 100644 index 000000000..5e446bf5c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ta.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_timeblock.xml b/soh/assets/xml/N64_NTSC_11/objects/object_timeblock.xml new file mode 100644 index 000000000..1d6b9e698 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_timeblock.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_tite.xml b/soh/assets/xml/N64_NTSC_11/objects/object_tite.xml new file mode 100644 index 000000000..1be65c495 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_tite.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_tk.xml b/soh/assets/xml/N64_NTSC_11/objects/object_tk.xml new file mode 100644 index 000000000..6b6cce724 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_tk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_toki_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_toki_objects.xml new file mode 100644 index 000000000..cd07e60d2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_toki_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_torch2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_torch2.xml new file mode 100644 index 000000000..3388e7d34 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_torch2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_toryo.xml b/soh/assets/xml/N64_NTSC_11/objects/object_toryo.xml new file mode 100644 index 000000000..73f3dcb1e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_toryo.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_tp.xml b/soh/assets/xml/N64_NTSC_11/objects/object_tp.xml new file mode 100644 index 000000000..8ea908825 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_tp.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_tr.xml b/soh/assets/xml/N64_NTSC_11/objects/object_tr.xml new file mode 100644 index 000000000..17ab9ae39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_tr.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_trap.xml b/soh/assets/xml/N64_NTSC_11/objects/object_trap.xml new file mode 100644 index 000000000..56195cf41 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_trap.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_triforce_spot.xml b/soh/assets/xml/N64_NTSC_11/objects/object_triforce_spot.xml new file mode 100644 index 000000000..87d449458 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_triforce_spot.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ts.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ts.xml new file mode 100644 index 000000000..567277bc3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ts.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_tsubo.xml b/soh/assets/xml/N64_NTSC_11/objects/object_tsubo.xml new file mode 100644 index 000000000..ee2c5e184 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_tsubo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_tw.xml b/soh/assets/xml/N64_NTSC_11/objects/object_tw.xml new file mode 100644 index 000000000..d238e10ab --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_tw.xml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_umajump.xml b/soh/assets/xml/N64_NTSC_11/objects/object_umajump.xml new file mode 100644 index 000000000..2ee4ade46 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_umajump.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_vali.xml b/soh/assets/xml/N64_NTSC_11/objects/object_vali.xml new file mode 100644 index 000000000..2bab5efaa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_vali.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_vase.xml b/soh/assets/xml/N64_NTSC_11/objects/object_vase.xml new file mode 100644 index 000000000..091d4c51e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_vase.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_vm.xml b/soh/assets/xml/N64_NTSC_11/objects/object_vm.xml new file mode 100644 index 000000000..c5b949b36 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_vm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_wallmaster.xml b/soh/assets/xml/N64_NTSC_11/objects/object_wallmaster.xml new file mode 100644 index 000000000..fbbc4f4af --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_wallmaster.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_warp1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_warp1.xml new file mode 100644 index 000000000..1497d7a10 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_warp1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_warp2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_warp2.xml new file mode 100644 index 000000000..b6d1b3624 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_warp2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_wf.xml b/soh/assets/xml/N64_NTSC_11/objects/object_wf.xml new file mode 100644 index 000000000..ebfb708d2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_wf.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_wood02.xml b/soh/assets/xml/N64_NTSC_11/objects/object_wood02.xml new file mode 100644 index 000000000..47ec342ca --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_wood02.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_xc.xml b/soh/assets/xml/N64_NTSC_11/objects/object_xc.xml new file mode 100644 index 000000000..bb2bf3e7a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_xc.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_yabusame_point.xml b/soh/assets/xml/N64_NTSC_11/objects/object_yabusame_point.xml new file mode 100644 index 000000000..bed9e8a60 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_yabusame_point.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_ydan_objects.xml b/soh/assets/xml/N64_NTSC_11/objects/object_ydan_objects.xml new file mode 100644 index 000000000..e2adf307f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_ydan_objects.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_yukabyun.xml b/soh/assets/xml/N64_NTSC_11/objects/object_yukabyun.xml new file mode 100644 index 000000000..d594ebbb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_yukabyun.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_zf.xml b/soh/assets/xml/N64_NTSC_11/objects/object_zf.xml new file mode 100644 index 000000000..7f20eb786 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_zf.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_zg.xml b/soh/assets/xml/N64_NTSC_11/objects/object_zg.xml new file mode 100644 index 000000000..79005516c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_zg.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_zl1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_zl1.xml new file mode 100644 index 000000000..001e5be14 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_zl1.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_zl2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_zl2.xml new file mode 100644 index 000000000..959a919ec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_zl2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_zl2_anime1.xml b/soh/assets/xml/N64_NTSC_11/objects/object_zl2_anime1.xml new file mode 100644 index 000000000..cada50486 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_zl2_anime1.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_zl2_anime2.xml b/soh/assets/xml/N64_NTSC_11/objects/object_zl2_anime2.xml new file mode 100644 index 000000000..47016e2e0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_zl2_anime2.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_zl4.xml b/soh/assets/xml/N64_NTSC_11/objects/object_zl4.xml new file mode 100644 index 000000000..8e7a2837e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_zl4.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/objects/object_zo.xml b/soh/assets/xml/N64_NTSC_11/objects/object_zo.xml new file mode 100644 index 000000000..77465760e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/objects/object_zo.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Arrow_Fire.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Arrow_Fire.xml new file mode 100644 index 000000000..73ca01696 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Arrow_Fire.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Arrow_Ice.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Arrow_Ice.xml new file mode 100644 index 000000000..fb7e2e078 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Arrow_Ice.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Arrow_Light.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Arrow_Light.xml new file mode 100644 index 000000000..93ffad996 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Arrow_Light.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Bg_Ganon_Otyuka.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Bg_Ganon_Otyuka.xml new file mode 100644 index 000000000..2d32a8772 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Bg_Ganon_Otyuka.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Bg_Jya_Cobra.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Bg_Jya_Cobra.xml new file mode 100644 index 000000000..8182ca3da --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Bg_Jya_Cobra.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Dodongo.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Dodongo.xml new file mode 100644 index 000000000..605d6a73e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Dodongo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Ganon.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Ganon.xml new file mode 100644 index 000000000..e6fcdab9e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Ganon.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Ganon2.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Ganon2.xml new file mode 100644 index 000000000..2c5dd60e8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Ganon2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Sst.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Sst.xml new file mode 100644 index 000000000..a18a449dc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Boss_Sst.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Demo_Shd.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Demo_Shd.xml new file mode 100644 index 000000000..6df7aff6d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Demo_Shd.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Bili.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Bili.xml new file mode 100644 index 000000000..bd4f305f7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Bili.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Clear_Tag.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Clear_Tag.xml new file mode 100644 index 000000000..79feadafc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Clear_Tag.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Ganon_Mant.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Ganon_Mant.xml new file mode 100644 index 000000000..8c8bcc329 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Ganon_Mant.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Ganon_Organ.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Ganon_Organ.xml new file mode 100644 index 000000000..96ae1b093 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Ganon_Organ.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Holl.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Holl.xml new file mode 100644 index 000000000..9f2042ae5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Holl.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Jsjutan.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Jsjutan.xml new file mode 100644 index 000000000..f6fb08be6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Jsjutan.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Kanban.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Kanban.xml new file mode 100644 index 000000000..ce21430e1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Kanban.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Sda.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Sda.xml new file mode 100644 index 000000000..d3aeb1958 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Sda.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Ssh.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Ssh.xml new file mode 100644 index 000000000..9dc8c7814 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Ssh.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_St.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_St.xml new file mode 100644 index 000000000..5f76146cc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_St.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Sth.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Sth.xml new file mode 100644 index 000000000..ad65bc77d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_En_Sth.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_End_Title.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_End_Title.xml new file mode 100644 index 000000000..4fd2822e9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_End_Title.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_File_Choose.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_File_Choose.xml new file mode 100644 index 000000000..dba3fe1bb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_File_Choose.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Magic_Dark.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Magic_Dark.xml new file mode 100644 index 000000000..f3b41cbff --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Magic_Dark.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Magic_Fire.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Magic_Fire.xml new file mode 100644 index 000000000..06dc7a048 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Magic_Fire.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Magic_Wind.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Magic_Wind.xml new file mode 100644 index 000000000..e7cd35c2c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Magic_Wind.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Spot.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Spot.xml new file mode 100644 index 000000000..8755d12b8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Spot.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Storm.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Storm.xml new file mode 100644 index 000000000..8aeb6aef9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Storm.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe.xml new file mode 100644 index 000000000..56e3a9ea4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe2.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe2.xml new file mode 100644 index 000000000..2b68cc893 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe3.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe3.xml new file mode 100644 index 000000000..5515d4585 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe4.xml b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe4.xml new file mode 100644 index 000000000..24902b2a8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/overlays/ovl_Oceff_Wipe4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/Bmori1.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/Bmori1.xml new file mode 100644 index 000000000..ad4311426 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/Bmori1.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/FIRE_bs.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/FIRE_bs.xml new file mode 100644 index 000000000..89331ecc2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/FIRE_bs.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HAKAdan.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HAKAdan.xml new file mode 100644 index 000000000..e557c80a5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HAKAdan.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HAKAdanCH.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HAKAdanCH.xml new file mode 100644 index 000000000..97401aff6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HAKAdanCH.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HAKAdan_bs.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HAKAdan_bs.xml new file mode 100644 index 000000000..d36ac6b77 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HAKAdan_bs.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HIDAN.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HIDAN.xml new file mode 100644 index 000000000..fa4d784f1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/HIDAN.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/MIZUsin.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/MIZUsin.xml new file mode 100644 index 000000000..00c5aa82d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/MIZUsin.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/MIZUsin_bs.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/MIZUsin_bs.xml new file mode 100644 index 000000000..99ae2b3ef --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/MIZUsin_bs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/bdan.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/bdan.xml new file mode 100644 index 000000000..a9e520f4c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/bdan.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/bdan_boss.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/bdan_boss.xml new file mode 100644 index 000000000..9fccf2c30 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/bdan_boss.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ddan.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ddan.xml new file mode 100644 index 000000000..1446a9c98 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ddan.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ddan_boss.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ddan_boss.xml new file mode 100644 index 000000000..6b22223cd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ddan_boss.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon.xml new file mode 100644 index 000000000..f857dbe94 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_boss.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_boss.xml new file mode 100644 index 000000000..36c5e8107 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_boss.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_demo.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_demo.xml new file mode 100644 index 000000000..56c98efed --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_demo.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_final.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_final.xml new file mode 100644 index 000000000..3ec568cfb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_final.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_sonogo.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_sonogo.xml new file mode 100644 index 000000000..84ef36950 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_sonogo.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_tou.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_tou.xml new file mode 100644 index 000000000..1ae37b963 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganon_tou.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganontika.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganontika.xml new file mode 100644 index 000000000..a5ff210ce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganontika.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganontikasonogo.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganontikasonogo.xml new file mode 100644 index 000000000..060d4941b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ganontikasonogo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/gerudoway.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/gerudoway.xml new file mode 100644 index 000000000..827277614 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/gerudoway.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ice_doukutu.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ice_doukutu.xml new file mode 100644 index 000000000..b27962889 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ice_doukutu.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/jyasinboss.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/jyasinboss.xml new file mode 100644 index 000000000..86c0d317b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/jyasinboss.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/jyasinzou.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/jyasinzou.xml new file mode 100644 index 000000000..bc14a46ac --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/jyasinzou.xml @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/men.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/men.xml new file mode 100644 index 000000000..d9e5960e8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/men.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/moribossroom.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/moribossroom.xml new file mode 100644 index 000000000..b9959eefa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/moribossroom.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ydan.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ydan.xml new file mode 100644 index 000000000..aed7d2660 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ydan.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ydan_boss.xml b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ydan_boss.xml new file mode 100644 index 000000000..7ea240547 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/dungeons/ydan_boss.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/bowling.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/bowling.xml new file mode 100644 index 000000000..9a41763a2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/bowling.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/daiyousei_izumi.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/daiyousei_izumi.xml new file mode 100644 index 000000000..4f9a03fc0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/daiyousei_izumi.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/hairal_niwa.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hairal_niwa.xml new file mode 100644 index 000000000..06d89f2fe --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hairal_niwa.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/hairal_niwa_n.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hairal_niwa_n.xml new file mode 100644 index 000000000..6f4c181e0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hairal_niwa_n.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/hakasitarelay.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hakasitarelay.xml new file mode 100644 index 000000000..91be63d14 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hakasitarelay.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/hut.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hut.xml new file mode 100644 index 000000000..a4ef5715f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/hylia_labo.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hylia_labo.xml new file mode 100644 index 000000000..56822e67a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/hylia_labo.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/impa.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/impa.xml new file mode 100644 index 000000000..db757e3d3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/impa.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/kakariko.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kakariko.xml new file mode 100644 index 000000000..e4e9b102c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kakariko.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/kenjyanoma.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kenjyanoma.xml new file mode 100644 index 000000000..4e8a58f3b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kenjyanoma.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home.xml new file mode 100644 index 000000000..8c0305493 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home3.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home3.xml new file mode 100644 index 000000000..9f36eb41c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home4.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home4.xml new file mode 100644 index 000000000..eb861aedb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home4.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home5.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home5.xml new file mode 100644 index 000000000..974987fed --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/kokiri_home5.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/labo.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/labo.xml new file mode 100644 index 000000000..c0a9d2eb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/labo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/link_home.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/link_home.xml new file mode 100644 index 000000000..2fb88ae34 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/link_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/mahouya.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/mahouya.xml new file mode 100644 index 000000000..8ae462f9d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/mahouya.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/malon_stable.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/malon_stable.xml new file mode 100644 index 000000000..aff97eeb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/malon_stable.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/miharigoya.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/miharigoya.xml new file mode 100644 index 000000000..63f8676ac --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/miharigoya.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/nakaniwa.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/nakaniwa.xml new file mode 100644 index 000000000..2fb2d5e6a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/nakaniwa.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/syatekijyou.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/syatekijyou.xml new file mode 100644 index 000000000..05243b52c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/syatekijyou.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/takaraya.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/takaraya.xml new file mode 100644 index 000000000..5b438980b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/takaraya.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/tent.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/tent.xml new file mode 100644 index 000000000..de72cc5f4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/tent.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/tokinoma.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/tokinoma.xml new file mode 100644 index 000000000..d7878b895 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/tokinoma.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/yousei_izumi_tate.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/yousei_izumi_tate.xml new file mode 100644 index 000000000..3b6dd2dec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/yousei_izumi_tate.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/indoors/yousei_izumi_yoko.xml b/soh/assets/xml/N64_NTSC_11/scenes/indoors/yousei_izumi_yoko.xml new file mode 100644 index 000000000..90a8d95d0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/indoors/yousei_izumi_yoko.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/enrui.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/enrui.xml new file mode 100644 index 000000000..d8c06e545 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/enrui.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/entra_n.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/entra_n.xml new file mode 100644 index 000000000..5b408ac3a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/entra_n.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/hakaana.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/hakaana.xml new file mode 100644 index 000000000..e7dc93dd0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/hakaana.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/hakaana2.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/hakaana2.xml new file mode 100644 index 000000000..2d8ba4906 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/hakaana2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/hakaana_ouke.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/hakaana_ouke.xml new file mode 100644 index 000000000..17f53613e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/hakaana_ouke.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/hiral_demo.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/hiral_demo.xml new file mode 100644 index 000000000..1331fdd4c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/hiral_demo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/kakariko3.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/kakariko3.xml new file mode 100644 index 000000000..07b62c44d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/kakariko3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/kakusiana.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/kakusiana.xml new file mode 100644 index 000000000..c3f993ff4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/kakusiana.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/kinsuta.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/kinsuta.xml new file mode 100644 index 000000000..aac0f6c4e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/kinsuta.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/market_alley.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_alley.xml new file mode 100644 index 000000000..c30467303 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_alley.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/market_alley_n.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_alley_n.xml new file mode 100644 index 000000000..65db60411 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_alley_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/market_day.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_day.xml new file mode 100644 index 000000000..00887e69c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_day.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/market_night.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_night.xml new file mode 100644 index 000000000..c58e38744 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_night.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/market_ruins.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_ruins.xml new file mode 100644 index 000000000..f0ec75e75 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/market_ruins.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/shrine.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/shrine.xml new file mode 100644 index 000000000..b9ddf2cf7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/shrine.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/shrine_n.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/shrine_n.xml new file mode 100644 index 000000000..4878338aa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/shrine_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/shrine_r.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/shrine_r.xml new file mode 100644 index 000000000..122036791 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/shrine_r.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/misc/turibori.xml b/soh/assets/xml/N64_NTSC_11/scenes/misc/turibori.xml new file mode 100644 index 000000000..0633224d9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/misc/turibori.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/entra.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/entra.xml new file mode 100644 index 000000000..92ee57f59 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/entra.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/souko.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/souko.xml new file mode 100644 index 000000000..8dd9d9e48 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/souko.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot00.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot00.xml new file mode 100644 index 000000000..508d9309b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot00.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot01.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot01.xml new file mode 100644 index 000000000..dcee38761 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot01.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot02.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot02.xml new file mode 100644 index 000000000..c7924c29d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot02.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot03.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot03.xml new file mode 100644 index 000000000..9434185f4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot03.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot04.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot04.xml new file mode 100644 index 000000000..ccff0d05b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot04.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot05.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot05.xml new file mode 100644 index 000000000..4f7c62b91 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot05.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot06.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot06.xml new file mode 100644 index 000000000..f4af602cf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot06.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot07.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot07.xml new file mode 100644 index 000000000..eeb976f7f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot07.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot08.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot08.xml new file mode 100644 index 000000000..86582f0dc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot08.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot09.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot09.xml new file mode 100644 index 000000000..58f1f7502 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot09.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot10.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot10.xml new file mode 100644 index 000000000..66365e3d8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot11.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot11.xml new file mode 100644 index 000000000..76ff3b822 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot11.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot12.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot12.xml new file mode 100644 index 000000000..e21523b21 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot12.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot13.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot13.xml new file mode 100644 index 000000000..c68913065 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot13.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot15.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot15.xml new file mode 100644 index 000000000..e75f7b684 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot15.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot16.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot16.xml new file mode 100644 index 000000000..6c059858b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot16.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot17.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot17.xml new file mode 100644 index 000000000..c50cacdb3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot17.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot18.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot18.xml new file mode 100644 index 000000000..d70fccf4b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot18.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot20.xml b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot20.xml new file mode 100644 index 000000000..1381f6ecb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/overworld/spot20.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/shops/alley_shop.xml b/soh/assets/xml/N64_NTSC_11/scenes/shops/alley_shop.xml new file mode 100644 index 000000000..95548de1b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/shops/alley_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/shops/drag.xml b/soh/assets/xml/N64_NTSC_11/scenes/shops/drag.xml new file mode 100644 index 000000000..acb6515fb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/shops/drag.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/shops/face_shop.xml b/soh/assets/xml/N64_NTSC_11/scenes/shops/face_shop.xml new file mode 100644 index 000000000..16a974608 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/shops/face_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/shops/golon.xml b/soh/assets/xml/N64_NTSC_11/scenes/shops/golon.xml new file mode 100644 index 000000000..c58672798 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/shops/golon.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/shops/kokiri_shop.xml b/soh/assets/xml/N64_NTSC_11/scenes/shops/kokiri_shop.xml new file mode 100644 index 000000000..50cd633e5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/shops/kokiri_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/shops/night_shop.xml b/soh/assets/xml/N64_NTSC_11/scenes/shops/night_shop.xml new file mode 100644 index 000000000..5954d9c83 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/shops/night_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/shops/shop1.xml b/soh/assets/xml/N64_NTSC_11/scenes/shops/shop1.xml new file mode 100644 index 000000000..525a06d63 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/shops/shop1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/scenes/shops/zoora.xml b/soh/assets/xml/N64_NTSC_11/scenes/shops/zoora.xml new file mode 100644 index 000000000..0e4ac18f8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/scenes/shops/zoora.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/text/elf_message_field.xml b/soh/assets/xml/N64_NTSC_11/text/elf_message_field.xml new file mode 100644 index 000000000..789a554ce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/text/elf_message_field.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_11/text/elf_message_ydan.xml b/soh/assets/xml/N64_NTSC_11/text/elf_message_ydan.xml new file mode 100644 index 000000000..f784afcf4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/text/elf_message_ydan.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_11/text/message_data_static.xml b/soh/assets/xml/N64_NTSC_11/text/message_data_static.xml new file mode 100644 index 000000000..ca67ce4a0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/text/message_data_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/backgrounds.xml b/soh/assets/xml/N64_NTSC_11/textures/backgrounds.xml new file mode 100644 index 000000000..c60ff57a8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/backgrounds.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/boss_title_cards.xml b/soh/assets/xml/N64_NTSC_11/textures/boss_title_cards.xml new file mode 100644 index 000000000..84f555bd1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/boss_title_cards.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_11/textures/do_action_static.xml b/soh/assets/xml/N64_NTSC_11/textures/do_action_static.xml new file mode 100644 index 000000000..efabd54a5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/do_action_static.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/icon_item_24_static.xml b/soh/assets/xml/N64_NTSC_11/textures/icon_item_24_static.xml new file mode 100644 index 000000000..cdb8cc737 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/icon_item_24_static.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/icon_item_dungeon_static.xml b/soh/assets/xml/N64_NTSC_11/textures/icon_item_dungeon_static.xml new file mode 100644 index 000000000..873c490fc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/icon_item_dungeon_static.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/icon_item_field_static.xml b/soh/assets/xml/N64_NTSC_11/textures/icon_item_field_static.xml new file mode 100644 index 000000000..ed991406b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/icon_item_field_static.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/icon_item_gameover_static.xml b/soh/assets/xml/N64_NTSC_11/textures/icon_item_gameover_static.xml new file mode 100644 index 000000000..ffd392868 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/icon_item_gameover_static.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/icon_item_jpn_static.xml b/soh/assets/xml/N64_NTSC_11/textures/icon_item_jpn_static.xml new file mode 100644 index 000000000..f2fe854b8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/icon_item_jpn_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/icon_item_nes_static.xml b/soh/assets/xml/N64_NTSC_11/textures/icon_item_nes_static.xml new file mode 100644 index 000000000..6cd92acfc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/icon_item_nes_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/icon_item_static.xml b/soh/assets/xml/N64_NTSC_11/textures/icon_item_static.xml new file mode 100644 index 000000000..9e844615b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/icon_item_static.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/item_name_static.xml b/soh/assets/xml/N64_NTSC_11/textures/item_name_static.xml new file mode 100644 index 000000000..266b3c200 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/item_name_static.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/kanji.xml b/soh/assets/xml/N64_NTSC_11/textures/kanji.xml new file mode 100644 index 000000000..5159387a1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/kanji.xml @@ -0,0 +1,3984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_11/textures/map_48x85_static.xml b/soh/assets/xml/N64_NTSC_11/textures/map_48x85_static.xml new file mode 100644 index 000000000..b2ea46340 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/map_48x85_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_11/textures/map_grand_static.xml b/soh/assets/xml/N64_NTSC_11/textures/map_grand_static.xml new file mode 100644 index 000000000..201955bfc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/map_grand_static.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/map_i_static.xml b/soh/assets/xml/N64_NTSC_11/textures/map_i_static.xml new file mode 100644 index 000000000..1721f6d84 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/map_i_static.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/map_name_static.xml b/soh/assets/xml/N64_NTSC_11/textures/map_name_static.xml new file mode 100644 index 000000000..ca4c4c0bd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/map_name_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/message_static.xml b/soh/assets/xml/N64_NTSC_11/textures/message_static.xml new file mode 100644 index 000000000..afdde60de --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/message_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/message_texture_static.xml b/soh/assets/xml/N64_NTSC_11/textures/message_texture_static.xml new file mode 100644 index 000000000..bbf7e1259 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/message_texture_static.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/nes_font_static.xml b/soh/assets/xml/N64_NTSC_11/textures/nes_font_static.xml new file mode 100644 index 000000000..f1b80ee04 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/nes_font_static.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/nintendo_rogo_static.xml b/soh/assets/xml/N64_NTSC_11/textures/nintendo_rogo_static.xml new file mode 100644 index 000000000..f09de3b0f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/nintendo_rogo_static.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/parameter_static.xml b/soh/assets/xml/N64_NTSC_11/textures/parameter_static.xml new file mode 100644 index 000000000..c51dacf1f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/parameter_static.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/place_title_cards.xml b/soh/assets/xml/N64_NTSC_11/textures/place_title_cards.xml new file mode 100644 index 000000000..b688cce00 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/place_title_cards.xml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/skyboxes.xml b/soh/assets/xml/N64_NTSC_11/textures/skyboxes.xml new file mode 100644 index 000000000..104ffb2a3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/skyboxes.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_11/textures/title_static.xml b/soh/assets/xml/N64_NTSC_11/textures/title_static.xml new file mode 100644 index 000000000..5f58c5a82 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_11/textures/title_static.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/audio/Audio.xml b/soh/assets/xml/N64_NTSC_12/audio/Audio.xml new file mode 100644 index 000000000..fa2ef282b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/audio/Audio.xml @@ -0,0 +1,1558 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/code/fbdemo_circle.xml b/soh/assets/xml/N64_NTSC_12/code/fbdemo_circle.xml new file mode 100644 index 000000000..b7e54845a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/code/fbdemo_circle.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/code/fbdemo_triforce.xml b/soh/assets/xml/N64_NTSC_12/code/fbdemo_triforce.xml new file mode 100644 index 000000000..a0886ab52 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/code/fbdemo_triforce.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/code/fbdemo_wipe1.xml b/soh/assets/xml/N64_NTSC_12/code/fbdemo_wipe1.xml new file mode 100644 index 000000000..7c5aad68e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/code/fbdemo_wipe1.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/code/sys_matrix.xml b/soh/assets/xml/N64_NTSC_12/code/sys_matrix.xml new file mode 100644 index 000000000..25d8331f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/code/sys_matrix.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/misc/link_animetion.xml b/soh/assets/xml/N64_NTSC_12/misc/link_animetion.xml new file mode 100644 index 000000000..9de1e92d3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/misc/link_animetion.xml @@ -0,0 +1,577 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/gameplay_dangeon_keep.xml b/soh/assets/xml/N64_NTSC_12/objects/gameplay_dangeon_keep.xml new file mode 100644 index 000000000..5b1a9050d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/gameplay_dangeon_keep.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/gameplay_field_keep.xml b/soh/assets/xml/N64_NTSC_12/objects/gameplay_field_keep.xml new file mode 100644 index 000000000..011e8f7fc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/gameplay_field_keep.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/gameplay_keep.xml b/soh/assets/xml/N64_NTSC_12/objects/gameplay_keep.xml new file mode 100644 index 000000000..94eee8845 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/gameplay_keep.xml @@ -0,0 +1,1011 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_Bb.xml b/soh/assets/xml/N64_NTSC_12/objects/object_Bb.xml new file mode 100644 index 000000000..5d04bde45 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_Bb.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ahg.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ahg.xml new file mode 100644 index 000000000..4d37b1b11 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ahg.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_am.xml b/soh/assets/xml/N64_NTSC_12/objects/object_am.xml new file mode 100644 index 000000000..b70c70d70 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_am.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ane.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ane.xml new file mode 100644 index 000000000..1e29b351e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ane.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ani.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ani.xml new file mode 100644 index 000000000..c70621c6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ani.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_anubice.xml b/soh/assets/xml/N64_NTSC_12/objects/object_anubice.xml new file mode 100644 index 000000000..fb029586b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_anubice.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_aob.xml b/soh/assets/xml/N64_NTSC_12/objects/object_aob.xml new file mode 100644 index 000000000..e6202d0cf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_aob.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_b_heart.xml b/soh/assets/xml/N64_NTSC_12/objects/object_b_heart.xml new file mode 100644 index 000000000..00f7cd677 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_b_heart.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bba.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bba.xml new file mode 100644 index 000000000..ccc5c2136 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bba.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bdan_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bdan_objects.xml new file mode 100644 index 000000000..dcd56d385 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bdan_objects.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bdoor.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bdoor.xml new file mode 100644 index 000000000..a092f0c23 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bdoor.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bg.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bg.xml new file mode 100644 index 000000000..791226b71 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bg.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bigokuta.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bigokuta.xml new file mode 100644 index 000000000..1c7d39e31 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bigokuta.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bird.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bird.xml new file mode 100644 index 000000000..167a5022d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bird.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bji.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bji.xml new file mode 100644 index 000000000..c665b6b00 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bji.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bl.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bl.xml new file mode 100644 index 000000000..1c2ef4ec6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bl.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_blkobj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_blkobj.xml new file mode 100644 index 000000000..345a8ebd9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_blkobj.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bob.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bob.xml new file mode 100644 index 000000000..289e994e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bob.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_boj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_boj.xml new file mode 100644 index 000000000..4be4764ab --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_boj.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bombf.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bombf.xml new file mode 100644 index 000000000..83e60248d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bombf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bombiwa.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bombiwa.xml new file mode 100644 index 000000000..26ab6b4f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bombiwa.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bowl.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bowl.xml new file mode 100644 index 000000000..ffe6d43db --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bowl.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_box.xml b/soh/assets/xml/N64_NTSC_12/objects/object_box.xml new file mode 100644 index 000000000..106d2d335 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_box.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_brob.xml b/soh/assets/xml/N64_NTSC_12/objects/object_brob.xml new file mode 100644 index 000000000..718dcd561 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_brob.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bubble.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bubble.xml new file mode 100644 index 000000000..f5de18692 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bubble.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bv.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bv.xml new file mode 100644 index 000000000..58db6e1d4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bv.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bw.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bw.xml new file mode 100644 index 000000000..6fd39fbb1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bw.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bwall.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bwall.xml new file mode 100644 index 000000000..d4f43ddc1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bwall.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_bxa.xml b/soh/assets/xml/N64_NTSC_12/objects/object_bxa.xml new file mode 100644 index 000000000..fb78c117e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_bxa.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_cne.xml b/soh/assets/xml/N64_NTSC_12/objects/object_cne.xml new file mode 100644 index 000000000..0c14d0bc5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_cne.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_cob.xml b/soh/assets/xml/N64_NTSC_12/objects/object_cob.xml new file mode 100644 index 000000000..ba051cfa7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_cob.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_cow.xml b/soh/assets/xml/N64_NTSC_12/objects/object_cow.xml new file mode 100644 index 000000000..5d067c329 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_cow.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_crow.xml b/soh/assets/xml/N64_NTSC_12/objects/object_crow.xml new file mode 100644 index 000000000..77337c644 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_crow.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_cs.xml b/soh/assets/xml/N64_NTSC_12/objects/object_cs.xml new file mode 100644 index 000000000..83804ccaf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_cs.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_d_elevator.xml b/soh/assets/xml/N64_NTSC_12/objects/object_d_elevator.xml new file mode 100644 index 000000000..6be59c154 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_d_elevator.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_d_hsblock.xml b/soh/assets/xml/N64_NTSC_12/objects/object_d_hsblock.xml new file mode 100644 index 000000000..4bb50c2b4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_d_hsblock.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_d_lift.xml b/soh/assets/xml/N64_NTSC_12/objects/object_d_lift.xml new file mode 100644 index 000000000..291238519 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_d_lift.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_daiku.xml b/soh/assets/xml/N64_NTSC_12/objects/object_daiku.xml new file mode 100644 index 000000000..1524c7a26 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_daiku.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ddan_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ddan_objects.xml new file mode 100644 index 000000000..3fc563b96 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ddan_objects.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dekubaba.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dekubaba.xml new file mode 100644 index 000000000..7202a833f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dekubaba.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dekujr.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dekujr.xml new file mode 100644 index 000000000..e906bf61c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dekujr.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dekunuts.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dekunuts.xml new file mode 100644 index 000000000..5fceef416 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dekunuts.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_demo_6k.xml b/soh/assets/xml/N64_NTSC_12/objects/object_demo_6k.xml new file mode 100644 index 000000000..73058d5e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_demo_6k.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_demo_kekkai.xml b/soh/assets/xml/N64_NTSC_12/objects/object_demo_kekkai.xml new file mode 100644 index 000000000..aa54bc2ee --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_demo_kekkai.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_demo_tre_lgt.xml b/soh/assets/xml/N64_NTSC_12/objects/object_demo_tre_lgt.xml new file mode 100644 index 000000000..9ea19012b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_demo_tre_lgt.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dh.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dh.xml new file mode 100644 index 000000000..7a52d7dbe --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dh.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dnk.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dnk.xml new file mode 100644 index 000000000..3bce34304 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dnk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dns.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dns.xml new file mode 100644 index 000000000..8b78ffcf2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dns.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dodojr.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dodojr.xml new file mode 100644 index 000000000..4dfd7d6e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dodojr.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dodongo.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dodongo.xml new file mode 100644 index 000000000..779e20e9d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dodongo.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dog.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dog.xml new file mode 100644 index 000000000..ef00442b6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dog.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_door_gerudo.xml b/soh/assets/xml/N64_NTSC_12/objects/object_door_gerudo.xml new file mode 100644 index 000000000..2f1726204 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_door_gerudo.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_door_killer.xml b/soh/assets/xml/N64_NTSC_12/objects/object_door_killer.xml new file mode 100644 index 000000000..a37f590d6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_door_killer.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ds.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ds.xml new file mode 100644 index 000000000..0413a9e2e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ds.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ds2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ds2.xml new file mode 100644 index 000000000..683bcc68d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ds2.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_du.xml b/soh/assets/xml/N64_NTSC_12/objects/object_du.xml new file mode 100644 index 000000000..0babd962b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_du.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_dy_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_dy_obj.xml new file mode 100644 index 000000000..5e792edb5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_dy_obj.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ec.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ec.xml new file mode 100644 index 000000000..7ec83e284 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ec.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_efc_crystal_light.xml b/soh/assets/xml/N64_NTSC_12/objects/object_efc_crystal_light.xml new file mode 100644 index 000000000..9215b6a39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_efc_crystal_light.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_efc_doughnut.xml b/soh/assets/xml/N64_NTSC_12/objects/object_efc_doughnut.xml new file mode 100644 index 000000000..7f12c56f5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_efc_doughnut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_efc_erupc.xml b/soh/assets/xml/N64_NTSC_12/objects/object_efc_erupc.xml new file mode 100644 index 000000000..800d9535f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_efc_erupc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_efc_fire_ball.xml b/soh/assets/xml/N64_NTSC_12/objects/object_efc_fire_ball.xml new file mode 100644 index 000000000..2fc65b16f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_efc_fire_ball.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_efc_flash.xml b/soh/assets/xml/N64_NTSC_12/objects/object_efc_flash.xml new file mode 100644 index 000000000..5f962f162 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_efc_flash.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_efc_lgt_shower.xml b/soh/assets/xml/N64_NTSC_12/objects/object_efc_lgt_shower.xml new file mode 100644 index 000000000..67ef5ce7e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_efc_lgt_shower.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_efc_star_field.xml b/soh/assets/xml/N64_NTSC_12/objects/object_efc_star_field.xml new file mode 100644 index 000000000..00b47c460 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_efc_star_field.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_efc_tw.xml b/soh/assets/xml/N64_NTSC_12/objects/object_efc_tw.xml new file mode 100644 index 000000000..de5376569 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_efc_tw.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ei.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ei.xml new file mode 100644 index 000000000..e4132491f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ei.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fa.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fa.xml new file mode 100644 index 000000000..2f1bf9a5e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fa.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fd.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fd.xml new file mode 100644 index 000000000..9bc25d3a6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fd.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fd2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fd2.xml new file mode 100644 index 000000000..44b5f5f9c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fd2.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fhg.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fhg.xml new file mode 100644 index 000000000..6a275daeb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fhg.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fire.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fire.xml new file mode 100644 index 000000000..49bf620cb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fire.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_firefly.xml b/soh/assets/xml/N64_NTSC_12/objects/object_firefly.xml new file mode 100644 index 000000000..8c26a4341 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_firefly.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fish.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fish.xml new file mode 100644 index 000000000..f5ad4f6da --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fish.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fr.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fr.xml new file mode 100644 index 000000000..25ee2ad42 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fr.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fu.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fu.xml new file mode 100644 index 000000000..82c449e3d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fu.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fw.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fw.xml new file mode 100644 index 000000000..ee9821d26 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fw.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_fz.xml b/soh/assets/xml/N64_NTSC_12/objects/object_fz.xml new file mode 100644 index 000000000..dad6fec5c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_fz.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ganon.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ganon.xml new file mode 100644 index 000000000..5b68602ba --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ganon.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ganon2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ganon2.xml new file mode 100644 index 000000000..7e715dd41 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ganon2.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ganon_anime1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ganon_anime1.xml new file mode 100644 index 000000000..b1016299b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ganon_anime1.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ganon_anime2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ganon_anime2.xml new file mode 100644 index 000000000..180e5995c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ganon_anime2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ganon_anime3.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ganon_anime3.xml new file mode 100644 index 000000000..be4c4dcb1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ganon_anime3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ganon_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ganon_objects.xml new file mode 100644 index 000000000..5e32610ff --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ganon_objects.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ge1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ge1.xml new file mode 100644 index 000000000..79e0768b8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ge1.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_geff.xml b/soh/assets/xml/N64_NTSC_12/objects/object_geff.xml new file mode 100644 index 000000000..f0667743b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_geff.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_geldb.xml b/soh/assets/xml/N64_NTSC_12/objects/object_geldb.xml new file mode 100644 index 000000000..49b12ef2e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_geldb.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_arrow.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_arrow.xml new file mode 100644 index 000000000..4b58787a9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_arrow.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_arrowcase.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_arrowcase.xml new file mode 100644 index 000000000..267b0a734 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_arrowcase.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_bean.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bean.xml new file mode 100644 index 000000000..e74247816 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bean.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_bomb_1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bomb_1.xml new file mode 100644 index 000000000..bae86c11d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bomb_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_bomb_2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bomb_2.xml new file mode 100644 index 000000000..1400c4a4d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bomb_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_bombpouch.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bombpouch.xml new file mode 100644 index 000000000..07134748c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bombpouch.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_boomerang.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_boomerang.xml new file mode 100644 index 000000000..3c1a0fe7f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_boomerang.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_boots_2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_boots_2.xml new file mode 100644 index 000000000..3bcb6a47a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_boots_2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_bosskey.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bosskey.xml new file mode 100644 index 000000000..e5e4bc86c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bosskey.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_bottle.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bottle.xml new file mode 100644 index 000000000..3b0884a03 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bottle.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_bottle_letter.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bottle_letter.xml new file mode 100644 index 000000000..443219caf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bottle_letter.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_bow.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bow.xml new file mode 100644 index 000000000..946e9c496 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bow.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_bracelet.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bracelet.xml new file mode 100644 index 000000000..5a0b62a60 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_bracelet.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_brokensword.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_brokensword.xml new file mode 100644 index 000000000..408741ac5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_brokensword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_butterfly.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_butterfly.xml new file mode 100644 index 000000000..7b60a7724 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_butterfly.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_clothes.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_clothes.xml new file mode 100644 index 000000000..3f897b6d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_clothes.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_coin.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_coin.xml new file mode 100644 index 000000000..22e29f255 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_coin.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_compass.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_compass.xml new file mode 100644 index 000000000..076229b11 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_compass.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_dekupouch.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_dekupouch.xml new file mode 100644 index 000000000..8925e6fa5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_dekupouch.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_egg.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_egg.xml new file mode 100644 index 000000000..2b2e2847d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_egg.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_eye_lotion.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_eye_lotion.xml new file mode 100644 index 000000000..5128c5f6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_eye_lotion.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_fire.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_fire.xml new file mode 100644 index 000000000..4bfd76a7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_fire.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_fish.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_fish.xml new file mode 100644 index 000000000..edb39dc29 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_fish.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_frog.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_frog.xml new file mode 100644 index 000000000..a656c306b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_frog.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_gerudo.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_gerudo.xml new file mode 100644 index 000000000..d65daee8e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_gerudo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_gerudomask.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_gerudomask.xml new file mode 100644 index 000000000..cfcb878d9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_gerudomask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_ghost.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ghost.xml new file mode 100644 index 000000000..795f0cfd1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ghost.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_glasses.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_glasses.xml new file mode 100644 index 000000000..63d32ab5a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_glasses.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_gloves.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_gloves.xml new file mode 100644 index 000000000..0e1c4259d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_gloves.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_goddess.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_goddess.xml new file mode 100644 index 000000000..50cbdd891 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_goddess.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_golonmask.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_golonmask.xml new file mode 100644 index 000000000..844d90e71 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_golonmask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_grass.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_grass.xml new file mode 100644 index 000000000..ae7834201 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_grass.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_hammer.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_hammer.xml new file mode 100644 index 000000000..feb5c8659 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_hammer.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_heart.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_heart.xml new file mode 100644 index 000000000..48e78b1b5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_heart.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_hearts.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_hearts.xml new file mode 100644 index 000000000..d2e763e63 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_hearts.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_hookshot.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_hookshot.xml new file mode 100644 index 000000000..a6b3b0fda --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_hookshot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_hoverboots.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_hoverboots.xml new file mode 100644 index 000000000..6d41df8fd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_hoverboots.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_insect.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_insect.xml new file mode 100644 index 000000000..7af5b5b3b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_insect.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_jewel.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_jewel.xml new file mode 100644 index 000000000..e83c65116 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_jewel.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_key.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_key.xml new file mode 100644 index 000000000..a37d45a71 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_key.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_ki_tan_mask.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ki_tan_mask.xml new file mode 100644 index 000000000..46eff7d3e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ki_tan_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_letter.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_letter.xml new file mode 100644 index 000000000..bea868339 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_letter.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_liquid.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_liquid.xml new file mode 100644 index 000000000..18a5c3d7a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_liquid.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_longsword.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_longsword.xml new file mode 100644 index 000000000..7161e42e3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_longsword.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_m_arrow.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_m_arrow.xml new file mode 100644 index 000000000..0fd659ae9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_m_arrow.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_magicpot.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_magicpot.xml new file mode 100644 index 000000000..7623e6353 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_magicpot.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_map.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_map.xml new file mode 100644 index 000000000..471c1dab9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_map.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_medal.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_medal.xml new file mode 100644 index 000000000..28e5b1e68 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_medal.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_melody.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_melody.xml new file mode 100644 index 000000000..b01fca953 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_melody.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_milk.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_milk.xml new file mode 100644 index 000000000..a3e223b3e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_milk.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_mushroom.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_mushroom.xml new file mode 100644 index 000000000..5b19bca74 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_mushroom.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_niwatori.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_niwatori.xml new file mode 100644 index 000000000..c8389f62c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_niwatori.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_nuts.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_nuts.xml new file mode 100644 index 000000000..c59903c43 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_nuts.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_ocarina.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ocarina.xml new file mode 100644 index 000000000..82607677d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ocarina.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_ocarina_0.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ocarina_0.xml new file mode 100644 index 000000000..2c5f70d98 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ocarina_0.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_pachinko.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_pachinko.xml new file mode 100644 index 000000000..5f808baf9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_pachinko.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_powder.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_powder.xml new file mode 100644 index 000000000..fb7dc0155 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_powder.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_prescription.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_prescription.xml new file mode 100644 index 000000000..75ae7eb2b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_prescription.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_purse.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_purse.xml new file mode 100644 index 000000000..054731dec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_purse.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_rabit_mask.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_rabit_mask.xml new file mode 100644 index 000000000..9d4eb9487 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_rabit_mask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_redead_mask.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_redead_mask.xml new file mode 100644 index 000000000..7de08487f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_redead_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_rupy.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_rupy.xml new file mode 100644 index 000000000..0a1af96d0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_rupy.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_saw.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_saw.xml new file mode 100644 index 000000000..dcc038b7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_saw.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_scale.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_scale.xml new file mode 100644 index 000000000..1cf5de5b9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_scale.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_seed.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_seed.xml new file mode 100644 index 000000000..82c15c82d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_seed.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_shield_1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_shield_1.xml new file mode 100644 index 000000000..2f11e3f6d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_shield_1.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_shield_2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_shield_2.xml new file mode 100644 index 000000000..176ae025f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_shield_2.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_shield_3.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_shield_3.xml new file mode 100644 index 000000000..8d1e5dafd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_shield_3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_skj_mask.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_skj_mask.xml new file mode 100644 index 000000000..e6c90f76f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_skj_mask.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_soldout.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_soldout.xml new file mode 100644 index 000000000..a15b1253e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_soldout.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_soul.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_soul.xml new file mode 100644 index 000000000..a68178eba --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_soul.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_stick.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_stick.xml new file mode 100644 index 000000000..fed89f465 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_stick.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_sutaru.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_sutaru.xml new file mode 100644 index 000000000..a2606afbe --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_sutaru.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_sword_1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_sword_1.xml new file mode 100644 index 000000000..e1119abca --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_sword_1.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_ticketstone.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ticketstone.xml new file mode 100644 index 000000000..73bf888d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_ticketstone.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_truth_mask.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_truth_mask.xml new file mode 100644 index 000000000..3b4edf3de --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_truth_mask.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gi_zoramask.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gi_zoramask.xml new file mode 100644 index 000000000..e3b1ab10e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gi_zoramask.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gj.xml new file mode 100644 index 000000000..ee6dab74f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gj.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gjyo_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gjyo_objects.xml new file mode 100644 index 000000000..ea4f8444f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gjyo_objects.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gla.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gla.xml new file mode 100644 index 000000000..499a3720d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gla.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gm.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gm.xml new file mode 100644 index 000000000..91b10cc42 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gm.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gnd.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gnd.xml new file mode 100644 index 000000000..3ae3b57f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gnd.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gnd_magic.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gnd_magic.xml new file mode 100644 index 000000000..a88d419d7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gnd_magic.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gndd.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gndd.xml new file mode 100644 index 000000000..8bf5d770c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gndd.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_god_lgt.xml b/soh/assets/xml/N64_NTSC_12/objects/object_god_lgt.xml new file mode 100644 index 000000000..60df9e469 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_god_lgt.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gol.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gol.xml new file mode 100644 index 000000000..7e04508cb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gol.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_goma.xml b/soh/assets/xml/N64_NTSC_12/objects/object_goma.xml new file mode 100644 index 000000000..ec3e42114 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_goma.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_goroiwa.xml b/soh/assets/xml/N64_NTSC_12/objects/object_goroiwa.xml new file mode 100644 index 000000000..5d406e957 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_goroiwa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gr.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gr.xml new file mode 100644 index 000000000..5f7360ae5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gr.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gs.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gs.xml new file mode 100644 index 000000000..145be1665 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gs.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_gt.xml b/soh/assets/xml/N64_NTSC_12/objects/object_gt.xml new file mode 100644 index 000000000..1d79d4e39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_gt.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_haka.xml b/soh/assets/xml/N64_NTSC_12/objects/object_haka.xml new file mode 100644 index 000000000..f6b263c37 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_haka.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_haka_door.xml b/soh/assets/xml/N64_NTSC_12/objects/object_haka_door.xml new file mode 100644 index 000000000..1376d0356 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_haka_door.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_haka_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_haka_objects.xml new file mode 100644 index 000000000..3ca6d27c0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_haka_objects.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_hakach_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_hakach_objects.xml new file mode 100644 index 000000000..0de02aaf1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_hakach_objects.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_hata.xml b/soh/assets/xml/N64_NTSC_12/objects/object_hata.xml new file mode 100644 index 000000000..b0324c3be --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_hata.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_heavy_object.xml b/soh/assets/xml/N64_NTSC_12/objects/object_heavy_object.xml new file mode 100644 index 000000000..ecc795321 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_heavy_object.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_hidan_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_hidan_objects.xml new file mode 100644 index 000000000..f41c0ee5e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_hidan_objects.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_hintnuts.xml b/soh/assets/xml/N64_NTSC_12/objects/object_hintnuts.xml new file mode 100644 index 000000000..a7290f395 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_hintnuts.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_hni.xml b/soh/assets/xml/N64_NTSC_12/objects/object_hni.xml new file mode 100644 index 000000000..6b317eb7a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_hni.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_horse.xml b/soh/assets/xml/N64_NTSC_12/objects/object_horse.xml new file mode 100644 index 000000000..74619e597 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_horse.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_horse_ganon.xml b/soh/assets/xml/N64_NTSC_12/objects/object_horse_ganon.xml new file mode 100644 index 000000000..0a55462e2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_horse_ganon.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_horse_link_child.xml b/soh/assets/xml/N64_NTSC_12/objects/object_horse_link_child.xml new file mode 100644 index 000000000..146c564f5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_horse_link_child.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_horse_normal.xml b/soh/assets/xml/N64_NTSC_12/objects/object_horse_normal.xml new file mode 100644 index 000000000..2facab39c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_horse_normal.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_horse_zelda.xml b/soh/assets/xml/N64_NTSC_12/objects/object_horse_zelda.xml new file mode 100644 index 000000000..af270c658 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_horse_zelda.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_hs.xml b/soh/assets/xml/N64_NTSC_12/objects/object_hs.xml new file mode 100644 index 000000000..cf5d06e1a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_hs.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_human.xml b/soh/assets/xml/N64_NTSC_12/objects/object_human.xml new file mode 100644 index 000000000..05795cb33 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_human.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ice_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ice_objects.xml new file mode 100644 index 000000000..c7d059d70 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ice_objects.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ik.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ik.xml new file mode 100644 index 000000000..8a6028f7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ik.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_im.xml b/soh/assets/xml/N64_NTSC_12/objects/object_im.xml new file mode 100644 index 000000000..a628a113a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_im.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_in.xml b/soh/assets/xml/N64_NTSC_12/objects/object_in.xml new file mode 100644 index 000000000..84c114047 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_in.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ingate.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ingate.xml new file mode 100644 index 000000000..e6be42beb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ingate.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_jj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_jj.xml new file mode 100644 index 000000000..62bae8cb9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_jj.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_js.xml b/soh/assets/xml/N64_NTSC_12/objects/object_js.xml new file mode 100644 index 000000000..ff7bd3efa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_js.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_jya_door.xml b/soh/assets/xml/N64_NTSC_12/objects/object_jya_door.xml new file mode 100644 index 000000000..60a7b3788 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_jya_door.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_jya_iron.xml b/soh/assets/xml/N64_NTSC_12/objects/object_jya_iron.xml new file mode 100644 index 000000000..c6f6773c6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_jya_iron.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_jya_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_jya_obj.xml new file mode 100644 index 000000000..a1f19b806 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_jya_obj.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ka.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ka.xml new file mode 100644 index 000000000..eb952732b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ka.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_kanban.xml b/soh/assets/xml/N64_NTSC_12/objects/object_kanban.xml new file mode 100644 index 000000000..9ffc7a2ce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_kanban.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_kibako2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_kibako2.xml new file mode 100644 index 000000000..a701b294d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_kibako2.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_kingdodongo.xml b/soh/assets/xml/N64_NTSC_12/objects/object_kingdodongo.xml new file mode 100644 index 000000000..a865c15de --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_kingdodongo.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_km1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_km1.xml new file mode 100644 index 000000000..0a918a798 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_km1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_kusa.xml b/soh/assets/xml/N64_NTSC_12/objects/object_kusa.xml new file mode 100644 index 000000000..67291a554 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_kusa.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_kw1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_kw1.xml new file mode 100644 index 000000000..eab561b1f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_kw1.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_kz.xml b/soh/assets/xml/N64_NTSC_12/objects/object_kz.xml new file mode 100644 index 000000000..4624fefdb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_kz.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_light_ring.xml b/soh/assets/xml/N64_NTSC_12/objects/object_light_ring.xml new file mode 100644 index 000000000..babe7d2aa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_light_ring.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_lightbox.xml b/soh/assets/xml/N64_NTSC_12/objects/object_lightbox.xml new file mode 100644 index 000000000..552a79d7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_lightbox.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_lightswitch.xml b/soh/assets/xml/N64_NTSC_12/objects/object_lightswitch.xml new file mode 100644 index 000000000..cfd5dcfb4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_lightswitch.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_link_boy.xml b/soh/assets/xml/N64_NTSC_12/objects/object_link_boy.xml new file mode 100644 index 000000000..6351af505 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_link_boy.xml @@ -0,0 +1,282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_link_child.xml b/soh/assets/xml/N64_NTSC_12/objects/object_link_child.xml new file mode 100644 index 000000000..0de400373 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_link_child.xml @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ma1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ma1.xml new file mode 100644 index 000000000..63eeb3895 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ma1.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ma2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ma2.xml new file mode 100644 index 000000000..ce5910fb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ma2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mag.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mag.xml new file mode 100644 index 000000000..257f72363 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mag.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mamenoki.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mamenoki.xml new file mode 100644 index 000000000..819d89022 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mamenoki.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mastergolon.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mastergolon.xml new file mode 100644 index 000000000..6dd9d1659 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mastergolon.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_masterkokiri.xml b/soh/assets/xml/N64_NTSC_12/objects/object_masterkokiri.xml new file mode 100644 index 000000000..af5a9ec15 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_masterkokiri.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_masterkokirihead.xml b/soh/assets/xml/N64_NTSC_12/objects/object_masterkokirihead.xml new file mode 100644 index 000000000..c64aa1c49 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_masterkokirihead.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_masterzoora.xml b/soh/assets/xml/N64_NTSC_12/objects/object_masterzoora.xml new file mode 100644 index 000000000..2c703274e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_masterzoora.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mb.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mb.xml new file mode 100644 index 000000000..23c0930c0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mb.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_md.xml b/soh/assets/xml/N64_NTSC_12/objects/object_md.xml new file mode 100644 index 000000000..161c73dca --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_md.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_medal.xml b/soh/assets/xml/N64_NTSC_12/objects/object_medal.xml new file mode 100644 index 000000000..533872a55 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_medal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_menkuri_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_menkuri_objects.xml new file mode 100644 index 000000000..4c2b51df5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_menkuri_objects.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mir_ray.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mir_ray.xml new file mode 100644 index 000000000..2acc9391a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mir_ray.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mizu_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mizu_objects.xml new file mode 100644 index 000000000..5a18b95cf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mizu_objects.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mjin.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mjin.xml new file mode 100644 index 000000000..daf9b0541 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mjin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mjin_dark.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_dark.xml new file mode 100644 index 000000000..2fa0bdbe4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_dark.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mjin_flame.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_flame.xml new file mode 100644 index 000000000..6274feaee --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_flame.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mjin_flash.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_flash.xml new file mode 100644 index 000000000..c1040ea11 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_flash.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mjin_ice.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_ice.xml new file mode 100644 index 000000000..1aaeea193 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_ice.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mjin_oka.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_oka.xml new file mode 100644 index 000000000..0f823b923 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_oka.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mjin_soul.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_soul.xml new file mode 100644 index 000000000..6386f7f9e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_soul.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mjin_wind.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_wind.xml new file mode 100644 index 000000000..8bba7eb91 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mjin_wind.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mk.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mk.xml new file mode 100644 index 000000000..0b4aaae8a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mk.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mm.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mm.xml new file mode 100644 index 000000000..b27837e57 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mm.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mo.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mo.xml new file mode 100644 index 000000000..f450368f3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mo.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri1.xml new file mode 100644 index 000000000..bb1b31e2f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri1.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri1a.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri1a.xml new file mode 100644 index 000000000..c750ce20d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri1a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri2.xml new file mode 100644 index 000000000..785b85857 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri2.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri2a.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri2a.xml new file mode 100644 index 000000000..ad1bb4d5f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mori_hineri2a.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mori_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mori_objects.xml new file mode 100644 index 000000000..58ea8c085 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mori_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mori_tex.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mori_tex.xml new file mode 100644 index 000000000..8ba4ff2d3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mori_tex.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ms.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ms.xml new file mode 100644 index 000000000..a87d0e6b3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ms.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_mu.xml b/soh/assets/xml/N64_NTSC_12/objects/object_mu.xml new file mode 100644 index 000000000..7251ff721 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_mu.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_nb.xml b/soh/assets/xml/N64_NTSC_12/objects/object_nb.xml new file mode 100644 index 000000000..74de9e285 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_nb.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_niw.xml b/soh/assets/xml/N64_NTSC_12/objects/object_niw.xml new file mode 100644 index 000000000..4eafec956 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_niw.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_nwc.xml b/soh/assets/xml/N64_NTSC_12/objects/object_nwc.xml new file mode 100644 index 000000000..96ffa3238 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_nwc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ny.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ny.xml new file mode 100644 index 000000000..e2e8187ff --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ny.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA1.xml new file mode 100644 index 000000000..1d665f101 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA10.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA10.xml new file mode 100644 index 000000000..65d080834 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA10.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA11.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA11.xml new file mode 100644 index 000000000..92ae474b6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA11.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA2.xml new file mode 100644 index 000000000..ffdcd7989 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA2.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA3.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA3.xml new file mode 100644 index 000000000..a492bd875 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA3.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA4.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA4.xml new file mode 100644 index 000000000..dcdbbfff9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA5.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA5.xml new file mode 100644 index 000000000..55072176d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA6.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA6.xml new file mode 100644 index 000000000..c17a51088 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA6.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA7.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA7.xml new file mode 100644 index 000000000..52c68f639 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA7.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA8.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA8.xml new file mode 100644 index 000000000..8ed2d3df5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA8.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oA9.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oA9.xml new file mode 100644 index 000000000..d5c16abfc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oA9.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oB1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oB1.xml new file mode 100644 index 000000000..2f50c967b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oB1.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oB2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oB2.xml new file mode 100644 index 000000000..230783cea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oB2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oB3.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oB3.xml new file mode 100644 index 000000000..1c42ddacc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oB3.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oB4.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oB4.xml new file mode 100644 index 000000000..2924c9e75 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oB4.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE1.xml new file mode 100644 index 000000000..4d5b1663f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE1.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE10.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE10.xml new file mode 100644 index 000000000..04ce91437 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE10.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE11.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE11.xml new file mode 100644 index 000000000..04f6f186d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE11.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE12.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE12.xml new file mode 100644 index 000000000..a5fa39fd2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE12.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE1s.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE1s.xml new file mode 100644 index 000000000..d311e6010 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE1s.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE2.xml new file mode 100644 index 000000000..af62ad6d1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE2.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE3.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE3.xml new file mode 100644 index 000000000..95227da38 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE3.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE4.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE4.xml new file mode 100644 index 000000000..ae48d2ade --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE4.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE4s.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE4s.xml new file mode 100644 index 000000000..6037de52f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE4s.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE5.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE5.xml new file mode 100644 index 000000000..f5edf745a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE5.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE6.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE6.xml new file mode 100644 index 000000000..95bb602b6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE6.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE7.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE7.xml new file mode 100644 index 000000000..b3e588d4c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE7.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE8.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE8.xml new file mode 100644 index 000000000..be5de2494 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE8.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE9.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE9.xml new file mode 100644 index 000000000..8ea7ee18c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE9.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oE_anime.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oE_anime.xml new file mode 100644 index 000000000..f6b4659e2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oE_anime.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oF1d_map.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oF1d_map.xml new file mode 100644 index 000000000..f14fecd82 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oF1d_map.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_oF1s.xml b/soh/assets/xml/N64_NTSC_12/objects/object_oF1s.xml new file mode 100644 index 000000000..fe41dde63 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_oF1s.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_o_anime.xml b/soh/assets/xml/N64_NTSC_12/objects/object_o_anime.xml new file mode 100644 index 000000000..4ef4ac44c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_o_anime.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_okuta.xml b/soh/assets/xml/N64_NTSC_12/objects/object_okuta.xml new file mode 100644 index 000000000..b4fccea6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_okuta.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_opening_demo1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_opening_demo1.xml new file mode 100644 index 000000000..fd0323027 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_opening_demo1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_os.xml b/soh/assets/xml/N64_NTSC_12/objects/object_os.xml new file mode 100644 index 000000000..5880a9293 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_os.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_os_anime.xml b/soh/assets/xml/N64_NTSC_12/objects/object_os_anime.xml new file mode 100644 index 000000000..f23636343 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_os_anime.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ossan.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ossan.xml new file mode 100644 index 000000000..5788e3a20 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ossan.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ouke_haka.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ouke_haka.xml new file mode 100644 index 000000000..11da9b26e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ouke_haka.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_owl.xml b/soh/assets/xml/N64_NTSC_12/objects/object_owl.xml new file mode 100644 index 000000000..64fdf64c5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_owl.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_peehat.xml b/soh/assets/xml/N64_NTSC_12/objects/object_peehat.xml new file mode 100644 index 000000000..42ee66cde --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_peehat.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_po_composer.xml b/soh/assets/xml/N64_NTSC_12/objects/object_po_composer.xml new file mode 100644 index 000000000..ff995efce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_po_composer.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_po_field.xml b/soh/assets/xml/N64_NTSC_12/objects/object_po_field.xml new file mode 100644 index 000000000..78bc0d65a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_po_field.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_po_sisters.xml b/soh/assets/xml/N64_NTSC_12/objects/object_po_sisters.xml new file mode 100644 index 000000000..b429be258 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_po_sisters.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_poh.xml b/soh/assets/xml/N64_NTSC_12/objects/object_poh.xml new file mode 100644 index 000000000..be6d6eff4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_poh.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ps.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ps.xml new file mode 100644 index 000000000..9f9c894a6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ps.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_pu_box.xml b/soh/assets/xml/N64_NTSC_12/objects/object_pu_box.xml new file mode 100644 index 000000000..e1d686e97 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_pu_box.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_rd.xml b/soh/assets/xml/N64_NTSC_12/objects/object_rd.xml new file mode 100644 index 000000000..22c7d3373 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_rd.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_reeba.xml b/soh/assets/xml/N64_NTSC_12/objects/object_reeba.xml new file mode 100644 index 000000000..32c697bd9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_reeba.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_relay_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_relay_objects.xml new file mode 100644 index 000000000..47b92fcd2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_relay_objects.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_rl.xml b/soh/assets/xml/N64_NTSC_12/objects/object_rl.xml new file mode 100644 index 000000000..2a5ad30f6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_rl.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_rr.xml b/soh/assets/xml/N64_NTSC_12/objects/object_rr.xml new file mode 100644 index 000000000..98726b14b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_rr.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_rs.xml b/soh/assets/xml/N64_NTSC_12/objects/object_rs.xml new file mode 100644 index 000000000..152b5489e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_rs.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ru1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ru1.xml new file mode 100644 index 000000000..3d413619f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ru1.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ru2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ru2.xml new file mode 100644 index 000000000..fedf37d48 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ru2.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_sa.xml b/soh/assets/xml/N64_NTSC_12/objects/object_sa.xml new file mode 100644 index 000000000..ec45ac961 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_sa.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_sb.xml b/soh/assets/xml/N64_NTSC_12/objects/object_sb.xml new file mode 100644 index 000000000..64d3bb005 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_sb.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_sd.xml b/soh/assets/xml/N64_NTSC_12/objects/object_sd.xml new file mode 100644 index 000000000..fb58428c3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_sd.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_shop_dungen.xml b/soh/assets/xml/N64_NTSC_12/objects/object_shop_dungen.xml new file mode 100644 index 000000000..594c43d39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_shop_dungen.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_shopnuts.xml b/soh/assets/xml/N64_NTSC_12/objects/object_shopnuts.xml new file mode 100644 index 000000000..7065f8941 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_shopnuts.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_siofuki.xml b/soh/assets/xml/N64_NTSC_12/objects/object_siofuki.xml new file mode 100644 index 000000000..a23240a72 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_siofuki.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_sk2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_sk2.xml new file mode 100644 index 000000000..f2e7ef6d8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_sk2.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_skb.xml b/soh/assets/xml/N64_NTSC_12/objects/object_skb.xml new file mode 100644 index 000000000..5b5efb484 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_skb.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_skj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_skj.xml new file mode 100644 index 000000000..74548e518 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_skj.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot00_break.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot00_break.xml new file mode 100644 index 000000000..d3be88315 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot00_break.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot00_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot00_objects.xml new file mode 100644 index 000000000..10fb13aea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot00_objects.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot01_matoya.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot01_matoya.xml new file mode 100644 index 000000000..d44b944e0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot01_matoya.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot01_matoyab.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot01_matoyab.xml new file mode 100644 index 000000000..720f50cd3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot01_matoyab.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot01_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot01_objects.xml new file mode 100644 index 000000000..413e032a9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot01_objects.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot01_objects2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot01_objects2.xml new file mode 100644 index 000000000..36741a949 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot01_objects2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot02_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot02_objects.xml new file mode 100644 index 000000000..65f45ff51 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot02_objects.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot03_object.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot03_object.xml new file mode 100644 index 000000000..f182e7d99 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot03_object.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot04_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot04_objects.xml new file mode 100644 index 000000000..66293d752 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot04_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot05_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot05_objects.xml new file mode 100644 index 000000000..6e7079149 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot05_objects.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot06_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot06_objects.xml new file mode 100644 index 000000000..e3da63b0f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot06_objects.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot07_object.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot07_object.xml new file mode 100644 index 000000000..5bc2bfb6b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot07_object.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot08_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot08_obj.xml new file mode 100644 index 000000000..4d71f3473 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot08_obj.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot09_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot09_obj.xml new file mode 100644 index 000000000..eb6528393 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot09_obj.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot11_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot11_obj.xml new file mode 100644 index 000000000..257298f7c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot11_obj.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot12_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot12_obj.xml new file mode 100644 index 000000000..d619c781e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot12_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot15_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot15_obj.xml new file mode 100644 index 000000000..bd59b8cd1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot15_obj.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot16_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot16_obj.xml new file mode 100644 index 000000000..d39de812a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot16_obj.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot17_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot17_obj.xml new file mode 100644 index 000000000..d4239d8d2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot17_obj.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_spot18_obj.xml b/soh/assets/xml/N64_NTSC_12/objects/object_spot18_obj.xml new file mode 100644 index 000000000..cc12b7894 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_spot18_obj.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ssh.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ssh.xml new file mode 100644 index 000000000..6283f8e9f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ssh.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_sst.xml b/soh/assets/xml/N64_NTSC_12/objects/object_sst.xml new file mode 100644 index 000000000..d64787fa1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_sst.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_st.xml b/soh/assets/xml/N64_NTSC_12/objects/object_st.xml new file mode 100644 index 000000000..983b9e2ea --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_st.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_stream.xml b/soh/assets/xml/N64_NTSC_12/objects/object_stream.xml new file mode 100644 index 000000000..59b0838e4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_stream.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_syokudai.xml b/soh/assets/xml/N64_NTSC_12/objects/object_syokudai.xml new file mode 100644 index 000000000..c1670edec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_syokudai.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ta.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ta.xml new file mode 100644 index 000000000..5e446bf5c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ta.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_timeblock.xml b/soh/assets/xml/N64_NTSC_12/objects/object_timeblock.xml new file mode 100644 index 000000000..1d6b9e698 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_timeblock.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_tite.xml b/soh/assets/xml/N64_NTSC_12/objects/object_tite.xml new file mode 100644 index 000000000..1be65c495 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_tite.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_tk.xml b/soh/assets/xml/N64_NTSC_12/objects/object_tk.xml new file mode 100644 index 000000000..6b6cce724 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_tk.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_toki_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_toki_objects.xml new file mode 100644 index 000000000..cd07e60d2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_toki_objects.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_torch2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_torch2.xml new file mode 100644 index 000000000..3388e7d34 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_torch2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_toryo.xml b/soh/assets/xml/N64_NTSC_12/objects/object_toryo.xml new file mode 100644 index 000000000..73f3dcb1e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_toryo.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_tp.xml b/soh/assets/xml/N64_NTSC_12/objects/object_tp.xml new file mode 100644 index 000000000..8ea908825 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_tp.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_tr.xml b/soh/assets/xml/N64_NTSC_12/objects/object_tr.xml new file mode 100644 index 000000000..17ab9ae39 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_tr.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_trap.xml b/soh/assets/xml/N64_NTSC_12/objects/object_trap.xml new file mode 100644 index 000000000..56195cf41 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_trap.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_triforce_spot.xml b/soh/assets/xml/N64_NTSC_12/objects/object_triforce_spot.xml new file mode 100644 index 000000000..87d449458 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_triforce_spot.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ts.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ts.xml new file mode 100644 index 000000000..567277bc3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ts.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_tsubo.xml b/soh/assets/xml/N64_NTSC_12/objects/object_tsubo.xml new file mode 100644 index 000000000..ee2c5e184 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_tsubo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_tw.xml b/soh/assets/xml/N64_NTSC_12/objects/object_tw.xml new file mode 100644 index 000000000..d238e10ab --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_tw.xml @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_umajump.xml b/soh/assets/xml/N64_NTSC_12/objects/object_umajump.xml new file mode 100644 index 000000000..2ee4ade46 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_umajump.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_vali.xml b/soh/assets/xml/N64_NTSC_12/objects/object_vali.xml new file mode 100644 index 000000000..2bab5efaa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_vali.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_vase.xml b/soh/assets/xml/N64_NTSC_12/objects/object_vase.xml new file mode 100644 index 000000000..091d4c51e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_vase.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_vm.xml b/soh/assets/xml/N64_NTSC_12/objects/object_vm.xml new file mode 100644 index 000000000..c5b949b36 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_vm.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_wallmaster.xml b/soh/assets/xml/N64_NTSC_12/objects/object_wallmaster.xml new file mode 100644 index 000000000..fbbc4f4af --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_wallmaster.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_warp1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_warp1.xml new file mode 100644 index 000000000..1497d7a10 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_warp1.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_warp2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_warp2.xml new file mode 100644 index 000000000..b6d1b3624 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_warp2.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_wf.xml b/soh/assets/xml/N64_NTSC_12/objects/object_wf.xml new file mode 100644 index 000000000..ebfb708d2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_wf.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_wood02.xml b/soh/assets/xml/N64_NTSC_12/objects/object_wood02.xml new file mode 100644 index 000000000..47ec342ca --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_wood02.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_xc.xml b/soh/assets/xml/N64_NTSC_12/objects/object_xc.xml new file mode 100644 index 000000000..bb2bf3e7a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_xc.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_yabusame_point.xml b/soh/assets/xml/N64_NTSC_12/objects/object_yabusame_point.xml new file mode 100644 index 000000000..bed9e8a60 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_yabusame_point.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_ydan_objects.xml b/soh/assets/xml/N64_NTSC_12/objects/object_ydan_objects.xml new file mode 100644 index 000000000..e2adf307f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_ydan_objects.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_yukabyun.xml b/soh/assets/xml/N64_NTSC_12/objects/object_yukabyun.xml new file mode 100644 index 000000000..d594ebbb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_yukabyun.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_zf.xml b/soh/assets/xml/N64_NTSC_12/objects/object_zf.xml new file mode 100644 index 000000000..7f20eb786 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_zf.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_zg.xml b/soh/assets/xml/N64_NTSC_12/objects/object_zg.xml new file mode 100644 index 000000000..79005516c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_zg.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_zl1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_zl1.xml new file mode 100644 index 000000000..001e5be14 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_zl1.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_zl2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_zl2.xml new file mode 100644 index 000000000..959a919ec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_zl2.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_zl2_anime1.xml b/soh/assets/xml/N64_NTSC_12/objects/object_zl2_anime1.xml new file mode 100644 index 000000000..cada50486 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_zl2_anime1.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_zl2_anime2.xml b/soh/assets/xml/N64_NTSC_12/objects/object_zl2_anime2.xml new file mode 100644 index 000000000..47016e2e0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_zl2_anime2.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_zl4.xml b/soh/assets/xml/N64_NTSC_12/objects/object_zl4.xml new file mode 100644 index 000000000..8e7a2837e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_zl4.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/objects/object_zo.xml b/soh/assets/xml/N64_NTSC_12/objects/object_zo.xml new file mode 100644 index 000000000..77465760e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/objects/object_zo.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Arrow_Fire.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Arrow_Fire.xml new file mode 100644 index 000000000..841be4f89 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Arrow_Fire.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Arrow_Ice.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Arrow_Ice.xml new file mode 100644 index 000000000..811002bc8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Arrow_Ice.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Arrow_Light.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Arrow_Light.xml new file mode 100644 index 000000000..56243b5fc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Arrow_Light.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Bg_Ganon_Otyuka.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Bg_Ganon_Otyuka.xml new file mode 100644 index 000000000..5e2d16753 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Bg_Ganon_Otyuka.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Bg_Jya_Cobra.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Bg_Jya_Cobra.xml new file mode 100644 index 000000000..c23bf356c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Bg_Jya_Cobra.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Dodongo.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Dodongo.xml new file mode 100644 index 000000000..741842575 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Dodongo.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Ganon.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Ganon.xml new file mode 100644 index 000000000..70cf49d2d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Ganon.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Ganon2.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Ganon2.xml new file mode 100644 index 000000000..ad3e1bcc7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Ganon2.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Sst.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Sst.xml new file mode 100644 index 000000000..937e71fcc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Boss_Sst.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Demo_Shd.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Demo_Shd.xml new file mode 100644 index 000000000..b0444edb6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Demo_Shd.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Bili.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Bili.xml new file mode 100644 index 000000000..109b5d512 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Bili.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Clear_Tag.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Clear_Tag.xml new file mode 100644 index 000000000..eadc2c0d7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Clear_Tag.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Ganon_Mant.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Ganon_Mant.xml new file mode 100644 index 000000000..65e866901 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Ganon_Mant.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Ganon_Organ.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Ganon_Organ.xml new file mode 100644 index 000000000..3bc27ac6f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Ganon_Organ.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Holl.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Holl.xml new file mode 100644 index 000000000..1cb407a30 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Holl.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Jsjutan.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Jsjutan.xml new file mode 100644 index 000000000..fc48deac3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Jsjutan.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Kanban.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Kanban.xml new file mode 100644 index 000000000..dd00b7664 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Kanban.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Sda.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Sda.xml new file mode 100644 index 000000000..b65159588 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Sda.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Ssh.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Ssh.xml new file mode 100644 index 000000000..5105ef63e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Ssh.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_St.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_St.xml new file mode 100644 index 000000000..335027747 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_St.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Sth.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Sth.xml new file mode 100644 index 000000000..81bbc8de4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_En_Sth.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_End_Title.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_End_Title.xml new file mode 100644 index 000000000..b2c9cf3f6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_End_Title.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_File_Choose.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_File_Choose.xml new file mode 100644 index 000000000..dba3fe1bb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_File_Choose.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Magic_Dark.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Magic_Dark.xml new file mode 100644 index 000000000..2522b97ac --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Magic_Dark.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Magic_Fire.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Magic_Fire.xml new file mode 100644 index 000000000..8cb56a158 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Magic_Fire.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Magic_Wind.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Magic_Wind.xml new file mode 100644 index 000000000..e09b58a50 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Magic_Wind.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Spot.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Spot.xml new file mode 100644 index 000000000..b5b809a6a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Spot.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Storm.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Storm.xml new file mode 100644 index 000000000..d2ff95ab3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Storm.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe.xml new file mode 100644 index 000000000..97e85cbb3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe2.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe2.xml new file mode 100644 index 000000000..9a94efde0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe2.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe3.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe3.xml new file mode 100644 index 000000000..c675cba2f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe4.xml b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe4.xml new file mode 100644 index 000000000..bdd1b567d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/overlays/ovl_Oceff_Wipe4.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/Bmori1.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/Bmori1.xml new file mode 100644 index 000000000..ad4311426 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/Bmori1.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/FIRE_bs.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/FIRE_bs.xml new file mode 100644 index 000000000..89331ecc2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/FIRE_bs.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HAKAdan.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HAKAdan.xml new file mode 100644 index 000000000..e557c80a5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HAKAdan.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HAKAdanCH.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HAKAdanCH.xml new file mode 100644 index 000000000..97401aff6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HAKAdanCH.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HAKAdan_bs.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HAKAdan_bs.xml new file mode 100644 index 000000000..d36ac6b77 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HAKAdan_bs.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HIDAN.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HIDAN.xml new file mode 100644 index 000000000..fa4d784f1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/HIDAN.xml @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/MIZUsin.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/MIZUsin.xml new file mode 100644 index 000000000..00c5aa82d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/MIZUsin.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/MIZUsin_bs.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/MIZUsin_bs.xml new file mode 100644 index 000000000..99ae2b3ef --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/MIZUsin_bs.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/bdan.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/bdan.xml new file mode 100644 index 000000000..a9e520f4c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/bdan.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/bdan_boss.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/bdan_boss.xml new file mode 100644 index 000000000..9fccf2c30 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/bdan_boss.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ddan.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ddan.xml new file mode 100644 index 000000000..1446a9c98 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ddan.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ddan_boss.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ddan_boss.xml new file mode 100644 index 000000000..05633e53e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ddan_boss.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon.xml new file mode 100644 index 000000000..f857dbe94 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_boss.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_boss.xml new file mode 100644 index 000000000..36c5e8107 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_boss.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_demo.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_demo.xml new file mode 100644 index 000000000..56c98efed --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_demo.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_final.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_final.xml new file mode 100644 index 000000000..3ec568cfb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_final.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_sonogo.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_sonogo.xml new file mode 100644 index 000000000..84ef36950 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_sonogo.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_tou.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_tou.xml new file mode 100644 index 000000000..1ae37b963 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganon_tou.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganontika.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganontika.xml new file mode 100644 index 000000000..a5ff210ce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganontika.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganontikasonogo.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganontikasonogo.xml new file mode 100644 index 000000000..060d4941b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ganontikasonogo.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/gerudoway.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/gerudoway.xml new file mode 100644 index 000000000..827277614 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/gerudoway.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ice_doukutu.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ice_doukutu.xml new file mode 100644 index 000000000..0f1bc3b28 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ice_doukutu.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/jyasinboss.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/jyasinboss.xml new file mode 100644 index 000000000..86c0d317b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/jyasinboss.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/jyasinzou.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/jyasinzou.xml new file mode 100644 index 000000000..bc14a46ac --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/jyasinzou.xml @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/men.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/men.xml new file mode 100644 index 000000000..d9e5960e8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/men.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/moribossroom.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/moribossroom.xml new file mode 100644 index 000000000..b9959eefa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/moribossroom.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ydan.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ydan.xml new file mode 100644 index 000000000..aed7d2660 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ydan.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ydan_boss.xml b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ydan_boss.xml new file mode 100644 index 000000000..7ea240547 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/dungeons/ydan_boss.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/bowling.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/bowling.xml new file mode 100644 index 000000000..9a41763a2 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/bowling.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/daiyousei_izumi.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/daiyousei_izumi.xml new file mode 100644 index 000000000..4f9a03fc0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/daiyousei_izumi.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/hairal_niwa.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hairal_niwa.xml new file mode 100644 index 000000000..06d89f2fe --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hairal_niwa.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/hairal_niwa_n.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hairal_niwa_n.xml new file mode 100644 index 000000000..6f4c181e0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hairal_niwa_n.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/hakasitarelay.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hakasitarelay.xml new file mode 100644 index 000000000..91be63d14 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hakasitarelay.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/hut.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hut.xml new file mode 100644 index 000000000..a4ef5715f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hut.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/hylia_labo.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hylia_labo.xml new file mode 100644 index 000000000..56822e67a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/hylia_labo.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/impa.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/impa.xml new file mode 100644 index 000000000..db757e3d3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/impa.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/kakariko.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kakariko.xml new file mode 100644 index 000000000..e4e9b102c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kakariko.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/kenjyanoma.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kenjyanoma.xml new file mode 100644 index 000000000..4e8a58f3b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kenjyanoma.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home.xml new file mode 100644 index 000000000..8c0305493 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home3.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home3.xml new file mode 100644 index 000000000..9f36eb41c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home4.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home4.xml new file mode 100644 index 000000000..eb861aedb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home4.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home5.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home5.xml new file mode 100644 index 000000000..974987fed --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/kokiri_home5.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/labo.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/labo.xml new file mode 100644 index 000000000..c0a9d2eb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/labo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/link_home.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/link_home.xml new file mode 100644 index 000000000..2fb88ae34 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/link_home.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/mahouya.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/mahouya.xml new file mode 100644 index 000000000..8ae462f9d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/mahouya.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/malon_stable.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/malon_stable.xml new file mode 100644 index 000000000..aff97eeb8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/malon_stable.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/miharigoya.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/miharigoya.xml new file mode 100644 index 000000000..63f8676ac --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/miharigoya.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/nakaniwa.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/nakaniwa.xml new file mode 100644 index 000000000..2fb2d5e6a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/nakaniwa.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/syatekijyou.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/syatekijyou.xml new file mode 100644 index 000000000..05243b52c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/syatekijyou.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/takaraya.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/takaraya.xml new file mode 100644 index 000000000..5b438980b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/takaraya.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/tent.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/tent.xml new file mode 100644 index 000000000..de72cc5f4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/tent.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/tokinoma.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/tokinoma.xml new file mode 100644 index 000000000..d7878b895 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/tokinoma.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/yousei_izumi_tate.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/yousei_izumi_tate.xml new file mode 100644 index 000000000..3b6dd2dec --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/yousei_izumi_tate.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/indoors/yousei_izumi_yoko.xml b/soh/assets/xml/N64_NTSC_12/scenes/indoors/yousei_izumi_yoko.xml new file mode 100644 index 000000000..90a8d95d0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/indoors/yousei_izumi_yoko.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/enrui.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/enrui.xml new file mode 100644 index 000000000..d8c06e545 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/enrui.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/entra_n.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/entra_n.xml new file mode 100644 index 000000000..5b408ac3a --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/entra_n.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/hakaana.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/hakaana.xml new file mode 100644 index 000000000..e7dc93dd0 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/hakaana.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/hakaana2.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/hakaana2.xml new file mode 100644 index 000000000..2d8ba4906 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/hakaana2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/hakaana_ouke.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/hakaana_ouke.xml new file mode 100644 index 000000000..17f53613e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/hakaana_ouke.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/hiral_demo.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/hiral_demo.xml new file mode 100644 index 000000000..1331fdd4c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/hiral_demo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/kakariko3.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/kakariko3.xml new file mode 100644 index 000000000..07b62c44d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/kakariko3.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/kakusiana.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/kakusiana.xml new file mode 100644 index 000000000..c3f993ff4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/kakusiana.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/kinsuta.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/kinsuta.xml new file mode 100644 index 000000000..aac0f6c4e --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/kinsuta.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/market_alley.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_alley.xml new file mode 100644 index 000000000..c30467303 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_alley.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/market_alley_n.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_alley_n.xml new file mode 100644 index 000000000..65db60411 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_alley_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/market_day.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_day.xml new file mode 100644 index 000000000..00887e69c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_day.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/market_night.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_night.xml new file mode 100644 index 000000000..c58e38744 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_night.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/market_ruins.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_ruins.xml new file mode 100644 index 000000000..f0ec75e75 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/market_ruins.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/shrine.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/shrine.xml new file mode 100644 index 000000000..b9ddf2cf7 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/shrine.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/shrine_n.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/shrine_n.xml new file mode 100644 index 000000000..4878338aa --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/shrine_n.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/shrine_r.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/shrine_r.xml new file mode 100644 index 000000000..122036791 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/shrine_r.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/misc/turibori.xml b/soh/assets/xml/N64_NTSC_12/scenes/misc/turibori.xml new file mode 100644 index 000000000..0633224d9 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/misc/turibori.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/entra.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/entra.xml new file mode 100644 index 000000000..92ee57f59 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/entra.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/souko.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/souko.xml new file mode 100644 index 000000000..8dd9d9e48 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/souko.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot00.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot00.xml new file mode 100644 index 000000000..508d9309b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot00.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot01.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot01.xml new file mode 100644 index 000000000..eb725afa6 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot01.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot02.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot02.xml new file mode 100644 index 000000000..c7924c29d --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot02.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot03.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot03.xml new file mode 100644 index 000000000..9434185f4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot03.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot04.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot04.xml new file mode 100644 index 000000000..f33860420 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot04.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot05.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot05.xml new file mode 100644 index 000000000..4f7c62b91 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot05.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot06.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot06.xml new file mode 100644 index 000000000..f4af602cf --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot06.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot07.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot07.xml new file mode 100644 index 000000000..eeb976f7f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot07.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot08.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot08.xml new file mode 100644 index 000000000..86582f0dc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot08.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot09.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot09.xml new file mode 100644 index 000000000..5bb9e059c --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot09.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot10.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot10.xml new file mode 100644 index 000000000..66365e3d8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot10.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot11.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot11.xml new file mode 100644 index 000000000..76ff3b822 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot11.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot12.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot12.xml new file mode 100644 index 000000000..e21523b21 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot12.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot13.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot13.xml new file mode 100644 index 000000000..c68913065 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot13.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot15.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot15.xml new file mode 100644 index 000000000..e75f7b684 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot15.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot16.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot16.xml new file mode 100644 index 000000000..f41b226f8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot16.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot17.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot17.xml new file mode 100644 index 000000000..feb267251 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot17.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot18.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot18.xml new file mode 100644 index 000000000..d70fccf4b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot18.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot20.xml b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot20.xml new file mode 100644 index 000000000..1381f6ecb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/overworld/spot20.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/shops/alley_shop.xml b/soh/assets/xml/N64_NTSC_12/scenes/shops/alley_shop.xml new file mode 100644 index 000000000..95548de1b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/shops/alley_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/shops/drag.xml b/soh/assets/xml/N64_NTSC_12/scenes/shops/drag.xml new file mode 100644 index 000000000..acb6515fb --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/shops/drag.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/shops/face_shop.xml b/soh/assets/xml/N64_NTSC_12/scenes/shops/face_shop.xml new file mode 100644 index 000000000..16a974608 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/shops/face_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/shops/golon.xml b/soh/assets/xml/N64_NTSC_12/scenes/shops/golon.xml new file mode 100644 index 000000000..c58672798 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/shops/golon.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/shops/kokiri_shop.xml b/soh/assets/xml/N64_NTSC_12/scenes/shops/kokiri_shop.xml new file mode 100644 index 000000000..50cd633e5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/shops/kokiri_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/shops/night_shop.xml b/soh/assets/xml/N64_NTSC_12/scenes/shops/night_shop.xml new file mode 100644 index 000000000..5954d9c83 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/shops/night_shop.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/shops/shop1.xml b/soh/assets/xml/N64_NTSC_12/scenes/shops/shop1.xml new file mode 100644 index 000000000..525a06d63 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/shops/shop1.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/scenes/shops/zoora.xml b/soh/assets/xml/N64_NTSC_12/scenes/shops/zoora.xml new file mode 100644 index 000000000..0e4ac18f8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/scenes/shops/zoora.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/text/elf_message_field.xml b/soh/assets/xml/N64_NTSC_12/text/elf_message_field.xml new file mode 100644 index 000000000..789a554ce --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/text/elf_message_field.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_12/text/elf_message_ydan.xml b/soh/assets/xml/N64_NTSC_12/text/elf_message_ydan.xml new file mode 100644 index 000000000..f784afcf4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/text/elf_message_ydan.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_12/text/message_data_static.xml b/soh/assets/xml/N64_NTSC_12/text/message_data_static.xml new file mode 100644 index 000000000..7315e03a4 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/text/message_data_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/backgrounds.xml b/soh/assets/xml/N64_NTSC_12/textures/backgrounds.xml new file mode 100644 index 000000000..c60ff57a8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/backgrounds.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/boss_title_cards.xml b/soh/assets/xml/N64_NTSC_12/textures/boss_title_cards.xml new file mode 100644 index 000000000..84f555bd1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/boss_title_cards.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_12/textures/do_action_static.xml b/soh/assets/xml/N64_NTSC_12/textures/do_action_static.xml new file mode 100644 index 000000000..efabd54a5 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/do_action_static.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/icon_item_24_static.xml b/soh/assets/xml/N64_NTSC_12/textures/icon_item_24_static.xml new file mode 100644 index 000000000..cdb8cc737 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/icon_item_24_static.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/icon_item_dungeon_static.xml b/soh/assets/xml/N64_NTSC_12/textures/icon_item_dungeon_static.xml new file mode 100644 index 000000000..873c490fc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/icon_item_dungeon_static.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/icon_item_field_static.xml b/soh/assets/xml/N64_NTSC_12/textures/icon_item_field_static.xml new file mode 100644 index 000000000..ed991406b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/icon_item_field_static.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/icon_item_gameover_static.xml b/soh/assets/xml/N64_NTSC_12/textures/icon_item_gameover_static.xml new file mode 100644 index 000000000..ffd392868 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/icon_item_gameover_static.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/icon_item_jpn_static.xml b/soh/assets/xml/N64_NTSC_12/textures/icon_item_jpn_static.xml new file mode 100644 index 000000000..f2fe854b8 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/icon_item_jpn_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/icon_item_nes_static.xml b/soh/assets/xml/N64_NTSC_12/textures/icon_item_nes_static.xml new file mode 100644 index 000000000..6cd92acfc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/icon_item_nes_static.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/icon_item_static.xml b/soh/assets/xml/N64_NTSC_12/textures/icon_item_static.xml new file mode 100644 index 000000000..9e844615b --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/icon_item_static.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/item_name_static.xml b/soh/assets/xml/N64_NTSC_12/textures/item_name_static.xml new file mode 100644 index 000000000..266b3c200 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/item_name_static.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/kanji.xml b/soh/assets/xml/N64_NTSC_12/textures/kanji.xml new file mode 100644 index 000000000..5159387a1 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/kanji.xml @@ -0,0 +1,3984 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_12/textures/map_48x85_static.xml b/soh/assets/xml/N64_NTSC_12/textures/map_48x85_static.xml new file mode 100644 index 000000000..b2ea46340 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/map_48x85_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/soh/assets/xml/N64_NTSC_12/textures/map_grand_static.xml b/soh/assets/xml/N64_NTSC_12/textures/map_grand_static.xml new file mode 100644 index 000000000..201955bfc --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/map_grand_static.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/map_i_static.xml b/soh/assets/xml/N64_NTSC_12/textures/map_i_static.xml new file mode 100644 index 000000000..1721f6d84 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/map_i_static.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/map_name_static.xml b/soh/assets/xml/N64_NTSC_12/textures/map_name_static.xml new file mode 100644 index 000000000..ca4c4c0bd --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/map_name_static.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/message_static.xml b/soh/assets/xml/N64_NTSC_12/textures/message_static.xml new file mode 100644 index 000000000..afdde60de --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/message_static.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/message_texture_static.xml b/soh/assets/xml/N64_NTSC_12/textures/message_texture_static.xml new file mode 100644 index 000000000..bbf7e1259 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/message_texture_static.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/nes_font_static.xml b/soh/assets/xml/N64_NTSC_12/textures/nes_font_static.xml new file mode 100644 index 000000000..f1b80ee04 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/nes_font_static.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/nintendo_rogo_static.xml b/soh/assets/xml/N64_NTSC_12/textures/nintendo_rogo_static.xml new file mode 100644 index 000000000..f09de3b0f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/nintendo_rogo_static.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/parameter_static.xml b/soh/assets/xml/N64_NTSC_12/textures/parameter_static.xml new file mode 100644 index 000000000..c51dacf1f --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/parameter_static.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/place_title_cards.xml b/soh/assets/xml/N64_NTSC_12/textures/place_title_cards.xml new file mode 100644 index 000000000..b688cce00 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/place_title_cards.xml @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/skyboxes.xml b/soh/assets/xml/N64_NTSC_12/textures/skyboxes.xml new file mode 100644 index 000000000..104ffb2a3 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/skyboxes.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_NTSC_12/textures/title_static.xml b/soh/assets/xml/N64_NTSC_12/textures/title_static.xml new file mode 100644 index 000000000..5f58c5a82 --- /dev/null +++ b/soh/assets/xml/N64_NTSC_12/textures/title_static.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/xml/N64_PAL_10/code/sys_matrix.xml b/soh/assets/xml/N64_PAL_10/code/sys_matrix.xml index 7877d0bdf..61886ffbe 100644 --- a/soh/assets/xml/N64_PAL_10/code/sys_matrix.xml +++ b/soh/assets/xml/N64_PAL_10/code/sys_matrix.xml @@ -1,5 +1,5 @@ - + diff --git a/soh/assets/xml/N64_PAL_10/objects/gameplay_keep.xml b/soh/assets/xml/N64_PAL_10/objects/gameplay_keep.xml index 5ffc52f65..882422884 100644 --- a/soh/assets/xml/N64_PAL_10/objects/gameplay_keep.xml +++ b/soh/assets/xml/N64_PAL_10/objects/gameplay_keep.xml @@ -7,6 +7,8 @@ + + diff --git a/soh/assets/xml/N64_PAL_11/code/sys_matrix.xml b/soh/assets/xml/N64_PAL_11/code/sys_matrix.xml index cee1835e9..3c50f9012 100644 --- a/soh/assets/xml/N64_PAL_11/code/sys_matrix.xml +++ b/soh/assets/xml/N64_PAL_11/code/sys_matrix.xml @@ -1,5 +1,5 @@ - + diff --git a/soh/assets/xml/N64_PAL_11/objects/gameplay_keep.xml b/soh/assets/xml/N64_PAL_11/objects/gameplay_keep.xml index 5ffc52f65..882422884 100644 --- a/soh/assets/xml/N64_PAL_11/objects/gameplay_keep.xml +++ b/soh/assets/xml/N64_PAL_11/objects/gameplay_keep.xml @@ -7,6 +7,8 @@ + + diff --git a/soh/include/functions.h b/soh/include/functions.h index 147500c66..86e3bf77f 100644 --- a/soh/include/functions.h +++ b/soh/include/functions.h @@ -901,9 +901,8 @@ s32 Jpeg_Decode(void* data, void* zbuffer, void* workBuff, u32 workSize); void KaleidoSetup_Update(PlayState* play); void KaleidoSetup_Init(PlayState* play); void KaleidoSetup_Destroy(PlayState* play); -void func_8006EE50(Font* font, u16 arg1, u16 arg2); +void Font_LoadCharWide(Font* font, u16 arg1, u16 arg2); void Font_LoadChar(Font* font, u8 character, u16 codePointIndex); -void* Font_FetchCharTexture(u8 character); void Font_LoadMessageBoxIcon(Font* font, u16 icon); void Font_LoadOrderedFont(Font* font); s32 func_8006F0A0(s32 arg0); @@ -2418,7 +2417,6 @@ u8 Message_GetState(MessageContext* msgCtx); void Message_Draw(PlayState* play); void Message_Update(PlayState* play); void Message_SetTables(void); -f32 Message_GetCharacterWidth(unsigned char characterIndex); void GameOver_Init(PlayState* play); void GameOver_FadeInLights(PlayState* play); void GameOver_Update(PlayState* play); @@ -2447,9 +2445,13 @@ void Message_OpenText(PlayState* play, u16 textId); void Message_Decode(PlayState* play); void Message_DrawText(PlayState* play, Gfx** gfxP); +// #region SOH [NTSC Support] +s32 Kanji_OffsetFromShiftJIS(u32 arg0); +void Font_LoadOrderedFontNTSC(Font* font); +// #endregion + // #region SOH [General] -void Interface_CreateQuadVertexGroup(Vtx* vtxList, s32 xStart, s32 yStart, s32 width, s32 height, u8 flippedH); void Interface_RandoRestoreSwordless(void); s32 Ship_CalcShouldDrawAndUpdate(PlayState* play, Actor* actor, Vec3f* projectedPos, f32 projectedW, bool* shouldDraw, bool* shouldUpdate); diff --git a/soh/include/macros.h b/soh/include/macros.h index 302e3755d..325fb91b6 100644 --- a/soh/include/macros.h +++ b/soh/include/macros.h @@ -8,6 +8,10 @@ // #define __attribute__(x) // #endif +// this was removed from the LUS rcp.h in https://github.com/Kenix3/libultraship/pull/833/ +// it is still used in graph.c and fault.c +#define HW_REG(reg, type) *(volatile type*)((reg) | 0xA0000000) + // SoH [Port] Always use the AVOID_UB version (we don't set AVOID_UB while building yet) /* #ifndef AVOID_UB diff --git a/soh/include/message_data_fmt.h b/soh/include/message_data_fmt.h index fffac116c..5506268e9 100644 --- a/soh/include/message_data_fmt.h +++ b/soh/include/message_data_fmt.h @@ -173,6 +173,40 @@ #define MESSAGE_FISH_INFO HEX(CTRL_FISH_INFO) #define MESSAGE_HIGHSCORE HEX(CTRL_HIGHSCORE) #define MESSAGE_TIME HEX(CTRL_TIME) + +#define MESSAGE_NEWLINE_JPN 0x000A +#define MESSAGE_END_JPN 0x8170 +#define MESSAGE_BOX_BREAK_JPN 0x81A5 +#define MESSAGE_COLOR_JPN 0x000B +#define MESSAGE_SHIFT_JPN 0x86C7 +#define MESSAGE_TEXTID_JPN 0x81CB +#define MESSAGE_QUICKTEXT_ENABLE_JPN 0x8189 +#define MESSAGE_QUICKTEXT_DISABLE_JPN 0x818A +#define MESSAGE_PERSISTENT_JPN 0x86C8 +#define MESSAGE_EVENT_JPN 0x819F +#define MESSAGE_BOX_BREAK_DELAYED_JPN 0x81A3 +#define MESSAGE_AWAIT_BUTTON_PRESS_JPN 0x81A4 +#define MESSAGE_FADE_JPN 0x819E +#define MESSAGE_NAME_JPN 0x874F +#define MESSAGE_OCARINA_JPN 0x81F0 +#define MESSAGE_FADE2_JPN 0x81F4 +#define MESSAGE_SFX_JPN 0x81F3 +#define MESSAGE_ITEM_ICON_JPN 0x819A +#define MESSAGE_TEXT_SPEED_JPN 0x86C9 +#define MESSAGE_BACKGROUND_JPN 0x86B3 +#define MESSAGE_MARATHON_TIME_JPN 0x8791 +#define MESSAGE_RACE_TIME_JPN 0x8792 +#define MESSAGE_POINTS_JPN 0x879B +#define MESSAGE_TOKENS_JPN 0x86A3 +#define MESSAGE_UNSKIPPABLE_JPN 0x8199 +#define MESSAGE_TWO_CHOICE_JPN 0x81BC +#define MESSAGE_THREE_CHOICE_JPN 0x81B8 +#define MESSAGE_FISH_INFO_JPN 0x86A4 +#define MESSAGE_HIGHSCORE_JPN 0x869F +#define MESSAGE_TIME_JPN 0x81A1 + +#define MESSAGE_SPACE_JPN 0x8140 + #endif #endif diff --git a/soh/include/z64.h b/soh/include/z64.h index 882d3dd9a..99835304f 100644 --- a/soh/include/z64.h +++ b/soh/include/z64.h @@ -540,6 +540,7 @@ typedef enum { LANGUAGE_ENG, LANGUAGE_GER, LANGUAGE_FRA, + LANGUAGE_JPN, LANGUAGE_MAX } Language; @@ -662,7 +663,10 @@ typedef struct { /* 0xE300 */ s32 msgLength; // original name : "msg_data" /* 0xE304 */ u8 msgMode; // original name: "msg_mode" /* 0xE305 */ char unk_E305[0x1]; - /* 0xE306 */ u8 msgBufDecoded[200]; // decoded message buffer, may be smaller than this + /* 0xE306 */ union { + u8 msgBufDecoded[200]; + u16 msgBufDecodedWide[100]; + }; // decoded message buffer, may be smaller than this /* 0xE3CE */ u16 msgBufPos; // original name : "rdp" /* 0xE3D0 */ u16 unk_E3D0; // unused, only ever set to 0 /* 0xE3D2 */ u16 textDrawPos; // draw all decoded characters up to this buffer position @@ -1327,12 +1331,15 @@ typedef struct { } SceneSelectLoadingMessages; typedef struct { + /* */ char* japaneseAge; /* */ char* englishAge; /* */ char* germanAge; /* */ char* frenchAge; } BetterSceneSelectAgeLabels; +// NTSC TODO: japanese bettersceneselect typedef struct { +// /* */ char* japaneseName; /* */ char* englishName; /* */ char* germanName; /* */ char* frenchName; @@ -1341,6 +1348,7 @@ typedef struct { } BetterSceneSelectEntrancePair; typedef struct { + // /* */ char* japaneseName; /* */ char* englishName; /* */ char* germanName; /* */ char* frenchName; diff --git a/soh/include/z64save.h b/soh/include/z64save.h index f7873031f..751ad0b0f 100644 --- a/soh/include/z64save.h +++ b/soh/include/z64save.h @@ -186,6 +186,7 @@ typedef struct ShipSaveContextData { FaroresWindData backupFW; ShipQuestSaveContextData quest; u8 maskMemory; + u8 filenameLanguage; //TODO: Move non-rando specific flags to a new sohInf and move the remaining randomizerInf to ShipRandomizerSaveContextData u16 randomizerInf[(RAND_INF_MAX + 15) / 16]; } ShipSaveContextData; @@ -202,7 +203,7 @@ typedef struct { /* 0x0018 */ s32 bgsDayCount; // increments with totalDays, can be cleared with `Environment_ClearBgsDayCount` /* 0x001C */ char newf[6]; // string "ZELDAZ". start of `info` substruct, originally called "information" /* 0x0022 */ u16 deaths; - /* 0x0024 */ char playerName[8]; + /* 0x0024 */ u8 playerName[8]; /* 0x002C */ s16 n64ddFlag; /* 0x002E */ s16 healthCapacity; // "max_life" /* 0x0030 */ s16 health; // "now_life" @@ -260,17 +261,17 @@ typedef struct { /* 0x13C8 */ s16 nayrusLoveTimer; /* 0x13CA */ char unk_13CA[0x0002]; /* 0x13CC */ s16 rupeeAccumulator; - /* 0x13CE */ s16 timer1State; - /* 0x13D0 */ s16 timer1Value; - /* 0x13D2 */ s16 timer2State; - /* 0x13D4 */ s16 timer2Value; + /* 0x13CE */ s16 timerState; + /* 0x13D0 */ s16 timerSeconds; + /* 0x13D2 */ s16 subTimerState; + /* 0x13D4 */ s16 subTimerSeconds; /* 0x13D6 */ s16 timerX[2]; /* 0x13DA */ s16 timerY[2]; /* 0x13DE */ char unk_13DE[0x0002]; /* 0x13E0 */ u8 seqId; /* 0x13E1 */ u8 natureAmbienceId; /* 0x13E2 */ u8 buttonStatus[9]; // SOH [Enhancements] Changed from 5 to 9 to support Dpad equips - /* 0x13E7 */ u8 unk_13E7; // alpha related + /* 0x13E7 */ u8 forceRisingButtonAlphas; // alpha related /* 0x13E8 */ u16 unk_13E8; // alpha type? /* 0x13EA */ u16 unk_13EA; // also alpha type? /* 0x13EC */ u16 unk_13EC; // alpha type counter? diff --git a/soh/platform/pathconf.c b/soh/platform/pathconf.c index 9e4111db3..a52d313a5 100644 --- a/soh/platform/pathconf.c +++ b/soh/platform/pathconf.c @@ -1,5 +1,5 @@ #include -long pathconf(const char *path, int name) { +long pathconf(const char* path, int name) { return -1; } \ No newline at end of file diff --git a/soh/resource.h b/soh/resource.h index 8a193b3e8..771a9af38 100644 --- a/soh/resource.h +++ b/soh/resource.h @@ -2,15 +2,15 @@ // Microsoft Visual C++ generated include file. // Used by Resource.rc // -#define IDI_ICON1 111 +#define IDI_ICON1 111 // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 113 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 +#define _APS_NEXT_RESOURCE_VALUE 113 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/soh/soh/ActorDB.cpp b/soh/soh/ActorDB.cpp index 880b2dab9..70ea29675 100644 --- a/soh/soh/ActorDB.cpp +++ b/soh/soh/ActorDB.cpp @@ -4,7 +4,6 @@ ActorDB* ActorDB::Instance; - #define DEFINE_ACTOR(name, _1, _2) extern "C" ActorInit name##_InitVars; #define DEFINE_ACTOR_INTERNAL(name, _1, _2) extern "C" ActorInit name##_InitVars; #define DEFINE_ACTOR_UNSET(_0) @@ -462,9 +461,10 @@ static constexpr std::pair actorDescriptionData[] = { { ACTOR_EN_ZL4, "Zelda (Child)" }, { ACTOR_EN_MM2, "Running Man (Adult Era)" }, { ACTOR_BG_JYA_BLOCK, "Silver Block (Child Era)" }, - { ACTOR_OBJ_WARP2BLOCK, "Navi Infospot (Green, Time Block)" } + { ACTOR_OBJ_WARP2BLOCK, "Navi Infospot (Green, Time Block)" }, }; -static std::unordered_map actorDescriptions = std::unordered_map(std::begin(actorDescriptionData), std::end(actorDescriptionData)); +static std::unordered_map actorDescriptions = + std::unordered_map(std::begin(actorDescriptionData), std::end(actorDescriptionData)); ActorDB::ActorDB() { db.reserve(ACTOR_NUMBER_MAX); // reserve size for all initial entries so we don't do it for each @@ -475,7 +475,8 @@ ActorDB::ActorDB() { // Adds an actor at the given index. The name must be unique. ActorDB::Entry& ActorDB::AddEntry(const std::string& name, const std::string& desc, size_t index) { - assert(!nameTable.contains(name)); // TODO this should maybe throw instead. We'll need to think about error handling for mods that try to declare the same actor. + assert(!nameTable.contains(name)); // TODO this should maybe throw instead. We'll need to think about error handling + // for mods that try to declare the same actor. if (db.size() < (index + 1)) { db.resize(index + 1); @@ -513,7 +514,8 @@ ActorDB::Entry& ActorDB::AddEntry(const std::string& name, const std::string& de return entry; } -// Adds an actor with the new ActorDBInit struct. The id assigned to the actor is dynamic. Use the return Entry or RetrieveId to get it. +// Adds an actor with the new ActorDBInit struct. The id assigned to the actor is dynamic. Use the return Entry or +// RetrieveId to get it. ActorDB::Entry& ActorDB::AddEntry(const ActorDBInit& init) { Entry& entry = AddEntry(init.name, init.desc, nextFreeId); @@ -598,7 +600,8 @@ static ActorDBInit EnPartnerInit = { "En_Partner", "Ivan", ACTORCAT_ITEMACTION, - (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER | ACTOR_FLAG_CAN_PRESS_SWITCHES), + (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED | ACTOR_FLAG_HOOKSHOT_PULLS_PLAYER | + ACTOR_FLAG_CAN_PRESS_SWITCHES), OBJECT_GAMEPLAY_KEEP, sizeof(EnPartner), (ActorFunc)EnPartner_Init, diff --git a/soh/soh/ActorDB.h b/soh/soh/ActorDB.h index 8bcbb3f6a..dd8ecf901 100644 --- a/soh/soh/ActorDB.h +++ b/soh/soh/ActorDB.h @@ -39,7 +39,7 @@ struct ActorDBInit { }; class ActorDB { -public: + public: static ActorDB* Instance; ActorDB(); @@ -65,7 +65,8 @@ public: static void AddBuiltInCustomActors(); int GetEntryCount(); -private: + + private: Entry& AddEntry(const std::string& name, const std::string& desc, size_t index); Entry& AddEntry(const std::string& name, const std::string& desc, const ActorInit& init); diff --git a/soh/soh/CrashHandlerExp.h b/soh/soh/CrashHandlerExp.h index fd57bba42..8cda6e61e 100644 --- a/soh/soh/CrashHandlerExp.h +++ b/soh/soh/CrashHandlerExp.h @@ -1,11 +1,10 @@ #include - #ifdef __cplusplus extern "C" { #endif -void CrashHandler_PrintSohData(char* buffer, size_t* pos); +void CrashHandler_PrintSohData(char* buffer, size_t* pos); #ifdef __cplusplus } diff --git a/soh/soh/CrashHandlerExt.cpp b/soh/soh/CrashHandlerExt.cpp index c4a535f12..cc9c7b1ee 100644 --- a/soh/soh/CrashHandlerExt.cpp +++ b/soh/soh/CrashHandlerExt.cpp @@ -22,7 +22,7 @@ static std::array sCatToStrArray{ #define DEFINE_SCENE(_1, _2, enumName, _4, _5, _6) #enumName static std::array sSceneIdToStrArray{ - #include "tables/scene_table.h" +#include "tables/scene_table.h" }; #undef DEFINE_SCENE @@ -46,7 +46,7 @@ static void CrashHandler_WriteActorData(char* buffer, size_t* pos) { ActorListEntry* entry = &gPlayState->actorCtx.actorLists[i]; Actor* cur; - if(entry->length == 0) { + if (entry->length == 0) { continue; } WRITE_VAR_LINE(buffer, pos, "Actor Cat: ", sCatToStrArray[i]); @@ -76,7 +76,7 @@ extern "C" void CrashHandler_PrintSohData(char* buffer, size_t* pos) { if (gPlayState != nullptr) { append_line(buffer, pos, "Actors:"); CrashHandler_WriteActorData(buffer, pos); - + WRITE_VAR_LINE(buffer, pos, "Scene: ", sSceneIdToStrArray[gPlayState->sceneNum]); snprintf(intCharBuffer, sizeof(intCharBuffer), "%i", gPlayState->roomCtx.curRoom.num); diff --git a/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp b/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp index 3a52312c9..1ca5a7c19 100644 --- a/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp +++ b/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp @@ -16,10 +16,9 @@ static u16 sItemButtons[] = { BTN_B, BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT, BTN_DUP, 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 - ) { + 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; } @@ -40,7 +39,8 @@ void UseTunicBoots(Player* player, PlayState* play, Input* input) { 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); + 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) { @@ -87,6 +87,28 @@ void RegisterAssignableTunicsBoots() { } }); + // don't throw items when the pressed button is a tunic or boots + COND_VB_SHOULD(VB_THROW_OR_PUT_DOWN_HELD_ITEM, CVAR_TUNICBOOTS_VALUE != CVAR_TUNICBOOTS_DEFAULT, { + // if the vanilla condition doesn't want us to throw/put down the item, early return + if (!*should) { + return; + } + + Input* input = va_arg(args, Input*); + + 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(gPlayState, i); + break; + } + } + + if (item >= ITEM_TUNIC_KOKIRI && item <= ITEM_BOOTS_HOVER) { + *should = false; + } + }); + // 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 diff --git a/soh/soh/Enhancements/Cheats/DekuStick.cpp b/soh/soh/Enhancements/Cheats/DekuStick.cpp index 8afa0e330..679878071 100644 --- a/soh/soh/Enhancements/Cheats/DekuStick.cpp +++ b/soh/soh/Enhancements/Cheats/DekuStick.cpp @@ -13,13 +13,13 @@ extern PlayState* gPlayState; #define CVAR_DEKU_STICK_VALUE CVarGetInteger(CVAR_DEKU_STICK_NAME, CVAR_DEKU_STICK_DEFAULT) void RegisterDekuStickCheats() { - COND_VB_SHOULD(VB_DEKU_STICK_BREAK, CVAR_DEKU_STICK_VALUE != DEKU_STICK_NORMAL, { *should = false; }); - COND_VB_SHOULD(VB_DEKU_STICK_BURN_OUT, CVAR_DEKU_STICK_VALUE != DEKU_STICK_NORMAL, { *should = false; }); + COND_VB_SHOULD(VB_DEKU_STICK_BREAK, CVAR_DEKU_STICK_VALUE != DEKU_STICK_NORMAL, { *should = false; }); + COND_VB_SHOULD(VB_DEKU_STICK_BURN_OUT, CVAR_DEKU_STICK_VALUE != DEKU_STICK_NORMAL, { *should = false; }); COND_VB_SHOULD(VB_DEKU_STICK_BURN_DOWN, CVAR_DEKU_STICK_VALUE != DEKU_STICK_NORMAL, { *should = false; }); COND_VB_SHOULD(VB_DEKU_STICK_BE_ON_FIRE, CVAR_DEKU_STICK_VALUE == DEKU_STICK_UNBREAKABLE_AND_ALWAYS_ON_FIRE, { Player* player = GET_PLAYER(gPlayState); - player->unk_860 = 200; // Keeps the stick's flame lit - player->unk_85C = 1.0f; // Ensures the stick is the proper length + player->unk_860 = 200; // Keeps the stick's flame lit + player->unk_85C = 1.0f; // Ensures the stick is the proper length *should = true; }); } diff --git a/soh/soh/Enhancements/Cheats/FreezeTime.cpp b/soh/soh/Enhancements/Cheats/FreezeTime.cpp index 2296c4fc9..a3028d7da 100644 --- a/soh/soh/Enhancements/Cheats/FreezeTime.cpp +++ b/soh/soh/Enhancements/Cheats/FreezeTime.cpp @@ -30,7 +30,8 @@ void RegisterFreezeTime() { GameInteractor::Instance->UnregisterGameHook(hookId); hookId = 0; if (CVAR_FREEZE_TIME_VALUE) { - hookId = GameInteractor::Instance->RegisterGameHook(OnGameFrameUpdateFreezeTime); + hookId = + GameInteractor::Instance->RegisterGameHook(OnGameFrameUpdateFreezeTime); } else { CVarClear(CVAR_PREV_TIME_NAME); } diff --git a/soh/soh/Enhancements/Cheats/Infinite/Money.cpp b/soh/soh/Enhancements/Cheats/Infinite/Money.cpp index 292f65065..38b402d6d 100644 --- a/soh/soh/Enhancements/Cheats/Infinite/Money.cpp +++ b/soh/soh/Enhancements/Cheats/Infinite/Money.cpp @@ -15,10 +15,7 @@ extern s32 Flags_GetRandomizerInf(RandomizerInf flag); #define CVAR_INFINITE_MONEY_VALUE CVarGetInteger(CVAR_INFINITE_MONEY_NAME, CVAR_INFINITE_MONEY_DEFAULT) void OnGameFrameUpdateInfiniteMoney() { - if ( - !GameInteractor::IsSaveLoaded(true) || - (IS_RANDO && !Flags_GetRandomizerInf(RAND_INF_HAS_WALLET)) - ) { + if (!GameInteractor::IsSaveLoaded(true) || (IS_RANDO && !Flags_GetRandomizerInf(RAND_INF_HAS_WALLET))) { return; } diff --git a/soh/soh/Enhancements/Cheats/Infinite/NayrusLove.cpp b/soh/soh/Enhancements/Cheats/Infinite/NayrusLove.cpp index 0bea9afc9..f3ff5fe04 100644 --- a/soh/soh/Enhancements/Cheats/Infinite/NayrusLove.cpp +++ b/soh/soh/Enhancements/Cheats/Infinite/NayrusLove.cpp @@ -7,7 +7,8 @@ extern "C" SaveContext gSaveContext; #define CVAR_INFINITE_NAYRUS_LOVE_NAME CVAR_CHEAT("InfiniteNayru") #define CVAR_INFINITE_NAYRUS_LOVE_DEFAULT 0 -#define CVAR_INFINITE_NAYRUS_LOVE_VALUE CVarGetInteger(CVAR_INFINITE_NAYRUS_LOVE_NAME, CVAR_INFINITE_NAYRUS_LOVE_DEFAULT) +#define CVAR_INFINITE_NAYRUS_LOVE_VALUE \ + CVarGetInteger(CVAR_INFINITE_NAYRUS_LOVE_NAME, CVAR_INFINITE_NAYRUS_LOVE_DEFAULT) void OnGameFrameUpdateInfiniteNayrusLove() { if (!GameInteractor::IsSaveLoaded(true)) { diff --git a/soh/soh/Enhancements/ExtraTraps.cpp b/soh/soh/Enhancements/ExtraTraps.cpp index 196fc63f4..92806bacc 100644 --- a/soh/soh/Enhancements/ExtraTraps.cpp +++ b/soh/soh/Enhancements/ExtraTraps.cpp @@ -36,23 +36,19 @@ static int statusTimer = -1; static int eventTimer = -1; const char* altTrapTypeCvars[] = { - CVAR_ENHANCEMENT("ExtraTraps.Ice"), - CVAR_ENHANCEMENT("ExtraTraps.Burn"), - CVAR_ENHANCEMENT("ExtraTraps.Shock"), - CVAR_ENHANCEMENT("ExtraTraps.Knockback"), - CVAR_ENHANCEMENT("ExtraTraps.Speed"), - CVAR_ENHANCEMENT("ExtraTraps.Bomb"), - CVAR_ENHANCEMENT("ExtraTraps.Void"), - CVAR_ENHANCEMENT("ExtraTraps.Ammo"), - CVAR_ENHANCEMENT("ExtraTraps.Kill"), - CVAR_ENHANCEMENT("ExtraTraps.Teleport") + CVAR_ENHANCEMENT("ExtraTraps.Ice"), CVAR_ENHANCEMENT("ExtraTraps.Burn"), + CVAR_ENHANCEMENT("ExtraTraps.Shock"), CVAR_ENHANCEMENT("ExtraTraps.Knockback"), + CVAR_ENHANCEMENT("ExtraTraps.Speed"), CVAR_ENHANCEMENT("ExtraTraps.Bomb"), + CVAR_ENHANCEMENT("ExtraTraps.Void"), CVAR_ENHANCEMENT("ExtraTraps.Ammo"), + CVAR_ENHANCEMENT("ExtraTraps.Kill"), CVAR_ENHANCEMENT("ExtraTraps.Teleport"), }; -std::vector getEnabledAddTraps () { +std::vector getEnabledAddTraps() { std::vector enabledAddTraps; for (int i = 0; i < ADD_TRAP_MAX; i++) { if (CVarGetInteger(altTrapTypeCvars[i], 0)) { - if (gSaveContext.equips.buttonItems[0] == ITEM_FISHING_POLE && (i == ADD_VOID_TRAP || i == ADD_TELEPORT_TRAP)) { + if (gSaveContext.equips.buttonItems[0] == ITEM_FISHING_POLE && + (i == ADD_VOID_TRAP || i == ADD_TELEPORT_TRAP)) { continue; // don't add void or teleport if you're holding the fishing pole, as this causes issues } enabledAddTraps.push_back(static_cast(i)); @@ -65,7 +61,8 @@ std::vector getEnabledAddTraps () { }; static void RollRandomTrap(uint32_t seed) { - uint32_t finalSeed = seed + (IS_RANDO ? Rando::Context::GetInstance()->GetSeed() : gSaveContext.ship.stats.fileCreatedAt); + uint32_t finalSeed = + seed + (IS_RANDO ? Rando::Context::GetInstance()->GetSeed() : gSaveContext.ship.stats.fileCreatedAt); Random_Init(finalSeed); roll = RandomElement(getEnabledAddTraps()); @@ -83,7 +80,8 @@ static void RollRandomTrap(uint32_t seed) { eventTimer = 3; break; case ADD_SPEED_TRAP: - Audio_PlaySoundGeneral(NA_SE_VO_KZ_MOVE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_VO_KZ_MOVE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); GameInteractor::State::RunSpeedModifier = -2; statusTimer = 200; Notification::Emit({ .message = "Speed Decreased!" }); @@ -92,7 +90,8 @@ static void RollRandomTrap(uint32_t seed) { eventTimer = 3; break; case ADD_VOID_TRAP: - Audio_PlaySoundGeneral(NA_SE_EN_GANON_LAUGH, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_EN_GANON_LAUGH, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); eventTimer = 3; break; case ADD_AMMO_TRAP: @@ -133,7 +132,8 @@ static void OnPlayerUpdate() { AMMO(ITEM_BOW) = AMMO(ITEM_BOW) * 0.5; AMMO(ITEM_BOMB) = AMMO(ITEM_BOMB) * 0.5; AMMO(ITEM_BOMBCHU) = AMMO(ITEM_BOMBCHU) * 0.5; - Audio_PlaySoundGeneral(NA_SE_VO_FR_SMILE_0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_VO_FR_SMILE_0, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); break; case ADD_TELEPORT_TRAP: { int entrance; @@ -199,5 +199,3 @@ void RegisterExtraTraps() { } static RegisterShipInitFunc initFunc(RegisterExtraTraps, { CVAR_EXTRA_TRAPS_NAME }); - - diff --git a/soh/soh/Enhancements/FileSelectEnhancements.cpp b/soh/soh/Enhancements/FileSelectEnhancements.cpp index 84cff9d12..f9e993b6a 100644 --- a/soh/soh/Enhancements/FileSelectEnhancements.cpp +++ b/soh/soh/Enhancements/FileSelectEnhancements.cpp @@ -6,7 +6,7 @@ #include #include -std::array RandomizerSettingsMenuText[RSM_MAX] = { +std::array RandomizerSettingsMenuText[RSM_MAX] = { { // English "Start Randomizer", @@ -39,28 +39,27 @@ std::array RandomizerSettingsMenuText[RSM_MAX] = { // French "Génération en cours...", }, - { - // English - "No randomizer seed loaded.\nPlease generate one first" - #if defined(__WIIU__) || defined(__SWITCH__) - ".", - #else - ",\nor drop a spoiler log on the game window.", - #endif - // German - "No randomizer seed loaded.\nPlease generate one first" - #if defined(__WIIU__) || defined(__SWITCH__) - ".", - #else - ",\nor drop a spoiler log on the game window.", - #endif - // French - "Aucune Seed de Randomizer actuellement disponible.\nGénérez-en une dans les \"Randomizer Settings\"" - #if (defined(__WIIU__) || defined(__SWITCH__)) - "." - #else - "\nou glissez un spoilerlog sur la fenêtre du jeu." - #endif + { // English + "No randomizer seed loaded.\nPlease generate one first" +#if defined(__WIIU__) || defined(__SWITCH__) + ".", +#else + ",\nor drop a spoiler log on the game window.", +#endif + // German + "No randomizer seed loaded.\nPlease generate one first" +#if defined(__WIIU__) || defined(__SWITCH__) + ".", +#else + ",\nor drop a spoiler log on the game window.", +#endif + // French + "Aucune Seed de Randomizer actuellement disponible.\nGénérez-en une dans les \"Randomizer Settings\"" +#if (defined(__WIIU__) || defined(__SWITCH__)) + "." +#else + "\nou glissez un spoilerlog sur la fenêtre du jeu." +#endif }, }; diff --git a/soh/soh/Enhancements/Presets/PresetEntries.cpp b/soh/soh/Enhancements/Presets/PresetEntries.cpp new file mode 100644 index 000000000..ebf6d4a19 --- /dev/null +++ b/soh/soh/Enhancements/Presets/PresetEntries.cpp @@ -0,0 +1,650 @@ +#include "Presets.h" +#include +#include "soh/cvar_prefixes.h" +#include "soh/Enhancements/enhancementTypes.h" + +#define PRESET_ENTRY_S32(cvar, value) \ + { cvar, PRESET_ENTRY_TYPE_S32, value } +#define PRESET_ENTRY_FLOAT(cvar, value) \ + { cvar, PRESET_ENTRY_TYPE_FLOAT, value } +#define PRESET_ENTRY_STRING(cvar, value) \ + { cvar, PRESET_ENTRY_TYPE_STRING, value } +#define PRESET_ENTRY_CPP_STRING(cvar, value) \ + { cvar, PRESET_ENTRY_TYPE_CPP_STRING, value } + +// TODO: Ideally everything in this file will come from one/many JSON files + +// Enhancement presets +const std::vector vanillaPlusPresetEntries = { + // Quality of Life + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("Autosave"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.GoldSkulltula"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterOwl"), 1), + + // Skips & Speed-ups + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipText"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterRupeeAccumulator"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 1), + + // Graphics + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DisableLOD"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("RememberMapToggleState"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("VisualAgony"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DynamicWalletIcon"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeFlowFileSelect"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("WidescreenActorCulling"), 1), + + // Items + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), + + // Fixes + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GravediggingTourFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixFloorSwitches"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixZoraHintDialogue"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixVineFall"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EnemySpawnsOverWaterboxes"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixSawSoftlock"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DekuNutUpgradeFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixGrokenGiantsKnife"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixMenuLR"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixDungeonMinimapIcon"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TwoHandedIdle"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NaviTextFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GerudoWarriorClothingFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixTexturesOOB"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixEyesOpenWhileSleeping"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixHammerHand"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SceneSpecificDirtPathFix"), ZFIGHT_FIX_CONSISTENT_VANISH), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixDaruniaDanceSpeed"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CreditsFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("RedGanonBlood"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PulsateBossIcon"), 1), + + // Difficulty + // NONE + + // Minigames + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FrogsModifyFailTime"), 2), + + // Extra Modes + // NONE + + // Cheats + // NONE +}; + +const std::vector enhancedPresetEntries = { + // Quality of Life + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("Autosave"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PauseWarp"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NoInputForCredits"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.GoldSkulltula"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DisableCritWiggle"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterOwl"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("QuitFishingAtDoor"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantPutaway"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SleepingWaterfall"), 1), + + // Skips & Speed-ups + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipText"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SlowTextSpeed"), 5), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipSwimDeepEndAnim"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ClimbSpeed"), 3), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterBlockPush"), 5), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CrawlSpeed"), 2), + PRESET_ENTRY_FLOAT(CVAR_ENHANCEMENT("MweepSpeed"), 5.0f), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantScarecrow"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterRupeeAccumulator"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkulltulaFreeze"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 1), + + // Graphics + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DisableLOD"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NewDrops"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PauseMenuAnimatedLink"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ShowDoorLocksOnBothSides"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ToTMedallionsColors"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("RememberMapToggleState"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("VisualAgony"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DynamicWalletIcon"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterAmmoRendering"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeFlowFileSelect"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("WidescreenActorCulling"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ExtendedCullingExcludeGlitchActors"), 1), + + // Items + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastOcarinaPlayback"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_FAST), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PersistentMasks"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NutsExplodeBombs"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DisableFirstPersonChus"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterBombchuShopping"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SeparateArrows"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipArrowAnimation"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastBoomerang"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterFarore"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastFarores"), 1), + + // Fixes + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GravediggingTourFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixFloorSwitches"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixZoraHintDialogue"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixVineFall"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EnemySpawnsOverWaterboxes"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixSawSoftlock"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DekuNutUpgradeFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixGrokenGiantsKnife"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixMenuLR"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixDungeonMinimapIcon"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TwoHandedIdle"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NaviTextFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GerudoWarriorClothingFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixTexturesOOB"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixEyesOpenWhileSleeping"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixHammerHand"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SceneSpecificDirtPathFix"), ZFIGHT_FIX_CONSISTENT_VANISH), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixDaruniaDanceSpeed"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CreditsFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("RedGanonBlood"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PulsateBossIcon"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("HoverFishing"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("N64WeirdFrames"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BombchusOOB"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("QuickPutaway"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("QuickBongoKill"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EarlyEyeballFrog"), 1), + + // Difficulty + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EnableBombchuDrops"), 1), PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DampeWin"), 1), + + // Minigames + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FrogsModifyFailTime"), 2), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeOcarinaGame"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("OcarinaGame.StartingNotes"), 5), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeFishing"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GuaranteeFishingBite"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FishNeverEscape"), 1), + + // Extra Modes + // NONE + + // Cheats + // NONE +}; + +const std::vector randomizerPresetEntries = { + // Quality of Life + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("Autosave"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DayGravePull"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DampeAllNight"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MarketSneak"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PauseWarp"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NoInputForCredits"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("IncludeHeldInputsBufferWindow"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.GoldSkulltula"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DisableCritWiggle"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterOwl"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("QuitFishingAtDoor"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantPutaway"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SleepingWaterfall"), 1), + + // Skips & Speed-ups + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Entrances"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.BossIntro"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.QuickBossDeaths"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipOwlInteractions"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.DisableTitleCard"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastDrops"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipForcedDialog"), FORCED_DIALOG_SKIP_ALL), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipText"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SlowTextSpeed"), 5), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastChests"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipSwimDeepEndAnim"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ClimbSpeed"), 3), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterBlockPush"), 5), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CrawlSpeed"), 2), + PRESET_ENTRY_FLOAT(CVAR_ENHANCEMENT("MweepSpeed"), 5.0f), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipChildStealth"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeSavers.SkipTowerEscape"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantScarecrow"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterRupeeAccumulator"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ForgeTime"), 0), + + // Graphics + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DisableLOD"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NewDrops"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PauseMenuAnimatedLink"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ShowDoorLocksOnBothSides"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ToTMedallionsColors"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("RememberMapToggleState"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("VisualAgony"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DynamicWalletIcon"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FileSelectMoreInfo"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterAmmoRendering"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeFlowFileSelect"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("WidescreenActorCulling"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ExtendedCullingExcludeGlitchActors"), 1), + + // Items + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EquipmentCanBeRemoved"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ToggleStrength"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SwordToggle"), SWORD_TOGGLE_CHILD), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastOcarinaPlayback"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_FAST), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AdultMasks"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PersistentMasks"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MaskSelect"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NutsExplodeBombs"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DisableFirstPersonChus"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterBombchuShopping"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SeparateArrows"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipArrowAnimation"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastBoomerang"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterFarore"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastFarores"), 1), + + // Fixes + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GravediggingTourFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixFloorSwitches"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixZoraHintDialogue"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixVineFall"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EnemySpawnsOverWaterboxes"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixSawSoftlock"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DekuNutUpgradeFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixGrokenGiantsKnife"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixMenuLR"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixDungeonMinimapIcon"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TwoHandedIdle"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NaviTextFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GerudoWarriorClothingFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixTexturesOOB"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixHammerHand"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SceneSpecificDirtPathFix"), ZFIGHT_FIX_CONSISTENT_VANISH), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixDaruniaDanceSpeed"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CreditsFix"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("RedGanonBlood"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PulsateBossIcon"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("HoverFishing"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("N64WeirdFrames"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BombchusOOB"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("QuickPutaway"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("QuickBongoKill"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EarlyEyeballFrog"), 1), + + // Difficulty + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GoronPot"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DampeWin"), 1), + + // Minigames + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeFrogsOcarinaGame"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FrogsModifyFailTime"), 2), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeOcarinaGame"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("OcarinaGame.StartingNotes"), 5), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeFishing"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GuaranteeFishingBite"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FishNeverEscape"), 1), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinimumFishWeightChild"), 3), + PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinimumFishWeightAdult"), 6), + + // Extra Modes + // NONE + + // Cheats + PRESET_ENTRY_S32(CVAR_CHEAT("EasyFrameAdvance"), 1), +}; + +// Randomizer presets +const std::vector randomizerBeginnerPresetEntries = { + // World tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ClosedForest"), RO_CLOSED_FOREST_OFF), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("KakarikoGate"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DoorOfTime"), 2), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ZorasFountain"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_GREG), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrial"), RO_GANONS_TRIALS_SKIP), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), 1), + + // Items tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IncludeTycoonWallet"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_STARTWITH), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Keysanity"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BossKeysanity"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_REWARDS), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LacsRewardCount"), 6), + + // Gamplay tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CuccosToReturn"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BigPoeTargetCount"), 0), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildZelda"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipEponaRace"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CompleteMaskQuest"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipScarecrowsSong"), 1), + + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SheikLAHint"), 0), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DampeHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GregHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SariaHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FrogsHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BiggoronHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MalonHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("HBAHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MerchantText"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("10GSHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("20GSHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("30GSHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("40GSHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("50GSHint"), 1), + + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FullWallets"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("EnableBombchuDrops"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BlueFireArrows"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SunlightArrows"), 1), + + // Locations tab + PRESET_ENTRY_STRING(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), "147,148,233,323,"), + + // Tricks/Glitches tab + // NONE + + // Starting inventory tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingKokiriSword"), RO_STARTING_OCARINA_FAIRY), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingOcarina"), RO_STARTING_OCARINA_FAIRY), +}; + +const std::vector randomizerStandardPresetEntries = { + // World tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ClosedForest"), RO_CLOSED_FOREST_OFF), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("KakarikoGate"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DoorOfTime"), 2), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ZorasFountain"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_GREG), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrial"), RO_GANONS_TRIALS_SKIP), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), 1), + + // Items tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSongs"), RO_SONG_SHUFFLE_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKokiriSword"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IncludeTycoonWallet"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_SPECIFIC_COUNT), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityCount"), 4), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), RO_PRICE_BALANCED), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleScrubs"), RO_SCRUBS_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubsPrices"), RO_PRICE_FIXED), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubsFixedPrice"), 2), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), RO_SHUFFLE_MERCHANTS_BEANS_ONLY), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_STARTWITH), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Keysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BossKeysanity"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_REWARDS), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LacsRewardCount"), 7), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKeyRings"), RO_KEYRINGS_COUNT), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsRandomCount"), 8), + + // Gamplay tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CuccosToReturn"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BigPoeTargetCount"), 0), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildZelda"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipEponaRace"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CompleteMaskQuest"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipScarecrowsSong"), 1), + + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SheikLAHint"), 0), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DampeHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GregHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SariaHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FrogsHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BiggoronHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MalonHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("HBAHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MerchantText"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("10GSHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("20GSHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("30GSHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("40GSHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("50GSHint"), 1), + + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FullWallets"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BombchuBag"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("EnableBombchuDrops"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BlueFireArrows"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SunlightArrows"), 1), + + // Locations tab + // NONE + + // Tricks/Glitches tab + // NONE + + // Starting inventory tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingOcarina"), RO_STARTING_OCARINA_FAIRY), +}; + +const std::vector randomizerAdvancedPresetEntries = { + // World tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ClosedForest"), RO_CLOSED_FOREST_OFF), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("KakarikoGate"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DoorOfTime"), 2), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_GREG), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingAge"), RO_AGE_RANDOM), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrial"), RO_GANONS_TRIALS_SKIP), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDungeonsEntrances"), RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleBossEntrances"), RO_BOSS_ROOM_ENTRANCE_SHUFFLE_FULL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOverworldSpawns"), 1), + + // Items tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSongs"), RO_SONG_SHUFFLE_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKokiriSword"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMasterSword"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IncludeTycoonWallet"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSwim"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDekuNutBag"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDekuStickBag"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_SPECIFIC_COUNT), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityCount"), 7), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), RO_PRICE_BALANCED), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleScrubs"), RO_SCRUBS_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubsPrices"), RO_PRICE_FIXED), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubsFixedPrice"), 2), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleCows"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), RO_SHUFFLE_MERCHANTS_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleFrogSongRupees"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_STARTWITH), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Keysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BossKeysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_REWARDS), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LacsRewardCount"), 8), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKeyRings"), RO_KEYRINGS_COUNT), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsRandomCount"), 4), + + // Gamplay tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CuccosToReturn"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BigPoeTargetCount"), 0), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildZelda"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipEponaRace"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CompleteMaskQuest"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipScarecrowsSong"), 1), + + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SheikLAHint"), 0), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DampeHint"), 1), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GregHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SariaHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FrogsHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MalonHint"), 1), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("HBAHint"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MerchantText"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("40GSHint"), 1), PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("50GSHint"), 1), + + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FullWallets"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BombchuBag"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("EnableBombchuDrops"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BlueFireArrows"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SunlightArrows"), 1), + + // Locations tab + // NONE + + // Tricks/Glitches tab + // NONE + + // Starting inventory tab + // NONE +}; + +const std::vector hellModePresetEntries = { + // World tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ClosedForest"), RO_CLOSED_FOREST_OFF), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("KakarikoGate"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DoorOfTime"), 2), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LockOverworldDoors"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_GREG), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingAge"), RO_AGE_RANDOM), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDungeonsEntrances"), RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleBossEntrances"), RO_BOSS_ROOM_ENTRANCE_SHUFFLE_FULL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOverworldEntrances"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleInteriorsEntrances"), RO_INTERIOR_ENTRANCE_SHUFFLE_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGrottosEntrances"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOwlDrops"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleWarpSongs"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOverworldSpawns"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MixedEntrances"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MixDungeons"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MixBosses"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MixOverworld"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MixInteriors"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MixGrottos"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DecoupleEntrances"), 1), + + // Items tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSongs"), RO_SONG_SHUFFLE_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKokiriSword"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMasterSword"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleChildWallet"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IncludeTycoonWallet"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinaButtons"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSwim"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleFishingPole"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDekuNutBag"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDekuStickBag"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), RO_SHUFFLE_FREESTANDING_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_SPECIFIC_COUNT), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityCount"), 7), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), RO_PRICE_BALANCED), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Fishsanity"), RO_FISHSANITY_BOTH), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FishsanityPondCount"), 17), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FishsanityAgeSplit"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleScrubs"), RO_SCRUBS_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubsPrices"), RO_PRICE_BALANCED), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleBeehives"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleCows"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShufflePots"), RO_SHUFFLE_POTS_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleCrates"), RO_SHUFFLE_CRATES_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), RO_SHUFFLE_MERCHANTS_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleFrogSongRupees"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shuffle100GSReward"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleBossSouls"), 2), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleFairies"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGrass"), RO_SHUFFLE_GRASS_ALL), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Keysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BossKeysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_REWARDS), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LacsRewardCount"), 10), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LacsRewardOptions"), RO_LACS_GREG_REWARD), + + // Gamplay tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CuccosToReturn"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BigPoeTargetCount"), 0), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipEponaRace"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BombchuBag"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("EnableBombchuDrops"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BlueFireArrows"), 1), + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SunlightArrows"), 1), + + // Locations tab + // NONE + + // Tricks/Glitches tab + // NONE + + // Starting inventory tab + PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingHearts"), 0), +}; + +const std::map presetTypes = { + { PRESET_TYPE_ENHANCEMENTS, + { { CVAR_PREFIX_ENHANCEMENT, CVAR_PREFIX_CHEAT }, + { + { ENHANCEMENT_PRESET_DEFAULT, + { + "Default", + "Reset all options to their default values.", + {}, + } }, + { ENHANCEMENT_PRESET_VANILLA_PLUS, + { + "Vanilla Plus", + "Adds some quality of life features, but don't alter gameplay and aims to " + "preserve the authentic experience. Recommended for a first playthrough of OoT.", + vanillaPlusPresetEntries, + } }, + { ENHANCEMENT_PRESET_ENHANCED, + { "Enhanced", + "The \"Vanilla Plus\" preset, but with more quality of life enhancements that might alter gameplay " + "slightly. Recommended for returning players going through the vanilla game again.", + enhancedPresetEntries } }, + { ENHANCEMENT_PRESET_RANDOMIZER, + { "Randomizer", + "A baseline set of enhancements for playing randomizer. Includes many quality of life options and " + "options to speed up gameplay.", + randomizerPresetEntries } }, + } } }, + { PRESET_TYPE_RANDOMIZER, + { { CVAR_PREFIX_RANDOMIZER_SETTING, CVAR_PREFIX_RANDOMIZER_ENHANCEMENT }, + { + { RANDOMIZER_PRESET_DEFAULT, + { + "Default", + "Reset all options to their default values.", + {}, + } }, + { RANDOMIZER_PRESET_BEGINNER, + { + "Beginner", + "A simpler set of options and shuffled items meant for players new to the randomizer. ", + randomizerBeginnerPresetEntries, + } }, + { RANDOMIZER_PRESET_STANDARD, + { + "Standard", + "A set of options meant as a baseline for both newer and experienced randomizer players.", + randomizerStandardPresetEntries, + } }, + { RANDOMIZER_PRESET_ADVANCED, + { + "Advanced", + "Includes many more shuffled items and introduces some entrance shuffle options. Meant for advanced " + "randomizer players.", + randomizerAdvancedPresetEntries, + } }, + { RANDOMIZER_PRESET_HELL_MODE, + { "Hell Mode", + "Every location randomized, all entrance settings enabled, but still using glitchless logic. Expect " + "pain.", + hellModePresetEntries } }, + } } } +}; diff --git a/soh/soh/Enhancements/presets.cpp b/soh/soh/Enhancements/Presets/Presets.cpp similarity index 81% rename from soh/soh/Enhancements/presets.cpp rename to soh/soh/Enhancements/Presets/Presets.cpp index c8760caca..cef3f8362 100644 --- a/soh/soh/Enhancements/presets.cpp +++ b/soh/soh/Enhancements/Presets/Presets.cpp @@ -1,4 +1,4 @@ -#include "presets.h" +#include "Presets.h" #include #include #include @@ -10,14 +10,14 @@ std::string FormatLocations(std::vector locs) { std::string locString = ""; - for (auto loc: locs) { + for (auto loc : locs) { locString += std::to_string(loc) + ","; } return locString; } void applyPreset(std::vector entries) { - for(auto& [cvar, type, value] : entries) { + for (auto& [cvar, type, value] : entries) { switch (type) { case PRESET_ENTRY_TYPE_S32: CVarSetInteger(cvar, std::get(value)); @@ -34,26 +34,28 @@ void applyPreset(std::vector entries) { } Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } + ShipInit::Init("*"); } void DrawPresetSelector(PresetType presetTypeId) { const std::string presetTypeCvar = CVAR_GENERAL("SelectedPresets.") + std::to_string(presetTypeId); const PresetTypeDefinition presetTypeDef = presetTypes.at(presetTypeId); uint16_t selectedPresetId = CVarGetInteger(presetTypeCvar.c_str(), 0); - if(selectedPresetId >= presetTypeDef.presets.size()){ + if (selectedPresetId >= presetTypeDef.presets.size()) { selectedPresetId = 0; } const PresetDefinition selectedPresetDef = presetTypeDef.presets.at(selectedPresetId); std::string comboboxTooltip = ""; - for ( auto iter = presetTypeDef.presets.begin(); iter != presetTypeDef.presets.end(); ++iter ) { - if (iter->first != 0) comboboxTooltip += "\n\n"; + for (auto iter = presetTypeDef.presets.begin(); iter != presetTypeDef.presets.end(); ++iter) { + if (iter->first != 0) + comboboxTooltip += "\n\n"; comboboxTooltip += std::string(iter->second.label) + " - " + std::string(iter->second.description); } ImGui::Text("Presets"); UIWidgets::PushStyleCombobox(THEME_COLOR); if (ImGui::BeginCombo("##PresetsComboBox", selectedPresetDef.label)) { - for ( auto iter = presetTypeDef.presets.begin(); iter != presetTypeDef.presets.end(); ++iter ) { + for (auto iter = presetTypeDef.presets.begin(); iter != presetTypeDef.presets.end(); ++iter) { if (ImGui::Selectable(iter->second.label, iter->first == selectedPresetId)) { CVarSetInteger(presetTypeCvar.c_str(), iter->first); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); @@ -67,7 +69,7 @@ void DrawPresetSelector(PresetType presetTypeId) { UIWidgets::PushStyleButton(THEME_COLOR); if (ImGui::Button(("Apply Preset##" + presetTypeCvar).c_str())) { - for(const char* block : presetTypeDef.blocksToClear) { + for (const char* block : presetTypeDef.blocksToClear) { CVarClearBlock(block); } if (selectedPresetId != 0) { @@ -75,9 +77,6 @@ void DrawPresetSelector(PresetType presetTypeId) { } CVarSetInteger(presetTypeCvar.c_str(), selectedPresetId); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); - if (presetTypeId == PRESET_TYPE_RANDOMIZER){ - Rando::Settings::GetInstance()->ReloadOptions(); - } } UIWidgets::PopStyleButton(); } diff --git a/soh/soh/Enhancements/Presets/Presets.h b/soh/soh/Enhancements/Presets/Presets.h new file mode 100644 index 000000000..898bc9cc9 --- /dev/null +++ b/soh/soh/Enhancements/Presets/Presets.h @@ -0,0 +1,58 @@ +#pragma once + +#include +#include +#include +#include "soh/OTRGlobals.h" + +enum PresetEntryType { + PRESET_ENTRY_TYPE_S32, + PRESET_ENTRY_TYPE_FLOAT, + PRESET_ENTRY_TYPE_STRING, + PRESET_ENTRY_TYPE_CPP_STRING, +}; + +enum PresetType { + PRESET_TYPE_ENHANCEMENTS, + PRESET_TYPE_RANDOMIZER, +}; + +enum EnhancementPreset { + ENHANCEMENT_PRESET_DEFAULT, + ENHANCEMENT_PRESET_VANILLA_PLUS, + ENHANCEMENT_PRESET_ENHANCED, + ENHANCEMENT_PRESET_RANDOMIZER, +}; + +enum RandomizerPreset { + RANDOMIZER_PRESET_DEFAULT, + RANDOMIZER_PRESET_BEGINNER, + RANDOMIZER_PRESET_STANDARD, + RANDOMIZER_PRESET_ADVANCED, + RANDOMIZER_PRESET_HELL_MODE, +}; + +typedef struct PresetEntry { + const char* cvar; + PresetEntryType type; + std::variant value; +} PresetEntry; + +std::string FormatLocations(std::vector locs); + +void DrawPresetSelector(PresetType presetType); +void clearCvars(std::vector cvarsToClear); +void applyPreset(std::vector entries); + +typedef struct PresetDefinition { + const char* label; + const char* description; + std::vector entries; +} PresetDefinition; + +typedef struct PresetTypeDefinition { + std::vector blocksToClear; + std::map presets; +} PresetTypeDefinition; + +extern const std::map presetTypes; diff --git a/soh/soh/Enhancements/RemoveSpinAttackDarkness.cpp b/soh/soh/Enhancements/RemoveSpinAttackDarkness.cpp index 37fed1b7d..965817030 100644 --- a/soh/soh/Enhancements/RemoveSpinAttackDarkness.cpp +++ b/soh/soh/Enhancements/RemoveSpinAttackDarkness.cpp @@ -33,10 +33,13 @@ void OnEnMThunderInitReplaceUpdateWithCustom(void* thunder) { #define CVAR_REMOVESPINATTACKDARKNESS_NAME CVAR_ENHANCEMENT("RemoveSpinAttackDarkness") #define CVAR_REMOVESPINATTACKDARKNESS_DEFAULT 0 -#define CVAR_REMOVESPINATTACKDARKNESS_VALUE CVarGetInteger(CVAR_REMOVESPINATTACKDARKNESS_NAME, CVAR_REMOVESPINATTACKDARKNESS_DEFAULT) +#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); + 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/Enhancements/Restorations/BottleAdventure.cpp b/soh/soh/Enhancements/Restorations/BottleAdventure.cpp new file mode 100644 index 000000000..22cc74e67 --- /dev/null +++ b/soh/soh/Enhancements/Restorations/BottleAdventure.cpp @@ -0,0 +1,481 @@ +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/ShipInit.hpp" + +extern "C" { +#include "variables.h" +} + +// gSaveContext.inventory.items +void HandleBAInventoryItems() { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + gSaveContext.equips.buttonItems[0] = gSaveContext.inventory.items[itemOnCRight]; +} + +void HandleRBAInventoryItems(uint8_t itemToPutInBottle) { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + gSaveContext.inventory.items[itemOnCRight] = itemToPutInBottle; +} + +// gSaveContext.inventory.ammo +void HandleBAInventoryAmmo() { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + gSaveContext.equips.buttonItems[0] = gSaveContext.inventory.ammo[itemOnCRight - ITEM_FAIRY]; +} + +void HandleRBAInventoryAmmo(uint8_t itemToPutInBottle) { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + gSaveContext.inventory.ammo[itemOnCRight - ITEM_FAIRY] = itemToPutInBottle; +} + +// gSaveContext.inventory.equipment +void HandleBAInventoryEquipment() { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight == ITEM_MASK_GORON) { + gSaveContext.equips.buttonItems[0] = (gSaveContext.inventory.equipment >> 8) & 0xFF; + } else if (itemOnCRight == ITEM_MASK_ZORA) { + gSaveContext.equips.buttonItems[0] = gSaveContext.inventory.equipment & 0xFF; + } +} + +void HandleRBAInventoryEquipment(uint8_t itemToPutInBottle) { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight == ITEM_MASK_GORON) { + gSaveContext.inventory.equipment = (itemToPutInBottle << 8) | (gSaveContext.inventory.equipment & 0x00FF); + } else if (itemOnCRight == ITEM_MASK_ZORA) { + gSaveContext.inventory.equipment = itemToPutInBottle | (gSaveContext.inventory.equipment & 0xFF00); + } +} + +// gSaveContext.inventory.upgrades +void HandleBAInventoryUpgrades() { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight == ITEM_SOLD_OUT) { + gSaveContext.equips.buttonItems[0] = (gSaveContext.inventory.upgrades >> 24) & 0xFF; + } else if (itemOnCRight == ITEM_POCKET_EGG) { + gSaveContext.equips.buttonItems[0] = (gSaveContext.inventory.upgrades >> 16) & 0xFF; + } else if (itemOnCRight == ITEM_POCKET_CUCCO) { + gSaveContext.equips.buttonItems[0] = (gSaveContext.inventory.upgrades >> 8) & 0xFF; + } else if (itemOnCRight == ITEM_COJIRO) { + gSaveContext.equips.buttonItems[0] = gSaveContext.inventory.upgrades & 0xFF; + } +} + +void HandleRBAInventoryUpgrades(uint8_t itemToPutInBottle) { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight == ITEM_SOLD_OUT) { + gSaveContext.inventory.upgrades = (itemToPutInBottle << 24) | (gSaveContext.inventory.upgrades & 0x00FFFFFF); + } else if (itemOnCRight == ITEM_POCKET_EGG) { + gSaveContext.inventory.upgrades = (itemToPutInBottle << 16) | (gSaveContext.inventory.upgrades & 0xFF00FFFF); + } else if (itemOnCRight == ITEM_POCKET_CUCCO) { + gSaveContext.inventory.upgrades = (itemToPutInBottle << 8) | (gSaveContext.inventory.upgrades & 0xFFFF00FF); + } else if (itemOnCRight == ITEM_COJIRO) { + gSaveContext.inventory.upgrades = itemToPutInBottle | (gSaveContext.inventory.upgrades & 0xFFFFFF00); + } +} + +// gSaveContext.inventory.questItems +void HandleBAInventoryQuestItems() { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight == ITEM_ODD_MUSHROOM) { + gSaveContext.equips.buttonItems[0] = (gSaveContext.inventory.questItems >> 24) & 0xFF; + } else if (itemOnCRight == ITEM_ODD_POTION) { + gSaveContext.equips.buttonItems[0] = (gSaveContext.inventory.questItems >> 16) & 0xFF; + } else if (itemOnCRight == ITEM_SAW) { + gSaveContext.equips.buttonItems[0] = (gSaveContext.inventory.questItems >> 8) & 0xFF; + } else if (itemOnCRight == ITEM_SWORD_BROKEN) { + gSaveContext.equips.buttonItems[0] = gSaveContext.inventory.questItems & 0xFF; + } +} + +void HandleRBAInventoryQuestItems(uint8_t itemToPutInBottle) { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight == ITEM_ODD_MUSHROOM) { + gSaveContext.inventory.questItems = + (itemToPutInBottle << 24) | (gSaveContext.inventory.questItems & 0x00FFFFFF); + } else if (itemOnCRight == ITEM_ODD_POTION) { + gSaveContext.inventory.questItems = + (itemToPutInBottle << 16) | (gSaveContext.inventory.questItems & 0xFF00FFFF); + } else if (itemOnCRight == ITEM_SAW) { + gSaveContext.inventory.questItems = (itemToPutInBottle << 8) | (gSaveContext.inventory.questItems & 0xFFFF00FF); + } else if (itemOnCRight == ITEM_SWORD_BROKEN) { + gSaveContext.inventory.questItems = itemToPutInBottle | (gSaveContext.inventory.questItems & 0xFFFFFF00); + } +} + +// gSaveContext.inventory.dungeonItems +void HandleBAInventoryDungeonItems() { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + gSaveContext.equips.buttonItems[0] = gSaveContext.inventory.dungeonItems[itemOnCRight - ITEM_PRESCRIPTION]; +} + +void HandleRBAInventoryDungeonItems(uint8_t itemToPutInBottle) { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + gSaveContext.inventory.dungeonItems[itemOnCRight - ITEM_PRESCRIPTION] = itemToPutInBottle; +} + +// gSaveContext.inventory.dungeonKeys +void HandleBAInventoryDungeonKeys() { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + gSaveContext.equips.buttonItems[0] = gSaveContext.inventory.dungeonKeys[itemOnCRight - ITEM_BULLET_BAG_40]; +} + +void HandleRBAInventoryDungeonKeys(uint8_t itemToPutInBottle) { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + gSaveContext.inventory.dungeonKeys[itemOnCRight - ITEM_BULLET_BAG_40] = itemToPutInBottle; +} + +// gSaveContext.inventory.defenseHearts +void HandleBAInventoryDefenseHearts() { + gSaveContext.equips.buttonItems[0] = gSaveContext.inventory.defenseHearts; +} + +void HandleRBAInventoryDefenseHearts(uint8_t itemToPutInBottle) { + gSaveContext.inventory.defenseHearts = itemToPutInBottle; +} + +// gSaveContext.inventory.gsTokens +void HandleBAInventoryGSTokens() { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight == ITEM_SONG_SERENADE) { + gSaveContext.equips.buttonItems[0] = (gSaveContext.inventory.gsTokens >> 8) & 0xFF; + } else if (itemOnCRight == ITEM_SONG_REQUIEM) { + gSaveContext.equips.buttonItems[0] = gSaveContext.inventory.gsTokens & 0xFF; + } +} + +void HandleRBAInventoryGSTokens(uint8_t itemToPutInBottle) { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight == ITEM_SONG_SERENADE) { + gSaveContext.inventory.gsTokens = (itemToPutInBottle << 8) | (gSaveContext.inventory.gsTokens & 0x00FF); + } else if (itemOnCRight == ITEM_SONG_REQUIEM) { + gSaveContext.inventory.gsTokens = itemToPutInBottle | (gSaveContext.inventory.gsTokens & 0xFF00); + } +} + +// gSaveContext.sceneFlags +void HandleBASceneFlags() { + // The rest of the items fall into the saved scene flags. Let's calculate the scene and which field it pulls from + u32 offset = gSaveContext.equips.buttonItems[3] - ITEM_SONG_LULLABY; + u32 scene = offset / sizeof(SavedSceneFlags); + switch (offset % sizeof(SavedSceneFlags)) { + case 0: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].chest >> 24) & 0xFF; + break; + case 1: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].chest >> 16) & 0xFF; + break; + case 2: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].chest >> 8) & 0xFF; + break; + case 3: + gSaveContext.equips.buttonItems[0] = gSaveContext.sceneFlags[scene].chest & 0xFF; + break; + case 4: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].swch >> 24) & 0xFF; + break; + case 5: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].swch >> 16) & 0xFF; + break; + case 6: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].swch >> 8) & 0xFF; + break; + case 7: + gSaveContext.equips.buttonItems[0] = gSaveContext.sceneFlags[scene].swch & 0xFF; + break; + case 8: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].clear >> 24) & 0xFF; + break; + case 9: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].clear >> 16) & 0xFF; + break; + case 10: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].clear >> 8) & 0xFF; + break; + case 11: + gSaveContext.equips.buttonItems[0] = gSaveContext.sceneFlags[scene].clear & 0xFF; + break; + case 12: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].collect >> 24) & 0xFF; + break; + case 13: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].collect >> 16) & 0xFF; + break; + case 14: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].collect >> 8) & 0xFF; + break; + case 15: + gSaveContext.equips.buttonItems[0] = gSaveContext.sceneFlags[scene].collect & 0xFF; + break; + case 16: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].unk >> 24) & 0xFF; + break; + case 17: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].unk >> 16) & 0xFF; + break; + case 18: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].unk >> 8) & 0xFF; + break; + case 19: + gSaveContext.equips.buttonItems[0] = gSaveContext.sceneFlags[scene].unk & 0xFF; + break; + case 20: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].rooms >> 24) & 0xFF; + break; + case 21: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].rooms >> 16) & 0xFF; + break; + case 22: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].rooms >> 8) & 0xFF; + break; + case 23: + gSaveContext.equips.buttonItems[0] = gSaveContext.sceneFlags[scene].rooms & 0xFF; + break; + case 24: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].floors >> 24) & 0xFF; + break; + case 25: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].floors >> 16) & 0xFF; + break; + case 26: + gSaveContext.equips.buttonItems[0] = (gSaveContext.sceneFlags[scene].floors >> 8) & 0xFF; + break; + case 27: + gSaveContext.equips.buttonItems[0] = gSaveContext.sceneFlags[scene].floors & 0xFF; + break; + } +} + +void HandleRBASceneFlags(uint8_t itemToPutInBottle) { + // The rest of the items fall into the saved scene flags. Let's calculate the scene and which field it sets + u32 offset = gSaveContext.equips.buttonItems[3] - ITEM_SONG_LULLABY; + u32 scene = offset / sizeof(SavedSceneFlags); + switch (offset % sizeof(SavedSceneFlags)) { + case 0: + gSaveContext.sceneFlags[scene].chest = + (itemToPutInBottle << 24) | (gSaveContext.sceneFlags[scene].chest & 0x00FFFFFF); + break; + case 1: + gSaveContext.sceneFlags[scene].chest = + (itemToPutInBottle << 16) | (gSaveContext.sceneFlags[scene].chest & 0xFF00FFFF); + break; + case 2: + gSaveContext.sceneFlags[scene].chest = + (itemToPutInBottle << 8) | (gSaveContext.sceneFlags[scene].chest & 0xFFFF00FF); + break; + case 3: + gSaveContext.sceneFlags[scene].chest = + itemToPutInBottle | (gSaveContext.sceneFlags[scene].chest & 0xFFFFFF00); + break; + case 4: + gSaveContext.sceneFlags[scene].swch = + (itemToPutInBottle << 24) | (gSaveContext.sceneFlags[scene].swch & 0x00FFFFFF); + break; + case 5: + gSaveContext.sceneFlags[scene].swch = + (itemToPutInBottle << 16) | (gSaveContext.sceneFlags[scene].swch & 0xFF00FFFF); + break; + case 6: + gSaveContext.sceneFlags[scene].swch = + (itemToPutInBottle << 8) | (gSaveContext.sceneFlags[scene].swch & 0xFFFF00FF); + break; + case 7: + gSaveContext.sceneFlags[scene].swch = + itemToPutInBottle | (gSaveContext.sceneFlags[scene].swch & 0xFFFFFF00); + break; + case 8: + gSaveContext.sceneFlags[scene].clear = + (itemToPutInBottle << 24) | (gSaveContext.sceneFlags[scene].clear & 0x00FFFFFF); + break; + case 9: + gSaveContext.sceneFlags[scene].clear = + (itemToPutInBottle << 16) | (gSaveContext.sceneFlags[scene].clear & 0xFF00FFFF); + break; + case 10: + gSaveContext.sceneFlags[scene].clear = + (itemToPutInBottle << 8) | (gSaveContext.sceneFlags[scene].clear & 0xFFFF00FF); + break; + case 11: + gSaveContext.sceneFlags[scene].clear = + itemToPutInBottle | (gSaveContext.sceneFlags[scene].clear & 0xFFFFFF00); + break; + case 12: + gSaveContext.sceneFlags[scene].collect = + (itemToPutInBottle << 24) | (gSaveContext.sceneFlags[scene].collect & 0x00FFFFFF); + break; + case 13: + gSaveContext.sceneFlags[scene].collect = + (itemToPutInBottle << 16) | (gSaveContext.sceneFlags[scene].collect & 0xFF00FFFF); + break; + case 14: + gSaveContext.sceneFlags[scene].collect = + (itemToPutInBottle << 8) | (gSaveContext.sceneFlags[scene].collect & 0xFFFF00FF); + break; + case 15: + gSaveContext.sceneFlags[scene].collect = + itemToPutInBottle | (gSaveContext.sceneFlags[scene].collect & 0xFFFFFF00); + break; + case 16: + gSaveContext.sceneFlags[scene].unk = + (itemToPutInBottle << 24) | (gSaveContext.sceneFlags[scene].unk & 0x00FFFFFF); + break; + case 17: + gSaveContext.sceneFlags[scene].unk = + (itemToPutInBottle << 16) | (gSaveContext.sceneFlags[scene].unk & 0xFF00FFFF); + break; + case 18: + gSaveContext.sceneFlags[scene].unk = + (itemToPutInBottle << 8) | (gSaveContext.sceneFlags[scene].unk & 0xFFFF00FF); + break; + case 19: + gSaveContext.sceneFlags[scene].unk = itemToPutInBottle | (gSaveContext.sceneFlags[scene].unk & 0xFFFFFF00); + break; + case 20: + gSaveContext.sceneFlags[scene].rooms = + (itemToPutInBottle << 24) | (gSaveContext.sceneFlags[scene].rooms & 0x00FFFFFF); + break; + case 21: + gSaveContext.sceneFlags[scene].rooms = + (itemToPutInBottle << 16) | (gSaveContext.sceneFlags[scene].rooms & 0xFF00FFFF); + break; + case 22: + gSaveContext.sceneFlags[scene].rooms = + (itemToPutInBottle << 8) | (gSaveContext.sceneFlags[scene].rooms & 0xFFFF00FF); + break; + case 23: + gSaveContext.sceneFlags[scene].rooms = + itemToPutInBottle | (gSaveContext.sceneFlags[scene].rooms & 0xFFFFFF00); + break; + case 24: + gSaveContext.sceneFlags[scene].floors = + (itemToPutInBottle << 24) | (gSaveContext.sceneFlags[scene].floors & 0x00FFFFFF); + break; + case 25: + gSaveContext.sceneFlags[scene].floors = + (itemToPutInBottle << 16) | (gSaveContext.sceneFlags[scene].floors & 0xFF00FFFF); + break; + case 26: + gSaveContext.sceneFlags[scene].floors = + (itemToPutInBottle << 8) | (gSaveContext.sceneFlags[scene].floors & 0xFFFF00FF); + break; + case 27: + gSaveContext.sceneFlags[scene].floors = + itemToPutInBottle | (gSaveContext.sceneFlags[scene].floors & 0xFFFFFF00); + break; + } +} + +// padding bytes +void HandleBAPaddingBytes() { + // Reading from padding bytes is not implemented + gSaveContext.equips.buttonItems[0] = 0; +} + +void HandleRBAPaddingBytes() { + // Writing to padding bytes is not implemented +} + +// Bottle Adventure +void DoBA() { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight >= ITEM_STICK && itemOnCRight <= ITEM_POTION_BLUE) { + HandleBAInventoryItems(); + } else if (itemOnCRight >= ITEM_FAIRY && itemOnCRight <= ITEM_MASK_BUNNY) { + HandleBAInventoryAmmo(); + } else if (itemOnCRight == ITEM_MASK_GORON || itemOnCRight == ITEM_MASK_ZORA) { + HandleBAInventoryEquipment(); + } else if (itemOnCRight == ITEM_MASK_GERUDO || itemOnCRight == ITEM_MASK_TRUTH) { + HandleBAPaddingBytes(); + } else if (itemOnCRight >= ITEM_SOLD_OUT && itemOnCRight <= ITEM_COJIRO) { + HandleBAInventoryUpgrades(); + } else if (itemOnCRight >= ITEM_ODD_MUSHROOM && itemOnCRight <= ITEM_SWORD_BROKEN) { + HandleBAInventoryQuestItems(); + } else if (itemOnCRight >= ITEM_PRESCRIPTION && itemOnCRight <= ITEM_BULLET_BAG_30) { + HandleBAInventoryDungeonItems(); + } else if (itemOnCRight >= ITEM_BULLET_BAG_40 && itemOnCRight <= ITEM_SWORD_KNIFE) { + HandleBAInventoryDungeonKeys(); + } else if (itemOnCRight == ITEM_SONG_BOLERO) { + HandleBAInventoryDefenseHearts(); + } else if (itemOnCRight == ITEM_SONG_SERENADE || itemOnCRight == ITEM_SONG_REQUIEM) { + HandleBAInventoryGSTokens(); + } else if (itemOnCRight == ITEM_SONG_NOCTURNE || itemOnCRight == ITEM_SONG_PRELUDE) { + HandleBAPaddingBytes(); + } else if (itemOnCRight >= ITEM_SONG_LULLABY) { + HandleBASceneFlags(); + } +} + +// Reverse Bottle Adventure +void DoRBA(uint8_t itemToPutInBottle) { + auto itemOnCRight = gSaveContext.equips.buttonItems[3]; + + if (itemOnCRight >= ITEM_STICK && itemOnCRight <= ITEM_POTION_BLUE) { + HandleRBAInventoryItems(itemToPutInBottle); + } else if (itemOnCRight >= ITEM_FAIRY && itemOnCRight <= ITEM_MASK_BUNNY) { + HandleRBAInventoryAmmo(itemToPutInBottle); + } else if (itemOnCRight == ITEM_MASK_GORON || itemOnCRight == ITEM_MASK_ZORA) { + HandleRBAInventoryEquipment(itemToPutInBottle); + } else if (itemOnCRight == ITEM_MASK_GERUDO || itemOnCRight == ITEM_MASK_TRUTH) { + HandleRBAPaddingBytes(); + } else if (itemOnCRight >= ITEM_SOLD_OUT && itemOnCRight <= ITEM_COJIRO) { + HandleRBAInventoryUpgrades(itemToPutInBottle); + } else if (itemOnCRight >= ITEM_ODD_MUSHROOM && itemOnCRight <= ITEM_SWORD_BROKEN) { + HandleRBAInventoryQuestItems(itemToPutInBottle); + } else if (itemOnCRight >= ITEM_PRESCRIPTION && itemOnCRight <= ITEM_BULLET_BAG_30) { + HandleRBAInventoryDungeonItems(itemToPutInBottle); + } else if (itemOnCRight >= ITEM_BULLET_BAG_40 && itemOnCRight <= ITEM_SWORD_KNIFE) { + HandleRBAInventoryDungeonKeys(itemToPutInBottle); + } else if (itemOnCRight == ITEM_SONG_BOLERO) { + HandleRBAInventoryDefenseHearts(itemToPutInBottle); + } else if (itemOnCRight == ITEM_SONG_SERENADE || itemOnCRight == ITEM_SONG_REQUIEM) { + HandleRBAInventoryGSTokens(itemToPutInBottle); + } else if (itemOnCRight == ITEM_SONG_NOCTURNE || itemOnCRight == ITEM_SONG_PRELUDE) { + HandleRBAPaddingBytes(); + } else if (itemOnCRight >= ITEM_SONG_LULLABY) { + HandleRBASceneFlags(itemToPutInBottle); + } +} + +void RegisterBottleAdventure() { + REGISTER_VB_SHOULD(VB_SET_BUTTON_ITEM_FROM_C_BUTTON_SLOT, { + // if we aren't dealing with the b button, early return + auto button = static_cast(va_arg(args, int32_t)); + if (button != 0) { + return; + } + + *should = false; + DoBA(); + }); + + REGISTER_VB_SHOULD(VB_UPDATE_BOTTLE_ITEM, { + // if we aren't dealing with a bottle on b, early return + auto buttonBottleIsOn = static_cast(va_arg(args, int32_t)); + if (buttonBottleIsOn != 0) { + return; + } + + *should = false; + + auto itemToPutInBottle = static_cast(va_arg(args, int32_t)); + DoRBA(itemToPutInBottle); + }); +} + +static RegisterShipInitFunc initFunc(RegisterBottleAdventure); diff --git a/soh/soh/Enhancements/Restorations/PauseBufferInputs.cpp b/soh/soh/Enhancements/Restorations/PauseBufferInputs.cpp index 373d481ef..090c46a60 100644 --- a/soh/soh/Enhancements/Restorations/PauseBufferInputs.cpp +++ b/soh/soh/Enhancements/Restorations/PauseBufferInputs.cpp @@ -31,8 +31,9 @@ void RegisterPauseBufferInputs() { COND_VB_SHOULD(VB_KALEIDO_UNPAUSE_CLOSE, CVAR_BUFFER_VALUE || CVAR_INCLUDE_VALUE, { Input* input = &gPlayState->state.input[0]; - // 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 + // 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; @@ -56,16 +57,15 @@ void RegisterPauseBufferInputs() { Input* input = &gPlayState->state.input[0]; PauseContext* pauseCtx = &gPlayState->pauseCtx; - // STEP #1: If the user opts to include held inputs in the buffer window, store the held inputs at the beginning + // 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) - )) { + if (pauseCtx->state == PAUSE_STATE_UNPAUSE_SETUP || + (pauseCtx->state == PAUSE_STATE_SAVEPROMPT && (pauseCtx->unk_1EC == 2 || pauseCtx->unk_1EC == 5))) { inputBufferTimer = 0; } diff --git a/soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp b/soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp index 05e03dae1..8f1f0ac40 100644 --- a/soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp +++ b/soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp @@ -37,10 +37,10 @@ const static std::vector> digitList = { }; const std::vector timeDisplayList = { - { DISPLAY_IN_GAME_TIMER, "Display Gameplay Timer", CVAR_ENHANCEMENT("TimeDisplay.Timers.InGameTimer") }, - { DISPLAY_TIME_OF_DAY, "Display Time of Day", CVAR_ENHANCEMENT("TimeDisplay.Timers.TimeofDay") }, - { DISPLAY_CONDITIONAL_TIMER, "Display Conditional Timer", CVAR_ENHANCEMENT("TimeDisplay.Timers.HotWater") }, - { DISPLAY_NAVI_TIMER, "Display Navi Timer", CVAR_ENHANCEMENT("TimeDisplay.Timers.NaviTimer") } + { DISPLAY_IN_GAME_TIMER, "Display Gameplay Timer", CVAR_TIME_DISPLAY("Timers.InGameTimer") }, + { DISPLAY_TIME_OF_DAY, "Display Time of Day", CVAR_TIME_DISPLAY("Timers.TimeofDay") }, + { DISPLAY_CONDITIONAL_TIMER, "Display Conditional Timer", CVAR_TIME_DISPLAY("Timers.HotWater") }, + { DISPLAY_NAVI_TIMER, "Display Navi Timer", CVAR_TIME_DISPLAY("Timers.NaviTimer") } }; static std::vector activeTimers; @@ -81,7 +81,7 @@ static void TimeDisplayGetTimer(uint32_t timeID) { textColor = COLOR_WHITE; Player* player = GET_PLAYER(gPlayState); - uint32_t timer1 = gSaveContext.timer1Value; + uint32_t timer1 = gSaveContext.timerSeconds; switch (timeID) { case DISPLAY_IN_GAME_TIMER: @@ -99,20 +99,20 @@ static void TimeDisplayGetTimer(uint32_t timeID) { timeDisplayTime = convertDayTime(gSaveContext.dayTime).c_str(); break; case DISPLAY_CONDITIONAL_TIMER: - if (gSaveContext.timer1State > 0) { - timeDisplayTime = formatHotWaterDisplay(gSaveContext.timer1Value).c_str(); + if (gSaveContext.timerState > 0) { + timeDisplayTime = formatHotWaterDisplay(gSaveContext.timerSeconds).c_str(); textColor = - gSaveContext.timer1State <= 4 + gSaveContext.timerState <= 4 ? (gPlayState->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3 ? COLOR_LIGHT_RED : COLOR_LIGHT_BLUE) : COLOR_WHITE; - if (gSaveContext.timer1State <= 4) { + if (gSaveContext.timerState <= 4) { textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( gPlayState->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3 ? itemMapping[ITEM_TUNIC_GORON].name : itemMapping[ITEM_TUNIC_ZORA].name); } - if (gSaveContext.timer1State >= 6) { + if (gSaveContext.timerState >= 6) { textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( itemMapping[ITEM_SWORD_MASTER].name); } @@ -147,18 +147,18 @@ void TimeDisplayUpdateDisplayOptions() { } } - //if (pushBack) { - // activeTimers.push_back(timeDisplayList[timeID]); - //} else { - // uint32_t index = 0; - // for (auto& check : activeTimers) { - // if (check.timeID == timeID) { - // activeTimers.erase(activeTimers.begin() + index); - // return; - // } - // index++; - // } - //} + // if (pushBack) { + // activeTimers.push_back(timeDisplayList[timeID]); + // } else { + // uint32_t index = 0; + // for (auto& check : activeTimers) { + // if (check.timeID == timeID) { + // activeTimers.erase(activeTimers.begin() + index); + // return; + // } + // index++; + // } + // } } void TimeDisplayWindow::Draw() { @@ -174,9 +174,9 @@ void TimeDisplayWindow::Draw() { ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f); ImGui::Begin("TimerDisplay", nullptr, - ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoFocusOnAppearing | - ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoTitleBar | - ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar); + ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoFocusOnAppearing | + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoTitleBar | + ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar); ImGui::SetWindowFontScale(fontScale); if (activeTimers.size() == 0) { ImGui::Text("No Enabled Timers..."); @@ -227,11 +227,11 @@ void TimeDisplayWindow::Draw() { } void TimeDisplayInitSettings() { - fontScale = CVarGetFloat(CVAR_ENHANCEMENT("TimeDisplay.FontScale"), 1.0f); + fontScale = CVarGetFloat(CVAR_TIME_DISPLAY("FontScale"), 1.0f); if (fontScale < 1.0f) { fontScale = 1.0f; } - if (CVarGetInteger(CVAR_ENHANCEMENT("TimeDisplay.ShowWindowBG"), 0)) { + if (CVarGetInteger(CVAR_TIME_DISPLAY("ShowWindowBG"), 0)) { windowBG = ImVec4(0, 0, 0, 0); } else { windowBG = ImVec4(0, 0, 0, 0.5f); @@ -247,13 +247,17 @@ static void TimeDisplayInitTimers() { } void TimeDisplayWindow::InitElement() { - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("GAMEPLAY_TIMER", gClockIconTex, ImVec4(1, 1, 1, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("DAY_TIME_TIMER", gSunIconTex, ImVec4(1, 1, 1, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("NIGHT_TIME_TIMER", gMoonIconTex, ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("GAMEPLAY_TIMER", gClockIconTex, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("DAY_TIME_TIMER", gSunIconTex, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("NIGHT_TIME_TIMER", gMoonIconTex, + ImVec4(1, 1, 1, 1)); Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("NAVI_TIMER", gNaviIconTex, ImVec4(1, 1, 1, 1)); for (auto& load : digitList) { - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(load.first.c_str(), load.second, ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(load.first.c_str(), load.second, + ImVec4(1, 1, 1, 1)); } TimeDisplayInitSettings(); diff --git a/soh/soh/Enhancements/TimeDisplay/TimeDisplay.h b/soh/soh/Enhancements/TimeDisplay/TimeDisplay.h index 671577631..eb213640e 100644 --- a/soh/soh/Enhancements/TimeDisplay/TimeDisplay.h +++ b/soh/soh/Enhancements/TimeDisplay/TimeDisplay.h @@ -5,9 +5,9 @@ class TimeDisplayWindow : public Ship::GuiWindow { using GuiWindow::GuiWindow; void InitElement() override; - void DrawElement() override {}; + void DrawElement() override{}; void Draw() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; void TimeDisplayUpdateDisplayOptions(); @@ -17,7 +17,7 @@ typedef enum TimerDisplay { DISPLAY_IN_GAME_TIMER, DISPLAY_TIME_OF_DAY, DISPLAY_CONDITIONAL_TIMER, - DISPLAY_NAVI_TIMER + DISPLAY_NAVI_TIMER, } TimerDisplay; typedef enum NaviTimerValues { @@ -34,4 +34,4 @@ typedef struct { const char* timeEnable; } TimeObject; -extern const std::vector timeDisplayList; \ No newline at end of file +extern const std::vector timeDisplayList; diff --git a/soh/soh/Enhancements/TimeSavers/FasterHeavyBlockLift.cpp b/soh/soh/Enhancements/TimeSavers/FasterHeavyBlockLift.cpp index 73909cbda..10a22d903 100644 --- a/soh/soh/Enhancements/TimeSavers/FasterHeavyBlockLift.cpp +++ b/soh/soh/Enhancements/TimeSavers/FasterHeavyBlockLift.cpp @@ -4,12 +4,12 @@ #include "spdlog/spdlog.h" extern "C" { - #include "z64save.h" - #include "macros.h" - #include "variables.h" - #include "functions.h" - extern PlayState* gPlayState; - extern SaveContext gSaveContext; +#include "z64save.h" +#include "macros.h" +#include "variables.h" +#include "functions.h" +extern PlayState* gPlayState; +extern SaveContext gSaveContext; } /** @@ -20,29 +20,30 @@ void FasterHeavyBlockLift_Register() { REGISTER_VB_SHOULD(VB_PLAY_ONEPOINT_ACTOR_CS, { Actor* actor = va_arg(args, Actor*); - if ( - actor->id == ACTOR_BG_HEAVY_BLOCK && - (CVarGetInteger(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), IS_RANDO)) - ) { + if (actor->id == ACTOR_BG_HEAVY_BLOCK && + (CVarGetInteger(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), IS_RANDO))) { *should = false; } }); REGISTER_VB_SHOULD(VB_FREEZE_LINK_FOR_BLOCK_THROW, { - if (CVarGetInteger(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 0) || CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), IS_RANDO)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), IS_RANDO)) { *should = false; } }); REGISTER_VB_SHOULD(VB_PLAY_THROW_ANIMATION, { - Player *player = GET_PLAYER(gPlayState); + Player* player = GET_PLAYER(gPlayState); Actor* interactRangeActor = player->interactRangeActor; s32 interactActorId = interactRangeActor->id; LinkAnimationHeader* anim = va_arg(args, LinkAnimationHeader*); // Same actor is used for small and large silver rocks, use actor params to identify large ones bool isLargeSilverRock = interactActorId == ACTOR_EN_ISHI && interactRangeActor->params & 1 == 1; - if (CVarGetInteger(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 0) && (isLargeSilverRock || interactActorId == ACTOR_BG_HEAVY_BLOCK)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 0) && + (isLargeSilverRock || interactActorId == ACTOR_BG_HEAVY_BLOCK)) { *should = false; LinkAnimation_PlayOnceSetSpeed(gPlayState, &player->skelAnime, anim, 5.0f); } diff --git a/soh/soh/Enhancements/TimeSavers/FasterRupeeAccumulator.cpp b/soh/soh/Enhancements/TimeSavers/FasterRupeeAccumulator.cpp index b7b6587ba..36a780b6a 100644 --- a/soh/soh/Enhancements/TimeSavers/FasterRupeeAccumulator.cpp +++ b/soh/soh/Enhancements/TimeSavers/FasterRupeeAccumulator.cpp @@ -4,17 +4,18 @@ #include "spdlog/spdlog.h" extern "C" { - #include "z64save.h" - #include "macros.h" - #include "variables.h" - #include "functions.h" - extern PlayState* gPlayState; - extern SaveContext gSaveContext; +#include "z64save.h" +#include "macros.h" +#include "variables.h" +#include "functions.h" +extern PlayState* gPlayState; +extern SaveContext gSaveContext; } void FasterRupeeAccumulator_Register() { GameInteractor::Instance->RegisterGameHook([]() { - if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.FasterRupeeAccumulator"), 0)) return; + if (!CVarGetInteger(CVAR_ENHANCEMENT("FasterRupeeAccumulator"), 0)) + return; if (gSaveContext.rupeeAccumulator == 0) { return; @@ -28,10 +29,10 @@ void FasterRupeeAccumulator_Register() { } if (gSaveContext.rupeeAccumulator >= 10 && gSaveContext.rupees + 10 < CUR_CAPACITY(UPG_WALLET)) { - gSaveContext.rupeeAccumulator-= 10; + gSaveContext.rupeeAccumulator -= 10; gSaveContext.rupees += 10; } - // Losing rupees + // Losing rupees } else if (gSaveContext.rupeeAccumulator < 0) { // No rupees to lose if (gSaveContext.rupees == 0) { diff --git a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipBlueWarp.cpp b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipBlueWarp.cpp index ae4236218..674adcdfb 100644 --- a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipBlueWarp.cpp +++ b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipBlueWarp.cpp @@ -24,7 +24,7 @@ void SkipBlueWarp_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_l if (IS_BOSS_RUSH) { return; } - + bool overrideBlueWarpDestinations = IS_RANDO && (RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF || RAND_GET_OPTION(RSK_SHUFFLE_BOSS_ENTRANCES) != RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF); @@ -37,16 +37,19 @@ void SkipBlueWarp_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_l if (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0 && gSaveContext.cutsceneIndex == 0xFFF1) { gSaveContext.entranceIndex = ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP; isBlueWarpCutscene = true; - // Dodongo's Cavern Blue warp - } else if (gSaveContext.entranceIndex == ENTR_DEATH_MOUNTAIN_TRAIL_BOTTOM_EXIT && gSaveContext.cutsceneIndex == 0xFFF1) { + // Dodongo's Cavern Blue warp + } else if (gSaveContext.entranceIndex == ENTR_DEATH_MOUNTAIN_TRAIL_BOTTOM_EXIT && + gSaveContext.cutsceneIndex == 0xFFF1) { gSaveContext.entranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_DODONGO_BLUE_WARP; isBlueWarpCutscene = true; - // Jabu Jabu's Blue warp - } else if (gSaveContext.entranceIndex == ENTR_ZORAS_FOUNTAIN_JABU_JABU_BLUE_WARP && gSaveContext.cutsceneIndex == 0xFFF0) { + // Jabu Jabu's Blue warp + } else if (gSaveContext.entranceIndex == ENTR_ZORAS_FOUNTAIN_JABU_JABU_BLUE_WARP && + gSaveContext.cutsceneIndex == 0xFFF0) { gSaveContext.entranceIndex = ENTR_ZORAS_FOUNTAIN_JABU_JABU_BLUE_WARP; isBlueWarpCutscene = true; - // Forest Temple Blue warp - } else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_FOREST) { + // Forest Temple Blue warp + } else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && + gSaveContext.chamberCutsceneNum == CHAMBER_CS_FOREST) { // Normally set in the blue warp cutscene Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_DEKU_TREE_SPROUT); @@ -57,27 +60,31 @@ void SkipBlueWarp_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_l } isBlueWarpCutscene = true; - // Fire Temple Blue warp - } else if (gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_FRONT_GATE && gSaveContext.cutsceneIndex == 0xFFF3) { + // Fire Temple Blue warp + } else if (gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_FRONT_GATE && + gSaveContext.cutsceneIndex == 0xFFF3) { // Normally set in the blue warp cutscene Flags_SetEventChkInf(EVENTCHKINF_DEATH_MOUNTAIN_ERUPTED); gSaveContext.entranceIndex = ENTR_DEATH_MOUNTAIN_CRATER_FIRE_TEMPLE_BLUE_WARP; isBlueWarpCutscene = true; - // Water Temple Blue warp - } else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_WATER) { + // Water Temple Blue warp + } else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && + gSaveContext.chamberCutsceneNum == CHAMBER_CS_WATER) { // Normally set in the blue warp cutscene gSaveContext.dayTime = gSaveContext.skyboxTime = 0x4800; Flags_SetEventChkInf(EVENTCHKINF_RAISED_LAKE_HYLIA_WATER); gSaveContext.entranceIndex = ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP; isBlueWarpCutscene = true; - // Spirit Temple Blue warp - } else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_SPIRIT) { + // Spirit Temple Blue warp + } else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && + gSaveContext.chamberCutsceneNum == CHAMBER_CS_SPIRIT) { gSaveContext.entranceIndex = ENTR_DESERT_COLOSSUS_SPIRIT_TEMPLE_BLUE_WARP; isBlueWarpCutscene = true; - // Shadow Temple Blue warp - } else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_SHADOW) { + // Shadow Temple Blue warp + } else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && + gSaveContext.chamberCutsceneNum == CHAMBER_CS_SHADOW) { gSaveContext.entranceIndex = ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP; isBlueWarpCutscene = true; } @@ -92,7 +99,8 @@ void SkipBlueWarp_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_l gSaveContext.cutsceneIndex = 0; } - // This is outside the above condition because we want to handle both first and following visits to the blue warp + // This is outside the above condition because we want to handle both first and following visits to the blue + // warp if (sEnteredBlueWarp && overrideBlueWarpDestinations) { Entrance_OverrideBlueWarp(); } @@ -111,7 +119,7 @@ void SkipBlueWarp_ShouldPlayBlueWarpCS(GIVanillaBehavior _, bool* should, va_lis /** * While we could rely on the Item_Give that's normally called, it's not very clear to the player that they - * received the item when skipping the blue warp cutscene, so we'll prevent that and queue it up to be given + * received the item when skipping the blue warp cutscene, so we'll prevent that and queue it up to be given * to the player instead. */ void SkipBlueWarp_ShouldGiveItem(GIVanillaBehavior _, bool* should, va_list originalArgs) { @@ -142,31 +150,35 @@ void EnKo_MoveWhenReady(EnKo* enKo, PlayState* play) { void SkipBlueWarp_OnActorUpdate(void* actorPtr) { EnKo* enKo = static_cast(actorPtr); - if ( - (enKo->actor.params & 0xFF) == ENKO_TYPE_CHILD_3 && - enKo->actionFunc == func_80A995CC && - CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO) - ) { + if ((enKo->actor.params & 0xFF) == ENKO_TYPE_CHILD_3 && enKo->actionFunc == func_80A995CC && + CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { enKo->actionFunc = EnKo_MoveWhenReady; } } /** * This will ensure that the Deku Tree Sprout considers the Forest Temple finished when you skip the blue warp cutscene. - * Typically this checks for if you have the medallion, and when skipping the cutscene at this point you don't have it yet. + * Typically this checks for if you have the medallion, and when skipping the cutscene at this point you don't have it + * yet. */ void SkipBlueWarp_ShouldDekuJrConsiderForestTempleFinished(GIVanillaBehavior _, bool* should, va_list originalArgs) { if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { - if (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP && gSaveContext.cutsceneIndex == 0xFFF1) { + if (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP && + gSaveContext.cutsceneIndex == 0xFFF1) { *should = Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP); } } } void SkipBlueWarp_Register() { - GameInteractor::Instance->RegisterGameHookForID(ACTOR_EN_KO, SkipBlueWarp_OnActorUpdate); - GameInteractor::Instance->RegisterGameHookForID(VB_PLAY_TRANSITION_CS, SkipBlueWarp_ShouldPlayTransitionCS); - GameInteractor::Instance->RegisterGameHookForID(VB_PLAY_BLUE_WARP_CS, SkipBlueWarp_ShouldPlayBlueWarpCS); - GameInteractor::Instance->RegisterGameHookForID(VB_DEKU_JR_CONSIDER_FOREST_TEMPLE_FINISHED, SkipBlueWarp_ShouldDekuJrConsiderForestTempleFinished); - GameInteractor::Instance->RegisterGameHookForID(VB_GIVE_ITEM_FROM_BLUE_WARP, SkipBlueWarp_ShouldGiveItem); + GameInteractor::Instance->RegisterGameHookForID(ACTOR_EN_KO, + SkipBlueWarp_OnActorUpdate); + GameInteractor::Instance->RegisterGameHookForID( + VB_PLAY_TRANSITION_CS, SkipBlueWarp_ShouldPlayTransitionCS); + GameInteractor::Instance->RegisterGameHookForID( + VB_PLAY_BLUE_WARP_CS, SkipBlueWarp_ShouldPlayBlueWarpCS); + GameInteractor::Instance->RegisterGameHookForID( + VB_DEKU_JR_CONSIDER_FOREST_TEMPLE_FINISHED, SkipBlueWarp_ShouldDekuJrConsiderForestTempleFinished); + GameInteractor::Instance->RegisterGameHookForID(VB_GIVE_ITEM_FROM_BLUE_WARP, + SkipBlueWarp_ShouldGiveItem); } diff --git a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipDekuTreeIntro.cpp b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipDekuTreeIntro.cpp index e1cc1db21..361f69d68 100644 --- a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipDekuTreeIntro.cpp +++ b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipDekuTreeIntro.cpp @@ -3,18 +3,19 @@ #include "soh/OTRGlobals.h" extern "C" { - #include "src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.h" +#include "src/overlays/actors/ovl_Bg_Treemouth/z_bg_treemouth.h" } /** * This will skip the Deku Tree intro, and simply open the mouth as you approach it. -*/ + */ void SkipDekuTreeIntro_Register() { REGISTER_VB_SHOULD(VB_PLAY_DEKU_TREE_INTRO_CS, { if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { BgTreemouth* treeMouth = va_arg(args, BgTreemouth*); Flags_SetEventChkInf(EVENTCHKINF_DEKU_TREE_OPENED_MOUTH); - Audio_PlaySoundGeneral(NA_SE_EV_WOODDOOR_OPEN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_EV_WOODDOOR_OPEN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); BgTreemouth_SetupAction(treeMouth, func_808BC6F8); *should = false; } diff --git a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipLostWoodsBridge.cpp b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipLostWoodsBridge.cpp index d487c1f47..9485bdb0f 100644 --- a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipLostWoodsBridge.cpp +++ b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipLostWoodsBridge.cpp @@ -3,19 +3,21 @@ #include "soh/OTRGlobals.h" extern "C" { - #include "z64save.h" - #include "functions.h" - extern PlayState* gPlayState; - extern SaveContext gSaveContext; +#include "z64save.h" +#include "functions.h" +extern PlayState* gPlayState; +extern SaveContext gSaveContext; } void SkipLostWoodsBridge_Register() { /** - * This skips the cutscene where you speak to Saria on the bridge in Lost Woods, where she gives you the Fairy Ocarina. + * This skips the cutscene where you speak to Saria on the bridge in Lost Woods, where she gives you the Fairy + * Ocarina. */ REGISTER_VB_SHOULD(VB_PLAY_TRANSITION_CS, { if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { - if ((gSaveContext.entranceIndex == ENTR_LOST_WOODS_BRIDGE_EAST_EXIT) && !Flags_GetEventChkInf(EVENTCHKINF_SPOKE_TO_SARIA_ON_BRIDGE)) { + if ((gSaveContext.entranceIndex == ENTR_LOST_WOODS_BRIDGE_EAST_EXIT) && + !Flags_GetEventChkInf(EVENTCHKINF_SPOKE_TO_SARIA_ON_BRIDGE)) { Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_SARIA_ON_BRIDGE); if (GameInteractor_Should(VB_GIVE_ITEM_FAIRY_OCARINA, true)) { Item_Give(gPlayState, ITEM_OCARINA_FAIRY); @@ -26,8 +28,9 @@ void SkipLostWoodsBridge_Register() { }); /** - * While we could rely on the Item_Give that's normally called (and that we have above), it's not very clear to the player - * that they received the item when skipping the cutscene, so we'll prevent it, and queue it up to be given instead. + * While we could rely on the Item_Give that's normally called (and that we have above), it's not very clear to the + * player that they received the item when skipping the cutscene, so we'll prevent it, and queue it up to be given + * instead. */ REGISTER_VB_SHOULD(VB_GIVE_ITEM_FAIRY_OCARINA, { if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { diff --git a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipToGivingZeldasLetter.cpp b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipToGivingZeldasLetter.cpp index 357125db8..c623d46d2 100644 --- a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipToGivingZeldasLetter.cpp +++ b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipToGivingZeldasLetter.cpp @@ -3,7 +3,7 @@ #include "soh/OTRGlobals.h" extern "C" { - #include "src/overlays/actors/ovl_En_Zl4/z_en_zl4.h" +#include "src/overlays/actors/ovl_En_Zl4/z_en_zl4.h" } /** @@ -21,7 +21,8 @@ void EnZl4_SkipToGivingZeldasLetter(EnZl4* enZl4, PlayState* play) { Audio_PlayFanfare(NA_BGM_APPEAR); enZl4->csState = 8; // ZL4_CS_PLAN } else { - Npc_UpdateTalking(play, &enZl4->actor, &enZl4->interactInfo.talkState, enZl4->collider.dim.radius + 60.0f, EnZl4_GiveItemTextId, func_80B5B9B0); + Npc_UpdateTalking(play, &enZl4->actor, &enZl4->interactInfo.talkState, enZl4->collider.dim.radius + 60.0f, + EnZl4_GiveItemTextId, func_80B5B9B0); func_80B5BB78(enZl4, play); if (enZl4->interactInfo.talkState != NPC_TALK_STATE_IDLE) { @@ -34,12 +35,14 @@ void EnZl4_SkipToGivingZeldasLetter(EnZl4* enZl4, PlayState* play) { void SkipToGivingZeldasLetter_OnActorInit(void* actorPtr) { if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { EnZl4* enZl4 = static_cast(actorPtr); - if (enZl4->actionFunc != EnZl4_Cutscene || enZl4->csState != 0) return; + if (enZl4->actionFunc != EnZl4_Cutscene || enZl4->csState != 0) + return; enZl4->actionFunc = EnZl4_SkipToGivingZeldasLetter; } } void SkipToGivingZeldasLetter_Register() { - GameInteractor::Instance->RegisterGameHookForID(ACTOR_EN_ZL4, SkipToGivingZeldasLetter_OnActorInit); + GameInteractor::Instance->RegisterGameHookForID(ACTOR_EN_ZL4, + SkipToGivingZeldasLetter_OnActorInit); } diff --git a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipZeldaFleeingCastle.cpp b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipZeldaFleeingCastle.cpp index 1cb331539..56d26f01d 100644 --- a/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipZeldaFleeingCastle.cpp +++ b/soh/soh/Enhancements/TimeSavers/SkipCutscene/Story/SkipZeldaFleeingCastle.cpp @@ -3,9 +3,9 @@ #include "soh/OTRGlobals.h" extern "C" { - #include "z64save.h" - #include "functions.h" - extern SaveContext gSaveContext; +#include "z64save.h" +#include "functions.h" +extern SaveContext gSaveContext; } void SkipZeldaFleeingCastle_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_list originalArgs) { @@ -46,13 +46,11 @@ void SkipZeldaFleeingCastle_OnActorUpdate(void* actorPtr) { void SkipZeldaFleeingCastle_OnActorInit(void* actorPtr) { Actor* actor = static_cast(actorPtr); - if ( - actor->params == 3 && - CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO) - ) { + if (actor->params == 3 && CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { framesSinceSpawn = 0; - itemOcarinaUpdateHook = GameInteractor::Instance->RegisterGameHookForPtr((uintptr_t)actorPtr, SkipZeldaFleeingCastle_OnActorUpdate); - sceneInitHook = GameInteractor::Instance->RegisterGameHook([] (int16_t sceneNum) { + itemOcarinaUpdateHook = GameInteractor::Instance->RegisterGameHookForPtr( + (uintptr_t)actorPtr, SkipZeldaFleeingCastle_OnActorUpdate); + sceneInitHook = GameInteractor::Instance->RegisterGameHook([](int16_t sceneNum) { GameInteractor::Instance->UnregisterGameHookForPtr(itemOcarinaUpdateHook); GameInteractor::Instance->UnregisterGameHook(sceneInitHook); itemOcarinaUpdateHook = 0; @@ -62,6 +60,8 @@ void SkipZeldaFleeingCastle_OnActorInit(void* actorPtr) { } void SkipZeldaFleeingCastle_Register() { - GameInteractor::Instance->RegisterGameHookForID(ACTOR_ITEM_OCARINA, SkipZeldaFleeingCastle_OnActorInit); - GameInteractor::Instance->RegisterGameHookForID(VB_PLAY_TRANSITION_CS, SkipZeldaFleeingCastle_ShouldPlayTransitionCS); + GameInteractor::Instance->RegisterGameHookForID(ACTOR_ITEM_OCARINA, + SkipZeldaFleeingCastle_OnActorInit); + GameInteractor::Instance->RegisterGameHookForID( + VB_PLAY_TRANSITION_CS, SkipZeldaFleeingCastle_ShouldPlayTransitionCS); } diff --git a/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/MoveJabuJabuElevator.cpp b/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/MoveJabuJabuElevator.cpp index 1e1c6ceb5..704339424 100644 --- a/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/MoveJabuJabuElevator.cpp +++ b/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/MoveJabuJabuElevator.cpp @@ -10,18 +10,19 @@ extern "C" { * Adjusts the behavior of the elevator to start near the bottom if you are entering the room from the bottom */ void MoveJabuJabuElevator_Register() { - GameInteractor::Instance->RegisterGameHookForID(ACTOR_BG_BDAN_OBJECTS, [](void* actorRef) { - Player* player = GET_PLAYER(gPlayState); - BgBdanObjects* bgBdanObjects = static_cast(actorRef); + GameInteractor::Instance->RegisterGameHookForID( + ACTOR_BG_BDAN_OBJECTS, [](void* actorRef) { + Player* player = GET_PLAYER(gPlayState); + BgBdanObjects* bgBdanObjects = static_cast(actorRef); - if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) { - return; - } - - if (bgBdanObjects->dyna.actor.params == 1) { - if (player->actor.world.pos.y < -500.0f) { - bgBdanObjects->timer = 220; + if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) { + return; } - } - }); + + if (bgBdanObjects->dyna.actor.params == 1) { + if (player->actor.world.pos.y < -500.0f) { + bgBdanObjects->timer = 220; + } + } + }); } diff --git a/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/MoveMidoInKokiriForest.cpp b/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/MoveMidoInKokiriForest.cpp index 59381968a..6e9b94b4a 100644 --- a/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/MoveMidoInKokiriForest.cpp +++ b/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/MoveMidoInKokiriForest.cpp @@ -3,12 +3,12 @@ #include "soh/OTRGlobals.h" extern "C" { - #include "z64save.h" - #include "macros.h" - #include "variables.h" - #include "functions.h" - extern PlayState* gPlayState; - extern SaveContext gSaveContext; +#include "z64save.h" +#include "macros.h" +#include "variables.h" +#include "functions.h" +extern PlayState* gPlayState; +extern SaveContext gSaveContext; } /** @@ -17,13 +17,10 @@ extern "C" { */ void MoveMidoInKokiriForest_Register() { REGISTER_VB_SHOULD(VB_MOVE_MIDO_IN_KOKIRI_FOREST, { - if ( - CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO) && + if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO) && !Flags_GetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD) && - (CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SHIELD_DEKU) && - (CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_KOKIRI) && - gSaveContext.cutsceneIndex == 0 - ) { + (CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SHIELD_DEKU) && + (CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_KOKIRI) && gSaveContext.cutsceneIndex == 0) { Flags_SetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD); *should = true; } diff --git a/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/SkipChildRutoInteractions.cpp b/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/SkipChildRutoInteractions.cpp index 2894cb914..97b65a543 100644 --- a/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/SkipChildRutoInteractions.cpp +++ b/soh/soh/Enhancements/TimeSavers/SkipMiscInteractions/SkipChildRutoInteractions.cpp @@ -29,7 +29,7 @@ void SkipChildRutoInteractions_Register() { if (*should) { Animation_Change(&enRu1->skelAnime, (AnimationHeader*)&gRutoChildTurnAroundAnim, 1.0f, 0, - Animation_GetLastFrame((void*)&gRutoChildTurnAroundAnim), ANIMMODE_ONCE, -8.0f); + Animation_GetLastFrame((void*)&gRutoChildTurnAroundAnim), ANIMMODE_ONCE, -8.0f); enRu1->action = 10; } @@ -48,7 +48,8 @@ void SkipChildRutoInteractions_Register() { } }); - // Prevents Ruto from running to the Sapphire when she wants to be tossed to it, instead she just stands up and waits for link to get closer + // Prevents Ruto from running to the Sapphire when she wants to be tossed to it, instead she just stands up and + // waits for link to get closer REGISTER_VB_SHOULD(VB_RUTO_RUN_TO_SAPPHIRE, { EnRu1* enRu1 = va_arg(args, EnRu1*); DynaPolyActor* dynaPolyActor = va_arg(args, DynaPolyActor*); @@ -63,12 +64,13 @@ void SkipChildRutoInteractions_Register() { Flags_SetSwitch(gPlayState, 0x02); Flags_SetSwitch(gPlayState, 0x1F); enRu1->action = 42; - Animation_Change(&enRu1->skelAnime, (AnimationHeader*)&gRutoChildWait2Anim, 1.0f, 0, - Animation_GetLastFrame((void*)&gRutoChildWait2Anim), ANIMMODE_LOOP, -8.0f); + Animation_Change(&enRu1->skelAnime, (AnimationHeader*)&gRutoChildWait2Anim, 1.0f, 0, + Animation_GetLastFrame((void*)&gRutoChildWait2Anim), ANIMMODE_LOOP, -8.0f); // If we aren't skipping one point cutscenes and BgBdan objects has set the camera setting // to CAM_SET_NORMAL1 (2), don't reset the camera setting to 1. This prevents the One Point // Cutscene of Ruto getting lifted up from getting queued up twice. - if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), IS_RANDO) || enRu1->unk_28C->cameraSetting != 2) { + if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), IS_RANDO) || + enRu1->unk_28C->cameraSetting != 2) { enRu1->unk_28C->cameraSetting = 1; } Actor* sapphire = func_80AEB124(gPlayState); @@ -80,7 +82,8 @@ void SkipChildRutoInteractions_Register() { } }); - // This overrides the behavior that causes Ruto to get upset at you before sitting back down again when INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME is set + // This overrides the behavior that causes Ruto to get upset at you before sitting back down again when + // INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME is set GameInteractor::Instance->RegisterGameHookForID(ACTOR_EN_RU1, [](void* actorRef) { EnRu1* enRu1 = static_cast(actorRef); if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) { @@ -92,7 +95,7 @@ void SkipChildRutoInteractions_Register() { enRu1->drawConfig = 1; enRu1->actor.flags |= ACTOR_FLAG_ATTENTION_ENABLED | ACTOR_FLAG_FRIENDLY; Animation_Change(&enRu1->skelAnime, (AnimationHeader*)&gRutoChildSittingAnim, 1.0f, 0.0f, - Animation_GetLastFrame((void*)&gRutoChildSittingAnim), ANIMMODE_LOOP, 0.0f); + Animation_GetLastFrame((void*)&gRutoChildSittingAnim), ANIMMODE_LOOP, 0.0f); } }); } diff --git a/soh/soh/Enhancements/TimeSavers/TimeSavers.cpp b/soh/soh/Enhancements/TimeSavers/TimeSavers.cpp index a198f8289..a881675d6 100644 --- a/soh/soh/Enhancements/TimeSavers/TimeSavers.cpp +++ b/soh/soh/Enhancements/TimeSavers/TimeSavers.cpp @@ -2,17 +2,17 @@ void TimeSavers_Register() { // SkipCutscene - // Story - SkipBlueWarp_Register(); - SkipDekuTreeIntro_Register(); - SkipLostWoodsBridge_Register(); - SkipToGivingZeldasLetter_Register(); - SkipZeldaFleeingCastle_Register(); - SkipIntro_Register(); + // Story + SkipBlueWarp_Register(); + SkipDekuTreeIntro_Register(); + SkipLostWoodsBridge_Register(); + SkipToGivingZeldasLetter_Register(); + SkipZeldaFleeingCastle_Register(); + SkipIntro_Register(); // SkipMiscInteractions - MoveJabuJabuElevator_Register(); - MoveMidoInKokiriForest_Register(); - SkipChildRutoInteractions_Register(); + MoveJabuJabuElevator_Register(); + MoveMidoInKokiriForest_Register(); + SkipChildRutoInteractions_Register(); FasterHeavyBlockLift_Register(); FasterRupeeAccumulator_Register(); } diff --git a/soh/soh/Enhancements/TimeSavers/TimeSavers.h b/soh/soh/Enhancements/TimeSavers/TimeSavers.h index ad521c6c2..9448260d6 100644 --- a/soh/soh/Enhancements/TimeSavers/TimeSavers.h +++ b/soh/soh/Enhancements/TimeSavers/TimeSavers.h @@ -4,17 +4,17 @@ void TimeSavers_Register(); // SkipCutscene - // Story - void SkipBlueWarp_Register(); - void SkipDekuTreeIntro_Register(); - void SkipLostWoodsBridge_Register(); - void SkipToGivingZeldasLetter_Register(); - void SkipZeldaFleeingCastle_Register(); - void SkipIntro_Register(); +// Story +void SkipBlueWarp_Register(); +void SkipDekuTreeIntro_Register(); +void SkipLostWoodsBridge_Register(); +void SkipToGivingZeldasLetter_Register(); +void SkipZeldaFleeingCastle_Register(); +void SkipIntro_Register(); // SkipMiscInteractions - void MoveJabuJabuElevator_Register(); - void MoveMidoInKokiriForest_Register(); - void SkipChildRutoInteractions_Register(); +void MoveJabuJabuElevator_Register(); +void MoveMidoInKokiriForest_Register(); +void SkipChildRutoInteractions_Register(); void FasterHeavyBlockLift_Register(); void FasterRupeeAccumulator_Register(); diff --git a/soh/soh/Enhancements/audio/AudioCollection.cpp b/soh/soh/Enhancements/audio/AudioCollection.cpp index 28e8d3d99..69b3723b4 100644 --- a/soh/soh/Enhancements/audio/AudioCollection.cpp +++ b/soh/soh/Enhancements/audio/AudioCollection.cpp @@ -11,9 +11,14 @@ #include #define SEQUENCE_MAP_ENTRY(sequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement) \ - { sequenceId, { sequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement } } + { \ + sequenceId, { \ + sequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement \ + } \ + } AudioCollection::AudioCollection() { + // clang-format off // (originalSequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement), sequenceMap = { @@ -328,7 +333,7 @@ AudioCollection::AudioCollection() { //SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x88_YOBI, "NA_SE_VO_DUMMY_0x88_YOBI", "NA_SE_VO_DUMMY_0x88_YOBI", SEQ_VOICE, true, false), // .. //SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x89_YOBI, "NA_SE_VO_DUMMY_0x89_YOBI", "NA_SE_VO_DUMMY_0x89_YOBI", SEQ_VOICE, true, false), // .. }; - + // clang-format on } std::string AudioCollection::GetCvarKey(std::string sfxKey) { @@ -354,10 +359,13 @@ void AudioCollection::AddToCollection(char* otrPath, uint16_t seqNum) { if (typeString == "fanfare") { type = SEQ_FANFARE; } - SequenceInfo info = {seqNum, - sequenceName, - StringHelper::Replace(StringHelper::Replace(StringHelper::Replace(sequenceName, " ", "_"), "~", "-"),".", ""), - type, false, true}; + SequenceInfo info = { seqNum, + sequenceName, + StringHelper::Replace( + StringHelper::Replace(StringHelper::Replace(sequenceName, " ", "_"), "~", "-"), ".", ""), + type, + false, + true }; sequenceMap.emplace(seqNum, info); } @@ -366,7 +374,8 @@ uint16_t AudioCollection::GetReplacementSequence(uint16_t seqId) { // for Hyrule Field instead. Otherwise, leave it alone, so that without any sfx editor modifications we will // play the normal track as usual. if (seqId == NA_BGM_FIELD_MORNING) { - if (CVarGetInteger(CVAR_AUDIO("ReplacedSequences.NA_BGM_FIELD_LOGIC.value"), NA_BGM_FIELD_LOGIC) != NA_BGM_FIELD_LOGIC) { + if (CVarGetInteger(CVAR_AUDIO("ReplacedSequences.NA_BGM_FIELD_LOGIC.value"), NA_BGM_FIELD_LOGIC) != + NA_BGM_FIELD_LOGIC) { seqId = NA_BGM_FIELD_LOGIC; } } @@ -401,10 +410,12 @@ void AudioCollection::AddToShufflePool(SequenceInfo* seqInfo) { } void AudioCollection::InitializeShufflePool() { - if (shufflePoolInitialized) return; - + if (shufflePoolInitialized) + return; + for (auto& [seqId, seqInfo] : sequenceMap) { - if (!seqInfo.canBeUsedAsReplacement) continue; + if (!seqInfo.canBeUsedAsReplacement) + continue; const std::string cvarKey = std::string(CVAR_AUDIO("Excluded.")) + seqInfo.sfxKey; if (CVarGetInteger(cvarKey.c_str(), 0)) { excludedSequences.insert(&seqInfo); @@ -416,7 +427,7 @@ void AudioCollection::InitializeShufflePool() { shufflePoolInitialized = true; }; -extern "C" void AudioCollection_AddToCollection(char *otrPath, uint16_t seqNum) { +extern "C" void AudioCollection_AddToCollection(char* otrPath, uint16_t seqNum) { AudioCollection::Instance->AddToCollection(otrPath, seqNum); } diff --git a/soh/soh/Enhancements/audio/AudioCollection.h b/soh/soh/Enhancements/audio/AudioCollection.h index f3fd964bc..2cdb02e21 100644 --- a/soh/soh/Enhancements/audio/AudioCollection.h +++ b/soh/soh/Enhancements/audio/AudioCollection.h @@ -6,16 +6,16 @@ #include enum SeqType { - SEQ_NOSHUFFLE = 0, - SEQ_BGM_WORLD = 1 << 0, - SEQ_BGM_EVENT = 1 << 1, + SEQ_NOSHUFFLE = 0, + SEQ_BGM_WORLD = 1 << 0, + SEQ_BGM_EVENT = 1 << 1, SEQ_BGM_BATTLE = 1 << 2, - SEQ_OCARINA = 1 << 3, - SEQ_FANFARE = 1 << 4, - SEQ_BGM_ERROR = 1 << 5, - SEQ_SFX = 1 << 6, + SEQ_OCARINA = 1 << 3, + SEQ_FANFARE = 1 << 4, + SEQ_BGM_ERROR = 1 << 5, + SEQ_SFX = 1 << 6, SEQ_INSTRUMENT = 1 << 7, - SEQ_VOICE = 1 << 8, + SEQ_VOICE = 1 << 8, SEQ_BGM_CUSTOM = SEQ_BGM_WORLD | SEQ_BGM_EVENT | SEQ_BGM_BATTLE, }; @@ -31,45 +31,45 @@ struct SequenceInfo { }; class AudioCollection { - private: - // All Loaded Audio - std::map sequenceMap; - - // Sequences/SFX to include in/exclude from shuffle pool - struct compareSequenceLabel { - bool operator() (SequenceInfo* a, SequenceInfo* b) const { - return a->label < b->label; - }; - }; - std::set includedSequences; - std::set excludedSequences; - bool shufflePoolInitialized = false; + private: + // All Loaded Audio + std::map sequenceMap; - public: - static AudioCollection* Instance; - AudioCollection(); - std::map GetAllSequences() const { - return sequenceMap; - } - std::set GetIncludedSequences() const { - return includedSequences; + // Sequences/SFX to include in/exclude from shuffle pool + struct compareSequenceLabel { + bool operator()(SequenceInfo* a, SequenceInfo* b) const { + return a->label < b->label; }; - std::set GetExcludedSequences() const { - return excludedSequences; - }; - void AddToShufflePool(SequenceInfo*); - void RemoveFromShufflePool(SequenceInfo*); - void AddToCollection(char* otrPath, uint16_t seqNum); - uint16_t GetReplacementSequence(uint16_t seqId); - void InitializeShufflePool(); - const char* GetSequenceName(uint16_t seqId); - bool HasSequenceNum(uint16_t seqId); - size_t SequenceMapSize(); - std::string GetCvarKey(std::string sfxKey); - std::string GetCvarLockKey(std::string sfxKey); + }; + std::set includedSequences; + std::set excludedSequences; + bool shufflePoolInitialized = false; + + public: + static AudioCollection* Instance; + AudioCollection(); + std::map GetAllSequences() const { + return sequenceMap; + } + std::set GetIncludedSequences() const { + return includedSequences; + }; + std::set GetExcludedSequences() const { + return excludedSequences; + }; + void AddToShufflePool(SequenceInfo*); + void RemoveFromShufflePool(SequenceInfo*); + void AddToCollection(char* otrPath, uint16_t seqNum); + uint16_t GetReplacementSequence(uint16_t seqId); + void InitializeShufflePool(); + const char* GetSequenceName(uint16_t seqId); + bool HasSequenceNum(uint16_t seqId); + size_t SequenceMapSize(); + std::string GetCvarKey(std::string sfxKey); + std::string GetCvarLockKey(std::string sfxKey); }; #else -void AudioCollection_AddToCollection(char *otrPath, uint16_t seqNum); +void AudioCollection_AddToCollection(char* otrPath, uint16_t seqNum); const char* AudioCollection_GetSequenceName(uint16_t seqId); bool AudioCollection_HasSequenceNum(uint16_t seqId); size_t AudioCollection_SequenceMapSize(); diff --git a/soh/soh/Enhancements/audio/AudioEditor.cpp b/soh/soh/Enhancements/audio/AudioEditor.cpp index 3daeff01f..9865615bd 100644 --- a/soh/soh/Enhancements/audio/AudioEditor.cpp +++ b/soh/soh/Enhancements/audio/AudioEditor.cpp @@ -16,6 +16,11 @@ #include "AudioCollection.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" +extern "C" { +#include "z64save.h" +extern SaveContext gSaveContext; +} + Vec3f pos = { 0.0f, 0.0f, 0.0f }; f32 freqScale = 1.0f; s8 reverbAdd = 0; @@ -53,7 +58,7 @@ size_t AuthenticCountBySequenceType(SeqType type) { case SEQ_VOICE: return SEQ_COUNT_VOICE; default: - return 0; + return 0; } } @@ -96,7 +101,8 @@ void RandomizeGroup(SeqType type) { } // if we didn't find any, return early without shuffling to prevent an infinite loop - if (!values.size()) return; + if (!values.size()) + return; } Shuffle(values); for (const auto& [seqId, seqData] : AudioCollection::Instance->GetAllSequences()) { @@ -105,7 +111,9 @@ void RandomizeGroup(SeqType type) { // don't randomize locked entries if ((seqData.category & type) && CVarGetInteger(cvarLockKey.c_str(), 0) == 0) { // Only save authentic sequence CVars - if ((((seqData.category & SEQ_BGM_CUSTOM) || seqData.category == SEQ_FANFARE) && seqData.sequenceId >= MAX_AUTHENTIC_SEQID) || seqData.canBeReplaced == false) { + if ((((seqData.category & SEQ_BGM_CUSTOM) || seqData.category == SEQ_FANFARE) && + seqData.sequenceId >= MAX_AUTHENTIC_SEQID) || + seqData.canBeReplaced == false) { continue; } const int randomValue = values.back(); @@ -167,20 +175,20 @@ void DrawPreviewButton(uint16_t sequenceId, std::string sfxKey, SeqType sequence if (CVarGetInteger(CVAR_AUDIO("Playing"), 0) == sequenceId) { if (UIWidgets::Button(stopButton.c_str(), UIWidgets::ButtonOptions() - .Size(UIWidgets::Sizes::Inline) - .Padding(ImVec2(10.0f, 6.0f)) - .Tooltip("Stop Preview") - .Color(THEME_COLOR))) { + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(10.0f, 6.0f)) + .Tooltip("Stop Preview") + .Color(THEME_COLOR))) { func_800F5C2C(); CVarSetInteger(CVAR_AUDIO("Playing"), 0); } } else { if (UIWidgets::Button(previewButton.c_str(), UIWidgets::ButtonOptions() - .Size(UIWidgets::Sizes::Inline) - .Padding(ImVec2(10.0f, 6.0f)) - .Tooltip("Play Preview") - .Color(THEME_COLOR))) { - if (CVarGetInteger(CVAR_AUDIO("Playing"), 0) != 0) { + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(10.0f, 6.0f)) + .Tooltip("Play Preview") + .Color(THEME_COLOR))) { + if (CVarGetInteger(CVAR_AUDIO("Playing"), 0) != 0) { func_800F5C2C(); CVarSetInteger(CVAR_AUDIO("Playing"), 0); } else { @@ -210,7 +218,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type, const std::string& tabN ImGui::SeparatorText(tabName.c_str()); if (UIWidgets::Button(resetAllButton.c_str(), - UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { + UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN); auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); ResetGroup(map, type); @@ -222,7 +230,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type, const std::string& tabN } ImGui::SameLine(); if (UIWidgets::Button(randomizeAllButton.c_str(), - UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { + UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN); auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); RandomizeGroup(type); @@ -234,7 +242,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type, const std::string& tabN } ImGui::SameLine(); if (UIWidgets::Button(lockAllButton.c_str(), - UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { + UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN); auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); LockGroup(map, type); @@ -246,7 +254,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type, const std::string& tabN } ImGui::SameLine(); if (UIWidgets::Button(unlockAllButton.c_str(), - UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { + UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN); auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); UnlockGroup(map, type); @@ -268,7 +276,9 @@ void Draw_SfxTab(const std::string& tabId, SeqType type, const std::string& tabN continue; } // Do not display custom sequences in the list - if ((((seqData.category & SEQ_BGM_CUSTOM) || seqData.category == SEQ_FANFARE) && defaultValue >= MAX_AUTHENTIC_SEQID) || seqData.canBeReplaced == false) { + if ((((seqData.category & SEQ_BGM_CUSTOM) || seqData.category == SEQ_FANFARE) && + defaultValue >= MAX_AUTHENTIC_SEQID) || + seqData.canBeReplaced == false) { continue; } @@ -291,8 +301,10 @@ void Draw_SfxTab(const std::string& tabId, SeqType type, const std::string& tabN UIWidgets::PushStyleCombobox(THEME_COLOR); if (ImGui::BeginCombo(hiddenKey.c_str(), map.at(initialValue).label.c_str())) { for (const auto& [value, seqData] : map) { - // If excluded as a replacement sequence, don't show in other dropdowns except the effect's own dropdown. - if (~(seqData.category) & type || (!seqData.canBeUsedAsReplacement && initialSfxKey != seqData.sfxKey)) { + // If excluded as a replacement sequence, don't show in other dropdowns except the effect's own + // dropdown. + if (~(seqData.category) & type || + (!seqData.canBeUsedAsReplacement && initialSfxKey != seqData.sfxKey)) { continue; } @@ -312,15 +324,17 @@ void Draw_SfxTab(const std::string& tabId, SeqType type, const std::string& tabN UIWidgets::PopStyleCombobox(); ImGui::TableNextColumn(); ImGui::PushItemWidth(-FLT_MIN); - DrawPreviewButton((type == SEQ_SFX || type == SEQ_VOICE || type == SEQ_INSTRUMENT) ? defaultValue : currentValue, seqData.sfxKey, type); - auto locked = CVarGetInteger(cvarLockKey.c_str(), 0) == 1; + DrawPreviewButton((type == SEQ_SFX || type == SEQ_VOICE || type == SEQ_INSTRUMENT) ? defaultValue + : currentValue, + seqData.sfxKey, type); + auto locked = CVarGetInteger(cvarLockKey.c_str(), 0) == 1; ImGui::SameLine(); ImGui::PushItemWidth(-FLT_MIN); if (UIWidgets::Button(resetButton.c_str(), UIWidgets::ButtonOptions() - .Size(UIWidgets::Sizes::Inline) - .Padding(ImVec2(10.0f, 6.0f)) - .Tooltip("Reset to default") - .Color(THEME_COLOR))) { + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(10.0f, 6.0f)) + .Tooltip("Reset to default") + .Color(THEME_COLOR))) { CVarClear(cvarKey.c_str()); CVarClear(cvarLockKey.c_str()); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); @@ -329,10 +343,10 @@ void Draw_SfxTab(const std::string& tabId, SeqType type, const std::string& tabN ImGui::SameLine(); ImGui::PushItemWidth(-FLT_MIN); if (UIWidgets::Button(randomizeButton.c_str(), UIWidgets::ButtonOptions() - .Size(UIWidgets::Sizes::Inline) - .Padding(ImVec2(10.0f, 6.0f)) - .Tooltip("Randomize this sound") - .Color(THEME_COLOR))) { + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(10.0f, 6.0f)) + .Tooltip("Randomize this sound") + .Color(THEME_COLOR))) { std::vector validSequences = {}; for (const auto seqInfo : AudioCollection::Instance->GetIncludedSequences()) { if (seqInfo->category & type) { @@ -349,16 +363,16 @@ void Draw_SfxTab(const std::string& tabId, SeqType type, const std::string& tabN } Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); UpdateCurrentBGM(defaultValue, type); - } + } } ImGui::SameLine(); ImGui::PushItemWidth(-FLT_MIN); if (UIWidgets::Button(locked ? lockedButton.c_str() : unlockedButton.c_str(), - UIWidgets::ButtonOptions() - .Size(UIWidgets::Sizes::Inline) - .Padding(ImVec2(10.0f, 6.0f)) - .Tooltip(locked ? "Sound locked" : "Sound unlocked") - .Color(THEME_COLOR))) { + UIWidgets::ButtonOptions() + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(10.0f, 6.0f)) + .Tooltip(locked ? "Sound locked" : "Sound unlocked") + .Color(THEME_COLOR))) { if (locked) { CVarClear(cvarLockKey.c_str()); } else { @@ -437,10 +451,9 @@ void DrawTypeChip(SeqType type, std::string sequenceName) { ImGui::EndDisabled(); } - void AudioEditorRegisterOnSceneInitHook() { GameInteractor::Instance->RegisterGameHook([](int16_t sceneNum) { - if (CVarGetInteger(CVAR_AUDIO("RandomizeAllOnNewScene"), 0)) { + if (gSaveContext.gameMode != GAMEMODE_END_CREDITS && CVarGetInteger(CVAR_AUDIO("RandomizeAllOnNewScene"), 0)) { AudioEditor_RandomizeAll(); } }); @@ -455,40 +468,39 @@ void AudioEditor::DrawElement() { UIWidgets::Separator(); if (UIWidgets::Button("Randomize All Groups", - UIWidgets::ButtonOptions() - .Size(ImVec2(230.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip("Randomizes all unlocked music and sound effects across tab groups"))) { + UIWidgets::ButtonOptions() + .Size(ImVec2(230.0f, 0.0f)) + .Color(THEME_COLOR) + .Tooltip("Randomizes all unlocked music and sound effects across tab groups"))) { AudioEditor_RandomizeAll(); } ImGui::SameLine(); if (UIWidgets::Button("Reset All Groups", - UIWidgets::ButtonOptions() - .Size(ImVec2(230.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip("Resets all unlocked music and sound effects across tab groups"))) { + UIWidgets::ButtonOptions() + .Size(ImVec2(230.0f, 0.0f)) + .Color(THEME_COLOR) + .Tooltip("Resets all unlocked music and sound effects across tab groups"))) { AudioEditor_ResetAll(); } ImGui::SameLine(); if (UIWidgets::Button("Lock All Groups", UIWidgets::ButtonOptions() - .Size(ImVec2(230.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip("Locks all music and sound effects across tab groups"))) { + .Size(ImVec2(230.0f, 0.0f)) + .Color(THEME_COLOR) + .Tooltip("Locks all music and sound effects across tab groups"))) { AudioEditor_LockAll(); } ImGui::SameLine(); - if (UIWidgets::Button("Unlock All Groups", - UIWidgets::ButtonOptions() - .Size(ImVec2(230.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip("Unlocks all music and sound effects across tab groups"))) { + if (UIWidgets::Button("Unlock All Groups", UIWidgets::ButtonOptions() + .Size(ImVec2(230.0f, 0.0f)) + .Color(THEME_COLOR) + .Tooltip("Unlocks all music and sound effects across tab groups"))) { AudioEditor_UnlockAll(); } UIWidgets::Separator(); UIWidgets::PushStyleTabs(THEME_COLOR); if (ImGui::BeginTabBar("SfxContextTabBar", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) { - + static ImVec2 cellPadding(8.0f, 8.0f); if (ImGui::BeginTabItem("Audio Options")) { ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, cellPadding); @@ -604,16 +616,10 @@ void AudioEditor::DrawElement() { excludeTabOpen = true; } - static std::map showType { - {SEQ_BGM_WORLD, true}, - {SEQ_BGM_EVENT, true}, - {SEQ_BGM_BATTLE, true}, - {SEQ_OCARINA, true}, - {SEQ_FANFARE, true}, - {SEQ_SFX, true }, - {SEQ_VOICE, true }, - {SEQ_INSTRUMENT, true}, - {SEQ_BGM_CUSTOM, true} + static std::map showType{ + { SEQ_BGM_WORLD, true }, { SEQ_BGM_EVENT, true }, { SEQ_BGM_BATTLE, true }, + { SEQ_OCARINA, true }, { SEQ_FANFARE, true }, { SEQ_SFX, true }, + { SEQ_VOICE, true }, { SEQ_INSTRUMENT, true }, { SEQ_BGM_CUSTOM, true }, }; // make temporary sets because removing from the set we're iterating through crashes ImGui @@ -626,7 +632,7 @@ void AudioEditor::DrawElement() { UIWidgets::PopStyleInput(); ImGui::SameLine(); if (UIWidgets::Button("Exclude All", - UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { + UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { for (auto seqInfo : AudioCollection::Instance->GetIncludedSequences()) { if (sequenceSearch.PassFilter(seqInfo->label.c_str()) && showType[seqInfo->category]) { seqsToExclude.insert(seqInfo); @@ -635,7 +641,7 @@ void AudioEditor::DrawElement() { } ImGui::SameLine(); if (UIWidgets::Button("Include All", - UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { + UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR))) { for (auto seqInfo : AudioCollection::Instance->GetExcludedSequences()) { if (sequenceSearch.PassFilter(seqInfo->label.c_str()) && showType[seqInfo->category]) { seqsToInclude.insert(seqInfo); @@ -643,7 +649,8 @@ void AudioEditor::DrawElement() { } } - ImGui::BeginTable("sequenceTypes", 9, ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings | ImGuiTableFlags_Borders); + ImGui::BeginTable("sequenceTypes", 9, + ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings | ImGuiTableFlags_Borders); ImGui::TableNextColumn(); ImGui::PushStyleColor(ImGuiCol_Header, GetSequenceTypeColor(SEQ_BGM_WORLD)); @@ -705,10 +712,10 @@ void AudioEditor::DrawElement() { for (auto seqInfo : AudioCollection::Instance->GetIncludedSequences()) { if (sequenceSearch.PassFilter(seqInfo->label.c_str()) && showType[seqInfo->category]) { if (UIWidgets::Button(std::string(ICON_FA_TIMES "##" + seqInfo->sfxKey).c_str(), - UIWidgets::ButtonOptions() - .Size(UIWidgets::Sizes::Inline) - .Padding(ImVec2(9.0f, 6.0f)) - .Color(THEME_COLOR))) { + UIWidgets::ButtonOptions() + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(9.0f, 6.0f)) + .Color(THEME_COLOR))) { seqsToExclude.insert(seqInfo); } ImGui::SameLine(); @@ -733,10 +740,10 @@ void AudioEditor::DrawElement() { for (auto seqInfo : AudioCollection::Instance->GetExcludedSequences()) { if (sequenceSearch.PassFilter(seqInfo->label.c_str()) && showType[seqInfo->category]) { if (UIWidgets::Button(std::string(ICON_FA_PLUS "##" + seqInfo->sfxKey).c_str(), - UIWidgets::ButtonOptions() - .Size(UIWidgets::Sizes::Inline) - .Padding(ImVec2(9.0f, 6.0f)) - .Color(THEME_COLOR))) { + UIWidgets::ButtonOptions() + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(9.0f, 6.0f)) + .Color(THEME_COLOR))) { seqsToInclude.insert(seqInfo); } ImGui::SameLine(); @@ -767,7 +774,9 @@ void AudioEditor::DrawElement() { UIWidgets::PopStyleTabs(); } -std::vector allTypes = { SEQ_BGM_WORLD, SEQ_BGM_EVENT, SEQ_BGM_BATTLE, SEQ_OCARINA, SEQ_FANFARE, SEQ_INSTRUMENT, SEQ_SFX, SEQ_VOICE }; +std::vector allTypes = { + SEQ_BGM_WORLD, SEQ_BGM_EVENT, SEQ_BGM_BATTLE, SEQ_OCARINA, SEQ_FANFARE, SEQ_INSTRUMENT, SEQ_SFX, SEQ_VOICE, +}; void AudioEditor_RandomizeAll() { for (auto type : allTypes) { diff --git a/soh/soh/Enhancements/audio/AudioEditor.h b/soh/soh/Enhancements/audio/AudioEditor.h index b1b034f24..a5b0b385a 100644 --- a/soh/soh/Enhancements/audio/AudioEditor.h +++ b/soh/soh/Enhancements/audio/AudioEditor.h @@ -8,13 +8,13 @@ #include "AudioCollection.h" class AudioEditor : public Ship::GuiWindow { - public: - using GuiWindow::GuiWindow; + public: + using GuiWindow::GuiWindow; - void DrawElement() override; - void InitElement() override; - void UpdateElement() override {}; - ~AudioEditor() {}; + void DrawElement() override; + void InitElement() override; + void UpdateElement() override{}; + ~AudioEditor(){}; }; void AudioEditor_RandomizeAll(); @@ -29,7 +29,6 @@ extern "C" { u16 AudioEditor_GetReplacementSeq(u16 seqId); - #ifdef __cplusplus } #endif diff --git a/soh/soh/Enhancements/bootcommands.c b/soh/soh/Enhancements/bootcommands.c index ac2ae2bc5..dde827ec5 100644 --- a/soh/soh/Enhancements/bootcommands.c +++ b/soh/soh/Enhancements/bootcommands.c @@ -12,8 +12,7 @@ #include "soh/OTRGlobals.h" #include "soh/cvar_prefixes.h" -void BootCommands_Init() -{ +void BootCommands_Init() { // Clears vars to prevent randomizer menu from being disabled CVarClear(CVAR_GENERAL("RandoGenerating")); // Clear when a crash happened during rando seed generation CVarClear(CVAR_GENERAL("NewSeedGenerated")); diff --git a/soh/soh/Enhancements/boss-rush/BossRush.cpp b/soh/soh/Enhancements/boss-rush/BossRush.cpp index aabe5d67a..76cf5637e 100644 --- a/soh/soh/Enhancements/boss-rush/BossRush.cpp +++ b/soh/soh/Enhancements/boss-rush/BossRush.cpp @@ -1,4 +1,4 @@ -#include "BossRush.h" +#include "BossRush.h" #include "soh/OTRGlobals.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" @@ -8,18 +8,18 @@ #include extern "C" { - #include "functions.h" - #include "macros.h" - #include "variables.h" - #include "src/overlays/actors/ovl_Boss_Goma/z_boss_goma.h" - #include "src/overlays/actors/ovl_Boss_Mo/z_boss_mo.h" - #include "src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h" - extern PlayState* gPlayState; +#include "functions.h" +#include "macros.h" +#include "variables.h" +#include "src/overlays/actors/ovl_Boss_Goma/z_boss_goma.h" +#include "src/overlays/actors/ovl_Boss_Mo/z_boss_mo.h" +#include "src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h" +extern PlayState* gPlayState; - Gfx* KaleidoScope_QuadTextureIA8(Gfx* gfx, void* texture, s16 width, s16 height, u16 point); - #include "textures/icon_item_nes_static/icon_item_nes_static.h" - #include "textures/icon_item_ger_static/icon_item_ger_static.h" - #include "textures/icon_item_fra_static/icon_item_fra_static.h" +Gfx* KaleidoScope_QuadTextureIA8(Gfx* gfx, void* texture, s16 width, s16 height, u16 point); +#include "textures/icon_item_nes_static/icon_item_nes_static.h" +#include "textures/icon_item_ger_static/icon_item_ger_static.h" +#include "textures/icon_item_fra_static/icon_item_fra_static.h" } typedef struct BossRushSetting { @@ -27,103 +27,79 @@ typedef struct BossRushSetting { std::vector> choices; } BossRushSetting; -BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = { - { - { "BOSSES:", "BOSSE:", "BOSS:" }, - { - { "All", "Alle", "Tous" }, - { "Child", "Kind", "Enfant" }, - { "Adult", "Erwachsener", "Adulte" }, - { "Ganondorf & Ganon", "Ganondorf & Ganon", "Ganondorf & Ganon" } - } - }, - { - { "HEARTS:", "HERZEN:", "COEURS:" }, - { - { "10", "10", "10" }, - { "15", "15", "15" }, - { "20", "20", "20" }, - { "3", "3", "3" }, - { "5", "5", "5" }, - { "7", "7", "7" } - } - }, - { - { "AMMO:", "MUNITION:", "MUNITIONS:" }, - { - { "Limited", "Limitiert", "Limitées" }, - { "Full", "Voll", "Pleines" }, - { "Maxed", "Maximum", "Maximum" } - } - }, - { - { "HEAL:", "REGENERATION:", "SOIN:" }, - { - { "Before Ganondorf", "Vor Ganondorf", "Avant Ganondorf" }, - { "Every Boss", "Bei jedem Boss", "Tous les Boss" }, - { "Never", "Niemals", "Jamais" } - } - }, - { - { "HYPER BOSSES:", "HYPER-BOSSE:", "HYPER BOSS:" }, - { - { "No", "Nein", "Non" }, - { "Yes", "Ja", "Oui" } - } - }, - { - { "MAGIC:", "MAGIE:", "MAGIE:" }, - { - { "Single", "Einzel", "Simple" }, - { "Double", "Doppel", "Double" } - } - }, - { - { "BIG. SWORD:", "BIG.-SCHWERT:", "EPÉE DE BIG.:" }, - { - { "No", "Nein", "Non" }, - { "Yes", "Ja", "Oui" } - } - }, - { - { "BOTTLE:", "FLASCHEN:", "BOUTEILLE:" }, - { - { "No", "Nein", "Non" }, - { "Empty", "Leer", "Vide" }, - { "Fairy", "Fee", "Fée" }, - { "Red Potion", "Rotes Elixier", "Potion Rouge" }, - { "Green Potion", "Grünes Elixier", "Potion Verte" }, - { "Blue Potion", "Blaues Elixier", "Potion Bleue" } - } - }, - { - { "LONGSHOT:", "ENTERHAKEN:", "SUPER GRAPPIN:" }, - { - { "No", "Nein", "Non" }, - { "Yes", "Ja", "Oui" } - } - }, - { - { "HOVER BOOTS:", "GLEITSTIEFEL:", "BOTTES DES AIRS:" }, - { - { "No", "Nein", "Non" }, - { "Yes", "Ja", "Oui" } - } - }, - { - { "BUNNY HOOD:", "HASENOHREN:", "MASQUE DU LAPIN:" }, - { - { "No", "Nein", "Non" }, - { "Yes", "Ja", "Oui" } - } - }, - { - { "TIMER:", "TIMER:", "TIMER:" }, - { - { "Yes", "Ja", "Oui" }, - { "No", "Nein", "Non" } - } - } +BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = { + { { "BOSSES:", "BOSSE:", "BOSS:" }, + { + { "All", "Alle", "Tous" }, + { "Child", "Kind", "Enfant" }, + { "Adult", "Erwachsener", "Adulte" }, + { "Ganondorf & Ganon", "Ganondorf & Ganon", "Ganondorf & Ganon" }, + } }, + { { "HEARTS:", "HERZEN:", "COEURS:" }, + { + { "10", "10", "10" }, + { "15", "15", "15" }, + { "20", "20", "20" }, + { "3", "3", "3" }, + { "5", "5", "5" }, + { "7", "7", "7" }, + } }, + { { "AMMO:", "MUNITION:", "MUNITIONS:" }, + { + { "Limited", "Limitiert", "Limitées" }, + { "Full", "Voll", "Pleines" }, + { "Maxed", "Maximum", "Maximum" }, + } }, + { { "HEAL:", "REGENERATION:", "SOIN:" }, + { + { "Before Ganondorf", "Vor Ganondorf", "Avant Ganondorf" }, + { "Every Boss", "Bei jedem Boss", "Tous les Boss" }, + { "Never", "Niemals", "Jamais" }, + } }, + { { "HYPER BOSSES:", "HYPER-BOSSE:", "HYPER BOSS:" }, + { + { "No", "Nein", "Non" }, + { "Yes", "Ja", "Oui" }, + } }, + { { "MAGIC:", "MAGIE:", "MAGIE:" }, + { + { "Single", "Einzel", "Simple" }, + { "Double", "Doppel", "Double" }, + } }, + { { "BIG. SWORD:", "BIG.-SCHWERT:", "EPÉE DE BIG.:" }, + { + { "No", "Nein", "Non" }, + { "Yes", "Ja", "Oui" }, + } }, + { { "BOTTLE:", "FLASCHEN:", "BOUTEILLE:" }, + { + { "No", "Nein", "Non" }, + { "Empty", "Leer", "Vide" }, + { "Fairy", "Fee", "Fée" }, + { "Red Potion", "Rotes Elixier", "Potion Rouge" }, + { "Green Potion", "Grünes Elixier", "Potion Verte" }, + { "Blue Potion", "Blaues Elixier", "Potion Bleue" }, + } }, + { { "LONGSHOT:", "ENTERHAKEN:", "SUPER GRAPPIN:" }, + { + { "No", "Nein", "Non" }, + { "Yes", "Ja", "Oui" }, + } }, + { { "HOVER BOOTS:", "GLEITSTIEFEL:", "BOTTES DES AIRS:" }, + { + { "No", "Nein", "Non" }, + { "Yes", "Ja", "Oui" }, + } }, + { { "BUNNY HOOD:", "HASENOHREN:", "MASQUE DU LAPIN:" }, + { + { "No", "Nein", "Non" }, + { "Yes", "Ja", "Oui" }, + } }, + { { "TIMER:", "TIMER:", "TIMER:" }, + { + { "Yes", "Ja", "Oui" }, + { "No", "Nein", "Non" }, + } } }; const char* BossRush_GetSettingName(u8 optionIndex, u8 language) { @@ -196,7 +172,7 @@ void BossRush_SetEquipment(u8 linkAge) { Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI); Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU); - // Set Adult equipment. + // Set Adult equipment. } else { brButtonItems = { ITEM_SWORD_MASTER, ITEM_BOW, ITEM_HAMMER, ITEM_BOMB, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE }; @@ -229,34 +205,36 @@ void BossRush_HandleBlueWarp(PlayState* play, f32 warpPosX, f32 warpPosZ) { } else { play->nextEntranceIndex = ENTR_FOREST_TEMPLE_BOSS_ENTRANCE; } - // King Dodongo & Volvagia + // King Dodongo & Volvagia } else if (warpPosX == 100 && warpPosZ == -170) { if (gSaveContext.linkAge == LINK_AGE_CHILD) { play->nextEntranceIndex = ENTR_DODONGOS_CAVERN_BOSS_ENTRANCE; } else { play->nextEntranceIndex = ENTR_FIRE_TEMPLE_BOSS_ENTRANCE; } - // Barinade & Morb + // Barinade & Morb } else if (warpPosX == 199 && warpPosZ == 0) { if (gSaveContext.linkAge == LINK_AGE_CHILD) { play->nextEntranceIndex = ENTR_JABU_JABU_BOSS_ENTRANCE; } else { play->nextEntranceIndex = ENTR_WATER_TEMPLE_BOSS_ENTRANCE; } - // Twinrova + // Twinrova } else if (warpPosX == 100 && warpPosZ == 170) { play->nextEntranceIndex = ENTR_SPIRIT_TEMPLE_BOSS_2; - // Bongo Bongo + // Bongo Bongo } else if (warpPosX == -100 && warpPosZ == 170) { play->nextEntranceIndex = ENTR_SHADOW_TEMPLE_BOSS_ENTRANCE; - // Ganondork + // Ganondork } else if (warpPosX == -199 && warpPosZ == 0) { play->nextEntranceIndex = ENTR_GANONDORF_BOSS_0; } else { - SPDLOG_ERROR("[BossRush]: Unknown blue warp in chamber of sages at position ({}, {}). Warping back to chamber of sages.", warpPosX, warpPosZ); + SPDLOG_ERROR("[BossRush]: Unknown blue warp in chamber of sages at position ({}, {}). Warping back to " + "chamber of sages.", + warpPosX, warpPosZ); play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0; } - // If coming from a boss room, teleport back to Chamber of Sages and set flag. + // If coming from a boss room, teleport back to Chamber of Sages and set flag. } else { play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0; @@ -267,7 +245,7 @@ void BossRush_HandleBlueWarp(PlayState* play, f32 warpPosX, f32 warpPosZ) { // Change to Adult Link. if (gSaveContext.ship.quest.data.bossRush.options[BR_OPTIONS_BOSSES] == BR_CHOICE_BOSSES_ALL) { BossRush_SetEquipment(LINK_AGE_ADULT); - // Warp to credits. + // Warp to credits. } else if (gSaveContext.ship.quest.data.bossRush.options[BR_OPTIONS_BOSSES] == BR_CHOICE_BOSSES_CHILD) { play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0; gSaveContext.nextCutsceneIndex = 0xFFF2; @@ -328,7 +306,8 @@ void BossRush_HandleCompleteBoss(PlayState* play) { Health_ChangeBy(play, 320); } - if ((CheckDungeonCount() == 3 && gSaveContext.ship.quest.data.bossRush.options[BR_OPTIONS_BOSSES] == BR_CHOICE_BOSSES_CHILD) || + if ((CheckDungeonCount() == 3 && + gSaveContext.ship.quest.data.bossRush.options[BR_OPTIONS_BOSSES] == BR_CHOICE_BOSSES_CHILD) || play->sceneNum == SCENE_GANON_BOSS) { gSaveContext.ship.stats.playTimer += 2; gSaveContext.ship.stats.gameComplete = 1; @@ -399,17 +378,17 @@ void BossRush_InitSave() { gSaveContext.eventChkInf[7] |= 0x80; // bongo bongo // Sets all rando flags to false - // Boss Rush currently uses 2 randomizer flags (RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE & RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE) + // Boss Rush currently uses 2 randomizer flags (RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE & + // RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE) for (s32 i = 0; i < ARRAY_COUNT(gSaveContext.ship.randomizerInf); i++) { gSaveContext.ship.randomizerInf[i] = 0; } // Set items std::array brItems = { - ITEM_STICK, ITEM_NUT, ITEM_BOMB, ITEM_BOW, ITEM_NONE, ITEM_NONE, - ITEM_SLINGSHOT, ITEM_NONE, ITEM_NONE, ITEM_HOOKSHOT, ITEM_NONE, ITEM_NONE, - ITEM_BOOMERANG, ITEM_LENS, ITEM_NONE, ITEM_HAMMER, ITEM_ARROW_LIGHT, ITEM_NONE, - ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, + ITEM_STICK, ITEM_NUT, ITEM_BOMB, ITEM_BOW, ITEM_NONE, ITEM_NONE, ITEM_SLINGSHOT, ITEM_NONE, + ITEM_NONE, ITEM_HOOKSHOT, ITEM_NONE, ITEM_NONE, ITEM_BOOMERANG, ITEM_LENS, ITEM_NONE, ITEM_HAMMER, + ITEM_ARROW_LIGHT, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, }; if (gSaveContext.ship.quest.data.bossRush.options[BR_OPTIONS_LONGSHOT] == BR_CHOICE_LONGSHOT_YES) { @@ -507,7 +486,7 @@ void BossRush_InitSave() { static void* sSavePromptNoChoiceTexs[] = { (void*)gPauseNoENGTex, (void*)gPauseNoGERTex, - (void*)gPauseNoFRATex + (void*)gPauseNoFRATex, }; void BossRush_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { @@ -541,11 +520,13 @@ void BossRush_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li break; } } - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, childPos.x, bossGoma->actor.world.pos.y, childPos.z, 0, 0, 0, WARP_DUNGEON_ADULT, false); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, childPos.x, + bossGoma->actor.world.pos.y, childPos.z, 0, 0, 0, WARP_DUNGEON_ADULT, false); break; } case SCENE_DODONGOS_CAVERN_BOSS: { - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, -890.0f, -1523.76f, -3304.0f, 0, 0, 0, WARP_DUNGEON_ADULT, false); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, -890.0f, -1523.76f, -3304.0f, 0, 0, + 0, WARP_DUNGEON_ADULT, false); break; } case SCENE_JABU_JABU_BOSS: { @@ -563,28 +544,34 @@ void BossRush_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li } } - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, sWarpPos[sp7C].x, sWarpPos[sp7C].y, sWarpPos[sp7C].z, 0, 0, 0, WARP_DUNGEON_ADULT, false); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, sWarpPos[sp7C].x, sWarpPos[sp7C].y, + sWarpPos[sp7C].z, 0, 0, 0, WARP_DUNGEON_ADULT, false); break; } case SCENE_FOREST_TEMPLE_BOSS: { - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, 14.0f, -33.0f, -3315.0f, 0, 0, 0, WARP_DUNGEON_ADULT, true); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, 14.0f, -33.0f, -3315.0f, 0, 0, 0, + WARP_DUNGEON_ADULT, true); break; } case SCENE_FIRE_TEMPLE_BOSS: { - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, 0.0f, 100.0f, 0.0f, 0, 0, 0, WARP_DUNGEON_ADULT, true); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, 0.0f, 100.0f, 0.0f, 0, 0, 0, + WARP_DUNGEON_ADULT, true); break; } case SCENE_WATER_TEMPLE_BOSS: { BossMo* bossMo = va_arg(args, BossMo*); - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, bossMo->actor.world.pos.x, -280.0f, bossMo->actor.world.pos.z, 0, 0, 0, WARP_DUNGEON_ADULT, true); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, bossMo->actor.world.pos.x, -280.0f, + bossMo->actor.world.pos.z, 0, 0, 0, WARP_DUNGEON_ADULT, true); break; } case SCENE_SPIRIT_TEMPLE_BOSS: { - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, 600.0f, 230.0f, 0.0f, 0, 0, 0, WARP_DUNGEON_ADULT, true); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, 600.0f, 230.0f, 0.0f, 0, 0, 0, + WARP_DUNGEON_ADULT, true); break; } case SCENE_SHADOW_TEMPLE_BOSS: { - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, -50.0f, 0.0f, 400.0f, 0, 0, 0, WARP_DUNGEON_ADULT, true); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, -50.0f, 0.0f, 400.0f, 0, 0, 0, + WARP_DUNGEON_ADULT, true); break; } default: { @@ -699,12 +686,18 @@ void BossRush_RegisterHooks() { onBossDefeatHook = 0; onActorUpdate = 0; - if (!IS_BOSS_RUSH) return; + if (!IS_BOSS_RUSH) + return; - onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(BossRush_OnVanillaBehaviorHandler); - onSceneInitHook = GameInteractor::Instance->RegisterGameHook(BossRush_OnSceneInitHandler); - onActorInitHook = GameInteractor::Instance->RegisterGameHook(BossRush_OnActorInitHandler); - onBossDefeatHook = GameInteractor::Instance->RegisterGameHook(BossRush_OnBossDefeatHandler); - onActorUpdate = GameInteractor::Instance->RegisterGameHookForID(ACTOR_DOOR_WARP1, BossRush_OnBlueWarpUpdate); + onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook( + BossRush_OnVanillaBehaviorHandler); + onSceneInitHook = + GameInteractor::Instance->RegisterGameHook(BossRush_OnSceneInitHandler); + onActorInitHook = + GameInteractor::Instance->RegisterGameHook(BossRush_OnActorInitHandler); + onBossDefeatHook = + GameInteractor::Instance->RegisterGameHook(BossRush_OnBossDefeatHandler); + onActorUpdate = GameInteractor::Instance->RegisterGameHookForID( + ACTOR_DOOR_WARP1, BossRush_OnBlueWarpUpdate); }); } diff --git a/soh/soh/Enhancements/boss-rush/BossRush.h b/soh/soh/Enhancements/boss-rush/BossRush.h index 292cbaf26..881d8d53f 100644 --- a/soh/soh/Enhancements/boss-rush/BossRush.h +++ b/soh/soh/Enhancements/boss-rush/BossRush.h @@ -5,12 +5,12 @@ #ifdef __cplusplus extern "C" { #endif - void BossRush_HandleBlueWarpHeal(PlayState* play); - void BossRush_InitSave(); - const char* BossRush_GetSettingName(u8 optionIndex, u8 language); - const char* BossRush_GetSettingChoiceName(u8 optionIndex, u8 choiceIndex, u8 language); - u8 BossRush_GetSettingOptionsAmount(u8 optionIndex); - void BossRush_RegisterHooks(); +void BossRush_HandleBlueWarpHeal(PlayState* play); +void BossRush_InitSave(); +const char* BossRush_GetSettingName(u8 optionIndex, u8 language); +const char* BossRush_GetSettingChoiceName(u8 optionIndex, u8 choiceIndex, u8 language); +u8 BossRush_GetSettingOptionsAmount(u8 optionIndex); +void BossRush_RegisterHooks(); #ifdef __cplusplus }; #endif diff --git a/soh/soh/Enhancements/boss-rush/BossRushTypes.h b/soh/soh/Enhancements/boss-rush/BossRushTypes.h index cf4d3aaba..973f1599f 100644 --- a/soh/soh/Enhancements/boss-rush/BossRushTypes.h +++ b/soh/soh/Enhancements/boss-rush/BossRushTypes.h @@ -37,28 +37,28 @@ typedef enum { typedef enum { BR_CHOICE_AMMO_LIMITED, BR_CHOICE_AMMO_FULL, - BR_CHOICE_AMMO_MAXED + BR_CHOICE_AMMO_MAXED, } BossRushAmmoChoices; typedef enum { BR_CHOICE_HEAL_GANONDORF, BR_CHOICE_HEAL_EVERYBOSS, - BR_CHOICE_HEAL_NEVER + BR_CHOICE_HEAL_NEVER, } BossRushHealChoices; typedef enum { BR_CHOICE_HYPERBOSSES_NO, - BR_CHOICE_HYPERBOSSES_YES + BR_CHOICE_HYPERBOSSES_YES, } BossRushHyperBossesChoices; typedef enum { BR_CHOICE_MAGIC_SINGLE, - BR_CHOICE_MAGIC_DOUBLE + BR_CHOICE_MAGIC_DOUBLE, } BossRushMagicChoices; typedef enum { BR_CHOICE_BGS_NO, - BR_CHOICE_BGS_YES + BR_CHOICE_BGS_YES, } BossRushBgsChoices; typedef enum { @@ -72,20 +72,20 @@ typedef enum { typedef enum { BR_CHOICE_LONGSHOT_NO, - BR_CHOICE_LONGSHOT_YES + BR_CHOICE_LONGSHOT_YES, } BossRushLongshotChoices; typedef enum { BR_CHOICE_HOVERBOOTS_NO, - BR_CHOICE_HOVERBOOTS_YES + BR_CHOICE_HOVERBOOTS_YES, } BossRushHoverBootsChoices; typedef enum { BR_CHOICE_BUNNYHOOD_NO, - BR_CHOICE_BUNNYHOOD_YES + BR_CHOICE_BUNNYHOOD_YES, } BossRushBunnyHoodChoices; typedef enum { BR_CHOICE_TIMER_YES, - BR_CHOICE_TIMER_NO + BR_CHOICE_TIMER_NO, } BossRushTimerChoices; diff --git a/soh/soh/Enhancements/controls/InputViewer.cpp b/soh/soh/Enhancements/controls/InputViewer.cpp index d26de6719..a48b1811f 100644 --- a/soh/soh/Enhancements/controls/InputViewer.cpp +++ b/soh/soh/Enhancements/controls/InputViewer.cpp @@ -20,15 +20,22 @@ static Color_RGBA8 textColorDefault = { 255, 255, 255, 255 }; static Color_RGBA8 range1ColorDefault = { 255, 178, 0, 255 }; static Color_RGBA8 range2ColorDefault = { 0, 255, 0, 255 }; -static std::unordered_map buttonOutlineOptions = - {{ BUTTON_OUTLINE_ALWAYS_SHOWN, "Always Shown" }, { BUTTON_OUTLINE_NOT_PRESSED, "Shown Only While Not Pressed" }, - { BUTTON_OUTLINE_PRESSED, "Shown Only While Pressed" }, { BUTTON_OUTLINE_ALWAYS_HIDDEN, "Always Hidden" }}; -static std::unordered_map buttonOutlineOptionsVerbose = - {{ BUTTON_OUTLINE_ALWAYS_SHOWN, "Outline Always Shown" }, { BUTTON_OUTLINE_NOT_PRESSED, "Outline Shown Only While Not Pressed" }, - { BUTTON_OUTLINE_PRESSED, "Outline Shown Only While Pressed" }, { BUTTON_OUTLINE_ALWAYS_HIDDEN, "Outline Always Hidden" }}; +static std::unordered_map buttonOutlineOptions = { + { BUTTON_OUTLINE_ALWAYS_SHOWN, "Always Shown" }, + { BUTTON_OUTLINE_NOT_PRESSED, "Shown Only While Not Pressed" }, + { BUTTON_OUTLINE_PRESSED, "Shown Only While Pressed" }, + { BUTTON_OUTLINE_ALWAYS_HIDDEN, "Always Hidden" } +}; +static std::unordered_map buttonOutlineOptionsVerbose = { + { BUTTON_OUTLINE_ALWAYS_SHOWN, "Outline Always Shown" }, + { BUTTON_OUTLINE_NOT_PRESSED, "Outline Shown Only While Not Pressed" }, + { BUTTON_OUTLINE_PRESSED, "Outline Shown Only While Pressed" }, + { BUTTON_OUTLINE_ALWAYS_HIDDEN, "Outline Always Hidden" } +}; -static std::unordered_map stickModeOptions = - {{ STICK_MODE_ALWAYS_SHOWN, "Always" }, { STICK_MODE_HIDDEN_IN_DEADZONE, "While In Use" }, { STICK_MODE_ALWAYS_HIDDEN, "Never" }}; +static std::unordered_map stickModeOptions = { { STICK_MODE_ALWAYS_SHOWN, "Always" }, + { STICK_MODE_HIDDEN_IN_DEADZONE, "While In Use" }, + { STICK_MODE_ALWAYS_HIDDEN, "Never" } }; InputViewer::~InputViewer() { SPDLOG_TRACE("destruct input viewer"); @@ -68,66 +75,78 @@ void InputViewer::DrawElement() { if (!sButtonTexturesLoaded) { Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( "Input-Viewer-Background", "textures/buttons/InputViewerBackground.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("A-Btn", "textures/buttons/ABtn.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("B-Btn", "textures/buttons/BBtn.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("L-Btn", "textures/buttons/LBtn.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("R-Btn", "textures/buttons/RBtn.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Z-Btn", "textures/buttons/ZBtn.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Start-Btn", - "textures/buttons/StartBtn.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Left", "textures/buttons/CLeft.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Right", "textures/buttons/CRight.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Up", "textures/buttons/CUp.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Down", "textures/buttons/CDown.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Analog-Stick", - "textures/buttons/AnalogStick.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Dpad-Left", - "textures/buttons/DPadLeft.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Dpad-Right", - "textures/buttons/DPadRight.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Dpad-Up", "textures/buttons/DPadUp.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Dpad-Down", - "textures/buttons/DPadDown.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Modifier-1", "textures/buttons/Mod1.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Modifier-2", "textures/buttons/Mod2.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Right-Stick", - "textures/buttons/RightStick.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("A-Btn Outline", - "textures/buttons/ABtnOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("B-Btn Outline", - "textures/buttons/BBtnOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("L-Btn Outline", - "textures/buttons/LBtnOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("R-Btn Outline", - "textures/buttons/RBtnOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Z-Btn Outline", - "textures/buttons/ZBtnOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Start-Btn Outline", - "textures/buttons/StartBtnOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Left Outline", - "textures/buttons/CLeftOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Right Outline", - "textures/buttons/CRightOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Up Outline", - "textures/buttons/CUpOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Down Outline", - "textures/buttons/CDownOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Analog-Stick Outline", - "textures/buttons/AnalogStickOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Dpad-Left Outline", - "textures/buttons/DPadLeftOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Dpad-Right Outline", - "textures/buttons/DPadRightOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Dpad-Up Outline", - "textures/buttons/DPadUpOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Dpad-Down Outline", - "textures/buttons/DPadDownOutline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Modifier-1 Outline", - "textures/buttons/Mod1Outline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Modifier-2 Outline", - "textures/buttons/Mod2Outline.png"); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Right-Stick Outline", - "textures/buttons/RightStickOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("A-Btn", + "textures/buttons/ABtn.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("B-Btn", + "textures/buttons/BBtn.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("L-Btn", + "textures/buttons/LBtn.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("R-Btn", + "textures/buttons/RBtn.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Z-Btn", + "textures/buttons/ZBtn.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Start-Btn", "textures/buttons/StartBtn.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Left", + "textures/buttons/CLeft.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Right", + "textures/buttons/CRight.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Up", + "textures/buttons/CUp.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("C-Down", + "textures/buttons/CDown.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Analog-Stick", "textures/buttons/AnalogStick.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Dpad-Left", "textures/buttons/DPadLeft.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Dpad-Right", "textures/buttons/DPadRight.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Dpad-Up", + "textures/buttons/DPadUp.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Dpad-Down", "textures/buttons/DPadDown.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Modifier-1", + "textures/buttons/Mod1.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage("Modifier-2", + "textures/buttons/Mod2.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Right-Stick", "textures/buttons/RightStick.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "A-Btn Outline", "textures/buttons/ABtnOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "B-Btn Outline", "textures/buttons/BBtnOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "L-Btn Outline", "textures/buttons/LBtnOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "R-Btn Outline", "textures/buttons/RBtnOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Z-Btn Outline", "textures/buttons/ZBtnOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Start-Btn Outline", "textures/buttons/StartBtnOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "C-Left Outline", "textures/buttons/CLeftOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "C-Right Outline", "textures/buttons/CRightOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "C-Up Outline", "textures/buttons/CUpOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "C-Down Outline", "textures/buttons/CDownOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Analog-Stick Outline", "textures/buttons/AnalogStickOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Dpad-Left Outline", "textures/buttons/DPadLeftOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Dpad-Right Outline", "textures/buttons/DPadRightOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Dpad-Up Outline", "textures/buttons/DPadUpOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Dpad-Down Outline", "textures/buttons/DPadDownOutline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Modifier-1 Outline", "textures/buttons/Mod1Outline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Modifier-2 Outline", "textures/buttons/Mod2Outline.png"); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage( + "Right-Stick Outline", "textures/buttons/RightStickOutline.png"); sButtonTexturesLoaded = true; } @@ -140,7 +159,8 @@ void InputViewer::DrawElement() { const float scale = CVarGetFloat(CVAR_INPUT_VIEWER("Scale"), 1.0f); #endif const int showAnalogAngles = CVarGetInteger(CVAR_INPUT_VIEWER("AnalogAngles.Enabled"), 0); - const int buttonOutlineMode = CVarGetInteger(CVAR_INPUT_VIEWER("ButtonOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED); + const int buttonOutlineMode = + CVarGetInteger(CVAR_INPUT_VIEWER("ButtonOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED); const bool useGlobalOutlineMode = CVarGetInteger(CVAR_INPUT_VIEWER("UseGlobalButtonOutlineMode"), 1); ImVec2 bgSize = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureSize("Input-Viewer-Background"); @@ -148,12 +168,12 @@ void InputViewer::DrawElement() { ImGui::SetNextWindowSize( ImVec2(scaledBGSize.x + 20, scaledBGSize.y + - (showAnalogAngles ? ImGui::CalcTextSize("X").y : 0) * scale * - CVarGetFloat(CVAR_INPUT_VIEWER("AnalogAngles.Scale"), 1.0f) + - 20)); + (showAnalogAngles ? ImGui::CalcTextSize("X").y : 0) * scale * + CVarGetFloat(CVAR_INPUT_VIEWER("AnalogAngles.Scale"), 1.0f) + + 20)); ImGui::SetNextWindowContentSize( ImVec2(scaledBGSize.x, scaledBGSize.y + (showAnalogAngles ? 15 : 0) * scale * - CVarGetFloat(CVAR_INPUT_VIEWER("AnalogAngles.Scale"), 1.0f))); + CVarGetFloat(CVAR_INPUT_VIEWER("AnalogAngles.Scale"), 1.0f))); ImGui::SetNextWindowPos( ImVec2(mainPos.x + size.x - scaledBGSize.x - 30, mainPos.y + size.y - scaledBGSize.y - 30), ImGuiCond_FirstUseEver); @@ -161,11 +181,12 @@ void InputViewer::DrawElement() { ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0, 0, 0, 0)); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f)); - OSContPad* pads = std::dynamic_pointer_cast(Ship::Context::GetInstance()->GetControlDeck())->GetPads(); + OSContPad* pads = + std::dynamic_pointer_cast(Ship::Context::GetInstance()->GetControlDeck())->GetPads(); ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar | - ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBackground | - ImGuiWindowFlags_NoFocusOnAppearing; + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBackground | + ImGuiWindowFlags_NoFocusOnAppearing; if (!CVarGetInteger(CVAR_INPUT_VIEWER("EnableDragging"), 1)) { windowFlags |= ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoMove; @@ -188,17 +209,17 @@ void InputViewer::DrawElement() { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("B-Btn", "B-Btn Outline", pads[0].button & BTN_B, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("BBtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("BBtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } if (CVarGetInteger(CVAR_INPUT_VIEWER("ABtn"), 1)) { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("A-Btn", "A-Btn Outline", pads[0].button & BTN_A, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("ABtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("ABtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } // C buttons @@ -206,33 +227,33 @@ void InputViewer::DrawElement() { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("C-Up", "C-Up Outline", pads[0].button & BTN_CUP, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("CUpOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("CUpOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } if (CVarGetInteger(CVAR_INPUT_VIEWER("CLeft"), 1)) { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("C-Left", "C-Left Outline", pads[0].button & BTN_CLEFT, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("CLeftOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("CLeftOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } if (CVarGetInteger(CVAR_INPUT_VIEWER("CRight"), 1)) { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("C-Right", "C-Right Outline", pads[0].button & BTN_CRIGHT, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("CRightOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("CRightOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } if (CVarGetInteger(CVAR_INPUT_VIEWER("CDown"), 1)) { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("C-Down", "C-Down Outline", pads[0].button & BTN_CDOWN, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("CDownOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("CDownOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } // L/R/Z @@ -240,25 +261,25 @@ void InputViewer::DrawElement() { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("L-Btn", "L-Btn Outline", pads[0].button & BTN_L, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("LBtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("LBtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } if (CVarGetInteger(CVAR_INPUT_VIEWER("RBtn"), 1)) { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("R-Btn", "R-Btn Outline", pads[0].button & BTN_R, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("RBtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("RBtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } if (CVarGetInteger(CVAR_INPUT_VIEWER("ZBtn"), 1)) { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("Z-Btn", "Z-Btn Outline", pads[0].button & BTN_Z, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("ZBtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("ZBtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } // Start @@ -266,9 +287,9 @@ void InputViewer::DrawElement() { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("Start-Btn", "Start-Btn Outline", pads[0].button & BTN_START, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("StartBtnOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("StartBtnOutlineMode"), + BUTTON_OUTLINE_NOT_PRESSED)); } // Dpad @@ -276,27 +297,27 @@ void InputViewer::DrawElement() { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("Dpad-Left", "Dpad-Left Outline", pads[0].button & BTN_DLEFT, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("DpadOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("DpadOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("Dpad-Right", "Dpad-Right Outline", pads[0].button & BTN_DRIGHT, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("DpadOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("DpadOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("Dpad-Up", "Dpad-Up Outline", pads[0].button & BTN_DUP, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("DpadOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("DpadOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("Dpad-Down", "Dpad-Down Outline", pads[0].button & BTN_DDOWN, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("DpadOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("DpadOutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } // Modifier 1 @@ -304,18 +325,18 @@ void InputViewer::DrawElement() { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("Modifier-1", "Modifier-1 Outline", pads[0].button & BTN_CUSTOM_MODIFIER1, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("Mod1OutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("Mod1OutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } // Modifier 2 if (CVarGetInteger(CVAR_INPUT_VIEWER("Mod2"), 0)) { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos(aPos); RenderButton("Modifier-2", "Modifier-2 Outline", pads[0].button & BTN_CUSTOM_MODIFIER2, scaledBGSize, - useGlobalOutlineMode - ? buttonOutlineMode - : CVarGetInteger(CVAR_INPUT_VIEWER("Mod2OutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); + useGlobalOutlineMode + ? buttonOutlineMode + : CVarGetInteger(CVAR_INPUT_VIEWER("Mod2OutlineMode"), BUTTON_OUTLINE_NOT_PRESSED)); } const bool analogStickIsInDeadzone = !pads[0].stick_x && !pads[0].stick_y; @@ -340,9 +361,9 @@ void InputViewer::DrawElement() { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos( ImVec2(aPos.x + maxStickDistance * ((float)(pads[0].stick_x) / MAX_AXIS_RANGE) * scale, - aPos.y - maxStickDistance * ((float)(pads[0].stick_y) / MAX_AXIS_RANGE) * scale)); + aPos.y - maxStickDistance * ((float)(pads[0].stick_y) / MAX_AXIS_RANGE) * scale)); ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("Analog-Stick"), - scaledBGSize, ImVec2(0, 0), ImVec2(1.0f, 1.0f), ImVec4(255, 255, 255, 255)); + scaledBGSize, ImVec2(0, 0), ImVec2(1.0f, 1.0f), ImVec4(255, 255, 255, 255)); } // Right Stick @@ -364,15 +385,16 @@ void InputViewer::DrawElement() { ImGui::SetNextItemAllowOverlap(); ImGui::SetCursorPos( ImVec2(aPos.x + maxRightStickDistance * ((float)(pads[0].right_stick_x) / MAX_AXIS_RANGE) * scale, - aPos.y - maxRightStickDistance * ((float)(pads[0].right_stick_y) / MAX_AXIS_RANGE) * scale)); + aPos.y - maxRightStickDistance * ((float)(pads[0].right_stick_y) / MAX_AXIS_RANGE) * scale)); ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("Right-Stick"), - scaledBGSize, ImVec2(0, 0), ImVec2(1.0f, 1.0f), ImVec4(255, 255, 255, 255)); + scaledBGSize, ImVec2(0, 0), ImVec2(1.0f, 1.0f), ImVec4(255, 255, 255, 255)); } // Analog stick angle text if (showAnalogAngles) { - ImGui::SetCursorPos(ImVec2(aPos.x + 10 + CVarGetInteger(CVAR_INPUT_VIEWER("AnalogAngles.Offset"), 0) * scale, - scaledBGSize.y + aPos.y + 10)); + ImGui::SetCursorPos( + ImVec2(aPos.x + 10 + CVarGetInteger(CVAR_INPUT_VIEWER("AnalogAngles.Offset"), 0) * scale, + scaledBGSize.y + aPos.y + 10)); // Scale font with input viewer scale float oldFontScale = ImGui::GetFont()->Scale; ImGui::GetFont()->Scale *= scale * CVarGetFloat(CVAR_INPUT_VIEWER("AnalogAngles.Scale"), 1.0f); @@ -392,18 +414,17 @@ void InputViewer::DrawElement() { if (CVarGetInteger(CVAR_INPUT_VIEWER("AnalogAngles.Range1.Enabled"), 0) && (rSquared >= (range1Min * range1Min)) && (rSquared < (range1Max * range1Max))) { ImGui::PushStyleColor( - ImGuiCol_Text, - VecFromRGBA8(CVarGetColor(CVAR_INPUT_VIEWER("AnalogAngles.Range1.Color.Value"), range1ColorDefault))); - } - else if (CVarGetInteger(CVAR_INPUT_VIEWER("AnalogAngles.Range2.Enabled"), 0) && - (rSquared >= (range2Min * range2Min)) && (rSquared < (range2Max * range2Max))) { + ImGuiCol_Text, VecFromRGBA8(CVarGetColor(CVAR_INPUT_VIEWER("AnalogAngles.Range1.Color.Value"), + range1ColorDefault))); + } else if (CVarGetInteger(CVAR_INPUT_VIEWER("AnalogAngles.Range2.Enabled"), 0) && + (rSquared >= (range2Min * range2Min)) && (rSquared < (range2Max * range2Max))) { ImGui::PushStyleColor( - ImGuiCol_Text, - VecFromRGBA8(CVarGetColor(CVAR_INPUT_VIEWER("AnalogAngles.Range2.Color.Value"), range2ColorDefault))); - } - else { - ImGui::PushStyleColor(ImGuiCol_Text, VecFromRGBA8(CVarGetColor(CVAR_INPUT_VIEWER("AnalogAngles.TextColor.Value"), - textColorDefault))); + ImGuiCol_Text, VecFromRGBA8(CVarGetColor(CVAR_INPUT_VIEWER("AnalogAngles.Range2.Color.Value"), + range2ColorDefault))); + } else { + ImGui::PushStyleColor(ImGuiCol_Text, + VecFromRGBA8(CVarGetColor(CVAR_INPUT_VIEWER("AnalogAngles.TextColor.Value"), + textColorDefault))); } // Render text @@ -430,15 +451,23 @@ InputViewerSettingsWindow::~InputViewerSettingsWindow() { void InputViewerSettingsWindow::DrawElement() { // gInputViewer.Scale CVarSliderFloat("Input Viewer Scale: %.2f", CVAR_INPUT_VIEWER("Scale"), - FloatSliderOptions().Color(THEME_COLOR).DefaultValue(1.0f).Min(0.1f).Max(5.0f).ShowButtons(true).Tooltip("Sets the on screen size of the input viewer")); + FloatSliderOptions() + .Color(THEME_COLOR) + .DefaultValue(1.0f) + .Min(0.1f) + .Max(5.0f) + .ShowButtons(true) + .Tooltip("Sets the on screen size of the input viewer")); // gInputViewer.EnableDragging - CVarCheckbox("Enable Dragging", CVAR_INPUT_VIEWER("EnableDragging"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Enable Dragging", CVAR_INPUT_VIEWER("EnableDragging"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); UIWidgets::PaddedSeparator(true, true); // gInputViewer.ShowBackground - CVarCheckbox("Show Background Layer", CVAR_INPUT_VIEWER("ShowBackground"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show Background Layer", CVAR_INPUT_VIEWER("ShowBackground"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); UIWidgets::PaddedSeparator(true, true); @@ -446,121 +475,138 @@ void InputViewerSettingsWindow::DrawElement() { if (ImGui::CollapsingHeader("Buttons")) { // gInputViewer.ButtonOutlineMode - CVarCombobox("Button Outlines/Backgrounds", CVAR_INPUT_VIEWER("ButtonOutlineMode"), buttonOutlineOptions, - ComboboxOptions({{ .disabled = !CVarGetInteger(CVAR_INPUT_VIEWER("UseGlobalButtonOutlineMode"), 1), .disabledTooltip = "Disabled because Global Button Outline is off" }}) - .Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED) - .Tooltip("Sets the desired visibility behavior for the button outline/background layers. Useful for " - "custom input viewers.")); + CVarCombobox( + "Button Outlines/Backgrounds", CVAR_INPUT_VIEWER("ButtonOutlineMode"), buttonOutlineOptions, + ComboboxOptions({ { .disabled = !CVarGetInteger(CVAR_INPUT_VIEWER("UseGlobalButtonOutlineMode"), 1), + .disabledTooltip = "Disabled because Global Button Outline is off" } }) + .Color(THEME_COLOR) + .DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED) + .Tooltip("Sets the desired visibility behavior for the button outline/background layers. Useful for " + "custom input viewers.")); // gInputViewer.UseGlobalButtonOutlineMode - CVarCheckbox("Use for all buttons", CVAR_INPUT_VIEWER("UseGlobalButtonOutlineMode"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Use for all buttons", CVAR_INPUT_VIEWER("UseGlobalButtonOutlineMode"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); UIWidgets::PaddedSeparator(); bool useIndividualOutlines = !CVarGetInteger(CVAR_INPUT_VIEWER("UseGlobalButtonOutlineMode"), 1); // gInputViewer.ABtn - CVarCheckbox("Show A-Button Layers", CVAR_INPUT_VIEWER("ABtn"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show A-Button Layers", CVAR_INPUT_VIEWER("ABtn"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("ABtn"), 1)) { ImGui::Indent(); - CVarCombobox("##ABtnOutline", CVAR_INPUT_VIEWER("ABtnOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + CVarCombobox("##ABtnOutline", CVAR_INPUT_VIEWER("ABtnOutlineMode"), buttonOutlineOptionsVerbose, + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.BBtn - CVarCheckbox("Show B-Button Layers", CVAR_INPUT_VIEWER("BBtn"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show B-Button Layers", CVAR_INPUT_VIEWER("BBtn"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("BBtn"), 1)) { ImGui::Indent(); CVarCombobox("##BBtnOutline", CVAR_INPUT_VIEWER("BBtnOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.CUp - CVarCheckbox("Show C-Up Layers", CVAR_INPUT_VIEWER("CUp"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show C-Up Layers", CVAR_INPUT_VIEWER("CUp"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("CUp"), 1)) { ImGui::Indent(); CVarCombobox("##CUpOutline", CVAR_INPUT_VIEWER("CUpOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.CRight - CVarCheckbox("Show C-Right Layers", CVAR_INPUT_VIEWER("CRight"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show C-Right Layers", CVAR_INPUT_VIEWER("CRight"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("CRight"), 1)) { ImGui::Indent(); CVarCombobox("##CRightOutline", CVAR_INPUT_VIEWER("CRightOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.CDown - CVarCheckbox("Show C-Down Layers", CVAR_INPUT_VIEWER("CDown"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show C-Down Layers", CVAR_INPUT_VIEWER("CDown"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("CDown"), 1)) { ImGui::Indent(); CVarCombobox("##CDownOutline", CVAR_INPUT_VIEWER("CDownOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.CLeft - CVarCheckbox("Show C-Left Layers", CVAR_INPUT_VIEWER("CLeft"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show C-Left Layers", CVAR_INPUT_VIEWER("CLeft"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("CLeft"), 1)) { ImGui::Indent(); CVarCombobox("##CLeftOutline", CVAR_INPUT_VIEWER("CLeftOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.LBtn - CVarCheckbox("Show L-Button Layers", CVAR_INPUT_VIEWER("LBtn"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show L-Button Layers", CVAR_INPUT_VIEWER("LBtn"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("LBtn"), 1)) { ImGui::Indent(); CVarCombobox("##LBtnOutline", CVAR_INPUT_VIEWER("LBtnOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.RBtn - CVarCheckbox("Show R-Button Layers", CVAR_INPUT_VIEWER("RBtn"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show R-Button Layers", CVAR_INPUT_VIEWER("RBtn"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("RBtn"), 1)) { ImGui::Indent(); CVarCombobox("##RBtnOutline", CVAR_INPUT_VIEWER("RBtnOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.ZBtn - CVarCheckbox("Show Z-Button Layers", CVAR_INPUT_VIEWER("ZBtn"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show Z-Button Layers", CVAR_INPUT_VIEWER("ZBtn"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("ZBtn"), 1)) { ImGui::Indent(); CVarCombobox("##ZBtnOutline", CVAR_INPUT_VIEWER("ZBtnOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.StartBtn - CVarCheckbox("Show Start Button Layers", CVAR_INPUT_VIEWER("StartBtn"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show Start Button Layers", CVAR_INPUT_VIEWER("StartBtn"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("StartBtn"), 1)) { ImGui::Indent(); CVarCombobox("##StartBtnOutline", CVAR_INPUT_VIEWER("StartBtnOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.Dpad - CVarCheckbox("Show D-Pad Layers", CVAR_INPUT_VIEWER("Dpad"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show D-Pad Layers", CVAR_INPUT_VIEWER("Dpad"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("Dpad"), 0)) { ImGui::Indent(); CVarCombobox("##DpadOutline", CVAR_INPUT_VIEWER("DpadOutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.Mod1 - CVarCheckbox("Show Modifier Button 1 Layers", CVAR_INPUT_VIEWER("Mod1"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show Modifier Button 1 Layers", CVAR_INPUT_VIEWER("Mod1"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("Mod1"), 0)) { ImGui::Indent(); CVarCombobox("##Mmod1Outline", CVAR_INPUT_VIEWER("Mod1OutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } // gInputViewer.Mod2 - CVarCheckbox("Show Modifier Button 2 Layers", CVAR_INPUT_VIEWER("Mod2"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); + CVarCheckbox("Show Modifier Button 2 Layers", CVAR_INPUT_VIEWER("Mod2"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true)); if (useIndividualOutlines && CVarGetInteger(CVAR_INPUT_VIEWER("Mod2"), 0)) { ImGui::Indent(); CVarCombobox("##Mod2Outline", CVAR_INPUT_VIEWER("Mod2OutlineMode"), buttonOutlineOptionsVerbose, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); + ComboboxOptions().Color(THEME_COLOR).DefaultIndex(BUTTON_OUTLINE_NOT_PRESSED)); ImGui::Unindent(); } @@ -569,72 +615,124 @@ void InputViewerSettingsWindow::DrawElement() { if (ImGui::CollapsingHeader("Analog Stick")) { // gInputViewer.AnalogStick.VisibilityMode - CVarCombobox("Analog Stick Visibility", CVAR_INPUT_VIEWER("AnalogStick.VisibilityMode"), stickModeOptions, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(STICK_MODE_ALWAYS_SHOWN) - .Tooltip("Determines the conditions under which the moving layer of the analog stick texture is visible.")); + CVarCombobox( + "Analog Stick Visibility", CVAR_INPUT_VIEWER("AnalogStick.VisibilityMode"), stickModeOptions, + ComboboxOptions() + .Color(THEME_COLOR) + .DefaultIndex(STICK_MODE_ALWAYS_SHOWN) + .Tooltip( + "Determines the conditions under which the moving layer of the analog stick texture is visible.")); // gInputViewer.AnalogStick.OutlineMode - CVarCombobox("Analog Stick Outline/Background Visibility", CVAR_INPUT_VIEWER("AnalogStick.OutlineMode"), stickModeOptions, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(STICK_MODE_ALWAYS_SHOWN) - .Tooltip("Determines the conditions under which the analog stick outline/background texture is visible.")); + CVarCombobox( + "Analog Stick Outline/Background Visibility", CVAR_INPUT_VIEWER("AnalogStick.OutlineMode"), + stickModeOptions, + ComboboxOptions() + .Color(THEME_COLOR) + .DefaultIndex(STICK_MODE_ALWAYS_SHOWN) + .Tooltip( + "Determines the conditions under which the analog stick outline/background texture is visible.")); // gInputViewer.AnalogStick.Movement - CVarSliderInt("Analog Stick Movement: %dpx", CVAR_INPUT_VIEWER("AnalogStick.Movement"), IntSliderOptions().Color(THEME_COLOR).Min(0).Max(200).DefaultValue(12).ShowButtons(true) - .Tooltip("Sets the distance to move the analog stick in the input viewer. Useful for custom input viewers.")); + CVarSliderInt("Analog Stick Movement: %dpx", CVAR_INPUT_VIEWER("AnalogStick.Movement"), + IntSliderOptions() + .Color(THEME_COLOR) + .Min(0) + .Max(200) + .DefaultValue(12) + .ShowButtons(true) + .Tooltip("Sets the distance to move the analog stick in the input viewer. Useful for custom " + "input viewers.")); UIWidgets::PaddedSeparator(true, true); } if (ImGui::CollapsingHeader("Additional (\"Right\") Stick")) { // gInputViewer.RightStick.VisibilityMode - CVarCombobox("Right Stick Visibility", CVAR_INPUT_VIEWER("RightStick.VisibilityMode"), stickModeOptions, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(STICK_MODE_ALWAYS_SHOWN) - .Tooltip("Determines the conditions under which the moving layer of the right stick texture is visible.")); + CVarCombobox( + "Right Stick Visibility", CVAR_INPUT_VIEWER("RightStick.VisibilityMode"), stickModeOptions, + ComboboxOptions() + .Color(THEME_COLOR) + .DefaultIndex(STICK_MODE_ALWAYS_SHOWN) + .Tooltip( + "Determines the conditions under which the moving layer of the right stick texture is visible.")); // gInputViewer.RightStick.OutlineMode - CVarCombobox("Right Stick Outline/Background Visibility", CVAR_INPUT_VIEWER("RightStick.OutlineMode"), stickModeOptions, - ComboboxOptions().Color(THEME_COLOR).DefaultIndex(STICK_MODE_ALWAYS_SHOWN) - .Tooltip("Determines the conditions under which the right stick outline/background texture is visible.")); + CVarCombobox( + "Right Stick Outline/Background Visibility", CVAR_INPUT_VIEWER("RightStick.OutlineMode"), stickModeOptions, + ComboboxOptions() + .Color(THEME_COLOR) + .DefaultIndex(STICK_MODE_ALWAYS_SHOWN) + .Tooltip( + "Determines the conditions under which the right stick outline/background texture is visible.")); // gInputViewer.RightStick.Movement - CVarSliderInt("Right Stick Movement: %dpx", CVAR_INPUT_VIEWER("RightStick.Movement"), IntSliderOptions().Color(THEME_COLOR).Min(0).Max(200).DefaultValue(7).ShowButtons(true) - .Tooltip("Sets the distance to move the right stick in the input viewer. Useful for custom input viewers.")); + CVarSliderInt( + "Right Stick Movement: %dpx", CVAR_INPUT_VIEWER("RightStick.Movement"), + IntSliderOptions() + .Color(THEME_COLOR) + .Min(0) + .Max(200) + .DefaultValue(7) + .ShowButtons(true) + .Tooltip( + "Sets the distance to move the right stick in the input viewer. Useful for custom input viewers.")); UIWidgets::PaddedSeparator(true, true); } if (ImGui::CollapsingHeader("Analog Angle Values")) { // gAnalogAngles - CVarCheckbox("Show Analog Stick Angle Values", CVAR_INPUT_VIEWER("AnalogAngles.Enabled"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Displays analog stick angle values in the input viewer")); + CVarCheckbox( + "Show Analog Stick Angle Values", CVAR_INPUT_VIEWER("AnalogAngles.Enabled"), + CheckboxOptions().Color(THEME_COLOR).Tooltip("Displays analog stick angle values in the input viewer")); if (CVarGetInteger(CVAR_INPUT_VIEWER("AnalogAngles.Enabled"), 0)) { // gInputViewer.AnalogAngles.TextColor - CVarColorPicker("Text Color", CVAR_INPUT_VIEWER("AnalogAngles.TextColor"), textColorDefault, - true, ColorPickerRandomButton | ColorPickerResetButton); + CVarColorPicker("Text Color", CVAR_INPUT_VIEWER("AnalogAngles.TextColor"), textColorDefault, true, + ColorPickerRandomButton | ColorPickerResetButton); // gAnalogAngleScale - CVarSliderFloat("Angle Text Scale: %.2f%%", CVAR_INPUT_VIEWER("AnalogAngles.Scale"), - FloatSliderOptions().Color(THEME_COLOR).IsPercentage().Min(0.1f).Max(5.0f).DefaultValue(1.0f).ShowButtons(true)); + CVarSliderFloat("Angle Text Scale: %.2f%%", CVAR_INPUT_VIEWER("AnalogAngles.Scale"), + FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.1f) + .Max(5.0f) + .DefaultValue(1.0f) + .ShowButtons(true)); // gInputViewer.AnalogAngles.Offset - CVarSliderInt("Angle Text Offset: %dpx", CVAR_INPUT_VIEWER("AnalogAngles.Offset"), IntSliderOptions().Color(THEME_COLOR).Min(0).Max(400).DefaultValue(0).ShowButtons(true) - .Tooltip("Sets the distance to move the right stick in the input viewer. Useful for custom input viewers.")); + CVarSliderInt("Angle Text Offset: %dpx", CVAR_INPUT_VIEWER("AnalogAngles.Offset"), + IntSliderOptions() + .Color(THEME_COLOR) + .Min(0) + .Max(400) + .DefaultValue(0) + .ShowButtons(true) + .Tooltip("Sets the distance to move the right stick in the input viewer. Useful for " + "custom input viewers.")); UIWidgets::PaddedSeparator(true, true); // gInputViewer.AnalogAngles.Range1.Enabled - CVarCheckbox("Highlight ESS Position", CVAR_INPUT_VIEWER("AnalogAngles.Range1.Enabled"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Highlights the angle value text when the analog stick is in ESS position (on flat ground)")); + CVarCheckbox( + "Highlight ESS Position", CVAR_INPUT_VIEWER("AnalogAngles.Range1.Enabled"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip( + "Highlights the angle value text when the analog stick is in ESS position (on flat ground)")); if (CVarGetInteger(CVAR_INPUT_VIEWER("AnalogAngles.Range1.Enabled"), 0)) { // gInputViewer.AnalogAngles.Range1.Color - CVarColorPicker("ESS Color", CVAR_INPUT_VIEWER("AnalogAngles.Range1.Color"), range1ColorDefault, - true, ColorPickerRandomButton | ColorPickerResetButton); + CVarColorPicker("ESS Color", CVAR_INPUT_VIEWER("AnalogAngles.Range1.Color"), range1ColorDefault, true, + ColorPickerRandomButton | ColorPickerResetButton); } UIWidgets::PaddedSeparator(true, true); // gInputViewer.AnalogAngles.Range2.Enabled - CVarCheckbox("Highlight Walking Speed Angles", CVAR_INPUT_VIEWER("AnalogAngles.Range2.Enabled"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Highlights the angle value text when the analog stick is at an angle that would " - "produce a walking speed (on flat ground)\n\n" - "Useful for 1.0 Empty Jumpslash Quick Put Away")); + CVarCheckbox("Highlight Walking Speed Angles", CVAR_INPUT_VIEWER("AnalogAngles.Range2.Enabled"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Highlights the angle value text when the analog stick is at an angle that would " + "produce a walking speed (on flat ground)\n\n" + "Useful for 1.0 Empty Jumpslash Quick Put Away")); if (CVarGetInteger(CVAR_INPUT_VIEWER("AnalogAngles.Range2.Enabled"), 0)) { // gInputViewer.AnalogAngles.Range2.Color - CVarColorPicker("Walking Speed Color", CVAR_INPUT_VIEWER("AnalogAngles.Range2.Color"), range2ColorDefault, - true, ColorPickerRandomButton | ColorPickerResetButton); + CVarColorPicker("Walking Speed Color", CVAR_INPUT_VIEWER("AnalogAngles.Range2.Color"), + range2ColorDefault, true, ColorPickerRandomButton | ColorPickerResetButton); } } } diff --git a/soh/soh/Enhancements/controls/InputViewer.h b/soh/soh/Enhancements/controls/InputViewer.h index a4b1cc44f..c370a4225 100644 --- a/soh/soh/Enhancements/controls/InputViewer.h +++ b/soh/soh/Enhancements/controls/InputViewer.h @@ -18,28 +18,28 @@ typedef enum { } StickMode; class InputViewer : public Ship::GuiWindow { -public: + public: using GuiWindow::GuiWindow; void Draw() override; - void InitElement() override {}; + void InitElement() override{}; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; InputViewer(); ~InputViewer(); - - private: - void RenderButton(std::string btn, std::string btnOutline, int state, ImVec2 size, int outlineMode); + + private: + void RenderButton(std::string btn, std::string btnOutline, int state, ImVec2 size, int outlineMode); }; class InputViewerSettingsWindow : public Ship::GuiWindow { -public: + public: using GuiWindow::GuiWindow; - void InitElement() override {}; + void InitElement() override{}; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; InputViewerSettingsWindow(); ~InputViewerSettingsWindow(); diff --git a/soh/soh/Enhancements/controls/Mouse.cpp b/soh/soh/Enhancements/controls/Mouse.cpp new file mode 100644 index 000000000..4282c3718 --- /dev/null +++ b/soh/soh/Enhancements/controls/Mouse.cpp @@ -0,0 +1,156 @@ +#include "Mouse.h" +#include "soh/OTRGlobals.h" +#include "z64player.h" +#include "global.h" +#include +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/ShipInit.hpp" + +static Ship::Coords mouseCoord = {}; +static Ship::Coords mouseCoordRel = {}; + +#define CVAR_ENABLE_MOUSE_NAME CVAR_SETTING("EnableMouse") +#define CVAR_ENABLE_MOUSE_DEFAULT 0 +#define CVAR_ENABLE_MOUSE_VALUE CVarGetInteger(CVAR_ENABLE_MOUSE_NAME, CVAR_ENABLE_MOUSE_DEFAULT) +#define MOUSE_ENABLED (CVAR_ENABLE_MOUSE_VALUE && GetWindow()->IsMouseCaptured()) + +std::shared_ptr GetWindow() { + return OTRGlobals::Instance->context->GetWindow(); +} + +extern "C" { +void Mouse_UpdatePos() { + mouseCoord = GetWindow()->GetMousePos(); +} + +void Mouse_UpdatePosRel() { + mouseCoordRel = GetWindow()->GetMouseDelta(); +} + +void Mouse_UpdateAll() { + Mouse_UpdatePos(); + Mouse_UpdatePosRel(); +} + +void Mouse_HandleThirdPerson(f32* newCamX, f32* newCamY) { + if (MOUSE_ENABLED) { + *newCamX -= mouseCoordRel.x * 40.0f; + *newCamY += mouseCoordRel.y * 40.0f; + } +} + +void Mouse_HandleFirstPerson(Player* player) { + f32 xAxisMulti = CVarGetFloat(CVAR_SETTING("FirstPersonCameraSensitivity.X"), 1.0f); + f32 yAxisMulti = CVarGetFloat(CVAR_SETTING("FirstPersonCameraSensitivity.Y"), 1.0f); + s8 invertXAxisMulti = ((CVarGetInteger(CVAR_SETTING("Controls.InvertAimingXAxis"), 0) && + !CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0)) || + (!CVarGetInteger(CVAR_SETTING("Controls.InvertAimingXAxis"), 0) && + CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0))) + ? -1 + : 1; + s8 invertYAxisMulti = CVarGetInteger(CVAR_SETTING("Controls.InvertAimingYAxis"), 1) ? 1 : -1; + if (MOUSE_ENABLED) { + player->actor.focus.rot.y -= mouseCoordRel.x * 6.0f * xAxisMulti * invertXAxisMulti; + player->actor.focus.rot.x += mouseCoordRel.y * 6.0f * yAxisMulti * invertYAxisMulti; + } +} + +void Mouse_RecenterCursor() { + u32 width = GetWindow()->GetWidth(); + u32 height = GetWindow()->GetHeight(); + if (MOUSE_ENABLED) { + GetWindow()->SetMousePos({ (s32)(width / 2), (s32)(height / 2) }); + } +} + +void Mouse_HandleShield(f32* sp50, f32* sp54) { + if (MOUSE_ENABLED) { + s32 width = GetWindow()->GetWidth(); + s32 height = GetWindow()->GetHeight(); + f32 xBound = 7200 / ((f32)width / 2); + f32 yBound = 6000 / ((f32)height / 2); + *sp50 += + (mouseCoord.x - (width / 2)) * xBound * (CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0) ? 1 : -1); + *sp54 += (mouseCoord.y - (height / 2)) * yBound; + *sp50 = CLAMP(*sp50, -7200, 7200); + *sp54 = CLAMP(*sp54, -6000, 6000); + } +} + +static s8 iterMouse = 0; +static f32 mouseQuickspinX[5] = {}; +static f32 mouseQuickspinY[5] = {}; +static u8 quickspinCount = 0; + +void Mouse_UpdateQuickspinCount() { + if (MOUSE_ENABLED) { + quickspinCount = (quickspinCount + 1) % 5; + mouseQuickspinX[quickspinCount] = mouseCoord.x; + mouseQuickspinY[quickspinCount] = mouseCoord.y; + } else { + quickspinCount = 0; + } +} + +bool Mouse_HandleQuickspin(bool* should, s8* iter2, s8* sp3C) { + s8 temp1; + s8 temp2; + s32 i; + if (!MOUSE_ENABLED) { + return *should = false; + } + + for (i = 0; i < 4; i++, iter2++) { + // Calculating angles as per z_lib.c:func_80077D10() + f32 relY = mouseQuickspinY[i + 1] - mouseQuickspinY[i]; + f32 relX = mouseQuickspinX[i + 1] - mouseQuickspinX[i]; + s16 aTan = Math_Atan2S(relY, -relX); + iterMouse = (u16)(aTan + 0x2000) >> 9; // See z_player.c:Player_ProcessControlStick() + if ((*iter2 = iterMouse) < 0) { + return *should = false; + } + *iter2 *= 2; + } + temp1 = sp3C[0] - sp3C[1]; + if (ABS(temp1) < 10) { + return *should = false; + } + iter2 = &sp3C[1]; + for (i = 1; i < 3; i++, iter2++) { + temp2 = *iter2 - *(iter2 + 1); + if ((ABS(temp2) < 10) || (temp2 * temp1 < 0)) { + return *should = false; + } + } + + return *should = true; +} + +// Hook handlers + +void Mouse_RegisterRecenterCursorOnShield() { + COND_HOOK(OnPlayerHoldUpShield, true, Mouse_RecenterCursor); +} + +void Mouse_RegisterHandleFirstPerson() { + COND_HOOK(OnPlayerFirstPersonControl, true, Mouse_HandleFirstPerson); +} + +void Mouse_RegisterHandleShield() { + COND_HOOK(OnPlayerShieldControl, true, Mouse_HandleShield); +} + +void Mouse_RegisterUpdateQuickspinCount() { + COND_HOOK(OnPlayerProcessStick, true, Mouse_UpdateQuickspinCount); +} + +void Mouse_RegisterHandleQuickspin() { + REGISTER_VB_SHOULD(VB_SHOULD_QUICKSPIN, { Mouse_HandleQuickspin(should, va_arg(args, s8*), va_arg(args, s8*)); }); +} + +static RegisterShipInitFunc initFunc_shieldRecenter(Mouse_RegisterRecenterCursorOnShield, { CVAR_ENABLE_MOUSE_NAME }); +static RegisterShipInitFunc initFunc_firstPerson(Mouse_RegisterHandleFirstPerson, { CVAR_ENABLE_MOUSE_NAME }); +static RegisterShipInitFunc initFunc_quickspinCount(Mouse_RegisterUpdateQuickspinCount, { CVAR_ENABLE_MOUSE_NAME }); +static RegisterShipInitFunc initFunc_quickspin(Mouse_RegisterHandleQuickspin, { CVAR_ENABLE_MOUSE_NAME }); +static RegisterShipInitFunc initFunc_shieldMove(Mouse_RegisterHandleShield, { CVAR_ENABLE_MOUSE_NAME }); +} // extern "C" diff --git a/soh/soh/Enhancements/controls/Mouse.h b/soh/soh/Enhancements/controls/Mouse.h new file mode 100644 index 000000000..2ab954e47 --- /dev/null +++ b/soh/soh/Enhancements/controls/Mouse.h @@ -0,0 +1,25 @@ +#ifndef MOUSE_H +#define MOUSE_H + +#pragma once + +#include + +struct Player; + +#ifdef __cplusplus +extern "C" { +#endif +void Mouse_UpdateAll(); +void Mouse_RecenterCursor(); +void Mouse_HandleThirdPerson(f32* newCamX, f32* newCamY); +void Mouse_HandleFirstPerson(struct Player* player); +void Mouse_HandleShield(f32* sp50, f32* sp54); +bool Mouse_HandleQuickspin(bool* should, s8* iter2, s8* sp3C); +void Mouse_UpdateQuickspinCount(); +#ifdef __cplusplus +}; // extern "C" +#endif + +// MOUSE_H +#endif diff --git a/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp b/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp index 7dbc74a75..3f77d1ed4 100644 --- a/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp +++ b/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp @@ -26,29 +26,25 @@ void SohInputEditorWindow::InitElement() { mButtonsBitmasks = { BTN_A, BTN_B, BTN_START, BTN_L, BTN_R, BTN_Z, BTN_CUP, BTN_CDOWN, BTN_CLEFT, BTN_CRIGHT }; mDpadBitmasks = { BTN_DUP, BTN_DDOWN, BTN_DLEFT, BTN_DRIGHT }; mModifierButtonsBitmasks = { BTN_CUSTOM_MODIFIER1, BTN_CUSTOM_MODIFIER2 }; - mCustomOcarinaButtonsBitmasks = { - BTN_CUSTOM_OCARINA_NOTE_D4, - BTN_CUSTOM_OCARINA_NOTE_F4, - BTN_CUSTOM_OCARINA_NOTE_A4, - BTN_CUSTOM_OCARINA_NOTE_B4, - BTN_CUSTOM_OCARINA_NOTE_D5 - }; + mCustomOcarinaButtonsBitmasks = { BTN_CUSTOM_OCARINA_NOTE_D4, BTN_CUSTOM_OCARINA_NOTE_F4, + BTN_CUSTOM_OCARINA_NOTE_A4, BTN_CUSTOM_OCARINA_NOTE_B4, + BTN_CUSTOM_OCARINA_NOTE_D5 }; - addButtonName(BTN_A, "A"); - addButtonName(BTN_B, "B"); - addButtonName(BTN_CUP, "C Up"); - addButtonName(BTN_CDOWN, "C Down"); - addButtonName(BTN_CLEFT, "C Left"); - addButtonName(BTN_CRIGHT, "C Right"); - addButtonName(BTN_L, "L"); - addButtonName(BTN_Z, "Z"); - addButtonName(BTN_R, "R"); - addButtonName(BTN_START, "Start"); - addButtonName(BTN_DUP, "D-pad up"); - addButtonName(BTN_DDOWN, "D-pad down"); - addButtonName(BTN_DLEFT, "D-pad left"); - addButtonName(BTN_DRIGHT, "D-pad right"); - addButtonName(0, "None"); + addButtonName(BTN_A, "A"); + addButtonName(BTN_B, "B"); + addButtonName(BTN_CUP, "C Up"); + addButtonName(BTN_CDOWN, "C Down"); + addButtonName(BTN_CLEFT, "C Left"); + addButtonName(BTN_CRIGHT, "C Right"); + addButtonName(BTN_L, "L"); + addButtonName(BTN_Z, "Z"); + addButtonName(BTN_R, "R"); + addButtonName(BTN_START, "Start"); + addButtonName(BTN_DUP, "D-pad up"); + addButtonName(BTN_DDOWN, "D-pad down"); + addButtonName(BTN_DLEFT, "D-pad left"); + addButtonName(BTN_DRIGHT, "D-pad right"); + addButtonName(0, "None"); } #define INPUT_EDITOR_WINDOW_GAME_INPUT_BLOCK_ID 95237929 @@ -172,8 +168,8 @@ void SohInputEditorWindow::DrawAnalogPreview(const char* label, ImVec2 stick, fl #define BUTTON_COLOR_KEYBOARD_BEIGE ImVec4(0.651f, 0.482f, 0.357f, 0.5f) #define BUTTON_COLOR_KEYBOARD_BEIGE_HOVERED ImVec4(0.651f, 0.482f, 0.357f, 1.0f) -#define BUTTON_COLOR_MOUSE_BEIGE ImVec4(0.5f, 0.5f, 0.5f, 0.5f) -#define BUTTON_COLOR_MOUSE_BEIGE_HOVERED ImVec4(0.5f, 0.5f, 0.5f, 1.0f) +#define BUTTON_COLOR_MOUSE_GRAY ImVec4(0.5f, 0.5f, 0.5f, 0.5f) +#define BUTTON_COLOR_MOUSE_GRAY_HOVERED ImVec4(0.5f, 0.5f, 0.5f, 1.0f) #define BUTTON_COLOR_GAMEPAD_BLUE ImVec4(0.0f, 0.255f, 0.976f, 0.5f) #define BUTTON_COLOR_GAMEPAD_BLUE_HOVERED ImVec4(0.0f, 0.255f, 0.976f, 1.0f) @@ -191,15 +187,15 @@ void SohInputEditorWindow::DrawAnalogPreview(const char* label, ImVec2 stick, fl #define BUTTON_COLOR_GAMEPAD_PURPLE_HOVERED ImVec4(0.431f, 0.369f, 0.706f, 1.0f) void SohInputEditorWindow::GetButtonColorsForDeviceType(Ship::PhysicalDeviceType lusIndex, ImVec4& buttonColor, - ImVec4& buttonHoveredColor) { + ImVec4& buttonHoveredColor) { switch (lusIndex) { case Ship::PhysicalDeviceType::Keyboard: buttonColor = BUTTON_COLOR_KEYBOARD_BEIGE; buttonHoveredColor = BUTTON_COLOR_KEYBOARD_BEIGE_HOVERED; break; case Ship::PhysicalDeviceType::Mouse: - buttonColor = BUTTON_COLOR_MOUSE_BEIGE; - buttonHoveredColor = BUTTON_COLOR_MOUSE_BEIGE_HOVERED; + buttonColor = BUTTON_COLOR_MOUSE_GRAY; + buttonHoveredColor = BUTTON_COLOR_MOUSE_GRAY_HOVERED; break; case Ship::PhysicalDeviceType::SDLGamepad: buttonColor = BUTTON_COLOR_GAMEPAD_BLUE; @@ -265,6 +261,7 @@ void SohInputEditorWindow::DrawButtonLineEditMappingButton(uint8_t port, N64Butt icon = ICON_FA_GAMEPAD; break; case MAPPING_TYPE_KEYBOARD: + case MAPPING_TYPE_MOUSE: icon = ICON_FA_KEYBOARD_O; break; case MAPPING_TYPE_UNKNOWN: @@ -668,8 +665,8 @@ void SohInputEditorWindow::DrawStickSection(uint8_t port, uint8_t stick, int32_t } ImGui::SameLine(0.0f, 0.0f); ImGui::SetNextItemWidth(SCALE_IMGUI_SIZE(160.0f)); - if (ImGui::SliderInt(StringHelper::Sprintf("##Sensitivity%d", id).c_str(), &sensitivityPercentage, 0, 200, "%d%%", - ImGuiSliderFlags_AlwaysClamp)) { + if (ImGui::SliderInt(StringHelper::Sprintf("##Sensitivity%d", id).c_str(), &sensitivityPercentage, 0, 200, + "%d%%", ImGuiSliderFlags_AlwaysClamp)) { controllerStick->SetSensitivity(sensitivityPercentage); } ImGui::SameLine(0.0f, 0.0f); @@ -1069,12 +1066,16 @@ void SohInputEditorWindow::DrawLEDSection(uint8_t port) { "Original Tunic Colors", "Cosmetics Tunic Colors", "Health Colors", "Original Navi Targeting Colors", "Cosmetics Navi Targeting Colors", "Custom" }; - CVarCombobox("Source", CVAR_SETTING("LEDColorSource"), ledSources, UIWidgets::ComboboxOptions().Color(THEME_COLOR).DefaultIndex(LED_SOURCE_TUNIC_ORIGINAL) - .Tooltip("Health\n- Red when health critical (13-20% depending on max health)\n- Yellow when " - "health < 40%. Green otherwise.\n\n" - "Tunics: colors will mirror currently equipped tunic, whether original or the current " - "values in Cosmetics Editor.\n\n" - "Custom: single, solid color")); + CVarCombobox( + "Source", CVAR_SETTING("LEDColorSource"), ledSources, + UIWidgets::ComboboxOptions() + .Color(THEME_COLOR) + .DefaultIndex(LED_SOURCE_TUNIC_ORIGINAL) + .Tooltip("Health\n- Red when health critical (13-20% depending on max health)\n- Yellow when " + "health < 40%. Green otherwise.\n\n" + "Tunics: colors will mirror currently equipped tunic, whether original or the current " + "values in Cosmetics Editor.\n\n" + "Custom: single, solid color")); if (CVarGetInteger(CVAR_SETTING("LEDColorSource"), 1) == LED_SOURCE_CUSTOM) { UIWidgets::Spacer(3); auto port1Color = CVarGetColor24(CVAR_SETTING("LEDPort1Color"), { 255, 255, 255 }); @@ -1093,12 +1094,21 @@ void SohInputEditorWindow::DrawLEDSection(uint8_t port) { ImGui::Text("Custom Color"); } CVarSliderFloat("Brightness: %.1f %%", CVAR_SETTING("LEDBrightness"), - FloatSliderOptions().IsPercentage().Min(0.0f).Max(1.0f).DefaultValue(1.0f).ShowButtons(true) - .Tooltip("Sets the brightness of controller LEDs. 0% brightness = LEDs off.")); - CVarCheckbox("Critical Health Override", CVAR_SETTING("LEDCriticalOverride"), - CheckboxOptions({{ .disabled = CVarGetInteger(CVAR_SETTING("LEDColorSource"), LED_SOURCE_TUNIC_ORIGINAL) == LED_SOURCE_HEALTH, - .disabledTooltip = "Override redundant for health source."}}).DefaultValue(true) - .Tooltip("Shows red color when health is critical, otherwise displays according to color source.")); + FloatSliderOptions() + .IsPercentage() + .Min(0.0f) + .Max(1.0f) + .DefaultValue(1.0f) + .ShowButtons(true) + .Tooltip("Sets the brightness of controller LEDs. 0% brightness = LEDs off.")); + CVarCheckbox( + "Critical Health Override", CVAR_SETTING("LEDCriticalOverride"), + CheckboxOptions({ { .disabled = CVarGetInteger(CVAR_SETTING("LEDColorSource"), + LED_SOURCE_TUNIC_ORIGINAL) == LED_SOURCE_HEALTH, + .disabledTooltip = "Override redundant for health source." } }) + .DefaultValue(true) + .Tooltip( + "Shows red color when health is critical, otherwise displays according to color source.")); } ImGui::TreePop(); } @@ -1233,38 +1243,35 @@ void SohInputEditorWindow::DrawGyroSection(uint8_t port) { } } -const ImGuiTableFlags PANEL_TABLE_FLAGS = - ImGuiTableFlags_BordersH | - ImGuiTableFlags_BordersV; +const ImGuiTableFlags PANEL_TABLE_FLAGS = ImGuiTableFlags_BordersH | ImGuiTableFlags_BordersV; const ImGuiTableColumnFlags PANEL_TABLE_COLUMN_FLAGS = - ImGuiTableColumnFlags_IndentEnable | - ImGuiTableColumnFlags_NoSort; + ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_NoSort; namespace TableHelper { - void InitHeader(bool has_header = true) { - if (has_header) { - ImGui::TableHeadersRow(); - } - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::AlignTextToFramePadding(); //This is to adjust Vertical pos of item in a cell to be normlized. - ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); - } - - void NextCol() { - ImGui::TableNextColumn(); - ImGui::AlignTextToFramePadding(); - ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); - } - - void NextLine() { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::AlignTextToFramePadding(); - ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); +void InitHeader(bool has_header = true) { + if (has_header) { + ImGui::TableHeadersRow(); } + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); // This is to adjust Vertical pos of item in a cell to be normlized. + ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); } +void NextCol() { + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); +} + +void NextLine() { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); +} +} // namespace TableHelper + void SohInputEditorWindow::addButtonName(N64ButtonMask mask, const char* name) { buttons.push_back(std::make_pair(mask, name)); buttonNames[mask] = std::prev(buttons.end()); @@ -1291,7 +1298,7 @@ void SohInputEditorWindow::DrawMapping(CustomButtonMap& mapping, float labelWidt ImGui::SetCursorPosY(cursorPos.y); ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8); - if (ImGui::BeginCombo(StringHelper::Sprintf("##%s", mapping.cVarName).c_str(), preview)) { + if (ImGui::BeginCombo(StringHelper::Sprintf("##%s", mapping.cVarName).c_str(), preview)) { for (auto i = buttons.begin(); i != buttons.end(); i++) { if ((i->first & excludedButtons) != 0) { continue; @@ -1308,7 +1315,7 @@ void SohInputEditorWindow::DrawMapping(CustomButtonMap& mapping, float labelWidt void SohInputEditorWindow::DrawOcarinaControlPanel() { ImVec2 cursor = ImGui::GetCursorPos(); ImGui::SetCursorPos(ImVec2(cursor.x, cursor.y + 5)); - + CheckboxOptions checkOpt = CheckboxOptions().Color(THEME_COLOR); CVarCheckbox("Dpad Ocarina Playback", CVAR_SETTING("CustomOcarina.Dpad"), checkOpt); CVarCheckbox("Right Stick Ocarina Playback", CVAR_SETTING("CustomOcarina.RightStick"), checkOpt); @@ -1343,26 +1350,47 @@ void SohInputEditorWindow::DrawOcarinaControlPanel() { void SohInputEditorWindow::DrawCameraControlPanel() { ImVec2 cursor = ImGui::GetCursorPos(); ImGui::SetCursorPos(ImVec2(cursor.x + 5, cursor.y + 5)); + CVarCheckbox( + "Enable Mouse Controls", CVAR_SETTING("EnableMouse"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Allows for using the mouse to control the camera (must enable Free Look), " + "aim with the shield, and perform quickspin attacks (quickly rotate the mouse then press B)")); Ship::GuiWindow::BeginGroupPanel("Aiming/First-Person Camera", ImGui::GetContentRegionAvail()); - CVarCheckbox("Right Stick Aiming", CVAR_SETTING("Controls.RightStickAim"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Allows for aiming with the right stick in:\n-First-Person/C-Up view\n-Weapon Aiming")); + CVarCheckbox("Right Stick Aiming", CVAR_SETTING("Controls.RightStickAim"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Allows for aiming with the right stick in:\n-First-Person/C-Up view\n-Weapon Aiming")); if (CVarGetInteger(CVAR_SETTING("Controls.RightStickAim"), 0)) { - CVarCheckbox("Allow moving while in first person mode", CVAR_SETTING("MoveInFirstPerson"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Changes the left stick to move the player while in first person mode")); + CVarCheckbox("Allow moving while in first person mode", CVAR_SETTING("MoveInFirstPerson"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Changes the left stick to move the player while in first person mode")); } - CVarCheckbox("Invert Aiming X Axis", CVAR_SETTING("Controls.InvertAimingXAxis"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Inverts the Camera X Axis in:\n-First-Person/C-Up view\n-Weapon Aiming")); - CVarCheckbox("Invert Aiming Y Axis", CVAR_SETTING("Controls.InvertAimingYAxis"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true) - .Tooltip("Inverts the Camera Y Axis in:\n-First-Person/C-Up view\n-Weapon Aiming")); - CVarCheckbox("Invert Shield Aiming X Axis", CVAR_SETTING("Controls.InvertShieldAimingXAxis"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true) - .Tooltip("Inverts the Shield Aiming X Axis")); - CVarCheckbox("Invert Shield Aiming Y Axis", CVAR_SETTING("Controls.InvertShieldAimingYAxis"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Inverts the Shield Aiming Y Axis")); - CVarCheckbox("Invert Z-Weapon Aiming Y Axis", CVAR_SETTING("Controls.InvertZAimingYAxis"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true) - .Tooltip("Inverts the Camera Y Axis in:\n-Z-Weapon Aiming")); - CVarCheckbox("Disable Auto-Centering in First-Person View", CVAR_SETTING("DisableFirstPersonAutoCenterView"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Prevents the C-Up view from auto-centering, allowing for Gyro Aiming")); - if (CVarCheckbox("Enable Custom Aiming/First-Person sensitivity", CVAR_SETTING("FirstPersonCameraSensitivity.Enabled"), CheckboxOptions().Color(THEME_COLOR))) { + CVarCheckbox("Invert Aiming X Axis", CVAR_SETTING("Controls.InvertAimingXAxis"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Inverts the Camera X Axis in:\n-First-Person/C-Up view\n-Weapon Aiming")); + CVarCheckbox("Invert Aiming Y Axis", CVAR_SETTING("Controls.InvertAimingYAxis"), + CheckboxOptions() + .Color(THEME_COLOR) + .DefaultValue(true) + .Tooltip("Inverts the Camera Y Axis in:\n-First-Person/C-Up view\n-Weapon Aiming")); + CVarCheckbox("Invert Shield Aiming X Axis", CVAR_SETTING("Controls.InvertShieldAimingXAxis"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true).Tooltip("Inverts the Shield Aiming X Axis")); + CVarCheckbox("Invert Shield Aiming Y Axis", CVAR_SETTING("Controls.InvertShieldAimingYAxis"), + CheckboxOptions().Color(THEME_COLOR).Tooltip("Inverts the Shield Aiming Y Axis")); + CVarCheckbox("Invert Z-Weapon Aiming Y Axis", CVAR_SETTING("Controls.InvertZAimingYAxis"), + CheckboxOptions() + .Color(THEME_COLOR) + .DefaultValue(true) + .Tooltip("Inverts the Camera Y Axis in:\n-Z-Weapon Aiming")); + CVarCheckbox("Disable Auto-Centering in First-Person View", CVAR_SETTING("DisableFirstPersonAutoCenterView"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Prevents the C-Up view from auto-centering, allowing for Gyro Aiming")); + if (CVarCheckbox("Enable Custom Aiming/First-Person sensitivity", + CVAR_SETTING("FirstPersonCameraSensitivity.Enabled"), CheckboxOptions().Color(THEME_COLOR))) { if (!CVarGetInteger(CVAR_SETTING("FirstPersonCameraSensitivity.Enabled"), 0)) { CVarClear(CVAR_SETTING("FirstPersonCameraSensitivity.X")); CVarClear(CVAR_SETTING("FirstPersonCameraSensitivity.Y")); @@ -1370,10 +1398,24 @@ void SohInputEditorWindow::DrawCameraControlPanel() { } } if (CVarGetInteger(CVAR_SETTING("FirstPersonCameraSensitivity.Enabled"), 0)) { - CVarSliderFloat("Aiming/First-Person Horizontal Sensitivity: %.0f %%", CVAR_SETTING("FirstPersonCameraSensitivity.X"), - FloatSliderOptions().Color(THEME_COLOR).IsPercentage().Min(0.01f).Max(5.0f).DefaultValue(1.0f).ShowButtons(true)); - CVarSliderFloat("Aiming/First-Person Vertical Sensitivity: %.0f %%", CVAR_SETTING("FirstPersonCameraSensitivity.Y"), - FloatSliderOptions().Color(THEME_COLOR).IsPercentage().Min(0.01f).Max(5.0f).DefaultValue(1.0f).ShowButtons(true)); + CVarSliderFloat("Aiming/First-Person Horizontal Sensitivity: %.0f %%", + CVAR_SETTING("FirstPersonCameraSensitivity.X"), + FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.01f) + .Max(5.0f) + .DefaultValue(1.0f) + .ShowButtons(true)); + CVarSliderFloat("Aiming/First-Person Vertical Sensitivity: %.0f %%", + CVAR_SETTING("FirstPersonCameraSensitivity.Y"), + FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.01f) + .Max(5.0f) + .DefaultValue(1.0f) + .ShowButtons(true)); } Ship::GuiWindow::EndGroupPanel(0); @@ -1381,19 +1423,37 @@ void SohInputEditorWindow::DrawCameraControlPanel() { ImGui::SetCursorPos(ImVec2(cursor.x + 5, cursor.y + 5)); Ship::GuiWindow::BeginGroupPanel("Third-Person Camera", ImGui::GetContentRegionAvail()); - CVarCheckbox("Free Look", CVAR_SETTING("FreeLook.Enabled"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Enables free look camera control\nNote: You must remap C buttons off of the right stick in the " - "controller config menu, and map the camera stick to the right stick.")); - CVarCheckbox("Invert Camera X Axis", CVAR_SETTING("FreeLook.InvertXAxis"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Inverts the Camera X Axis in:\n-Free look")); - CVarCheckbox("Invert Camera Y Axis", CVAR_SETTING("FreeLook.InvertYAxis"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true) - .Tooltip("Inverts the Camera Y Axis in:\n-Free look")); - CVarSliderFloat("Third-Person Horizontal Sensitivity: %.0f %%", CVAR_SETTING("FreeLook.CameraSensitivity.X"), - FloatSliderOptions().Color(THEME_COLOR).IsPercentage().Min(0.01f).Max(5.0f).DefaultValue(1.0f).ShowButtons(true)); - CVarSliderFloat("Third-Person Vertical Sensitivity: %.0f %%", CVAR_SETTING("FreeLook.CameraSensitivity.Y"), - FloatSliderOptions().Color(THEME_COLOR).IsPercentage().Min(0.01f).Max(5.0f).DefaultValue(1.0f).ShowButtons(true)); - CVarSliderInt("Camera Distance: %d", CVAR_SETTING("FreeLook.MaxCameraDistance"), IntSliderOptions().Color(THEME_COLOR).Min(100).Max(900).DefaultValue(185).ShowButtons(true)); - CVarSliderInt("Camera Transition Speed: %d", CVAR_SETTING("FreeLook.TransitionSpeed"), IntSliderOptions().Color(THEME_COLOR).Min(0).Max(900).DefaultValue(25).ShowButtons(true)); + CVarCheckbox( + "Free Look", CVAR_SETTING("FreeLook.Enabled"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Enables free look camera control\nNote: You must remap C buttons off of the right stick in the " + "controller config menu, and map the camera stick to the right stick.")); + CVarCheckbox("Invert Camera X Axis", CVAR_SETTING("FreeLook.InvertXAxis"), + CheckboxOptions().Color(THEME_COLOR).Tooltip("Inverts the Camera X Axis in:\n-Free look")); + CVarCheckbox( + "Invert Camera Y Axis", CVAR_SETTING("FreeLook.InvertYAxis"), + CheckboxOptions().Color(THEME_COLOR).DefaultValue(true).Tooltip("Inverts the Camera Y Axis in:\n-Free look")); + CVarSliderFloat("Third-Person Horizontal Sensitivity: %.0f %%", CVAR_SETTING("FreeLook.CameraSensitivity.X"), + FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.01f) + .Max(5.0f) + .DefaultValue(1.0f) + .ShowButtons(true)); + CVarSliderFloat("Third-Person Vertical Sensitivity: %.0f %%", CVAR_SETTING("FreeLook.CameraSensitivity.Y"), + FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.01f) + .Max(5.0f) + .DefaultValue(1.0f) + .ShowButtons(true)); + CVarSliderInt("Camera Distance: %d", CVAR_SETTING("FreeLook.MaxCameraDistance"), + IntSliderOptions().Color(THEME_COLOR).Min(100).Max(900).DefaultValue(185).ShowButtons(true)); + CVarSliderInt("Camera Transition Speed: %d", CVAR_SETTING("FreeLook.TransitionSpeed"), + IntSliderOptions().Color(THEME_COLOR).Min(0).Max(900).DefaultValue(25).ShowButtons(true)); Ship::GuiWindow::EndGroupPanel(0); } @@ -1401,17 +1461,26 @@ void SohInputEditorWindow::DrawDpadControlPanel() { ImVec2 cursor = ImGui::GetCursorPos(); ImGui::SetCursorPos(ImVec2(cursor.x + 5, cursor.y + 5)); Ship::GuiWindow::BeginGroupPanel("D-Pad Options", ImGui::GetContentRegionAvail()); - CVarCheckbox("D-pad Support on Pause Screen", CVAR_SETTING("DPadOnPause"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Navigate Pause with the D-pad\nIf used with \"D-pad as Equip Items\", you must hold C-Up to equip instead of navigate")); - CVarCheckbox("D-pad Support in Text Boxes", CVAR_SETTING("DpadInText"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Navigate choices in text boxes, shop item selection, and the file select / name entry screens with the D-pad")); + CVarCheckbox("D-pad Support on Pause Screen", CVAR_SETTING("DPadOnPause"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Navigate Pause with the D-pad\nIf used with \"D-pad as Equip Items\", you must hold " + "C-Up to equip instead of navigate")); + CVarCheckbox("D-pad Support in Text Boxes", CVAR_SETTING("DpadInText"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Navigate choices in text boxes, shop item selection, and the file select / name entry " + "screens with the D-pad")); if (!CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0) && !CVarGetInteger(CVAR_SETTING("DpadInText"), 0)) { ImGui::BeginDisabled(); } - CVarCheckbox("D-pad hold change", CVAR_SETTING("DpadHoldChange"), CheckboxOptions().Color(THEME_COLOR).DefaultValue(true) - .Tooltip("The cursor will only move a single space no matter how long a D-pad direction is held")); + CVarCheckbox("D-pad hold change", CVAR_SETTING("DpadHoldChange"), + CheckboxOptions() + .Color(THEME_COLOR) + .DefaultValue(true) + .Tooltip("The cursor will only move a single space no matter how long a D-pad direction is held")); if (!CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0) && !CVarGetInteger(CVAR_SETTING("DpadInText"), 0)) { ImGui::EndDisabled(); @@ -1453,7 +1522,7 @@ void SohInputEditorWindow::DrawDeviceToggles(uint8_t portIndex) { ImGui::PushStyleColor(ImGuiCol_ButtonHovered, buttonHoveredColor); auto notIgnored = !connectedDeviceManager->PortIsIgnoringInstanceId(portIndex, instanceId); ImGui::PopItemFlag(); - if(ImGui::Checkbox(StringHelper::Sprintf("###instanceId_%d", instanceId).c_str(), ¬Ignored)) { + if (ImGui::Checkbox(StringHelper::Sprintf("###instanceId_%d", instanceId).c_str(), ¬Ignored)) { if (notIgnored) { connectedDeviceManager->UnignoreInstanceIdForPort(portIndex, instanceId); } else { @@ -1532,24 +1601,52 @@ void SohInputEditorWindow::DrawLinkTab() { DrawButtonLine("M2", portIndex, BTN_CUSTOM_MODIFIER2); ImGui::BeginDisabled(CVarGetInteger(CVAR_SETTING("DisableChanges"), 0)); - CVarCheckbox("Enable speed modifiers", CVAR_SETTING("WalkModifier.Enabled"), CheckboxOptions().Color(THEME_COLOR) - .Tooltip("Hold the assigned button to change the maximum walking or swimming speed")); + CVarCheckbox("Enable speed modifiers", CVAR_SETTING("WalkModifier.Enabled"), + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Hold the assigned button to change the maximum walking or swimming speed")); if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0)) { UIWidgets::Spacer(5); Ship::GuiWindow::BeginGroupPanel("Speed Modifier", ImGui::GetContentRegionAvail()); - CVarCheckbox("Toggle modifier instead of holding", CVAR_SETTING("WalkModifier.SpeedToggle"), CheckboxOptions().Color(THEME_COLOR)); + CVarCheckbox("Toggle modifier instead of holding", CVAR_SETTING("WalkModifier.SpeedToggle"), + CheckboxOptions().Color(THEME_COLOR)); Ship::GuiWindow::BeginGroupPanel("Walk Modifier", ImGui::GetContentRegionAvail()); - CVarCheckbox("Don't affect jump distance/velocity", CVAR_SETTING("WalkModifier.DoesntChangeJump"), CheckboxOptions().Color(THEME_COLOR)); - CVarSliderFloat("Walk Modifier 1: %.0f %%", CVAR_SETTING("WalkModifier.Mapping1"), - FloatSliderOptions().Color(THEME_COLOR).IsPercentage().Min(0.0f).Max(5.0f).DefaultValue(1.0f).ShowButtons(true)); - CVarSliderFloat("Walk Modifier 2: %.0f %%", CVAR_SETTING("WalkModifier.Mapping2"), - FloatSliderOptions().Color(THEME_COLOR).IsPercentage().Min(0.0f).Max(5.0f).DefaultValue(1.0f).ShowButtons(true)); + CVarCheckbox("Don't affect jump distance/velocity", CVAR_SETTING("WalkModifier.DoesntChangeJump"), + CheckboxOptions().Color(THEME_COLOR)); + CVarSliderFloat("Walk Modifier 1: %.0f %%", CVAR_SETTING("WalkModifier.Mapping1"), + FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.0f) + .Max(5.0f) + .DefaultValue(1.0f) + .ShowButtons(true)); + CVarSliderFloat("Walk Modifier 2: %.0f %%", CVAR_SETTING("WalkModifier.Mapping2"), + FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.0f) + .Max(5.0f) + .DefaultValue(1.0f) + .ShowButtons(true)); Ship::GuiWindow::EndGroupPanel(0); Ship::GuiWindow::BeginGroupPanel("Swim Modifier", ImGui::GetContentRegionAvail()); - CVarSliderFloat("Swim Modifier 1: %.0f %%", CVAR_SETTING("WalkModifier.SwimMapping1"), - FloatSliderOptions().Color(THEME_COLOR).IsPercentage().Min(0.0f).Max(5.0f).DefaultValue(1.0f).ShowButtons(true)); - CVarSliderFloat("Swim Modifier 2: %.0f %%", CVAR_SETTING("WalkModifier.SwimMapping2"), - FloatSliderOptions().Color(THEME_COLOR).IsPercentage().Min(0.0f).Max(5.0f).DefaultValue(1.0f).ShowButtons(true)); + CVarSliderFloat("Swim Modifier 1: %.0f %%", CVAR_SETTING("WalkModifier.SwimMapping1"), + FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.0f) + .Max(5.0f) + .DefaultValue(1.0f) + .ShowButtons(true)); + CVarSliderFloat("Swim Modifier 2: %.0f %%", CVAR_SETTING("WalkModifier.SwimMapping2"), + FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.0f) + .Max(5.0f) + .DefaultValue(1.0f) + .ShowButtons(true)); Ship::GuiWindow::EndGroupPanel(0); Ship::GuiWindow::EndGroupPanel(0); } @@ -1751,7 +1848,8 @@ void SohInputEditorWindow::DrawSetDefaultsButton(uint8_t portIndex) { } PopStyleButton(); if (ImGui::BeginPopupModal("Set Defaults for Gamepad (SDL)", NULL, ImGuiWindowFlags_AlwaysAutoResize)) { - ImGui::Text("This will clear all existing mappings for\nGamepad (SDL) on port %d.\n\nContinue?", portIndex + 1); + ImGui::Text("This will clear all existing mappings for\nGamepad (SDL) on port %d.\n\nContinue?", + portIndex + 1); PushStyleButton(THEME_COLOR); if (ImGui::Button("Cancel")) { shouldClose = true; diff --git a/soh/soh/Enhancements/controls/SohInputEditorWindow.h b/soh/soh/Enhancements/controls/SohInputEditorWindow.h index 4545f771d..76d33975e 100644 --- a/soh/soh/Enhancements/controls/SohInputEditorWindow.h +++ b/soh/soh/Enhancements/controls/SohInputEditorWindow.h @@ -41,7 +41,8 @@ class SohInputEditorWindow : public Ship::GuiWindow { void DrawButtonLineEditMappingButton(uint8_t port, N64ButtonMask bitmask, std::string id); void DrawButtonLineAddMappingButton(uint8_t port, N64ButtonMask bitmask); - void DrawStickDirectionLineEditMappingButton(uint8_t port, uint8_t stick, Ship::Direction direction, std::string id); + void DrawStickDirectionLineEditMappingButton(uint8_t port, uint8_t stick, Ship::Direction direction, + std::string id); void DrawStickDirectionLineAddMappingButton(uint8_t port, uint8_t stick, Ship::Direction direction); void DrawStickSection(uint8_t port, uint8_t stick, int32_t id, ImVec4 color); @@ -84,7 +85,7 @@ class SohInputEditorWindow : public Ship::GuiWindow { void UpdateStickDirectionToMappingIds(uint8_t port); void GetButtonColorsForDeviceType(Ship::PhysicalDeviceType lusIndex, ImVec4& buttonColor, - ImVec4& buttonHoveredColor); + ImVec4& buttonHoveredColor); void DrawLinkTab(); void DrawIvanTab(); void DrawDebugPortTab(uint8_t portIndex, std::string customName = ""); diff --git a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp index ddd36fa56..e0f530bc2 100644 --- a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp +++ b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.cpp @@ -51,7 +51,8 @@ extern "C" { extern PlayState* gPlayState; void ResourceMgr_PatchGfxByName(const char* path, const char* patchName, int index, Gfx instruction); -void ResourceMgr_PatchGfxCopyCommandByName(const char* path, const char* patchName, int destinationIndex, int sourceIndex); +void ResourceMgr_PatchGfxCopyCommandByName(const char* path, const char* patchName, int destinationIndex, + int sourceIndex); void ResourceMgr_UnpatchGfxByName(const char* path, const char* patchName); u8 Randomizer_GetSettingValue(RandomizerSettingKey randoSettingKey); } @@ -68,27 +69,27 @@ u8 Randomizer_GetSettingValue(RandomizerSettingKey randoSettingKey); static const ALIGN_ASSET(2) char gEndGrayscaleAndEndDlistDL[] = dgEndGrayscaleAndEndDlistDL; std::map groupLabels = { - { COSMETICS_GROUP_LINK, "Link" }, + { COSMETICS_GROUP_LINK, "Link" }, { COSMETICS_GROUP_MIRRORSHIELD, "Mirror Shield" }, - { COSMETICS_GROUP_SWORDS, "Swords" }, - { COSMETICS_GROUP_GLOVES, "Gloves" }, - { COSMETICS_GROUP_EQUIPMENT, "Equipment" }, - { COSMETICS_GROUP_KEYRING, "Keyring" }, - { COSMETICS_GROUP_SMALL_KEYS, "Small Keys" }, - { COSMETICS_GROUP_BOSS_KEYS, "Boss Keys" }, - { COSMETICS_GROUP_CONSUMABLE, "Consumables" }, - { COSMETICS_GROUP_HUD, "HUD" }, - { COSMETICS_GROUP_KALEIDO, "Pause Menu" }, - { COSMETICS_GROUP_TITLE, "Title Screen" }, - { COSMETICS_GROUP_NPC, "NPCs" }, - { COSMETICS_GROUP_WORLD, "World" }, - { COSMETICS_GROUP_MAGIC, "Magic Effects" }, - { COSMETICS_GROUP_ARROWS, "Arrow Effects" }, - { COSMETICS_GROUP_SPIN_ATTACK, "Spin Attack" }, - { COSMETICS_GROUP_TRAILS, "Trails" }, - { COSMETICS_GROUP_NAVI, "Navi" }, - { COSMETICS_GROUP_IVAN, "Ivan" }, - { COSMETICS_GROUP_MESSAGE, "Message" }, + { COSMETICS_GROUP_SWORDS, "Swords" }, + { COSMETICS_GROUP_GLOVES, "Gloves" }, + { COSMETICS_GROUP_EQUIPMENT, "Equipment" }, + { COSMETICS_GROUP_KEYRING, "Keyring" }, + { COSMETICS_GROUP_SMALL_KEYS, "Small Keys" }, + { COSMETICS_GROUP_BOSS_KEYS, "Boss Keys" }, + { COSMETICS_GROUP_CONSUMABLE, "Consumables" }, + { COSMETICS_GROUP_HUD, "HUD" }, + { COSMETICS_GROUP_KALEIDO, "Pause Menu" }, + { COSMETICS_GROUP_TITLE, "Title Screen" }, + { COSMETICS_GROUP_NPC, "NPCs" }, + { COSMETICS_GROUP_WORLD, "World" }, + { COSMETICS_GROUP_MAGIC, "Magic Effects" }, + { COSMETICS_GROUP_ARROWS, "Arrow Effects" }, + { COSMETICS_GROUP_SPIN_ATTACK, "Spin Attack" }, + { COSMETICS_GROUP_TRAILS, "Trails" }, + { COSMETICS_GROUP_NAVI, "Navi" }, + { COSMETICS_GROUP_IVAN, "Ivan" }, + { COSMETICS_GROUP_MESSAGE, "Message" }, }; typedef struct { @@ -111,14 +112,18 @@ Color_RGBA8 ColorRGBA8(uint8_t r, uint8_t g, uint8_t b, uint8_t a) { return color; } -#define COSMETIC_OPTION(id, label, group, defaultColor, supportsAlpha, supportsRainbow, advancedOption) \ - { id, { \ - CVAR_COSMETIC(id), CVAR_COSMETIC(id ".Value"), CVAR_COSMETIC(id ".Rainbow"), CVAR_COSMETIC(id ".Locked"), \ - CVAR_COSMETIC(id ".Changed"), label, group, \ - ImVec4(defaultColor.r / 255.0f, defaultColor.g / 255.0f, defaultColor.b / 255.0f, defaultColor.a / 255.0f), defaultColor, \ - supportsAlpha, supportsRainbow, advancedOption \ - } } +#define COSMETIC_OPTION(id, label, group, defaultColor, supportsAlpha, supportsRainbow, advancedOption) \ + { \ + id, { \ + CVAR_COSMETIC(id), CVAR_COSMETIC(id ".Value"), CVAR_COSMETIC(id ".Rainbow"), CVAR_COSMETIC(id ".Locked"), \ + CVAR_COSMETIC(id ".Changed"), label, group, \ + ImVec4(defaultColor.r / 255.0f, defaultColor.g / 255.0f, defaultColor.b / 255.0f, \ + defaultColor.a / 255.0f), \ + defaultColor, supportsAlpha, supportsRainbow, advancedOption \ + } \ + } +// clang-format off /* So, you would like to add a new cosmetic option? BUCKLE UP @@ -439,44 +444,26 @@ static std::map cosmeticOptions = { COSMETIC_OPTION("NPC.MetalTrap", "Metal Trap", COSMETICS_GROUP_NPC, ColorRGBA8(255, 255, 255, 255), false, true, true), COSMETIC_OPTION("NPC.IronKnuckles", "Iron Knuckles", COSMETICS_GROUP_NPC, ColorRGBA8(245, 255, 205, 255), false, true, false), }; +// clang-format on -static const char* MarginCvarList[] { - CVAR_COSMETIC("HUD.Hearts"), - CVAR_COSMETIC("HUD.HeartsCount"), - CVAR_COSMETIC("HUD.MagicBar"), - CVAR_COSMETIC("HUD.VisualSoA"), - CVAR_COSMETIC("HUD.BButton"), - CVAR_COSMETIC("HUD.AButton"), - CVAR_COSMETIC("HUD.StartButton"), - CVAR_COSMETIC("HUD.CUpButton"), - CVAR_COSMETIC("HUD.CDownButton"), - CVAR_COSMETIC("HUD.CLeftButton"), - CVAR_COSMETIC("HUD.CRightButton"), - CVAR_COSMETIC("HUD.Dpad"), - CVAR_COSMETIC("HUD.Minimap"), - CVAR_COSMETIC("HUD.SmallKey"), - CVAR_COSMETIC("HUD.Rupees"), - CVAR_COSMETIC("HUD.Carrots"), - CVAR_COSMETIC("HUD.Timers"), - CVAR_COSMETIC("HUD.ArcheryScore"), - CVAR_COSMETIC("HUD.TitleCard.Map"), - CVAR_COSMETIC("HUD.TitleCard.Boss"), - CVAR_COSMETIC("HUD.IGT") +static const char* MarginCvarList[]{ + CVAR_COSMETIC("HUD.Hearts"), CVAR_COSMETIC("HUD.HeartsCount"), CVAR_COSMETIC("HUD.MagicBar"), + CVAR_COSMETIC("HUD.VisualSoA"), CVAR_COSMETIC("HUD.BButton"), CVAR_COSMETIC("HUD.AButton"), + CVAR_COSMETIC("HUD.StartButton"), CVAR_COSMETIC("HUD.CUpButton"), CVAR_COSMETIC("HUD.CDownButton"), + CVAR_COSMETIC("HUD.CLeftButton"), CVAR_COSMETIC("HUD.CRightButton"), CVAR_COSMETIC("HUD.Dpad"), + CVAR_COSMETIC("HUD.Minimap"), CVAR_COSMETIC("HUD.SmallKey"), CVAR_COSMETIC("HUD.Rupees"), + CVAR_COSMETIC("HUD.Carrots"), CVAR_COSMETIC("HUD.Timers"), CVAR_COSMETIC("HUD.ArcheryScore"), + CVAR_COSMETIC("HUD.TitleCard.Map"), CVAR_COSMETIC("HUD.TitleCard.Boss"), CVAR_COSMETIC("HUD.IGT"), }; -static const char* MarginCvarNonAnchor[] { - CVAR_COSMETIC("HUD.Carrots"), - CVAR_COSMETIC("HUD.Timers"), - CVAR_COSMETIC("HUD.ArcheryScore"), - CVAR_COSMETIC("HUD.TitleCard.Map"), - CVAR_COSMETIC("HUD.TitleCard.Boss") +static const char* MarginCvarNonAnchor[]{ + CVAR_COSMETIC("HUD.Carrots"), CVAR_COSMETIC("HUD.Timers"), CVAR_COSMETIC("HUD.ArcheryScore"), + CVAR_COSMETIC("HUD.TitleCard.Map"), CVAR_COSMETIC("HUD.TitleCard.Boss"), }; void SetMarginAll(const char* ButtonName, bool SetActivated, const char* tooltip) { - if (UIWidgets::Button(ButtonName, UIWidgets::ButtonOptions() - .Size(ImVec2(200.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip(tooltip))) { + if (UIWidgets::Button(ButtonName, + UIWidgets::ButtonOptions().Size(ImVec2(200.0f, 0.0f)).Color(THEME_COLOR).Tooltip(tooltip))) { // MarginCvarNonAnchor is an array that list every element that has No anchor by default, because if that the // case this function will not touch it with pose type 0. u8 arrayLengthNonMargin = sizeof(MarginCvarNonAnchor) / sizeof(*MarginCvarNonAnchor); @@ -512,10 +499,10 @@ void SetMarginAll(const char* ButtonName, bool SetActivated, const char* tooltip void ResetPositionAll() { if (UIWidgets::Button("Reset all positions", - UIWidgets::ButtonOptions() - .Size(ImVec2(200.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip("Revert every element to use their original position and no margins"))) { + UIWidgets::ButtonOptions() + .Size(ImVec2(200.0f, 0.0f)) + .Color(THEME_COLOR) + .Tooltip("Revert every element to use their original position and no margins"))) { for (auto cvarName : MarginCvarList) { std::string cvarPosType = std::string(cvarName).append(".PosType"); std::string cvarNameMargins = std::string(cvarName).append(".UseMargins"); @@ -527,7 +514,8 @@ void ResetPositionAll() { int hue = 0; -// Runs every frame to update rainbow hue, a potential future optimization is to only run this a once or twice a second and increase the speed of the rainbow hue rotation. +// Runs every frame to update rainbow hue, a potential future optimization is to only run this a once or twice a second +// and increase the speed of the rainbow hue rotation. void CosmeticsUpdateTick() { int index = 0; float rainbowSpeed = CVarGetFloat(CVAR_COSMETIC("RainbowSpeed"), 0.6f); @@ -566,501 +554,725 @@ 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 - 2. Patch Name: Each of these MUST be unique, used for restoring the original DList command, if these are not unique bugs WILL happen + 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 + 2. Patch Name: Each of these MUST be unique, used for restoring the original DList command, if these are not unique + bugs WILL happen 3. Changed Cvar: What determines if a patch should be applied or reset. - 4. GFX Command Index: Index of the GFX command you want to replace, the instructions on finding this are in the giant comment block above the cosmeticOptions map + 4. GFX Command Index: Index of the GFX command you want to replace, the instructions on finding this are in the + giant comment block above the cosmeticOptions map 5. GFX Command: The GFX command you want to insert */ void ApplyOrResetCustomGfxPatches(bool manualChange) { static CosmeticOption& magicFaroresPrimary = cosmeticOptions.at("Magic.FaroresPrimary"); if (manualChange || CVarGetInteger(magicFaroresPrimary.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(magicFaroresPrimary.valuesCvar, magicFaroresPrimary.defaultColor); - 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)); + 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.valuesCvar, magicFaroresSecondary.defaultColor); - PATCH_GFX(sInnerCylinderDL, "Magic_FaroresSecondary1", magicFaroresSecondary.changedCvar, 25, gsDPSetEnvColor(color.r, color.g, color.b, 255)); - PATCH_GFX(sOuterCylinderDL, "Magic_FaroresSecondary2", magicFaroresSecondary.changedCvar, 25, gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(sInnerCylinderDL, "Magic_FaroresSecondary1", magicFaroresSecondary.changedCvar, 25, + gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(sOuterCylinderDL, "Magic_FaroresSecondary2", magicFaroresSecondary.changedCvar, 25, + gsDPSetEnvColor(color.r, color.g, color.b, 255)); } static CosmeticOption& linkGoronTunic = cosmeticOptions.at("Link.GoronTunic"); if (manualChange || CVarGetInteger(linkGoronTunic.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(linkGoronTunic.valuesCvar, linkGoronTunic.defaultColor); - PATCH_GFX(gGiGoronTunicColorDL, "Link_GoronTunic1", linkGoronTunic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGoronCollarColorDL, "Link_GoronTunic2", linkGoronTunic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiGoronTunicColorDL, "Link_GoronTunic3", linkGoronTunic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiGoronCollarColorDL, "Link_GoronTunic4", linkGoronTunic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiGoronTunicColorDL, "Link_GoronTunic1", linkGoronTunic.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGoronCollarColorDL, "Link_GoronTunic2", linkGoronTunic.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiGoronTunicColorDL, "Link_GoronTunic3", linkGoronTunic.changedCvar, 4, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiGoronCollarColorDL, "Link_GoronTunic4", linkGoronTunic.changedCvar, 4, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } static CosmeticOption& linkZoraTunic = cosmeticOptions.at("Link.ZoraTunic"); if (manualChange || CVarGetInteger(linkZoraTunic.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(linkZoraTunic.valuesCvar, linkZoraTunic.defaultColor); - PATCH_GFX(gGiZoraTunicColorDL, "Link_ZoraTunic1", linkZoraTunic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiZoraCollarColorDL, "Link_ZoraTunic2", linkZoraTunic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiZoraTunicColorDL, "Link_ZoraTunic3", linkZoraTunic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiZoraCollarColorDL, "Link_ZoraTunic4", linkZoraTunic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiZoraTunicColorDL, "Link_ZoraTunic1", linkZoraTunic.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiZoraCollarColorDL, "Link_ZoraTunic2", linkZoraTunic.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiZoraTunicColorDL, "Link_ZoraTunic3", linkZoraTunic.changedCvar, 4, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiZoraCollarColorDL, "Link_ZoraTunic4", linkZoraTunic.changedCvar, 4, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } static CosmeticOption& linkHair = cosmeticOptions.at("Link.Hair"); if (manualChange || CVarGetInteger(linkHair.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(linkHair.valuesCvar, linkHair.defaultColor); - PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair1", linkHair.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - 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)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair1", linkHair.changedCvar, 10, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + 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)); - PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair7", linkHair.changedCvar, 136, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair8", linkHair.changedCvar, 162, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair9", linkHair.changedCvar, 101, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair10", linkHair.changedCvar, 118, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair11", linkHair.changedCvar, 125, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair12", linkHair.changedCvar, 159, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair13", linkHair.changedCvar, 102, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair14", linkHair.changedCvar, 122, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair5", linkHair.changedCvar, 46, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair6", linkHair.changedCvar, 54, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair7", linkHair.changedCvar, 136, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Hair8", linkHair.changedCvar, 162, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair9", linkHair.changedCvar, 101, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildHeadFarDL, "Link_Hair10", linkHair.changedCvar, 118, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair11", linkHair.changedCvar, 125, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultHeadNearDL, "Link_Hair12", linkHair.changedCvar, 159, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair13", linkHair.changedCvar, 102, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultHeadFarDL, "Link_Hair14", linkHair.changedCvar, 122, gsSPGrayscale(false)); } } static CosmeticOption& linkLinen = cosmeticOptions.at("Link.Linen"); if (manualChange || CVarGetInteger(linkLinen.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(linkLinen.valuesCvar, linkLinen.defaultColor); - PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen1", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen2", linkLinen.changedCvar, 83, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftArmOutNearDL, "Link_Linen3", linkLinen.changedCvar, 25, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen4", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen5", linkLinen.changedCvar, 70, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen6", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen7", linkLinen.changedCvar, 70, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightArmNearDL, "Link_Linen8", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftShoulderFarDL, "Link_Linen9", linkLinen.changedCvar, 55, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftShoulderNearDL, "Link_Linen10", linkLinen.changedCvar, 57, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightShoulderNearDL, "Link_Linen11", linkLinen.changedCvar, 57, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightShoulderFarDL, "Link_Linen12", linkLinen.changedCvar, 55, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultTorsoNearDL, "Link_Linen13", linkLinen.changedCvar, 66, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultTorsoFarDL, "Link_Linen14", linkLinen.changedCvar, 57, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightThighNearDL, "Link_Linen15", linkLinen.changedCvar, 53, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftThighNearDL, "Link_Linen16", linkLinen.changedCvar, 53, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightThighFarDL, "Link_Linen17", linkLinen.changedCvar, 54, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftThighFarDL, "Link_Linen18", linkLinen.changedCvar, 54, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Linen19", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Linen20", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Linen21", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Linen22", linkLinen.changedCvar, 30, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen1", linkLinen.changedCvar, 30, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen2", linkLinen.changedCvar, 83, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftArmOutNearDL, "Link_Linen3", linkLinen.changedCvar, 25, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen4", linkLinen.changedCvar, 30, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen5", linkLinen.changedCvar, 70, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen6", linkLinen.changedCvar, 30, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen7", linkLinen.changedCvar, 70, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightArmNearDL, "Link_Linen8", linkLinen.changedCvar, 30, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftShoulderFarDL, "Link_Linen9", linkLinen.changedCvar, 55, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftShoulderNearDL, "Link_Linen10", linkLinen.changedCvar, 57, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightShoulderNearDL, "Link_Linen11", linkLinen.changedCvar, 57, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightShoulderFarDL, "Link_Linen12", linkLinen.changedCvar, 55, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultTorsoNearDL, "Link_Linen13", linkLinen.changedCvar, 66, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultTorsoFarDL, "Link_Linen14", linkLinen.changedCvar, 57, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightThighNearDL, "Link_Linen15", linkLinen.changedCvar, 53, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftThighNearDL, "Link_Linen16", linkLinen.changedCvar, 53, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightThighFarDL, "Link_Linen17", linkLinen.changedCvar, 54, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftThighFarDL, "Link_Linen18", linkLinen.changedCvar, 54, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Linen19", linkLinen.changedCvar, 30, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Linen20", linkLinen.changedCvar, 30, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Linen21", linkLinen.changedCvar, 30, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Linen22", linkLinen.changedCvar, 30, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen23", linkLinen.changedCvar, 35, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftArmOutNearDL, "Link_Linen24", linkLinen.changedCvar, 45, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen25", linkLinen.changedCvar, 40, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen26", linkLinen.changedCvar, 77, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen27", linkLinen.changedCvar, 35, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen28", linkLinen.changedCvar, 77, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightArmNearDL, "Link_Linen29", linkLinen.changedCvar, 42, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Linen30", linkLinen.changedCvar, 43, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Linen31", linkLinen.changedCvar, 43, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Linen32", linkLinen.changedCvar, 38, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); - PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Linen33", linkLinen.changedCvar, 38, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen23", linkLinen.changedCvar, 35, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftArmOutNearDL, "Link_Linen24", linkLinen.changedCvar, 45, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftArmNearDL, "Link_Linen25", linkLinen.changedCvar, 40, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftArmFarDL, "Link_Linen26", linkLinen.changedCvar, 77, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen27", linkLinen.changedCvar, 35, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightArmFarDL, "Link_Linen28", linkLinen.changedCvar, 77, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightArmNearDL, "Link_Linen29", linkLinen.changedCvar, 42, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Linen30", linkLinen.changedCvar, 43, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Linen31", linkLinen.changedCvar, 43, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Linen32", linkLinen.changedCvar, 38, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); + PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Linen33", linkLinen.changedCvar, 38, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)); } } static CosmeticOption& linkBoots = cosmeticOptions.at("Link.Boots"); if (manualChange || CVarGetInteger(linkBoots.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(linkBoots.valuesCvar, linkBoots.defaultColor); - PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots1", linkBoots.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots2", linkBoots.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Boots3", linkBoots.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Boots4", linkBoots.changedCvar, 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots1", linkBoots.changedCvar, 10, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots2", linkBoots.changedCvar, 10, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Boots3", linkBoots.changedCvar, 10, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Boots4", linkBoots.changedCvar, 10, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots5", linkBoots.changedCvar, 53, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots6", linkBoots.changedCvar, 69, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots7", linkBoots.changedCvar, 52, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots8", linkBoots.changedCvar, 61, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildLeftShinNearDL, "Link_Boots9", linkBoots.changedCvar, 53, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftShinNearDL, "Link_Boots10", linkBoots.changedCvar, 69, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildLeftShinFarDL, "Link_Boots11", linkBoots.changedCvar, 52, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftShinFarDL, "Link_Boots12", linkBoots.changedCvar, 61, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildRightFootNearDL, "Link_Boots13", linkBoots.changedCvar, 30, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildRightFootFarDL, "Link_Boots14", linkBoots.changedCvar, 30, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftFootNearDL, "Link_Boots15", linkBoots.changedCvar, 30, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftFootFarDL, "Link_Boots16", linkBoots.changedCvar, 30, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftThighNearDL, "Link_Boots17", linkBoots.changedCvar, 10, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildLeftThighFarDL, "Link_Boots18", linkBoots.changedCvar, 10, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildHeadNearDL, "Link_Boots19", linkBoots.changedCvar, 20, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildHeadFarDL, "Link_Boots20", linkBoots.changedCvar, 20, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Boots21", linkBoots.changedCvar, 57, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Boots22", linkBoots.changedCvar, 52, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Boots23", linkBoots.changedCvar, 57, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Boots24", linkBoots.changedCvar, 52, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftThighNearDL, "Link_Boots25", linkBoots.changedCvar, 10, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultLeftThighFarDL, "Link_Boots26", linkBoots.changedCvar, 10, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHeadNearDL, "Link_Boots27", linkBoots.changedCvar, 20, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHeadFarDL, "Link_Boots28", linkBoots.changedCvar, 20, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots5", linkBoots.changedCvar, 53, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildRightShinNearDL, "Link_Boots6", linkBoots.changedCvar, 69, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots7", linkBoots.changedCvar, 52, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildRightShinFarDL, "Link_Boots8", linkBoots.changedCvar, 61, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildLeftShinNearDL, "Link_Boots9", linkBoots.changedCvar, 53, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftShinNearDL, "Link_Boots10", linkBoots.changedCvar, 69, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildLeftShinFarDL, "Link_Boots11", linkBoots.changedCvar, 52, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftShinFarDL, "Link_Boots12", linkBoots.changedCvar, 61, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildRightFootNearDL, "Link_Boots13", linkBoots.changedCvar, 30, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildRightFootFarDL, "Link_Boots14", linkBoots.changedCvar, 30, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftFootNearDL, "Link_Boots15", linkBoots.changedCvar, 30, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftFootFarDL, "Link_Boots16", linkBoots.changedCvar, 30, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftThighNearDL, "Link_Boots17", linkBoots.changedCvar, 10, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildLeftThighFarDL, "Link_Boots18", linkBoots.changedCvar, 10, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadNearDL, "Link_Boots19", linkBoots.changedCvar, 20, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHeadFarDL, "Link_Boots20", linkBoots.changedCvar, 20, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultRightLegNearDL, "Link_Boots21", linkBoots.changedCvar, 57, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultRightLegFarDL, "Link_Boots22", linkBoots.changedCvar, 52, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultLeftLegNearDL, "Link_Boots23", linkBoots.changedCvar, 57, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultLeftLegFarDL, "Link_Boots24", linkBoots.changedCvar, 52, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultLeftThighNearDL, "Link_Boots25", linkBoots.changedCvar, 10, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultLeftThighFarDL, "Link_Boots26", linkBoots.changedCvar, 10, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHeadNearDL, "Link_Boots27", linkBoots.changedCvar, 20, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHeadFarDL, "Link_Boots28", linkBoots.changedCvar, 20, gsSPGrayscale(false)); } } static CosmeticOption& mirrorShieldBody = cosmeticOptions.at("MirrorShield.Body"); if (manualChange || CVarGetInteger(mirrorShieldBody.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(mirrorShieldBody.valuesCvar, mirrorShieldBody.defaultColor); - PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Body1", mirrorShieldBody.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Body2", mirrorShieldBody.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Body3", mirrorShieldBody.changedCvar, 28, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Body4", mirrorShieldBody.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Body5", mirrorShieldBody.changedCvar, 28, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Body6", mirrorShieldBody.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Body7", mirrorShieldBody.changedCvar, 28, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Body8", mirrorShieldBody.changedCvar, 95, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Body1", mirrorShieldBody.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Body2", mirrorShieldBody.changedCvar, 6, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Body3", mirrorShieldBody.changedCvar, 28, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Body4", mirrorShieldBody.changedCvar, 17, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Body5", mirrorShieldBody.changedCvar, 28, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Body6", mirrorShieldBody.changedCvar, 17, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Body7", mirrorShieldBody.changedCvar, 28, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Body8", mirrorShieldBody.changedCvar, 95, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& mirrorShieldMirror = cosmeticOptions.at("MirrorShield.Mirror"); if (manualChange || CVarGetInteger(mirrorShieldMirror.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(mirrorShieldMirror.valuesCvar, mirrorShieldMirror.defaultColor); - PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Mirror1", mirrorShieldMirror.changedCvar, 47, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Mirror2", mirrorShieldMirror.changedCvar, 48, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Mirror3", mirrorShieldMirror.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Mirror4", mirrorShieldMirror.changedCvar, 33, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Mirror5", mirrorShieldMirror.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Mirror6", mirrorShieldMirror.changedCvar, 33, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Mirror7", mirrorShieldMirror.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Mirror8", mirrorShieldMirror.changedCvar, 111, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Mirror1", mirrorShieldMirror.changedCvar, 47, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMirrorShieldDL, "MirrorShield_Mirror2", mirrorShieldMirror.changedCvar, 48, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Mirror3", mirrorShieldMirror.changedCvar, + 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Mirror4", mirrorShieldMirror.changedCvar, 33, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Mirror5", mirrorShieldMirror.changedCvar, 17, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Mirror6", mirrorShieldMirror.changedCvar, 33, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Mirror7", mirrorShieldMirror.changedCvar, + 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Mirror8", mirrorShieldMirror.changedCvar, + 111, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& mirrorShieldEmblem = cosmeticOptions.at("MirrorShield.Emblem"); if (manualChange || CVarGetInteger(mirrorShieldEmblem.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(mirrorShieldEmblem.valuesCvar, mirrorShieldEmblem.defaultColor); - PATCH_GFX(gGiMirrorShieldSymbolDL, "MirrorShield_Emblem1", mirrorShieldEmblem.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 140)); - PATCH_GFX(gGiMirrorShieldSymbolDL, "MirrorShield_Emblem2", mirrorShieldEmblem.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Emblem3", mirrorShieldEmblem.changedCvar, 165, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Emblem4", mirrorShieldEmblem.changedCvar, 135, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Emblem5", mirrorShieldEmblem.changedCvar, 129, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Emblem6", mirrorShieldEmblem.changedCvar, 103, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Emblem7", mirrorShieldEmblem.changedCvar, 162, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Emblem8", mirrorShieldEmblem.changedCvar, 133, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMirrorShieldSymbolDL, "MirrorShield_Emblem1", mirrorShieldEmblem.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 140)); + PATCH_GFX(gGiMirrorShieldSymbolDL, "MirrorShield_Emblem2", mirrorShieldEmblem.changedCvar, 6, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "MirrorShield_Emblem3", mirrorShieldEmblem.changedCvar, + 165, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "MirrorShield_Emblem4", mirrorShieldEmblem.changedCvar, + 135, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathNearDL, "MirrorShield_Emblem5", mirrorShieldEmblem.changedCvar, 129, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldAndSheathFarDL, "MirrorShield_Emblem6", mirrorShieldEmblem.changedCvar, 103, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldNearDL, "MirrorShield_Emblem7", mirrorShieldEmblem.changedCvar, + 162, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingMirrorShieldFarDL, "MirrorShield_Emblem8", mirrorShieldEmblem.changedCvar, + 133, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& swordsKokiriBlade = cosmeticOptions.at("Swords.KokiriBlade"); if (manualChange || CVarGetInteger(swordsKokiriBlade.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(swordsKokiriBlade.valuesCvar, swordsKokiriBlade.defaultColor); - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriBlade1", swordsKokiriBlade.changedCvar, 79, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, "Swords_KokiriBlade2", swordsKokiriBlade.changedCvar, 75, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriBlade3", swordsKokiriBlade.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriBlade4", swordsKokiriBlade.changedCvar, 6, gsDPSetEnvColor(color.r / 4, color.g / 4, color.b / 4, 255)); + PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriBlade1", swordsKokiriBlade.changedCvar, 79, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, "Swords_KokiriBlade2", swordsKokiriBlade.changedCvar, 75, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriBlade3", swordsKokiriBlade.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriBlade4", swordsKokiriBlade.changedCvar, 6, + gsDPSetEnvColor(color.r / 4, color.g / 4, color.b / 4, 255)); } /* static CosmeticOption& swordsKokiriHilt = cosmeticOptions.at("Swords.KokiriHilt"); if (manualChange || CVarGetInteger(swordsKokiriHilt.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(swordsKokiriHilt.valuesCvar, swordsKokiriHilt.defaultColor); - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriHilt1", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, "Swords_KokiriHilt2", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildSwordAndSheathNearDL, "Swords_KokiriHilt3", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildSwordAndSheathFarDL, "Swords_KokiriHilt4", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildDekuShieldSwordAndSheathNearDL, "Swords_KokiriHilt5", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildDekuShieldSwordAndSheathFarDL, "Swords_KokiriHilt6", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildHylianShieldSwordAndSheathNearDL, "Swords_KokiriHilt7", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildHylianShieldSwordAndSheathFarDL, "Swords_KokiriHilt8", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriHilt9", swordsKokiriHilt.changedCvar, 64, gsDPSetPrimColor(0, 0, MAX(color.r - 50, 0), MAX(color.g - 50, 0), MAX(color.b - 50, 0), 255)); - PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriHilt10", swordsKokiriHilt.changedCvar, 66, gsDPSetEnvColor(MAX(color.r - 50, 0) / 3, MAX(color.g - 50, 0) / 3, MAX(color.b - 50, 0) / 3, 255)); - PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriHilt11", swordsKokiriHilt.changedCvar, 162, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriHilt12", swordsKokiriHilt.changedCvar, 164, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriHilt1", swordsKokiriHilt.changedCvar, 4, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, + "Swords_KokiriHilt2", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, + color.b, 255)); PATCH_GFX(gLinkChildSwordAndSheathNearDL, "Swords_KokiriHilt3", + swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildSwordAndSheathFarDL, "Swords_KokiriHilt4", swordsKokiriHilt.changedCvar, 4, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); PATCH_GFX(gLinkChildDekuShieldSwordAndSheathNearDL, + "Swords_KokiriHilt5", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, + color.b, 255)); PATCH_GFX(gLinkChildDekuShieldSwordAndSheathFarDL, "Swords_KokiriHilt6", + swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildHylianShieldSwordAndSheathNearDL, "Swords_KokiriHilt7", swordsKokiriHilt.changedCvar, 4, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); PATCH_GFX(gLinkChildHylianShieldSwordAndSheathFarDL, + "Swords_KokiriHilt8", swordsKokiriHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, + color.b, 255)); PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriHilt9", + swordsKokiriHilt.changedCvar, 64, gsDPSetPrimColor(0, 0, MAX(color.r - 50, 0), MAX(color.g - 50, 0), + MAX(color.b - 50, 0), 255)); PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriHilt10", + swordsKokiriHilt.changedCvar, 66, gsDPSetEnvColor(MAX(color.r - 50, 0) / 3, MAX(color.g - 50, 0) / 3, + MAX(color.b - 50, 0) / 3, 255)); PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriHilt11", + swordsKokiriHilt.changedCvar, 162, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiKokiriSwordDL, "Swords_KokiriHilt12", swordsKokiriHilt.changedCvar, + 164, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); if (manualChange) { - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriHilt13", swordsKokiriHilt.changedCvar, 108, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriHilt14", swordsKokiriHilt.changedCvar, 134, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, "Swords_KokiriHilt15", swordsKokiriHilt.changedCvar, 106, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, "Swords_KokiriHilt16", swordsKokiriHilt.changedCvar, 126, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildSwordAndSheathNearDL, "Swords_KokiriHilt17", swordsKokiriHilt.changedCvar, 100, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildSwordAndSheathNearDL, "Swords_KokiriHilt18", swordsKokiriHilt.changedCvar, 126, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildSwordAndSheathNearDL, "Swords_KokiriHilt19", swordsKokiriHilt.changedCvar, 128, gsSPEndDisplayList()); - PATCH_GFX(gLinkChildSwordAndSheathFarDL, "Swords_KokiriHilt20", swordsKokiriHilt.changedCvar, 98, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildSwordAndSheathFarDL, "Swords_KokiriHilt21", swordsKokiriHilt.changedCvar, 118, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildSwordAndSheathFarDL, "Swords_KokiriHilt22", swordsKokiriHilt.changedCvar, 120, gsSPEndDisplayList()); - PATCH_GFX(gLinkChildDekuShieldSwordAndSheathNearDL, "Swords_KokiriHilt23", swordsKokiriHilt.changedCvar, 166, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildDekuShieldSwordAndSheathNearDL, "Swords_KokiriHilt24", swordsKokiriHilt.changedCvar, 192, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildDekuShieldSwordAndSheathNearDL, "Swords_KokiriHilt25", swordsKokiriHilt.changedCvar, 194, gsSPEndDisplayList()); - PATCH_GFX(gLinkChildDekuShieldSwordAndSheathFarDL, "Swords_KokiriHilt26", swordsKokiriHilt.changedCvar, 156, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildDekuShieldSwordAndSheathFarDL, "Swords_KokiriHilt27", swordsKokiriHilt.changedCvar, 176, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildDekuShieldSwordAndSheathFarDL, "Swords_KokiriHilt28", swordsKokiriHilt.changedCvar, 178, gsSPEndDisplayList()); - PATCH_GFX(gLinkChildHylianShieldSwordAndSheathNearDL, "Swords_KokiriHilt29", swordsKokiriHilt.changedCvar, 162, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildHylianShieldSwordAndSheathNearDL, "Swords_KokiriHilt30", swordsKokiriHilt.changedCvar, 188, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildHylianShieldSwordAndSheathNearDL, "Swords_KokiriHilt31", swordsKokiriHilt.changedCvar, 190, gsSPEndDisplayList()); - PATCH_GFX(gLinkChildHylianShieldSwordAndSheathFarDL, "Swords_KokiriHilt32", swordsKokiriHilt.changedCvar, 98, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildHylianShieldSwordAndSheathFarDL, "Swords_KokiriHilt33", swordsKokiriHilt.changedCvar, 118, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriHilt13", swordsKokiriHilt.changedCvar, + 108, gsSPGrayscale(true)); PATCH_GFX(gLinkChildLeftFistAndKokiriSwordNearDL, "Swords_KokiriHilt14", + swordsKokiriHilt.changedCvar, 134, gsSPGrayscale(false)); PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, + "Swords_KokiriHilt15", swordsKokiriHilt.changedCvar, 106, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildLeftFistAndKokiriSwordFarDL, "Swords_KokiriHilt16", swordsKokiriHilt.changedCvar, + 126, gsSPGrayscale(false)); PATCH_GFX(gLinkChildSwordAndSheathNearDL, "Swords_KokiriHilt17", + swordsKokiriHilt.changedCvar, 100, gsSPGrayscale(true)); PATCH_GFX(gLinkChildSwordAndSheathNearDL, + "Swords_KokiriHilt18", swordsKokiriHilt.changedCvar, 126, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildSwordAndSheathNearDL, "Swords_KokiriHilt19", swordsKokiriHilt.changedCvar, + 128, gsSPEndDisplayList()); PATCH_GFX(gLinkChildSwordAndSheathFarDL, "Swords_KokiriHilt20", + swordsKokiriHilt.changedCvar, 98, gsSPGrayscale(true)); PATCH_GFX(gLinkChildSwordAndSheathFarDL, + "Swords_KokiriHilt21", swordsKokiriHilt.changedCvar, 118, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildSwordAndSheathFarDL, "Swords_KokiriHilt22", swordsKokiriHilt.changedCvar, + 120, gsSPEndDisplayList()); PATCH_GFX(gLinkChildDekuShieldSwordAndSheathNearDL, "Swords_KokiriHilt23", + swordsKokiriHilt.changedCvar, 166, gsSPGrayscale(true)); PATCH_GFX(gLinkChildDekuShieldSwordAndSheathNearDL, + "Swords_KokiriHilt24", swordsKokiriHilt.changedCvar, 192, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildDekuShieldSwordAndSheathNearDL, "Swords_KokiriHilt25", swordsKokiriHilt.changedCvar, + 194, gsSPEndDisplayList()); PATCH_GFX(gLinkChildDekuShieldSwordAndSheathFarDL, "Swords_KokiriHilt26", + swordsKokiriHilt.changedCvar, 156, gsSPGrayscale(true)); PATCH_GFX(gLinkChildDekuShieldSwordAndSheathFarDL, + "Swords_KokiriHilt27", swordsKokiriHilt.changedCvar, 176, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildDekuShieldSwordAndSheathFarDL, "Swords_KokiriHilt28", swordsKokiriHilt.changedCvar, + 178, gsSPEndDisplayList()); PATCH_GFX(gLinkChildHylianShieldSwordAndSheathNearDL, "Swords_KokiriHilt29", + swordsKokiriHilt.changedCvar, 162, gsSPGrayscale(true)); PATCH_GFX(gLinkChildHylianShieldSwordAndSheathNearDL, + "Swords_KokiriHilt30", swordsKokiriHilt.changedCvar, 188, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildHylianShieldSwordAndSheathNearDL, "Swords_KokiriHilt31", swordsKokiriHilt.changedCvar, + 190, gsSPEndDisplayList()); PATCH_GFX(gLinkChildHylianShieldSwordAndSheathFarDL, "Swords_KokiriHilt32", + swordsKokiriHilt.changedCvar, 98, gsSPGrayscale(true)); PATCH_GFX(gLinkChildHylianShieldSwordAndSheathFarDL, + "Swords_KokiriHilt33", swordsKokiriHilt.changedCvar, 118, gsSPGrayscale(false)); } } */ static CosmeticOption& swordsMasterBlade = cosmeticOptions.at("Swords.MasterBlade"); if (manualChange || CVarGetInteger(swordsMasterBlade.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(swordsMasterBlade.valuesCvar, swordsMasterBlade.defaultColor); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, "Swords_MasterBlade1", swordsMasterBlade.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterBlade2", swordsMasterBlade.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterBlade3", swordsMasterBlade.changedCvar, 13, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterBlade4", swordsMasterBlade.changedCvar, 14, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterBlade5", swordsMasterBlade.changedCvar, 13, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterBlade6", swordsMasterBlade.changedCvar, 14, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, "Swords_MasterBlade1", swordsMasterBlade.changedCvar, 60, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterBlade2", swordsMasterBlade.changedCvar, 17, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterBlade3", swordsMasterBlade.changedCvar, 13, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterBlade4", swordsMasterBlade.changedCvar, 14, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterBlade5", swordsMasterBlade.changedCvar, 13, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterBlade6", swordsMasterBlade.changedCvar, 14, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } /* static CosmeticOption& swordsMasterHilt = cosmeticOptions.at("Swords.MasterHilt"); if (manualChange || CVarGetInteger(swordsMasterHilt.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(swordsMasterHilt.valuesCvar, swordsMasterHilt.defaultColor); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterHilt1", swordsMasterHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, "Swords_MasterHilt2", swordsMasterHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterHilt3", swordsMasterHilt.changedCvar, 16, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMasterSwordAndSheathNearDL, "Swords_MasterHilt4", swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, "Swords_MasterHilt5", swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "Swords_MasterHilt6", swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "Swords_MasterHilt7", swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathNearDL, "Swords_MasterHilt8", swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, "Swords_MasterHilt9", swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterHilt10", swordsMasterHilt.changedCvar, 16, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterHilt1", swordsMasterHilt.changedCvar, + 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, + "Swords_MasterHilt2", swordsMasterHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, + color.b, 255)); PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterHilt3", + swordsMasterHilt.changedCvar, 16, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMasterSwordAndSheathNearDL, "Swords_MasterHilt4", swordsMasterHilt.changedCvar, 4, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, + "Swords_MasterHilt5", swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, + color.b, 255)); PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "Swords_MasterHilt6", + swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "Swords_MasterHilt7", swordsMasterHilt.changedCvar, 4, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathNearDL, + "Swords_MasterHilt8", swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, + color.b, 255)); PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, "Swords_MasterHilt9", + swordsMasterHilt.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterHilt10", swordsMasterHilt.changedCvar, + 16, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, "Swords_MasterHilt11", swordsMasterHilt.changedCvar, 38, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, "Swords_MasterHilt12", swordsMasterHilt.changedCvar, 64, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, "Swords_MasterHilt13", swordsMasterHilt.changedCvar, 106, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, "Swords_MasterHilt14", swordsMasterHilt.changedCvar, 120, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultMasterSwordAndSheathNearDL, "Swords_MasterHilt15", swordsMasterHilt.changedCvar, 104, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultMasterSwordAndSheathNearDL, "Swords_MasterHilt16", swordsMasterHilt.changedCvar, 182, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultMasterSwordAndSheathNearDL, "Swords_MasterHilt17", swordsMasterHilt.changedCvar, 184, gsSPEndDisplayList()); - PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, "Swords_MasterHilt18", swordsMasterHilt.changedCvar, 80, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, "Swords_MasterHilt19", swordsMasterHilt.changedCvar, 94, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, "Swords_MasterHilt20", swordsMasterHilt.changedCvar, 162, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, "Swords_MasterHilt21", swordsMasterHilt.changedCvar, 180, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathNearDL, "Swords_MasterHilt22", swordsMasterHilt.changedCvar, 154, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathNearDL, "Swords_MasterHilt23", swordsMasterHilt.changedCvar, 232, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "Swords_MasterHilt24", swordsMasterHilt.changedCvar, 112, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "Swords_MasterHilt25", swordsMasterHilt.changedCvar, 130, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "Swords_MasterHilt26", swordsMasterHilt.changedCvar, 172, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "Swords_MasterHilt27", swordsMasterHilt.changedCvar, 186, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "Swords_MasterHilt28", swordsMasterHilt.changedCvar, 220, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "Swords_MasterHilt29", swordsMasterHilt.changedCvar, 298, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, "Swords_MasterHilt30", swordsMasterHilt.changedCvar, 38, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, "Swords_MasterHilt31", swordsMasterHilt.changedCvar, 112, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterHilt32", swordsMasterHilt.changedCvar, 86, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterHilt33", swordsMasterHilt.changedCvar, 208, gsSPGrayscale(false)); - PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterHilt34", swordsMasterHilt.changedCvar, 112, gsSPGrayscale(true)); - PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterHilt35", swordsMasterHilt.changedCvar, 278, gsSPGrayscale(false)); - PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterHilt36", swordsMasterHilt.changedCvar, 280, gsSPEndDisplayList()); - PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterHilt37", swordsMasterHilt.changedCvar, 112, gsSPGrayscale(true)); - PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterHilt38", swordsMasterHilt.changedCvar, 278, gsSPGrayscale(false)); - PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterHilt39", swordsMasterHilt.changedCvar, 280, gsSPEndDisplayList()); + PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, "Swords_MasterHilt11", swordsMasterHilt.changedCvar, + 38, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, "Swords_MasterHilt12", + swordsMasterHilt.changedCvar, 64, gsSPGrayscale(false)); PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, + "Swords_MasterHilt13", swordsMasterHilt.changedCvar, 106, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultMasterSwordAndSheathFarDL, "Swords_MasterHilt14", swordsMasterHilt.changedCvar, + 120, gsSPGrayscale(false)); PATCH_GFX(gLinkAdultMasterSwordAndSheathNearDL, "Swords_MasterHilt15", + swordsMasterHilt.changedCvar, 104, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultMasterSwordAndSheathNearDL, + "Swords_MasterHilt16", swordsMasterHilt.changedCvar, 182, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultMasterSwordAndSheathNearDL, "Swords_MasterHilt17", swordsMasterHilt.changedCvar, + 184, gsSPEndDisplayList()); PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, "Swords_MasterHilt18", + swordsMasterHilt.changedCvar, 80, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, + "Swords_MasterHilt19", swordsMasterHilt.changedCvar, 94, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, "Swords_MasterHilt20", swordsMasterHilt.changedCvar, + 162, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathFarDL, "Swords_MasterHilt21", + swordsMasterHilt.changedCvar, 180, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathNearDL, "Swords_MasterHilt22", swordsMasterHilt.changedCvar, + 154, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultHylianShieldSwordAndSheathNearDL, "Swords_MasterHilt23", + swordsMasterHilt.changedCvar, 232, gsSPGrayscale(false)); PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, + "Swords_MasterHilt24", swordsMasterHilt.changedCvar, 112, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "Swords_MasterHilt25", swordsMasterHilt.changedCvar, + 130, gsSPGrayscale(false)); PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, "Swords_MasterHilt26", + swordsMasterHilt.changedCvar, 172, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathFarDL, + "Swords_MasterHilt27", swordsMasterHilt.changedCvar, 186, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "Swords_MasterHilt28", swordsMasterHilt.changedCvar, + 220, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultMirrorShieldSwordAndSheathNearDL, "Swords_MasterHilt29", + swordsMasterHilt.changedCvar, 298, gsSPGrayscale(false)); PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, + "Swords_MasterHilt30", swordsMasterHilt.changedCvar, 38, gsSPGrayscale(true)); + PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordFarDL, "Swords_MasterHilt31", swordsMasterHilt.changedCvar, + 112, gsSPGrayscale(false)); PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, "Swords_MasterHilt32", + swordsMasterHilt.changedCvar, 86, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultLeftHandHoldingMasterSwordNearDL, + "Swords_MasterHilt33", swordsMasterHilt.changedCvar, 208, gsSPGrayscale(false)); + PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterHilt34", swordsMasterHilt.changedCvar, + 112, gsSPGrayscale(true)); PATCH_GFX(object_toki_objects_DL_001BD0, "Swords_MasterHilt35", + swordsMasterHilt.changedCvar, 278, gsSPGrayscale(false)); PATCH_GFX(object_toki_objects_DL_001BD0, + "Swords_MasterHilt36", swordsMasterHilt.changedCvar, 280, gsSPEndDisplayList()); + PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterHilt37", swordsMasterHilt.changedCvar, + 112, gsSPGrayscale(true)); PATCH_GFX(gGanonMasterSwordDL, "Swords_MasterHilt38", + swordsMasterHilt.changedCvar, 278, gsSPGrayscale(false)); PATCH_GFX(gGanonMasterSwordDL, + "Swords_MasterHilt39", swordsMasterHilt.changedCvar, 280, gsSPEndDisplayList()); } } */ static CosmeticOption& swordsBiggoronBlade = cosmeticOptions.at("Swords.BiggoronBlade"); if (manualChange || CVarGetInteger(swordsBiggoronBlade.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(swordsBiggoronBlade.valuesCvar, swordsBiggoronBlade.defaultColor); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronBlade1", swordsBiggoronBlade.changedCvar, 108, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronBlade2", swordsBiggoronBlade.changedCvar, 63, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronBlade3", swordsBiggoronBlade.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronBlade4", swordsBiggoronBlade.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronBlade1", swordsBiggoronBlade.changedCvar, 108, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronBlade2", swordsBiggoronBlade.changedCvar, 63, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronBlade3", swordsBiggoronBlade.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronBlade4", swordsBiggoronBlade.changedCvar, 6, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); } /* static CosmeticOption& swordsBiggoronHilt = cosmeticOptions.at("Swords.BiggoronHilt"); if (manualChange || CVarGetInteger(swordsBiggoronHilt.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(swordsBiggoronHilt.valuesCvar, swordsBiggoronHilt.defaultColor); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronHilt1", swordsBiggoronHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronHilt2", swordsBiggoronHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronHilt3", swordsBiggoronHilt.changedCvar, 74, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronHilt4", swordsBiggoronHilt.changedCvar, 76, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronHilt5", swordsBiggoronHilt.changedCvar, 154, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronHilt6", swordsBiggoronHilt.changedCvar, 156, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronHilt1", + swordsBiggoronHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronHilt2", + swordsBiggoronHilt.changedCvar, 20, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronHilt3", + swordsBiggoronHilt.changedCvar, 74, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronHilt4", + swordsBiggoronHilt.changedCvar, 76, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronHilt5", + swordsBiggoronHilt.changedCvar, 154, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBiggoronSwordDL, "Swords_BiggoronHilt6", + swordsBiggoronHilt.changedCvar, 156, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); if (manualChange) { - PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronHilt7", swordsBiggoronHilt.changedCvar, 278, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronHilt8", swordsBiggoronHilt.changedCvar, 332, gsSPGrayscale(false)); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronHilt9", swordsBiggoronHilt.changedCvar, 334, gsSPEndDisplayList()); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronHilt10", swordsBiggoronHilt.changedCvar, 38, gsSPGrayscale(true)); - PATCH_GFX(gLinkAdultLeftHandHoldingBgsNearDL, "Swords_BiggoronHilt11", swordsBiggoronHilt.changedCvar, 118, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronHilt7", + swordsBiggoronHilt.changedCvar, 278, gsSPGrayscale(true)); PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, + "Swords_BiggoronHilt8", swordsBiggoronHilt.changedCvar, 332, gsSPGrayscale(false)); + PATCH_GFX(gLinkAdultLeftHandHoldingBgsFarDL, "Swords_BiggoronHilt9", + swordsBiggoronHilt.changedCvar, 334, gsSPEndDisplayList()); 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)) { Color_RGBA8 color = CVarGetColor(glovesGoronBracelet.valuesCvar, glovesGoronBracelet.defaultColor); - PATCH_GFX(gGiGoronBraceletDL, "Gloves_GoronBracelet1", glovesGoronBracelet.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGoronBraceletDL, "Gloves_GoronBracelet2", glovesGoronBracelet.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet3", glovesGoronBracelet.changedCvar, 3, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGoronBraceletDL, "Gloves_GoronBracelet1", glovesGoronBracelet.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGoronBraceletDL, "Gloves_GoronBracelet2", glovesGoronBracelet.changedCvar, 6, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet3", glovesGoronBracelet.changedCvar, 3, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet4", glovesGoronBracelet.changedCvar, 11, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet5", glovesGoronBracelet.changedCvar, 39, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet4", glovesGoronBracelet.changedCvar, 11, + gsSPGrayscale(true)); + PATCH_GFX(gLinkChildGoronBraceletDL, "Gloves_GoronBracelet5", glovesGoronBracelet.changedCvar, 39, + gsSPGrayscale(false)); } } static CosmeticOption& glovesSilverGauntlets = cosmeticOptions.at("Gloves.SilverGauntlets"); if (manualChange || CVarGetInteger(glovesSilverGauntlets.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(glovesSilverGauntlets.valuesCvar, glovesSilverGauntlets.defaultColor); - PATCH_GFX(gGiSilverGauntletsColorDL, "Gloves_SilverGauntlets1", glovesSilverGauntlets.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiSilverGauntletsColorDL, "Gloves_SilverGauntlets2", glovesSilverGauntlets.changedCvar, 4, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gGiSilverGauntletsColorDL, "Gloves_SilverGauntlets1", glovesSilverGauntlets.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSilverGauntletsColorDL, "Gloves_SilverGauntlets2", glovesSilverGauntlets.changedCvar, 4, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); } static CosmeticOption& glovesGoldenGauntlets = cosmeticOptions.at("Gloves.GoldenGauntlets"); if (manualChange || CVarGetInteger(glovesGoldenGauntlets.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(glovesGoldenGauntlets.valuesCvar, glovesGoldenGauntlets.defaultColor); - PATCH_GFX(gGiGoldenGauntletsColorDL, "Gloves_GoldenGauntlets1", glovesGoldenGauntlets.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGoldenGauntletsColorDL, "Gloves_GoldenGauntlets2", glovesGoldenGauntlets.changedCvar, 4, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gGiGoldenGauntletsColorDL, "Gloves_GoldenGauntlets1", glovesGoldenGauntlets.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGoldenGauntletsColorDL, "Gloves_GoldenGauntlets2", glovesGoldenGauntlets.changedCvar, 4, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); } static CosmeticOption& glovesGauntletsGem = cosmeticOptions.at("Gloves.GauntletsGem"); if (manualChange || CVarGetInteger(glovesGauntletsGem.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(glovesGauntletsGem.valuesCvar, glovesGauntletsGem.defaultColor); - PATCH_GFX(gGiGauntletsDL, "Gloves_GauntletsGem1", glovesGauntletsGem.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGauntletsDL, "Gloves_GauntletsGem2", glovesGauntletsGem.changedCvar, 85, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultLeftGauntletPlate2DL, "Gloves_GauntletsGem3", glovesGauntletsGem.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightGauntletPlate2DL, "Gloves_GauntletsGem4", glovesGauntletsGem.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftGauntletPlate3DL, "Gloves_GauntletsGem5", glovesGauntletsGem.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightGauntletPlate3DL, "Gloves_GauntletsGem6", glovesGauntletsGem.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGauntletsDL, "Gloves_GauntletsGem1", glovesGauntletsGem.changedCvar, 84, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGauntletsDL, "Gloves_GauntletsGem2", glovesGauntletsGem.changedCvar, 85, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultLeftGauntletPlate2DL, "Gloves_GauntletsGem3", glovesGauntletsGem.changedCvar, 42, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightGauntletPlate2DL, "Gloves_GauntletsGem4", glovesGauntletsGem.changedCvar, 42, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftGauntletPlate3DL, "Gloves_GauntletsGem5", glovesGauntletsGem.changedCvar, 42, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightGauntletPlate3DL, "Gloves_GauntletsGem6", glovesGauntletsGem.changedCvar, 42, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBoomerangBody = cosmeticOptions.at("Equipment.BoomerangBody"); if (manualChange || CVarGetInteger(equipmentBoomerangBody.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentBoomerangBody.valuesCvar, equipmentBoomerangBody.defaultColor); - PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangBody1", equipmentBoomerangBody.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangBody2", equipmentBoomerangBody.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkChildLeftFistAndBoomerangNearDL, "Equipment_BoomerangBody3", equipmentBoomerangBody.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildLeftFistAndBoomerangFarDL, "Equipment_BoomerangBody4", equipmentBoomerangBody.changedCvar, 9, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gBoomerangDL, "Equipment_BoomerangBody5", equipmentBoomerangBody.changedCvar, 39, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangBody1", equipmentBoomerangBody.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangBody2", equipmentBoomerangBody.changedCvar, 6, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkChildLeftFistAndBoomerangNearDL, "Equipment_BoomerangBody3", equipmentBoomerangBody.changedCvar, + 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildLeftFistAndBoomerangFarDL, "Equipment_BoomerangBody4", equipmentBoomerangBody.changedCvar, + 9, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gBoomerangDL, "Equipment_BoomerangBody5", equipmentBoomerangBody.changedCvar, 39, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBoomerangGem = cosmeticOptions.at("Equipment.BoomerangGem"); if (manualChange || CVarGetInteger(equipmentBoomerangGem.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentBoomerangGem.valuesCvar, equipmentBoomerangGem.defaultColor); - PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangGem1", equipmentBoomerangGem.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangGem2", equipmentBoomerangGem.changedCvar, 85, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkChildLeftFistAndBoomerangNearDL, "Equipment_BoomerangGem3", equipmentBoomerangGem.changedCvar, 16, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gBoomerangDL, "Equipment_BoomerangGem4", equipmentBoomerangGem.changedCvar, 23, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangGem1", equipmentBoomerangGem.changedCvar, 84, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBoomerangDL, "Equipment_BoomerangGem2", equipmentBoomerangGem.changedCvar, 85, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkChildLeftFistAndBoomerangNearDL, "Equipment_BoomerangGem3", equipmentBoomerangGem.changedCvar, + 16, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gBoomerangDL, "Equipment_BoomerangGem4", equipmentBoomerangGem.changedCvar, 23, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); // There appears to be no gem rendered on the far LOD variant, not sure if this is an SOH bug or what. - // PATCH_GFX(gLinkChildLeftFistAndBoomerangFarDL, "Equipment_BoomerangGem5", equipmentBoomerangGem.changedCvar, 32, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + // PATCH_GFX(gLinkChildLeftFistAndBoomerangFarDL, "Equipment_BoomerangGem5", equipmentBoomerangGem.changedCvar, + // 32, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } /* static CosmeticOption& equipmentSlingshotBody = cosmeticOptions.at("Equipment.SlingshotBody"); if (manualChange || CVarGetInteger(equipmentSlingshotBody.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentSlingshotBody.valuesCvar, equipmentSlingshotBody.defaultColor); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody1", equipmentSlingshotBody.changedCvar, 10, gsDPSetPrimColor(0, 0, MAX(color.r - 100, 0), MAX(color.g - 100, 0), MAX(color.b - 100, 0), 255)); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody2", equipmentSlingshotBody.changedCvar, 12, gsDPSetEnvColor(MAX(color.r - 100, 0) / 3, MAX(color.g - 100, 0) / 3, MAX(color.b - 100, 0) / 3, 255)); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody3", equipmentSlingshotBody.changedCvar, 74, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody4", equipmentSlingshotBody.changedCvar, 76, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody5", equipmentSlingshotBody.changedCvar, 128, gsDPSetPrimColor(0, 0, MAX(color.r - 100, 0), MAX(color.g - 100, 0), MAX(color.b - 100, 0), 255)); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody6", equipmentSlingshotBody.changedCvar, 130, gsDPSetEnvColor(MAX(color.r - 100, 0) / 3, MAX(color.g - 100, 0) / 3, MAX(color.b - 100, 0) / 3, 255)); - PATCH_GFX(gLinkChildRightArmStretchedSlingshotDL, "Equipment_SlingshotBody7", equipmentSlingshotBody.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildRightHandHoldingSlingshotNearDL, "Equipment_SlingshotBody8", equipmentSlingshotBody.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkChildRightHandHoldingSlingshotFarDL, "Equipment_SlingshotBody9", equipmentSlingshotBody.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody1", + equipmentSlingshotBody.changedCvar, 10, gsDPSetPrimColor(0, 0, MAX(color.r - 100, 0), MAX(color.g - 100, 0), + MAX(color.b - 100, 0), 255)); PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody2", + equipmentSlingshotBody.changedCvar, 12, gsDPSetEnvColor(MAX(color.r - 100, 0) / 3, MAX(color.g - 100, 0) / 3, + MAX(color.b - 100, 0) / 3, 255)); PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody3", + equipmentSlingshotBody.changedCvar, 74, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody4", + equipmentSlingshotBody.changedCvar, 76, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody5", + equipmentSlingshotBody.changedCvar, 128, gsDPSetPrimColor(0, 0, MAX(color.r - 100, 0), MAX(color.g - 100, 0), + MAX(color.b - 100, 0), 255)); PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotBody6", + equipmentSlingshotBody.changedCvar, 130, gsDPSetEnvColor(MAX(color.r - 100, 0) / 3, MAX(color.g - 100, 0) / 3, + MAX(color.b - 100, 0) / 3, 255)); PATCH_GFX(gLinkChildRightArmStretchedSlingshotDL, "Equipment_SlingshotBody7", + equipmentSlingshotBody.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildRightHandHoldingSlingshotNearDL, "Equipment_SlingshotBody8", + equipmentSlingshotBody.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkChildRightHandHoldingSlingshotFarDL, "Equipment_SlingshotBody9", + equipmentSlingshotBody.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkChildRightArmStretchedSlingshotDL, "Equipment_SlingshotBody10",equipmentSlingshotBody.changedCvar, 20, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildRightArmStretchedSlingshotDL, "Equipment_SlingshotBody11",equipmentSlingshotBody.changedCvar, 74, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildRightHandHoldingSlingshotFarDL, "Equipment_SlingshotBody12",equipmentSlingshotBody.changedCvar, 20, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildRightHandHoldingSlingshotFarDL, "Equipment_SlingshotBody13",equipmentSlingshotBody.changedCvar, 66, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildRightHandHoldingSlingshotNearDL, "Equipment_SlingshotBody14",equipmentSlingshotBody.changedCvar, 96, gsSPGrayscale(true)); - PATCH_GFX(gLinkChildRightHandHoldingSlingshotNearDL, "Equipment_SlingshotBody15",equipmentSlingshotBody.changedCvar, 136, gsSPGrayscale(false)); - PATCH_GFX(gLinkChildRightHandHoldingSlingshotNearDL, "Equipment_SlingshotBody16",equipmentSlingshotBody.changedCvar, 138, gsSPEndDisplayList()); + PATCH_GFX(gLinkChildRightArmStretchedSlingshotDL, + "Equipment_SlingshotBody10",equipmentSlingshotBody.changedCvar, 20, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildRightArmStretchedSlingshotDL, + "Equipment_SlingshotBody11",equipmentSlingshotBody.changedCvar, 74, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildRightHandHoldingSlingshotFarDL, + "Equipment_SlingshotBody12",equipmentSlingshotBody.changedCvar, 20, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildRightHandHoldingSlingshotFarDL, + "Equipment_SlingshotBody13",equipmentSlingshotBody.changedCvar, 66, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildRightHandHoldingSlingshotNearDL, + "Equipment_SlingshotBody14",equipmentSlingshotBody.changedCvar, 96, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildRightHandHoldingSlingshotNearDL, + "Equipment_SlingshotBody15",equipmentSlingshotBody.changedCvar, 136, gsSPGrayscale(false)); + PATCH_GFX(gLinkChildRightHandHoldingSlingshotNearDL, + "Equipment_SlingshotBody16",equipmentSlingshotBody.changedCvar, 138, gsSPEndDisplayList()); } } */ static CosmeticOption& equipmentSlingshotString = cosmeticOptions.at("Equipment.SlingshotString"); if (manualChange || CVarGetInteger(equipmentSlingshotString.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentSlingshotString.valuesCvar, equipmentSlingshotString.defaultColor); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotString1",equipmentSlingshotString.changedCvar, 75, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotString2",equipmentSlingshotString.changedCvar, 76, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gLinkChildSlingshotStringDL, "Equipment_SlingshotString3",equipmentSlingshotString.changedCvar, 9, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotString1", equipmentSlingshotString.changedCvar, 75, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSlingshotDL, "Equipment_SlingshotString2", equipmentSlingshotString.changedCvar, 76, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gLinkChildSlingshotStringDL, "Equipment_SlingshotString3", equipmentSlingshotString.changedCvar, 9, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBowTips = cosmeticOptions.at("Equipment.BowTips"); if (manualChange || CVarGetInteger(equipmentBowTips.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentBowTips.valuesCvar, equipmentBowTips.defaultColor); - PATCH_GFX(gGiBowDL, "Equipment_BowTips1", equipmentBowTips.changedCvar, 86, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBowDL, "Equipment_BowTips2", equipmentBowTips.changedCvar, 87, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowTips3", equipmentBowTips.changedCvar, 34, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowTips4", equipmentBowTips.changedCvar, 26, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowTips5", equipmentBowTips.changedCvar, 25, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowTips1", equipmentBowTips.changedCvar, 86, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowTips2", equipmentBowTips.changedCvar, 87, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowTips3", equipmentBowTips.changedCvar, 34, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowTips4", equipmentBowTips.changedCvar, 26, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowTips5", equipmentBowTips.changedCvar, 25, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBowString = cosmeticOptions.at("Equipment.BowString"); if (manualChange || CVarGetInteger(equipmentBowString.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentBowString.valuesCvar, equipmentBowString.defaultColor); - PATCH_GFX(gGiBowDL, "Equipment_BowString1", equipmentBowString.changedCvar, 105, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBowDL, "Equipment_BowString2", equipmentBowString.changedCvar, 106, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultBowStringDL, "Equipment_BowString3", equipmentBowString.changedCvar, 9, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowString1", equipmentBowString.changedCvar, 105, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowString2", equipmentBowString.changedCvar, 106, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultBowStringDL, "Equipment_BowString3", equipmentBowString.changedCvar, 9, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBowBody = cosmeticOptions.at("Equipment.BowBody"); if (manualChange || CVarGetInteger(equipmentBowBody.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentBowBody.valuesCvar, equipmentBowBody.defaultColor); - PATCH_GFX(gGiBowDL, "Equipment_BowBody1", equipmentBowBody.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBowDL, "Equipment_BowBody2", equipmentBowBody.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowBody3", equipmentBowBody.changedCvar, 42, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowBody4", equipmentBowBody.changedCvar, 33, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowBody5", equipmentBowBody.changedCvar, 31, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowBody1", equipmentBowBody.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowBody2", equipmentBowBody.changedCvar, 6, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowBody3", equipmentBowBody.changedCvar, 42, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowBody4", equipmentBowBody.changedCvar, 33, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowBody5", equipmentBowBody.changedCvar, 31, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBowHandle = cosmeticOptions.at("Equipment.BowHandle"); if (manualChange || CVarGetInteger(equipmentBowHandle.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentBowHandle.valuesCvar, equipmentBowHandle.defaultColor); - PATCH_GFX(gGiBowDL, "Equipment_BowHandle1", equipmentBowHandle.changedCvar, 51, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBowDL, "Equipment_BowHandle2", equipmentBowHandle.changedCvar, 52, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowHandle3", equipmentBowHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowHandle4", equipmentBowHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowHandle5", equipmentBowHandle.changedCvar, 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowHandle1", equipmentBowHandle.changedCvar, 51, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBowDL, "Equipment_BowHandle2", equipmentBowHandle.changedCvar, 52, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFirstPersonDL, "Equipment_BowHandle3", equipmentBowHandle.changedCvar, + 18, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowNearDL, "Equipment_BowHandle4", equipmentBowHandle.changedCvar, 18, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultRightHandHoldingBowFarDL, "Equipment_BowHandle5", equipmentBowHandle.changedCvar, 18, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentHammerHead = cosmeticOptions.at("Equipment.HammerHead"); if (manualChange || CVarGetInteger(equipmentHammerHead.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentHammerHead.valuesCvar, equipmentHammerHead.defaultColor); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHead1", equipmentHammerHead.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHead2", equipmentHammerHead.changedCvar, 6, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHead3", equipmentHammerHead.changedCvar, 68, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHead4", equipmentHammerHead.changedCvar, 69, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingHammerNearDL, "Equipment_HammerHead5", equipmentHammerHead.changedCvar, 38, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gLinkAdultLeftHandHoldingHammerFarDL, "Equipment_HammerHead6", equipmentHammerHead.changedCvar, 38, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHead1", equipmentHammerHead.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHead2", equipmentHammerHead.changedCvar, 6, + gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHead3", equipmentHammerHead.changedCvar, 68, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHead4", equipmentHammerHead.changedCvar, 69, + gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingHammerNearDL, "Equipment_HammerHead5", equipmentHammerHead.changedCvar, 38, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultLeftHandHoldingHammerFarDL, "Equipment_HammerHead6", equipmentHammerHead.changedCvar, 38, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentHammerHandle = cosmeticOptions.at("Equipment.HammerHandle"); if (manualChange || CVarGetInteger(equipmentHammerHandle.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentHammerHandle.valuesCvar, equipmentHammerHandle.defaultColor); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHandle1", equipmentHammerHandle.changedCvar, 84, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHammerDL, "Equipment_HammerHandle2", equipmentHammerHandle.changedCvar, 85, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - 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)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHandle1", equipmentHammerHandle.changedCvar, 84, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHammerDL, "Equipment_HammerHandle2", equipmentHammerHandle.changedCvar, 85, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + 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.valuesCvar, equipmentHookshotChain.defaultColor); - PATCH_GFX(gLinkAdultHookshotChainDL, "Equipment_HookshotChain1", equipmentHookshotChain.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gLinkAdultHookshotChainDL, "Equipment_HookshotChain1", equipmentHookshotChain.changedCvar, 17, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentChuFace = cosmeticOptions.at("Equipment.ChuFace"); if (manualChange || CVarGetInteger(equipmentChuFace.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentChuFace.valuesCvar, equipmentChuFace.defaultColor); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuFace1", equipmentChuFace.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuFace2", equipmentChuFace.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gBombchuDL, "Equipment_ChuFace3", equipmentChuFace.changedCvar, 2, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuFace1", equipmentChuFace.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuFace2", equipmentChuFace.changedCvar, 6, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gBombchuDL, "Equipment_ChuFace3", equipmentChuFace.changedCvar, 2, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gBombchuDL, "Equipment_ChuFace4", equipmentChuFace.changedCvar, 10, gsSPGrayscale(true)); - PATCH_GFX(gBombchuDL, "Equipment_ChuFace5", equipmentChuFace.changedCvar, 27, gsSPGrayscale(false)); + PATCH_GFX(gBombchuDL, "Equipment_ChuFace4", equipmentChuFace.changedCvar, 10, gsSPGrayscale(true)); + PATCH_GFX(gBombchuDL, "Equipment_ChuFace5", equipmentChuFace.changedCvar, 27, gsSPGrayscale(false)); } } static CosmeticOption& equipmentChuBody = cosmeticOptions.at("Equipment.ChuBody"); if (manualChange || CVarGetInteger(equipmentChuBody.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentChuBody.valuesCvar, equipmentChuBody.defaultColor); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody1", equipmentChuBody.changedCvar, 39, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody2", equipmentChuBody.changedCvar, 40, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody3", equipmentChuBody.changedCvar, 60, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody4", equipmentChuBody.changedCvar, 61, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gBombchuDL, "Equipment_ChuBody5", equipmentChuBody.changedCvar, 46, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody1", equipmentChuBody.changedCvar, 39, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody2", equipmentChuBody.changedCvar, 40, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody3", equipmentChuBody.changedCvar, 60, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBombchuDL, "Equipment_ChuBody4", equipmentChuBody.changedCvar, 61, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gBombchuDL, "Equipment_ChuBody5", equipmentChuBody.changedCvar, 46, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& equipmentBunnyHood = cosmeticOptions.at("Equipment.BunnyHood"); if (manualChange || CVarGetInteger(equipmentBunnyHood.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(equipmentBunnyHood.valuesCvar, equipmentBunnyHood.defaultColor); - PATCH_GFX(gGiBunnyHoodDL, "Equipment_BunnyHood1", equipmentBunnyHood.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBunnyHoodDL, "Equipment_BunnyHood2", equipmentBunnyHood.changedCvar, 6, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gGiBunnyHoodDL, "Equipment_BunnyHood3", equipmentBunnyHood.changedCvar, 83, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBunnyHoodDL, "Equipment_BunnyHood4", equipmentBunnyHood.changedCvar, 84, gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); - PATCH_GFX(gLinkChildBunnyHoodDL, "Equipment_BunnyHood5", equipmentBunnyHood.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBunnyHoodDL, "Equipment_BunnyHood1", equipmentBunnyHood.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBunnyHoodDL, "Equipment_BunnyHood2", equipmentBunnyHood.changedCvar, 6, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gGiBunnyHoodDL, "Equipment_BunnyHood3", equipmentBunnyHood.changedCvar, 83, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBunnyHoodDL, "Equipment_BunnyHood4", equipmentBunnyHood.changedCvar, 84, + gsDPSetEnvColor(color.r / 3, color.g / 3, color.b / 3, 255)); + PATCH_GFX(gLinkChildBunnyHoodDL, "Equipment_BunnyHood5", equipmentBunnyHood.changedCvar, 4, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); if (manualChange) { - PATCH_GFX(gLinkChildBunnyHoodDL, "Equipment_BunnyHood6", equipmentBunnyHood.changedCvar, 13, gsSPGrayscale(true)); + PATCH_GFX(gLinkChildBunnyHoodDL, "Equipment_BunnyHood6", equipmentBunnyHood.changedCvar, 13, + gsSPGrayscale(true)); if (CVarGetInteger(equipmentBunnyHood.changedCvar, 0)) { - ResourceMgr_PatchGfxByName(gLinkChildBunnyHoodDL, "Equipment_BunnyHood7", 125, gsSPBranchListOTRFilePath(gEndGrayscaleAndEndDlistDL)); + ResourceMgr_PatchGfxByName(gLinkChildBunnyHoodDL, "Equipment_BunnyHood7", 125, + gsSPBranchListOTRFilePath(gEndGrayscaleAndEndDlistDL)); } else { ResourceMgr_UnpatchGfxByName(gLinkChildBunnyHoodDL, "Equipment_BunnyHood7"); } @@ -1070,16 +1282,23 @@ void ApplyOrResetCustomGfxPatches(bool manualChange) { static CosmeticOption& consumableGreenRupee = cosmeticOptions.at("Consumable.GreenRupee"); if (manualChange || CVarGetInteger(consumableGreenRupee.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(consumableGreenRupee.valuesCvar, consumableGreenRupee.defaultColor); - PATCH_GFX(gGiGreenRupeeInnerColorDL, "Consumable_GreenRupee1", consumableGreenRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - 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)); + PATCH_GFX(gGiGreenRupeeInnerColorDL, "Consumable_GreenRupee1", consumableGreenRupee.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + 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)); - ResourceMgr_PatchGfxByName(gRainbowBridgeDL, "RainbowBridge_MakeGreen", 10, gsDPSetGrayscaleColor(color.r, color.g, color.b, color.a)); - ResourceMgr_PatchGfxByName(gRainbowBridgeDL, "RainbowBridge_EndGrayscaleAndEndDlist", 79, gsSPBranchListOTRFilePath(gEndGrayscaleAndEndDlistDL)); + ResourceMgr_PatchGfxByName(gRainbowBridgeDL, "RainbowBridge_MakeGreen", 10, + gsDPSetGrayscaleColor(color.r, color.g, color.b, color.a)); + ResourceMgr_PatchGfxByName(gRainbowBridgeDL, "RainbowBridge_EndGrayscaleAndEndDlist", 79, + gsSPBranchListOTRFilePath(gEndGrayscaleAndEndDlistDL)); } else { ResourceMgr_UnpatchGfxByName(gRainbowBridgeDL, "RainbowBridge_StartGrayscale"); ResourceMgr_UnpatchGfxByName(gRainbowBridgeDL, "RainbowBridge_MakeGreen"); @@ -1089,120 +1308,181 @@ void ApplyOrResetCustomGfxPatches(bool manualChange) { static CosmeticOption& consumableBlueRupee = cosmeticOptions.at("Consumable.BlueRupee"); if (manualChange || CVarGetInteger(consumableBlueRupee.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(consumableBlueRupee.valuesCvar, consumableBlueRupee.defaultColor); - PATCH_GFX(gGiBlueRupeeInnerColorDL, "Consumable_BlueRupee1", consumableBlueRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiBlueRupeeInnerColorDL, "Consumable_BlueRupee2", consumableBlueRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiBlueRupeeOuterColorDL, "Consumable_BlueRupee3", consumableBlueRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); - PATCH_GFX(gGiBlueRupeeOuterColorDL, "Consumable_BlueRupee4", consumableBlueRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); + PATCH_GFX(gGiBlueRupeeInnerColorDL, "Consumable_BlueRupee1", consumableBlueRupee.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiBlueRupeeInnerColorDL, "Consumable_BlueRupee2", consumableBlueRupee.changedCvar, 4, + gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX( + gGiBlueRupeeOuterColorDL, "Consumable_BlueRupee3", consumableBlueRupee.changedCvar, 3, + gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); + PATCH_GFX(gGiBlueRupeeOuterColorDL, "Consumable_BlueRupee4", consumableBlueRupee.changedCvar, 4, + gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); } static CosmeticOption& consumableRedRupee = cosmeticOptions.at("Consumable.RedRupee"); if (manualChange || CVarGetInteger(consumableRedRupee.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(consumableRedRupee.valuesCvar, consumableRedRupee.defaultColor); - PATCH_GFX(gGiRedRupeeInnerColorDL, "Consumable_RedRupee1", consumableRedRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiRedRupeeInnerColorDL, "Consumable_RedRupee2", consumableRedRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiRedRupeeOuterColorDL, "Consumable_RedRupee3", consumableRedRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); - PATCH_GFX(gGiRedRupeeOuterColorDL, "Consumable_RedRupee4", consumableRedRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); + PATCH_GFX(gGiRedRupeeInnerColorDL, "Consumable_RedRupee1", consumableRedRupee.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiRedRupeeInnerColorDL, "Consumable_RedRupee2", consumableRedRupee.changedCvar, 4, + gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX( + gGiRedRupeeOuterColorDL, "Consumable_RedRupee3", consumableRedRupee.changedCvar, 3, + gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); + PATCH_GFX(gGiRedRupeeOuterColorDL, "Consumable_RedRupee4", consumableRedRupee.changedCvar, 4, + gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); } static CosmeticOption& consumablePurpleRupee = cosmeticOptions.at("Consumable.PurpleRupee"); if (manualChange || CVarGetInteger(consumablePurpleRupee.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(consumablePurpleRupee.valuesCvar, consumablePurpleRupee.defaultColor); - PATCH_GFX(gGiPurpleRupeeInnerColorDL, "Consumable_PurpleRupee1", consumablePurpleRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiPurpleRupeeInnerColorDL, "Consumable_PurpleRupee2", consumablePurpleRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiPurpleRupeeOuterColorDL, "Consumable_PurpleRupee3", consumablePurpleRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); - PATCH_GFX(gGiPurpleRupeeOuterColorDL, "Consumable_PurpleRupee4", consumablePurpleRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); + PATCH_GFX(gGiPurpleRupeeInnerColorDL, "Consumable_PurpleRupee1", consumablePurpleRupee.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiPurpleRupeeInnerColorDL, "Consumable_PurpleRupee2", consumablePurpleRupee.changedCvar, 4, + gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX( + gGiPurpleRupeeOuterColorDL, "Consumable_PurpleRupee3", consumablePurpleRupee.changedCvar, 3, + gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); + PATCH_GFX(gGiPurpleRupeeOuterColorDL, "Consumable_PurpleRupee4", consumablePurpleRupee.changedCvar, 4, + gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); } static CosmeticOption& consumableGoldRupee = cosmeticOptions.at("Consumable.GoldRupee"); if (manualChange || CVarGetInteger(consumableGoldRupee.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(consumableGoldRupee.valuesCvar, consumableGoldRupee.defaultColor); - PATCH_GFX(gGiGoldRupeeInnerColorDL, "Consumable_GoldRupee1", consumableGoldRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGoldRupeeInnerColorDL, "Consumable_GoldRupee2", consumableGoldRupee.changedCvar, 4, gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); - PATCH_GFX(gGiGoldRupeeOuterColorDL, "Consumable_GoldRupee3", consumableGoldRupee.changedCvar, 3, gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); - PATCH_GFX(gGiGoldRupeeOuterColorDL, "Consumable_GoldRupee4", consumableGoldRupee.changedCvar, 4, gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); + PATCH_GFX(gGiGoldRupeeInnerColorDL, "Consumable_GoldRupee1", consumableGoldRupee.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGoldRupeeInnerColorDL, "Consumable_GoldRupee2", consumableGoldRupee.changedCvar, 4, + gsDPSetEnvColor(color.r / 5, color.g / 5, color.b / 5, 255)); + PATCH_GFX( + gGiGoldRupeeOuterColorDL, "Consumable_GoldRupee3", consumableGoldRupee.changedCvar, 3, + gsDPSetPrimColor(0, 0, MIN(color.r + 100, 255), MIN(color.g + 100, 255), MIN(color.b + 100, 255), 255)); + PATCH_GFX(gGiGoldRupeeOuterColorDL, "Consumable_GoldRupee4", consumableGoldRupee.changedCvar, 4, + gsDPSetEnvColor(color.r * 0.75f, color.g * 0.75f, color.b * 0.75f, 255)); } static CosmeticOption& consumableHearts = cosmeticOptions.at("Consumable.Hearts"); if (manualChange || CVarGetInteger(consumableHearts.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(consumableHearts.valuesCvar, consumableHearts.defaultColor); /* - PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts1", consumableHearts.changedCvar, 4, gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts2", consumableHearts.changedCvar, 26, gsSPGrayscale(true)); - PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts3", consumableHearts.changedCvar, 72, gsSPGrayscale(false)); - PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts4", consumableHearts.changedCvar, 74, gsSPEndDisplayList()); + PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts1", consumableHearts.changedCvar, 4, + gsDPSetGrayscaleColor(color.r, color.g, color.b, 255)); PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts2", + consumableHearts.changedCvar, 26, gsSPGrayscale(true)); PATCH_GFX(gGiRecoveryHeartDL, + "Consumable_Hearts3", consumableHearts.changedCvar, 72, gsSPGrayscale(false)); + PATCH_GFX(gGiRecoveryHeartDL, "Consumable_Hearts4", consumableHearts.changedCvar, + 74, gsSPEndDisplayList()); */ - PATCH_GFX(gGiHeartPieceDL, "Consumable_Hearts5", consumableHearts.changedCvar, 2, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHeartPieceDL, "Consumable_Hearts6", consumableHearts.changedCvar, 6, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiHeartContainerDL, "Consumable_Hearts7", consumableHearts.changedCvar, 2, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiHeartContainerDL, "Consumable_Hearts8", consumableHearts.changedCvar, 6, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiRedPotColorDL, "Consumable_Hearts9", consumableHearts.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiRedPotColorDL, "Consumable_Hearts10", consumableHearts.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiHeartPieceDL, "Consumable_Hearts5", consumableHearts.changedCvar, 2, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHeartPieceDL, "Consumable_Hearts6", consumableHearts.changedCvar, 6, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiHeartContainerDL, "Consumable_Hearts7", consumableHearts.changedCvar, 2, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiHeartContainerDL, "Consumable_Hearts8", consumableHearts.changedCvar, 6, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiRedPotColorDL, "Consumable_Hearts9", consumableHearts.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiRedPotColorDL, "Consumable_Hearts10", consumableHearts.changedCvar, 4, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } static CosmeticOption& consumableMagic = cosmeticOptions.at("Consumable.Magic"); if (manualChange || CVarGetInteger(consumableMagic.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(consumableMagic.valuesCvar, consumableMagic.defaultColor); - PATCH_GFX(gGiMagicJarSmallDL, "Consumable_Magic1", consumableMagic.changedCvar, 31, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiMagicJarSmallDL, "Consumable_Magic2", consumableMagic.changedCvar, 32, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiMagicJarLargeDL, "Consumable_Magic3", consumableMagic.changedCvar, 31, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiMagicJarLargeDL, "Consumable_Magic4", consumableMagic.changedCvar, 32, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiGreenPotColorDL, "Consumable_Magic5", consumableMagic.changedCvar, 3, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiGreenPotColorDL, "Consumable_Magic6", consumableMagic.changedCvar, 4, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiMagicJarSmallDL, "Consumable_Magic1", consumableMagic.changedCvar, 31, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMagicJarSmallDL, "Consumable_Magic2", consumableMagic.changedCvar, 32, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiMagicJarLargeDL, "Consumable_Magic3", consumableMagic.changedCvar, 31, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiMagicJarLargeDL, "Consumable_Magic4", consumableMagic.changedCvar, 32, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiGreenPotColorDL, "Consumable_Magic5", consumableMagic.changedCvar, 3, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiGreenPotColorDL, "Consumable_Magic6", consumableMagic.changedCvar, 4, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); } static CosmeticOption& npcGoldenSkulltula = cosmeticOptions.at("NPC.GoldenSkulltula"); if (manualChange || CVarGetInteger(npcGoldenSkulltula.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(npcGoldenSkulltula.valuesCvar, npcGoldenSkulltula.defaultColor); - PATCH_GFX(gSkulltulaTokenDL, "NPC_GoldenSkulltula1", npcGoldenSkulltula.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gSkulltulaTokenDL, "NPC_GoldenSkulltula2", npcGoldenSkulltula.changedCvar, 6, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gSkulltulaTokenFlameDL, "NPC_GoldenSkulltula3", npcGoldenSkulltula.changedCvar, 32, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gSkulltulaTokenFlameDL, "NPC_GoldenSkulltula4", npcGoldenSkulltula.changedCvar, 33, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiSkulltulaTokenDL, "NPC_GoldenSkulltula5", npcGoldenSkulltula.changedCvar, 5, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiSkulltulaTokenDL, "NPC_GoldenSkulltula6", npcGoldenSkulltula.changedCvar, 6, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(gGiSkulltulaTokenFlameDL, "NPC_GoldenSkulltula7", npcGoldenSkulltula.changedCvar, 32, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGiSkulltulaTokenFlameDL, "NPC_GoldenSkulltula8", npcGoldenSkulltula.changedCvar, 33, gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); - PATCH_GFX(object_st_DL_003FB0, "NPC_GoldenSkulltula9", npcGoldenSkulltula.changedCvar, 118, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(object_st_DL_003FB0, "NPC_GoldenSkulltula10", npcGoldenSkulltula.changedCvar, 119, gsDPSetEnvColor(color.r / 4, color.g / 4, color.b / 4, 255)); + PATCH_GFX(gSkulltulaTokenDL, "NPC_GoldenSkulltula1", npcGoldenSkulltula.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gSkulltulaTokenDL, "NPC_GoldenSkulltula2", npcGoldenSkulltula.changedCvar, 6, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gSkulltulaTokenFlameDL, "NPC_GoldenSkulltula3", npcGoldenSkulltula.changedCvar, 32, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gSkulltulaTokenFlameDL, "NPC_GoldenSkulltula4", npcGoldenSkulltula.changedCvar, 33, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiSkulltulaTokenDL, "NPC_GoldenSkulltula5", npcGoldenSkulltula.changedCvar, 5, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSkulltulaTokenDL, "NPC_GoldenSkulltula6", npcGoldenSkulltula.changedCvar, 6, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(gGiSkulltulaTokenFlameDL, "NPC_GoldenSkulltula7", npcGoldenSkulltula.changedCvar, 32, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGiSkulltulaTokenFlameDL, "NPC_GoldenSkulltula8", npcGoldenSkulltula.changedCvar, 33, + gsDPSetEnvColor(color.r / 2, color.g / 2, color.b / 2, 255)); + PATCH_GFX(object_st_DL_003FB0, "NPC_GoldenSkulltula9", npcGoldenSkulltula.changedCvar, 118, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(object_st_DL_003FB0, "NPC_GoldenSkulltula10", npcGoldenSkulltula.changedCvar, 119, + gsDPSetEnvColor(color.r / 4, color.g / 4, color.b / 4, 255)); } static CosmeticOption& npcGerudo = cosmeticOptions.at("NPC.Gerudo"); if (manualChange || CVarGetInteger(npcGerudo.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(npcGerudo.valuesCvar, npcGerudo.defaultColor); - PATCH_GFX(gGerudoPurpleTorsoDL, "NPC_Gerudo1", npcGerudo.changedCvar, 139, gsDPSetEnvColor( color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleRightThighDL, "NPC_Gerudo2", npcGerudo.changedCvar, 11, gsDPSetEnvColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleLeftThighDL, "NPC_Gerudo3", npcGerudo.changedCvar, 11, gsDPSetEnvColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleVeilDL, "NPC_Gerudo4", npcGerudo.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleLeftShinDL, "NPC_Gerudo5", npcGerudo.changedCvar, 11, gsDPSetEnvColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleRightShinDL, "NPC_Gerudo6", npcGerudo.changedCvar, 11, gsDPSetEnvColor(color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleLeftHandDL, "NPC_Gerudo7", npcGerudo.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); - PATCH_GFX(gGerudoPurpleRightHandDL, "NPC_Gerudo8", npcGerudo.changedCvar, 17, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleTorsoDL, "NPC_Gerudo1", npcGerudo.changedCvar, 139, + gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleRightThighDL, "NPC_Gerudo2", npcGerudo.changedCvar, 11, + gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleLeftThighDL, "NPC_Gerudo3", npcGerudo.changedCvar, 11, + gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleVeilDL, "NPC_Gerudo4", npcGerudo.changedCvar, 17, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleLeftShinDL, "NPC_Gerudo5", npcGerudo.changedCvar, 11, + gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleRightShinDL, "NPC_Gerudo6", npcGerudo.changedCvar, 11, + gsDPSetEnvColor(color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleLeftHandDL, "NPC_Gerudo7", npcGerudo.changedCvar, 17, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gGerudoPurpleRightHandDL, "NPC_Gerudo8", npcGerudo.changedCvar, 17, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& npcMetalTrap = cosmeticOptions.at("NPC.MetalTrap"); if (manualChange || CVarGetInteger(npcMetalTrap.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(npcMetalTrap.valuesCvar, npcMetalTrap.defaultColor); - PATCH_GFX(gSlidingBladeTrapDL, "NPC_MetalTrap1", npcMetalTrap.changedCvar, 59, gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); + PATCH_GFX(gSlidingBladeTrapDL, "NPC_MetalTrap1", npcMetalTrap.changedCvar, 59, + gsDPSetPrimColor(0, 0, color.r, color.g, color.b, 255)); } static CosmeticOption& n64LogoRed = cosmeticOptions.at("Title.N64LogoRed"); if (manualChange || CVarGetInteger(n64LogoRed.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(n64LogoRed.valuesCvar, n64LogoRed.defaultColor); - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoRed1", n64LogoRed.changedCvar, 17, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoRed2", n64LogoRed.changedCvar, 18, gsDPSetEnvColor(color.r, color.g, color.b, 128)); + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoRed1", n64LogoRed.changedCvar, 17, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoRed2", n64LogoRed.changedCvar, 18, + gsDPSetEnvColor(color.r, color.g, color.b, 128)); } static CosmeticOption& n64LogoBlue = cosmeticOptions.at("Title.N64LogoBlue"); if (manualChange || CVarGetInteger(n64LogoBlue.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(n64LogoBlue.valuesCvar, n64LogoBlue.defaultColor); - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoBlue1", n64LogoBlue.changedCvar, 29, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoBlue2", n64LogoBlue.changedCvar, 30, gsDPSetEnvColor(color.r, color.g, color.b, 128)); + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoBlue1", n64LogoBlue.changedCvar, 29, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoBlue2", n64LogoBlue.changedCvar, 30, + gsDPSetEnvColor(color.r, color.g, color.b, 128)); } static CosmeticOption& n64LogoGreen = cosmeticOptions.at("Title.N64LogoGreen"); if (manualChange || CVarGetInteger(n64LogoGreen.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(n64LogoGreen.valuesCvar, n64LogoGreen.defaultColor); - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoGreen1", n64LogoGreen.changedCvar, 56, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoGreen2", n64LogoGreen.changedCvar, 57, gsDPSetEnvColor(color.r, color.g, color.b, 128)); + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoGreen1", n64LogoGreen.changedCvar, 56, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoGreen2", n64LogoGreen.changedCvar, 57, + gsDPSetEnvColor(color.r, color.g, color.b, 128)); } static CosmeticOption& n64LogoYellow = cosmeticOptions.at("Title.N64LogoYellow"); if (manualChange || CVarGetInteger(n64LogoYellow.rainbowCvar, 0)) { Color_RGBA8 color = CVarGetColor(n64LogoYellow.valuesCvar, n64LogoYellow.defaultColor); - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoYellow1", n64LogoYellow.changedCvar, 81, gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) - PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoYellow2", n64LogoYellow.changedCvar, 82, gsDPSetEnvColor(color.r, color.g, color.b, 128)); + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoYellow1", n64LogoYellow.changedCvar, 81, + gsDPSetPrimColor(0, 0, 255, 255, 255, 255)) + PATCH_GFX(gNintendo64LogoDL, "Title_N64LogoYellow2", n64LogoYellow.changedCvar, 82, + gsDPSetEnvColor(color.r, color.g, color.b, 128)); } if (gPlayState != nullptr) { @@ -1217,12 +1497,10 @@ void ApplyOrResetCustomGfxPatches(bool manualChange) { } extern "C" Color_RGBA8 CosmeticsEditor_GetDefaultValue(const char* id) { - return Color_RGBA8 { - (uint8_t)(cosmeticOptions[id].defaultColor.r * 255.0f), + 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.a * 255.0f) - }; + (uint8_t)(cosmeticOptions[id].defaultColor.a * 255.0f) }; } void Table_InitHeader(bool has_header = true) { @@ -1231,34 +1509,34 @@ void Table_InitHeader(bool has_header = true) { } ImGui::TableNextRow(); ImGui::TableNextColumn(); - ImGui::AlignTextToFramePadding(); //This is to adjust Vertical pos of item in a cell to be normlized. + ImGui::AlignTextToFramePadding(); // This is to adjust Vertical pos of item in a cell to be normlized. ImGui::SetCursorPosX(ImGui::GetCursorPosX() - 2); ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x - 60); } -void DrawUseMarginsSlider(const std::string ElementName, const std::string CvarName){ +void DrawUseMarginsSlider(const std::string ElementName, const std::string CvarName) { std::string CvarLabel = CvarName + ".UseMargins"; std::string Label = ElementName + " use margins"; UIWidgets::CVarCheckbox(Label.c_str(), CvarLabel.c_str(), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Using this allow you move the element with General margins sliders")); + UIWidgets::CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Using this allow you move the element with General margins sliders")); } void DrawPositionsRadioBoxes(const std::string CvarName, bool NoAnchorEnabled = true) { std::string CvarLabel = CvarName + ".PosType"; UIWidgets::CVarRadioButton("Original position", CvarLabel.c_str(), 0, - UIWidgets::RadioButtonsOptions() - .Color(THEME_COLOR) - .Tooltip("This will use original intended elements position")); + UIWidgets::RadioButtonsOptions() + .Color(THEME_COLOR) + .Tooltip("This will use original intended elements position")); UIWidgets::CVarRadioButton("Anchor to the left", CvarLabel.c_str(), 1, - UIWidgets::RadioButtonsOptions() - .Color(THEME_COLOR) - .Tooltip("This will make your elements follow the left side of your game window")); + UIWidgets::RadioButtonsOptions() + .Color(THEME_COLOR) + .Tooltip("This will make your elements follow the left side of your game window")); UIWidgets::CVarRadioButton("Anchor to the right", CvarLabel.c_str(), 2, - UIWidgets::RadioButtonsOptions() - .Color(THEME_COLOR) - .Tooltip("This will make your elements follow the right side of your game window")); + UIWidgets::RadioButtonsOptions() + .Color(THEME_COLOR) + .Tooltip("This will make your elements follow the right side of your game window")); if (NoAnchorEnabled) { UIWidgets::CVarRadioButton( "No anchors", CvarLabel.c_str(), 3, @@ -1271,37 +1549,40 @@ void DrawPositionsRadioBoxes(const std::string CvarName, bool NoAnchorEnabled = UIWidgets::RadioButtonsOptions().Color(THEME_COLOR).Tooltip("This will make your elements hidden")); } -void DrawPositionSlider(const std::string CvarName, int MinY, int MaxY, int MinX, int MaxX){ +void DrawPositionSlider(const std::string CvarName, int MinY, int MaxY, int MinX, int MaxX) { std::string PosXCvar = CvarName + ".PosX"; std::string PosYCvar = CvarName + ".PosY"; std::string InvisibleLabelX = "##" + PosXCvar; std::string InvisibleLabelY = "##" + PosYCvar; UIWidgets::CVarSliderInt("Up <-> Down : %d", PosYCvar.c_str(), - UIWidgets::IntSliderOptions() - .Min(MinY) - .Max(MaxY) - .DefaultValue(0) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip("This slider is used to move Up and Down your elements.")); + UIWidgets::IntSliderOptions() + .Min(MinY) + .Max(MaxY) + .DefaultValue(0) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR) + .Tooltip("This slider is used to move Up and Down your elements.")); UIWidgets::CVarSliderInt("Left <-> Right : %d", PosXCvar.c_str(), - UIWidgets::IntSliderOptions() - .Min(MinX) - .Max(MaxX) - .DefaultValue(0) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip("This slider is used to move Left and Right your elements.")); + UIWidgets::IntSliderOptions() + .Min(MinX) + .Max(MaxX) + .DefaultValue(0) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR) + .Tooltip("This slider is used to move Left and Right your elements.")); } -void DrawScaleSlider(const std::string CvarName, float DefaultValue){ +void DrawScaleSlider(const std::string CvarName, float DefaultValue) { std::string InvisibleLabel = "##" + CvarName; std::string CvarLabel = CvarName + ".Scale"; - //Disabled for now. feature not done and several fixes needed to be merged. - //UIWidgets::EnhancementSliderFloat("Scale : %dx", InvisibleLabel.c_str(), CvarLabel.c_str(), 0.1f, 3.0f,"",DefaultValue,true); + // Disabled for now. feature not done and several fixes needed to be merged. + // UIWidgets::EnhancementSliderFloat("Scale : %dx", InvisibleLabel.c_str(), CvarLabel.c_str(), + // 0.1f, 3.0f,"",DefaultValue,true); } -void Draw_Table_Dropdown(const char* Header_Title, const char* Table_ID, const char* Column_Title, const char* Slider_Title, const char* Slider_ID, int MinY, int MaxY, int MinX, int MaxX, float Default_Value) { +void Draw_Table_Dropdown(const char* Header_Title, const char* Table_ID, const char* Column_Title, + const char* Slider_Title, const char* Slider_ID, int MinY, int MaxY, int MinX, int MaxX, + float Default_Value) { UIWidgets::PushStyleHeader(THEME_COLOR); if (ImGui::CollapsingHeader(Header_Title)) { if (ImGui::BeginTable(Table_ID, 1, FlagsTable)) { @@ -1317,7 +1598,9 @@ void Draw_Table_Dropdown(const char* Header_Title, const char* Table_ID, const c UIWidgets::PopStyleHeader(); } -void C_Button_Dropdown(const char* Header_Title, const char* Table_ID, const char* Column_Title, const char* Slider_Title, const char* Slider_ID, const char* Int_Type, float Slider_Scale_Value) { +void C_Button_Dropdown(const char* Header_Title, const char* Table_ID, const char* Column_Title, + const char* Slider_Title, const char* Slider_ID, const char* Int_Type, + float Slider_Scale_Value) { UIWidgets::PushStyleHeader(THEME_COLOR); if (ImGui::CollapsingHeader(Header_Title)) { if (ImGui::BeginTable(Table_ID, 1, FlagsTable)) { @@ -1327,18 +1610,20 @@ void C_Button_Dropdown(const char* Header_Title, const char* Table_ID, const cha DrawPositionsRadioBoxes(Slider_ID); s16 Min_X_CU = 0; s16 Max_X_CU = static_cast(ImGui::GetWindowViewport()->Size.x / 2); - if(CVarGetInteger(Int_Type, 0) == 2){ + if (CVarGetInteger(Int_Type, 0) == 2) { Max_X_CU = 294; - } else if(CVarGetInteger(Int_Type, 0) == 3){ + } else if (CVarGetInteger(Int_Type, 0) == 3) { Max_X_CU = static_cast(ImGui::GetWindowViewport()->Size.x / 2); - } else if(CVarGetInteger(Int_Type, 0) == 4){ + } else if (CVarGetInteger(Int_Type, 0) == 4) { Min_X_CU = static_cast(ImGui::GetWindowViewport()->Size.x / 2) * -1; } - DrawPositionSlider(Slider_ID, 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), Min_X_CU, Max_X_CU); + DrawPositionSlider(Slider_ID, 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), Min_X_CU, + Max_X_CU); DrawScaleSlider(Slider_ID, Slider_Scale_Value); ImGui::EndTable(); } - std::shared_ptr controller = Ship::Context::GetInstance()->GetControlDeck()->GetControllerByPort(0); + std::shared_ptr controller = + Ship::Context::GetInstance()->GetControlDeck()->GetControllerByPort(0); for (auto [id, mapping] : controller->GetButton(BTN_DDOWN)->GetAllButtonMappings()) { controller->GetButton(BTN_CUSTOM_OCARINA_NOTE_F4)->AddButtonMapping(mapping); } @@ -1355,37 +1640,37 @@ void C_Button_Dropdown(const char* Header_Title, const char* Table_ID, const cha UIWidgets::PopStyleHeader(); } -void Draw_Placements(){ +void Draw_Placements() { UIWidgets::PushStyleHeader(THEME_COLOR); ImGui::SeparatorText("General Margins Settings"); UIWidgets::CVarSliderInt("Top: %dpx", CVAR_COSMETIC("HUD.Margin.T"), - UIWidgets::IntSliderOptions() - .Min(static_cast(ImGui::GetWindowViewport()->Size.y / 2) * -1) - .Max(25) - .DefaultValue(0) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::IntSliderOptions() + .Min(static_cast(ImGui::GetWindowViewport()->Size.y / 2) * -1) + .Max(25) + .DefaultValue(0) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); UIWidgets::CVarSliderInt("Left: %dpx", CVAR_COSMETIC("HUD.Margin.L"), - UIWidgets::IntSliderOptions() - .Min(-25) - .Max(static_cast(ImGui::GetWindowViewport()->Size.x)) - .DefaultValue(0) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::IntSliderOptions() + .Min(-25) + .Max(static_cast(ImGui::GetWindowViewport()->Size.x)) + .DefaultValue(0) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); UIWidgets::CVarSliderInt("Right: %dpx", CVAR_COSMETIC("HUD.Margin.R"), - UIWidgets::IntSliderOptions() - .Min(static_cast(ImGui::GetWindowViewport()->Size.x) * -1) - .Max(25) - .DefaultValue(0) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::IntSliderOptions() + .Min(static_cast(ImGui::GetWindowViewport()->Size.x) * -1) + .Max(25) + .DefaultValue(0) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); UIWidgets::CVarSliderInt("Bottom: %dpx", CVAR_COSMETIC("HUD.Margin.B"), - UIWidgets::IntSliderOptions() - .Min(static_cast(ImGui::GetWindowViewport()->Size.y / 2) * -1) - .Max(25) - .DefaultValue(0) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::IntSliderOptions() + .Min(static_cast(ImGui::GetWindowViewport()->Size.y / 2) * -1) + .Max(25) + .DefaultValue(0) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); SetMarginAll("All margins on", true, "Set most of the elements to use margins\nSome elements with default position will not be " "affected\nElements without Anchor or Hidden will not be turned on"); @@ -1400,16 +1685,19 @@ void Draw_Placements(){ Table_InitHeader(false); DrawUseMarginsSlider("Hearts counts", CVAR_COSMETIC("HUD.Hearts")); DrawPositionsRadioBoxes(CVAR_COSMETIC("HUD.HeartsCount")); - DrawPositionSlider(CVAR_COSMETIC("HUD.HeartsCount"), -22, static_cast(ImGui::GetWindowViewport()->Size.y), -125, static_cast(ImGui::GetWindowViewport()->Size.x)); + DrawPositionSlider(CVAR_COSMETIC("HUD.HeartsCount"), -22, + static_cast(ImGui::GetWindowViewport()->Size.y), -125, + static_cast(ImGui::GetWindowViewport()->Size.x)); DrawScaleSlider(CVAR_COSMETIC("HUD.HeartsCount"), 0.7f); - UIWidgets::CVarSliderInt("Heart line length : %d", CVAR_COSMETIC("HUD.Hearts.LineLength"), - UIWidgets::IntSliderOptions() - .Min(0) - .Max(20) - .DefaultValue(0) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip("This will set the length of a row of hearts. Set to 0 for unlimited length.")); + UIWidgets::CVarSliderInt( + "Heart line length : %d", CVAR_COSMETIC("HUD.Hearts.LineLength"), + UIWidgets::IntSliderOptions() + .Min(0) + .Max(20) + .DefaultValue(0) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR) + .Tooltip("This will set the length of a row of hearts. Set to 0 for unlimited length.")); ImGui::EndTable(); } } @@ -1424,12 +1712,15 @@ void Draw_Placements(){ UIWidgets::RadioButtonsOptions() .Color(THEME_COLOR) .Tooltip("This will make your elements follow the bottom of the life meter")); - DrawPositionSlider(CVAR_COSMETIC("HUD.MagicBar"), 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), -5, static_cast(ImGui::GetWindowViewport()->Size.x / 2)); + DrawPositionSlider(CVAR_COSMETIC("HUD.MagicBar"), 0, + static_cast(ImGui::GetWindowViewport()->Size.y / 2), -5, + static_cast(ImGui::GetWindowViewport()->Size.x / 2)); DrawScaleSlider(CVAR_COSMETIC("HUD.MagicBar"), 1.0f); ImGui::EndTable(); } } - if (CVarGetInteger(CVAR_ENHANCEMENT("VisualAgony"), 0) && ImGui::CollapsingHeader("Visual stone of agony position")) { + if (CVarGetInteger(CVAR_ENHANCEMENT("VisualAgony"), 0) && + ImGui::CollapsingHeader("Visual stone of agony position")) { if (ImGui::BeginTable("tabledvisualstoneofagony", 1, FlagsTable)) { ImGui::TableSetupColumn("Visual stone of agony settings", FlagsCell, TablesCellsWidth); Table_InitHeader(false); @@ -1437,23 +1728,34 @@ 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) == ANCHOR_RIGHT){ + if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == ANCHOR_RIGHT) { Max_X_VSOA = 290; - } else if (CVarGetInteger(CVAR_COSMETIC("HUD.VisualSoA.PosType"), 0) == HIDDEN){ + } 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); + DrawPositionSlider(CVAR_COSMETIC("HUD.VisualSoA"), 0, + static_cast(ImGui::GetWindowViewport()->Size.y / 2), Min_X_VSOA, Max_X_VSOA); DrawScaleSlider(CVAR_COSMETIC("HUD.VisualSoA"), 1.0f); ImGui::EndTable(); } } - Draw_Table_Dropdown("B Button position", "tablebbtn", "B Button settings", "B Button", CVAR_COSMETIC("HUD.BButton"), 0, static_cast(ImGui::GetWindowViewport()->Size.y / 4) + 50, -1, static_cast(ImGui::GetWindowViewport()->Size.x) - 50, 0.95f); - Draw_Table_Dropdown("A Button position", "tableabtn", "A Button settings", "A Button", CVAR_COSMETIC("HUD.AButton"), -10, static_cast(ImGui::GetWindowViewport()->Size.y / 4) + 50, -20, static_cast(ImGui::GetWindowViewport()->Size.x) - 50, 0.95f); - Draw_Table_Dropdown("Start Button position", "tablestartbtn", "Start Button settings", "Start Button", CVAR_COSMETIC("HUD.StartButton"), 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), 0, static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 70, 0.75f); - C_Button_Dropdown("C Button Up position", "tablecubtn", "C Button Up settings", "C Button Up", CVAR_COSMETIC("HUD.CUpButton"), CVAR_COSMETIC("HUD.CUpButton.PosType"), 0.5f); - C_Button_Dropdown("C Button Down position", "tablecdbtn", "C Button Down settings", "C Button Down", CVAR_COSMETIC("HUD.CDownButton"), CVAR_COSMETIC("HUD.CDownButton.PosType"), 0.87f); - C_Button_Dropdown("C Button Left position", "tableclbtn", "C Button Left settings", "C Button Left", CVAR_COSMETIC("HUD.CLeftButton"), CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0.87f); - C_Button_Dropdown("C Button Right position", "tablecrbtn", "C Button Right settings", "C Button Right", CVAR_COSMETIC("HUD.CRightButton"), CVAR_COSMETIC("HUD.CRightButton.PosType"), 0.87f); + Draw_Table_Dropdown("B Button position", "tablebbtn", "B Button settings", "B Button", CVAR_COSMETIC("HUD.BButton"), + 0, static_cast(ImGui::GetWindowViewport()->Size.y / 4) + 50, -1, + static_cast(ImGui::GetWindowViewport()->Size.x) - 50, 0.95f); + Draw_Table_Dropdown("A Button position", "tableabtn", "A Button settings", "A Button", CVAR_COSMETIC("HUD.AButton"), + -10, static_cast(ImGui::GetWindowViewport()->Size.y / 4) + 50, -20, + static_cast(ImGui::GetWindowViewport()->Size.x) - 50, 0.95f); + Draw_Table_Dropdown("Start Button position", "tablestartbtn", "Start Button settings", "Start Button", + CVAR_COSMETIC("HUD.StartButton"), 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), + 0, static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 70, 0.75f); + C_Button_Dropdown("C Button Up position", "tablecubtn", "C Button Up settings", "C Button Up", + CVAR_COSMETIC("HUD.CUpButton"), CVAR_COSMETIC("HUD.CUpButton.PosType"), 0.5f); + C_Button_Dropdown("C Button Down position", "tablecdbtn", "C Button Down settings", "C Button Down", + CVAR_COSMETIC("HUD.CDownButton"), CVAR_COSMETIC("HUD.CDownButton.PosType"), 0.87f); + C_Button_Dropdown("C Button Left position", "tableclbtn", "C Button Left settings", "C Button Left", + CVAR_COSMETIC("HUD.CLeftButton"), CVAR_COSMETIC("HUD.CLeftButton.PosType"), 0.87f); + C_Button_Dropdown("C Button Right position", "tablecrbtn", "C Button Right settings", "C Button Right", + CVAR_COSMETIC("HUD.CRightButton"), CVAR_COSMETIC("HUD.CRightButton.PosType"), 0.87f); if (CVarGetInteger(CVAR_ENHANCEMENT("DpadEquips"), 0) && ImGui::CollapsingHeader("DPad items position")) { if (ImGui::BeginTable("tabledpaditems", 1, FlagsTable)) { ImGui::TableSetupColumn("DPad items settings", FlagsCell, TablesCellsWidth); @@ -1467,39 +1769,53 @@ void Draw_Placements(){ } 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); + DrawPositionSlider(CVAR_COSMETIC("HUD.Dpad"), 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), + Min_X_Dpad, Max_X_Dpad); DrawScaleSlider(CVAR_COSMETIC("HUD.Dpad"), 1.0f); ImGui::EndTable(); } } - Draw_Table_Dropdown("Minimaps position", "tableminimapspos", "minimaps settings", "Minimap", CVAR_COSMETIC("HUD.Minimap"), - static_cast(ImGui::GetWindowViewport()->Size.y / 3) * -1, static_cast(ImGui::GetWindowViewport()->Size.y / 3), static_cast(ImGui::GetWindowViewport()->Size.x) * -1, static_cast(ImGui::GetWindowViewport()->Size.x / 2), 1.0f); - Draw_Table_Dropdown("Small Keys counter position", "tablesmolekeys", "Small Keys counter settings", "Small Keys counter", CVAR_COSMETIC("HUD.SmallKey"), - 0, static_cast(ImGui::GetWindowViewport()->Size.y / 3), -1, static_cast(ImGui::GetWindowViewport()->Size.x / 2), 1.0f); - Draw_Table_Dropdown("Rupee counter position", "tablerupeecount", "Rupee counter settings", "Rupee counter", CVAR_COSMETIC("HUD.Rupees"), - -2, static_cast(ImGui::GetWindowViewport()->Size.y / 3), -3, static_cast(ImGui::GetWindowViewport()->Size.x / 2), 1.0f); + Draw_Table_Dropdown("Minimaps position", "tableminimapspos", "minimaps settings", "Minimap", + CVAR_COSMETIC("HUD.Minimap"), static_cast(ImGui::GetWindowViewport()->Size.y / 3) * -1, + static_cast(ImGui::GetWindowViewport()->Size.y / 3), + static_cast(ImGui::GetWindowViewport()->Size.x) * -1, + static_cast(ImGui::GetWindowViewport()->Size.x / 2), 1.0f); + Draw_Table_Dropdown("Small Keys counter position", "tablesmolekeys", "Small Keys counter settings", + "Small Keys counter", CVAR_COSMETIC("HUD.SmallKey"), 0, + static_cast(ImGui::GetWindowViewport()->Size.y / 3), -1, + static_cast(ImGui::GetWindowViewport()->Size.x / 2), 1.0f); + Draw_Table_Dropdown("Rupee counter position", "tablerupeecount", "Rupee counter settings", "Rupee counter", + CVAR_COSMETIC("HUD.Rupees"), -2, static_cast(ImGui::GetWindowViewport()->Size.y / 3), -3, + static_cast(ImGui::GetWindowViewport()->Size.x / 2), 1.0f); Draw_Table_Dropdown("Carrots position", "tableCarrots", "Carrots settings", "Carrots", CVAR_COSMETIC("HUD.Carrots"), - 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 25, 1.0f); - Draw_Table_Dropdown("Timers position", "tabletimers", "Timers settings", "Timers", CVAR_COSMETIC("HUD.Timers"), - 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, static_cast(ImGui::GetWindowViewport()->Size.x / 2) - 50, 1.0f); - Draw_Table_Dropdown("Archery Scores position", "tablearchery", "Archery Scores settings", "Archery scores", CVAR_COSMETIC("HUD.ArcheryScore"), - 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, static_cast(ImGui::GetWindowViewport()->Size.x / 2) - 50, 1.0f); - Draw_Table_Dropdown("Title cards (Maps) position", "tabletcmaps", "Titlecard maps settings", "Title cards (overworld)", CVAR_COSMETIC("HUD.TitleCard.Map"), - 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 10, 1.0f); - Draw_Table_Dropdown("Title cards (Bosses) position", "tabletcbosses", "Title cards (Bosses) settings", "Title cards (Bosses)", CVAR_COSMETIC("HUD.TitleCard.Boss"), - 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 10, 1.0f); - Draw_Table_Dropdown("In-game Gameplay Timer position", "tablegameplaytimer", "In-game Gameplay Timer settings", "In-game Gameplay Timer", CVAR_COSMETIC("HUD.IGT"), - 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 10, 1.0f); + 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, + static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 25, 1.0f); + Draw_Table_Dropdown("Timers position", "tabletimers", "Timers settings", "Timers", CVAR_COSMETIC("HUD.Timers"), 0, + static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, + static_cast(ImGui::GetWindowViewport()->Size.x / 2) - 50, 1.0f); + Draw_Table_Dropdown("Archery Scores position", "tablearchery", "Archery Scores settings", "Archery scores", + CVAR_COSMETIC("HUD.ArcheryScore"), 0, static_cast(ImGui::GetWindowViewport()->Size.y / 2), + -50, static_cast(ImGui::GetWindowViewport()->Size.x / 2) - 50, 1.0f); + Draw_Table_Dropdown("Title cards (Maps) position", "tabletcmaps", "Titlecard maps settings", + "Title cards (overworld)", CVAR_COSMETIC("HUD.TitleCard.Map"), 0, + static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, + static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 10, 1.0f); + Draw_Table_Dropdown("Title cards (Bosses) position", "tabletcbosses", "Title cards (Bosses) settings", + "Title cards (Bosses)", CVAR_COSMETIC("HUD.TitleCard.Boss"), 0, + static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, + static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 10, 1.0f); + Draw_Table_Dropdown("In-game Gameplay Timer position", "tablegameplaytimer", "In-game Gameplay Timer settings", + "In-game Gameplay Timer", CVAR_COSMETIC("HUD.IGT"), 0, + static_cast(ImGui::GetWindowViewport()->Size.y / 2), -50, + static_cast(ImGui::GetWindowViewport()->Size.x / 2) + 10, 1.0f); if (ImGui::CollapsingHeader("Enemy Health Bar position")) { if (ImGui::BeginTable("enemyhealthbar", 1, FlagsTable)) { ImGui::TableSetupColumn("Enemy Health Bar settings", FlagsCell, TablesCellsWidth); Table_InitHeader(false); std::string posTypeCVar = CVAR_COSMETIC("HUD.EnemyHealthBar.PosType"); - UIWidgets::CVarRadioButton("Anchor to Enemy", CVAR_COSMETIC("HUD.EnemyHealthBar.PosType"), - ENEMYHEALTH_ANCHOR_ACTOR, - UIWidgets::RadioButtonsOptions() - .Color(THEME_COLOR) - .Tooltip("This will use enemy on screen position")); + UIWidgets::CVarRadioButton( + "Anchor to Enemy", CVAR_COSMETIC("HUD.EnemyHealthBar.PosType"), ENEMYHEALTH_ANCHOR_ACTOR, + UIWidgets::RadioButtonsOptions().Color(THEME_COLOR).Tooltip("This will use enemy on screen position")); UIWidgets::CVarRadioButton( "Anchor to the top", CVAR_COSMETIC("HUD.EnemyHealthBar.PosType"), ENEMYHEALTH_ANCHOR_TOP, UIWidgets::RadioButtonsOptions() @@ -1510,22 +1826,23 @@ void Draw_Placements(){ UIWidgets::RadioButtonsOptions() .Color(THEME_COLOR) .Tooltip("This will make your elements follow the bottom edge of your game window")); - DrawPositionSlider(CVAR_COSMETIC("HUD.EnemyHealthBar."), -SCREEN_HEIGHT, SCREEN_HEIGHT, -static_cast(ImGui::GetWindowViewport()->Size.x / 2), static_cast(ImGui::GetWindowViewport()->Size.x / 2)); - if (UIWidgets::CVarSliderInt( - "Health Bar Width: %d", CVAR_COSMETIC("HUD.EnemyHealthBar.Width.Value"), - UIWidgets::IntSliderOptions() - .Min(32) - .Max(128) - .DefaultValue(64) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR) - .Tooltip("This will change the width of the health bar"))) { + DrawPositionSlider(CVAR_COSMETIC("HUD.EnemyHealthBar."), -SCREEN_HEIGHT, SCREEN_HEIGHT, + -static_cast(ImGui::GetWindowViewport()->Size.x / 2), + static_cast(ImGui::GetWindowViewport()->Size.x / 2)); + if (UIWidgets::CVarSliderInt("Health Bar Width: %d", CVAR_COSMETIC("HUD.EnemyHealthBar.Width.Value"), + UIWidgets::IntSliderOptions() + .Min(32) + .Max(128) + .DefaultValue(64) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR) + .Tooltip("This will change the width of the health bar"))) { CVarSetInteger(CVAR_COSMETIC("HUD.EnemyHealthBar.Width.Changed"), 1); } ImGui::SameLine(); ImGui::SetCursorPosY(ImGui::GetCursorPosY() + (ImGui::CalcTextSize("g").y * 2)); if (UIWidgets::Button("Reset##EnemyHealthBarWidth", - UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { + UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { CVarClear(CVAR_COSMETIC("HUD.EnemyHealthBar.Width.Value")); CVarClear(CVAR_COSMETIC("HUD.EnemyHealthBar.Width.Changed")); } @@ -1538,8 +1855,7 @@ void Draw_Placements(){ void Reset_Option_Single(const char* Button_Title, const char* name) { ImGui::SameLine(); ImGui::SetCursorPosY(ImGui::GetCursorPosY() + (ImGui::CalcTextSize("g").y * 2)); - if (UIWidgets::Button(Button_Title, - UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { + if (UIWidgets::Button(Button_Title, UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { CVarClear(name); } } @@ -1547,8 +1863,7 @@ void Reset_Option_Single(const char* Button_Title, const char* name) { void Reset_Option_Double(const char* Button_Title, const char* name) { ImGui::SameLine(); ImGui::SetCursorPosY(ImGui::GetCursorPosY() + (ImGui::CalcTextSize("g").y * 2)); - if (UIWidgets::Button(Button_Title, - UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { + if (UIWidgets::Button(Button_Title, UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { CVarClear((std::string(name) + ".Value").c_str()); CVarClear((std::string(name) + ".Changed").c_str()); } @@ -1560,27 +1875,28 @@ void DrawSillyTab() { UIWidgets::Separator(true, true, 2.0f, 2.0f); UIWidgets::CVarCheckbox("Let It Snow", CVAR_GENERAL("LetItSnow"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR) - .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.")); + UIWidgets::CheckboxOptions() + .Color(THEME_COLOR) + .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.")); UIWidgets::Separator(true, true, 2.0f, 2.0f); if (UIWidgets::CVarSliderFloat("Link Body Size", CVAR_COSMETIC("Link.BodySize.Value"), - UIWidgets::FloatSliderOptions() - .Format("%.3f") - .Min(0.001f) - .Max(0.05f) - .DefaultValue(0.01f) - .Step(0.001f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR))) { + UIWidgets::FloatSliderOptions() + .Format("%.3f") + .Min(0.001f) + .Max(0.05f) + .DefaultValue(0.01f) + .Step(0.001f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR))) { CVarSetInteger(CVAR_COSMETIC("Link.BodySize.Changed"), 1); } ImGui::SameLine(); ImGui::SetCursorPosY(ImGui::GetCursorPosY() + (ImGui::CalcTextSize("g").y * 2)); if (UIWidgets::Button("Reset##Link_BodySize", - UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { + UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { CVarClear(CVAR_COSMETIC("Link.BodySize.Value")); CVarClear(CVAR_COSMETIC("Link.BodySize.Changed")); if (gPlayState != nullptr) { @@ -1593,14 +1909,14 @@ void DrawSillyTab() { UIWidgets::Separator(true, true, 2.0f, 2.0f); if (UIWidgets::CVarSliderFloat("Link Head Scale", CVAR_COSMETIC("Link.HeadScale.Value"), - UIWidgets::FloatSliderOptions() - .Format("%.1fx") - .Min(0.1f) - .Max(5.0f) - .DefaultValue(1.0f) - .Step(0.1f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR))) { + UIWidgets::FloatSliderOptions() + .Format("%.1fx") + .Min(0.1f) + .Max(5.0f) + .DefaultValue(1.0f) + .Step(0.1f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR))) { CVarSetInteger(CVAR_COSMETIC("Link.HeadScale.Changed"), 1); } Reset_Option_Double("Reset##Link_HeadScale", CVAR_COSMETIC("Link.HeadScale")); @@ -1608,14 +1924,14 @@ void DrawSillyTab() { UIWidgets::Separator(true, true, 2.0f, 2.0f); if (UIWidgets::CVarSliderFloat("Link Sword Scale", CVAR_COSMETIC("Link.SwordScale.Value"), - UIWidgets::FloatSliderOptions() - .Format("%.1fx") - .Min(0.1f) - .Max(5.0f) - .DefaultValue(1.0f) - .Step(0.1f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR))) { + UIWidgets::FloatSliderOptions() + .Format("%.1fx") + .Min(0.1f) + .Max(5.0f) + .DefaultValue(1.0f) + .Step(0.1f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR))) { CVarSetInteger(CVAR_COSMETIC("Link.SwordScale.Changed"), 1); } Reset_Option_Double("Reset##Link_SwordScale", CVAR_COSMETIC("Link.SwordScale")); @@ -1623,98 +1939,97 @@ void DrawSillyTab() { UIWidgets::Separator(true, true, 2.0f, 2.0f); UIWidgets::CVarSliderFloat("Bunny Hood Length", CVAR_COSMETIC("BunnyHood.EarLength"), - UIWidgets::FloatSliderOptions() - .Format("%.0f") - .Min(-300.0f) - .Max(1000.0f) - .DefaultValue(0.0f) - .Step(10.0f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::FloatSliderOptions() + .Format("%.0f") + .Min(-300.0f) + .Max(1000.0f) + .DefaultValue(0.0f) + .Step(10.0f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); Reset_Option_Single("Reset##BunnyHood_EarLength", CVAR_COSMETIC("BunnyHood.EarLength")); UIWidgets::Separator(true, true, 2.0f, 2.0f); UIWidgets::CVarSliderFloat("Bunny Hood Spread", CVAR_COSMETIC("BunnyHood.EarSpread"), - UIWidgets::FloatSliderOptions() - .Format("%.0f") - .Min(-300.0f) - .Max(500.0f) - .DefaultValue(0.0f) - .Step(10.0f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::FloatSliderOptions() + .Format("%.0f") + .Min(-300.0f) + .Max(500.0f) + .DefaultValue(0.0f) + .Step(10.0f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); Reset_Option_Single("Reset##BunnyHood_EarSpread", CVAR_COSMETIC("BunnyHood.EarSpread")); UIWidgets::Separator(true, true, 2.0f, 2.0f); UIWidgets::CVarSliderFloat("Goron Neck Length", CVAR_COSMETIC("Goron.NeckLength"), - UIWidgets::FloatSliderOptions() - .Format("%.0f") - .Min(0.0f) - .Max(5000.0f) - .DefaultValue(0.0f) - .Step(10.0f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::FloatSliderOptions() + .Format("%.0f") + .Min(0.0f) + .Max(5000.0f) + .DefaultValue(0.0f) + .Step(10.0f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); Reset_Option_Single("Reset##Goron_NeckLength", CVAR_COSMETIC("Goron.NeckLength")); UIWidgets::Separator(true, true, 2.0f, 2.0f); UIWidgets::CVarCheckbox("Unfix Goron Spin", CVAR_COSMETIC("UnfixGoronSpin"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR)); + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); UIWidgets::Separator(true, true, 2.0f, 2.0f); UIWidgets::CVarSliderFloat("Fairies Size", CVAR_COSMETIC("Fairies.Size"), - UIWidgets::FloatSliderOptions() - .Format("%.1fx") - .Min(0.1f) - .Max(5.0f) - .DefaultValue(1.0f) - .Step(0.1f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::FloatSliderOptions() + .Format("%.1fx") + .Min(0.1f) + .Max(5.0f) + .DefaultValue(1.0f) + .Step(0.1f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); Reset_Option_Single("Reset##Fairies_Size", CVAR_COSMETIC("Fairies.Size")); UIWidgets::Separator(true, true, 2.0f, 2.0f); UIWidgets::CVarSliderFloat("N64 Logo Spin Speed", CVAR_COSMETIC("N64Logo.SpinSpeed"), - UIWidgets::FloatSliderOptions() - .Format("%.1fx") - .Min(0.1f) - .Max(5.0f) - .DefaultValue(1.0f) - .Step(0.1f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::FloatSliderOptions() + .Format("%.1fx") + .Min(0.1f) + .Max(5.0f) + .DefaultValue(1.0f) + .Step(0.1f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); Reset_Option_Single("Reset##N64Logo_SpinSpeed", CVAR_COSMETIC("N64Logo.SpinSpeed")); UIWidgets::Separator(true, true, 2.0f, 2.0f); UIWidgets::CVarSliderFloat("Moon Size", CVAR_COSMETIC("Moon.Size"), - UIWidgets::FloatSliderOptions() - .Format("%.1fx") - .Min(0.1f) - .Max(5.0f) - .DefaultValue(1.0f) - .Step(0.1f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::FloatSliderOptions() + .Format("%.1fx") + .Min(0.1f) + .Max(5.0f) + .DefaultValue(1.0f) + .Step(0.1f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); Reset_Option_Single("Reset##Moon_Size", CVAR_COSMETIC("Moon.Size")); UIWidgets::Separator(true, true, 2.0f, 2.0f); if (UIWidgets::CVarSliderFloat("Kak Windmill Speed", CVAR_COSMETIC("Kak.Windmill_Speed.Value"), - UIWidgets::FloatSliderOptions() - .Format("%.0f") - .Min(100.0f) - .Max(6000.0f) - .DefaultValue(100.0f) - .Step(10.0f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR))) { + UIWidgets::FloatSliderOptions() + .Format("%.0f") + .Min(100.0f) + .Max(6000.0f) + .DefaultValue(100.0f) + .Step(10.0f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR))) { CVarSetInteger(CVAR_COSMETIC("Kak.Windmill_Speed.Changed"), 1); } Reset_Option_Double("Reset##Kak_Windmill_Speed", CVAR_COSMETIC("Kak.Windmill_Speed")); @@ -1726,7 +2041,8 @@ void DrawSillyTab() { // Copies the RGB values from one cosmetic option to another, multiplied by the passed in amount, this // allows you create and use multiple shades of the same color. -void CopyMultipliedColor(CosmeticOption& cosmeticOptionSrc, CosmeticOption& cosmeticOptionTarget, float amount = 0.75f) { +void CopyMultipliedColor(CosmeticOption& cosmeticOptionSrc, CosmeticOption& cosmeticOptionTarget, + float amount = 0.75f) { Color_RGBA8 newColor; newColor.r = static_cast(MIN((cosmeticOptionSrc.currentColor.x * 255.0f) * amount, 255)); newColor.g = static_cast(MIN((cosmeticOptionSrc.currentColor.y * 255.0f) * amount, 255)); @@ -1805,7 +2121,8 @@ void RandomizeColor(CosmeticOption& cosmeticOption) { } void ResetColor(CosmeticOption& cosmeticOption) { - Color_RGBA8 defaultColor = {cosmeticOption.defaultColor.r, cosmeticOption.defaultColor.g, cosmeticOption.defaultColor.b, cosmeticOption.defaultColor.a}; + Color_RGBA8 defaultColor = { cosmeticOption.defaultColor.r, cosmeticOption.defaultColor.g, + cosmeticOption.defaultColor.b, cosmeticOption.defaultColor.a }; cosmeticOption.currentColor.x = defaultColor.r / 255.0f; cosmeticOption.currentColor.y = defaultColor.g / 255.0f; cosmeticOption.currentColor.z = defaultColor.b / 255.0f; @@ -1865,16 +2182,15 @@ void ResetColor(CosmeticOption& cosmeticOption) { } void DrawCosmeticRow(CosmeticOption& cosmeticOption) { - if (UIWidgets::CVarColorPicker(cosmeticOption.label.c_str(), cosmeticOption.cvar, - cosmeticOption.defaultColor, - cosmeticOption.supportsAlpha, 0, THEME_COLOR)) { + if (UIWidgets::CVarColorPicker(cosmeticOption.label.c_str(), cosmeticOption.cvar, cosmeticOption.defaultColor, + cosmeticOption.supportsAlpha, 0, THEME_COLOR)) { CVarSetInteger((cosmeticOption.rainbowCvar), 0); CVarSetInteger((cosmeticOption.changedCvar), 1); ApplySideEffects(cosmeticOption); ApplyOrResetCustomGfxPatches(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } - //the longest option name + // the longest option name ImGui::SameLine((ImGui::CalcTextSize("Message Light Blue (None No Shadow)").x * 1.0f) + 60.0f); if (UIWidgets::Button( ("Random##" + cosmeticOption.label).c_str(), @@ -1886,7 +2202,7 @@ void DrawCosmeticRow(CosmeticOption& cosmeticOption) { if (cosmeticOption.supportsRainbow) { ImGui::SameLine(); if (UIWidgets::CVarCheckbox(("Rainbow##" + cosmeticOption.label).c_str(), cosmeticOption.rainbowCvar, - UIWidgets::CheckboxOptions().Color(THEME_COLOR))) { + UIWidgets::CheckboxOptions().Color(THEME_COLOR))) { CVarSetInteger((cosmeticOption.changedCvar), 1); ApplySideEffects(cosmeticOption); ApplyOrResetCustomGfxPatches(); @@ -1896,12 +2212,12 @@ void DrawCosmeticRow(CosmeticOption& cosmeticOption) { ImGui::SameLine(); UIWidgets::CVarCheckbox(("Locked##" + cosmeticOption.label).c_str(), cosmeticOption.lockedCvar, - UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); if (CVarGetInteger((cosmeticOption.changedCvar), 0)) { ImGui::SameLine(); if (UIWidgets::Button(("Reset##" + cosmeticOption.label).c_str(), - UIWidgets::ButtonOptions().Size(ImVec2(80, 31)).Padding(ImVec2(2.0f, 0.0f)))) { + UIWidgets::ButtonOptions().Size(ImVec2(80, 31)).Padding(ImVec2(2.0f, 0.0f)))) { ResetColor(cosmeticOption); ApplyOrResetCustomGfxPatches(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); @@ -1914,7 +2230,8 @@ void DrawCosmeticGroup(CosmeticGroup cosmeticGroup) { ImGui::Text("%s", label.c_str()); // the longest option name ImGui::SameLine((ImGui::CalcTextSize("Message Light Blue (None No Shadow)").x * 1.0f) + 60.0f); - if (UIWidgets::Button(("Random##" + label).c_str(), + if (UIWidgets::Button( + ("Random##" + label).c_str(), UIWidgets::ButtonOptions().Size(ImVec2(80, 31)).Padding(ImVec2(2.0f, 0.0f)).Color(THEME_COLOR))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { if (cosmeticOption.group == cosmeticGroup && @@ -1927,7 +2244,7 @@ void DrawCosmeticGroup(CosmeticGroup cosmeticGroup) { } ImGui::SameLine(); if (UIWidgets::Button(("Reset##" + label).c_str(), - UIWidgets::ButtonOptions().Size(ImVec2(80, 31)).Padding(ImVec2(2.0f, 0.0f)))) { + UIWidgets::ButtonOptions().Size(ImVec2(80, 31)).Padding(ImVec2(2.0f, 0.0f)))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { if (cosmeticOption.group == cosmeticGroup && !CVarGetInteger(cosmeticOption.lockedCvar, 0)) { ResetColor(cosmeticOption); @@ -1937,7 +2254,8 @@ void DrawCosmeticGroup(CosmeticGroup cosmeticGroup) { } UIWidgets::Spacer(); for (auto& [id, cosmeticOption] : cosmeticOptions) { - if (cosmeticOption.group == cosmeticGroup && (!cosmeticOption.advancedOption || CVarGetInteger(CVAR_COSMETIC("AdvancedMode"), 0))) { + if (cosmeticOption.group == cosmeticGroup && + (!cosmeticOption.advancedOption || CVarGetInteger(CVAR_COSMETIC("AdvancedMode"), 0))) { DrawCosmeticRow(cosmeticOption); } } @@ -2042,27 +2360,26 @@ void CosmeticsEditorWindow::ApplyDungeonKeyColors() { void CosmeticsEditorWindow::DrawElement() { UIWidgets::CVarCombobox("Color Scheme", CVAR_COSMETIC("DefaultColorScheme"), colorSchemes, - UIWidgets::ComboboxOptions() - .DefaultIndex(COLORSCHEME_N64) - .Color(THEME_COLOR) - .LabelPosition(UIWidgets::LabelPositions::Near) - .ComponentAlignment(UIWidgets::ComponentAlignments::Right)); + UIWidgets::ComboboxOptions() + .DefaultIndex(COLORSCHEME_N64) + .Color(THEME_COLOR) + .LabelPosition(UIWidgets::LabelPositions::Near) + .ComponentAlignment(UIWidgets::ComponentAlignments::Right)); UIWidgets::CVarCheckbox("Sync Rainbow colors", CVAR_COSMETIC("RainbowSync"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR)); + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); UIWidgets::CVarSliderFloat("Rainbow Speed", CVAR_COSMETIC("RainbowSpeed"), - UIWidgets::FloatSliderOptions() - .Format("%.2f") - .Min(0.01f) - .Max(1.0f) - .DefaultValue(0.6f) - .Step(0.01f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + UIWidgets::FloatSliderOptions() + .Format("%.2f") + .Min(0.01f) + .Max(1.0f) + .DefaultValue(0.6f) + .Step(0.01f) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Randomize All on New Scene", CVAR_COSMETIC("RandomizeAllOnNewScene"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Enables randomizing all unlocked cosmetics when you enter a new scene.")); + UIWidgets::CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Enables randomizing all unlocked cosmetics when you enter a new scene.")); UIWidgets::CVarCheckbox( "Advanced Mode", CVAR_COSMETIC("AdvancedMode"), UIWidgets::CheckboxOptions() @@ -2074,7 +2391,7 @@ void CosmeticsEditorWindow::DrawElement() { "apply.")); if (CVarGetInteger(CVAR_COSMETIC("AdvancedMode"), 0)) { if (UIWidgets::Button("Lock All Advanced", - UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { + UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { if (cosmeticOption.advancedOption) { CVarSetInteger(cosmeticOption.lockedCvar, 1); @@ -2083,7 +2400,7 @@ void CosmeticsEditorWindow::DrawElement() { } ImGui::SameLine(); if (UIWidgets::Button("Unlock All Advanced", - UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { + UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { if (cosmeticOption.advancedOption) { CVarSetInteger(cosmeticOption.lockedCvar, 0); @@ -2091,18 +2408,15 @@ void CosmeticsEditorWindow::DrawElement() { } } } - if (UIWidgets::Button("Randomize All", - UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { + if (UIWidgets::Button("Randomize All", UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { CosmeticsEditor_RandomizeAll(); } ImGui::SameLine(); - if (UIWidgets::Button("Reset All", - UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { + if (UIWidgets::Button("Reset All", UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { CVarClearBlock("gCosmetics"); ApplyOrResetCustomGfxPatches(); } - if (UIWidgets::Button("Lock All", - UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { + if (UIWidgets::Button("Lock All", UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { if (!cosmeticOption.advancedOption || CVarGetInteger(CVAR_COSMETIC("AdvancedMode"), 0)) { CVarSetInteger(cosmeticOption.lockedCvar, 1); @@ -2110,8 +2424,7 @@ void CosmeticsEditorWindow::DrawElement() { } } ImGui::SameLine(); - if (UIWidgets::Button("Unlock All", - UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { + if (UIWidgets::Button("Unlock All", UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { if (!cosmeticOption.advancedOption || CVarGetInteger(CVAR_COSMETIC("AdvancedMode"), 0)) { CVarSetInteger(cosmeticOption.lockedCvar, 0); @@ -2119,8 +2432,7 @@ void CosmeticsEditorWindow::DrawElement() { } } - if (UIWidgets::Button("Rainbow All", - UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { + if (UIWidgets::Button("Rainbow All", UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { if (!CVarGetInteger(cosmeticOption.lockedCvar, 0) && (!cosmeticOption.advancedOption || CVarGetInteger(CVAR_COSMETIC("AdvancedMode"), 0))) { @@ -2130,8 +2442,7 @@ void CosmeticsEditorWindow::DrawElement() { } } ImGui::SameLine(); - if (UIWidgets::Button("Un-Rainbow All", - UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { + if (UIWidgets::Button("Un-Rainbow All", UIWidgets::ButtonOptions().Size(ImVec2(250.0f, 0.0f)).Color(THEME_COLOR))) { for (auto& [id, cosmeticOption] : cosmeticOptions) { if (!CVarGetInteger(cosmeticOption.lockedCvar, 0) && (!cosmeticOption.advancedOption || CVarGetInteger(CVAR_COSMETIC("AdvancedMode"), 0))) { @@ -2161,9 +2472,8 @@ void CosmeticsEditorWindow::DrawElement() { UIWidgets::Separator(true, true, 2.0f, 2.0f); - if (UIWidgets::Button( - "Give all keys dungeon-specific colors", - UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { + if (UIWidgets::Button("Give all keys dungeon-specific colors", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { ApplyDungeonKeyColors(); } @@ -2185,19 +2495,18 @@ void CosmeticsEditorWindow::DrawElement() { DrawCosmeticGroup(COSMETICS_GROUP_SPIN_ATTACK); DrawCosmeticGroup(COSMETICS_GROUP_TRAILS); if (UIWidgets::CVarSliderInt("Trails Duration: %d", CVAR_COSMETIC("Trails.Duration.Value"), - UIWidgets::IntSliderOptions() - .Min(2) - .Max(20) - .DefaultValue(4) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR))) { + UIWidgets::IntSliderOptions() + .Min(2) + .Max(20) + .DefaultValue(4) + .Size(ImVec2(300.0f, 0.0f)) + .Color(THEME_COLOR))) { CVarSetInteger(CVAR_COSMETIC("Trails.Duration.Changed"), 1); } ImGui::SameLine(); ImGui::SetCursorPosY(ImGui::GetCursorPosY() + (ImGui::CalcTextSize("g").y * 2)); - if (UIWidgets::Button("Reset##Trails_Duration", UIWidgets::ButtonOptions() - .Size(ImVec2(80, 36)) - .Padding(ImVec2(5.0f, 0.0f)))) { + if (UIWidgets::Button("Reset##Trails_Duration", + UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { CVarClear(CVAR_COSMETIC("Trails.Duration.Value")); CVarClear(CVAR_COSMETIC("Trails.Duration.Changed")); } @@ -2255,15 +2564,12 @@ void CosmeticsEditorWindow::DrawElement() { } void RegisterOnLoadGameHook() { - GameInteractor::Instance->RegisterGameHook([](int32_t fileNum) { - ApplyOrResetCustomGfxPatches(); - }); + GameInteractor::Instance->RegisterGameHook( + [](int32_t fileNum) { ApplyOrResetCustomGfxPatches(); }); } void RegisterOnGameFrameUpdateHook() { - GameInteractor::Instance->RegisterGameHook([]() { - CosmeticsUpdateTick(); - }); + GameInteractor::Instance->RegisterGameHook([]() { CosmeticsUpdateTick(); }); } void Cosmetics_RegisterOnSceneInitHook() { @@ -2277,7 +2583,8 @@ void Cosmetics_RegisterOnSceneInitHook() { void CosmeticsEditorWindow::InitElement() { // Convert the `current color` into the format that the ImGui color picker expects for (auto& [id, cosmeticOption] : cosmeticOptions) { - Color_RGBA8 defaultColor = {cosmeticOption.defaultColor.r, cosmeticOption.defaultColor.g, cosmeticOption.defaultColor.b, cosmeticOption.defaultColor.a}; + Color_RGBA8 defaultColor = { cosmeticOption.defaultColor.r, cosmeticOption.defaultColor.g, + cosmeticOption.defaultColor.b, cosmeticOption.defaultColor.a }; Color_RGBA8 cvarColor = CVarGetColor(cosmeticOption.valuesCvar, defaultColor); cosmeticOption.currentColor.x = cvarColor.r / 255.0f; diff --git a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.h b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.h index 9c3dd76ba..6a2b1efd1 100644 --- a/soh/soh/Enhancements/cosmetics/CosmeticsEditor.h +++ b/soh/soh/Enhancements/cosmetics/CosmeticsEditor.h @@ -1,8 +1,9 @@ #pragma once #include -// Not to be confused with tabs, groups are 1:1 with the boxes shown in the UI, grouping them allows us to reset/randomize -// every item in a group at once. If you are looking for tabs they are rendered manually in ImGui in `DrawCosmeticsEditor` +// Not to be confused with tabs, groups are 1:1 with the boxes shown in the UI, grouping them allows us to +// reset/randomize every item in a group at once. If you are looking for tabs they are rendered manually in ImGui in +// `DrawCosmeticsEditor` typedef enum { COSMETICS_GROUP_LINK, COSMETICS_GROUP_MIRRORSHIELD, @@ -25,14 +26,14 @@ typedef enum { COSMETICS_GROUP_NAVI, COSMETICS_GROUP_IVAN, COSMETICS_GROUP_MESSAGE, - COSMETICS_GROUP_MAX + COSMETICS_GROUP_MAX, } CosmeticGroup; #ifdef __cplusplus extern "C" { #endif //__cplusplus - Color_RGBA8 CosmeticsEditor_GetDefaultValue(const char* id); +Color_RGBA8 CosmeticsEditor_GetDefaultValue(const char* id); #ifdef __cplusplus } @@ -50,7 +51,8 @@ typedef struct { static float TablesCellsWidth = 300.0f; static ImGuiTableColumnFlags FlagsTable = ImGuiTableFlags_BordersH | ImGuiTableFlags_BordersV; -static ImGuiTableColumnFlags FlagsCell = ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_NoSort; +static ImGuiTableColumnFlags FlagsCell = + ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_NoSort; void CosmeticsEditor_RandomizeAll(); void CosmeticsEditor_RandomizeGroup(CosmeticGroup group); @@ -65,6 +67,6 @@ class CosmeticsEditorWindow : public Ship::GuiWindow { void InitElement() override; void DrawElement() override; void ApplyDungeonKeyColors(); - void UpdateElement() override {}; + void UpdateElement() override{}; }; #endif //__cplusplus \ No newline at end of file diff --git a/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp b/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp index 2d750ab5d..029284fa4 100644 --- a/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp +++ b/soh/soh/Enhancements/cosmetics/CustomLogoTitle.cpp @@ -68,9 +68,10 @@ extern "C" void CustomLogoTitle_Draw(TitleContext* titleContext, uint8_t logoToD gDPSetCycleType(POLY_OPA_DISP++, G_CYC_2CYCLE); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_XLU_SURF2, G_RM_OPA_CI | CVG_DST_WRAP); gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL1, PRIMITIVE, ENV_ALPHA, TEXEL0, 0, 0, 0, TEXEL0, PRIMITIVE, ENVIRONMENT, - COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0); + COMBINED, ENVIRONMENT, COMBINED, 0, PRIMITIVE, 0); if (CVarGetInteger(CVAR_COSMETIC("Title.NintendoLogo.Changed"), 0)) { - Color_RGB8 nintendoLogoColor = CVarGetColor24(CVAR_COSMETIC("Title.NintendoLogo.Value"), Color_RGB8{0, 0, 255}); + Color_RGB8 nintendoLogoColor = + CVarGetColor24(CVAR_COSMETIC("Title.NintendoLogo.Value"), Color_RGB8{ 0, 0, 255 }); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_OPA_DISP++, nintendoLogoColor.r, nintendoLogoColor.g, nintendoLogoColor.b, 128); } else { @@ -79,16 +80,16 @@ extern "C" void CustomLogoTitle_Draw(TitleContext* titleContext, uint8_t logoToD } gDPLoadMultiBlock(POLY_OPA_DISP++, nintendo_rogo_static_Tex_001800, 0x100, 1, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, 2, 11); + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, 2, 11); - for (idx = 0, y = 94; idx < 16; idx++, y += 2) - { - gDPLoadMultiTile(POLY_OPA_DISP++, (logoToDraw == LOGO_TO_DRAW_N64) ? nintendo_rogo_static_Tex_000000 : nintendo_rogo_static_Tex_LUS_000000, 0, G_TX_RENDERTILE, G_IM_FMT_I, G_IM_SIZ_8b, 192, 32, - 0, idx * 2, 192 - 1, (idx + 1) * 2 - 1, 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); - - gDPSetTileSize(POLY_OPA_DISP++, 0, 0, 0, (192 - 1) << G_TEXTURE_IMAGE_FRAC, - (2 - 1) << G_TEXTURE_IMAGE_FRAC); + for (idx = 0, y = 94; idx < 16; idx++, y += 2) { + gDPLoadMultiTile( + POLY_OPA_DISP++, + (logoToDraw == LOGO_TO_DRAW_N64) ? nintendo_rogo_static_Tex_000000 : nintendo_rogo_static_Tex_LUS_000000, 0, + G_TX_RENDERTILE, G_IM_FMT_I, G_IM_SIZ_8b, 192, 32, 0, idx * 2, 192 - 1, (idx + 1) * 2 - 1, 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); + + gDPSetTileSize(POLY_OPA_DISP++, 0, 0, 0, (192 - 1) << G_TEXTURE_IMAGE_FRAC, (2 - 1) << G_TEXTURE_IMAGE_FRAC); gDPSetTileSize(POLY_OPA_DISP++, 1, titleContext->uls, (titleContext->ult & 0x7F) - idx * 4, 0, 0); gSPTextureRectangle(POLY_OPA_DISP++, 388, y << 2, 1156, (y + 2) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); @@ -99,13 +100,13 @@ extern "C" void CustomLogoTitle_Draw(TitleContext* titleContext, uint8_t logoToD f32 scale = 0.4f; gSPSegment(POLY_OPA_DISP++, 0x08, - (uintptr_t)Gfx_TwoTexScroll(titleContext->state.gfxCtx, 0, 0, (0 - 1) % 128, 32, 32, 1, - 0, (1 * -2) % 128, 32, 32)); + (uintptr_t)Gfx_TwoTexScroll(titleContext->state.gfxCtx, 0, 0, (0 - 1) % 128, 32, 32, 1, 0, + (1 * -2) % 128, 32, 32)); Matrix_Translate(0.0f, -10.0f, 0.0f, MTXMODE_APPLY); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(titleContext->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetEnvColor(POLY_OPA_DISP++, 0, 50, 100, 255); gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gEffIceFragment3DL); } @@ -117,7 +118,7 @@ extern "C" void CustomLogoTitle_Draw(TitleContext* titleContext, uint8_t logoToD CLOSE_DISPS(titleContext->state.gfxCtx); } -#define CVAR_BOOTSEQUENCE_NAME CVAR_ENHANCEMENT("BootSequence") +#define CVAR_BOOTSEQUENCE_NAME CVAR_SETTING("BootSequence") #define CVAR_BOOTSEQUENCE_DEFAULT BOOTSEQUENCE_DEFAULT #define CVAR_BOOTSEQUENCE_VALUE CVarGetInteger(CVAR_BOOTSEQUENCE_NAME, CVAR_BOOTSEQUENCE_DEFAULT) @@ -150,7 +151,7 @@ extern "C" void CustomLogoTitle_Main(TitleContext* titleContext) { gSaveContext.natureAmbienceId = 0xFF; gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; titleContext->state.running = false; - + logosSeen++; if (CVAR_BOOTSEQUENCE_VALUE == BOOTSEQUENCE_DEFAULT && logosSeen == 1) { @@ -171,7 +172,7 @@ extern "C" void CustomLogoTitle_Main(TitleContext* titleContext) { // // // // // Always -// +// void OnZTitleInitReplaceTitleMainWithCustom(void* gameState) { TitleContext* titleContext = (TitleContext*)gameState; @@ -198,7 +199,7 @@ static RegisterShipInitFunc initFuncAlways(RegisterCustomLogoTitle); // // // // // // // Bootsequence -// +// void OnZTitleUpdateSkipToFileSelect(void* gameState) { TitleContext* titleContext = (TitleContext*)gameState; @@ -219,7 +220,7 @@ static RegisterShipInitFunc initFuncBootsequence(RegisterCustomLogoTitleBootsequ // // // // // // // Let it Snow -// +// #define CVAR_LETITSNOW_NAME CVAR_GENERAL("LetItSnow") #define CVAR_LETITSNOW_DEFAULT 0 diff --git a/soh/soh/Enhancements/cosmetics/NoMasterSword.cpp b/soh/soh/Enhancements/cosmetics/NoMasterSword.cpp index 4d4b26715..be011c675 100644 --- a/soh/soh/Enhancements/cosmetics/NoMasterSword.cpp +++ b/soh/soh/Enhancements/cosmetics/NoMasterSword.cpp @@ -19,10 +19,10 @@ void UpdateNoMSPatch() { 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)))); + (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 @@ -38,9 +38,12 @@ void UpdateNoMSPatch() { 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(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 @@ -80,26 +83,27 @@ void RegisterNoMasterSword() { *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)) { + 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, []{ + COND_HOOK(OnPlayerUpdate, IS_RANDO, [] { static uint16_t lastItemOnB = gSaveContext.equips.buttonItems[0]; if (lastItemOnB != gSaveContext.equips.buttonItems[0]) { UpdateNoMSPatch(); diff --git a/soh/soh/Enhancements/cosmetics/authenticGfxPatches.cpp b/soh/soh/Enhancements/cosmetics/authenticGfxPatches.cpp index 75f6bd35d..477fe6f0a 100644 --- a/soh/soh/Enhancements/cosmetics/authenticGfxPatches.cpp +++ b/soh/soh/Enhancements/cosmetics/authenticGfxPatches.cpp @@ -18,125 +18,212 @@ typedef struct { int startInstruction; } DListPatchInfo; -static DListPatchInfo freezardEffectDListPatchInfos[] = { - { gFreezardIntactDL, 5 }, - { gFreezardTopRightHornChippedDL, 5 }, - { gFreezardHeadChippedDL, 5 }, - { gFreezardIceTriangleDL, 5 }, +static DListPatchInfo freezardBodyDListPatchInfos[] = { + { gFreezardIntactDL, 5 }, { gFreezardTopRightHornChippedDL, 5 }, + { gFreezardHeadChippedDL, 5 }, { gFreezardIceTriangleDL, 5 }, { gFreezardIceRockDL, 5 }, }; static DListPatchInfo ironKnuckleDListPatchInfos[] = { + // VambraceLeft { object_ik_DL_01BE98, 39 }, { object_ik_DL_01BE98, 59 }, + // ArmLeft { object_ik_DL_01C130, 38 }, + // VambraceRight { object_ik_DL_01C2B8, 39 }, { object_ik_DL_01C2B8, 59 }, + // ArmRight { object_ik_DL_01C550, 38 }, + // Waist { object_ik_DL_01C7B8, 8 }, { object_ik_DL_01C7B8, 28 }, + // PauldronLeft { object_ik_DL_01CB58, 8 }, { object_ik_DL_01CB58, 31 }, + // BootTipLeft { object_ik_DL_01CCA0, 15 }, { object_ik_DL_01CCA0, 37 }, { object_ik_DL_01CCA0, 52 }, { object_ik_DL_01CCA0, 68 }, + // WaistArmorLeft { object_ik_DL_01CEE0, 27 }, { object_ik_DL_01CEE0, 46 }, { object_ik_DL_01CEE0, 125 }, + // PauldronRight { object_ik_DL_01D2B0, 8 }, { object_ik_DL_01D2B0, 32 }, - + + // BootTipRight { object_ik_DL_01D3F8, 15 }, { object_ik_DL_01D3F8, 37 }, { object_ik_DL_01D3F8, 52 }, { object_ik_DL_01D3F8, 68 }, + // WaistArmorRight { object_ik_DL_01D638, 23 }, { object_ik_DL_01D638, 42 }, { object_ik_DL_01D638, 110 }, }; +static DListPatchInfo arrowTipDListPatchInfos[] = { + { gArrowNearDL, 46 }, + { gArrowFarDL, 5 }, +}; + +void PatchArrowTipTexture() { + // Custom texture for Arrow tips that accounts for overflow texture reading + Gfx arrowTipTextureWithOverflowFixGfx = + gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b_LOAD_BLOCK, 1, gHilite2Tex_Overflow); + + // Gfx instructions to fix authentic vanilla bug where the Arrow tips texture is read as the wrong size + Gfx arrowTipTextureWithSizeFixGfx[] = { + gsDPLoadTextureBlock(gHilite2Tex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 16, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, 5, 5, 1, 1), + }; + + bool fixTexturesOOB = CVarGetInteger(CVAR_ENHANCEMENT("FixTexturesOOB"), 0); + + for (const auto& patchInfo : arrowTipDListPatchInfos) { + const char* dlist = patchInfo.dlist; + int start = patchInfo.startInstruction; + + // Patch using custom overflowed texture + if (!fixTexturesOOB) { + // Unpatch the other texture fix + for (size_t i = 4; i < 8; i++) { + int instruction = start + i; + std::string unpatchName = "arrowTipTextureWithSizeFix_" + std::to_string(instruction); + ResourceMgr_UnpatchGfxByName(dlist, unpatchName.c_str()); + } + + std::string patchName = "arrowTipTextureWithOverflowFix_" + std::to_string(start); + std::string patchName2 = "arrowTipTextureWithOverflowFix_" + std::to_string(start + 1); + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), start, arrowTipTextureWithOverflowFixGfx); + ResourceMgr_PatchGfxByName(dlist, patchName2.c_str(), start + 1, gsSPNoOp()); + } else { // Patch texture to use correct image size/fmt + // Unpatch the other texture fix + std::string unpatchName = "arrowTipTextureWithOverflowFix_" + std::to_string(start); + std::string unpatchName2 = "arrowTipTextureWithOverflowFix_" + std::to_string(start + 1); + ResourceMgr_UnpatchGfxByName(dlist, unpatchName.c_str()); + ResourceMgr_UnpatchGfxByName(dlist, unpatchName2.c_str()); + + for (size_t i = 4; i < 8; i++) { + int instruction = start + i; + std::string patchName = "arrowTipTextureWithSizeFix_" + std::to_string(instruction); + + if (i == 0) { + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, gsSPNoOp()); + } else { + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, + arrowTipTextureWithSizeFixGfx[i - 1]); + } + } + } + } +} + void PatchDekuStickTextureOverflow() { // Custom texture for holding Deku Stick that accounts for overflow texture reading - Gfx gDekuStickOverflowTexFix = gsDPSetTextureImage(G_IM_FMT_I, G_IM_SIZ_8b, 1, gDekuStickOverflowTex); + Gfx dekuSticTexkWithOverflowFixGfx = gsDPSetTextureImage(G_IM_FMT_I, G_IM_SIZ_8b, 1, gDekuStickOverflowTex); // Gfx instructions to fix authentic vanilla bug where the Deku Stick texture is read as the wrong size - Gfx gDekuStickTexFix[] = { + Gfx dekuStickTexWithSizeFixGfx[] = { gsDPLoadTextureBlock(gDekuStickTex, G_IM_FMT_I, G_IM_SIZ_8b, 8, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMIRROR | G_TX_WRAP, 4, 4, G_TX_NOLOD, G_TX_NOLOD) + G_TX_NOMIRROR | G_TX_WRAP, 4, 4, G_TX_NOLOD, G_TX_NOLOD), }; const char* dlist = gLinkChildLinkDekuStickDL; int start = 5; + // Patch using custom overflowed texture if (!CVarGetInteger(CVAR_ENHANCEMENT("FixTexturesOOB"), 0)) { // Unpatch the other texture fix - for (size_t i = 0; i < 7; i++) { - int instruction = start + (i == 0 ? 0 : i + 1); - std::string unpatchName = "DekuStickFix" + std::to_string(instruction); + for (size_t i = 0; i < 8; i++) { + int instruction = start + i; + std::string unpatchName = "dekuStickWithSizeFix_" + std::to_string(instruction); ResourceMgr_UnpatchGfxByName(dlist, unpatchName.c_str()); } - std::string patchName = "DekuStickOverflow" + std::to_string(start); - ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), start, gDekuStickOverflowTexFix); - } else { + std::string patchName = "dekuStickWithOverflowFix_" + std::to_string(start); + std::string patchName2 = "dekuStickWithOverflowFix_" + std::to_string(start + 1); + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), start, dekuSticTexkWithOverflowFixGfx); + ResourceMgr_PatchGfxByName(dlist, patchName2.c_str(), start + 1, gsSPNoOp()); + } else { // Patch texture to use correct image size/fmt // Unpatch the other texture fix - std::string unpatchName = "DekuStickOverflow" + std::to_string(start); + std::string unpatchName = "dekuStickWithOverflowFix_" + std::to_string(start); + std::string unpatchName2 = "dekuStickWithOverflowFix_" + std::to_string(start + 1); ResourceMgr_UnpatchGfxByName(dlist, unpatchName.c_str()); - - for (size_t i = 0; i < 7; i++) { - int instruction = start + (i == 0 ? 0 : i + 1); - std::string patchName = "DekuStickFix" + std::to_string(instruction); - ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, gDekuStickTexFix[i]); + ResourceMgr_UnpatchGfxByName(dlist, unpatchName2.c_str()); + + for (size_t i = 0; i < 8; i++) { + int instruction = start + i; + std::string patchName = "dekuStickWithSizeFix_" + std::to_string(instruction); + + if (i == 0) { + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, gsSPNoOp()); + } else { + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, dekuStickTexWithSizeFixGfx[i - 1]); + } } } } void PatchFreezardTextureOverflow() { // Custom texture for Freezard effect that accounts for overflow texture reading - Gfx gEffUnknown12OverflowTextFix = gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, gEffUnknown12OverflowTex); + Gfx freezardBodyTextureWithOverflowFixGfx = + gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, gEffUnknown12OverflowTex); // Gfx instructions to fix authentic vanilla bug where the Freezard effect texture is read as the wrong format - Gfx gEffUnknown12TexFix[] = { - gsDPLoadTextureBlock(gEffUnknown12Tex, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | - G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD) + Gfx freezardBodyTextureWithFormatFixGfx[] = { + gsDPLoadTextureBlock(gEffUnknown12Tex, G_IM_FMT_I, G_IM_SIZ_8b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD), }; - for (const auto& patchInfo : freezardEffectDListPatchInfos) { + bool fixTexturesOOB = CVarGetInteger(CVAR_ENHANCEMENT("FixTexturesOOB"), 0); + + for (const auto& patchInfo : freezardBodyDListPatchInfos) { const char* dlist = patchInfo.dlist; int start = patchInfo.startInstruction; - char patchNameBuf[24]; - // Patch using custom overflowed texture - if (!CVarGetInteger(CVAR_ENHANCEMENT("FixTexturesOOB"), 0)) { + if (!fixTexturesOOB) { // Unpatch the other texture fix - for (size_t i = 0; i < 7; i++) { - int instruction = start + (i == 0 ? 0 : i + 1); - std::string unpatchName = "gEffUnknown12Fix" + std::to_string(instruction); + for (size_t i = 0; i < 8; i++) { + int instruction = start + i; + std::string unpatchName = "freezardBodyTextureWithFormatFix_" + std::to_string(instruction); ResourceMgr_UnpatchGfxByName(dlist, unpatchName.c_str()); } - std::string patchName = "gEffUnknown12Overflow" + std::to_string(start); - ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), start, gEffUnknown12OverflowTextFix); - } else { // Patch texture to use correct image size + std::string patchName = "freezardBodyTextureWithOverflowFix_" + std::to_string(start); + std::string patchName2 = "freezardBodyTextureWithOverflowFix_" + std::to_string(start + 1); + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), start, freezardBodyTextureWithOverflowFixGfx); + ResourceMgr_PatchGfxByName(dlist, patchName2.c_str(), start + 1, gsSPNoOp()); + } else { // Patch texture to use correct image size/fmt // Unpatch the other texture fix - std::string unpatchName = "gEffUnknown12Overflow" + std::to_string(start); + std::string unpatchName = "freezardBodyTextureWithOverflowFix_" + std::to_string(start); + std::string unpatchName2 = "freezardBodyTextureWithOverflowFix_" + std::to_string(start + 1); ResourceMgr_UnpatchGfxByName(dlist, unpatchName.c_str()); + ResourceMgr_UnpatchGfxByName(dlist, unpatchName2.c_str()); - for (size_t i = 0; i < 7; i++) { - int instruction = start + (i == 0 ? 0 : i + 1); - std::string patchName = "gEffUnknown12Fix" + std::to_string(instruction); - ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, gEffUnknown12TexFix[i]); + for (size_t i = 0; i < 8; i++) { + int instruction = start + i; + std::string patchName = "freezardBodyTextureWithFormatFix_" + std::to_string(instruction); + + if (i == 0) { + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, gsSPNoOp()); + } else { + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, + freezardBodyTextureWithFormatFixGfx[i - 1]); + } } } } @@ -144,48 +231,58 @@ void PatchFreezardTextureOverflow() { void PatchIronKnuckleTextureOverflow() { // Custom texture for Iron Knuckle that accounts for overflow texture reading - Gfx gIronKnuckleMetalOverflowTexFix = gsDPSetTextureImage(G_IM_FMT_I, G_IM_SIZ_8b, 1, gIronKnuckleMetalOverflowTex); + Gfx ironKnuckleFireTexWithOverflowFixGfx = + gsDPSetTextureImage(G_IM_FMT_I, G_IM_SIZ_8b, 1, gIronKnuckleMetalOverflowTex); // Gfx instructions to fix authentic vanilla bug where the Iron Knuckle texture is read as the wrong format - Gfx gIronKnuckleMetalTexFix[] = { - gsDPLoadTextureBlock(gIronKnuckleMetalTex, G_IM_FMT_I, G_IM_SIZ_4b, 32, 64, 0, G_TX_MIRROR | G_TX_WRAP, - G_TX_MIRROR | G_TX_WRAP, 5, 6, G_TX_NOLOD, G_TX_NOLOD) + Gfx ironKnuckleFireTexWithFormatFixGfx[] = { + gsDPLoadTextureBlock_4b(gIronKnuckleMetalTex, G_IM_FMT_I, 32, 64, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, 5, 6, G_TX_NOLOD, G_TX_NOLOD), }; + bool fixTexturesOOB = CVarGetInteger(CVAR_ENHANCEMENT("FixTexturesOOB"), 0); + for (const auto& patchInfo : ironKnuckleDListPatchInfos) { const char* dlist = patchInfo.dlist; int start = patchInfo.startInstruction; - // OTRTODO: Patching to use the correct size format for Iron Knuckle causes a tile size failure - // Until this is solved, Iron Knuckle will be hardcoded to always display with the "authentic" texture fix - // Patch using custom overflowed texture - // if (!CVarGetInteger(CVAR_ENHANCEMENT("FixTexturesOOB"), 0)) { + if (!fixTexturesOOB) { // Unpatch the other texture fix - for (size_t i = 0; i < 7; i++) { - int instruction = start + (i == 0 ? 0 : i + 1); - std::string unpatchName = "MetalTexFix" + std::to_string(instruction); + for (size_t i = 0; i < 8; i++) { + int instruction = start + i; + std::string unpatchName = "ironKnuckleFireTexWithSizeFix_" + std::to_string(instruction); ResourceMgr_UnpatchGfxByName(dlist, unpatchName.c_str()); } - std::string patchName = "MetalTexOverflow" + std::to_string(start); - ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), start, gIronKnuckleMetalOverflowTexFix); - // } else { // Patch texture to use correct image size - // // Unpatch the other texture fix - // std::string unpatchName = "MetalTexOverflow" + std::to_string(start); - // ResourceMgr_UnpatchGfxByName(dlist, unpatchName.c_str()); + std::string patchName = "ironKnuckleFireTexWithOverflowFix_" + std::to_string(start); + std::string patchName2 = "ironKnuckleFireTexWithOverflowFix_" + std::to_string(start + 1); + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), start, ironKnuckleFireTexWithOverflowFixGfx); + ResourceMgr_PatchGfxByName(dlist, patchName2.c_str(), start + 1, ironKnuckleFireTexWithOverflowFixGfx); + } else { // Patch texture to use correct image size/fmt + // Unpatch the other texture fix + std::string unpatchName = "ironKnuckleFireTexWithOverflowFix_" + std::to_string(start); + std::string unpatchName2 = "ironKnuckleFireTexWithOverflowFix_" + std::to_string(start + 1); + ResourceMgr_UnpatchGfxByName(dlist, unpatchName.c_str()); + ResourceMgr_UnpatchGfxByName(dlist, unpatchName2.c_str()); - // // Patch texture to use correct image size - // for (size_t i = 0; i < 7; i++) { - // int instruction = start + (i == 0 ? 0 : i + 1); - // std::string patchName = "MetalTexFix" + std::to_string(instruction); - // ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, gIronKnuckleMetalTexFix[i]); - // } - // } + for (size_t i = 0; i < 8; i++) { + int instruction = start + i; + std::string patchName = "ironKnuckleFireTexWithSizeFix_" + std::to_string(instruction); + + if (i == 0) { + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, gsSPNoOp()); + } else { + ResourceMgr_PatchGfxByName(dlist, patchName.c_str(), instruction, + ironKnuckleFireTexWithFormatFixGfx[i - 1]); + } + } + } } } void ApplyAuthenticGfxPatches() { + PatchArrowTipTexture(); PatchDekuStickTextureOverflow(); PatchFreezardTextureOverflow(); PatchIronKnuckleTextureOverflow(); @@ -240,7 +337,8 @@ void PatchMirroredSoldOutGI() { void PatchMirroredSunSongEtching() { // Only using these strings for graphics patching lookup, we don't need aligned assets here static const char gRoyalGraveBackRoomDL[] = "__OTR__scenes/shared/hakaana_ouke_scene/hakaana_ouke_room_2DL_005040"; - static const char gRoyalGraveBackRoomSongVtx[] = "__OTR__scenes/shared/hakaana_ouke_scene/hakaana_ouke_room_2Vtx_004F80"; + static const char gRoyalGraveBackRoomSongVtx[] = + "__OTR__scenes/shared/hakaana_ouke_scene/hakaana_ouke_room_2Vtx_004F80"; static Vtx* mirroredSunSongVtx; @@ -248,7 +346,7 @@ void PatchMirroredSunSongEtching() { // Only need to patch over the two SetTile commands to get the MIRROR effect Gfx mirroredSunSongTex[] = { gsDPLoadTextureBlock("", G_IM_FMT_IA, G_IM_SIZ_8b, 128, 32, 0, G_TX_MIRROR | G_TX_WRAP, - G_TX_NOMIRROR | G_TX_CLAMP, 7, 5, G_TX_NOLOD, G_TX_NOLOD) + G_TX_NOMIRROR | G_TX_CLAMP, 7, 5, G_TX_NOLOD, G_TX_NOLOD), }; if (CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 0)) { @@ -266,7 +364,8 @@ void PatchMirroredSunSongEtching() { ResourceMgr_PatchGfxByName(gRoyalGraveBackRoomDL, "RoyalGraveSunSongTexture_1", 13, mirroredSunSongTex[1]); ResourceMgr_PatchGfxByName(gRoyalGraveBackRoomDL, "RoyalGraveSunSongTexture_2", 17, mirroredSunSongTex[5]); - ResourceMgr_PatchGfxByName(gRoyalGraveBackRoomDL, "RoyalGraveSunSongTextureCords_1", 24, gsSPVertex(mirroredSunSongVtx, 4, 0)); + ResourceMgr_PatchGfxByName(gRoyalGraveBackRoomDL, "RoyalGraveSunSongTextureCords_1", 24, + gsSPVertex(mirroredSunSongVtx, 4, 0)); // noop as the original vertex command is 128 bit wide ResourceMgr_PatchGfxByName(gRoyalGraveBackRoomDL, "RoyalGraveSunSongTextureCords_2", 25, gsSPNoOp()); } else { diff --git a/soh/soh/Enhancements/cosmetics/cosmeticsTypes.h b/soh/soh/Enhancements/cosmetics/cosmeticsTypes.h index 7fc454117..fec112c42 100644 --- a/soh/soh/Enhancements/cosmetics/cosmeticsTypes.h +++ b/soh/soh/Enhancements/cosmetics/cosmeticsTypes.h @@ -1,6 +1,6 @@ typedef enum { COLORSCHEME_N64, - COLORSCHEME_GAMECUBE + COLORSCHEME_GAMECUBE, } DefaultColorScheme; typedef enum { @@ -9,11 +9,11 @@ typedef enum { ENEMYHEALTH_ANCHOR_BOTTOM, } EnemyHealthBarAnchorType; -typedef enum { - ORIGINAL_LOCATION, - ANCHOR_LEFT, - ANCHOR_RIGHT, - ANCHOR_NONE, - HIDDEN, - ANCHOR_TO_LIFE_METER +typedef enum { + ORIGINAL_LOCATION, + ANCHOR_LEFT, + ANCHOR_RIGHT, + ANCHOR_NONE, + HIDDEN, + ANCHOR_TO_LIFE_METER, } PosType; diff --git a/soh/soh/Enhancements/custom-message/CustomMessageManager.cpp b/soh/soh/Enhancements/custom-message/CustomMessageManager.cpp index 4d4d27b3f..d4c478657 100644 --- a/soh/soh/Enhancements/custom-message/CustomMessageManager.cpp +++ b/soh/soh/Enhancements/custom-message/CustomMessageManager.cpp @@ -16,35 +16,24 @@ static const std::unordered_map textBoxSpecialCharacters = { { "è", 0x95 }, { "é", 0x96 }, { "ê", 0x97 }, { "ë", 0x98 }, { "ï", 0x99 }, { "ô", 0x9A }, { "ö", 0x9B }, { "ù", 0x9C }, { "û", 0x9D }, { "ü", 0x9E } }; -static const std::unordered_map percentColors = { { "w", QM_WHITE }, { "r", QM_RED }, { "g", QM_GREEN }, - { "b", QM_BLUE }, { "c", QM_LBLUE }, { "p", QM_PINK }, - { "y", QM_YELLOW }, { "B", QM_BLACK } }; +static const std::unordered_map percentColors = { + { "w", QM_WHITE }, { "r", QM_RED }, { "g", QM_GREEN }, { "b", QM_BLUE }, + { "c", QM_LBLUE }, { "p", QM_PINK }, { "y", QM_YELLOW }, { "B", QM_BLACK }, +}; -static const std::unordered_map colorToPercent = { { QM_WHITE, "%w" }, { QM_RED, "%r"}, { QM_GREEN, "%g" }, - { QM_BLUE, "%b" }, { QM_LBLUE, "%c"}, { QM_PINK, "%p" }, - { QM_YELLOW, "%y" }, { QM_BLACK, "%B" } }; +static const std::unordered_map colorToPercent = { + { QM_WHITE, "%w" }, { QM_RED, "%r" }, { QM_GREEN, "%g" }, { QM_BLUE, "%b" }, + { QM_LBLUE, "%c" }, { QM_PINK, "%p" }, { QM_YELLOW, "%y" }, { QM_BLACK, "%B" }, +}; static const std::unordered_map altarIcons = { - { "0", ITEM_KOKIRI_EMERALD }, - { "1", ITEM_GORON_RUBY }, - { "2", ITEM_ZORA_SAPPHIRE }, - { "8", ITEM_MEDALLION_LIGHT }, - { "3", ITEM_MEDALLION_FOREST }, - { "4", ITEM_MEDALLION_FIRE }, - { "5", ITEM_MEDALLION_WATER }, - { "6", ITEM_MEDALLION_SPIRIT }, - { "7", ITEM_MEDALLION_SHADOW }, - { "l", ITEM_ARROW_LIGHT }, - { "b", ITEM_KEY_BOSS }, - { "o", ITEM_SWORD_MASTER }, - { "c", ITEM_OCARINA_FAIRY }, - { "i", ITEM_OCARINA_TIME }, - { "L", ITEM_BOW_ARROW_LIGHT }, - { "k", ITEM_TUNIC_KOKIRI }, - { "m", ITEM_DUNGEON_MAP }, - { "C", ITEM_COMPASS }, - { "s", ITEM_SKULL_TOKEN }, - { "g", ITEM_MASK_GORON } + { "0", ITEM_KOKIRI_EMERALD }, { "1", ITEM_GORON_RUBY }, { "2", ITEM_ZORA_SAPPHIRE }, + { "8", ITEM_MEDALLION_LIGHT }, { "3", ITEM_MEDALLION_FOREST }, { "4", ITEM_MEDALLION_FIRE }, + { "5", ITEM_MEDALLION_WATER }, { "6", ITEM_MEDALLION_SPIRIT }, { "7", ITEM_MEDALLION_SHADOW }, + { "l", ITEM_ARROW_LIGHT }, { "b", ITEM_KEY_BOSS }, { "o", ITEM_SWORD_MASTER }, + { "c", ITEM_OCARINA_FAIRY }, { "i", ITEM_OCARINA_TIME }, { "L", ITEM_BOW_ARROW_LIGHT }, + { "k", ITEM_TUNIC_KOKIRI }, { "m", ITEM_DUNGEON_MAP }, { "C", ITEM_COMPASS }, + { "s", ITEM_SKULL_TOKEN }, { "g", ITEM_MASK_GORON }, }; static std::map pixelWidthTable = { @@ -72,19 +61,20 @@ static std::map pixelWidthTable = { { "í", 5 }, { "î", 5 }, { "ï", 5 }, { "ð", 7 }, { "ñ", 7 }, { "ò", 7 }, { "ó", 7 }, { "ô", 7 }, { "õ", 7 }, { "ö", 7 }, { "÷", 11 }, { "ø", 9 }, { "ù", 7 }, { "ú", 7 }, { "û", 7 }, { "ü", 7 }, { "ý", 8 }, { "þ", 8 }, { "ÿ", 8 }, { "Œ", 11 }, { "œ", 11 }, { "„", 5 }, { "”", 5 }, { "€", 10 }, - { "Ÿ", 10 }, { "~", 8 } + { "Ÿ", 10 }, { "~", 8 }, }; CustomMessage::CustomMessage(std::string english_, std::string german_, std::string french_, TextBoxType type_, TextBoxPosition position_) - : type(type_), position(position_){ + : type(type_), position(position_) { messages[LANGUAGE_ENG] = std::move(english_); messages[LANGUAGE_GER] = std::move(german_); messages[LANGUAGE_FRA] = std::move(french_); } -CustomMessage::CustomMessage(std::string english_, std::string german_, std::string french_, std::vector colors_, - std::vector capital_, TextBoxType type_, TextBoxPosition position_) { +CustomMessage::CustomMessage(std::string english_, std::string german_, std::string french_, + std::vector colors_, std::vector capital_, TextBoxType type_, + TextBoxPosition position_) { messages[LANGUAGE_ENG] = std::move(english_); messages[LANGUAGE_GER] = std::move(german_); messages[LANGUAGE_FRA] = std::move(french_); @@ -99,7 +89,8 @@ CustomMessage::CustomMessage(std::string english_, TextBoxType type_, TextBoxPos messages[LANGUAGE_ENG] = std::move(english_); } -CustomMessage::CustomMessage(std::string english_, std::vector colors_, std::vector capital_, TextBoxType type_, TextBoxPosition position_){ +CustomMessage::CustomMessage(std::string english_, std::vector colors_, std::vector capital_, + TextBoxType type_, TextBoxPosition position_) { messages[LANGUAGE_ENG] = std::move(english_); colors = colors_; capital = capital_; @@ -107,13 +98,50 @@ CustomMessage::CustomMessage(std::string english_, std::vector colo position = position_; } -CustomMessage::CustomMessage(Text text, TextBoxType type_,TextBoxPosition position_) +CustomMessage::CustomMessage(Text text, TextBoxType type_, TextBoxPosition position_) : type(type_), position(position_) { messages[LANGUAGE_ENG] = text.GetEnglish(); messages[LANGUAGE_GER] = text.GetGerman(); messages[LANGUAGE_FRA] = text.GetFrench(); } +typedef struct { + u16 textId; + u8 typePos; + const char* segment; + u32 msgSize; +} MessageTableEntry; + +extern "C" MessageTableEntry* sNesMessageEntryTablePtr; +extern "C" MessageTableEntry* sGerMessageEntryTablePtr; +extern "C" MessageTableEntry* sFraMessageEntryTablePtr; + +CustomMessage CustomMessage::LoadVanillaMessageTableEntry(uint16_t textId) { + const char* foundSeg; + const char* nextSeg; + MessageTableEntry* msgEntry = sNesMessageEntryTablePtr; + u16 bufferId = textId; + CustomMessage msg; + if (gSaveContext.language == LANGUAGE_GER) { + msgEntry = sGerMessageEntryTablePtr; + } else if (gSaveContext.language == LANGUAGE_FRA) { + msgEntry = sFraMessageEntryTablePtr; + } + while (msgEntry->textId != 0xFFFF) { + if (msgEntry->textId == bufferId) { + TextBoxPosition position = static_cast(msgEntry->typePos & 0xF); + TextBoxType type = static_cast(msgEntry->typePos >> 4); + // uint8_t icon = msgEntry->segment[1]; + std::string message = std::string(msgEntry->segment, msgEntry->msgSize); + msg = CustomMessage(message, type, position); + // msg.Format(static_cast(icon)); + return msg; + } + msgEntry++; + } + return CustomMessage(); +} + const std::string CustomMessage::GetEnglish(MessageFormat format) const { return GetForLanguage(LANGUAGE_ENG, format); } @@ -127,7 +155,7 @@ const std::string CustomMessage::GetFrench(MessageFormat format) const { } const std::string CustomMessage::GetForCurrentLanguage(MessageFormat format) const { - return GetForLanguage(gSaveContext.language, format); + return GetForLanguage((gSaveContext.language == LANGUAGE_JPN) ? LANGUAGE_ENG : gSaveContext.language, format); } const std::string CustomMessage::GetForLanguage(uint8_t language, MessageFormat format) const { @@ -136,22 +164,22 @@ const std::string CustomMessage::GetForLanguage(uint8_t language, MessageFormat return output; } -const std::vector CustomMessage::GetAllMessages(MessageFormat format) const{ +const std::vector CustomMessage::GetAllMessages(MessageFormat format) const { std::vector output = messages; - for (auto str : output){ + for (auto str : output) { ProcessMessageFormat(str, format); } return output; } void CustomMessage::ProcessMessageFormat(std::string& str, MessageFormat format) const { - if (format == MF_FORMATTED){ + if (format == MF_FORMATTED) { FormatString(str); - } else if (format == MF_CLEAN){ + } else if (format == MF_CLEAN) { CleanString(str); - } else if (format == MF_AUTO_FORMAT){ + } else if (format == MF_AUTO_FORMAT) { AutoFormatString(str); - }else if (format == MF_ENCODE){ + } else if (format == MF_ENCODE) { EncodeColors(str); } } @@ -160,14 +188,14 @@ const std::vector& CustomMessage::GetCapital() const { return capital; } -void CustomMessage::SetCapital(std::vector capital_){ +void CustomMessage::SetCapital(std::vector capital_) { capital = capital_; } const std::vector& CustomMessage::GetColors() const { return colors; } -void CustomMessage::SetColors(std::vector colors_){ +void CustomMessage::SetColors(std::vector colors_) { colors = colors_; } @@ -175,7 +203,7 @@ const TextBoxType& CustomMessage::GetTextBoxType() const { return type; } -void CustomMessage::SetTextBoxType(TextBoxType boxType){ +void CustomMessage::SetTextBoxType(TextBoxType boxType) { type = boxType; } @@ -186,19 +214,19 @@ const TextBoxPosition& CustomMessage::GetTextBoxPosition() const { CustomMessage CustomMessage::operator+(const CustomMessage& right) const { std::vector newColors = colors; std::vector rColors = right.GetColors(); - for (auto color: rColors){ + for (auto color : rColors) { newColors.push_back(color); } std::vector newCapital = capital; newCapital.insert(newCapital.end(), right.GetCapital().begin(), right.GetCapital().end()); return CustomMessage(messages[LANGUAGE_ENG] + right.GetEnglish(MF_RAW), messages[LANGUAGE_GER] + right.GetGerman(MF_RAW), - messages[LANGUAGE_FRA] + right.GetFrench(MF_RAW), - newColors, newCapital, type, position); + messages[LANGUAGE_FRA] + right.GetFrench(MF_RAW), newColors, newCapital, type, position); } CustomMessage CustomMessage::operator+(const std::string& right) const { - return CustomMessage(messages[LANGUAGE_ENG] + right, messages[LANGUAGE_GER] + right, messages[LANGUAGE_FRA] + right); + return CustomMessage(messages[LANGUAGE_ENG] + right, messages[LANGUAGE_GER] + right, + messages[LANGUAGE_FRA] + right); } void CustomMessage::operator+=(const CustomMessage& right) { @@ -220,8 +248,8 @@ bool CustomMessage::operator==(const CustomMessage& operand) const { } bool CustomMessage::operator==(const std::string& operand) const { - for (auto str: messages){ - if (str == operand){ + for (auto str : messages) { + if (str == operand) { return true; } } @@ -243,7 +271,7 @@ void CustomMessage::Replace(std::string&& oldStr, std::string&& newStr) { } void CustomMessage::Replace(std::string&& oldStr, CustomMessage newMessage) { - for (uint8_t language = 0; language < LANGUAGE_MAX; language++) { + for (uint8_t language = 0; language < LANGUAGE_MAX - 1; language++) { size_t position = messages[language].find(oldStr); while (position != std::string::npos) { messages[language].replace(position, oldStr.length(), newMessage.messages[language]); @@ -253,7 +281,7 @@ void CustomMessage::Replace(std::string&& oldStr, CustomMessage newMessage) { } void CustomMessage::Format(ItemID iid) { - for (std::string &str : messages) { + for (std::string& str : messages) { str.insert(0, ITEM_OBTAINED(iid)); size_t start_pos = 0; std::replace(str.begin(), str.end(), '&', NEWLINE()[0]); @@ -303,7 +331,7 @@ void CustomMessage::FormatString(std::string& str) const { str += MESSAGE_END(); } -void DeleteControlCode(std::string& str, std::string code){ +void DeleteControlCode(std::string& str, std::string code) { size_t start_pos = 0; while ((start_pos = str.find(code, start_pos)) != std::string::npos) { str.replace(start_pos, code.length(), ""); @@ -324,56 +352,57 @@ void CustomMessage::CleanString(std::string& str) const { } static size_t NextLineLength(const std::string* textStr, const size_t lastNewline, bool hasIcon = false) { - const size_t maxLinePixelWidth = hasIcon ? 200 : 216; + const size_t maxLinePixelWidth = hasIcon ? 200 : 216; - size_t totalPixelWidth = 0; - size_t currentPos = lastNewline; + size_t totalPixelWidth = 0; + size_t currentPos = lastNewline; - // Looping through the string from the lastNewline until the total - // width of counted characters exceeds the maximum pixels in a line. - size_t nextPosJump = 0; - while (totalPixelWidth < maxLinePixelWidth && currentPos < textStr->length()) { - // Skip over control codes - if (textStr->at(currentPos) == '%') { - nextPosJump = 2; - } else if (textStr->at(currentPos) == '$') { - nextPosJump = 2; - } else if (textStr->at(currentPos) == '@') { - nextPosJump = 1; - // Assume worst case for player name 12 * 8 (widest character * longest name length) - totalPixelWidth += 96; - } else if (textStr->at(currentPos) == '\x05') { - // Skip colour control characters. - nextPosJump = 2; - } else if (textStr->at(currentPos) == '\x1E') { - //For the high score char, we have to take the next Char, then use that to get a worst case scenario. - if (textStr->at(currentPos+1) == '\x01'){ - totalPixelWidth += 28; - } - nextPosJump = 2; - } else { - // Some characters only one byte while others are two bytes - // So check both possibilities when checking for a character - if (pixelWidthTable.count(textStr->substr(currentPos, 1))) { - totalPixelWidth += pixelWidthTable[textStr->substr(currentPos, 1)]; - nextPosJump = 1; - } else if (pixelWidthTable.count(textStr->substr(currentPos, 2))) { - totalPixelWidth += pixelWidthTable[textStr->substr(currentPos, 2)]; - nextPosJump = 2; - } else { - SPDLOG_DEBUG("Table does not contain " + textStr->substr(currentPos, 1) + "/" + textStr->substr(currentPos, 2)); - SPDLOG_DEBUG("Full string: " + *textStr); - nextPosJump = 1; - } + // Looping through the string from the lastNewline until the total + // width of counted characters exceeds the maximum pixels in a line. + size_t nextPosJump = 0; + while (totalPixelWidth < maxLinePixelWidth && currentPos < textStr->length()) { + // Skip over control codes + if (textStr->at(currentPos) == '%') { + nextPosJump = 2; + } else if (textStr->at(currentPos) == '$') { + nextPosJump = 2; + } else if (textStr->at(currentPos) == '@') { + nextPosJump = 1; + // Assume worst case for player name 12 * 8 (widest character * longest name length) + totalPixelWidth += 96; + } else if (textStr->at(currentPos) == '\x05') { + // Skip colour control characters. + nextPosJump = 2; + } else if (textStr->at(currentPos) == '\x1E') { + // For the high score char, we have to take the next Char, then use that to get a worst case scenario. + if (textStr->at(currentPos + 1) == '\x01') { + totalPixelWidth += 28; + } + nextPosJump = 2; + } else { + // Some characters only one byte while others are two bytes + // So check both possibilities when checking for a character + if (pixelWidthTable.count(textStr->substr(currentPos, 1))) { + totalPixelWidth += pixelWidthTable[textStr->substr(currentPos, 1)]; + nextPosJump = 1; + } else if (pixelWidthTable.count(textStr->substr(currentPos, 2))) { + totalPixelWidth += pixelWidthTable[textStr->substr(currentPos, 2)]; + nextPosJump = 2; + } else { + SPDLOG_DEBUG("Table does not contain " + textStr->substr(currentPos, 1) + "/" + + textStr->substr(currentPos, 2)); + SPDLOG_DEBUG("Full string: " + *textStr); + nextPosJump = 1; + } + } + currentPos += nextPosJump; + } + // return the total number of characters we looped through + if (totalPixelWidth > maxLinePixelWidth && textStr->at(currentPos - nextPosJump) != ' ') { + return currentPos - lastNewline - nextPosJump; + } else { + return currentPos - lastNewline; } - currentPos += nextPosJump; - } - // return the total number of characters we looped through - if (totalPixelWidth > maxLinePixelWidth && textStr->at(currentPos - nextPosJump) != ' ') { - return currentPos - lastNewline - nextPosJump; - } else { - return currentPos - lastNewline; - } } size_t CustomMessage::FindNEWLINE(std::string& str, size_t lastNewline) const { @@ -450,19 +479,19 @@ void CustomMessage::AutoFormatString(std::string& str) const { const size_t lastSpace = str.rfind(' ', lastNewline + lineLength); size_t waitForInput = str.find(WAIT_FOR_INPUT()[0], lastNewline); size_t newLine = FindNEWLINE(str, lastNewline); - if (carrot < waitForInput){ + if (carrot < waitForInput) { waitForInput = carrot; } - if (ampersand < newLine){ + if (ampersand < newLine) { newLine = ampersand; } - if (lineCount != 3 && yesNo < lastNewline + lineLength && yesNo < waitForInput && yesNo < newLine){ - if (lineCount >= 4){ + if (lineCount != 3 && yesNo < lastNewline + lineLength && yesNo < waitForInput && yesNo < newLine) { + if (lineCount >= 4) { str.replace(yesNo, 1, "^&&\x1B"); lineCount = 3; lastNewline = yesNo + 3; } else { - while(lineCount < 3){ + while (lineCount < 3) { str.replace(yesNo, 1, "&\x1B"); yesNo++; lineCount++; @@ -470,7 +499,7 @@ void CustomMessage::AutoFormatString(std::string& str) const { lastNewline = yesNo; } } else { - if (lineCount < 4){ + if (lineCount < 4) { // replace '&' first if it's within the newline range if (newLine < lastNewline + lineLength) { lastNewline = newLine + 1; @@ -488,12 +517,12 @@ void CustomMessage::AutoFormatString(std::string& str) const { lastNewline = lastSpace + 1; } lineCount += 1; - } else { + } else { const size_t lastColor = str.rfind("\x05"s, lastNewline + lineLength); std::string colorText = ""; - //check if we are on a non default colour, as ^ resets it, and readd if needed - if (lastColor != std::string::npos && str[lastColor+1] != 0){ - colorText = "\x05"s + str[lastColor+1]; + // check if we are on a non default colour, as ^ resets it, and readd if needed + if (lastColor != std::string::npos && str[lastColor + 1] != 0) { + colorText = "\x05"s + str[lastColor + 1]; } // replace '&' first if it's within the newline range if (ampersand < lastNewline + lineLength) { @@ -526,7 +555,7 @@ void CustomMessage::AutoFormatString(std::string& str) const { str += MESSAGE_END(); } -void CustomMessage::InsertNumber(uint8_t num){ +void CustomMessage::InsertNumber(uint8_t num) { for (std::string& str : messages) { size_t firstBar = str.find('|'); if (firstBar != std::string::npos) { @@ -543,12 +572,11 @@ void CustomMessage::InsertNumber(uint8_t num){ } } } - //remove the remaining bar + // remove the remaining bar this->Replace("|", ""); Replace("[[d]]", std::to_string(num)); } - void CustomMessage::Capitalize() { for (std::string str : messages) { (str)[0] = std::toupper((str)[0]); @@ -587,7 +615,7 @@ const char* Interface_ReplaceSpecialCharacters(char text[]) { } void CustomMessage::EncodeColors(std::string& str) const { - for (std::string color: colors) { + for (std::string color : colors) { if (const size_t firstHashtag = str.find('#'); firstHashtag != std::string::npos) { str.replace(firstHashtag, 1, colorToPercent.at(color)); if (const size_t secondHashtag = str.find('#', firstHashtag + 1); secondHashtag != std::string::npos) { @@ -626,13 +654,13 @@ void CustomMessage::ReplaceAltarIcons(std::string& str) const { } } -void CustomMessage::InsertNames(std::vector toInsert){ - for(uint8_t a = 0; a < toInsert.size(); a++){ +void CustomMessage::InsertNames(std::vector toInsert) { + for (uint8_t a = 0; a < toInsert.size(); a++) { CustomMessage temp = toInsert[a]; - if ((capital.size() > a) && (capital[a] = true)){ + if ((capital.size() > a) && (capital[a] = true)) { temp.Capitalize(); - } - Replace("[[" + std::to_string(a+1) + "]]", temp); + } + Replace("[[" + std::to_string(a + 1) + "]]", temp); } } @@ -697,16 +725,16 @@ CustomMessage CustomMessageManager::RetrieveMessage(std::string tableID, uint16_ } CustomMessage message = foundMessage->second; - if (format == MF_FORMATTED){ + if (format == MF_FORMATTED) { message.Format(); - } else if (format == MF_AUTO_FORMAT){ + } else if (format == MF_AUTO_FORMAT) { message.AutoFormat(); - } else if (format == MF_CLEAN){ + } else if (format == MF_CLEAN) { message.Clean(); - } else if (format == MF_ENCODE){ + } else if (format == MF_ENCODE) { message.Encode(); } - + return message; } @@ -720,7 +748,7 @@ bool CustomMessageManager::ClearMessageTable(std::string tableID) { return true; } -bool CustomMessageManager::AddCustomMessageTable(std::string tableID) { +bool CustomMessageManager::AddCustomMessageTable(std::string tableID) { CustomMessageTable newMessageTable; return messageTables.emplace(tableID, newMessageTable).second; } diff --git a/soh/soh/Enhancements/custom-message/CustomMessageManager.h b/soh/soh/Enhancements/custom-message/CustomMessageManager.h index e8a969064..71ae423b5 100644 --- a/soh/soh/Enhancements/custom-message/CustomMessageManager.h +++ b/soh/soh/Enhancements/custom-message/CustomMessageManager.h @@ -20,7 +20,7 @@ #define QM_YELLOW "\x46" #define QM_BLACK "\x47" -#define HS_HORSE_ARCHERY "\x00"s //HS_HBA is an enum already +#define HS_HORSE_ARCHERY "\x00"s // HS_HBA is an enum already typedef enum { MF_FORMATTED, @@ -41,19 +41,24 @@ class CustomMessage { CustomMessage() = default; CustomMessage(std::string english_, std::string german_, std::string french_, TextBoxType type_ = TEXTBOX_TYPE_BLACK, TextBoxPosition position_ = TEXTBOX_POS_BOTTOM); - CustomMessage(std::string english_, std::string german_, std::string french_, std::vector colors_, std::vector capital_ = {}, - TextBoxType type_ = TEXTBOX_TYPE_BLACK, TextBoxPosition position_ = TEXTBOX_POS_BOTTOM); - CustomMessage(std::string english_, TextBoxType type_ = TEXTBOX_TYPE_BLACK, TextBoxPosition position_ = TEXTBOX_POS_BOTTOM); - CustomMessage(std::string english_, std::vector colors_, std::vector capital_ = {}, TextBoxType type_ = TEXTBOX_TYPE_BLACK, TextBoxPosition position_ = TEXTBOX_POS_BOTTOM); + CustomMessage(std::string english_, std::string german_, std::string french_, std::vector colors_, + std::vector capital_ = {}, TextBoxType type_ = TEXTBOX_TYPE_BLACK, + TextBoxPosition position_ = TEXTBOX_POS_BOTTOM); + CustomMessage(std::string english_, TextBoxType type_ = TEXTBOX_TYPE_BLACK, + TextBoxPosition position_ = TEXTBOX_POS_BOTTOM); + CustomMessage(std::string english_, std::vector colors_, std::vector capital_ = {}, + TextBoxType type_ = TEXTBOX_TYPE_BLACK, TextBoxPosition position_ = TEXTBOX_POS_BOTTOM); CustomMessage(Text text, TextBoxType type_ = TEXTBOX_TYPE_BLACK, TextBoxPosition position_ = TEXTBOX_POS_BOTTOM); - static std::string MESSAGE_END() ; - static std::string ITEM_OBTAINED(uint8_t x) ; - static std::string NEWLINE() ; - static std::string COLOR(std::string x) ; - static std::string POINTS(std::string x) ;//HIGH_SCORE is also a macro - static std::string WAIT_FOR_INPUT() ; - static std::string PLAYER_NAME() ; + static CustomMessage LoadVanillaMessageTableEntry(uint16_t textId); + + static std::string MESSAGE_END(); + static std::string ITEM_OBTAINED(uint8_t x); + static std::string NEWLINE(); + static std::string COLOR(std::string x); + static std::string POINTS(std::string x); // HIGH_SCORE is also a macro + static std::string WAIT_FOR_INPUT(); + static std::string PLAYER_NAME(); const std::string GetEnglish(MessageFormat format = MF_FORMATTED) const; const std::string GetFrench(MessageFormat format = MF_FORMATTED) const; @@ -155,13 +160,13 @@ class CustomMessage { void Format(); /** - * @brief formats the message specifically to fit in OoT's + * @brief formats the message specifically to fit in OoT's * textboxes, and use it's formatting. */ void AutoFormat(); /** - * @brief Removes all OoT formatting from the message, + * @brief Removes all OoT formatting from the message, * making it a good form for writing into spoiler logs. */ void Clean(); @@ -177,15 +182,15 @@ class CustomMessage { * . i.e. special characters, colors, newlines, wait for input, etc. */ void FormatString(std::string& str) const; - + /** * @brief finds NEWLINEs in a string, while filtering * /x01's that are used as opperands */ size_t FindNEWLINE(std::string& str, size_t lastNewline) const; - + /** - * @brief formats the string specifically to fit in OoT's + * @brief formats the string specifically to fit in OoT's * textboxes, and use it's formatting. * RANDOTODO whoever knows exactly what this does check my adaption */ @@ -198,7 +203,7 @@ class CustomMessage { void CleanString(std::string& str) const; private: - std::vector messages = {"","",""}; + std::vector messages = { "", "", "" }; TextBoxType type = TEXTBOX_TYPE_BLACK; TextBoxPosition position = TEXTBOX_POS_BOTTOM; std::vector colors = {}; diff --git a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h index 4a039987e..e7c559857 100644 --- a/soh/soh/Enhancements/custom-message/CustomMessageTypes.h +++ b/soh/soh/Enhancements/custom-message/CustomMessageTypes.h @@ -11,7 +11,7 @@ typedef enum { TEXT_SKULLTULA_PEOPLE_STARTING_TO_WEAKEN = 0x0024, TEXT_SKULLTULA_PEOPLE_WE_LOOK_LIKE_THIS = 0x0025, TEXT_SKULLTULA_PEOPLE_GS_TUTORIAL = 0x0026, - TEXT_SKULLTULA_PEOPLE_MAKE_YOU_VERY_RICH = 0x0027, + TEXT_SKULLTULA_PEOPLE_MAKE_YOU_VERY_RICH = 0x0027, TEXT_SKULLTULA_PEOPLE_CURSE_HAS_BEEN_BROKEN = 0x0028, TEXT_SKULLTULA_PEOPLE_SAVING_MY_KIDS = 0x0029, TEXT_ITEM_KEY_SMALL = 0x0060, @@ -96,7 +96,7 @@ typedef enum { TEXT_MALON_HOW_IS_EPONA_DOING = 0x2001, TEXT_MALON_EPONA_LOOKS_GREAT = 0x2002, TEXT_MALON_OBSTICLE_COURSE = 0x2003, - TEXT_MALON_EVERYONE_TURNING_EVIL = 0x204C, + TEXT_MALON_EVERYONE_TURNING_EVIL = 0x204C, TEXT_MALON_I_SING_THIS_SONG = 0x2050, TEXT_MALON_EVERYONE_LIKED_SONG = 0x2051, TEXT_MALON_EPONA_LIKED_SONG = 0x2052, @@ -211,6 +211,6 @@ typedef struct { { giid, iid, message, message, message } #define GIMESSAGE_NO_GERMAN(giid, iid, english, french) \ - { giid, iid, english, english, french } + { giid, iid, english, english, french } #endif diff --git a/soh/soh/Enhancements/debugconsole.cpp b/soh/soh/Enhancements/debugconsole.cpp index 33eed43f9..db5cc824f 100644 --- a/soh/soh/Enhancements/debugconsole.cpp +++ b/soh/soh/Enhancements/debugconsole.cpp @@ -36,10 +36,17 @@ extern PlayState* gPlayState; #define CMD_REGISTER Ship::Context::GetInstance()->GetConsole()->AddCommand // TODO: Commands should be using the output passed in. -#define ERROR_MESSAGE std::reinterpret_pointer_cast(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console"))->SendErrorMessage -#define INFO_MESSAGE std::reinterpret_pointer_cast(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console"))->SendInfoMessage +#define ERROR_MESSAGE \ + std::reinterpret_pointer_cast( \ + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console")) \ + ->SendErrorMessage +#define INFO_MESSAGE \ + std::reinterpret_pointer_cast( \ + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console")) \ + ->SendInfoMessage -static bool ActorSpawnHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool ActorSpawnHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if ((args.size() != 9) && (args.size() != 3) && (args.size() != 6)) { ERROR_MESSAGE("Not enough arguments passed to actorspawn"); return 1; @@ -100,7 +107,8 @@ static bool ActorSpawnHandler(std::shared_ptr Console, const std: return 0; } -static bool KillPlayerHandler(std::shared_ptr Console, const std::vector&, std::string* output) { +static bool KillPlayerHandler(std::shared_ptr Console, const std::vector&, + std::string* output) { GameInteractionEffectBase* effect = new GameInteractionEffect::SetPlayerHealth(); dynamic_cast(effect)->parameters[0] = 0; GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect); @@ -113,7 +121,8 @@ static bool KillPlayerHandler(std::shared_ptr Console, const std: } } -static bool SetPlayerHealthHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool SetPlayerHealthHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -144,7 +153,8 @@ static bool SetPlayerHealthHandler(std::shared_ptr Console, const } } -static bool LoadSceneHandler(std::shared_ptr Console, const std::vector&, std::string* output) { +static bool LoadSceneHandler(std::shared_ptr Console, const std::vector&, + std::string* output) { gSaveContext.respawnFlag = 0; gSaveContext.seqId = 0xFF; gSaveContext.gameMode = GAMEMODE_NORMAL; @@ -152,7 +162,8 @@ static bool LoadSceneHandler(std::shared_ptr Console, const std:: return 0; } -static bool RupeeHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool RupeeHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { return 1; } @@ -160,8 +171,7 @@ static bool RupeeHandler(std::shared_ptr Console, const std::vect int rupeeAmount; try { rupeeAmount = std::stoi(args[1]); - } - catch (std::invalid_argument const& ex) { + } catch (std::invalid_argument const& ex) { ERROR_MESSAGE("[SOH] Rupee count must be an integer."); return 1; } @@ -171,13 +181,14 @@ static bool RupeeHandler(std::shared_ptr Console, const std::vect return 1; } - gSaveContext.rupees = rupeeAmount; + gSaveContext.rupees = rupeeAmount; INFO_MESSAGE("Set rupee count to %u", rupeeAmount); return 0; } -static bool SetPosHandler(std::shared_ptr Console, const std::vector args, std::string* output) { +static bool SetPosHandler(std::shared_ptr Console, const std::vector args, + std::string* output) { if (gPlayState == nullptr) { ERROR_MESSAGE("PlayState == nullptr"); return 1; @@ -186,9 +197,8 @@ static bool SetPosHandler(std::shared_ptr Console, const std::vec Player* player = GET_PLAYER(gPlayState); if (args.size() == 1) { - INFO_MESSAGE("Player position is [ %.2f, %.2f, %.2f ]", player->actor.world.pos.x, - player->actor.world.pos.y, - player->actor.world.pos.z); + INFO_MESSAGE("Player position is [ %.2f, %.2f, %.2f ]", player->actor.world.pos.x, player->actor.world.pos.y, + player->actor.world.pos.z); return 0; } if (args.size() < 4) @@ -198,9 +208,8 @@ static bool SetPosHandler(std::shared_ptr Console, const std::vec player->actor.world.pos.y = std::stof(args[2]); player->actor.world.pos.z = std::stof(args[3]); - INFO_MESSAGE("Set player position to [ %.2f, %.2f, %.2f ]", player->actor.world.pos.x, - player->actor.world.pos.y, - player->actor.world.pos.z); + INFO_MESSAGE("Set player position to [ %.2f, %.2f, %.2f ]", player->actor.world.pos.x, player->actor.world.pos.y, + player->actor.world.pos.z); return 0; } @@ -215,14 +224,13 @@ static bool ResetHandler(std::shared_ptr Console, std::vector ammoItems{ - { "sticks", ITEM_STICK }, { "nuts", ITEM_NUT }, - { "bombs", ITEM_BOMB }, { "seeds", ITEM_SLINGSHOT }, - { "arrows", ITEM_BOW }, { "bombchus", ITEM_BOMBCHU }, - { "beans", ITEM_BEAN } +const static std::map ammoItems{ + { "sticks", ITEM_STICK }, { "nuts", ITEM_NUT }, { "bombs", ITEM_BOMB }, { "seeds", ITEM_SLINGSHOT }, + { "arrows", ITEM_BOW }, { "bombchus", ITEM_BOMBCHU }, { "beans", ITEM_BEAN }, }; -static bool AddAmmoHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool AddAmmoHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 3) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -243,7 +251,8 @@ static bool AddAmmoHandler(std::shared_ptr Console, const std::ve const auto& it = ammoItems.find(args[1]); if (it == ammoItems.end()) { - ERROR_MESSAGE("Invalid ammo type. Options are 'sticks', 'nuts', 'bombs', 'seeds', 'arrows', 'bombchus' and 'beans'"); + ERROR_MESSAGE( + "Invalid ammo type. Options are 'sticks', 'nuts', 'bombs', 'seeds', 'arrows', 'bombchus' and 'beans'"); return 1; } @@ -261,7 +270,8 @@ static bool AddAmmoHandler(std::shared_ptr Console, const std::ve } } -static bool TakeAmmoHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool TakeAmmoHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 3) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -302,13 +312,22 @@ static bool TakeAmmoHandler(std::shared_ptr Console, const std::v } const static std::map bottleItems{ - { "green_potion", ITEM_POTION_GREEN }, { "red_potion", ITEM_POTION_RED }, { "blue_potion", ITEM_POTION_BLUE }, - { "milk", ITEM_MILK }, { "half_milk", ITEM_MILK_HALF }, { "fairy", ITEM_FAIRY }, - { "bugs", ITEM_BUG }, { "fish", ITEM_FISH }, { "poe", ITEM_POE }, - { "big_poe", ITEM_BIG_POE }, { "blue_fire", ITEM_BLUE_FIRE }, { "rutos_letter", ITEM_LETTER_RUTO }, + { "green_potion", ITEM_POTION_GREEN }, + { "red_potion", ITEM_POTION_RED }, + { "blue_potion", ITEM_POTION_BLUE }, + { "milk", ITEM_MILK }, + { "half_milk", ITEM_MILK_HALF }, + { "fairy", ITEM_FAIRY }, + { "bugs", ITEM_BUG }, + { "fish", ITEM_FISH }, + { "poe", ITEM_POE }, + { "big_poe", ITEM_BIG_POE }, + { "blue_fire", ITEM_BLUE_FIRE }, + { "rutos_letter", ITEM_LETTER_RUTO }, }; -static bool BottleHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool BottleHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 3) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -329,7 +348,7 @@ static bool BottleHandler(std::shared_ptr Console, const std::vec const auto& it = bottleItems.find(args[1]); - if (it == bottleItems.end()) { + if (it == bottleItems.end()) { ERROR_MESSAGE("Invalid item passed"); return 1; } @@ -340,7 +359,8 @@ static bool BottleHandler(std::shared_ptr Console, const std::vec return 0; } -static bool BHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool BHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -350,7 +370,8 @@ static bool BHandler(std::shared_ptr Console, const std::vector Console, const std::vector& args, std::string* output) { +static bool ItemHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 3) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -361,7 +382,8 @@ static bool ItemHandler(std::shared_ptr Console, const std::vecto return 0; } -static bool GiveItemHandler(std::shared_ptr Console, const std::vector args, std::string* output) { +static bool GiveItemHandler(std::shared_ptr Console, const std::vector args, + std::string* output) { if (args.size() < 3) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -382,7 +404,8 @@ static bool GiveItemHandler(std::shared_ptr Console, const std::v return 0; } -static bool EntranceHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool EntranceHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -404,15 +427,16 @@ static bool EntranceHandler(std::shared_ptr Console, const std::v return 0; } -static bool VoidHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool VoidHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (gPlayState != nullptr) { - gSaveContext.respawn[RESPAWN_MODE_DOWN].tempSwchFlags = gPlayState->actorCtx.flags.tempSwch; - gSaveContext.respawn[RESPAWN_MODE_DOWN].tempCollectFlags = gPlayState->actorCtx.flags.tempCollect; - gSaveContext.respawnFlag = 1; - gPlayState->transitionTrigger = TRANS_TRIGGER_START; - gPlayState->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex; - gPlayState->transitionType = TRANS_TYPE_FADE_BLACK; - gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.respawn[RESPAWN_MODE_DOWN].tempSwchFlags = gPlayState->actorCtx.flags.tempSwch; + gSaveContext.respawn[RESPAWN_MODE_DOWN].tempCollectFlags = gPlayState->actorCtx.flags.tempCollect; + gSaveContext.respawnFlag = 1; + gPlayState->transitionTrigger = TRANS_TRIGGER_START; + gPlayState->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex; + gPlayState->transitionType = TRANS_TYPE_FADE_BLACK; + gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; } else { ERROR_MESSAGE("gPlayState == nullptr"); return 1; @@ -420,7 +444,8 @@ static bool VoidHandler(std::shared_ptr Console, const std::vecto return 0; } -static bool ReloadHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool ReloadHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (gPlayState != nullptr) { gPlayState->nextEntranceIndex = gSaveContext.entranceIndex; gPlayState->transitionTrigger = TRANS_TRIGGER_START; @@ -433,11 +458,10 @@ static bool ReloadHandler(std::shared_ptr Console, const std::vec return 0; } -const static std::map fw_options { - { "clear", 0}, {"warp", 1}, {"backup", 2} -}; +const static std::map fw_options{ { "clear", 0 }, { "warp", 1 }, { "backup", 2 } }; -static bool FWHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool FWHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -448,16 +472,16 @@ static bool FWHandler(std::shared_ptr Console, const std::vector< ERROR_MESSAGE("[SOH] Invalid option. Options are 'clear', 'warp', 'backup'"); return 1; } - + if (gPlayState != nullptr) { FaroresWindData clear = {}; - switch(it->second) { - case 0: //clear + switch (it->second) { + case 0: // clear gSaveContext.fw = clear; INFO_MESSAGE("[SOH] Farore's wind point cleared! Reload scene to take effect."); return 0; break; - case 1: //warp + case 1: // warp if (gSaveContext.respawn[RESPAWN_MODE_TOP].data > 0) { gPlayState->transitionTrigger = TRANS_TRIGGER_START; gPlayState->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex; @@ -468,7 +492,7 @@ static bool FWHandler(std::shared_ptr Console, const std::vector< } return 0; break; - case 2: //backup + case 2: // backup if (CVarGetInteger(CVAR_ENHANCEMENT("BetterFarore"), 0)) { gSaveContext.fw = gSaveContext.ship.backupFW; gSaveContext.fw.set = 1; @@ -480,16 +504,16 @@ static bool FWHandler(std::shared_ptr Console, const std::vector< } break; } - } - else { + } else { ERROR_MESSAGE("gPlayState == nullptr"); return 1; } - + return 0; } -static bool FileSelectHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool FileSelectHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (gGameState == nullptr) { ERROR_MESSAGE("gGameState == nullptr"); return 1; @@ -501,12 +525,14 @@ static bool FileSelectHandler(std::shared_ptr Console, const std: return 0; } -static bool QuitHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool QuitHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { Ship::Context::GetInstance()->GetWindow()->Close(); return 0; } -static bool SaveStateHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool SaveStateHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { unsigned int slot = OTRGlobals::Instance->gSaveStateMgr->GetCurrentSlot(); const SaveStateReturn rtn = OTRGlobals::Instance->gSaveStateMgr->AddRequest({ slot, RequestType::SAVE }); @@ -522,7 +548,8 @@ static bool SaveStateHandler(std::shared_ptr Console, const std:: } } -static bool LoadStateHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool LoadStateHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { unsigned int slot = OTRGlobals::Instance->gSaveStateMgr->GetCurrentSlot(); const SaveStateReturn rtn = OTRGlobals::Instance->gSaveStateMgr->AddRequest({ slot, RequestType::LOAD }); @@ -542,10 +569,10 @@ static bool LoadStateHandler(std::shared_ptr Console, const std:: default: return 1; } - } -static bool StateSlotSelectHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool StateSlotSelectHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -565,12 +592,12 @@ static bool StateSlotSelectHandler(std::shared_ptr Console, const } OTRGlobals::Instance->gSaveStateMgr->SetCurrentSlot(slot); - INFO_MESSAGE("[SOH] Slot %u selected", - OTRGlobals::Instance->gSaveStateMgr->GetCurrentSlot()); + INFO_MESSAGE("[SOH] Slot %u selected", OTRGlobals::Instance->gSaveStateMgr->GetCurrentSlot()); return 0; } -static bool InvisibleHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool InvisibleHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -585,19 +612,19 @@ static bool InvisibleHandler(std::shared_ptr Console, const std:: } RemovableGameInteractionEffect* effect = new GameInteractionEffect::InvisibleLink(); - GameInteractionEffectQueryResult result = + GameInteractionEffectQueryResult result = state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect); if (result == GameInteractionEffectQueryResult::Possible) { INFO_MESSAGE("[SOH] Invisible Link %s", state ? "enabled" : "disabled"); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not %s Invisible Link.", - state ? "enable" : "disable"); + INFO_MESSAGE("[SOH] Command failed: Could not %s Invisible Link.", state ? "enable" : "disable"); return 1; } } -static bool GiantLinkHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool GiantLinkHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -619,13 +646,13 @@ static bool GiantLinkHandler(std::shared_ptr Console, const std:: INFO_MESSAGE("[SOH] Giant Link %s", state ? "enabled" : "disabled"); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not %s Giant Link.", - state ? "enable" : "disable"); + INFO_MESSAGE("[SOH] Command failed: Could not %s Giant Link.", state ? "enable" : "disable"); return 1; } } -static bool MinishLinkHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool MinishLinkHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -647,13 +674,13 @@ static bool MinishLinkHandler(std::shared_ptr Console, const std: INFO_MESSAGE("[SOH] Minish Link %s", state ? "enabled" : "disabled"); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not %s Minish Link.", - state ? "enable" : "disable"); + INFO_MESSAGE("[SOH] Command failed: Could not %s Minish Link.", state ? "enable" : "disable"); return 1; } } -static bool AddHeartContainerHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool AddHeartContainerHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -684,7 +711,8 @@ static bool AddHeartContainerHandler(std::shared_ptr Console, con } } -static bool RemoveHeartContainerHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool RemoveHeartContainerHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -715,7 +743,8 @@ static bool RemoveHeartContainerHandler(std::shared_ptr Console, } } -static bool GravityHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool GravityHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -724,12 +753,13 @@ static bool GravityHandler(std::shared_ptr Console, const std::ve GameInteractionEffectBase* effect = new GameInteractionEffect::ModifyGravity(); try { - dynamic_cast(effect)->parameters[0] = Ship::Math::clamp(std::stoi(args[1], nullptr, 10), GI_GRAVITY_LEVEL_LIGHT, GI_GRAVITY_LEVEL_HEAVY); + dynamic_cast(effect)->parameters[0] = + Ship::Math::clamp(std::stoi(args[1], nullptr, 10), GI_GRAVITY_LEVEL_LIGHT, GI_GRAVITY_LEVEL_HEAVY); } catch (std::invalid_argument const& ex) { ERROR_MESSAGE("[SOH] Gravity value must be a number."); return 1; } - + GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect); if (result == GameInteractionEffectQueryResult::Possible) { INFO_MESSAGE("[SOH] Updated gravity."); @@ -740,7 +770,8 @@ static bool GravityHandler(std::shared_ptr Console, const std::ve } } -static bool NoUIHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool NoUIHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -753,7 +784,7 @@ static bool NoUIHandler(std::shared_ptr Console, const std::vecto ERROR_MESSAGE("[SOH] No UI value must be a number."); return 1; } - + RemovableGameInteractionEffect* effect = new GameInteractionEffect::NoUI(); GameInteractionEffectQueryResult result = state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect); @@ -762,13 +793,13 @@ static bool NoUIHandler(std::shared_ptr Console, const std::vecto INFO_MESSAGE("[SOH] No UI %s", state ? "enabled" : "disabled"); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not %s No UI.", - state ? "enable" : "disable"); + INFO_MESSAGE("[SOH] Command failed: Could not %s No UI.", state ? "enable" : "disable"); return 1; } } -static bool FreezeHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool FreezeHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { GameInteractionEffectBase* effect = new GameInteractionEffect::FreezePlayer(); GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect); @@ -781,7 +812,8 @@ static bool FreezeHandler(std::shared_ptr Console, const std::vec } } -static bool DefenseModifierHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool DefenseModifierHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -797,7 +829,8 @@ static bool DefenseModifierHandler(std::shared_ptr Console, const GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect); if (result == GameInteractionEffectQueryResult::Possible) { - INFO_MESSAGE("[SOH] Defense modifier set to %d", dynamic_cast(effect)->parameters[0]); + INFO_MESSAGE("[SOH] Defense modifier set to %d", + dynamic_cast(effect)->parameters[0]); return 0; } else { INFO_MESSAGE("[SOH] Command failed: Could not set defense modifier."); @@ -805,7 +838,8 @@ static bool DefenseModifierHandler(std::shared_ptr Console, const } } -static bool DamageHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool DamageHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -835,7 +869,8 @@ static bool DamageHandler(std::shared_ptr Console, const std::vec } } -static bool HealHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool HealHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -865,7 +900,8 @@ static bool HealHandler(std::shared_ptr Console, const std::vecto } } -static bool FillMagicHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool FillMagicHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { GameInteractionEffectBase* effect = new GameInteractionEffect::FillMagic(); GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect); @@ -878,7 +914,8 @@ static bool FillMagicHandler(std::shared_ptr Console, const std:: } } -static bool EmptyMagicHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool EmptyMagicHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { GameInteractionEffectBase* effect = new GameInteractionEffect::EmptyMagic(); GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect); @@ -891,12 +928,13 @@ static bool EmptyMagicHandler(std::shared_ptr Console, const std: } } -static bool NoZHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { - if (args.size() < 2) { +static bool NoZHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { + if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; } - uint8_t state; + uint8_t state; try { state = std::stoi(args[1], nullptr, 10) == 0 ? 0 : 1; @@ -913,13 +951,13 @@ static bool NoZHandler(std::shared_ptr Console, const std::vector INFO_MESSAGE("[SOH] NoZ " + std::string(state ? "enabled" : "disabled")); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not " + - std::string(state ? "enable" : "disable") + " NoZ."); + INFO_MESSAGE("[SOH] Command failed: Could not " + std::string(state ? "enable" : "disable") + " NoZ."); return 1; } } -static bool OneHitKOHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool OneHitKOHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -941,13 +979,13 @@ static bool OneHitKOHandler(std::shared_ptr Console, const std::v INFO_MESSAGE("[SOH] One-hit KO " + std::string(state ? "enabled" : "disabled")); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not " + - std::string(state ? "enable" : "disable") + " One-hit KO."); + INFO_MESSAGE("[SOH] Command failed: Could not " + std::string(state ? "enable" : "disable") + " One-hit KO."); return 1; } } -static bool PacifistHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool PacifistHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -969,13 +1007,13 @@ static bool PacifistHandler(std::shared_ptr Console, const std::v INFO_MESSAGE("[SOH] Pacifist " + std::string(state ? "enabled" : "disabled")); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not " + - std::string(state ? "enable" : "disable") + " Pacifist."); + INFO_MESSAGE("[SOH] Command failed: Could not " + std::string(state ? "enable" : "disable") + " Pacifist."); return 1; } } -static bool PaperLinkHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool PaperLinkHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -998,13 +1036,13 @@ static bool PaperLinkHandler(std::shared_ptr Console, const std:: INFO_MESSAGE("[SOH] Paper Link " + std::string(state ? "enabled" : "disabled")); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not " + - std::string(state ? "enable" : "disable") + " Paper Link."); + INFO_MESSAGE("[SOH] Command failed: Could not " + std::string(state ? "enable" : "disable") + " Paper Link."); return 1; } } -static bool RainstormHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool RainstormHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1026,13 +1064,13 @@ static bool RainstormHandler(std::shared_ptr Console, const std:: INFO_MESSAGE("[SOH] Rainstorm " + std::string(state ? "enabled" : "disabled")); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not " + - std::string(state ? "enable" : "disable") + " Rainstorm."); + INFO_MESSAGE("[SOH] Command failed: Could not " + std::string(state ? "enable" : "disable") + " Rainstorm."); return 1; } } -static bool ReverseControlsHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool ReverseControlsHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1051,17 +1089,17 @@ static bool ReverseControlsHandler(std::shared_ptr Console, const state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect); if (result == GameInteractionEffectQueryResult::Possible) { - INFO_MESSAGE("[SOH] Reverse controls " + - std::string(state ? "enabled" : "disabled")); + INFO_MESSAGE("[SOH] Reverse controls " + std::string(state ? "enabled" : "disabled")); return 0; } else { - INFO_MESSAGE("[SOH] Command failed: Could not " + - std::string(state ? "enable" : "disable") + " Reverse controls."); + INFO_MESSAGE("[SOH] Command failed: Could not " + std::string(state ? "enable" : "disable") + + " Reverse controls."); return 1; } } -static bool UpdateRupeesHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool UpdateRupeesHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1085,7 +1123,8 @@ static bool UpdateRupeesHandler(std::shared_ptr Console, const st } } -static bool SpeedModifierHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool SpeedModifierHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1109,13 +1148,14 @@ static bool SpeedModifierHandler(std::shared_ptr Console, const s } } -const static std::map boots { +const static std::map boots{ { "kokiri", EQUIP_VALUE_BOOTS_KOKIRI }, { "iron", EQUIP_VALUE_BOOTS_IRON }, { "hover", EQUIP_VALUE_BOOTS_HOVER }, }; -static bool BootsHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool BootsHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1140,13 +1180,14 @@ static bool BootsHandler(std::shared_ptr Console, const std::vect } } -const static std::map shields { +const static std::map shields{ { "deku", ITEM_SHIELD_DEKU }, { "hylian", ITEM_SHIELD_HYLIAN }, { "mirror", ITEM_SHIELD_MIRROR }, }; -static bool GiveShieldHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool GiveShieldHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1171,7 +1212,8 @@ static bool GiveShieldHandler(std::shared_ptr Console, const std: } } -static bool TakeShieldHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool TakeShieldHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1196,7 +1238,8 @@ static bool TakeShieldHandler(std::shared_ptr Console, const std: } } -static bool KnockbackHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool KnockbackHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1226,7 +1269,8 @@ static bool KnockbackHandler(std::shared_ptr Console, const std:: } } -static bool ElectrocuteHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool ElectrocuteHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { GameInteractionEffectBase* effect = new GameInteractionEffect::ElectrocutePlayer(); GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect); @@ -1239,7 +1283,8 @@ static bool ElectrocuteHandler(std::shared_ptr Console, const std } } -static bool BurnHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool BurnHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { GameInteractionEffectBase* effect = new GameInteractionEffect::BurnPlayer(); GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect); @@ -1252,7 +1297,8 @@ static bool BurnHandler(std::shared_ptr Console, const std::vecto } } -static bool CuccoStormHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool CuccoStormHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { GameInteractionEffectQueryResult result = GameInteractor::RawAction::SpawnActor(ACTOR_EN_NIW, 0); if (result == GameInteractionEffectQueryResult::Possible) { @@ -1264,7 +1310,8 @@ static bool CuccoStormHandler(std::shared_ptr Console, const std: } } -static bool GenerateRandoHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool GenerateRandoHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() == 1) { if (GenerateRandomizer()) { return 0; @@ -1279,7 +1326,7 @@ static bool GenerateRandoHandler(std::shared_ptr Console, const s seed = "seed_testing_count"; } - if (GenerateRandomizer(seed + std::to_string(value))){ + if (GenerateRandomizer(seed + std::to_string(value))) { return 0; } } catch (std::invalid_argument const& ex) { @@ -1287,36 +1334,36 @@ static bool GenerateRandoHandler(std::shared_ptr Console, const s return 1; } - ERROR_MESSAGE("[SOH] Rando generation already in progress"); return 1; } -static constexpr std::array, COSMETICS_GROUP_MAX> cosmetic_groups = {{ - {"link", COSMETICS_GROUP_LINK}, - {"mirror_shield", COSMETICS_GROUP_MIRRORSHIELD}, - {"swords", COSMETICS_GROUP_SWORDS}, - {"gloves", COSMETICS_GROUP_GLOVES}, - {"equipment", COSMETICS_GROUP_EQUIPMENT}, - {"keyring", COSMETICS_GROUP_KEYRING}, - {"small_keys", COSMETICS_GROUP_SMALL_KEYS }, - {"boss_keys", COSMETICS_GROUP_BOSS_KEYS }, - {"consumable", COSMETICS_GROUP_CONSUMABLE}, - {"hud", COSMETICS_GROUP_HUD}, - {"kaleido", COSMETICS_GROUP_KALEIDO}, - {"title", COSMETICS_GROUP_TITLE}, - {"npc", COSMETICS_GROUP_NPC}, - {"world", COSMETICS_GROUP_WORLD}, - {"magic", COSMETICS_GROUP_MAGIC}, - {"arrows", COSMETICS_GROUP_ARROWS}, - {"spin_attack", COSMETICS_GROUP_SPIN_ATTACK}, - {"trials", COSMETICS_GROUP_TRAILS}, - {"navi", COSMETICS_GROUP_NAVI}, - {"ivan", COSMETICS_GROUP_IVAN}, - {"message", COSMETICS_GROUP_MESSAGE}, -}}; +static constexpr std::array, COSMETICS_GROUP_MAX> cosmetic_groups = { { + { "link", COSMETICS_GROUP_LINK }, + { "mirror_shield", COSMETICS_GROUP_MIRRORSHIELD }, + { "swords", COSMETICS_GROUP_SWORDS }, + { "gloves", COSMETICS_GROUP_GLOVES }, + { "equipment", COSMETICS_GROUP_EQUIPMENT }, + { "keyring", COSMETICS_GROUP_KEYRING }, + { "small_keys", COSMETICS_GROUP_SMALL_KEYS }, + { "boss_keys", COSMETICS_GROUP_BOSS_KEYS }, + { "consumable", COSMETICS_GROUP_CONSUMABLE }, + { "hud", COSMETICS_GROUP_HUD }, + { "kaleido", COSMETICS_GROUP_KALEIDO }, + { "title", COSMETICS_GROUP_TITLE }, + { "npc", COSMETICS_GROUP_NPC }, + { "world", COSMETICS_GROUP_WORLD }, + { "magic", COSMETICS_GROUP_MAGIC }, + { "arrows", COSMETICS_GROUP_ARROWS }, + { "spin_attack", COSMETICS_GROUP_SPIN_ATTACK }, + { "trials", COSMETICS_GROUP_TRAILS }, + { "navi", COSMETICS_GROUP_NAVI }, + { "ivan", COSMETICS_GROUP_IVAN }, + { "message", COSMETICS_GROUP_MESSAGE }, +} }; -static bool CosmeticsHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool CosmeticsHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1357,18 +1404,13 @@ static bool CosmeticsHandler(std::shared_ptr Console, const std:: } static std::map sfx_groups = { - {"bgm", SEQ_BGM_WORLD}, - {"fanfares", SEQ_FANFARE}, - {"events", SEQ_BGM_EVENT}, - {"battle", SEQ_BGM_BATTLE}, - {"ocarina", SEQ_OCARINA}, - {"instruments", SEQ_INSTRUMENT}, - {"sfx", SEQ_SFX}, - {"voices", SEQ_VOICE}, - {"custom", SEQ_BGM_CUSTOM}, + { "bgm", SEQ_BGM_WORLD }, { "fanfares", SEQ_FANFARE }, { "events", SEQ_BGM_EVENT }, + { "battle", SEQ_BGM_BATTLE }, { "ocarina", SEQ_OCARINA }, { "instruments", SEQ_INSTRUMENT }, + { "sfx", SEQ_SFX }, { "voices", SEQ_VOICE }, { "custom", SEQ_BGM_CUSTOM }, }; -static bool SfxHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { +static bool SfxHandler(std::shared_ptr Console, const std::vector& args, + std::string* output) { if (args.size() < 2) { ERROR_MESSAGE("[SOH] Unexpected arguments passed"); return 1; @@ -1410,192 +1452,261 @@ static bool SfxHandler(std::shared_ptr Console, const std::vector void DebugConsole_Init(void) { // Console - CMD_REGISTER("file_select", {FileSelectHandler, "Returns to the file select."}); - CMD_REGISTER("reset", {ResetHandler, "Resets the game."}); - CMD_REGISTER("quit", {QuitHandler, "Quits the game."}); + CMD_REGISTER("file_select", { FileSelectHandler, "Returns to the file select." }); + CMD_REGISTER("reset", { ResetHandler, "Resets the game." }); + CMD_REGISTER("quit", { QuitHandler, "Quits the game." }); // Save States - CMD_REGISTER("save_state", {SaveStateHandler, "Save a state."}); - CMD_REGISTER("load_state", {LoadStateHandler, "Load a state."}); - CMD_REGISTER("set_slot", {StateSlotSelectHandler, "Selects a SaveState slot", { - {"Slot number", Ship::ArgumentType::NUMBER,} - }}); + CMD_REGISTER("save_state", { SaveStateHandler, "Save a state." }); + CMD_REGISTER("load_state", { LoadStateHandler, "Load a state." }); + CMD_REGISTER("set_slot", { StateSlotSelectHandler, + "Selects a SaveState slot", + { + { "Slot number", Ship::ArgumentType::NUMBER }, + } }); // Map & Location - CMD_REGISTER("void", {VoidHandler, "Voids out of the current map."}); - CMD_REGISTER("reload", {ReloadHandler, "Reloads the current map."}); - CMD_REGISTER("fw", {FWHandler, "Spawns the player where Farore's Wind is set.", { - {"clear|warp|backup", Ship::ArgumentType::TEXT} - }}); - CMD_REGISTER("entrance", {EntranceHandler, "Sends player to the entered entrance (hex)", { - {"entrance", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("void", { VoidHandler, "Voids out of the current map." }); + CMD_REGISTER("reload", { ReloadHandler, "Reloads the current map." }); + CMD_REGISTER("fw", { FWHandler, + "Spawns the player where Farore's Wind is set.", + { + { "clear|warp|backup", Ship::ArgumentType::TEXT }, + } }); + CMD_REGISTER("entrance", { EntranceHandler, + "Sends player to the entered entrance (hex)", + { + { "entrance", Ship::ArgumentType::NUMBER }, + } }); // Gameplay - CMD_REGISTER("kill", {KillPlayerHandler, "Commit suicide."}); + CMD_REGISTER("kill", { KillPlayerHandler, "Commit suicide." }); - CMD_REGISTER("map", {LoadSceneHandler, "Load up kak?"}); + CMD_REGISTER("map", { LoadSceneHandler, "Load up kak?" }); - CMD_REGISTER("rupee", {RupeeHandler, "Set your rupee counter.", { - {"amount", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("rupee", { RupeeHandler, + "Set your rupee counter.", + { + { "amount", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("bItem", {BHandler, "Set an item to the B button.", { - {"Item ID", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("bItem", { BHandler, + "Set an item to the B button.", + { + { "Item ID", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("spawn", { ActorSpawnHandler, "Spawn an actor.", { { "actor name/id", Ship::ArgumentType::NUMBER }, // TODO there should be an actor_id arg type - {"data", Ship::ArgumentType::NUMBER}, - {"x", Ship::ArgumentType::NUMBER, true}, - {"y", Ship::ArgumentType::NUMBER, true}, - {"z", Ship::ArgumentType::NUMBER, true}, - {"rx", Ship::ArgumentType::NUMBER, true}, - {"ry", Ship::ArgumentType::NUMBER, true}, - {"rz", Ship::ArgumentType::NUMBER, true} - }}); + CMD_REGISTER("spawn", + { ActorSpawnHandler, + "Spawn an actor.", + { + { "actor name/id", Ship::ArgumentType::NUMBER }, // TODO there should be an actor_id arg type + { "data", Ship::ArgumentType::NUMBER }, + { "x", Ship::ArgumentType::NUMBER, true }, + { "y", Ship::ArgumentType::NUMBER, true }, + { "z", Ship::ArgumentType::NUMBER, true }, + { "rx", Ship::ArgumentType::NUMBER, true }, + { "ry", Ship::ArgumentType::NUMBER, true }, + { "rz", Ship::ArgumentType::NUMBER, true }, + } }); - CMD_REGISTER("pos", {SetPosHandler, "Sets the position of the player.", { - {"x", Ship::ArgumentType::NUMBER, true}, - {"y", Ship::ArgumentType::NUMBER, true}, - {"z", Ship::ArgumentType::NUMBER, true} - }}); + CMD_REGISTER("pos", { SetPosHandler, + "Sets the position of the player.", + { + { "x", Ship::ArgumentType::NUMBER, true }, + { "y", Ship::ArgumentType::NUMBER, true }, + { "z", Ship::ArgumentType::NUMBER, true }, + } }); - CMD_REGISTER("addammo", {AddAmmoHandler, "Adds ammo of an item.", { - {"sticks|nuts|bombs|seeds|arrows|bombchus|beans", Ship::ArgumentType::TEXT}, - {"count", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("addammo", { AddAmmoHandler, + "Adds ammo of an item.", + { + { "sticks|nuts|bombs|seeds|arrows|bombchus|beans", Ship::ArgumentType::TEXT }, + { "count", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("takeammo", {TakeAmmoHandler, "Removes ammo of an item.", { - {"sticks|nuts|bombs|seeds|arrows|bombchus|beans", Ship::ArgumentType::TEXT}, - {"count", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("takeammo", { TakeAmmoHandler, + "Removes ammo of an item.", + { + { "sticks|nuts|bombs|seeds|arrows|bombchus|beans", Ship::ArgumentType::TEXT }, + { "count", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("bottle", {BottleHandler, "Changes item in a bottle slot.", { - {"item", Ship::ArgumentType::TEXT}, - {"slot", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("bottle", { BottleHandler, + "Changes item in a bottle slot.", + { + { "item", Ship::ArgumentType::TEXT }, + { "slot", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("give_item", {GiveItemHandler, "Gives an item to the player as if it was given from an actor", { - {"vanilla|randomizer", Ship::ArgumentType::TEXT}, - {"giveItemID", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("give_item", { GiveItemHandler, + "Gives an item to the player as if it was given from an actor", + { + { "vanilla|randomizer", Ship::ArgumentType::TEXT }, + { "giveItemID", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("item", {ItemHandler, "Sets item ID in arg 1 into slot arg 2. No boundary checks. Use with caution.", { - {"slot", Ship::ArgumentType::NUMBER}, - {"item id", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("item", { ItemHandler, + "Sets item ID in arg 1 into slot arg 2. No boundary checks. Use with caution.", + { + { "slot", Ship::ArgumentType::NUMBER }, + { "item id", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("invisible", {InvisibleHandler, "Activate Link's Elvish cloak, making him appear invisible.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("invisible", { InvisibleHandler, + "Activate Link's Elvish cloak, making him appear invisible.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("giant_link", {GiantLinkHandler, "Turn Link into a giant Lonky boi.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("giant_link", { GiantLinkHandler, + "Turn Link into a giant Lonky boi.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("minish_link", {MinishLinkHandler, "Turn Link into a minish boi.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("minish_link", { MinishLinkHandler, + "Turn Link into a minish boi.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); CMD_REGISTER("add_heart_container", - {AddHeartContainerHandler, "Give Link a heart! The maximum amount of hearts is 20!"}); + { AddHeartContainerHandler, "Give Link a heart! The maximum amount of hearts is 20!" }); CMD_REGISTER("remove_heart_container", - {RemoveHeartContainerHandler, "Remove a heart from Link. The minimal amount of hearts is 3."}); + { RemoveHeartContainerHandler, "Remove a heart from Link. The minimal amount of hearts is 3." }); - CMD_REGISTER("gravity", {GravityHandler, "Set gravity level.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("gravity", { GravityHandler, + "Set gravity level.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("no_ui", {NoUIHandler, "Disables the UI.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("no_ui", { NoUIHandler, + "Disables the UI.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("freeze", {FreezeHandler, "Freezes Link in place"}); + CMD_REGISTER("freeze", { FreezeHandler, "Freezes Link in place" }); - CMD_REGISTER("defense_modifier", {DefenseModifierHandler, "Sets the defense modifier.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("defense_modifier", { DefenseModifierHandler, + "Sets the defense modifier.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("damage", {DamageHandler, "Deal damage to Link.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("damage", { DamageHandler, + "Deal damage to Link.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("heal", {HealHandler, "Heals Link.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("heal", { HealHandler, + "Heals Link.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("fill_magic", {FillMagicHandler, "Fills magic."}); + CMD_REGISTER("fill_magic", { FillMagicHandler, "Fills magic." }); - CMD_REGISTER("empty_magic", {EmptyMagicHandler, "Empties magic."}); + CMD_REGISTER("empty_magic", { EmptyMagicHandler, "Empties magic." }); - CMD_REGISTER("no_z", {NoZHandler, "Disables Z-button presses.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("no_z", { NoZHandler, + "Disables Z-button presses.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("ohko", {OneHitKOHandler, - "Activates one hit KO. Any damage kills Link and he cannot gain health in this mode.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("ohko", { OneHitKOHandler, + "Activates one hit KO. Any damage kills Link and he cannot gain health in this mode.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("pacifist", {PacifistHandler, "Activates pacifist mode. Prevents Link from using his weapon.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("pacifist", { PacifistHandler, + "Activates pacifist mode. Prevents Link from using his weapon.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("paper_link", {PaperLinkHandler, "Link but made out of paper.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("paper_link", { PaperLinkHandler, + "Link but made out of paper.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("rainstorm", {RainstormHandler, "Activates rainstorm."}); + CMD_REGISTER("rainstorm", { RainstormHandler, "Activates rainstorm." }); - CMD_REGISTER("reverse_controls", {ReverseControlsHandler, "Reverses the controls.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("reverse_controls", { ReverseControlsHandler, + "Reverses the controls.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("update_rupees", {UpdateRupeesHandler, "Adds rupees.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("update_rupees", { UpdateRupeesHandler, + "Adds rupees.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("speed_modifier", {SpeedModifierHandler, "Sets the speed modifier.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("speed_modifier", { SpeedModifierHandler, + "Sets the speed modifier.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("boots", {BootsHandler, "Activates boots.", { - {"kokiri|iron|hover", Ship::ArgumentType::TEXT}, - }}); + CMD_REGISTER("boots", { BootsHandler, + "Activates boots.", + { + { "kokiri|iron|hover", Ship::ArgumentType::TEXT }, + } }); - CMD_REGISTER("giveshield", {GiveShieldHandler, "Gives a shield and equips it when Link is the right age for it.", { - {"deku|hylian|mirror", Ship::ArgumentType::TEXT}, - }}); + CMD_REGISTER("giveshield", { GiveShieldHandler, + "Gives a shield and equips it when Link is the right age for it.", + { + { "deku|hylian|mirror", Ship::ArgumentType::TEXT }, + } }); - CMD_REGISTER("takeshield", {TakeShieldHandler, "Takes a shield and unequips it if Link is wearing it.", { - {"deku|hylian|mirror", Ship::ArgumentType::TEXT}, - }}); + CMD_REGISTER("takeshield", { TakeShieldHandler, + "Takes a shield and unequips it if Link is wearing it.", + { + { "deku|hylian|mirror", Ship::ArgumentType::TEXT }, + } }); - CMD_REGISTER("knockback", {KnockbackHandler, "Knocks Link back.", { - {"value", Ship::ArgumentType::NUMBER} - }}); + CMD_REGISTER("knockback", { KnockbackHandler, + "Knocks Link back.", + { + { "value", Ship::ArgumentType::NUMBER }, + } }); - CMD_REGISTER("electrocute", {ElectrocuteHandler, "Electrocutes Link."}); + CMD_REGISTER("electrocute", { ElectrocuteHandler, "Electrocutes Link." }); - CMD_REGISTER("burn", {BurnHandler, "Burns Link."}); + CMD_REGISTER("burn", { BurnHandler, "Burns Link." }); - CMD_REGISTER("cucco_storm", {CuccoStormHandler, "Cucco Storm"}); + CMD_REGISTER("cucco_storm", { CuccoStormHandler, "Cucco Storm" }); - CMD_REGISTER("gen_rando", {GenerateRandoHandler, "Generate a randomizer seed", { - {"seed|count", Ship::ArgumentType::NUMBER, true}, - {"testing", Ship::ArgumentType::NUMBER, true}, - }}); + CMD_REGISTER("gen_rando", { GenerateRandoHandler, + "Generate a randomizer seed", + { + { "seed|count", Ship::ArgumentType::NUMBER, true }, + { "testing", Ship::ArgumentType::NUMBER, true }, + } }); - CMD_REGISTER("cosmetics", {CosmeticsHandler, "Change cosmetics.", { - {"reset|randomize", Ship::ArgumentType::TEXT}, - {"group name", Ship::ArgumentType::TEXT, true}, - }}); + CMD_REGISTER("cosmetics", { CosmeticsHandler, + "Change cosmetics.", + { + { "reset|randomize", Ship::ArgumentType::TEXT }, + { "group name", Ship::ArgumentType::TEXT, true }, + } }); - CMD_REGISTER("sfx", {SfxHandler, "Change SFX.", { - {"reset|randomize", Ship::ArgumentType::TEXT}, - {"group_name", Ship::ArgumentType::TEXT, true}, - }}); + CMD_REGISTER("sfx", { SfxHandler, + "Change SFX.", + { + { "reset|randomize", Ship::ArgumentType::TEXT }, + { "group_name", Ship::ArgumentType::TEXT, true }, + } }); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } diff --git a/soh/soh/Enhancements/debugger/MessageViewer.cpp b/soh/soh/Enhancements/debugger/MessageViewer.cpp index aabe9ad61..fef875e94 100644 --- a/soh/soh/Enhancements/debugger/MessageViewer.cpp +++ b/soh/soh/Enhancements/debugger/MessageViewer.cpp @@ -29,7 +29,8 @@ void MessageViewer::DrawElement() { ImGui::Text("Table ID"); ImGui::SameLine(); PushStyleInput(THEME_COLOR); - ImGui::InputText("##TableID", mTableIdBuf, MAX_STRING_SIZE, ImGuiInputTextFlags_CallbackCharFilter, UIWidgets::TextFilters::FilterAlphaNum); + ImGui::InputText("##TableID", mTableIdBuf, MAX_STRING_SIZE, ImGuiInputTextFlags_CallbackCharFilter, + UIWidgets::TextFilters::FilterAlphaNum); UIWidgets::InsertHelpHoverText("Leave blank for vanilla table"); ImGui::Text("Text ID"); ImGui::SameLine(); @@ -41,7 +42,8 @@ void MessageViewer::DrawElement() { case HEXADECIMAL: default: ImGui::InputText("##TextID", mTextIdBuf, MAX_STRING_SIZE, ImGuiInputTextFlags_CharsHexadecimal); - UIWidgets::InsertHelpHoverText("Hexadecimal Text ID of the message to load. Hexadecimal digits only (0-9/A-F)."); + UIWidgets::InsertHelpHoverText( + "Hexadecimal Text ID of the message to load. Hexadecimal digits only (0-9/A-F)."); break; } PopStyleInput(); @@ -121,6 +123,7 @@ void MessageViewer::DisplayCustomMessage() const { extern "C" MessageTableEntry* sNesMessageEntryTablePtr; extern "C" MessageTableEntry* sGerMessageEntryTablePtr; extern "C" MessageTableEntry* sFraMessageEntryTablePtr; +extern "C" MessageTableEntry* sJpnMessageEntryTablePtr; extern "C" MessageTableEntry* sStaffMessageEntryTablePtr; void FindMessage(PlayState* play, const uint16_t textId, const uint8_t language) { @@ -128,18 +131,13 @@ void FindMessage(PlayState* play, const uint16_t textId, const uint8_t language) const char* nextSeg; MessageTableEntry* messageTableEntry = sNesMessageEntryTablePtr; Font* font; - u16 bufferId = textId; - // Use the better owl message if better owl is enabled - if (CVarGetInteger(CVAR_ENHANCEMENT("BetterOwl"), 0) != 0 && (bufferId == 0x2066 || bufferId == 0x607B || - bufferId == 0x10C2 || bufferId == 0x10C6 || bufferId == 0x206A)) - { - bufferId = 0x71B3; - } if (language == LANGUAGE_GER) messageTableEntry = sGerMessageEntryTablePtr; else if (language == LANGUAGE_FRA) messageTableEntry = sFraMessageEntryTablePtr; + else if (language == LANGUAGE_JPN) + messageTableEntry = sJpnMessageEntryTablePtr; // If PAL languages are not present in the OTR file, default to English if (messageTableEntry == nullptr) @@ -150,7 +148,7 @@ void FindMessage(PlayState* play, const uint16_t textId, const uint8_t language) while (messageTableEntry->textId != 0xFFFF) { font = &play->msgCtx.font; - if (messageTableEntry->textId == bufferId) { + if (messageTableEntry->textId == textId) { foundSeg = messageTableEntry->segment; font->charTexBuf[0] = messageTableEntry->typePos; @@ -173,15 +171,14 @@ void FindMessage(PlayState* play, const uint16_t textId, const uint8_t language) font->msgLength = nextSeg - foundSeg; } -static const char* msgStaticTbl[] = -{ +static const char* msgStaticTbl[] = { gDefaultMessageBackgroundTex, gSignMessageBackgroundTex, gNoteStaffMessageBackgroundTex, gFadingMessageBackgroundTex, gMessageContinueTriangleTex, gMessageEndSquareTex, - gMessageArrowTex + gMessageArrowTex, }; void MessageDebug_StartTextBox(const char* tableId, uint16_t textId, uint8_t language) { @@ -205,13 +202,14 @@ void MessageDebug_StartTextBox(const char* tableId, uint16_t textId, uint8_t lan FindMessage(play, textId, language); msgCtx->msgLength = static_cast(font->msgLength); const uintptr_t src = font->msgOffset; - memcpy(font->msgBuf, reinterpret_cast(src), font->msgLength); + memcpy(font->msgBuf, reinterpret_cast(src), font->msgLength); } else { constexpr int maxBufferSize = sizeof(font->msgBuf); const CustomMessage messageEntry = CustomMessageManager::Instance->RetrieveMessage(tableId, textId); font->charTexBuf[0] = (messageEntry.GetTextBoxType() << 4) | messageEntry.GetTextBoxPosition(); switch (language) { - font->msgLength = SohUtils::CopyStringToCharBuffer(buffer, messageEntry.GetForLanguage(language), maxBufferSize); + font->msgLength = + SohUtils::CopyStringToCharBuffer(buffer, messageEntry.GetForLanguage(language), maxBufferSize); } msgCtx->msgLength = static_cast(font->msgLength); } @@ -262,8 +260,6 @@ void MessageDebug_StartTextBox(const char* tableId, uint16_t textId, uint8_t lan void MessageDebug_DisplayCustomMessage(const char* customMessage) { CustomMessageManager::Instance->ClearMessageTable(MessageViewer::TABLE_ID); CustomMessageManager::Instance->CreateMessage(MessageViewer::TABLE_ID, 0, - CustomMessage(customMessage, customMessage, customMessage)); + CustomMessage(customMessage, customMessage, customMessage)); MessageDebug_StartTextBox(MessageViewer::TABLE_ID, 0, 0); } - - diff --git a/soh/soh/Enhancements/debugger/MessageViewer.h b/soh/soh/Enhancements/debugger/MessageViewer.h index 43ae55aa7..20924a0b6 100644 --- a/soh/soh/Enhancements/debugger/MessageViewer.h +++ b/soh/soh/Enhancements/debugger/MessageViewer.h @@ -25,9 +25,8 @@ void MessageDebug_DisplayCustomMessage(const char* customMessage); #ifdef __cplusplus } - class MessageViewer : public Ship::GuiWindow { -public: + public: static inline const char* TABLE_ID = "MessageViewer"; using GuiWindow::GuiWindow; @@ -37,12 +36,12 @@ public: virtual ~MessageViewer() = default; -private: + private: void DisplayExistingMessage() const; void DisplayCustomMessage() const; static constexpr uint16_t MAX_STRING_SIZE = 1024; - static constexpr std::array mLanguages = {"English", "German", "French"}; + static constexpr std::array mLanguages = { "English", "German", "French" }; static constexpr int HEXADECIMAL = 0; static constexpr int DECIMAL = 1; char* mTableIdBuf; @@ -57,6 +56,5 @@ private: bool mDisplayCustomMessageClicked = false; }; - #endif //__cplusplus -#endif //CUSTOMMESSAGEDEBUGGER_H +#endif // CUSTOMMESSAGEDEBUGGER_H diff --git a/soh/soh/Enhancements/debugger/SohConsoleWindow.cpp b/soh/soh/Enhancements/debugger/SohConsoleWindow.cpp new file mode 100644 index 000000000..d5090e7e5 --- /dev/null +++ b/soh/soh/Enhancements/debugger/SohConsoleWindow.cpp @@ -0,0 +1,30 @@ +#include "SohConsoleWindow.h" +#include "soh/OTRGlobals.h" +#include "soh/SohGui/UIWidgets.hpp" +#include "soh/SohGui/SohGui.hpp" + +void SohConsoleWindow::InitElement() { + ConsoleWindow::InitElement(); +} + +void SohConsoleWindow::UpdateElement() { + ConsoleWindow::UpdateElement(); +} + +void SohConsoleWindow::DrawElement() { + UIWidgets::PushStyleInput(THEME_COLOR); + // Small font (13) to match hardcoded width values in the LUS window.. set large font after below TODO addressed + ImGui::PushFont(OTRGlobals::Instance->fontMonoSmall); + + // TODO: This can be removed after the LUS console window is designed better without hardcoding widths + ImGui::BeginChild("##Console Wrapper", ImVec2(0, 0), ImGuiChildFlags_None, + ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | + ImGuiWindowFlags_NoScrollWithMouse); + + ConsoleWindow::DrawElement(); + + ImGui::EndChild(); + + ImGui::PopFont(); + UIWidgets::PopStyleInput(); +} diff --git a/soh/soh/Enhancements/debugger/SohConsoleWindow.h b/soh/soh/Enhancements/debugger/SohConsoleWindow.h new file mode 100644 index 000000000..db039625b --- /dev/null +++ b/soh/soh/Enhancements/debugger/SohConsoleWindow.h @@ -0,0 +1,17 @@ +#ifndef SOH_CONSOLE_H +#define SOH_CONSOLE_H + +#include "window/gui/GuiWindow.h" +#include "window/gui/ConsoleWindow.h" + +class SohConsoleWindow : public Ship::ConsoleWindow { + public: + using ConsoleWindow::ConsoleWindow; + + protected: + void InitElement() override; + void UpdateElement() override; + void DrawElement() override; +}; + +#endif // SOH_CONSOLE_H diff --git a/soh/soh/Enhancements/debugger/SohGfxDebuggerWindow.cpp b/soh/soh/Enhancements/debugger/SohGfxDebuggerWindow.cpp new file mode 100644 index 000000000..06d81577d --- /dev/null +++ b/soh/soh/Enhancements/debugger/SohGfxDebuggerWindow.cpp @@ -0,0 +1,16 @@ +#include "SohGfxDebuggerWindow.h" +#include "soh/OTRGlobals.h" + +void SohGfxDebuggerWindow::InitElement() { + GfxDebuggerWindow::InitElement(); +} + +void SohGfxDebuggerWindow::UpdateElement() { + GfxDebuggerWindow::UpdateElement(); +} + +void SohGfxDebuggerWindow::DrawElement() { + ImGui::PushFont(OTRGlobals::Instance->fontMonoLarger); + GfxDebuggerWindow::DrawElement(); + ImGui::PopFont(); +} diff --git a/soh/soh/Enhancements/debugger/SohGfxDebuggerWindow.h b/soh/soh/Enhancements/debugger/SohGfxDebuggerWindow.h new file mode 100644 index 000000000..789173b88 --- /dev/null +++ b/soh/soh/Enhancements/debugger/SohGfxDebuggerWindow.h @@ -0,0 +1,17 @@ +#ifndef SOH_GFX_DEBUGGER_H +#define SOH_GFX_DEBUGGER_H + +#include "window/gui/GuiWindow.h" +#include "window/gui/GfxDebuggerWindow.h" + +class SohGfxDebuggerWindow : public LUS::GfxDebuggerWindow { + public: + using GfxDebuggerWindow::GfxDebuggerWindow; + + protected: + void InitElement() override; + void UpdateElement() override; + void DrawElement() override; +}; + +#endif // SOH_GFX_DEBUGGER_H diff --git a/soh/soh/Enhancements/debugger/SohStatsWindow.cpp b/soh/soh/Enhancements/debugger/SohStatsWindow.cpp new file mode 100644 index 000000000..56f81bee4 --- /dev/null +++ b/soh/soh/Enhancements/debugger/SohStatsWindow.cpp @@ -0,0 +1,24 @@ +#include "SohStatsWindow.h" +#include "soh/OTRGlobals.h" + +void SohStatsWindow::DrawElement() { + const float framerate = ImGui::GetIO().Framerate; + const float deltatime = ImGui::GetIO().DeltaTime; + ImGui::PushFont(OTRGlobals::Instance->fontMonoLarger); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0)); + +#if defined(_WIN32) + ImGui::Text("Platform: Windows"); +#elif defined(__IOS__) + ImGui::Text("Platform: iOS"); +#elif defined(__APPLE__) + ImGui::Text("Platform: macOS"); +#elif defined(__linux__) + ImGui::Text("Platform: Linux"); +#else + ImGui::Text("Platform: Unknown"); +#endif + ImGui::Text("Status: %.3f ms/frame (%.1f FPS)", deltatime * 1000.0f, framerate); + ImGui::PopStyleColor(); + ImGui::PopFont(); +} diff --git a/soh/soh/Enhancements/debugger/SohStatsWindow.h b/soh/soh/Enhancements/debugger/SohStatsWindow.h new file mode 100644 index 000000000..227ca5500 --- /dev/null +++ b/soh/soh/Enhancements/debugger/SohStatsWindow.h @@ -0,0 +1,17 @@ +#ifndef SOH_STATS_H +#define SOH_STATS_H + +#include + +class SohStatsWindow : public Ship::GuiWindow { + public: + using GuiWindow::GuiWindow; + ~SohStatsWindow(){}; + + protected: + void InitElement() override{}; + void DrawElement() override; + void UpdateElement() override{}; +}; + +#endif // SOH_STATS_H diff --git a/soh/soh/Enhancements/debugger/actorViewer.cpp b/soh/soh/Enhancements/debugger/actorViewer.cpp index 767ff2723..8ae940ffb 100644 --- a/soh/soh/Enhancements/debugger/actorViewer.cpp +++ b/soh/soh/Enhancements/debugger/actorViewer.cpp @@ -42,22 +42,16 @@ typedef enum { LIST, TARGET, HELD, - INTERACT + INTERACT, } RetrievalMethod; -std::array acMapping = { - "Switch", - "Background (Prop type 1)", - "Player", - "Bomb", - "NPC", - "Enemy", - "Prop type 2", - "Item/Action", - "Misc.", - "Boss", - "Door", - "Chest" +std::array acMapping = { + "Switch", "Background (Prop type 1)", + "Player", "Bomb", + "NPC", "Enemy", + "Prop type 2", "Item/Action", + "Misc.", "Boss", + "Door", "Chest", }; using namespace UIWidgets; @@ -76,7 +70,8 @@ const std::string GetActorDescription(u16 id) { template void DrawGroupWithBorder(T&& drawFunc, std::string section) { // First group encapsulates the inner portion and border ImGui::BeginChild(std::string("##" + section).c_str(), ImVec2(0, 0), - ImGuiChildFlags_AlwaysAutoResize | ImGuiChildFlags_Borders | ImGuiChildFlags_AutoResizeX | ImGuiChildFlags_AutoResizeY); + ImGuiChildFlags_AlwaysAutoResize | ImGuiChildFlags_Borders | ImGuiChildFlags_AutoResizeX | + ImGuiChildFlags_AutoResizeY); // Second group encapsulates just the inner portion ImGui::BeginGroup(); @@ -103,7 +98,7 @@ void PopulateActorDropdown(int i, std::vector& data) { } } -//actors that don't use params at all +// actors that don't use params at all static std::vector noParamsActors = { ACTOR_ARMS_HOOK, ACTOR_ARROW_FIRE, @@ -230,7 +225,7 @@ static std::vector noParamsActors = { ACTOR_UNSET_15D, ACTOR_UNSET_161, ACTOR_UNSET_180, - ACTOR_UNSET_1AA + ACTOR_UNSET_1AA, }; static std::unordered_map> actorSpecificData; @@ -250,7 +245,7 @@ void CreateActorSpecificData() { if (!isFlower) { ImGui::InputScalar("Shots Per Round", ImGuiDataType_S16, &shotsPerRound); } - + return isFlower ? DEKUNUTS_FLOWER : (shotsPerRound << 8); }; @@ -259,12 +254,12 @@ void CreateActorSpecificData() { if (params == 0) { params = -2; } - //the + 2 is because the params are -2 & -1 instead of 0 & 1 + // the + 2 is because the params are -2 & -1 instead of 0 & 1 int selectedItem = params + 2; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem - 2; } - + return params; }; @@ -274,7 +269,7 @@ void CreateActorSpecificData() { if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; @@ -284,7 +279,7 @@ void CreateActorSpecificData() { if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; @@ -294,7 +289,7 @@ void CreateActorSpecificData() { if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; @@ -304,7 +299,7 @@ void CreateActorSpecificData() { if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; @@ -314,7 +309,7 @@ void CreateActorSpecificData() { if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; @@ -324,7 +319,7 @@ void CreateActorSpecificData() { if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; @@ -333,12 +328,12 @@ void CreateActorSpecificData() { if (params == 0) { params = 0x40; } - //the - 0x40 is because the params are 0x40 & 0x41 instead of 0 & 1 + // the - 0x40 is because the params are 0x40 & 0x41 instead of 0 & 1 int selectedItem = params - 0x40; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem + 0x40; } - + return params; }; @@ -348,21 +343,21 @@ void CreateActorSpecificData() { if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; actorSpecificData[ACTOR_EN_REEBA] = [](s16 params) -> s16 { bool isBig = params != 0; ImGui::Checkbox("Big", &isBig); - + return isBig; }; actorSpecificData[ACTOR_EN_TK] = [](s16 params) -> s16 { bool canTurn = params >= 0; ImGui::Checkbox("Can Turn", &canTurn); - + return canTurn ? 0 : -1; }; @@ -374,35 +369,13 @@ void CreateActorSpecificData() { if (collectibleFlag > 0x3F) { collectibleFlag = 0x3F; } - + static const char* items[] = { - "Green Rupee", - "Blue Rupee", - "Red Rupee", - "Recovery Heart", - "Bombs (A)", - "Arrow", - "Heart Piece", - "Heart Container", - "Arrows (5)", - "Arrows (10)", - "Arrows (30)", - "Bombs (B)", - "Deku Nuts (5)", - "Deku Stick", - "Magic (Large)", - "Magic (Small)", - "Deku Seeds (5)", - "Small Key", - "Flexible", - "Gold Rupee", - "Purple Rupee", - "Deku Shield", - "Hylian Shield", - "Zora Tunic", - "Goron Tunic", - "Bombs (Special)", - "Bombchus" + "Green Rupee", "Blue Rupee", "Red Rupee", "Recovery Heart", "Bombs (A)", "Arrow", + "Heart Piece", "Heart Container", "Arrows (5)", "Arrows (10)", "Arrows (30)", "Bombs (B)", + "Deku Nuts (5)", "Deku Stick", "Magic (Large)", "Magic (Small)", "Deku Seeds (5)", "Small Key", + "Flexible", "Gold Rupee", "Purple Rupee", "Deku Shield", "Hylian Shield", "Zora Tunic", + "Goron Tunic", "Bombs (Special)", "Bombchus", }; int selectedItem = params & 0xFF; @@ -413,33 +386,11 @@ void CreateActorSpecificData() { actorSpecificData[ACTOR_OBJ_COMB] = [](s16 params) -> s16 { static const char* items[] = { - "Green Rupee", - "Blue Rupee", - "Red Rupee", - "Recovery Heart", - "Bombs (A)", - "Arrow", - "Heart Piece", - "Heart Container", - "Arrows (5)", - "Arrows (10)", - "Arrows (30)", - "Bombs (B)", - "Deku Nuts (5)", - "Deku Stick", - "Magic (Large)", - "Magic (Small)", - "Deku Seeds (5)", - "Small Key", - "Flexible", - "Gold Rupee", - "Purple Rupee", - "Deku Shield", - "Hylian Shield", - "Zora Tunic", - "Goron Tunic", - "Bombs (Special)", - "Bombchus" + "Green Rupee", "Blue Rupee", "Red Rupee", "Recovery Heart", "Bombs (A)", "Arrow", + "Heart Piece", "Heart Container", "Arrows (5)", "Arrows (10)", "Arrows (30)", "Bombs (B)", + "Deku Nuts (5)", "Deku Stick", "Magic (Large)", "Magic (Small)", "Deku Seeds (5)", "Small Key", + "Flexible", "Gold Rupee", "Purple Rupee", "Deku Shield", "Hylian Shield", "Zora Tunic", + "Goron Tunic", "Bombs (Special)", "Bombchus", }; int selectedItem = params & 0xFF; @@ -452,18 +403,18 @@ void CreateActorSpecificData() { collectibleFlag = 0x3F; } } - + return (collectibleFlag << 8) + selectedItem; }; actorSpecificData[ACTOR_EN_GM] = [](s16 params) -> s16 { u8 switchFlag = (params & 0x3F00) >> 8; - + ImGui::InputScalar("Switch Flag", ImGuiDataType_U8, &switchFlag); if (switchFlag > 0x3F) { switchFlag = 0x3F; } - + return switchFlag << 8; }; @@ -519,13 +470,13 @@ void CreateActorSpecificData() { "Bombs (5) (35 Rupees)", "Red Potion (40 Rupees)", "Red Potion (50 Rupees)", - "Randomizer Item" + "Randomizer Item", }; int selectedItem = params; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; @@ -537,13 +488,13 @@ void CreateActorSpecificData() { "Spawned Falling (2)", //"INVALID", "Ceiling Spot Spawner", - "On Floor" + "On Floor", }; int selectedItem = params > 3 ? params - 1 : params; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem > 3 ? selectedItem + 1 : selectedItem; } - + return params; }; @@ -568,119 +519,108 @@ void CreateActorSpecificData() { "Magic Fire", "Magic Wind", "Magic Dark", - "Bullet Bag" + "Bullet Bag", }; int selectedItem = params; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; actorSpecificData[ACTOR_EN_ELF] = [](s16 params) -> s16 { static const char* items[] = { - "Navi", - "Revive Bottle", - "Heal Timed", - "Kokiri", - "Spawner", - "Revive Death", - "Heal", - "Heal Big" + "Navi", "Revive Bottle", "Heal Timed", "Kokiri", "Spawner", "Revive Death", "Heal", "Heal Big", }; int selectedItem = params; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; actorSpecificData[ACTOR_EN_CLEAR_TAG] = [](s16 params) -> s16 { static const char* items[] = { - "Cutscene", //0 - "Normal", //1 - "Laser" //100 + "Cutscene", // 0 + "Normal", // 1 + "Laser", // 100 }; int selectedItem = params == 100 ? 2 : params; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem == 2 ? 100 : selectedItem; } - + return params; }; actorSpecificData[ACTOR_EN_BOMBF] = [](s16 params) -> s16 { static const char* items[] = { "Flower", "Body", "Explosion" }; - //the + 1 is because the params are -1, 0 & 1 instead of 0, 1 & 2 + // the + 1 is because the params are -1, 0 & 1 instead of 0, 1 & 2 int selectedItem = params + 1; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem - 1; } - + return params; }; actorSpecificData[ACTOR_EN_BOM] = [](s16 params) -> s16 { static const char* items[] = { "Body", "Explosion" }; - + int selectedItem = params; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; actorSpecificData[ACTOR_DOOR_WARP1] = [](s16 params) -> s16 { static const char* items[] = { - "Blue Crystal", // -2 - "Dungeon Adult", - "Dungeon Child", - "Clear Flag", // Activate on temp clear flag - "Sages", // Used by sages warping into chamber of sages during their cutscene + "Blue Crystal", // -2 + "Dungeon Adult", "Dungeon Child", + "Clear Flag", // Activate on temp clear flag + "Sages", // Used by sages warping into chamber of sages during their cutscene "Purple Crystal", - "Yellow", // The colored variants don't warp, they are cutscene setpieces + "Yellow", // The colored variants don't warp, they are cutscene setpieces "Blue Ruto", - "Destination", // Spawning in after having taken a warp - "UNK 7", - "Orange", - "Green", - "Red" + "Destination", // Spawning in after having taken a warp + "UNK 7", "Orange", "Green", "Red", }; int selectedItem = params + 2; if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem - 2; } - + return params; }; actorSpecificData[ACTOR_EN_DY_EXTRA] = [](s16 params) -> s16 { static const char* items[] = { "Orange", "Green" }; - + int selectedItem = params; if (ImGui::Combo("Color", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; actorSpecificData[ACTOR_EN_SKB] = [](s16 params) -> s16 { u8 size = params; ImGui::InputScalar("Size", ImGuiDataType_U8, &size); - + return size; }; actorSpecificData[ACTOR_EN_WF] = [](s16 params) -> s16 { static const char* items[] = { "Normal", "White" }; - + int selectedItem = params; ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items)); - + u8 switchFlag = (params & 0x3F00) >> 8; ImGui::InputScalar("Switch Flag", ImGuiDataType_U8, &switchFlag); return (switchFlag << 8) + selectedItem; @@ -703,7 +643,7 @@ void CreateActorSpecificData() { if (itemId > 0x7F) { itemId = 0x7F; } - + static const char* items[] = { "Big (Default)", "Room Clear Big", @@ -716,7 +656,7 @@ void CreateActorSpecificData() { "Switch Flag Fall Small", "9", "10", - "Switch Flag Big" + "Switch Flag Big", }; int type = (params >> 12) & 0xF; @@ -751,7 +691,7 @@ void CreateActorSpecificData() { if (transitionIndex > 0x3F) { transitionIndex = 0x3F; } - + static const char* items[] = { "Room Load", // loads rooms "Locked", // small key locked door @@ -792,9 +732,9 @@ void CreateActorSpecificData() { actorSpecificData[ACTOR_EN_PO_DESERT] = [](s16 params) -> s16 { u8 switchFlag = params >> 8; - + ImGui::InputScalar("Path", ImGuiDataType_U8, &switchFlag); - + return switchFlag << 8; }; @@ -807,30 +747,26 @@ void CreateActorSpecificData() { if (ImGui::Checkbox("Fishing Sign", &fishingSign)) { piece = false; } - + u8 textId = params; if (!piece && !fishingSign) { if (ImGui::InputScalar("Text ID", ImGuiDataType_U8, &textId)) { textId |= 0x300; } } - + return piece ? (s16)0xFFDD : (fishingSign ? 0x300 : textId); }; actorSpecificData[ACTOR_EN_KUSA] = [](s16 params) -> s16 { - static const char* items[] = { - "0", - "1", - "2" - }; + static const char* items[] = { "0", "1", "2" }; int type = params & 3; ImGui::Combo("Type", &type, items, IM_ARRAYSIZE(items)); bool bugs = ((params >> 4) & 1) != 0; ImGui::Checkbox("Bugs", &bugs); - + u8 drop = (params >> 8) & 0xF; if (type == 2) { ImGui::InputScalar("Random Drop Params", ImGuiDataType_U8, &drop); @@ -845,17 +781,12 @@ void CreateActorSpecificData() { }; actorSpecificData[ActorDB::Instance->RetrieveId("En_Partner")] = [](s16 params) -> s16 { - static const char* items[] = { - "Port 1", - "Port 2", - "Port 3", - "Port 4" - }; + static const char* items[] = { "Port 1", "Port 2", "Port 3", "Port 4" }; int selectedItem = params; if (ImGui::Combo("Controller Port", &selectedItem, items, IM_ARRAYSIZE(items))) { return selectedItem; } - + return params; }; } @@ -921,7 +852,7 @@ void ActorViewerWindow::DrawElement() { static Actor* display; static Actor empty{}; static Actor* fetch = NULL; - static ActorInfo newActor = {0,0, {0, 0, 0}, {0, 0, 0}}; + static ActorInfo newActor = { 0, 0, { 0, 0, 0 }, { 0, 0, 0 } }; static bool needs_reset = false; static ImU16 one = 1; static int actor; @@ -948,7 +879,7 @@ void ActorViewerWindow::DrawElement() { actors.clear(); } lastSceneId = gPlayState->sceneNum; - + PushStyleCombobox(THEME_COLOR); if (ImGui::BeginCombo("Actor Type", acMapping[category])) { for (int i = 0; i < acMapping.size(); i++) { @@ -986,37 +917,43 @@ void ActorViewerWindow::DrawElement() { PushStyleHeader(THEME_COLOR); if (ImGui::TreeNode("Selected Actor")) { - DrawGroupWithBorder([&]() { - ImGui::Text("Name: %s", ActorDB::Instance->RetrieveEntry(display->id).name.c_str()); - ImGui::Text("Description: %s", GetActorDescription(display->id).c_str()); - ImGui::Text("Category: %s", acMapping[display->category]); - ImGui::Text("ID: %d", display->id); - ImGui::Text("Parameters: %d", display->params); - }, "Selected Actor"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Name: %s", ActorDB::Instance->RetrieveEntry(display->id).name.c_str()); + ImGui::Text("Description: %s", GetActorDescription(display->id).c_str()); + ImGui::Text("Category: %s", acMapping[display->category]); + ImGui::Text("ID: %d", display->id); + ImGui::Text("Parameters: %d", display->params); + }, + "Selected Actor"); ImGui::SameLine(); ImGui::PushItemWidth(ImGui::GetFontSize() * 6); - DrawGroupWithBorder([&]() { - ImGui::PushItemWidth(ImGui::GetFontSize() * 6); - PushStyleInput(THEME_COLOR); - ImGui::Text("Actor Position"); - ImGui::InputScalar("X##CurPos", ImGuiDataType_Float, &display->world.pos.x); - ImGui::InputScalar("Y##CurPos", ImGuiDataType_Float, &display->world.pos.y); - ImGui::InputScalar("Z##CurPos", ImGuiDataType_Float, &display->world.pos.z); - ImGui::PopItemWidth(); - PopStyleInput(); - }, "Actor Position"); + DrawGroupWithBorder( + [&]() { + ImGui::PushItemWidth(ImGui::GetFontSize() * 6); + PushStyleInput(THEME_COLOR); + ImGui::Text("Actor Position"); + ImGui::InputScalar("X##CurPos", ImGuiDataType_Float, &display->world.pos.x); + ImGui::InputScalar("Y##CurPos", ImGuiDataType_Float, &display->world.pos.y); + ImGui::InputScalar("Z##CurPos", ImGuiDataType_Float, &display->world.pos.z); + ImGui::PopItemWidth(); + PopStyleInput(); + }, + "Actor Position"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - PushStyleInput(THEME_COLOR); - ImGui::PushItemWidth(ImGui::GetFontSize() * 6); - ImGui::Text("Actor Rotation"); - ImGui::InputScalar("X##CurRot", ImGuiDataType_S16, &display->world.rot.x); - ImGui::InputScalar("Y##CurRot", ImGuiDataType_S16, &display->world.rot.y); - ImGui::InputScalar("Z##CurRot", ImGuiDataType_S16, &display->world.rot.z); - ImGui::PopItemWidth(); - PopStyleInput(); - }, "Actor Rotation"); + DrawGroupWithBorder( + [&]() { + PushStyleInput(THEME_COLOR); + ImGui::PushItemWidth(ImGui::GetFontSize() * 6); + ImGui::Text("Actor Rotation"); + ImGui::InputScalar("X##CurRot", ImGuiDataType_S16, &display->world.rot.x); + ImGui::InputScalar("Y##CurRot", ImGuiDataType_S16, &display->world.rot.y); + ImGui::InputScalar("Z##CurRot", ImGuiDataType_S16, &display->world.rot.z); + ImGui::PopItemWidth(); + PopStyleInput(); + }, + "Actor Rotation"); if (display->category == ACTORCAT_BOSS || display->category == ACTORCAT_ENEMY) { PushStyleInput(THEME_COLOR); @@ -1025,17 +962,21 @@ void ActorViewerWindow::DrawElement() { UIWidgets::InsertHelpHoverText("Some actors might not use this!"); } - DrawGroupWithBorder([&]() { - ImGui::Text("flags"); - UIWidgets::DrawFlagArray32("flags", display->flags); - }, "flags"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("flags"); + UIWidgets::DrawFlagArray32("flags", display->flags); + }, + "flags"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("bgCheckFlags"); - UIWidgets::DrawFlagArray16("bgCheckFlags", display->bgCheckFlags); - }, "bgCheckFlags"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("bgCheckFlags"); + UIWidgets::DrawFlagArray16("bgCheckFlags", display->bgCheckFlags); + }, + "bgCheckFlags"); if (Button("Refresh", ButtonOptions().Color(THEME_COLOR))) { PopulateActorDropdown(category, list); @@ -1059,7 +1000,10 @@ void ActorViewerWindow::DrawElement() { Math_Vec3f_Copy(&player->actor.home.pos, &player->actor.world.pos); } - if (Button("Fetch from Target", ButtonOptions().Color(THEME_COLOR).Tooltip("Grabs actor with target arrow above it. You might need C-Up for enemies"))) { + if (Button("Fetch from Target", + ButtonOptions() + .Color(THEME_COLOR) + .Tooltip("Grabs actor with target arrow above it. You might need C-Up for enemies"))) { Player* player = GET_PLAYER(gPlayState); fetch = player->talkActor; if (fetch != NULL) { @@ -1069,7 +1013,8 @@ void ActorViewerWindow::DrawElement() { rm = TARGET; } } - if (Button("Fetch from Held", ButtonOptions().Color(THEME_COLOR).Tooltip("Grabs actor that Link is holding"))) { + if (Button("Fetch from Held", + ButtonOptions().Color(THEME_COLOR).Tooltip("Grabs actor that Link is holding"))) { Player* player = GET_PLAYER(gPlayState); fetch = player->heldActor; if (fetch != NULL) { @@ -1079,7 +1024,8 @@ void ActorViewerWindow::DrawElement() { rm = HELD; } } - if (Button("Fetch from Interaction", ButtonOptions().Color(THEME_COLOR).Tooltip("Grabs actor from \"interaction range\""))) { + if (Button("Fetch from Interaction", + ButtonOptions().Color(THEME_COLOR).Tooltip("Grabs actor from \"interaction range\""))) { Player* player = GET_PLAYER(gPlayState); fetch = player->interactRangeActor; if (fetch != NULL) { @@ -1094,7 +1040,7 @@ void ActorViewerWindow::DrawElement() { } if (ImGui::TreeNode("New...")) { - //ImGui::PushItemWidth(ImGui::GetFontSize() * 10); + // ImGui::PushItemWidth(ImGui::GetFontSize() * 10); if (InputString("Search Actor", &searchString, InputOptions().Color(THEME_COLOR))) { actors = GetActorsWithDescriptionContainingString(searchString); @@ -1102,14 +1048,14 @@ void ActorViewerWindow::DrawElement() { } if (!SohUtils::IsStringEmpty(searchString) && !actors.empty()) { - std::string preview = currentSelectedInDropdown == -1 ? "Please Select" : ActorDB::Instance->RetrieveEntry(actors[currentSelectedInDropdown]).desc; + std::string preview = currentSelectedInDropdown == -1 + ? "Please Select" + : ActorDB::Instance->RetrieveEntry(actors[currentSelectedInDropdown]).desc; PushStyleCombobox(THEME_COLOR); if (ImGui::BeginCombo("Results", preview.c_str())) { for (u8 i = 0; i < actors.size(); i++) { - if (ImGui::Selectable( - ActorDB::Instance->RetrieveEntry(actors[i]).desc.c_str(), - i == currentSelectedInDropdown - )) { + if (ImGui::Selectable(ActorDB::Instance->RetrieveEntry(actors[i]).desc.c_str(), + i == currentSelectedInDropdown)) { currentSelectedInDropdown = i; newActor.id = actors[i]; } @@ -1124,7 +1070,8 @@ void ActorViewerWindow::DrawElement() { newActor.params = 0; } - CVarCheckbox("Advanced mode", CVAR_DEVELOPER_TOOLS("ActorViewer.AdvancedParams"), CheckboxOptions().Tooltip("Changes the actor specific param menus with a direct input")); + CVarCheckbox("Advanced mode", CVAR_DEVELOPER_TOOLS("ActorViewer.AdvancedParams"), + CheckboxOptions().Tooltip("Changes the actor specific param menus with a direct input")); if (CVarGetInteger(CVAR_DEVELOPER_TOOLS("ActorViewer.AdvancedParams"), 0)) { PushStyleInput(THEME_COLOR); @@ -1137,36 +1084,42 @@ void ActorViewerWindow::DrawElement() { ImGui::InputScalar("params", ImGuiDataType_S16, &newActor.params, &one); PopStyleInput(); } else { - DrawGroupWithBorder([&]() { - ImGui::Text("Actor Specific Data"); - newActor.params = actorSpecificData[newActor.id](newActor.params); - }, "Actor Specific Data"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Actor Specific Data"); + newActor.params = actorSpecificData[newActor.id](newActor.params); + }, + "Actor Specific Data"); } } ImGui::PushItemWidth(ImGui::GetFontSize() * 6); - DrawGroupWithBorder([&]() { - PushStyleInput(THEME_COLOR); - ImGui::Text("New Actor Position"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 6); - ImGui::InputScalar("X##NewPos", ImGuiDataType_Float, &newActor.pos.x); - ImGui::InputScalar("Y##NewPos", ImGuiDataType_Float, &newActor.pos.y); - ImGui::InputScalar("Z##NewPos", ImGuiDataType_Float, &newActor.pos.z); - ImGui::PopItemWidth(); - PopStyleInput(); - }, "New Actor Position"); + DrawGroupWithBorder( + [&]() { + PushStyleInput(THEME_COLOR); + ImGui::Text("New Actor Position"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 6); + ImGui::InputScalar("X##NewPos", ImGuiDataType_Float, &newActor.pos.x); + ImGui::InputScalar("Y##NewPos", ImGuiDataType_Float, &newActor.pos.y); + ImGui::InputScalar("Z##NewPos", ImGuiDataType_Float, &newActor.pos.z); + ImGui::PopItemWidth(); + PopStyleInput(); + }, + "New Actor Position"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - PushStyleInput(THEME_COLOR); - ImGui::Text("New Actor Rotation"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 6); - ImGui::InputScalar("X##NewRot", ImGuiDataType_S16, &newActor.rot.x); - ImGui::InputScalar("Y##NewRot", ImGuiDataType_S16, &newActor.rot.y); - ImGui::InputScalar("Z##NewRot", ImGuiDataType_S16, &newActor.rot.z); - ImGui::PopItemWidth(); - PopStyleInput(); - }, "New Actor Rotation"); + DrawGroupWithBorder( + [&]() { + PushStyleInput(THEME_COLOR); + ImGui::Text("New Actor Rotation"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 6); + ImGui::InputScalar("X##NewRot", ImGuiDataType_S16, &newActor.rot.x); + ImGui::InputScalar("Y##NewRot", ImGuiDataType_S16, &newActor.rot.y); + ImGui::InputScalar("Z##NewRot", ImGuiDataType_S16, &newActor.rot.z); + ImGui::PopItemWidth(); + PopStyleInput(); + }, + "New Actor Rotation"); if (Button("Fetch from Link", ButtonOptions().Color(THEME_COLOR))) { Player* player = GET_PLAYER(gPlayState); @@ -1214,8 +1167,9 @@ void ActorViewerWindow::DrawElement() { { 3, "Both" }, }; - if (CVarCombobox("Actor Name Tags", CVAR_DEVELOPER_TOOLS("ActorViewer.NameTags"), nameTagOptions, - ComboboxOptions().Color(THEME_COLOR).Tooltip("Adds \"name tags\" above actors for identification"))) { + if (CVarCombobox( + "Actor Name Tags", CVAR_DEVELOPER_TOOLS("ActorViewer.NameTags"), nameTagOptions, + ComboboxOptions().Color(THEME_COLOR).Tooltip("Adds \"name tags\" above actors for identification"))) { NameTag_RemoveAllByTag(DEBUG_ACTOR_NAMETAG_TAG); ActorViewer_AddTagForAllActors(); } diff --git a/soh/soh/Enhancements/debugger/actorViewer.h b/soh/soh/Enhancements/debugger/actorViewer.h index 2f4ca680a..bab7d1646 100644 --- a/soh/soh/Enhancements/debugger/actorViewer.h +++ b/soh/soh/Enhancements/debugger/actorViewer.h @@ -8,5 +8,5 @@ class ActorViewerWindow : public Ship::GuiWindow { void DrawElement() override; void InitElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; diff --git a/soh/soh/Enhancements/debugger/colViewer.cpp b/soh/soh/Enhancements/debugger/colViewer.cpp index de2272598..e3abba484 100644 --- a/soh/soh/Enhancements/debugger/colViewer.cpp +++ b/soh/soh/Enhancements/debugger/colViewer.cpp @@ -20,7 +20,7 @@ extern "C" { extern PlayState* gPlayState; } -typedef enum ColRenderSetting { ColRenderDisabled, ColRenderSolid, ColRenderTransparent } ColRenderSetting ; +typedef enum ColRenderSetting { ColRenderDisabled, ColRenderSolid, ColRenderTransparent } ColRenderSetting; static std::unordered_map ColRenderSettingNames = { { ColRenderDisabled, "Disabled" }, @@ -68,9 +68,11 @@ void ColViewerWindow::DrawElement() { CVarCombobox("Waterbox", CVAR_DEVELOPER_TOOLS("ColViewer.Waterbox"), ColRenderSettingNames, comboOpt); CVarCheckbox("Apply as decal", CVAR_DEVELOPER_TOOLS("ColViewer.Decal"), - checkOpt.DefaultValue(true).Tooltip("Applies the collision as a decal display. This can be useful if there is z-fighting occuring " - "with the scene geometry, but can cause other artifacts.")); - CVarCheckbox("Shaded", CVAR_DEVELOPER_TOOLS("ColViewer.Shaded"), checkOpt.DefaultValue(false).Tooltip("Applies the scene's shading to the collision display.")); + checkOpt.DefaultValue(true).Tooltip( + "Applies the collision as a decal display. This can be useful if there is z-fighting occuring " + "with the scene geometry, but can cause other artifacts.")); + CVarCheckbox("Shaded", CVAR_DEVELOPER_TOOLS("ColViewer.Shaded"), + checkOpt.DefaultValue(false).Tooltip("Applies the scene's shading to the collision display.")); // This has to be duplicated in both code paths due to the nature of ImGui::IsItemHovered() const std::string colorHelpText = "View and change the colors used for collision display."; @@ -78,38 +80,58 @@ void ColViewerWindow::DrawElement() { if (ImGui::TreeNode("Colors")) { UIWidgets::Tooltip(colorHelpText.c_str()); - if (CVarColorPicker("Normal", CVAR_DEVELOPER_TOOLS("ColViewer.ColorNormal"), { 255, 255, 255, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { - scene_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorNormal"), { 255, 255, 255, 255 })); + if (CVarColorPicker("Normal", CVAR_DEVELOPER_TOOLS("ColViewer.ColorNormal"), { 255, 255, 255, 255 }, false, + ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { + scene_col = + VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorNormal"), { 255, 255, 255, 255 })); } - if (CVarColorPicker("Hookshot", CVAR_DEVELOPER_TOOLS("ColViewer.ColorHookshot"), { 128, 128, 255, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { - hookshot_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorHookshot"), { 128, 128, 255, 255 })); + if (CVarColorPicker("Hookshot", CVAR_DEVELOPER_TOOLS("ColViewer.ColorHookshot"), { 128, 128, 255, 255 }, false, + ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { + hookshot_col = + VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorHookshot"), { 128, 128, 255, 255 })); } - if (CVarColorPicker("Entrance", CVAR_DEVELOPER_TOOLS("ColViewer.ColorEntrance"), { 0, 255, 0, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { - entrance_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorEntrance"), { 0, 255, 0, 255 })); + if (CVarColorPicker("Entrance", CVAR_DEVELOPER_TOOLS("ColViewer.ColorEntrance"), { 0, 255, 0, 255 }, false, + ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { + entrance_col = + VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorEntrance"), { 0, 255, 0, 255 })); } - if (CVarColorPicker("Special Surface (Grass/Sand/Etc)", CVAR_DEVELOPER_TOOLS("ColViewer.ColorSpecialSurface"), { 192, 255, 192, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { - specialSurface_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorSpecialSurface"), { 192, 255, 192, 255 })); + if (CVarColorPicker("Special Surface (Grass/Sand/Etc)", CVAR_DEVELOPER_TOOLS("ColViewer.ColorSpecialSurface"), + { 192, 255, 192, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, + THEME_COLOR)) { + specialSurface_col = VecFromRGBA8( + CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorSpecialSurface"), { 192, 255, 192, 255 })); } - if (CVarColorPicker("Interactable (Vines/Crawlspace/Etc)", CVAR_DEVELOPER_TOOLS("ColViewer.ColorInteractable"), { 192, 0, 192, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { - interactable_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorInteractable"), { 192, 0, 192, 255 })); + if (CVarColorPicker("Interactable (Vines/Crawlspace/Etc)", CVAR_DEVELOPER_TOOLS("ColViewer.ColorInteractable"), + { 192, 0, 192, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, + THEME_COLOR)) { + interactable_col = + VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorInteractable"), { 192, 0, 192, 255 })); } - if (CVarColorPicker("Slope", CVAR_DEVELOPER_TOOLS("ColViewer.ColorSlope"), { 255, 255, 128, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { - slope_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorSlope"), { 255, 255, 128, 255 })); + if (CVarColorPicker("Slope", CVAR_DEVELOPER_TOOLS("ColViewer.ColorSlope"), { 255, 255, 128, 255 }, false, + ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { + slope_col = + VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorSlope"), { 255, 255, 128, 255 })); } - if (CVarColorPicker("Void", CVAR_DEVELOPER_TOOLS("ColViewer.ColorVoid"), { 255, 0, 0, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { + if (CVarColorPicker("Void", CVAR_DEVELOPER_TOOLS("ColViewer.ColorVoid"), { 255, 0, 0, 255 }, false, + ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { void_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorVoid"), { 255, 0, 0, 255 })); } - if (CVarColorPicker("OC", CVAR_DEVELOPER_TOOLS("ColViewer.ColorOC"), { 255, 255, 255, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { + if (CVarColorPicker("OC", CVAR_DEVELOPER_TOOLS("ColViewer.ColorOC"), { 255, 255, 255, 255 }, false, + ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { oc_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorOC"), { 255, 255, 255, 255 })); } - if (CVarColorPicker("AC", CVAR_DEVELOPER_TOOLS("ColViewer.ColorAC"), { 0, 0, 255, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { + if (CVarColorPicker("AC", CVAR_DEVELOPER_TOOLS("ColViewer.ColorAC"), { 0, 0, 255, 255 }, false, + ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { ac_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorAC"), { 0, 0, 255, 255 })); } - if (CVarColorPicker("AT", CVAR_DEVELOPER_TOOLS("ColViewer.ColorAT"), { 255, 0, 0, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { + if (CVarColorPicker("AT", CVAR_DEVELOPER_TOOLS("ColViewer.ColorAT"), { 255, 0, 0, 255 }, false, + ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { at_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorAT"), { 255, 0, 0, 255 })); } - if (CVarColorPicker("Waterbox", CVAR_DEVELOPER_TOOLS("ColViewer.ColorWaterbox"), { 0, 0, 255, 255 }, false, ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { - waterbox_col = VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorWaterbox"), { 0, 0, 255, 255 })); + if (CVarColorPicker("Waterbox", CVAR_DEVELOPER_TOOLS("ColViewer.ColorWaterbox"), { 0, 0, 255, 255 }, false, + ColorPickerResetButton | ColorPickerRandomButton, THEME_COLOR)) { + waterbox_col = + VecFromRGBA8(CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorWaterbox"), { 0, 0, 255, 255 })); } ImGui::TreePop(); @@ -210,9 +232,9 @@ void CreateSphereFace(std::vector>& faces, in // Create 3 new verticies at the midpoints Vec3f vs[3] = { - Vec3f{(v0.n.ob[0] + v1.n.ob[0]) / 2.0f, (v0.n.ob[1] + v1.n.ob[1]) / 2.0f, (v0.n.ob[2] + v1.n.ob[2]) / 2.0f}, - Vec3f{(v1.n.ob[0] + v2.n.ob[0]) / 2.0f, (v1.n.ob[1] + v2.n.ob[1]) / 2.0f, (v1.n.ob[2] + v2.n.ob[2]) / 2.0f}, - Vec3f{(v2.n.ob[0] + v0.n.ob[0]) / 2.0f, (v2.n.ob[1] + v0.n.ob[1]) / 2.0f, (v2.n.ob[2] + v0.n.ob[2]) / 2.0f} + Vec3f{ (v0.n.ob[0] + v1.n.ob[0]) / 2.0f, (v0.n.ob[1] + v1.n.ob[1]) / 2.0f, (v0.n.ob[2] + v1.n.ob[2]) / 2.0f }, + Vec3f{ (v1.n.ob[0] + v2.n.ob[0]) / 2.0f, (v1.n.ob[1] + v2.n.ob[1]) / 2.0f, (v1.n.ob[2] + v2.n.ob[2]) / 2.0f }, + Vec3f{ (v2.n.ob[0] + v0.n.ob[0]) / 2.0f, (v2.n.ob[1] + v0.n.ob[1]) / 2.0f, (v2.n.ob[2] + v0.n.ob[2]) / 2.0f } }; // Normalize vertex positions so they are on the sphere @@ -237,20 +259,20 @@ void CreateSphereData() { float d = (1.0f + sqrtf(5.0f)) / 2.0f; // Create the 12 starting verticies, 4 on each rectangle - base.emplace_back(Vec3f({-1, d, 0})); - base.emplace_back(Vec3f({1, d, 0})); - base.emplace_back(Vec3f({-1, -d, 0})); - base.emplace_back(Vec3f({1, -d, 0})); + base.emplace_back(Vec3f({ -1, d, 0 })); + base.emplace_back(Vec3f({ 1, d, 0 })); + base.emplace_back(Vec3f({ -1, -d, 0 })); + base.emplace_back(Vec3f({ 1, -d, 0 })); - base.emplace_back(Vec3f({0, -1, d})); - base.emplace_back(Vec3f({0, 1, d})); - base.emplace_back(Vec3f({0, -1, -d})); - base.emplace_back(Vec3f({0, 1, -d})); + base.emplace_back(Vec3f({ 0, -1, d })); + base.emplace_back(Vec3f({ 0, 1, d })); + base.emplace_back(Vec3f({ 0, -1, -d })); + base.emplace_back(Vec3f({ 0, 1, -d })); - base.emplace_back(Vec3f({d, 0, -1})); - base.emplace_back(Vec3f({d, 0, 1})); - base.emplace_back(Vec3f({-d, 0, -1})); - base.emplace_back(Vec3f({-d, 0, 1})); + base.emplace_back(Vec3f({ d, 0, -1 })); + base.emplace_back(Vec3f({ d, 0, 1 })); + base.emplace_back(Vec3f({ -d, 0, -1 })); + base.emplace_back(Vec3f({ -d, 0, 1 })); // Normalize verticies so they are on the unit sphere for (Vec3f& v : base) { @@ -349,7 +371,7 @@ void InitGfx(std::vector& gfx, ColRenderSetting setting) { // Draws a dynapoly structure (scenes or Bg Actors) void DrawDynapoly(std::vector& dl, CollisionHeader* col, int32_t bgId) { - Color_RGBA8 color = {255, 255, 255, 255}; + Color_RGBA8 color = { 255, 255, 255, 255 }; uint32_t lastColorR = color.r; uint32_t lastColorG = color.g; @@ -367,7 +389,7 @@ void DrawDynapoly(std::vector& dl, CollisionHeader* col, int32_t bgId) { if (SurfaceType_IsHookshotSurface(&gPlayState->colCtx, poly, bgId)) { color = CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorHookshot.Value"), { 128, 128, 255, 255 }); } else if (func_80041D94(&gPlayState->colCtx, poly, bgId) > 0x01) { - color = CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorInteractable.Value"), {192, 0, 192, 255}); + color = CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorInteractable.Value"), { 192, 0, 192, 255 }); } else if (func_80041E80(&gPlayState->colCtx, poly, bgId) == 0x0C) { color = CVarGetColor(CVAR_DEVELOPER_TOOLS("ColViewer.ColorVoid.Value"), { 255, 0, 0, 255 }); } else if (SurfaceType_GetSceneExitIndex(&gPlayState->colCtx, poly, bgId) || @@ -427,7 +449,8 @@ void DrawDynapoly(std::vector& dl, CollisionHeader* col, int32_t bgId) { // Draws the scene void DrawSceneCollision() { - ColRenderSetting showSceneColSetting = (ColRenderSetting)CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Scene"), COLVIEW_DISABLED); + ColRenderSetting showSceneColSetting = + (ColRenderSetting)CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Scene"), COLVIEW_DISABLED); if (showSceneColSetting == ColRenderDisabled || !CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Enabled"), 0)) { return; @@ -442,7 +465,8 @@ void DrawSceneCollision() { // Draws all Bg Actors void DrawBgActorCollision() { - ColRenderSetting showBgActorSetting = (ColRenderSetting)CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.BGActors"), COLVIEW_DISABLED); + ColRenderSetting showBgActorSetting = + (ColRenderSetting)CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.BGActors"), COLVIEW_DISABLED); if (showBgActorSetting == ColRenderDisabled || !CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Enabled"), 0)) { return; } @@ -567,7 +591,8 @@ void DrawColCheckList(std::vector& dl, Collider** objects, int32_t count) { // Draws all Col Check objects void DrawColCheckCollision() { - ColRenderSetting showColCheckSetting = (ColRenderSetting)CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.ColCheck"), COLVIEW_DISABLED); + ColRenderSetting showColCheckSetting = + (ColRenderSetting)CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.ColCheck"), COLVIEW_DISABLED); if (showColCheckSetting == ColRenderDisabled || !CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Enabled"), 0)) { return; } @@ -619,7 +644,8 @@ extern "C" f32 zdWaterBoxMinY; // Draws all waterboxes void DrawWaterboxList() { - ColRenderSetting showWaterboxSetting = (ColRenderSetting)CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Waterbox"), COLVIEW_DISABLED); + ColRenderSetting showWaterboxSetting = + (ColRenderSetting)CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Waterbox"), COLVIEW_DISABLED); if (showWaterboxSetting == ColRenderDisabled || !CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Enabled"), 0)) { return; } diff --git a/soh/soh/Enhancements/debugger/colViewer.h b/soh/soh/Enhancements/debugger/colViewer.h index b4807e873..eeaca7e43 100644 --- a/soh/soh/Enhancements/debugger/colViewer.h +++ b/soh/soh/Enhancements/debugger/colViewer.h @@ -2,11 +2,7 @@ #include -typedef enum { - COLVIEW_DISABLED, - COLVIEW_SOLID, - COLVIEW_TRANSPARENT -} ColViewerRenderSetting; +typedef enum { COLVIEW_DISABLED, COLVIEW_SOLID, COLVIEW_TRANSPARENT } ColViewerRenderSetting; #ifdef __cplusplus class ColViewerWindow : public Ship::GuiWindow { @@ -15,7 +11,7 @@ class ColViewerWindow : public Ship::GuiWindow { void InitElement() override; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; #endif diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index 0e9bbc79a..534201f8e 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -74,11 +74,11 @@ u8 gAllAmmoItems[] = { }; // Encapsulates what is drawn by the passed-in function within a border -template -void DrawGroupWithBorder(T&& drawFunc, std::string section) { +template void DrawGroupWithBorder(T&& drawFunc, std::string section) { // First group encapsulates the inner portion and border ImGui::BeginChild(std::string("##" + section).c_str(), ImVec2(0, 0), - ImGuiChildFlags_AlwaysAutoResize | ImGuiChildFlags_Borders | ImGuiChildFlags_AutoResizeX | ImGuiChildFlags_AutoResizeY); + ImGuiChildFlags_AlwaysAutoResize | ImGuiChildFlags_Borders | ImGuiChildFlags_AutoResizeX | + ImGuiChildFlags_AutoResizeY); ImGui::BeginGroup(); ImGui::AlignTextToFramePadding(); @@ -90,13 +90,13 @@ void DrawGroupWithBorder(T&& drawFunc, std::string section) { char z2ASCII(int code) { int ret; - if (code < 10) { //Digits + if (code < 10) { // Digits ret = code + 0x30; - } else if (code >= 10 && code < 36) { //Uppercase letters + } else if (code >= 10 && code < 36) { // Uppercase letters ret = code + 0x37; - } else if (code >= 36 && code < 62) { //Lowercase letters + } else if (code >= 36 && code < 62) { // Lowercase letters ret = code + 0x3D; - } else if (code == 62) { //Space + } else if (code == 62) { // Space ret = code - 0x1E; } else if (code == 63 || code == 64) { // _ and . ret = code - 0x12; @@ -104,17 +104,12 @@ char z2ASCII(int code) { ret = code; } return char(ret); - } -typedef enum MagicLevel { - MAGIC_LEVEL_NONE, - MAGIC_LEVEL_SINGLE, - MAGIC_LEVEL_DOUBLE -}; +typedef enum MagicLevel { MAGIC_LEVEL_NONE, MAGIC_LEVEL_SINGLE, MAGIC_LEVEL_DOUBLE }; std::unordered_map magicLevelMap = { - { MAGIC_LEVEL_NONE, "None" }, + { MAGIC_LEVEL_NONE, "None" }, { MAGIC_LEVEL_SINGLE, "Single" }, { MAGIC_LEVEL_DOUBLE, "Double" }, }; @@ -182,18 +177,22 @@ void DrawInfoTab() { gSaveContext.health = gSaveContext.healthCapacity; // Clamp health to new max } int32_t health = (int32_t)gSaveContext.health; - if (SliderInt("Health", &health, intSliderOptionsBase.Tooltip("Current health. 16 units per full heart") - .Min(0).Max(gSaveContext.healthCapacity))) { + if (SliderInt("Health", &health, + intSliderOptionsBase.Tooltip("Current health. 16 units per full heart") + .Min(0) + .Max(gSaveContext.healthCapacity))) { gSaveContext.health = (int16_t)health; } bool isDoubleDefenseAcquired = gSaveContext.isDoubleDefenseAcquired != 0; - if (Checkbox("Double Defense", &isDoubleDefenseAcquired, checkboxOptionsBase.Tooltip("Is double defense unlocked?"))) { + if (Checkbox("Double Defense", &isDoubleDefenseAcquired, + checkboxOptionsBase.Tooltip("Is double defense unlocked?"))) { gSaveContext.isDoubleDefenseAcquired = isDoubleDefenseAcquired; gSaveContext.inventory.defenseHearts = gSaveContext.isDoubleDefenseAcquired ? 20 : 0; // Set to get the border drawn in the UI } - if (Combobox("Magic Level", &gSaveContext.magicLevel, magicLevelMap, comboboxOptionsBase.Tooltip("Current magic level"))) { + if (Combobox("Magic Level", &gSaveContext.magicLevel, magicLevelMap, + comboboxOptionsBase.Tooltip("Current magic level"))) { gSaveContext.isMagicAcquired = gSaveContext.magicLevel > 0; gSaveContext.isDoubleMagicAcquired = gSaveContext.magicLevel == 2; } @@ -203,7 +202,10 @@ void DrawInfoTab() { } int32_t magic = (int32_t)gSaveContext.magic; - if (SliderInt("Magic", &magic, intSliderOptionsBase.Min(0).Max(gSaveContext.magicCapacity).Tooltip("Current magic. 48 units per magic level"))) { + if (SliderInt("Magic", &magic, + intSliderOptionsBase.Min(0) + .Max(gSaveContext.magicCapacity) + .Tooltip("Current magic. 48 units per magic level"))) { gSaveContext.magic = (int8_t)magic; } @@ -212,7 +214,7 @@ void DrawInfoTab() { Tooltip("Current rupees"); PopStyleInput(); - SliderInt("Time", (int32_t*) &gSaveContext.dayTime, intSliderOptionsBase.Min(0).Max(0xFFFF).Tooltip("Time of day")); + SliderInt("Time", (int32_t*)&gSaveContext.dayTime, intSliderOptionsBase.Min(0).Max(0xFFFF).Tooltip("Time of day")); if (Button("Dawn", buttonOptionsBase)) { gSaveContext.dayTime = 0x4000; } @@ -239,7 +241,8 @@ void DrawInfoTab() { Tooltip("Total number of deaths"); PopStyleInput(); - Checkbox("Has BGS", (bool*) &gSaveContext.bgsFlag, checkboxOptionsBase.Tooltip("Is Biggoron sword unlocked? Replaces Giant's knife")); + Checkbox("Has BGS", (bool*)&gSaveContext.bgsFlag, + checkboxOptionsBase.Tooltip("Is Biggoron sword unlocked? Replaces Giant's knife")); PushStyleInput(THEME_COLOR); ImGui::InputScalar("Sword Health", ImGuiDataType_U16, &gSaveContext.swordHealth); @@ -267,118 +270,128 @@ void DrawInfoTab() { PopStyleInput(); PushStyleInput(THEME_COLOR); - ImGui::InputScalar("Timer 1 State", ImGuiDataType_S16, &gSaveContext.timer1State); + ImGui::InputScalar("Timer State", ImGuiDataType_S16, &gSaveContext.timerState); Tooltip("Heat timer, race timer, etc. Has white font"); PopStyleInput(); PushStyleInput(THEME_COLOR); - ImGui::InputScalar("Timer 1 Value", ImGuiDataType_S16, &gSaveContext.timer1Value, &one, NULL); + ImGui::InputScalar("Timer Seconds", ImGuiDataType_S16, &gSaveContext.timerSeconds, &one, NULL); Tooltip("Time, in seconds"); PopStyleInput(); PushStyleInput(THEME_COLOR); - ImGui::InputScalar("Timer 2 State", ImGuiDataType_S16, &gSaveContext.timer2State); + ImGui::InputScalar("Sub-Timer State", ImGuiDataType_S16, &gSaveContext.subTimerState); Tooltip("Trade timer, Ganon collapse timer, etc. Has yellow font"); PopStyleInput(); PushStyleInput(THEME_COLOR); - ImGui::InputScalar("Timer 2 Value", ImGuiDataType_S16, &gSaveContext.timer2Value, &one, NULL); + ImGui::InputScalar("Sub-Timer Seconds", ImGuiDataType_S16, &gSaveContext.subTimerSeconds, &one, NULL); Tooltip("Time, in seconds"); PopStyleInput(); Combobox("Audio", &gSaveContext.audioSetting, audioMap, comboboxOptionsBase.Tooltip("Sound setting")); - - Checkbox("64 DD file?", (bool*) &gSaveContext.n64ddFlag, checkboxOptionsBase.Tooltip("WARNING! If you save, your file may be locked! Use caution!")); - - Combobox("Z Target Mode", &gSaveContext.zTargetSetting, zTargetMap, comboboxOptionsBase.Tooltip("Z-Targeting behavior")); + + Checkbox("64 DD file?", (bool*)&gSaveContext.n64ddFlag, + checkboxOptionsBase.Tooltip("WARNING! If you save, your file may be locked! Use caution!")); + + Combobox("Z Target Mode", &gSaveContext.zTargetSetting, zTargetMap, + comboboxOptionsBase.Tooltip("Z-Targeting behavior")); if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT)) { PushStyleInput(THEME_COLOR); - ImGui::InputScalar("Triforce Pieces", ImGuiDataType_U8, &gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected); + ImGui::InputScalar("Triforce Pieces", ImGuiDataType_U8, + &gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected); Tooltip("Currently obtained Triforce Pieces. For Triforce Hunt."); PopStyleInput(); } ImGui::PushItemWidth(ImGui::GetFontSize() * 10); - static std::array minigameHS = { "Horseback Archery", - "Big Poe Points", - "Fishing", - "Malon's Obstacle Course", - "Running Man Race", - "?", - "Dampe's Race" }; - + static std::array minigameHS = { "Horseback Archery", "Big Poe Points", + "Fishing", "Malon's Obstacle Course", + "Running Man Race", "?", + "Dampe's Race" }; + if (ImGui::TreeNode("Minigames")) { for (int i = 0; i < 7; i++) { - if(i == 2 && ImGui::TreeNode("Fishing") ){ //fishing has a few more flags to it + if (i == 2 && ImGui::TreeNode("Fishing")) { // fishing has a few more flags to it u8 fishSize = gSaveContext.highScores[i] & 0x7F; PushStyleInput(THEME_COLOR); - if(ImGui::InputScalar("Child Size Record",ImGuiDataType_U8,&fishSize)){ - gSaveContext.highScores[i]&=~0x7F; - gSaveContext.highScores[i]|=fishSize & 0x7F; + if (ImGui::InputScalar("Child Size Record", ImGuiDataType_U8, &fishSize)) { + gSaveContext.highScores[i] &= ~0x7F; + gSaveContext.highScores[i] |= fishSize & 0x7F; } char fishMsg[64]; - std::sprintf(fishMsg,"Weight: %2.0f lbs",((SQ(fishSize)*.0036)+.5)); + std::sprintf(fishMsg, "Weight: %2.0f lbs", ((SQ(fishSize) * .0036) + .5)); Tooltip(fishMsg); PopStyleInput(); - bool FishBool = gSaveContext.highScores[i]&0x80; - if (Checkbox("Cheated as Child", &FishBool, checkboxOptionsBase.Tooltip("Used the Sinking lure to catch it."))) { - gSaveContext.highScores[i] &= ~0x80; - gSaveContext.highScores[i] |= (0x80 * FishBool); + bool FishBool = gSaveContext.highScores[i] & 0x80; + if (Checkbox("Cheated as Child", &FishBool, + checkboxOptionsBase.Tooltip("Used the Sinking lure to catch it."))) { + gSaveContext.highScores[i] &= ~0x80; + gSaveContext.highScores[i] |= (0x80 * FishBool); } - fishSize=(gSaveContext.highScores[i] & 0x7F000000)>>0x18; + fishSize = (gSaveContext.highScores[i] & 0x7F000000) >> 0x18; PushStyleInput(THEME_COLOR); - if(ImGui::InputScalar("Adult Size Record",ImGuiDataType_U8,&fishSize)){ - gSaveContext.highScores[i]&=~0x7F000000; - gSaveContext.highScores[i]|=(fishSize & 0x7F) << 0x18; + if (ImGui::InputScalar("Adult Size Record", ImGuiDataType_U8, &fishSize)) { + gSaveContext.highScores[i] &= ~0x7F000000; + gSaveContext.highScores[i] |= (fishSize & 0x7F) << 0x18; } - std::sprintf(fishMsg,"Weight: %2.0f lbs",((SQ(fishSize)*.0036)+.5)); + std::sprintf(fishMsg, "Weight: %2.0f lbs", ((SQ(fishSize) * .0036) + .5)); Tooltip(fishMsg); PopStyleInput(); FishBool = gSaveContext.highScores[i] & 0x80000000; - if (Checkbox("Cheated as Adult", &FishBool, checkboxOptionsBase.Tooltip("Used the Sinking lure to catch it."))) { - gSaveContext.highScores[i] &= ~0x80000000; - gSaveContext.highScores[i] |= (0x80000000 * FishBool); + if (Checkbox("Cheated as Adult", &FishBool, + checkboxOptionsBase.Tooltip("Used the Sinking lure to catch it."))) { + gSaveContext.highScores[i] &= ~0x80000000; + gSaveContext.highScores[i] |= (0x80000000 * FishBool); } - FishBool = gSaveContext.highScores[i]&0x100; - if (Checkbox("Played as Child", &FishBool, checkboxOptionsBase.Tooltip("Played at least one game as a child"))) { - gSaveContext.highScores[i] &= ~0x100; - gSaveContext.highScores[i] |= (0x100 * FishBool); + FishBool = gSaveContext.highScores[i] & 0x100; + if (Checkbox("Played as Child", &FishBool, + checkboxOptionsBase.Tooltip("Played at least one game as a child"))) { + gSaveContext.highScores[i] &= ~0x100; + gSaveContext.highScores[i] |= (0x100 * FishBool); } - FishBool = gSaveContext.highScores[i]&0x200; - if (Checkbox("Played as Adult", &FishBool, checkboxOptionsBase.Tooltip("Played at least one game as an adult"))) { - gSaveContext.highScores[i] &= ~0x200; - gSaveContext.highScores[i] |= (0x200 * FishBool); + FishBool = gSaveContext.highScores[i] & 0x200; + if (Checkbox("Played as Adult", &FishBool, + checkboxOptionsBase.Tooltip("Played at least one game as an adult"))) { + gSaveContext.highScores[i] &= ~0x200; + gSaveContext.highScores[i] |= (0x200 * FishBool); } - FishBool = gSaveContext.highScores[i]&0x400; - if (Checkbox("Got Prize as Child", &FishBool, checkboxOptionsBase.Tooltip("Got the prize item (Heart Piece, unless rando.)\nunlocks Sinking Lure for Child Link."))) { - gSaveContext.highScores[i] &= ~0x400; - gSaveContext.highScores[i] |= (0x400 * FishBool); + FishBool = gSaveContext.highScores[i] & 0x400; + if (Checkbox( + "Got Prize as Child", &FishBool, + checkboxOptionsBase.Tooltip( + "Got the prize item (Heart Piece, unless rando.)\nunlocks Sinking Lure for Child Link."))) { + gSaveContext.highScores[i] &= ~0x400; + gSaveContext.highScores[i] |= (0x400 * FishBool); } - FishBool = gSaveContext.highScores[i]&0x800; - if (Checkbox("Got Prize as Adult", &FishBool, checkboxOptionsBase.Tooltip("Got the prize item (Golden Scale, unless rando.)\nUnlocks Sinking Lure for Adult Link."))) { - gSaveContext.highScores[i] &= ~0x800; - gSaveContext.highScores[i] |= (0x800 * FishBool); + FishBool = gSaveContext.highScores[i] & 0x800; + if (Checkbox("Got Prize as Adult", &FishBool, + checkboxOptionsBase.Tooltip("Got the prize item (Golden Scale, unless rando.)\nUnlocks " + "Sinking Lure for Adult Link."))) { + gSaveContext.highScores[i] &= ~0x800; + gSaveContext.highScores[i] |= (0x800 * FishBool); } FishBool = gSaveContext.highScores[i] & 0x1000; - if (Checkbox("Stole Owner's Hat", &FishBool, checkboxOptionsBase.Tooltip("The owner's now visibly bald when Adult Link."))) { - gSaveContext.highScores[i] &= ~0x1000; - gSaveContext.highScores[i] |= (0x1000 * FishBool); + if (Checkbox("Stole Owner's Hat", &FishBool, + checkboxOptionsBase.Tooltip("The owner's now visibly bald when Adult Link."))) { + gSaveContext.highScores[i] &= ~0x1000; + gSaveContext.highScores[i] |= (0x1000 * FishBool); } - fishSize=(gSaveContext.highScores[i] & 0xFF0000)>>16; + fishSize = (gSaveContext.highScores[i] & 0xFF0000) >> 16; PushStyleInput(THEME_COLOR); - if(ImGui::InputScalar("Times Played",ImGuiDataType_U8,&fishSize)){ - gSaveContext.highScores[i]&=~0xFF0000; - gSaveContext.highScores[i]|=(fishSize) << 16; + if (ImGui::InputScalar("Times Played", ImGuiDataType_U8, &fishSize)) { + gSaveContext.highScores[i] &= ~0xFF0000; + gSaveContext.highScores[i] |= (fishSize) << 16; } Tooltip("Determines weather and school size during dawn/dusk."); PopStyleInput(); - + ImGui::TreePop(); continue; } - - if (i == 5 || i == 2) { //HS_UNK_05 is unused + + if (i == 5 || i == 2) { // HS_UNK_05 is unused continue; } std::string minigameLbl = minigameHS[i]; @@ -386,10 +399,10 @@ void DrawInfoTab() { ImGui::InputScalar(minigameLbl.c_str(), ImGuiDataType_S32, &gSaveContext.highScores[i], &one, NULL); PopStyleInput(); } - + ImGui::TreePop(); } - + ImGui::PopItemWidth(); } @@ -402,7 +415,9 @@ void DrawBGSItemFlag(uint8_t itemID) { void DrawInventoryTab() { static bool restrictToValid = true; - Checkbox("Restrict to valid items", &restrictToValid, checkboxOptionsBase.Tooltip("Restricts items and ammo to only what is possible to legally acquire in-game")); + Checkbox( + "Restrict to valid items", &restrictToValid, + checkboxOptionsBase.Tooltip("Restricts items and ammo to only what is possible to legally acquire in-game")); for (int32_t y = 0; y < 4; y++) { for (int32_t x = 0; x < 6; x++) { @@ -420,8 +435,10 @@ void DrawInventoryTab() { PushStyleButton(Colors::DarkGray); if (item != ITEM_NONE) { const ItemMapEntry& slotEntry = itemMapping.find(item)->second; - auto ret = ImGui::ImageButton(slotEntry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), - ImVec2(48.0f, 48.0f), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton( + slotEntry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), + ImVec2(48.0f, 48.0f), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { selectedIndex = index; ImGui::OpenPopup(itemPopupPicker); @@ -437,7 +454,8 @@ void DrawInventoryTab() { ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); if (ImGui::BeginPopup(itemPopupPicker)) { PushStyleButton(Colors::DarkGray); - if (ImGui::Button("##itemNonePicker", ImVec2(IMAGE_SIZE, IMAGE_SIZE) + ImGui::GetStyle().FramePadding * 2)) { + if (ImGui::Button("##itemNonePicker", + ImVec2(IMAGE_SIZE, IMAGE_SIZE) + ImGui::GetStyle().FramePadding * 2)) { gSaveContext.inventory.items[selectedIndex] = ITEM_NONE; ImGui::CloseCurrentPopup(); } @@ -468,8 +486,10 @@ void DrawInventoryTab() { } const ItemMapEntry& slotEntry = possibleItems[pickerIndex]; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(slotEntry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton( + slotEntry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); PopStyleButton(); if (ret) { gSaveContext.inventory.items[selectedIndex] = slotEntry.id; @@ -501,7 +521,8 @@ void DrawInventoryTab() { ImGui::PushItemWidth(IMAGE_SIZE); ImGui::BeginGroup(); - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(itemMapping[item].name), ImVec2(IMAGE_SIZE, IMAGE_SIZE)); + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(itemMapping[item].name), + ImVec2(IMAGE_SIZE, IMAGE_SIZE)); PushStyleInput(THEME_COLOR); ImGui::InputScalar("##ammoInput", ImGuiDataType_S8, &AMMO(item)); PopStyleInput(); @@ -511,11 +532,11 @@ void DrawInventoryTab() { ImGui::PopID(); } } - + // Trade quest flags are only used when shuffling the trade sequence, so // don't show this if it isn't needed. - if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ADULT_TRADE) - && ImGui::TreeNode("Adult trade quest items")) { + if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ADULT_TRADE) && + ImGui::TreeNode("Adult trade quest items")) { for (int i = ITEM_POCKET_EGG; i <= ITEM_CLAIM_CHECK; i++) { DrawBGSItemFlag(i); } @@ -532,7 +553,7 @@ void DrawFlagTableArray16(const FlagTable& flagTable, uint16_t row, uint16_t& fl bool hasDescription = !!flagTable.flagDescriptions.contains(row * 16 + flagIndex); uint32_t bitMask = 1 << flagIndex; ImVec4 themeColor = ColorValues.at(THEME_COLOR); - ImVec4 colorDark = { themeColor.x * 0.4f, themeColor.y * 0.4f, themeColor.z * 0.4f , themeColor.z }; + ImVec4 colorDark = { themeColor.x * 0.4f, themeColor.y * 0.4f, themeColor.z * 0.4f, themeColor.z }; PushStyleCheckbox(hasDescription ? themeColor : colorDark); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(4.0f, 3.0f)); bool flag = (flags & bitMask) != 0; @@ -560,158 +581,182 @@ void DrawFlagsTab() { if (gPlayState != nullptr) { Player* player = GET_PLAYER(gPlayState); - DrawGroupWithBorder([&]() { - ImGui::Text("stateFlags1"); - DrawFlagArray32("stateFlags1", player->stateFlags1, THEME_COLOR); - }, "stateFlags1"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("stateFlags1"); + DrawFlagArray32("stateFlags1", player->stateFlags1, THEME_COLOR); + }, + "stateFlags1"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("stateFlags2"); - DrawFlagArray32("stateFlags2", player->stateFlags2, THEME_COLOR); - }, "stateFlags2"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("stateFlags2"); + DrawFlagArray32("stateFlags2", player->stateFlags2, THEME_COLOR); + }, + "stateFlags2"); + + DrawGroupWithBorder( + [&]() { + ImGui::Text("stateFlags3"); + DrawFlagArray8("stateFlags3", player->stateFlags3, THEME_COLOR); + }, + "stateFlags3"); - DrawGroupWithBorder([&]() { - ImGui::Text("stateFlags3"); - DrawFlagArray8("stateFlags3", player->stateFlags3, THEME_COLOR); - }, "stateFlags3"); - ImGui::SameLine(); - - DrawGroupWithBorder([&]() { - ImGui::Text("unk_6AE_rotFlags"); - DrawFlagArray16("unk_6AE_rotFlags", player->unk_6AE_rotFlags, THEME_COLOR); - }, "unk_6AE_rotFlags"); + + DrawGroupWithBorder( + [&]() { + ImGui::Text("unk_6AE_rotFlags"); + DrawFlagArray16("unk_6AE_rotFlags", player->unk_6AE_rotFlags, THEME_COLOR); + }, + "unk_6AE_rotFlags"); } ImGui::TreePop(); } if (ImGui::TreeNode("Current Scene")) { if (gPlayState != nullptr) { ActorContext* act = &gPlayState->actorCtx; - DrawGroupWithBorder([&]() { - ImGui::Text("Switch"); - InsertHelpHoverText("Permanently-saved switch flags"); - if (Button("Set All##Switch", buttonOptionsBase.Tooltip(""))) { - act->flags.swch = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Switch", buttonOptionsBase.Tooltip(""))) { - act->flags.swch = 0; - } - DrawFlagArray32("Switch", act->flags.swch, THEME_COLOR); - }, "Switch"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Switch"); + InsertHelpHoverText("Permanently-saved switch flags"); + if (Button("Set All##Switch", buttonOptionsBase.Tooltip(""))) { + act->flags.swch = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Switch", buttonOptionsBase.Tooltip(""))) { + act->flags.swch = 0; + } + DrawFlagArray32("Switch", act->flags.swch, THEME_COLOR); + }, + "Switch"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Temp Switch"); - InsertHelpHoverText("Temporary switch flags. Unset on scene transitions"); - if (Button("Set All##Temp Switch", buttonOptionsBase.Tooltip(""))) { - act->flags.tempSwch = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Temp Switch", buttonOptionsBase.Tooltip(""))) { - act->flags.tempSwch = 0; - } - DrawFlagArray32("Temp Switch", act->flags.tempSwch, THEME_COLOR); - }, "Temp Switch"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Temp Switch"); + InsertHelpHoverText("Temporary switch flags. Unset on scene transitions"); + if (Button("Set All##Temp Switch", buttonOptionsBase.Tooltip(""))) { + act->flags.tempSwch = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Temp Switch", buttonOptionsBase.Tooltip(""))) { + act->flags.tempSwch = 0; + } + DrawFlagArray32("Temp Switch", act->flags.tempSwch, THEME_COLOR); + }, + "Temp Switch"); - DrawGroupWithBorder([&]() { - ImGui::Text("Clear"); - InsertHelpHoverText("Permanently-saved room-clear flags"); - if (Button("Set All##Clear", buttonOptionsBase.Tooltip(""))) { - act->flags.clear = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Clear", buttonOptionsBase.Tooltip(""))) { - act->flags.clear = 0; - } - DrawFlagArray32("Clear", act->flags.clear, THEME_COLOR); - }, "Clear"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Clear"); + InsertHelpHoverText("Permanently-saved room-clear flags"); + if (Button("Set All##Clear", buttonOptionsBase.Tooltip(""))) { + act->flags.clear = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Clear", buttonOptionsBase.Tooltip(""))) { + act->flags.clear = 0; + } + DrawFlagArray32("Clear", act->flags.clear, THEME_COLOR); + }, + "Clear"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Temp Clear"); - InsertHelpHoverText("Temporary room-clear flags. Unset on scene transitions"); - if (Button("Set All##Temp Clear", buttonOptionsBase.Tooltip(""))) { - act->flags.tempClear = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Temp Clear", buttonOptionsBase.Tooltip(""))) { - act->flags.tempClear = 0; - } - DrawFlagArray32("Temp Clear", act->flags.tempClear, THEME_COLOR); - }, "Temp Clear"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Temp Clear"); + InsertHelpHoverText("Temporary room-clear flags. Unset on scene transitions"); + if (Button("Set All##Temp Clear", buttonOptionsBase.Tooltip(""))) { + act->flags.tempClear = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Temp Clear", buttonOptionsBase.Tooltip(""))) { + act->flags.tempClear = 0; + } + DrawFlagArray32("Temp Clear", act->flags.tempClear, THEME_COLOR); + }, + "Temp Clear"); - DrawGroupWithBorder([&]() { - ImGui::Text("Collect"); - InsertHelpHoverText("Permanently-saved collect flags"); - if (Button("Set All##Collect", buttonOptionsBase.Tooltip(""))) { - act->flags.collect = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Collect", buttonOptionsBase.Tooltip(""))) { - act->flags.collect = 0; - } - DrawFlagArray32("Collect", act->flags.collect, THEME_COLOR); - }, "Collect"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Collect"); + InsertHelpHoverText("Permanently-saved collect flags"); + if (Button("Set All##Collect", buttonOptionsBase.Tooltip(""))) { + act->flags.collect = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Collect", buttonOptionsBase.Tooltip(""))) { + act->flags.collect = 0; + } + DrawFlagArray32("Collect", act->flags.collect, THEME_COLOR); + }, + "Collect"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Temp Collect"); - InsertHelpHoverText("Temporary collect flags. Unset on scene transitions"); - if (Button("Set All##Temp Collect", buttonOptionsBase.Tooltip(""))) { - act->flags.tempCollect = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Temp Collect", buttonOptionsBase.Tooltip(""))) { - act->flags.tempCollect = 0; - } - DrawFlagArray32("Temp Collect", act->flags.tempCollect, THEME_COLOR); - }, "Temp Collect"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Temp Collect"); + InsertHelpHoverText("Temporary collect flags. Unset on scene transitions"); + if (Button("Set All##Temp Collect", buttonOptionsBase.Tooltip(""))) { + act->flags.tempCollect = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Temp Collect", buttonOptionsBase.Tooltip(""))) { + act->flags.tempCollect = 0; + } + DrawFlagArray32("Temp Collect", act->flags.tempCollect, THEME_COLOR); + }, + "Temp Collect"); - DrawGroupWithBorder([&]() { - ImGui::Text("Chest"); - InsertHelpHoverText("Permanently-saved chest flags"); - if (Button("Set All##Chest", buttonOptionsBase.Tooltip(""))) { - act->flags.chest = UINT32_MAX; - } - ImGui::SameLine(); - if (Button("Clear All##Chest", buttonOptionsBase.Tooltip(""))) { - act->flags.chest = 0; - } - DrawFlagArray32("Chest", act->flags.chest, THEME_COLOR); - }, "Chest"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Chest"); + InsertHelpHoverText("Permanently-saved chest flags"); + if (Button("Set All##Chest", buttonOptionsBase.Tooltip(""))) { + act->flags.chest = UINT32_MAX; + } + ImGui::SameLine(); + if (Button("Clear All##Chest", buttonOptionsBase.Tooltip(""))) { + act->flags.chest = 0; + } + DrawFlagArray32("Chest", act->flags.chest, THEME_COLOR); + }, + "Chest"); ImGui::SameLine(); ImGui::BeginGroup(); - if (Button("Reload Flags", buttonOptionsBase.Tooltip("Load flags from saved scene flags. Normally happens on scene load"))) { + if (Button("Reload Flags", buttonOptionsBase.Tooltip( + "Load flags from saved scene flags. Normally happens on scene load"))) { act->flags.swch = gSaveContext.sceneFlags[gPlayState->sceneNum].swch; act->flags.clear = gSaveContext.sceneFlags[gPlayState->sceneNum].clear; act->flags.collect = gSaveContext.sceneFlags[gPlayState->sceneNum].collect; act->flags.chest = gSaveContext.sceneFlags[gPlayState->sceneNum].chest; } - if (Button("Save Flags", buttonOptionsBase.Tooltip("Save current scene flags. Normally happens on scene exit"))) { + if (Button("Save Flags", + buttonOptionsBase.Tooltip("Save current scene flags. Normally happens on scene exit"))) { gSaveContext.sceneFlags[gPlayState->sceneNum].swch = act->flags.swch; gSaveContext.sceneFlags[gPlayState->sceneNum].clear = act->flags.clear; gSaveContext.sceneFlags[gPlayState->sceneNum].collect = act->flags.collect; gSaveContext.sceneFlags[gPlayState->sceneNum].chest = act->flags.chest; } - - if (Button("Clear Flags", buttonOptionsBase.Tooltip("Clear current scene flags. Reload scene to see changes"))) { + + if (Button("Clear Flags", + buttonOptionsBase.Tooltip("Clear current scene flags. Reload scene to see changes"))) { act->flags.swch = 0; act->flags.clear = 0; act->flags.collect = 0; act->flags.chest = 0; } - ImGui::EndGroup(); } else { ImGui::Text("Current game state does not have an active scene"); @@ -745,105 +790,121 @@ void DrawFlagsTab() { } } - DrawGroupWithBorder([&]() { - ImGui::Text("Switch"); - InsertHelpHoverText("Switch flags"); - DrawFlagArray32("Switch", gSaveContext.sceneFlags[selectedSceneFlagMap].swch, THEME_COLOR); - }, "Saved Switch"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Switch"); + InsertHelpHoverText("Switch flags"); + DrawFlagArray32("Switch", gSaveContext.sceneFlags[selectedSceneFlagMap].swch, THEME_COLOR); + }, + "Saved Switch"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Clear"); - InsertHelpHoverText("Room-clear flags"); - DrawFlagArray32("Clear", gSaveContext.sceneFlags[selectedSceneFlagMap].clear, THEME_COLOR); - }, "Saved Clear"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Clear"); + InsertHelpHoverText("Room-clear flags"); + DrawFlagArray32("Clear", gSaveContext.sceneFlags[selectedSceneFlagMap].clear, THEME_COLOR); + }, + "Saved Clear"); - DrawGroupWithBorder([&]() { - ImGui::Text("Collect"); - InsertHelpHoverText("Collect flags"); - DrawFlagArray32("Collect", gSaveContext.sceneFlags[selectedSceneFlagMap].collect, THEME_COLOR); - }, "Saved Collect"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Collect"); + InsertHelpHoverText("Collect flags"); + DrawFlagArray32("Collect", gSaveContext.sceneFlags[selectedSceneFlagMap].collect, THEME_COLOR); + }, + "Saved Collect"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Chest"); - InsertHelpHoverText("Chest flags"); - DrawFlagArray32("Chest", gSaveContext.sceneFlags[selectedSceneFlagMap].chest, THEME_COLOR); - }, "Saved Chest"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Chest"); + InsertHelpHoverText("Chest flags"); + DrawFlagArray32("Chest", gSaveContext.sceneFlags[selectedSceneFlagMap].chest, THEME_COLOR); + }, + "Saved Chest"); - DrawGroupWithBorder([&]() { - ImGui::Text("Rooms"); - InsertHelpHoverText("Flags for visted rooms"); - DrawFlagArray32("Rooms", gSaveContext.sceneFlags[selectedSceneFlagMap].rooms, THEME_COLOR); - }, "Saved Rooms"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Rooms"); + InsertHelpHoverText("Flags for visted rooms"); + DrawFlagArray32("Rooms", gSaveContext.sceneFlags[selectedSceneFlagMap].rooms, THEME_COLOR); + }, + "Saved Rooms"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Floors"); - InsertHelpHoverText("Flags for visted floors"); - DrawFlagArray32("Floors", gSaveContext.sceneFlags[selectedSceneFlagMap].floors, THEME_COLOR); - }, "Saved Floors"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Floors"); + InsertHelpHoverText("Flags for visted floors"); + DrawFlagArray32("Floors", gSaveContext.sceneFlags[selectedSceneFlagMap].floors, THEME_COLOR); + }, + "Saved Floors"); ImGui::TreePop(); } - DrawGroupWithBorder([&]() { - size_t selectedGsMap = 0; - ImGui::Text("Gold Skulltulas"); - Combobox("Map##Gold Skulltulas", &selectedGsMap, gsMapping, comboboxOptionsBase.Tooltip("")); + DrawGroupWithBorder( + [&]() { + size_t selectedGsMap = 0; + ImGui::Text("Gold Skulltulas"); + Combobox("Map##Gold Skulltulas", &selectedGsMap, gsMapping, comboboxOptionsBase.Tooltip("")); - // TODO We should write out descriptions for each one... ugh - ImGui::AlignTextToFramePadding(); - ImGui::Text("Flags"); - uint32_t currentFlags = GET_GS_FLAGS(selectedGsMap); - uint32_t allFlags = gAreaGsFlags[selectedGsMap]; - uint32_t setMask = 1; - // Iterate over bitfield and create a checkbox for each skulltula - while (allFlags != 0) { - bool isThisSet = (currentFlags & 0x1) == 0x1; + // TODO We should write out descriptions for each one... ugh + ImGui::AlignTextToFramePadding(); + ImGui::Text("Flags"); + uint32_t currentFlags = GET_GS_FLAGS(selectedGsMap); + uint32_t allFlags = gAreaGsFlags[selectedGsMap]; + uint32_t setMask = 1; + // Iterate over bitfield and create a checkbox for each skulltula + while (allFlags != 0) { + bool isThisSet = (currentFlags & 0x1) == 0x1; - ImGui::SameLine(); - ImGui::PushID(allFlags); - PushStyleCheckbox(THEME_COLOR); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(4.0f, 3.0f)); - if (ImGui::Checkbox("##gs", &isThisSet)) { - if (isThisSet) { - SET_GS_FLAGS(selectedGsMap, setMask); - } else { - // Have to do this roundabout method as the macro does not support clearing flags - uint32_t currentFlagsBase = GET_GS_FLAGS(selectedGsMap); - gSaveContext.gsFlags[selectedGsMap >> 2] &= ~gGsFlagsMasks[selectedGsMap & 3]; - SET_GS_FLAGS(selectedGsMap, currentFlagsBase & ~setMask); + ImGui::SameLine(); + ImGui::PushID(allFlags); + PushStyleCheckbox(THEME_COLOR); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(4.0f, 3.0f)); + if (ImGui::Checkbox("##gs", &isThisSet)) { + if (isThisSet) { + SET_GS_FLAGS(selectedGsMap, setMask); + } else { + // Have to do this roundabout method as the macro does not support clearing flags + uint32_t currentFlagsBase = GET_GS_FLAGS(selectedGsMap); + gSaveContext.gsFlags[selectedGsMap >> 2] &= ~gGsFlagsMasks[selectedGsMap & 3]; + SET_GS_FLAGS(selectedGsMap, currentFlagsBase & ~setMask); + } + } + ImGui::PopStyleVar(); + PopStyleCheckbox(); + + ImGui::PopID(); + + allFlags >>= 1; + currentFlags >>= 1; + setMask <<= 1; + } + + // If playing a Randomizer Save with Shuffle Skull Tokens on anything other than "Off" we don't want to keep + // GS Token Count updated, since Gold Skulltulas killed will not correlate to GS Tokens Collected. + if (!(IS_RANDO && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_TOKENS) != RO_TOKENSANITY_OFF)) { + static bool keepGsCountUpdated = true; + Checkbox("Keep GS Count Updated", &keepGsCountUpdated, + checkboxOptionsBase.Tooltip( + "Automatically adjust the number of gold skulltula tokens acquired based on set flags.")); + int32_t gsCount = 0; + if (keepGsCountUpdated) { + for (int32_t gsFlagIndex = 0; gsFlagIndex < 6; gsFlagIndex++) { + gsCount += std::popcount(static_cast(gSaveContext.gsFlags[gsFlagIndex])); + } + gSaveContext.inventory.gsTokens = gsCount; } } - ImGui::PopStyleVar(); - PopStyleCheckbox(); - - ImGui::PopID(); - - allFlags >>= 1; - currentFlags >>= 1; - setMask <<= 1; - } - - // If playing a Randomizer Save with Shuffle Skull Tokens on anything other than "Off" we don't want to keep - // GS Token Count updated, since Gold Skulltulas killed will not correlate to GS Tokens Collected. - if (!(IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_TOKENS) != RO_TOKENSANITY_OFF)) { - static bool keepGsCountUpdated = true; - Checkbox("Keep GS Count Updated", &keepGsCountUpdated, - checkboxOptionsBase.Tooltip("Automatically adjust the number of gold skulltula tokens acquired based on set flags.")); - int32_t gsCount = 0; - if (keepGsCountUpdated) { - for (int32_t gsFlagIndex = 0; gsFlagIndex < 6; gsFlagIndex++) { - gsCount += std::popcount(static_cast(gSaveContext.gsFlags[gsFlagIndex])); - } - gSaveContext.inventory.gsTokens = gsCount; - } - } - }, "Gold Skulltulas"); + }, + "Gold Skulltulas"); for (int i = 0; i < flagTables.size(); i++) { const FlagTable& flagTable = flagTables[i]; @@ -853,32 +914,34 @@ void DrawFlagsTab() { if (ImGui::TreeNode(flagTable.name)) { for (int j = 0; j < flagTable.size + 1; j++) { - DrawGroupWithBorder([&]() { - ImGui::Text("%s", fmt::format("{:<2x}", j).c_str()); - switch (flagTable.flagTableType) { - case EVENT_CHECK_INF: - DrawFlagTableArray16(flagTable, j, gSaveContext.eventChkInf[j]); - break; - case ITEM_GET_INF: - DrawFlagTableArray16(flagTable, j, gSaveContext.itemGetInf[j]); - break; - case INF_TABLE: - DrawFlagTableArray16(flagTable, j, gSaveContext.infTable[j]); - break; - case EVENT_INF: - DrawFlagTableArray16(flagTable, j, gSaveContext.eventInf[j]); - break; - case RANDOMIZER_INF: - DrawFlagTableArray16(flagTable, j, gSaveContext.ship.randomizerInf[j]); - break; - } - }, flagTable.name); + DrawGroupWithBorder( + [&]() { + ImGui::Text("%s", fmt::format("{:<2x}", j).c_str()); + switch (flagTable.flagTableType) { + case EVENT_CHECK_INF: + DrawFlagTableArray16(flagTable, j, gSaveContext.eventChkInf[j]); + break; + case ITEM_GET_INF: + DrawFlagTableArray16(flagTable, j, gSaveContext.itemGetInf[j]); + break; + case INF_TABLE: + DrawFlagTableArray16(flagTable, j, gSaveContext.infTable[j]); + break; + case EVENT_INF: + DrawFlagTableArray16(flagTable, j, gSaveContext.eventInf[j]); + break; + case RANDOMIZER_INF: + DrawFlagTableArray16(flagTable, j, gSaveContext.ship.randomizerInf[j]); + break; + } + }, + flagTable.name); } // make some buttons to help with fishsanity debugging uint8_t fsMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY); - if (flagTable.flagTableType == RANDOMIZER_INF && - fsMode != RO_FISHSANITY_OFF && fsMode != RO_FISHSANITY_OVERWORLD) { + if (flagTable.flagTableType == RANDOMIZER_INF && fsMode != RO_FISHSANITY_OFF && + fsMode != RO_FISHSANITY_OVERWORLD) { if (ImGui::Button("Catch All (Child)")) { for (int k = RAND_INF_CHILD_FISH_1; k <= RAND_INF_CHILD_LOACH_2; k++) { Flags_SetRandomizerInf((RandomizerInf)k); @@ -935,13 +998,14 @@ void DrawUpgradeIcon(const std::string& categoryName, int32_t categoryId, const static const char* upgradePopupPicker = "upgradePopupPicker"; ImGui::PushID(categoryName.c_str()); - - PushStyleButton(Colors::DarkGray); + + PushStyleButton(Colors::DarkGray); uint8_t item = items[CUR_UPG_VALUE(categoryId)]; if (item != ITEM_NONE) { const ItemMapEntry& slotEntry = itemMapping[item]; - if (ImGui::ImageButton(slotEntry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1))) { + if (ImGui::ImageButton(slotEntry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1))) { ImGui::OpenPopup(upgradePopupPicker); } } else { @@ -957,18 +1021,21 @@ void DrawUpgradeIcon(const std::string& categoryName, int32_t categoryId, const if ((pickerIndex % 8) != 0) { ImGui::SameLine(); } - + PushStyleButton(Colors::DarkGray); if (items[pickerIndex] == ITEM_NONE) { - if (ImGui::Button("##upgradePopupPicker", ImVec2(IMAGE_SIZE, IMAGE_SIZE) + ImGui::GetStyle().FramePadding * 2)) { + if (ImGui::Button("##upgradePopupPicker", + ImVec2(IMAGE_SIZE, IMAGE_SIZE) + ImGui::GetStyle().FramePadding * 2)) { Inventory_ChangeUpgrade(categoryId, pickerIndex); ImGui::CloseCurrentPopup(); } Tooltip("None"); } else { const ItemMapEntry& slotEntry = itemMapping[items[pickerIndex]]; - auto ret = ImGui::ImageButton(slotEntry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton( + slotEntry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(slotEntry.name), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { Inventory_ChangeUpgrade(categoryId, pickerIndex); ImGui::CloseCurrentPopup(); @@ -1003,7 +1070,9 @@ void DrawEquipmentTab() { bool hasEquip = (bitMask & gSaveContext.inventory.equipment) != 0; const ItemMapEntry& entry = itemMapping[equipmentValues[i]]; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(entry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasEquip ? entry.name : entry.nameFaded), + auto ret = ImGui::ImageButton(entry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasEquip ? entry.name : entry.nameFaded), ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { if (hasEquip) { @@ -1103,8 +1172,10 @@ void DrawQuestItemButton(uint32_t item) { uint32_t bitMask = 1 << entry.id; bool hasQuestItem = (bitMask & gSaveContext.inventory.questItems) != 0; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(entry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasQuestItem ? entry.name : entry.nameFaded), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton(entry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasQuestItem ? entry.name : entry.nameFaded), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { if (hasQuestItem) { gSaveContext.inventory.questItems &= ~bitMask; @@ -1122,8 +1193,10 @@ void DrawDungeonItemButton(uint32_t item, uint32_t scene) { uint32_t bitMask = 1 << (entry.id - ITEM_KEY_BOSS); // Bitset starts at ITEM_KEY_BOSS == 0. the rest are sequential bool hasItem = (bitMask & gSaveContext.inventory.dungeonItems[scene]) != 0; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(entry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasItem ? entry.name : entry.nameFaded), - ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); + auto ret = ImGui::ImageButton( + entry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasItem ? entry.name : entry.nameFaded), + ImVec2(IMAGE_SIZE, IMAGE_SIZE), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { if (hasItem) { gSaveContext.inventory.dungeonItems[scene] &= ~bitMask; @@ -1168,7 +1241,9 @@ void DrawQuestStatusTab() { uint32_t bitMask = 1 << entry.id; bool hasQuestItem = (bitMask & gSaveContext.inventory.questItems) != 0; PushStyleButton(Colors::DarkGray); - auto ret = ImGui::ImageButton(entry.name.c_str(), Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasQuestItem ? entry.name : entry.nameFaded), + auto ret = ImGui::ImageButton(entry.name.c_str(), + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasQuestItem ? entry.name : entry.nameFaded), ImVec2(32.0f, 48.0f), ImVec2(0, 0), ImVec2(1, 1)); if (ret) { if (hasQuestItem) { @@ -1211,44 +1286,50 @@ void DrawQuestStatusTab() { InsertHelpHoverText("The number of pieces of heart acquired towards the next heart container"); PopStyleCombobox(); - DrawGroupWithBorder([&]() { - ImGui::Text("Dungeon Items"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Dungeon Items"); - static int32_t dungeonItemsScene = SCENE_DEKU_TREE; - PushStyleCombobox(THEME_COLOR); - if (ImGui::BeginCombo("##DungeonSelect", SohUtils::GetSceneName(dungeonItemsScene).c_str())) { - for (int32_t dungeonIndex = SCENE_DEKU_TREE; dungeonIndex < SCENE_JABU_JABU_BOSS + 1; dungeonIndex++) { - if (ImGui::Selectable(SohUtils::GetSceneName(dungeonIndex).c_str(), - dungeonIndex == dungeonItemsScene)) { - dungeonItemsScene = dungeonIndex; + static int32_t dungeonItemsScene = SCENE_DEKU_TREE; + PushStyleCombobox(THEME_COLOR); + if (ImGui::BeginCombo("##DungeonSelect", SohUtils::GetSceneName(dungeonItemsScene).c_str())) { + for (int32_t dungeonIndex = SCENE_DEKU_TREE; dungeonIndex < SCENE_JABU_JABU_BOSS + 1; dungeonIndex++) { + if (ImGui::Selectable(SohUtils::GetSceneName(dungeonIndex).c_str(), + dungeonIndex == dungeonItemsScene)) { + dungeonItemsScene = dungeonIndex; + } } + + ImGui::EndCombo(); } + PopStyleCombobox(); - ImGui::EndCombo(); - } - PopStyleCombobox(); - - DrawDungeonItemButton(ITEM_KEY_BOSS, dungeonItemsScene); - ImGui::SameLine(); - DrawDungeonItemButton(ITEM_COMPASS, dungeonItemsScene); - ImGui::SameLine(); - DrawDungeonItemButton(ITEM_DUNGEON_MAP, dungeonItemsScene); - - if (dungeonItemsScene != SCENE_JABU_JABU_BOSS) { - float lineHeight = ImGui::GetTextLineHeightWithSpacing(); - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(itemMapping[ITEM_KEY_SMALL].name), ImVec2(lineHeight, lineHeight)); + DrawDungeonItemButton(ITEM_KEY_BOSS, dungeonItemsScene); ImGui::SameLine(); - PushStyleInput(THEME_COLOR); - if (ImGui::InputScalar("##Keys", ImGuiDataType_S8, gSaveContext.inventory.dungeonKeys + dungeonItemsScene)) { - gSaveContext.ship.stats.dungeonKeys[dungeonItemsScene] = gSaveContext.inventory.dungeonKeys[dungeonItemsScene]; - }; - PopStyleInput(); - } else { - // dungeonItems is size 20 but dungeonKeys is size 19, so there are no keys for the last scene (Barinade's Lair) - ImGui::Text("Barinade's Lair does not have small keys"); - } - }, "Dungeon Items"); + DrawDungeonItemButton(ITEM_COMPASS, dungeonItemsScene); + ImGui::SameLine(); + DrawDungeonItemButton(ITEM_DUNGEON_MAP, dungeonItemsScene); + if (dungeonItemsScene != SCENE_JABU_JABU_BOSS) { + float lineHeight = ImGui::GetTextLineHeightWithSpacing(); + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + itemMapping[ITEM_KEY_SMALL].name), + ImVec2(lineHeight, lineHeight)); + ImGui::SameLine(); + PushStyleInput(THEME_COLOR); + if (ImGui::InputScalar("##Keys", ImGuiDataType_S8, + gSaveContext.inventory.dungeonKeys + dungeonItemsScene)) { + gSaveContext.ship.stats.dungeonKeys[dungeonItemsScene] = + gSaveContext.inventory.dungeonKeys[dungeonItemsScene]; + }; + PopStyleInput(); + } else { + // dungeonItems is size 20 but dungeonKeys is size 19, so there are no keys for the last scene + // (Barinade's Lair) + ImGui::Text("Barinade's Lair does not have small keys"); + } + }, + "Dungeon Items"); } void DrawPlayerTab() { @@ -1261,7 +1342,7 @@ void DrawPlayerTab() { switch (player->currentSwordItemId) { case ITEM_SWORD_KOKIRI: - curSword = "Kokiri Sword"; + curSword = "Kokiri Sword"; break; case ITEM_SWORD_MASTER: curSword = "Master Sword"; @@ -1327,34 +1408,40 @@ void DrawPlayerTab() { ImGui::PushItemWidth(ImGui::GetFontSize() * 6); PushStyleInput(THEME_COLOR); - DrawGroupWithBorder([&]() { - ImGui::Text("Link's Position"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 12); - ImGui::InputScalar("X##Pos", ImGuiDataType_Float, &player->actor.world.pos.x); - ImGui::InputScalar("Y##Pos", ImGuiDataType_Float, &player->actor.world.pos.y); - ImGui::InputScalar("Z##Pos", ImGuiDataType_Float, &player->actor.world.pos.z); - ImGui::PopItemWidth(); - }, "Link's Position"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Link's Position"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 12); + ImGui::InputScalar("X##Pos", ImGuiDataType_Float, &player->actor.world.pos.x); + ImGui::InputScalar("Y##Pos", ImGuiDataType_Float, &player->actor.world.pos.y); + ImGui::InputScalar("Z##Pos", ImGuiDataType_Float, &player->actor.world.pos.z); + ImGui::PopItemWidth(); + }, + "Link's Position"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Link's Rotation"); - InsertHelpHoverText("For Link's rotation in relation to the world"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 12); - ImGui::InputScalar("X##Rot", ImGuiDataType_S16, &player->actor.world.rot.x); - ImGui::InputScalar("Y##Rot", ImGuiDataType_S16, &player->actor.world.rot.y); - ImGui::InputScalar("Z##Rot", ImGuiDataType_S16, &player->actor.world.rot.z); - ImGui::PopItemWidth(); - }, "Link's Rotation"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Link's Rotation"); + InsertHelpHoverText("For Link's rotation in relation to the world"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 12); + ImGui::InputScalar("X##Rot", ImGuiDataType_S16, &player->actor.world.rot.x); + ImGui::InputScalar("Y##Rot", ImGuiDataType_S16, &player->actor.world.rot.y); + ImGui::InputScalar("Z##Rot", ImGuiDataType_S16, &player->actor.world.rot.z); + ImGui::PopItemWidth(); + }, + "Link's Rotation"); ImGui::SameLine(); - DrawGroupWithBorder([&]() { - ImGui::Text("Link's Model Rotation"); - InsertHelpHoverText("For Link's actual model"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 12); - ImGui::InputScalar("X##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.x); - ImGui::InputScalar("Y##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.y); - ImGui::InputScalar("Z##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.z); - ImGui::PopItemWidth(); - }, "Link's Model Rotation"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Link's Model Rotation"); + InsertHelpHoverText("For Link's actual model"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 12); + ImGui::InputScalar("X##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.x); + ImGui::InputScalar("Y##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.y); + ImGui::InputScalar("Z##ModRot", ImGuiDataType_S16, &player->actor.shape.rot.z); + ImGui::PopItemWidth(); + }, + "Link's Model Rotation"); ImGui::InputScalar("Linear Velocity", ImGuiDataType_Float, &player->linearVelocity); InsertHelpHoverText("Link's speed along the XZ plane"); @@ -1385,136 +1472,141 @@ void DrawPlayerTab() { InsertHelpHoverText("This will change Link's age when you load a map"); PopStyleCombobox(); ImGui::Separator(); - - DrawGroupWithBorder([&]() { - PushStyleCombobox(THEME_COLOR); - ImGui::Text("Link's Current Equipment"); - ImGui::PushItemWidth(ImGui::GetFontSize() * 12); - if (ImGui::BeginCombo("Sword", curSword)) { - if (ImGui::Selectable("None")) { - player->currentSwordItemId = ITEM_NONE; - gSaveContext.equips.buttonItems[0] = ITEM_NONE; - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_NONE); - } - if (ImGui::Selectable("Kokiri Sword")) { - player->currentSwordItemId = ITEM_SWORD_KOKIRI; - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KOKIRI; - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI); - } - if (ImGui::Selectable("Master Sword")) { - player->currentSwordItemId = ITEM_SWORD_MASTER; - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER; - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); - } - if (ImGui::Selectable("Biggoron's Sword")) { - if (gSaveContext.bgsFlag) { - if (gSaveContext.swordHealth < 8) { - gSaveContext.swordHealth = 8; - } - player->currentSwordItemId = ITEM_SWORD_BGS; - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS; + + DrawGroupWithBorder( + [&]() { + PushStyleCombobox(THEME_COLOR); + ImGui::Text("Link's Current Equipment"); + ImGui::PushItemWidth(ImGui::GetFontSize() * 12); + if (ImGui::BeginCombo("Sword", curSword)) { + if (ImGui::Selectable("None")) { + player->currentSwordItemId = ITEM_NONE; + gSaveContext.equips.buttonItems[0] = ITEM_NONE; + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_NONE); } - else { - if (gSaveContext.swordHealth < 8) { - gSaveContext.swordHealth = 8; - } - player->currentSwordItemId = ITEM_SWORD_BGS; - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KNIFE; + if (ImGui::Selectable("Kokiri Sword")) { + player->currentSwordItemId = ITEM_SWORD_KOKIRI; + gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KOKIRI; + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI); } + if (ImGui::Selectable("Master Sword")) { + player->currentSwordItemId = ITEM_SWORD_MASTER; + gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER; + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); + } + if (ImGui::Selectable("Biggoron's Sword")) { + if (gSaveContext.bgsFlag) { + if (gSaveContext.swordHealth < 8) { + gSaveContext.swordHealth = 8; + } + player->currentSwordItemId = ITEM_SWORD_BGS; + gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BGS; + } else { + if (gSaveContext.swordHealth < 8) { + gSaveContext.swordHealth = 8; + } + player->currentSwordItemId = ITEM_SWORD_BGS; + gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KNIFE; + } - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_BIGGORON); + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_BIGGORON); + } + if (ImGui::Selectable("Fishing Pole")) { + player->currentSwordItemId = ITEM_FISHING_POLE; + gSaveContext.equips.buttonItems[0] = ITEM_FISHING_POLE; + Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); + } + ImGui::EndCombo(); } - if (ImGui::Selectable("Fishing Pole")) { - player->currentSwordItemId = ITEM_FISHING_POLE; - gSaveContext.equips.buttonItems[0] = ITEM_FISHING_POLE; - Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); + if (ImGui::BeginCombo("Shield", curShield)) { + if (ImGui::Selectable("None")) { + player->currentShield = PLAYER_SHIELD_NONE; + Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_NONE); + } + if (ImGui::Selectable("Deku Shield")) { + player->currentShield = PLAYER_SHIELD_DEKU; + Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU); + } + if (ImGui::Selectable("Hylian Shield")) { + player->currentShield = PLAYER_SHIELD_HYLIAN; + Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_HYLIAN); + } + if (ImGui::Selectable("Mirror Shield")) { + player->currentShield = PLAYER_SHIELD_MIRROR; + Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_MIRROR); + } + ImGui::EndCombo(); } - ImGui::EndCombo(); - } - if (ImGui::BeginCombo("Shield", curShield)) { - if (ImGui::Selectable("None")) { - player->currentShield = PLAYER_SHIELD_NONE; - Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_NONE); + if (ImGui::BeginCombo("Tunic", curTunic)) { + if (ImGui::Selectable("Kokiri Tunic")) { + player->currentTunic = PLAYER_TUNIC_KOKIRI; + Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_KOKIRI); + } + if (ImGui::Selectable("Goron Tunic")) { + player->currentTunic = PLAYER_TUNIC_GORON; + Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_GORON); + } + if (ImGui::Selectable("Zora Tunic")) { + player->currentTunic = PLAYER_TUNIC_ZORA; + Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_ZORA); + } + ImGui::EndCombo(); } - if (ImGui::Selectable("Deku Shield")) { - player->currentShield = PLAYER_SHIELD_DEKU; - Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU); - } - if (ImGui::Selectable("Hylian Shield")) { - player->currentShield = PLAYER_SHIELD_HYLIAN; - Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_HYLIAN); - } - if (ImGui::Selectable("Mirror Shield")) { - player->currentShield = PLAYER_SHIELD_MIRROR; - Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_MIRROR); - } - ImGui::EndCombo(); - } - if (ImGui::BeginCombo("Tunic", curTunic)) { - if (ImGui::Selectable("Kokiri Tunic")) { - player->currentTunic = PLAYER_TUNIC_KOKIRI; - Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_KOKIRI); + if (ImGui::BeginCombo("Boots", curBoots)) { + if (ImGui::Selectable("Kokiri Boots")) { + player->currentBoots = PLAYER_BOOTS_KOKIRI; + Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_KOKIRI); + } + if (ImGui::Selectable("Iron Boots")) { + player->currentBoots = PLAYER_BOOTS_IRON; + Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_IRON); + } + if (ImGui::Selectable("Hover Boots")) { + player->currentBoots = PLAYER_BOOTS_HOVER; + Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_HOVER); + } + ImGui::EndCombo(); } - if (ImGui::Selectable("Goron Tunic")) { - player->currentTunic = PLAYER_TUNIC_GORON; - Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_GORON); - } - if (ImGui::Selectable("Zora Tunic")) { - player->currentTunic = PLAYER_TUNIC_ZORA; - Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_ZORA); - } - ImGui::EndCombo(); - } - - if (ImGui::BeginCombo("Boots", curBoots)) { - if (ImGui::Selectable("Kokiri Boots")) { - player->currentBoots = PLAYER_BOOTS_KOKIRI; - Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_KOKIRI); - } - if (ImGui::Selectable("Iron Boots")) { - player->currentBoots = PLAYER_BOOTS_IRON; - Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_IRON); - } - if (ImGui::Selectable("Hover Boots")) { - player->currentBoots = PLAYER_BOOTS_HOVER; - Inventory_ChangeEquipment(EQUIP_TYPE_BOOTS, EQUIP_VALUE_BOOTS_HOVER); - } - ImGui::EndCombo(); - } - ImGui::PopItemWidth(); - PopStyleCombobox(); - }, "Current Equipment"); + ImGui::PopItemWidth(); + PopStyleCombobox(); + }, + "Current Equipment"); ImGui::SameLine(); ImU16 one = 1; - DrawGroupWithBorder([&]() { - ImGui::PushItemWidth(ImGui::GetFontSize() * 6); - PushStyleInput(THEME_COLOR); - ImGui::Text("Current Items"); - ImGui::InputScalar("B Button", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[0], &one, NULL); - ImGui::InputScalar("C Left", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[1], &one, NULL); - ImGui::InputScalar("C Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[2], &one, NULL); - ImGui::InputScalar("C Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[3], &one, NULL); - PopStyleInput(); - ImGui::PopItemWidth(); - }, "Current Items"); - - if (CVarGetInteger(CVAR_ENHANCEMENT("DpadEquips"), 0)) { - ImGui::SameLine(); - DrawGroupWithBorder([&]() { + DrawGroupWithBorder( + [&]() { ImGui::PushItemWidth(ImGui::GetFontSize() * 6); PushStyleInput(THEME_COLOR); - ImGui::Text("Current D-pad Items"); - // Two spaces at the end for aligning, not elegant but it's working - ImGui::InputScalar("D-pad Up ", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[4], &one, NULL); - ImGui::InputScalar("D-pad Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[5], &one, NULL); - ImGui::InputScalar("D-pad Left", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[6], &one, NULL); - ImGui::InputScalar("D-pad Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[7], &one, NULL); + ImGui::Text("Current Items"); + ImGui::InputScalar("B Button", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[0], &one, NULL); + ImGui::InputScalar("C Left", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[1], &one, NULL); + ImGui::InputScalar("C Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[2], &one, NULL); + ImGui::InputScalar("C Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[3], &one, NULL); PopStyleInput(); ImGui::PopItemWidth(); - }, "Current D-pad Items"); + }, + "Current Items"); + + if (CVarGetInteger(CVAR_ENHANCEMENT("DpadEquips"), 0)) { + ImGui::SameLine(); + DrawGroupWithBorder( + [&]() { + ImGui::PushItemWidth(ImGui::GetFontSize() * 6); + PushStyleInput(THEME_COLOR); + ImGui::Text("Current D-pad Items"); + // Two spaces at the end for aligning, not elegant but it's working + ImGui::InputScalar("D-pad Up ", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[4], &one, NULL); + ImGui::InputScalar("D-pad Down", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[5], &one, NULL); + ImGui::InputScalar("D-pad Left", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[6], &one, NULL); + ImGui::InputScalar("D-pad Right", ImGuiDataType_U8, &gSaveContext.equips.buttonItems[7], &one, + NULL); + PopStyleInput(); + ImGui::PopItemWidth(); + }, + "Current D-pad Items"); } ImGui::Text("Player State"); @@ -1524,22 +1616,26 @@ void DrawPlayerTab() { for (int j = 0; j <= 2; j++) { std::string label = fmt::format("State Flags {}", j + 1); - DrawGroupWithBorder([&]() { - ImGui::Text("%s", label.c_str()); - std::vector state = flag_strs[j]; - for (int i = 0; i <= 31; i++) { - bit[i] = ((flags[j] >> i) & 1); - if (bit[i] != 0) { - ImGui::Text("%s", state[i].c_str()); + DrawGroupWithBorder( + [&]() { + ImGui::Text("%s", label.c_str()); + std::vector state = flag_strs[j]; + for (int i = 0; i <= 31; i++) { + bit[i] = ((flags[j] >> i) & 1); + if (bit[i] != 0) { + ImGui::Text("%s", state[i].c_str()); + } } - } - }, label.c_str()); + }, + label.c_str()); ImGui::SameLine(); } - DrawGroupWithBorder([&]() { - ImGui::Text("Sword"); - ImGui::Text(" %d", player->meleeWeaponState); - }, "Sword"); + DrawGroupWithBorder( + [&]() { + ImGui::Text("Sword"); + ImGui::Text(" %d", player->meleeWeaponState); + }, + "Sword"); } else { ImGui::Text("Global Context needed for player info!"); @@ -1547,14 +1643,19 @@ void DrawPlayerTab() { } void ResetBaseOptions() { - intSliderOptionsBase.Color(THEME_COLOR).Size({320.0f, 0.0f}).Tooltip(""); + intSliderOptionsBase.Color(THEME_COLOR).Size({ 320.0f, 0.0f }).Tooltip(""); buttonOptionsBase.Color(THEME_COLOR).Size(Sizes::Inline).Tooltip(""); checkboxOptionsBase.Color(THEME_COLOR).Tooltip(""); - comboboxOptionsBase.Color(THEME_COLOR).ComponentAlignment(ComponentAlignments::Left).LabelPosition(LabelPositions::Near).Tooltip(""); + comboboxOptionsBase.Color(THEME_COLOR) + .ComponentAlignment(ComponentAlignments::Left) + .LabelPosition(LabelPositions::Near) + .Tooltip(""); } void SaveEditorWindow::DrawElement() { PushStyleTabs(THEME_COLOR); + ImGui::PushFont(OTRGlobals::Instance->fontMonoLarger); + if (ImGui::BeginTabBar("SaveContextTabBar", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) { ResetBaseOptions(); if (ImGui::BeginTabItem("Info")) { @@ -1594,7 +1695,10 @@ void SaveEditorWindow::DrawElement() { ImGui::EndTabBar(); } + + ImGui::PopFont(); PopStyleTabs(); } -void SaveEditorWindow::InitElement() {} +void SaveEditorWindow::InitElement() { +} diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.h b/soh/soh/Enhancements/debugger/debugSaveEditor.h index 554a90b2a..9c0819e19 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.h +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.h @@ -26,1605 +26,1667 @@ typedef struct { // Reference https://tcrf.net/Proto:The_Legend_of_Zelda:_Ocarina_of_Time_Master_Quest/Event_Editor // The source was last referenced on 2022-09-03 and had a last updated value of 2020-05-02 const std::vector flagTables = { - { "Event Check Inf Flags", EVENT_CHECK_INF, 0x0D, { - { 0x02, "First Spoke to Mido" }, - { 0x03, "Complained About Mido to Saria" }, - { 0x04, "Showed Mido Sword & Shield" }, - { 0x05, "Deku Tree Opened Mouth" }, - { 0x06, "Spoke to Saria After Deku Tree's Death" }, - { 0x07, "Obtained Kokiri Emerald & Deku Tree Dead" }, - { 0x09, "Used Deku Tree Blue Warp" }, - { 0x0A, "Played Saria's Song for Mido as Adult" }, - { 0x0C, "Met Deku Tree" }, - { 0x0F, "Spoke to Mido about Saria's whereabouts" }, - { 0x10, "Spoke to Child Malon at Castle or Market" }, - { 0x11, "Spoke to Ingo at Ranch before Talon returns" }, - { 0x12, "Obtained Pocket Egg" }, - { 0x13, "Woke Talon" }, - { 0x14, "Talon Fled Hyrule Castle" }, - { 0x15, "Spoke to Child Malon at Ranch" }, - { 0x16, "Invited to Sing With Child Malon" }, - { 0x17, "Great Deku Tree is Dead" }, - { 0x18, "Obtained Epona" }, - { 0x19, "Obtained Kokiri's Emerald" }, - { 0x1B, "Rented Horse From Ingo" }, - { 0x1C, "Spoke to Mido After Deku Tree's Death" }, - { 0x1D, "Destroyed the Royal Family's Tomb" }, - { 0x1E, "Won the Cow in Malon's Race" }, - { 0x23, "Bombed Dodongo's Cavern Entrance" }, - { 0x25, "Used Dodongo's Cavern Blue Warp" }, - { 0x2F, "Death Mountain Erupted" }, - { 0x30, "Spoke to a Zora" }, - { 0x31, "Obtained Ruto's Letter" }, - { 0x33, "King Zora Moved Aside" }, - { 0x37, "Used Jabu-Jabu Blue Warp" }, - { 0x38, "Obtained Silver Scale" }, - { 0x39, "Opened Entrance to Zora's Domain" }, - { 0x3A, "Offered Fish to Jabu-Jabu" }, - { 0x3B, "Began Nabooru Battle" }, - { 0x3C, "Finished Nabooru Battle" }, - { 0x40, "Obtained Zelda's Letter" }, - { 0x43, "Obtained Ocarina of Time" }, - { 0x45, "Pulled Master Sword from Pedestal" }, - { 0x48, "Used Forest Temple Blue Warp" }, - { 0x49, "Used Fire Temple Blue Warp" }, - { 0x4A, "Used Water Temple Blue Warp" }, - { 0x4B, "Opened the Door of Time" }, - { 0x4D, "Rainbow Bridge Built by Sages" }, - { 0x4E, "Caught by Hyrule Castle Guards" }, - { 0x4F, "Entered the Master Sword Chamber" }, - { 0x50, "Learned Minuet of Forest" }, - { 0x51, "Learned Bolero of Fire" }, - { 0x52, "Learned Serenade of Water" }, - { 0x54, "Learned Nocturne of Shadow" }, - { 0x55, "Sheik Moved From Sword Pedestal" }, - { 0x57, "Learned Saria's Song" }, - { 0x59, "Learned Zelda's Lullaby" }, - { 0x5A, "Learned Sun's Song" }, - { 0x5B, "Learned Song of Storms" }, - { 0x65, "Played Song of Storms in Windmill" }, - { 0x67, "Drained Well in Kakariko Village" }, - { 0x68, "Played Gerudo Archery Minigame" }, - { 0x69, "Restored Lake Hylia's Water" }, - { 0x6A, "Woke Talon in Kakariko" }, - { 0x6B, "Spoke to Talon After Saving Ranch" }, - { 0x6F, "Spoke to Kaepora Gaebora by Lost Woods" }, - { 0x70, "Began Gohma Battle" }, - { 0x71, "Began King Dodongo Battle" }, - { 0x72, "Began Phantom Ganon Battle" }, - { 0x73, "Began Volvagia Battle" }, - { 0x74, "Began Morpha Battle" }, - { 0x75, "Began Twinrova Battle" }, - { 0x76, "Began Barinade Battle" }, - { 0x77, "Began Bongo Bongo Battle" }, - { 0x78, "Began Ganondorf Battle" }, - { 0x80, "Zelda Fled Hyrule Castle" }, - { 0x82, "Bridge Unlocked (After Zelda Escape Cutscene)" }, - { 0x8C, "Paid Back Keaton Mask Fee" }, - { 0x8D, "Paid Back Skull Mask Fee" }, - { 0x8E, "Paid Back Spooky Mask Fee" }, - { 0x8F, "Paid Back Bunny Hood Fee" }, - { 0x90, "Rescued Red Carpenter" }, - { 0x91, "Rescued Yellow Carpenter" }, - { 0x92, "Rescued Blue Carpenter" }, - { 0x93, "Rescued Green Carpenter" }, - { 0x94, "Spoke to Nabooru in Spirit Temple" }, - { 0x95, "Nabooru Captured by Twinrova" }, - { 0x96, "Spoke to Cursed Man in Skulltula House" }, - { 0x9C, "Played Song for Scarecrow as Adult" }, - { 0xA0, "Entered Hyrule Field" }, - { 0xA1, "Entered Death Mountain Trail" }, - { 0xA3, "Entered Kakariko Village" }, - { 0xA4, "Entered Zora's Domain" }, - { 0xA5, "Entered Hyrule Castle" }, - { 0xA6, "Entered Goron City" }, - { 0xA7, "Entered Temple of Time" }, - { 0xA8, "Entered Deku Tree" }, - { 0xA9, "Learned Song of Time" }, - { 0xAA, "Bongo Bongo Escaped Well" }, - { 0xAC, "Learned Requiem of Spirit" }, - { 0xAD, "Completed Spirit Trial" }, - { 0xB0, "Entered Dodongo's Cavern" }, - { 0xB1, "Entered Lake Hylia" }, - { 0xB2, "Entered Gerudo Valley" }, - { 0xB3, "Entered Gerudo's Fortress" }, - { 0xB4, "Entered Lon Lon Ranch" }, - { 0xB5, "Entered Jabu-Jabu's Belly" }, - { 0xB6, "Entered Graveyard" }, - { 0xB7, "Entered Zora's Fountain" }, - { 0xB8, "Entered Desert Colossus" }, - { 0xB9, "Entered Death Mountain Crater" }, - { 0xBA, "Entered Ganon's Castle (Exterior)" }, - { 0xBB, "Completed Forest Trial" }, - { 0xBC, "Completed Water Trial" }, - { 0xBD, "Completed Shadow Trial" }, - { 0xBE, "Completed Fire Trial" }, - { 0xBF, "Completed Light Trial" }, - { 0xC0, "Nabooru Ordered to Fight by Twinrova" }, - { 0xC1, "Spoke to Saria on Lost Woods Bridge" }, - { 0xC3, "Dispelled Ganon's Tower Barrier" }, - { 0xC4, "Returned to Temple of Time With All Medallions" }, - { 0xC5, "Sheik, Spawned at Master Sword Pedestal as Adult" }, - { 0xC6, "Spoke to Deku Tree Sprout" }, - { 0xC7, "Watched Ganon's Tower Collapse / Caught by Gerudo" }, - { 0xC8, "Obtained Spirit Medallion" }, - { 0xC9, "Demo_Effect, Temple of Time Warp in blue aura + sfx the first time you spawn as Adult" }, - { 0xD0, "Obtained Frogs' Piece of Heart" }, - { 0xD1, "Played Zelda's Lullaby for Frogs" }, - { 0xD2, "Played Epona's Song for Frogs" }, - { 0xD3, "Played Sun's Song for Frogs" }, - { 0xD4, "Played Saria's Song for Frogs" }, - { 0xD5, "Played Song of Time for Frogs" }, - { 0xD6, "Played Song of Storms for Frogs" }, - { 0xDA, "Obtained Adult's Wallet" }, - { 0xDB, "Obtained Stone of Agony" }, - { 0xDC, "Obtained Giant's Wallet" }, - { 0xDD, "Obtained Skulltula House's Bombchu" }, - { 0xDE, "Obtained Skulltula House's Piece of Heart" }, - } }, - { "Item Get Inf Flags", ITEM_GET_INF, 0x03, { - { 0x02, "Obtained Super Cucco Bottle" }, - { 0x03, "Bought Bombchu (Shelf 2: Top Right)" }, - { 0x04, "Bought Bombchu (Shelf 1: Bot. Right)" }, - { 0x05, "Bought Bombchu (Shelf 1: Top Left)" }, - { 0x06, "Bought Bombchu (Shelf 2: Bot. Left)" }, - { 0x07, "Bought Bombchu (Shelf 2: Bot. Right)" }, - { 0x08, "Bought Bombchu (Shelf 1: Top Right)" }, - { 0x09, "Bought Bombchu (Shelf 1: Bot. Left)" }, - { 0x0A, "Bought Bombchu (Shelf 2: Top Left)" }, - { 0x0B, "Obtained Scrub's Heart Piece" }, - { 0x0C, "Obtained Cucco Lady's Bottle" }, - { 0x0D, "Obtained Bullet Bag Upgrade (Market)" }, - { 0x0E, "Obtained Big Quiver" }, - { 0x0F, "Obtained Biggest Quiver" }, - { 0x10, "Obtained Scientist's Heart Piece" }, - { 0x11, "Obtained Bowling Bomb Bag Upgrade" }, - { 0x12, "Obtained Bowling Heart Piece" }, - { 0x13, "Obtained Deku Seeds" }, - { 0x15, "Obtained Roof Guy's Heart Piece" }, - { 0x16, "Obtained Skullkid's Heart Piece" }, - { 0x17, "Obtained Skullkids' Heart Piece" }, - { 0x18, "Obtained Farore's Wind" }, - { 0x19, "Obtained Din's Fire" }, - { 0x1A, "Obtained Nayru's Love" }, - { 0x1B, "Obtained Treasure Chest Game Reward" }, - { 0x1C, "Obtained Grave-Dig Heart Piece" }, - { 0x1D, "Obtained Bullet Bag Upgrade (Woods)" }, - { 0x1E, "Obtained Deku Stick Upgrade (Stage)" }, - { 0x1F, "Obtained Deku Nut Upgrade (Stage)" }, - { 0x23, "Obtained Keaton Mask" }, - { 0x24, "Obtained Skull Mask" }, - { 0x25, "Obtained Spooky Mask" }, - { 0x26, "Obtained Bunny Hood" }, - { 0x2A, "Obtained Mask of Truth" }, - { 0x2C, "Obtained Pocket Egg" }, - { 0x2E, "Obtained Cojiro" }, - { 0x30, "Obtained Odd Potion" }, - { 0x31, "Obtained Poacher's Saw" }, - { 0x38, "Sold Keaton Mask" }, - { 0x39, "Sold Skull Mask" }, - { 0x3A, "Sold Spooky Mask" }, - { 0x3B, "Sold Bunny Hood" }, - { 0x3F, "Obtained Mask of Truth" }, - } }, - { "Inf Flags", INF_TABLE, 0x1D, { - { 0x00, "Greeted by Saria" }, - { 0x01, "Spoke to Saria About Obtaining Fairy" }, - { 0x03, "Complained About Mido to Saria" }, - { 0x05, "Spoke to Saria in Saria's House" }, - { 0x0C, "Mido Asked to See Sword & Shield" }, - { 0x15, "Spoke to Mido in Lost Woods as Adult" }, - { 0x19, "Told Mido Saria Won't Return" }, - { 0x1E, "Spoke to Kokiri Girl by Jumping Stones" }, - { 0x22, "Spoke to Kokiri Boy Guarding Forest Exit" }, - { 0x24, "Spoke to Kokiri Boy Cutting Grass" }, - { 0x26, "Spoke to Kokiri Girl on Shop Awning" }, - { 0x28, "Spoke to Kokiri Girl About Training Center" }, - { 0x41, "Spoke to Kokiri Boy on Bed in Mido's House" }, - { 0x51, "Spoke to Kokiri Girl in Saria's House" }, - { 0x59, "Spoke to Know-It-All Bro. About Temple" }, - { 0x61, "Spoke to Know-It-All Bro. About Saria" }, - { 0x66, "Spoke to Deku Tree Sprout After Cutscene" }, - { 0x6C, "Spoke to Dying Knight" }, - { 0x76, "Showed Zelda's Letter to Gate Guard" }, - { 0x77, "Gate Guard Put On Keaton Mask" }, - { 0x7E, "Spoke to Talon in Lon Lon Ranch House" }, - { 0x84, "Spoke to Child Malon at Castle or Market" }, - { 0x85, "Child Malon Said Epona Was Afraid of You" }, - { 0x8B, "Entered Hyrule Castle" }, - { 0x94, "Spoke to Ingo at Ranch Before Talon's Return" }, - { 0x97, "Spoke to Ingo at Ranch" }, - { 0x9A, "Spoke to Ingo as Adult" }, - { 0xA2, "Refused Ingo's 50 Rupee Rental Request" }, - { 0xAB, "Rode a Horse at Ingo's Ranch" }, - { 0xB0, "Spoke to Medigoron as Child" }, - { 0xB1, "Spoke to Medigoron as Adult" }, - { 0xB6, "Spoke to Poe Collector in Ruined Market" }, - { 0xB7, "Spoke to Fado in Kokiri Forest as Child" }, - { 0xB8, "Spoke to Malon After Saving Ranch" }, - { 0xB9, "Spoke to Malon on Horseback" }, - { 0xBC, "Fado requested Odd Potion" }, - { 0xC0, "Spoke to Fat Woman by Market Potion Shop" }, - { 0xC1, "Spoke to Fat Woman After Zelda's Escape" }, - { 0xC2, "Spoke to Burly Man About Talon Search" }, - { 0xC3, "Spoke to Burly Man After Zelda's Escape" }, - { 0xC4, "Spoke to Thief After Zelda's Escape" }, - { 0xC5, "Spoke to Thin Man by Market Target Shop" }, - { 0xC6, "Spoke to Old Woman by Market Fountain" }, - { 0xC7, "Spoke to Old Man by Bombchu Bowling" }, - { 0xC8, "Spoke to Thin Lady by Bombchu Bowling" }, - { 0xC9, "Spoke to Thin Lady After Zelda's Escape (1.0)" }, - { 0xCA, "Spoke to Red Joker in Market" }, - { 0xCB, "Spoke to Blue Joker in Market (1.0) / Dog Lady as Adult (DBG)" }, - { 0xCC, "Spoke to Itchy Lady After Malon Left Town" }, - { 0xCD, "Spoke to Blue Jokester in Market (DBG)" }, - { 0xCE, "Spoke to Thin Lady After Zelda's Escape (DBG)" }, - { 0xD9, "Spoke to Dampé as Child" }, - { 0xE0, "Spoke to Goron by Cavern" }, - { 0xE3, "Spoke to Goron Hiding Stick" }, - { 0xE6, "Spoke to Goron by Woods Exit" }, - { 0xEB, "Spoke to Goron by Bomb Flowers" }, - { 0xF0, "Spoke to Goron at City? Entrance" }, - { 0xF4, "Spoke to Ruby-Crazed Goron" }, - { 0xFC, "Spoke to Goron Shop Owner" }, - { 0x109, "Goron City Doors Unlocked" }, - { 0x10B, "Spoke to Goron Link About Volvagia" }, - { 0x10C, "Stopped Goron Link's Rolling" }, - { 0x10E, "Spoke to Goron Link" }, - { 0x113, "Spoke to Darunia in Goron City" }, - { 0x11A, "Spoke to Darunia in Fire Temple" }, - { 0x11E, "Obtained Bomb Bag Upgrade (Goron City)" }, - { 0x124, "Spoke to Zora Near Zora Shop?" }, - { 0x128, "Spoke to Zora Beside Zora Shop?" }, - { 0x129, "Spoke to Zora Swimming Behind Zora Shop" }, - { 0x138, "Thawed King Zora" }, - { 0x139, "Obtained Zora Tunic" }, - { 0x140, "Ruto in JJ (M7) on Blue Switch" }, - { 0x141, "Ruto in JJ (M2) Meet Ruto" }, - { 0x142, "Ruto in JJ (M3) Talk First Time" }, - { 0x143, "Ruto in JJ (M10) Can Be Escorted" }, - { 0x144, "Ruto in JJ (?) Wants to be Tossed to Sapphire" }, - { 0x145, "Ruto in JJ (M6) on Sapphire platform" }, - { 0x146, "Ruto in JJ (M6) Kidnapped" }, - { 0x147, "Ruto in JJ, Spawns on F1 Instead of B1" }, - { 0x160, "Spoke to Man in Impa's House During Day" }, - { 0x161, "Spoke to Man in Impa's House at Night" }, - { 0x162, "Spoke to Man in Impa's House as Adult" }, - { 0x163, "Spoke to Carpenter Boss's Wife as Child" }, - { 0x164, "Spoke to Carpenter Boss's Wife as Adult" }, - { 0x16C, "Refused Nabooru's Request" }, - { 0x170, "Spoke to Carpenter Boss in Valley" }, - { 0x172, "Spoke to Carpenter Boss in Kakariko" }, - { 0x176, "Spoke to Blue Carpenter in Tent" }, - { 0x178, "Spoke to Green Carpenter in Tent" }, - { 0x17F, "Running Man Suggested a Race" }, - { 0x190, "Obtained Gerudo Archery Piece of Heart" }, - { 0x191, "Obtained Dog Lady's Piece of Heart" }, - { 0x192, "Obtained Deku Stick Upgrade (Lost Woods)" }, - { 0x193, "Obtained Deku Nut Upgrade (Grotto)" }, - { 0x195, "Spoke to Kaepora in Lake Hylia" }, - { 0x196, "Spoke to Cursed Man With <10 Tokens" }, - { 0x197, "Spoke to Cursed Man With 10 Tokens" }, - { 0x198, "Obtained Small Magic Jar" }, - { 0x199, "Caught Cucco by Field Entrance" }, - { 0x19A, "Caught Cucco by Bazaar" }, - { 0x19B, "Caught Cucco by Cucco Pen" }, - { 0x19C, "Caught Cucco Behind Windmill" }, - { 0x19D, "Caught Cucco in Crate" }, - { 0x19E, "Caught Cucco by Skulltula House" }, - { 0x19F, "Caught Cucco Behind Potion Shop" }, - { 0x1A0, "Entered Deku Tree" }, - { 0x1A1, "Entered Dodongo's Cavern" }, - { 0x1A2, "Entered Jabu-Jabu's Belly" }, - { 0x1A3, "Entered Forest Temple" }, - { 0x1A4, "Entered Fire Temple" }, - { 0x1A5, "Entered Water Temple" }, - { 0x1A6, "Entered Spirit Temple" }, - { 0x1A7, "Entered Shadow Temple" }, - { 0x1A8, "Entered Bottom of the Well" }, - { 0x1A9, "Entered Ice Cavern" }, - { 0x1AA, "Entered Ganon's Tower" }, - { 0x1AB, "Entered Gerudo Training Ground" }, - { 0x1AC, "Entered Thieves' Hideout" }, - { 0x1AD, "Entered Ganon's Castle" }, - { 0x1AE, "Entered Ganon's Tower (Collapsing)" }, - { 0x1AF, "Entered Ganon's Castle (Collapsing)" }, - { 0x1D0, "No Sword on B" }, - } }, - { "Event Inf Flags", EVENT_INF, 0x03, { - { 0x00, "Rented Horse From Ingo" }, - { 0x01, "Racing Ingo" }, - { 0x02, "Won First Race With Ingo?" }, - { 0x05, "Lost Race With Ingo?" }, - { 0x06, "Racing Ingo For the Second Time" }, - { 0x08, "Finished Special Cucco Minigame / Began Gerudo Archery" }, - { 0x0A, "Won Special Cucco Minigame?" }, - { 0x0F, "Rented Horse From Ingo" }, - { 0x10, "Racing Running Man" }, - { 0x20, "Market Crowd Text Randomizer" }, - { 0x21, "Market Crowd Text Randomizer" }, - { 0x22, "Market Crowd Text Randomizer" }, - { 0x23, "Market Crowd Text Randomizer" }, - { 0x24, "Market Crowd Text Randomizer" }, - { 0x30, "Entered the Market" }, - } }, - { "Randomizer Inf Flags", RANDOMIZER_INF, (RAND_INF_MAX + 15) / 16, { - { RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE, "DUNGEONS_DONE_SPIRIT_TEMPLE" }, - { RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE, "DUNGEONS_DONE_SHADOW_TEMPLE" }, + { "Event Check Inf Flags", + EVENT_CHECK_INF, + 0x0D, + { + { 0x02, "First Spoke to Mido" }, + { 0x03, "Complained About Mido to Saria" }, + { 0x04, "Showed Mido Sword & Shield" }, + { 0x05, "Deku Tree Opened Mouth" }, + { 0x06, "Spoke to Saria After Deku Tree's Death" }, + { 0x07, "Obtained Kokiri Emerald & Deku Tree Dead" }, + { 0x09, "Used Deku Tree Blue Warp" }, + { 0x0A, "Played Saria's Song for Mido as Adult" }, + { 0x0C, "Met Deku Tree" }, + { 0x0F, "Spoke to Mido about Saria's whereabouts" }, + { 0x10, "Spoke to Child Malon at Castle or Market" }, + { 0x11, "Spoke to Ingo at Ranch before Talon returns" }, + { 0x12, "Obtained Pocket Egg" }, + { 0x13, "Woke Talon" }, + { 0x14, "Talon Fled Hyrule Castle" }, + { 0x15, "Spoke to Child Malon at Ranch" }, + { 0x16, "Invited to Sing With Child Malon" }, + { 0x17, "Great Deku Tree is Dead" }, + { 0x18, "Obtained Epona" }, + { 0x19, "Obtained Kokiri's Emerald" }, + { 0x1B, "Rented Horse From Ingo" }, + { 0x1C, "Spoke to Mido After Deku Tree's Death" }, + { 0x1D, "Destroyed the Royal Family's Tomb" }, + { 0x1E, "Won the Cow in Malon's Race" }, + { 0x23, "Bombed Dodongo's Cavern Entrance" }, + { 0x25, "Used Dodongo's Cavern Blue Warp" }, + { 0x2F, "Death Mountain Erupted" }, + { 0x30, "Spoke to a Zora" }, + { 0x31, "Obtained Ruto's Letter" }, + { 0x33, "King Zora Moved Aside" }, + { 0x37, "Used Jabu-Jabu Blue Warp" }, + { 0x38, "Obtained Silver Scale" }, + { 0x39, "Opened Entrance to Zora's Domain" }, + { 0x3A, "Offered Fish to Jabu-Jabu" }, + { 0x3B, "Began Nabooru Battle" }, + { 0x3C, "Finished Nabooru Battle" }, + { 0x40, "Obtained Zelda's Letter" }, + { 0x43, "Obtained Ocarina of Time" }, + { 0x45, "Pulled Master Sword from Pedestal" }, + { 0x48, "Used Forest Temple Blue Warp" }, + { 0x49, "Used Fire Temple Blue Warp" }, + { 0x4A, "Used Water Temple Blue Warp" }, + { 0x4B, "Opened the Door of Time" }, + { 0x4D, "Rainbow Bridge Built by Sages" }, + { 0x4E, "Caught by Hyrule Castle Guards" }, + { 0x4F, "Entered the Master Sword Chamber" }, + { 0x50, "Learned Minuet of Forest" }, + { 0x51, "Learned Bolero of Fire" }, + { 0x52, "Learned Serenade of Water" }, + { 0x54, "Learned Nocturne of Shadow" }, + { 0x55, "Sheik Moved From Sword Pedestal" }, + { 0x57, "Learned Saria's Song" }, + { 0x59, "Learned Zelda's Lullaby" }, + { 0x5A, "Learned Sun's Song" }, + { 0x5B, "Learned Song of Storms" }, + { 0x65, "Played Song of Storms in Windmill" }, + { 0x67, "Drained Well in Kakariko Village" }, + { 0x68, "Played Gerudo Archery Minigame" }, + { 0x69, "Restored Lake Hylia's Water" }, + { 0x6A, "Woke Talon in Kakariko" }, + { 0x6B, "Spoke to Talon After Saving Ranch" }, + { 0x6F, "Spoke to Kaepora Gaebora by Lost Woods" }, + { 0x70, "Began Gohma Battle" }, + { 0x71, "Began King Dodongo Battle" }, + { 0x72, "Began Phantom Ganon Battle" }, + { 0x73, "Began Volvagia Battle" }, + { 0x74, "Began Morpha Battle" }, + { 0x75, "Began Twinrova Battle" }, + { 0x76, "Began Barinade Battle" }, + { 0x77, "Began Bongo Bongo Battle" }, + { 0x78, "Began Ganondorf Battle" }, + { 0x80, "Zelda Fled Hyrule Castle" }, + { 0x82, "Bridge Unlocked (After Zelda Escape Cutscene)" }, + { 0x8C, "Paid Back Keaton Mask Fee" }, + { 0x8D, "Paid Back Skull Mask Fee" }, + { 0x8E, "Paid Back Spooky Mask Fee" }, + { 0x8F, "Paid Back Bunny Hood Fee" }, + { 0x90, "Rescued Red Carpenter" }, + { 0x91, "Rescued Yellow Carpenter" }, + { 0x92, "Rescued Blue Carpenter" }, + { 0x93, "Rescued Green Carpenter" }, + { 0x94, "Spoke to Nabooru in Spirit Temple" }, + { 0x95, "Nabooru Captured by Twinrova" }, + { 0x96, "Spoke to Cursed Man in Skulltula House" }, + { 0x9C, "Played Song for Scarecrow as Adult" }, + { 0xA0, "Entered Hyrule Field" }, + { 0xA1, "Entered Death Mountain Trail" }, + { 0xA3, "Entered Kakariko Village" }, + { 0xA4, "Entered Zora's Domain" }, + { 0xA5, "Entered Hyrule Castle" }, + { 0xA6, "Entered Goron City" }, + { 0xA7, "Entered Temple of Time" }, + { 0xA8, "Entered Deku Tree" }, + { 0xA9, "Learned Song of Time" }, + { 0xAA, "Bongo Bongo Escaped Well" }, + { 0xAC, "Learned Requiem of Spirit" }, + { 0xAD, "Completed Spirit Trial" }, + { 0xB0, "Entered Dodongo's Cavern" }, + { 0xB1, "Entered Lake Hylia" }, + { 0xB2, "Entered Gerudo Valley" }, + { 0xB3, "Entered Gerudo's Fortress" }, + { 0xB4, "Entered Lon Lon Ranch" }, + { 0xB5, "Entered Jabu-Jabu's Belly" }, + { 0xB6, "Entered Graveyard" }, + { 0xB7, "Entered Zora's Fountain" }, + { 0xB8, "Entered Desert Colossus" }, + { 0xB9, "Entered Death Mountain Crater" }, + { 0xBA, "Entered Ganon's Castle (Exterior)" }, + { 0xBB, "Completed Forest Trial" }, + { 0xBC, "Completed Water Trial" }, + { 0xBD, "Completed Shadow Trial" }, + { 0xBE, "Completed Fire Trial" }, + { 0xBF, "Completed Light Trial" }, + { 0xC0, "Nabooru Ordered to Fight by Twinrova" }, + { 0xC1, "Spoke to Saria on Lost Woods Bridge" }, + { 0xC3, "Dispelled Ganon's Tower Barrier" }, + { 0xC4, "Returned to Temple of Time With All Medallions" }, + { 0xC5, "Sheik, Spawned at Master Sword Pedestal as Adult" }, + { 0xC6, "Spoke to Deku Tree Sprout" }, + { 0xC7, "Watched Ganon's Tower Collapse / Caught by Gerudo" }, + { 0xC8, "Obtained Spirit Medallion" }, + { 0xC9, "Demo_Effect, Temple of Time Warp in blue aura + sfx the first time you spawn as Adult" }, + { 0xD0, "Obtained Frogs' Piece of Heart" }, + { 0xD1, "Played Zelda's Lullaby for Frogs" }, + { 0xD2, "Played Epona's Song for Frogs" }, + { 0xD3, "Played Sun's Song for Frogs" }, + { 0xD4, "Played Saria's Song for Frogs" }, + { 0xD5, "Played Song of Time for Frogs" }, + { 0xD6, "Played Song of Storms for Frogs" }, + { 0xDA, "Obtained Adult's Wallet" }, + { 0xDB, "Obtained Stone of Agony" }, + { 0xDC, "Obtained Giant's Wallet" }, + { 0xDD, "Obtained Skulltula House's Bombchu" }, + { 0xDE, "Obtained Skulltula House's Piece of Heart" }, + } }, + { "Item Get Inf Flags", + ITEM_GET_INF, + 0x03, + { + { 0x02, "Obtained Super Cucco Bottle" }, + { 0x03, "Bought Bombchu (Shelf 2: Top Right)" }, + { 0x04, "Bought Bombchu (Shelf 1: Bot. Right)" }, + { 0x05, "Bought Bombchu (Shelf 1: Top Left)" }, + { 0x06, "Bought Bombchu (Shelf 2: Bot. Left)" }, + { 0x07, "Bought Bombchu (Shelf 2: Bot. Right)" }, + { 0x08, "Bought Bombchu (Shelf 1: Top Right)" }, + { 0x09, "Bought Bombchu (Shelf 1: Bot. Left)" }, + { 0x0A, "Bought Bombchu (Shelf 2: Top Left)" }, + { 0x0B, "Obtained Scrub's Heart Piece" }, + { 0x0C, "Obtained Cucco Lady's Bottle" }, + { 0x0D, "Obtained Bullet Bag Upgrade (Market)" }, + { 0x0E, "Obtained Big Quiver" }, + { 0x0F, "Obtained Biggest Quiver" }, + { 0x10, "Obtained Scientist's Heart Piece" }, + { 0x11, "Obtained Bowling Bomb Bag Upgrade" }, + { 0x12, "Obtained Bowling Heart Piece" }, + { 0x13, "Obtained Deku Seeds" }, + { 0x15, "Obtained Roof Guy's Heart Piece" }, + { 0x16, "Obtained Skullkid's Heart Piece" }, + { 0x17, "Obtained Skullkids' Heart Piece" }, + { 0x18, "Obtained Farore's Wind" }, + { 0x19, "Obtained Din's Fire" }, + { 0x1A, "Obtained Nayru's Love" }, + { 0x1B, "Obtained Treasure Chest Game Reward" }, + { 0x1C, "Obtained Grave-Dig Heart Piece" }, + { 0x1D, "Obtained Bullet Bag Upgrade (Woods)" }, + { 0x1E, "Obtained Deku Stick Upgrade (Stage)" }, + { 0x1F, "Obtained Deku Nut Upgrade (Stage)" }, + { 0x23, "Obtained Keaton Mask" }, + { 0x24, "Obtained Skull Mask" }, + { 0x25, "Obtained Spooky Mask" }, + { 0x26, "Obtained Bunny Hood" }, + { 0x2A, "Obtained Mask of Truth" }, + { 0x2C, "Obtained Pocket Egg" }, + { 0x2E, "Obtained Cojiro" }, + { 0x30, "Obtained Odd Potion" }, + { 0x31, "Obtained Poacher's Saw" }, + { 0x38, "Sold Keaton Mask" }, + { 0x39, "Sold Skull Mask" }, + { 0x3A, "Sold Spooky Mask" }, + { 0x3B, "Sold Bunny Hood" }, + { 0x3F, "Obtained Mask of Truth" }, + } }, + { "Inf Flags", + INF_TABLE, + 0x1D, + { + { 0x00, "Greeted by Saria" }, + { 0x01, "Spoke to Saria About Obtaining Fairy" }, + { 0x03, "Complained About Mido to Saria" }, + { 0x05, "Spoke to Saria in Saria's House" }, + { 0x0C, "Mido Asked to See Sword & Shield" }, + { 0x15, "Spoke to Mido in Lost Woods as Adult" }, + { 0x19, "Told Mido Saria Won't Return" }, + { 0x1E, "Spoke to Kokiri Girl by Jumping Stones" }, + { 0x22, "Spoke to Kokiri Boy Guarding Forest Exit" }, + { 0x24, "Spoke to Kokiri Boy Cutting Grass" }, + { 0x26, "Spoke to Kokiri Girl on Shop Awning" }, + { 0x28, "Spoke to Kokiri Girl About Training Center" }, + { 0x41, "Spoke to Kokiri Boy on Bed in Mido's House" }, + { 0x51, "Spoke to Kokiri Girl in Saria's House" }, + { 0x59, "Spoke to Know-It-All Bro. About Temple" }, + { 0x61, "Spoke to Know-It-All Bro. About Saria" }, + { 0x66, "Spoke to Deku Tree Sprout After Cutscene" }, + { 0x6C, "Spoke to Dying Knight" }, + { 0x76, "Showed Zelda's Letter to Gate Guard" }, + { 0x77, "Gate Guard Put On Keaton Mask" }, + { 0x7E, "Spoke to Talon in Lon Lon Ranch House" }, + { 0x84, "Spoke to Child Malon at Castle or Market" }, + { 0x85, "Child Malon Said Epona Was Afraid of You" }, + { 0x8B, "Entered Hyrule Castle" }, + { 0x94, "Spoke to Ingo at Ranch Before Talon's Return" }, + { 0x97, "Spoke to Ingo at Ranch" }, + { 0x9A, "Spoke to Ingo as Adult" }, + { 0xA2, "Refused Ingo's 50 Rupee Rental Request" }, + { 0xAB, "Rode a Horse at Ingo's Ranch" }, + { 0xB0, "Spoke to Medigoron as Child" }, + { 0xB1, "Spoke to Medigoron as Adult" }, + { 0xB6, "Spoke to Poe Collector in Ruined Market" }, + { 0xB7, "Spoke to Fado in Kokiri Forest as Child" }, + { 0xB8, "Spoke to Malon After Saving Ranch" }, + { 0xB9, "Spoke to Malon on Horseback" }, + { 0xBC, "Fado requested Odd Potion" }, + { 0xC0, "Spoke to Fat Woman by Market Potion Shop" }, + { 0xC1, "Spoke to Fat Woman After Zelda's Escape" }, + { 0xC2, "Spoke to Burly Man About Talon Search" }, + { 0xC3, "Spoke to Burly Man After Zelda's Escape" }, + { 0xC4, "Spoke to Thief After Zelda's Escape" }, + { 0xC5, "Spoke to Thin Man by Market Target Shop" }, + { 0xC6, "Spoke to Old Woman by Market Fountain" }, + { 0xC7, "Spoke to Old Man by Bombchu Bowling" }, + { 0xC8, "Spoke to Thin Lady by Bombchu Bowling" }, + { 0xC9, "Spoke to Thin Lady After Zelda's Escape (1.0)" }, + { 0xCA, "Spoke to Red Joker in Market" }, + { 0xCB, "Spoke to Blue Joker in Market (1.0) / Dog Lady as Adult (DBG)" }, + { 0xCC, "Spoke to Itchy Lady After Malon Left Town" }, + { 0xCD, "Spoke to Blue Jokester in Market (DBG)" }, + { 0xCE, "Spoke to Thin Lady After Zelda's Escape (DBG)" }, + { 0xD9, "Spoke to Dampé as Child" }, + { 0xE0, "Spoke to Goron by Cavern" }, + { 0xE3, "Spoke to Goron Hiding Stick" }, + { 0xE6, "Spoke to Goron by Woods Exit" }, + { 0xEB, "Spoke to Goron by Bomb Flowers" }, + { 0xF0, "Spoke to Goron at City? Entrance" }, + { 0xF4, "Spoke to Ruby-Crazed Goron" }, + { 0xFC, "Spoke to Goron Shop Owner" }, + { 0x109, "Goron City Doors Unlocked" }, + { 0x10B, "Spoke to Goron Link About Volvagia" }, + { 0x10C, "Stopped Goron Link's Rolling" }, + { 0x10E, "Spoke to Goron Link" }, + { 0x113, "Spoke to Darunia in Goron City" }, + { 0x11A, "Spoke to Darunia in Fire Temple" }, + { 0x11E, "Obtained Bomb Bag Upgrade (Goron City)" }, + { 0x124, "Spoke to Zora Near Zora Shop?" }, + { 0x128, "Spoke to Zora Beside Zora Shop?" }, + { 0x129, "Spoke to Zora Swimming Behind Zora Shop" }, + { 0x138, "Thawed King Zora" }, + { 0x139, "Obtained Zora Tunic" }, + { 0x140, "Ruto in JJ (M7) on Blue Switch" }, + { 0x141, "Ruto in JJ (M2) Meet Ruto" }, + { 0x142, "Ruto in JJ (M3) Talk First Time" }, + { 0x143, "Ruto in JJ (M10) Can Be Escorted" }, + { 0x144, "Ruto in JJ (?) Wants to be Tossed to Sapphire" }, + { 0x145, "Ruto in JJ (M6) on Sapphire platform" }, + { 0x146, "Ruto in JJ (M6) Kidnapped" }, + { 0x147, "Ruto in JJ, Spawns on F1 Instead of B1" }, + { 0x160, "Spoke to Man in Impa's House During Day" }, + { 0x161, "Spoke to Man in Impa's House at Night" }, + { 0x162, "Spoke to Man in Impa's House as Adult" }, + { 0x163, "Spoke to Carpenter Boss's Wife as Child" }, + { 0x164, "Spoke to Carpenter Boss's Wife as Adult" }, + { 0x16C, "Refused Nabooru's Request" }, + { 0x170, "Spoke to Carpenter Boss in Valley" }, + { 0x172, "Spoke to Carpenter Boss in Kakariko" }, + { 0x176, "Spoke to Blue Carpenter in Tent" }, + { 0x178, "Spoke to Green Carpenter in Tent" }, + { 0x17F, "Running Man Suggested a Race" }, + { 0x190, "Obtained Gerudo Archery Piece of Heart" }, + { 0x191, "Obtained Dog Lady's Piece of Heart" }, + { 0x192, "Obtained Deku Stick Upgrade (Lost Woods)" }, + { 0x193, "Obtained Deku Nut Upgrade (Grotto)" }, + { 0x195, "Spoke to Kaepora in Lake Hylia" }, + { 0x196, "Spoke to Cursed Man With <10 Tokens" }, + { 0x197, "Spoke to Cursed Man With 10 Tokens" }, + { 0x198, "Obtained Small Magic Jar" }, + { 0x199, "Caught Cucco by Field Entrance" }, + { 0x19A, "Caught Cucco by Bazaar" }, + { 0x19B, "Caught Cucco by Cucco Pen" }, + { 0x19C, "Caught Cucco Behind Windmill" }, + { 0x19D, "Caught Cucco in Crate" }, + { 0x19E, "Caught Cucco by Skulltula House" }, + { 0x19F, "Caught Cucco Behind Potion Shop" }, + { 0x1A0, "Entered Deku Tree" }, + { 0x1A1, "Entered Dodongo's Cavern" }, + { 0x1A2, "Entered Jabu-Jabu's Belly" }, + { 0x1A3, "Entered Forest Temple" }, + { 0x1A4, "Entered Fire Temple" }, + { 0x1A5, "Entered Water Temple" }, + { 0x1A6, "Entered Spirit Temple" }, + { 0x1A7, "Entered Shadow Temple" }, + { 0x1A8, "Entered Bottom of the Well" }, + { 0x1A9, "Entered Ice Cavern" }, + { 0x1AA, "Entered Ganon's Tower" }, + { 0x1AB, "Entered Gerudo Training Ground" }, + { 0x1AC, "Entered Thieves' Hideout" }, + { 0x1AD, "Entered Ganon's Castle" }, + { 0x1AE, "Entered Ganon's Tower (Collapsing)" }, + { 0x1AF, "Entered Ganon's Castle (Collapsing)" }, + { 0x1D0, "No Sword on B" }, + } }, + { "Event Inf Flags", + EVENT_INF, + 0x03, + { + { 0x00, "Rented Horse From Ingo" }, + { 0x01, "Racing Ingo" }, + { 0x02, "Won First Race With Ingo?" }, + { 0x05, "Lost Race With Ingo?" }, + { 0x06, "Racing Ingo For the Second Time" }, + { 0x08, "Finished Special Cucco Minigame / Began Gerudo Archery" }, + { 0x0A, "Won Special Cucco Minigame?" }, + { 0x0F, "Rented Horse From Ingo" }, + { 0x10, "Racing Running Man" }, + { 0x20, "Market Crowd Text Randomizer" }, + { 0x21, "Market Crowd Text Randomizer" }, + { 0x22, "Market Crowd Text Randomizer" }, + { 0x23, "Market Crowd Text Randomizer" }, + { 0x24, "Market Crowd Text Randomizer" }, + { 0x30, "Entered the Market" }, + } }, + { "Randomizer Inf Flags", + RANDOMIZER_INF, + (RAND_INF_MAX + 15) / 16, + { + { RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE, "DUNGEONS_DONE_SPIRIT_TEMPLE" }, + { RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE, "DUNGEONS_DONE_SHADOW_TEMPLE" }, - { RAND_INF_COWS_MILKED_KF_LINKS_HOUSE_COW, "COWS_MILKED_KF_LINKS_HOUSE_COW" }, - { RAND_INF_COWS_MILKED_HF_COW_GROTTO_COW, "COWS_MILKED_HF_COW_GROTTO_COW" }, - { RAND_INF_COWS_MILKED_LLR_STABLES_LEFT_COW, "COWS_MILKED_LLR_STABLES_LEFT_COW" }, - { RAND_INF_COWS_MILKED_LLR_STABLES_RIGHT_COW, "COWS_MILKED_LLR_STABLES_RIGHT_COW" }, - { RAND_INF_COWS_MILKED_LLR_TOWER_LEFT_COW, "COWS_MILKED_LLR_TOWER_LEFT_COW" }, - { RAND_INF_COWS_MILKED_LLR_TOWER_RIGHT_COW, "COWS_MILKED_LLR_TOWER_RIGHT_COW" }, - { RAND_INF_COWS_MILKED_KAK_IMPAS_HOUSE_COW, "COWS_MILKED_KAK_IMPAS_HOUSE_COW" }, - { RAND_INF_COWS_MILKED_DMT_COW_GROTTO_COW, "COWS_MILKED_DMT_COW_GROTTO_COW" }, - { RAND_INF_COWS_MILKED_GV_COW, "COWS_MILKED_GV_COW" }, - { RAND_INF_COWS_MILKED_JABU_JABUS_BELLY_MQ_COW, "COWS_MILKED_JABU_JABUS_BELLY_MQ_COW" }, + { RAND_INF_COWS_MILKED_KF_LINKS_HOUSE_COW, "COWS_MILKED_KF_LINKS_HOUSE_COW" }, + { RAND_INF_COWS_MILKED_HF_COW_GROTTO_COW, "COWS_MILKED_HF_COW_GROTTO_COW" }, + { RAND_INF_COWS_MILKED_LLR_STABLES_LEFT_COW, "COWS_MILKED_LLR_STABLES_LEFT_COW" }, + { RAND_INF_COWS_MILKED_LLR_STABLES_RIGHT_COW, "COWS_MILKED_LLR_STABLES_RIGHT_COW" }, + { RAND_INF_COWS_MILKED_LLR_TOWER_LEFT_COW, "COWS_MILKED_LLR_TOWER_LEFT_COW" }, + { RAND_INF_COWS_MILKED_LLR_TOWER_RIGHT_COW, "COWS_MILKED_LLR_TOWER_RIGHT_COW" }, + { RAND_INF_COWS_MILKED_KAK_IMPAS_HOUSE_COW, "COWS_MILKED_KAK_IMPAS_HOUSE_COW" }, + { RAND_INF_COWS_MILKED_DMT_COW_GROTTO_COW, "COWS_MILKED_DMT_COW_GROTTO_COW" }, + { RAND_INF_COWS_MILKED_GV_COW, "COWS_MILKED_GV_COW" }, + { RAND_INF_COWS_MILKED_JABU_JABUS_BELLY_MQ_COW, "COWS_MILKED_JABU_JABUS_BELLY_MQ_COW" }, - { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT" }, - { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS" }, - { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY" }, - { RAND_INF_SCRUBS_PURCHASED_JABU_JABUS_BELLY_DEKU_SCRUB, "SCRUBS_PURCHASED_JABU_JABUS_BELLY_DEKU_SCRUB" }, - { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT" }, - { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_RIGHT, "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_LEFT, "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_LEFT" }, - { RAND_INF_SCRUBS_PURCHASED_HF_DEKU_SCRUB_GROTTO, "SCRUBS_PURCHASED_HF_DEKU_SCRUB_GROTTO" }, - { RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_REAR" }, - { RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_FRONT" }, - { RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_REAR" }, - { RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_FRONT" }, - { RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_LEFT" }, - { RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_CENTER" }, - { RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_REAR" }, - { RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT" }, - { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_REAR" }, - { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT" }, - { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_LEFT" }, - { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_CENTER" }, - { RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_LEFT" }, - { RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_CENTER" }, - { RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_LEFT" }, - { RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_CENTER" }, - { RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR" }, - { RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT" }, - { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT" }, - { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE" }, - { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB" }, - { RAND_INF_SCRUBS_PURCHASED_DEKU_TREE_MQ_DEKU_SCRUB, "SCRUBS_PURCHASED_DEKU_TREE_MQ_DEKU_SCRUB" }, - { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, "SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR" }, - { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, "SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT" }, - { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, "SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE" }, - { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, "SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS" }, - { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT" }, - { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER" }, - { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT" }, - { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, + "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, + "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, + "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, + "SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY" }, + { RAND_INF_SCRUBS_PURCHASED_JABU_JABUS_BELLY_DEKU_SCRUB, "SCRUBS_PURCHASED_JABU_JABUS_BELLY_DEKU_SCRUB" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, + "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, + "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_RIGHT, + "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_LEFT, "SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_HF_DEKU_SCRUB_GROTTO, "SCRUBS_PURCHASED_HF_DEKU_SCRUB_GROTTO" }, + { RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_CENTER" }, + { RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_REAR, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_CENTER" }, + { RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_CENTER" }, + { RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_LEFT, "SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_RIGHT, "SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_CENTER, "SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_CENTER" }, + { RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, + "SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, + "SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, + "SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, + "SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE, "SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE" }, + { RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB, "SCRUBS_PURCHASED_DMC_DEKU_SCRUB" }, + { RAND_INF_SCRUBS_PURCHASED_DEKU_TREE_MQ_DEKU_SCRUB, "SCRUBS_PURCHASED_DEKU_TREE_MQ_DEKU_SCRUB" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, + "SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, + "SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, + "SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE" }, + { RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, + "SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, + "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, + "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, + "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, + "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT" }, + { RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, + "SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT" }, - { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_1, "SHOP_ITEMS_KF_SHOP_ITEM_1" }, - { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_2, "SHOP_ITEMS_KF_SHOP_ITEM_2" }, - { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_3, "SHOP_ITEMS_KF_SHOP_ITEM_3" }, - { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_4, "SHOP_ITEMS_KF_SHOP_ITEM_4" }, - { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_5, "SHOP_ITEMS_KF_SHOP_ITEM_5" }, - { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_6, "SHOP_ITEMS_KF_SHOP_ITEM_6" }, - { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_7, "SHOP_ITEMS_KF_SHOP_ITEM_7" }, - { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_8, "SHOP_ITEMS_KF_SHOP_ITEM_8" }, - { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_1, "SHOP_ITEMS_GC_SHOP_ITEM_1" }, - { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_2, "SHOP_ITEMS_GC_SHOP_ITEM_2" }, - { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_3, "SHOP_ITEMS_GC_SHOP_ITEM_3" }, - { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_4, "SHOP_ITEMS_GC_SHOP_ITEM_4" }, - { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_5, "SHOP_ITEMS_GC_SHOP_ITEM_5" }, - { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_6, "SHOP_ITEMS_GC_SHOP_ITEM_6" }, - { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_7, "SHOP_ITEMS_GC_SHOP_ITEM_7" }, - { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_8, "SHOP_ITEMS_GC_SHOP_ITEM_8" }, - { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_1, "SHOP_ITEMS_ZD_SHOP_ITEM_1" }, - { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_2, "SHOP_ITEMS_ZD_SHOP_ITEM_2" }, - { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_3, "SHOP_ITEMS_ZD_SHOP_ITEM_3" }, - { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_4, "SHOP_ITEMS_ZD_SHOP_ITEM_4" }, - { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_5, "SHOP_ITEMS_ZD_SHOP_ITEM_5" }, - { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_6, "SHOP_ITEMS_ZD_SHOP_ITEM_6" }, - { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_7, "SHOP_ITEMS_ZD_SHOP_ITEM_7" }, - { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_8, "SHOP_ITEMS_ZD_SHOP_ITEM_8" }, - { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_1, "SHOP_ITEMS_KAK_BAZAAR_ITEM_1" }, - { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_2, "SHOP_ITEMS_KAK_BAZAAR_ITEM_2" }, - { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_3, "SHOP_ITEMS_KAK_BAZAAR_ITEM_3" }, - { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_4, "SHOP_ITEMS_KAK_BAZAAR_ITEM_4" }, - { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_5, "SHOP_ITEMS_KAK_BAZAAR_ITEM_5" }, - { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_6, "SHOP_ITEMS_KAK_BAZAAR_ITEM_6" }, - { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_7, "SHOP_ITEMS_KAK_BAZAAR_ITEM_7" }, - { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_8, "SHOP_ITEMS_KAK_BAZAAR_ITEM_8" }, - { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_1, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_1" }, - { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_2, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_2" }, - { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_3, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_3" }, - { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_4, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_4" }, - { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_5, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_5" }, - { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_6, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_6" }, - { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_7, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_7" }, - { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_8, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_8" }, - { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_1, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_1" }, - { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_2, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_2" }, - { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_3, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_3" }, - { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_4, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_4" }, - { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_5, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_5" }, - { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_6, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_6" }, - { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_7, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_7" }, - { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_8, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_8" }, - { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_1, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_1" }, - { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_2, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_2" }, - { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_3, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_3" }, - { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_4, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_4" }, - { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_5, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_5" }, - { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_6, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_6" }, - { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_7, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_7" }, - { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_8, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_8" }, - { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_1, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_1" }, - { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_2, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_2" }, - { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_3, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_3" }, - { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_4, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_4" }, - { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_5, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_5" }, - { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_6, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_6" }, - { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_7, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_7" }, - { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_8, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_8" }, + { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_1, "SHOP_ITEMS_KF_SHOP_ITEM_1" }, + { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_2, "SHOP_ITEMS_KF_SHOP_ITEM_2" }, + { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_3, "SHOP_ITEMS_KF_SHOP_ITEM_3" }, + { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_4, "SHOP_ITEMS_KF_SHOP_ITEM_4" }, + { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_5, "SHOP_ITEMS_KF_SHOP_ITEM_5" }, + { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_6, "SHOP_ITEMS_KF_SHOP_ITEM_6" }, + { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_7, "SHOP_ITEMS_KF_SHOP_ITEM_7" }, + { RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_8, "SHOP_ITEMS_KF_SHOP_ITEM_8" }, + { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_1, "SHOP_ITEMS_GC_SHOP_ITEM_1" }, + { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_2, "SHOP_ITEMS_GC_SHOP_ITEM_2" }, + { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_3, "SHOP_ITEMS_GC_SHOP_ITEM_3" }, + { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_4, "SHOP_ITEMS_GC_SHOP_ITEM_4" }, + { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_5, "SHOP_ITEMS_GC_SHOP_ITEM_5" }, + { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_6, "SHOP_ITEMS_GC_SHOP_ITEM_6" }, + { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_7, "SHOP_ITEMS_GC_SHOP_ITEM_7" }, + { RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_8, "SHOP_ITEMS_GC_SHOP_ITEM_8" }, + { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_1, "SHOP_ITEMS_ZD_SHOP_ITEM_1" }, + { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_2, "SHOP_ITEMS_ZD_SHOP_ITEM_2" }, + { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_3, "SHOP_ITEMS_ZD_SHOP_ITEM_3" }, + { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_4, "SHOP_ITEMS_ZD_SHOP_ITEM_4" }, + { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_5, "SHOP_ITEMS_ZD_SHOP_ITEM_5" }, + { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_6, "SHOP_ITEMS_ZD_SHOP_ITEM_6" }, + { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_7, "SHOP_ITEMS_ZD_SHOP_ITEM_7" }, + { RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_8, "SHOP_ITEMS_ZD_SHOP_ITEM_8" }, + { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_1, "SHOP_ITEMS_KAK_BAZAAR_ITEM_1" }, + { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_2, "SHOP_ITEMS_KAK_BAZAAR_ITEM_2" }, + { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_3, "SHOP_ITEMS_KAK_BAZAAR_ITEM_3" }, + { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_4, "SHOP_ITEMS_KAK_BAZAAR_ITEM_4" }, + { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_5, "SHOP_ITEMS_KAK_BAZAAR_ITEM_5" }, + { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_6, "SHOP_ITEMS_KAK_BAZAAR_ITEM_6" }, + { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_7, "SHOP_ITEMS_KAK_BAZAAR_ITEM_7" }, + { RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_8, "SHOP_ITEMS_KAK_BAZAAR_ITEM_8" }, + { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_1, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_1" }, + { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_2, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_2" }, + { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_3, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_3" }, + { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_4, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_4" }, + { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_5, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_5" }, + { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_6, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_6" }, + { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_7, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_7" }, + { RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_8, "SHOP_ITEMS_KAK_POTION_SHOP_ITEM_8" }, + { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_1, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_1" }, + { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_2, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_2" }, + { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_3, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_3" }, + { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_4, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_4" }, + { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_5, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_5" }, + { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_6, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_6" }, + { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_7, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_7" }, + { RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_8, "SHOP_ITEMS_MARKET_BAZAAR_ITEM_8" }, + { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_1, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_1" }, + { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_2, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_2" }, + { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_3, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_3" }, + { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_4, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_4" }, + { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_5, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_5" }, + { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_6, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_6" }, + { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_7, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_7" }, + { RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_8, "SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_8" }, + { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_1, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_1" }, + { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_2, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_2" }, + { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_3, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_3" }, + { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_4, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_4" }, + { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_5, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_5" }, + { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_6, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_6" }, + { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_7, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_7" }, + { RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_8, "SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_8" }, - { RAND_INF_MERCHANTS_CARPET_SALESMAN, "RAND_INF_MERCHANTS_CARPET_SALESMAN" }, - { RAND_INF_MERCHANTS_MEDIGORON, "RAND_INF_MERCHANTS_MEDIGORON" }, - { RAND_INF_MERCHANTS_GRANNYS_SHOP, "RAND_INF_MERCHANTS_GRANNY_SHOP"}, - { RAND_INF_MERCHANTS_MAGIC_BEAN_SALESMAN, "RAND_INF_MERCHANTS_MAGIC_BEAN_SALESMAN"}, + { RAND_INF_MERCHANTS_CARPET_SALESMAN, "RAND_INF_MERCHANTS_CARPET_SALESMAN" }, + { RAND_INF_MERCHANTS_MEDIGORON, "RAND_INF_MERCHANTS_MEDIGORON" }, + { RAND_INF_MERCHANTS_GRANNYS_SHOP, "RAND_INF_MERCHANTS_GRANNY_SHOP" }, + { RAND_INF_MERCHANTS_MAGIC_BEAN_SALESMAN, "RAND_INF_MERCHANTS_MAGIC_BEAN_SALESMAN" }, - { RAND_INF_ADULT_TRADES_LW_TRADE_COJIRO, "ADULT_TRADES_LW_TRADE_COJIRO" }, - { RAND_INF_ADULT_TRADES_GV_TRADE_SAW, "ADULT_TRADES_GV_TRADE_SAW" }, - { RAND_INF_ADULT_TRADES_DMT_TRADE_BROKEN_SWORD, "ADULT_TRADES_DMT_TRADE_BROKEN_SWORD" }, - { RAND_INF_ADULT_TRADES_LH_TRADE_FROG, "ADULT_TRADES_LH_TRADE_FROG" }, - { RAND_INF_ADULT_TRADES_DMT_TRADE_EYEDROPS, "ADULT_TRADES_DMT_TRADE_EYEDROPS" }, + { RAND_INF_ADULT_TRADES_LW_TRADE_COJIRO, "ADULT_TRADES_LW_TRADE_COJIRO" }, + { RAND_INF_ADULT_TRADES_GV_TRADE_SAW, "ADULT_TRADES_GV_TRADE_SAW" }, + { RAND_INF_ADULT_TRADES_DMT_TRADE_BROKEN_SWORD, "ADULT_TRADES_DMT_TRADE_BROKEN_SWORD" }, + { RAND_INF_ADULT_TRADES_LH_TRADE_FROG, "ADULT_TRADES_LH_TRADE_FROG" }, + { RAND_INF_ADULT_TRADES_DMT_TRADE_EYEDROPS, "ADULT_TRADES_DMT_TRADE_EYEDROPS" }, - { RAND_INF_KAK_100_GOLD_SKULLTULA_REWARD, "KAK_100_GOLD_SKULLTULA_REWARD" }, - { RAND_INF_GREG_FOUND, "RAND_INF_GREG_FOUND" }, + { RAND_INF_KAK_100_GOLD_SKULLTULA_REWARD, "KAK_100_GOLD_SKULLTULA_REWARD" }, + { RAND_INF_GREG_FOUND, "RAND_INF_GREG_FOUND" }, - { RAND_INF_TOT_MASTER_SWORD, "RAND_INF_TOT_MASTER_SWORD"}, - { RAND_INF_CHILD_FISHING, "RAND_INF_CHILD_FISHING" }, - { RAND_INF_ADULT_FISHING, "RAND_INF_ADULT_FISHING" }, - { RAND_INF_10_BIG_POES, "RAND_INF_10_BIG_POES" }, - { RAND_INF_GRANT_GANONS_BOSSKEY, "RAND_INF_GRANT_GANONS_BOSSKEY" }, + { RAND_INF_TOT_MASTER_SWORD, "RAND_INF_TOT_MASTER_SWORD" }, + { RAND_INF_CHILD_FISHING, "RAND_INF_CHILD_FISHING" }, + { RAND_INF_ADULT_FISHING, "RAND_INF_ADULT_FISHING" }, + { RAND_INF_10_BIG_POES, "RAND_INF_10_BIG_POES" }, + { RAND_INF_GRANT_GANONS_BOSSKEY, "RAND_INF_GRANT_GANONS_BOSSKEY" }, - { RAND_INF_GOHMA_SOUL, "RAND_INF_GOHMA_SOUL" }, - { RAND_INF_KING_DODONGO_SOUL, "RAND_INF_KING_DODONGO_SOUL" }, - { RAND_INF_BARINADE_SOUL, "RAND_INF_BARINADE_SOUL" }, - { RAND_INF_PHANTOM_GANON_SOUL, "RAND_INF_PHANTOM_GANON_SOUL" }, - { RAND_INF_VOLVAGIA_SOUL, "RAND_INF_VOLVAGIA_SOUL" }, - { RAND_INF_MORPHA_SOUL, "RAND_INF_MORPHA_SOUL" }, - { RAND_INF_BONGO_BONGO_SOUL, "RAND_INF_BONGO_BONGO_SOUL" }, - { RAND_INF_TWINROVA_SOUL, "RAND_INF_TWINROVA_SOUL" }, - { RAND_INF_GANON_SOUL, "RAND_INF_GANON_SOUL" }, + { RAND_INF_GOHMA_SOUL, "RAND_INF_GOHMA_SOUL" }, + { RAND_INF_KING_DODONGO_SOUL, "RAND_INF_KING_DODONGO_SOUL" }, + { RAND_INF_BARINADE_SOUL, "RAND_INF_BARINADE_SOUL" }, + { RAND_INF_PHANTOM_GANON_SOUL, "RAND_INF_PHANTOM_GANON_SOUL" }, + { RAND_INF_VOLVAGIA_SOUL, "RAND_INF_VOLVAGIA_SOUL" }, + { RAND_INF_MORPHA_SOUL, "RAND_INF_MORPHA_SOUL" }, + { RAND_INF_BONGO_BONGO_SOUL, "RAND_INF_BONGO_BONGO_SOUL" }, + { RAND_INF_TWINROVA_SOUL, "RAND_INF_TWINROVA_SOUL" }, + { RAND_INF_GANON_SOUL, "RAND_INF_GANON_SOUL" }, - { RAND_INF_HAS_OCARINA_A, "RAND_INF_HAS_OCARINA_A"}, - { RAND_INF_HAS_OCARINA_C_UP, "RAND_INF_HAS_OCARINA_C_UP" }, - { RAND_INF_HAS_OCARINA_C_DOWN, "RAND_INF_HAS_OCARINA_C_DOWN" }, - { RAND_INF_HAS_OCARINA_C_LEFT, "RAND_INF_HAS_OCARINA_C_LEFT"}, - { RAND_INF_HAS_OCARINA_C_RIGHT, "RAND_INF_HAS_OCARINA_C_RIGHT"}, + { RAND_INF_HAS_OCARINA_A, "RAND_INF_HAS_OCARINA_A" }, + { RAND_INF_HAS_OCARINA_C_UP, "RAND_INF_HAS_OCARINA_C_UP" }, + { RAND_INF_HAS_OCARINA_C_DOWN, "RAND_INF_HAS_OCARINA_C_DOWN" }, + { RAND_INF_HAS_OCARINA_C_LEFT, "RAND_INF_HAS_OCARINA_C_LEFT" }, + { RAND_INF_HAS_OCARINA_C_RIGHT, "RAND_INF_HAS_OCARINA_C_RIGHT" }, - { RAND_INF_KF_LINKS_HOUSE_POT, "RAND_INF_KF_LINKS_HOUSE_POT" }, - { RAND_INF_KF_TWINS_HOUSE_POT_1, "RAND_INF_KF_TWINS_HOUSE_POT_1" }, - { RAND_INF_KF_TWINS_HOUSE_POT_2, "RAND_INF_KF_TWINS_HOUSE_POT_2" }, - { RAND_INF_KF_BROTHERS_HOUSE_POT_1, "RAND_INF_KF_BROTHERS_HOUSE_POT_1" }, - { RAND_INF_KF_BROTHERS_HOUSE_POT_2, "RAND_INF_KF_BROTHERS_HOUSE_POT_2" }, - { RAND_INF_GF_BREAK_ROOM_POT_1, "RAND_INF_GF_BREAK_ROOM_POT_1" }, - { RAND_INF_GF_BREAK_ROOM_POT_2, "RAND_INF_GF_BREAK_ROOM_POT_2" }, - { RAND_INF_GF_KITCHEN_POT_1, "RAND_INF_GF_KITCHEN_POT_1" }, - { RAND_INF_GF_KITCHEN_POT_2, "RAND_INF_GF_KITCHEN_POT_2" }, - { RAND_INF_GF_NORTH_F1_CARPENTER_POT_1, "RAND_INF_GF_NORTH_F1_CARPENTER_POT_1" }, - { RAND_INF_GF_NORTH_F1_CARPENTER_POT_2, "RAND_INF_GF_NORTH_F1_CARPENTER_POT_2" }, - { RAND_INF_GF_NORTH_F1_CARPENTER_POT_3, "RAND_INF_GF_NORTH_F1_CARPENTER_POT_3" }, - { RAND_INF_GF_NORTH_F2_CARPENTER_POT_1, "RAND_INF_GF_NORTH_F2_CARPENTER_POT_1" }, - { RAND_INF_GF_NORTH_F2_CARPENTER_POT_2, "RAND_INF_GF_NORTH_F2_CARPENTER_POT_2" }, - { RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1, "RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1" }, - { RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2, "RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2" }, - { RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3, "RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3" }, - { RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1" }, - { RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2" }, - { RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3" }, - { RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4" }, - { RAND_INF_WASTELAND_NEAR_GS_POT_1, "RAND_INF_WASTELAND_NEAR_GS_POT_1" }, - { RAND_INF_WASTELAND_NEAR_GS_POT_2, "RAND_INF_WASTELAND_NEAR_GS_POT_2" }, - { RAND_INF_WASTELAND_NEAR_GS_POT_3, "RAND_INF_WASTELAND_NEAR_GS_POT_3" }, - { RAND_INF_WASTELAND_NEAR_GS_POT_4, "RAND_INF_WASTELAND_NEAR_GS_POT_4" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_1, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_1" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_2, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_2" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_3, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_3" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_4, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_4" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_5, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_5" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_6, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_6" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_7, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_7" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_8, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_8" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_9, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_9" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_10, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_10" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_11, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_11" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_12, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_12" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_13, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_13" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_14, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_14" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_15, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_15" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_16, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_16" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_17, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_17" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_18, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_18" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_19, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_19" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_20, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_20" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_21, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_21" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_22, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_22" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_23, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_23" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_24, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_24" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_25, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_25" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_26, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_26" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_27, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_27" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_28, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_28" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_29, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_29" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_30, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_30" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_31, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_31" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_32, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_32" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_33, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_33" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_34, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_34" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_35, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_35" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_36, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_36" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_37, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_37" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_38, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_38" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_39, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_39" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_40, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_40" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_41, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_41" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_42, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_42" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_43, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_43" }, - { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_44, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_44" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_1, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_1" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_2, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_2" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_3, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_3" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_4, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_4" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_5, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_5" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_6, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_6" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_7, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_7" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_8, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_8" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_9, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_9" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_10, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_10" }, - { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_11, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_11" }, - { RAND_INF_MK_BACK_ALLEY_HOUSE_POT_1, "RAND_INF_MK_BACK_ALLEY_HOUSE_POT_1" }, - { RAND_INF_MK_BACK_ALLEY_HOUSE_POT_2, "RAND_INF_MK_BACK_ALLEY_HOUSE_POT_2" }, - { RAND_INF_MK_BACK_ALLEY_HOUSE_POT_3, "RAND_INF_MK_BACK_ALLEY_HOUSE_POT_3" }, - { RAND_INF_KAK_NEAR_POTION_SHOP_POT_1, "RAND_INF_KAK_NEAR_POTION_SHOP_POT_1" }, - { RAND_INF_KAK_NEAR_POTION_SHOP_POT_2, "RAND_INF_KAK_NEAR_POTION_SHOP_POT_2" }, - { RAND_INF_KAK_NEAR_POTION_SHOP_POT_3, "RAND_INF_KAK_NEAR_POTION_SHOP_POT_3" }, - { RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_1, "RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_1" }, - { RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_2, "RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_2" }, - { RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_3, "RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_3" }, - { RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_1, "RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_1" }, - { RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_2, "RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_2" }, - { RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_3, "RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_3" }, - { RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_1, "RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_1" }, - { RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_2, "RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_2" }, - { RAND_INF_GY_DAMPES_GRAVE_POT_1, "RAND_INF_GY_DAMPES_GRAVE_POT_1" }, - { RAND_INF_GY_DAMPES_GRAVE_POT_2, "RAND_INF_GY_DAMPES_GRAVE_POT_2" }, - { RAND_INF_GY_DAMPES_GRAVE_POT_3, "RAND_INF_GY_DAMPES_GRAVE_POT_3" }, - { RAND_INF_GY_DAMPES_GRAVE_POT_4, "RAND_INF_GY_DAMPES_GRAVE_POT_4" }, - { RAND_INF_GY_DAMPES_GRAVE_POT_5, "RAND_INF_GY_DAMPES_GRAVE_POT_5" }, - { RAND_INF_GY_DAMPES_GRAVE_POT_6, "RAND_INF_GY_DAMPES_GRAVE_POT_6" }, - { RAND_INF_GC_LOWER_STAIRCASE_POT_1, "RAND_INF_GC_LOWER_STAIRCASE_POT_1" }, - { RAND_INF_GC_LOWER_STAIRCASE_POT_2, "RAND_INF_GC_LOWER_STAIRCASE_POT_2" }, - { RAND_INF_GC_UPPER_STAIRCASE_POT_1, "RAND_INF_GC_UPPER_STAIRCASE_POT_1" }, - { RAND_INF_GC_UPPER_STAIRCASE_POT_2, "RAND_INF_GC_UPPER_STAIRCASE_POT_2" }, - { RAND_INF_GC_UPPER_STAIRCASE_POT_3, "RAND_INF_GC_UPPER_STAIRCASE_POT_3" }, - { RAND_INF_GC_MEDIGORON_POT_1, "RAND_INF_GC_MEDIGORON_POT_1" }, - { RAND_INF_GC_DARUNIA_POT_1, "RAND_INF_GC_DARUNIA_POT_1" }, - { RAND_INF_GC_DARUNIA_POT_2, "RAND_INF_GC_DARUNIA_POT_2" }, - { RAND_INF_GC_DARUNIA_POT_3, "RAND_INF_GC_DARUNIA_POT_3" }, - { RAND_INF_DMC_NEAR_GC_POT_1, "RAND_INF_DMC_NEAR_GC_POT_1" }, - { RAND_INF_DMC_NEAR_GC_POT_2, "RAND_INF_DMC_NEAR_GC_POT_2" }, - { RAND_INF_DMC_NEAR_GC_POT_3, "RAND_INF_DMC_NEAR_GC_POT_3" }, - { RAND_INF_DMC_NEAR_GC_POT_4, "RAND_INF_DMC_NEAR_GC_POT_4" }, - { RAND_INF_ZD_NEAR_SHOP_POT_1, "RAND_INF_ZD_NEAR_SHOP_POT_1" }, - { RAND_INF_ZD_NEAR_SHOP_POT_2, "RAND_INF_ZD_NEAR_SHOP_POT_2" }, - { RAND_INF_ZD_NEAR_SHOP_POT_3, "RAND_INF_ZD_NEAR_SHOP_POT_3" }, - { RAND_INF_ZD_NEAR_SHOP_POT_4, "RAND_INF_ZD_NEAR_SHOP_POT_4" }, - { RAND_INF_ZD_NEAR_SHOP_POT_5, "RAND_INF_ZD_NEAR_SHOP_POT_5" }, - { RAND_INF_ZF_HIDDEN_CAVE_POT_1, "RAND_INF_ZF_HIDDEN_CAVE_POT_1" }, - { RAND_INF_ZF_HIDDEN_CAVE_POT_2, "RAND_INF_ZF_HIDDEN_CAVE_POT_2" }, - { RAND_INF_ZF_HIDDEN_CAVE_POT_3, "RAND_INF_ZF_HIDDEN_CAVE_POT_3" }, - { RAND_INF_ZF_NEAR_JABU_POT_1, "RAND_INF_ZF_NEAR_JABU_POT_1" }, - { RAND_INF_ZF_NEAR_JABU_POT_2, "RAND_INF_ZF_NEAR_JABU_POT_2" }, - { RAND_INF_ZF_NEAR_JABU_POT_3, "RAND_INF_ZF_NEAR_JABU_POT_3" }, - { RAND_INF_ZF_NEAR_JABU_POT_4, "RAND_INF_ZF_NEAR_JABU_POT_4" }, - { RAND_INF_LLR_FRONT_POT_1, "RAND_INF_LLR_FRONT_POT_1" }, - { RAND_INF_LLR_FRONT_POT_2, "RAND_INF_LLR_FRONT_POT_2" }, - { RAND_INF_LLR_FRONT_POT_3, "RAND_INF_LLR_FRONT_POT_3" }, - { RAND_INF_LLR_FRONT_POT_4, "RAND_INF_LLR_FRONT_POT_4" }, - { RAND_INF_LLR_RAIN_SHED_POT_1, "RAND_INF_LLR_RAIN_SHED_POT_1" }, - { RAND_INF_LLR_RAIN_SHED_POT_2, "RAND_INF_LLR_RAIN_SHED_POT_2" }, - { RAND_INF_LLR_RAIN_SHED_POT_3, "RAND_INF_LLR_RAIN_SHED_POT_3" }, - { RAND_INF_LLR_TALONS_HOUSE_POT_1, "RAND_INF_LLR_TALONS_HOUSE_POT_1" }, - { RAND_INF_LLR_TALONS_HOUSE_POT_2, "RAND_INF_LLR_TALONS_HOUSE_POT_2" }, - { RAND_INF_LLR_TALONS_HOUSE_POT_3, "RAND_INF_LLR_TALONS_HOUSE_POT_3" }, - { RAND_INF_HF_COW_GROTTO_POT_1, "RAND_INF_HF_COW_GROTTO_POT_1" }, - { RAND_INF_HF_COW_GROTTO_POT_2, "RAND_INF_HF_COW_GROTTO_POT_2" }, - { RAND_INF_HC_STORMS_GROTTO_POT_1, "RAND_INF_HC_STORMS_GROTTO_POT_1" }, - { RAND_INF_HC_STORMS_GROTTO_POT_2, "RAND_INF_HC_STORMS_GROTTO_POT_2" }, - { RAND_INF_HC_STORMS_GROTTO_POT_3, "RAND_INF_HC_STORMS_GROTTO_POT_3" }, - { RAND_INF_HC_STORMS_GROTTO_POT_4, "RAND_INF_HC_STORMS_GROTTO_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_1, "RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_2, "RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_3, "RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_4, "RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_3, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_4, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_5, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_5" }, - { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_6, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_6" }, - { RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_3, "RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_4, "RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_1, "RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_2, "RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_3, "RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_4, "RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_1, "RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_2, "RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_BLADE_POT_1, "RAND_INF_DODONGOS_CAVERN_BLADE_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_BLADE_POT_2, "RAND_INF_DODONGOS_CAVERN_BLADE_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_1, "RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, "RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_3, "RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_4, "RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_4" }, - { RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, "RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1" }, - { RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2, "RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2" }, - { RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, "RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3" }, - { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_1, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_1" }, - { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_2, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_2" }, - { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_3, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_3" }, - { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_4, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_4" }, - { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_5, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_5" }, - { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_6, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_6" }, - { RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_1, "RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_1" }, - { RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_2, "RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_2" }, - { RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_3, "RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_3" }, - { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1" }, - { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2" }, - { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3" }, - { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4" }, - { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5" }, - { RAND_INF_FOREST_TEMPLE_LOBBY_POT_1, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_1" }, - { RAND_INF_FOREST_TEMPLE_LOBBY_POT_2, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_2" }, - { RAND_INF_FOREST_TEMPLE_LOBBY_POT_3, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_3" }, - { RAND_INF_FOREST_TEMPLE_LOBBY_POT_4, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_4" }, - { RAND_INF_FOREST_TEMPLE_LOBBY_POT_5, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_5" }, - { RAND_INF_FOREST_TEMPLE_LOBBY_POT_6, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_6" }, - { RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_1, "RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_1" }, - { RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_2, "RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_2" }, - { RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_1, "RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_1" }, - { RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_2, "RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_2" }, - { RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_1, "RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_1" }, - { RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_2, "RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_2" }, - { RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_3, "RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_3" }, - { RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_4, "RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_4" }, - { RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_1, "RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_1" }, - { RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_2, "RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_2" }, - { RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_3, "RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_3" }, - { RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_1, "RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_1" }, - { RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_2, "RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_2" }, - { RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_1, "RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_1" }, - { RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_2, "RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_2" }, - { RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_3, "RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_3" }, - { RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_4, "RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_4" }, - { RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_1, "RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_1" }, - { RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_2, "RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_2" }, - { RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_3, "RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_3" }, - { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1" }, - { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2" }, - { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3" }, - { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4" }, - { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1" }, - { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2" }, - { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3" }, - { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4" }, - { RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, "RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_1" }, - { RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, "RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_2" }, - { RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, "RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_1" }, - { RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, "RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_2" }, - { RAND_INF_WATER_TEMPLE_TORCH_POT_1, "RAND_INF_WATER_TEMPLE_TORCH_POT_1" }, - { RAND_INF_WATER_TEMPLE_TORCH_POT_2, "RAND_INF_WATER_TEMPLE_TORCH_POT_2" }, - { RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_1, "RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_1" }, - { RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_2, "RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_2" }, - { RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_3, "RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_3" }, - { RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_1, "RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_1" }, - { RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_2, "RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_2" }, - { RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_1, "RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_1" }, - { RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_2, "RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_2" }, - { RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_3, "RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_3" }, - { RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_4, "RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_4" }, - { RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1, "RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1" }, - { RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, "RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2" }, - { RAND_INF_WATER_TEMPLE_RIVER_POT_1, "RAND_INF_WATER_TEMPLE_RIVER_POT_1" }, - { RAND_INF_WATER_TEMPLE_RIVER_POT_2, "RAND_INF_WATER_TEMPLE_RIVER_POT_2" }, - { RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_1, "RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_1" }, - { RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_2, "RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_2" }, - { RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_1, "RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_1" }, - { RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_2, "RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, "RAND_INF_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3" }, - { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4" }, - { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5" }, - { RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_1, "RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_2, "RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, "RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, "RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, "RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_3" }, - { RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, "RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_4" }, - { RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_1, "RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_2, "RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, "RAND_INF_SHADOW_TEMPLE_SPIKE_WALLS_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_1, "RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_2, "RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_1, "RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_2, "RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_3, "RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_3" }, - { RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_4, "RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_4" }, - { RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_1, "RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_2, "RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_1, "RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_2, "RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_3, "RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_3" }, - { RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_4, "RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_4" }, - { RAND_INF_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, "RAND_INF_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, "RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, "RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3" }, - { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4" }, - { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5" }, - { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6" }, - { RAND_INF_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, "RAND_INF_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1" }, - { RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_3, "RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_3" }, - { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_3, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_3" }, - { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_4, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_4" }, - { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, "RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1" }, - { RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_1, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_1" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_2, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_2" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_3, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_3" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_4, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_4" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_5, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_5" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_6, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_6" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_7, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_7" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_8, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_8" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_9, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_9" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_10, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_10" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_11, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_11" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_12, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_12" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_13, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_13" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_14, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_14" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_15, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_15" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_16, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_16" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_17, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_17" }, - { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_18, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_18" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_1" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_2" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_3" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_4" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_5" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_6" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_7" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_8" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_9" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_10" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_11" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_12" }, - { RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1" }, - { RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2" }, - { RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, "RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3" }, - { RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1" }, - { RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2" }, - { RAND_INF_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1" }, - { RAND_INF_BOTTOM_OF_THE_WELL_UNDERWATER_POT, "RAND_INF_BOTTOM_OF_THE_WELL_UNDERWATER_POT" }, - { RAND_INF_ICE_CAVERN_HALL_POT_1, "RAND_INF_ICE_CAVERN_HALL_POT_1" }, - { RAND_INF_ICE_CAVERN_HALL_POT_2, "RAND_INF_ICE_CAVERN_HALL_POT_2" }, - { RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_1, "RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_1" }, - { RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_2, "RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_2" }, - { RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_3, "RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_3" }, - { RAND_INF_ICE_CAVERN_NEAR_END_POT_1, "RAND_INF_ICE_CAVERN_NEAR_END_POT_1" }, - { RAND_INF_ICE_CAVERN_NEAR_END_POT_2, "RAND_INF_ICE_CAVERN_NEAR_END_POT_2" }, - { RAND_INF_ICE_CAVERN_FROZEN_POT_1, "RAND_INF_ICE_CAVERN_FROZEN_POT_1" }, + { RAND_INF_KF_LINKS_HOUSE_POT, "RAND_INF_KF_LINKS_HOUSE_POT" }, + { RAND_INF_KF_TWINS_HOUSE_POT_1, "RAND_INF_KF_TWINS_HOUSE_POT_1" }, + { RAND_INF_KF_TWINS_HOUSE_POT_2, "RAND_INF_KF_TWINS_HOUSE_POT_2" }, + { RAND_INF_KF_BROTHERS_HOUSE_POT_1, "RAND_INF_KF_BROTHERS_HOUSE_POT_1" }, + { RAND_INF_KF_BROTHERS_HOUSE_POT_2, "RAND_INF_KF_BROTHERS_HOUSE_POT_2" }, + { RAND_INF_GF_BREAK_ROOM_POT_1, "RAND_INF_GF_BREAK_ROOM_POT_1" }, + { RAND_INF_GF_BREAK_ROOM_POT_2, "RAND_INF_GF_BREAK_ROOM_POT_2" }, + { RAND_INF_GF_KITCHEN_POT_1, "RAND_INF_GF_KITCHEN_POT_1" }, + { RAND_INF_GF_KITCHEN_POT_2, "RAND_INF_GF_KITCHEN_POT_2" }, + { RAND_INF_GF_NORTH_F1_CARPENTER_POT_1, "RAND_INF_GF_NORTH_F1_CARPENTER_POT_1" }, + { RAND_INF_GF_NORTH_F1_CARPENTER_POT_2, "RAND_INF_GF_NORTH_F1_CARPENTER_POT_2" }, + { RAND_INF_GF_NORTH_F1_CARPENTER_POT_3, "RAND_INF_GF_NORTH_F1_CARPENTER_POT_3" }, + { RAND_INF_GF_NORTH_F2_CARPENTER_POT_1, "RAND_INF_GF_NORTH_F2_CARPENTER_POT_1" }, + { RAND_INF_GF_NORTH_F2_CARPENTER_POT_2, "RAND_INF_GF_NORTH_F2_CARPENTER_POT_2" }, + { RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1, "RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1" }, + { RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2, "RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2" }, + { RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3, "RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3" }, + { RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1" }, + { RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2" }, + { RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3" }, + { RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4" }, + { RAND_INF_WASTELAND_NEAR_GS_POT_1, "RAND_INF_WASTELAND_NEAR_GS_POT_1" }, + { RAND_INF_WASTELAND_NEAR_GS_POT_2, "RAND_INF_WASTELAND_NEAR_GS_POT_2" }, + { RAND_INF_WASTELAND_NEAR_GS_POT_3, "RAND_INF_WASTELAND_NEAR_GS_POT_3" }, + { RAND_INF_WASTELAND_NEAR_GS_POT_4, "RAND_INF_WASTELAND_NEAR_GS_POT_4" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_1, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_1" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_2, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_2" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_3, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_3" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_4, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_4" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_5, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_5" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_6, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_6" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_7, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_7" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_8, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_8" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_9, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_9" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_10, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_10" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_11, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_11" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_12, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_12" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_13, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_13" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_14, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_14" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_15, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_15" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_16, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_16" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_17, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_17" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_18, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_18" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_19, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_19" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_20, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_20" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_21, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_21" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_22, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_22" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_23, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_23" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_24, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_24" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_25, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_25" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_26, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_26" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_27, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_27" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_28, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_28" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_29, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_29" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_30, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_30" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_31, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_31" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_32, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_32" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_33, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_33" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_34, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_34" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_35, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_35" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_36, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_36" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_37, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_37" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_38, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_38" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_39, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_39" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_40, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_40" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_41, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_41" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_42, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_42" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_43, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_43" }, + { RAND_INF_MK_GUARD_HOUSE_CHILD_POT_44, "RAND_INF_MK_GUARD_HOUSE_CHILD_POT_44" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_1, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_1" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_2, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_2" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_3, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_3" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_4, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_4" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_5, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_5" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_6, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_6" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_7, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_7" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_8, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_8" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_9, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_9" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_10, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_10" }, + { RAND_INF_MK_GUARD_HOUSE_ADULT_POT_11, "RAND_INF_MK_GUARD_HOUSE_ADULT_POT_11" }, + { RAND_INF_MK_BACK_ALLEY_HOUSE_POT_1, "RAND_INF_MK_BACK_ALLEY_HOUSE_POT_1" }, + { RAND_INF_MK_BACK_ALLEY_HOUSE_POT_2, "RAND_INF_MK_BACK_ALLEY_HOUSE_POT_2" }, + { RAND_INF_MK_BACK_ALLEY_HOUSE_POT_3, "RAND_INF_MK_BACK_ALLEY_HOUSE_POT_3" }, + { RAND_INF_KAK_NEAR_POTION_SHOP_POT_1, "RAND_INF_KAK_NEAR_POTION_SHOP_POT_1" }, + { RAND_INF_KAK_NEAR_POTION_SHOP_POT_2, "RAND_INF_KAK_NEAR_POTION_SHOP_POT_2" }, + { RAND_INF_KAK_NEAR_POTION_SHOP_POT_3, "RAND_INF_KAK_NEAR_POTION_SHOP_POT_3" }, + { RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_1, "RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_1" }, + { RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_2, "RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_2" }, + { RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_3, "RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_3" }, + { RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_1, "RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_1" }, + { RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_2, "RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_2" }, + { RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_3, "RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_3" }, + { RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_1, "RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_1" }, + { RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_2, "RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_2" }, + { RAND_INF_GY_DAMPES_GRAVE_POT_1, "RAND_INF_GY_DAMPES_GRAVE_POT_1" }, + { RAND_INF_GY_DAMPES_GRAVE_POT_2, "RAND_INF_GY_DAMPES_GRAVE_POT_2" }, + { RAND_INF_GY_DAMPES_GRAVE_POT_3, "RAND_INF_GY_DAMPES_GRAVE_POT_3" }, + { RAND_INF_GY_DAMPES_GRAVE_POT_4, "RAND_INF_GY_DAMPES_GRAVE_POT_4" }, + { RAND_INF_GY_DAMPES_GRAVE_POT_5, "RAND_INF_GY_DAMPES_GRAVE_POT_5" }, + { RAND_INF_GY_DAMPES_GRAVE_POT_6, "RAND_INF_GY_DAMPES_GRAVE_POT_6" }, + { RAND_INF_GC_LOWER_STAIRCASE_POT_1, "RAND_INF_GC_LOWER_STAIRCASE_POT_1" }, + { RAND_INF_GC_LOWER_STAIRCASE_POT_2, "RAND_INF_GC_LOWER_STAIRCASE_POT_2" }, + { RAND_INF_GC_UPPER_STAIRCASE_POT_1, "RAND_INF_GC_UPPER_STAIRCASE_POT_1" }, + { RAND_INF_GC_UPPER_STAIRCASE_POT_2, "RAND_INF_GC_UPPER_STAIRCASE_POT_2" }, + { RAND_INF_GC_UPPER_STAIRCASE_POT_3, "RAND_INF_GC_UPPER_STAIRCASE_POT_3" }, + { RAND_INF_GC_MEDIGORON_POT_1, "RAND_INF_GC_MEDIGORON_POT_1" }, + { RAND_INF_GC_DARUNIA_POT_1, "RAND_INF_GC_DARUNIA_POT_1" }, + { RAND_INF_GC_DARUNIA_POT_2, "RAND_INF_GC_DARUNIA_POT_2" }, + { RAND_INF_GC_DARUNIA_POT_3, "RAND_INF_GC_DARUNIA_POT_3" }, + { RAND_INF_DMC_NEAR_GC_POT_1, "RAND_INF_DMC_NEAR_GC_POT_1" }, + { RAND_INF_DMC_NEAR_GC_POT_2, "RAND_INF_DMC_NEAR_GC_POT_2" }, + { RAND_INF_DMC_NEAR_GC_POT_3, "RAND_INF_DMC_NEAR_GC_POT_3" }, + { RAND_INF_DMC_NEAR_GC_POT_4, "RAND_INF_DMC_NEAR_GC_POT_4" }, + { RAND_INF_ZD_NEAR_SHOP_POT_1, "RAND_INF_ZD_NEAR_SHOP_POT_1" }, + { RAND_INF_ZD_NEAR_SHOP_POT_2, "RAND_INF_ZD_NEAR_SHOP_POT_2" }, + { RAND_INF_ZD_NEAR_SHOP_POT_3, "RAND_INF_ZD_NEAR_SHOP_POT_3" }, + { RAND_INF_ZD_NEAR_SHOP_POT_4, "RAND_INF_ZD_NEAR_SHOP_POT_4" }, + { RAND_INF_ZD_NEAR_SHOP_POT_5, "RAND_INF_ZD_NEAR_SHOP_POT_5" }, + { RAND_INF_ZF_HIDDEN_CAVE_POT_1, "RAND_INF_ZF_HIDDEN_CAVE_POT_1" }, + { RAND_INF_ZF_HIDDEN_CAVE_POT_2, "RAND_INF_ZF_HIDDEN_CAVE_POT_2" }, + { RAND_INF_ZF_HIDDEN_CAVE_POT_3, "RAND_INF_ZF_HIDDEN_CAVE_POT_3" }, + { RAND_INF_ZF_NEAR_JABU_POT_1, "RAND_INF_ZF_NEAR_JABU_POT_1" }, + { RAND_INF_ZF_NEAR_JABU_POT_2, "RAND_INF_ZF_NEAR_JABU_POT_2" }, + { RAND_INF_ZF_NEAR_JABU_POT_3, "RAND_INF_ZF_NEAR_JABU_POT_3" }, + { RAND_INF_ZF_NEAR_JABU_POT_4, "RAND_INF_ZF_NEAR_JABU_POT_4" }, + { RAND_INF_LLR_FRONT_POT_1, "RAND_INF_LLR_FRONT_POT_1" }, + { RAND_INF_LLR_FRONT_POT_2, "RAND_INF_LLR_FRONT_POT_2" }, + { RAND_INF_LLR_FRONT_POT_3, "RAND_INF_LLR_FRONT_POT_3" }, + { RAND_INF_LLR_FRONT_POT_4, "RAND_INF_LLR_FRONT_POT_4" }, + { RAND_INF_LLR_RAIN_SHED_POT_1, "RAND_INF_LLR_RAIN_SHED_POT_1" }, + { RAND_INF_LLR_RAIN_SHED_POT_2, "RAND_INF_LLR_RAIN_SHED_POT_2" }, + { RAND_INF_LLR_RAIN_SHED_POT_3, "RAND_INF_LLR_RAIN_SHED_POT_3" }, + { RAND_INF_LLR_TALONS_HOUSE_POT_1, "RAND_INF_LLR_TALONS_HOUSE_POT_1" }, + { RAND_INF_LLR_TALONS_HOUSE_POT_2, "RAND_INF_LLR_TALONS_HOUSE_POT_2" }, + { RAND_INF_LLR_TALONS_HOUSE_POT_3, "RAND_INF_LLR_TALONS_HOUSE_POT_3" }, + { RAND_INF_HF_COW_GROTTO_POT_1, "RAND_INF_HF_COW_GROTTO_POT_1" }, + { RAND_INF_HF_COW_GROTTO_POT_2, "RAND_INF_HF_COW_GROTTO_POT_2" }, + { RAND_INF_HC_STORMS_GROTTO_POT_1, "RAND_INF_HC_STORMS_GROTTO_POT_1" }, + { RAND_INF_HC_STORMS_GROTTO_POT_2, "RAND_INF_HC_STORMS_GROTTO_POT_2" }, + { RAND_INF_HC_STORMS_GROTTO_POT_3, "RAND_INF_HC_STORMS_GROTTO_POT_3" }, + { RAND_INF_HC_STORMS_GROTTO_POT_4, "RAND_INF_HC_STORMS_GROTTO_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_1, "RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_2, "RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_3, "RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_4, "RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_3, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_4, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_5, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_5" }, + { RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_6, "RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_6" }, + { RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_3, "RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_4, "RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_1, "RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_2, "RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_3, "RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_4, "RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_1, "RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_2, "RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_BLADE_POT_1, "RAND_INF_DODONGOS_CAVERN_BLADE_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_BLADE_POT_2, "RAND_INF_DODONGOS_CAVERN_BLADE_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_1, "RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, "RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_3, "RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_4, "RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_4" }, + { RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, "RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1" }, + { RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2, "RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2" }, + { RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, "RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3" }, + { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_1, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_1" }, + { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_2, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_2" }, + { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_3, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_3" }, + { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_4, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_4" }, + { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_5, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_5" }, + { RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_6, "RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_6" }, + { RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_1, "RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_1" }, + { RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_2, "RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_2" }, + { RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_3, "RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_3" }, + { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1" }, + { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2" }, + { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3" }, + { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4" }, + { RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, "RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5" }, + { RAND_INF_FOREST_TEMPLE_LOBBY_POT_1, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_1" }, + { RAND_INF_FOREST_TEMPLE_LOBBY_POT_2, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_2" }, + { RAND_INF_FOREST_TEMPLE_LOBBY_POT_3, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_3" }, + { RAND_INF_FOREST_TEMPLE_LOBBY_POT_4, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_4" }, + { RAND_INF_FOREST_TEMPLE_LOBBY_POT_5, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_5" }, + { RAND_INF_FOREST_TEMPLE_LOBBY_POT_6, "RAND_INF_FOREST_TEMPLE_LOBBY_POT_6" }, + { RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_1, "RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_1" }, + { RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_2, "RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_2" }, + { RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_1, "RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_1" }, + { RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_2, "RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_2" }, + { RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_1, "RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_1" }, + { RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_2, "RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_2" }, + { RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_3, "RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_3" }, + { RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_4, "RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_4" }, + { RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_1, "RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_1" }, + { RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_2, "RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_2" }, + { RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_3, "RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_3" }, + { RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_1, "RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_1" }, + { RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_2, "RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_2" }, + { RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_1, "RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_1" }, + { RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_2, "RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_2" }, + { RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_3, "RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_3" }, + { RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_4, "RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_4" }, + { RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_1, "RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_1" }, + { RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_2, "RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_2" }, + { RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_3, "RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_3" }, + { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1" }, + { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2" }, + { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3" }, + { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4" }, + { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1" }, + { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2" }, + { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3" }, + { RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, "RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4" }, + { RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, "RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_1" }, + { RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, "RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_2" }, + { RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, "RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_1" }, + { RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, "RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_2" }, + { RAND_INF_WATER_TEMPLE_TORCH_POT_1, "RAND_INF_WATER_TEMPLE_TORCH_POT_1" }, + { RAND_INF_WATER_TEMPLE_TORCH_POT_2, "RAND_INF_WATER_TEMPLE_TORCH_POT_2" }, + { RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_1, "RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_1" }, + { RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_2, "RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_2" }, + { RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_3, "RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_3" }, + { RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_1, "RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_1" }, + { RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_2, "RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_2" }, + { RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_1, "RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_1" }, + { RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_2, "RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_2" }, + { RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_3, "RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_3" }, + { RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_4, "RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_4" }, + { RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1, "RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1" }, + { RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, "RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2" }, + { RAND_INF_WATER_TEMPLE_RIVER_POT_1, "RAND_INF_WATER_TEMPLE_RIVER_POT_1" }, + { RAND_INF_WATER_TEMPLE_RIVER_POT_2, "RAND_INF_WATER_TEMPLE_RIVER_POT_2" }, + { RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_1, "RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_1" }, + { RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_2, "RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_2" }, + { RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_1, "RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_1" }, + { RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_2, "RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, "RAND_INF_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3" }, + { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4" }, + { RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, "RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5" }, + { RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_1, "RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_2, "RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, "RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, "RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, "RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_3" }, + { RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, "RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_4" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_1, "RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_2, "RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, "RAND_INF_SHADOW_TEMPLE_SPIKE_WALLS_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_1, "RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_2, "RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_1, "RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_2, "RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_3, "RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_3" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_4, "RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_4" }, + { RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_1, "RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_2, "RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_1, "RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_2, "RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_3, "RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_3" }, + { RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_4, "RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_4" }, + { RAND_INF_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, "RAND_INF_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, "RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, "RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3" }, + { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4" }, + { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5" }, + { RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, "RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6" }, + { RAND_INF_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, "RAND_INF_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1" }, + { RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_3, "RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_3" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_3, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_3" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_4, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_4" }, + { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, "RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1" }, + { RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_1, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_1" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_2, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_2" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_3, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_3" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_4, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_4" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_5, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_5" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_6, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_6" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_7, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_7" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_8, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_8" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_9, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_9" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_10, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_10" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_11, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_11" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_12, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_12" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_13, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_13" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_14, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_14" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_15, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_15" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_16, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_16" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_17, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_17" }, + { RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_18, "RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_18" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_1" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_2" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_3" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_4" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_5" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_6" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_7" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_8" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_9" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_10" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_11" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_12" }, + { RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1" }, + { RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2" }, + { RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, "RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3" }, + { RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1" }, + { RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2" }, + { RAND_INF_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1" }, + { RAND_INF_BOTTOM_OF_THE_WELL_UNDERWATER_POT, "RAND_INF_BOTTOM_OF_THE_WELL_UNDERWATER_POT" }, + { RAND_INF_ICE_CAVERN_HALL_POT_1, "RAND_INF_ICE_CAVERN_HALL_POT_1" }, + { RAND_INF_ICE_CAVERN_HALL_POT_2, "RAND_INF_ICE_CAVERN_HALL_POT_2" }, + { RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_1, "RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_1" }, + { RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_2, "RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_2" }, + { RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_3, "RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_3" }, + { RAND_INF_ICE_CAVERN_NEAR_END_POT_1, "RAND_INF_ICE_CAVERN_NEAR_END_POT_1" }, + { RAND_INF_ICE_CAVERN_NEAR_END_POT_2, "RAND_INF_ICE_CAVERN_NEAR_END_POT_2" }, + { RAND_INF_ICE_CAVERN_FROZEN_POT_1, "RAND_INF_ICE_CAVERN_FROZEN_POT_1" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, "RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_1" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, "RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_2" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, "RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, "RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1" }, - { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_1" }, - { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_2" }, - { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_3, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_3" }, - { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_4, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_4" }, - { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_5, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_5" }, - { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_6, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_6" }, - { RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_1" }, - { RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_2" }, - { RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1" }, - { RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2" }, - { RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, "RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3" }, - { RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, "RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4" }, - { RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_1" }, - { RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_2" }, - { RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_3, "RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_3" }, - { RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_1" }, - { RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_2" }, - { RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_1" }, - { RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_2" }, - { RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_3, "RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_3" }, - { RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_4, "RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_3" }, - { RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_4" }, - { RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_2" }, - { RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_1" }, - { RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_2" }, - { RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2" }, - { RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1" }, - { RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_3, "RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_3" }, - { RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_4, "RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_4" }, - { RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_2" }, - { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_3, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_3" }, - { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_4, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_4" }, - { RAND_INF_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, "RAND_INF_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT" }, - { RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1" }, - { RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3" }, - { RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1" }, - { RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2" }, - { RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1" }, - { RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2" }, - { RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_1" }, - { RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_2" }, - { RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_3, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_3" }, - { RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1" }, - { RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2" }, - { RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1" }, - { RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2" }, - { RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, "RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3" }, - { RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1" }, - { RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2" }, - { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_1" }, - { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_2" }, - { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_3, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_3" }, - { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_4, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_4" }, - { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_5, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_5" }, - { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_6, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_6" }, - { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1" }, - { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2" }, - { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3" }, - { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4" }, - { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5" }, - { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6" }, - { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7" }, - { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8" }, - { RAND_INF_ICE_CAVERN_MQ_ENTRANCE_POT, "RAND_INF_ICE_CAVERN_MQ_ENTRANCE_POT" }, - { RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, "RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1" }, - { RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2, "RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2" }, - { RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1, "RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1" }, - { RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2, "RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2" }, - { RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3, "RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3" }, - { RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4, "RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4" }, - { RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1, "RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1" }, - { RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, "RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2" }, - { RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_1, "RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_1" }, - { RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_2, "RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_3, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_3" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_4, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_4" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_5, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_5" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, "RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, "RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_1, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_2, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_3, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_3" }, - { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_4, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_4" }, - { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_5, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_5" }, - { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3" }, - { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_3, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_3" }, - { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_4, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_4" }, - { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_5, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_5" }, - { RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, "RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, "RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_1, "RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_2, "RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, "RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, "RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, "RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, "RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, "RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3" }, - { RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, "RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, "RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, "RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_1" }, - { RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, "RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_2" }, - { RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, "RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_3" }, - { RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, "RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_4" }, - { RAND_INF_WATER_TEMPLE_MQ_BOSS_KEY_POT, "RAND_INF_WATER_TEMPLE_MQ_BOSS_KEY_POT" }, - { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1, "RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1" }, - { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, "RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2" }, - { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, "RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1" }, - { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, "RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2" }, - - { RAND_INF_CAUGHT_LOACH, "RAND_INF_CAUGHT_LOACH" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, "RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_1" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, "RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_2" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, "RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, "RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, "RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1" }, + { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_1" }, + { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_2" }, + { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_3, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_3" }, + { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_4, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_4" }, + { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_5, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_5" }, + { RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_6, "RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_6" }, + { RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_1" }, + { RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_2" }, + { RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1" }, + { RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2" }, + { RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, "RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3" }, + { RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, "RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4" }, + { RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_1" }, + { RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_2" }, + { RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_3, "RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_3" }, + { RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_1" }, + { RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_2" }, + { RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_1, "RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_1" }, + { RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_2, "RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_2" }, + { RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_3, "RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_3" }, + { RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_4, "RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_3, "RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_3" }, + { RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_4, "RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_4" }, + { RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_2" }, + { RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, "RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_1" }, + { RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, "RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_2" }, + { RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2" }, + { RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, "RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1" }, + { RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, "RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_3, "RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_3" }, + { RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_4, "RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_4" }, + { RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_2" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_3, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_3" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_4, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_4" }, + { RAND_INF_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, "RAND_INF_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT" }, + { RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, "RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1" }, + { RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, "RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3" }, + { RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1" }, + { RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2" }, + { RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1" }, + { RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2" }, + { RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_1" }, + { RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_2" }, + { RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_3, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_3" }, + { RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1" }, + { RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2" }, + { RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1" }, + { RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2" }, + { RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, "RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3" }, + { RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1" }, + { RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_1" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_2" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_3, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_3" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_4, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_4" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_5, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_5" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_6, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_6" }, + { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1" }, + { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2" }, + { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3" }, + { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4" }, + { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5" }, + { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6" }, + { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7" }, + { RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, "RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8" }, + { RAND_INF_ICE_CAVERN_MQ_ENTRANCE_POT, "RAND_INF_ICE_CAVERN_MQ_ENTRANCE_POT" }, + { RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, "RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1" }, + { RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2, "RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2" }, + { RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1, "RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1" }, + { RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2, "RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2" }, + { RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3, "RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3" }, + { RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4, "RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4" }, + { RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1, "RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1" }, + { RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, "RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2" }, + { RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_1, "RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_1" }, + { RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_2, "RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, "RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, "RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_3, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_3" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_4, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_4" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_5, "RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_5" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, "RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, "RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, "RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, "RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_1, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_2, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_3, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_3" }, + { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_4, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_4" }, + { RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_5, "RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_5" }, + { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3" }, + { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_3, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_3" }, + { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_4, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_4" }, + { RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_5, "RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_5" }, + { RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, "RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, "RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_1, "RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_2, "RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, "RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, "RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, "RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, "RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, "RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, "RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3" }, + { RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, "RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, "RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, "RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_1" }, + { RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, "RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_2" }, + { RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, "RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_3" }, + { RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, "RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_4" }, + { RAND_INF_WATER_TEMPLE_MQ_BOSS_KEY_POT, "RAND_INF_WATER_TEMPLE_MQ_BOSS_KEY_POT" }, + { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1, + "RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1" }, + { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, + "RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2" }, + { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, + "RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1" }, + { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, + "RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2" }, - { RAND_INF_CAN_SWIM, "RAND_INF_CAN_SWIM" }, + { RAND_INF_CAUGHT_LOACH, "RAND_INF_CAUGHT_LOACH" }, - { RAND_INF_HAS_WALLET, "RAND_INF_HAS_WALLET" }, + { RAND_INF_CAN_SWIM, "RAND_INF_CAN_SWIM" }, - { RAND_INF_BEEHIVE_KF_STORMS_GROTTO_LEFT, "RAND_INF_BEEHIVE_KF_STORMS_GROTTO_LEFT" }, - { RAND_INF_BEEHIVE_KF_STORMS_GROTTO_RIGHT, "RAND_INF_BEEHIVE_KF_STORMS_GROTTO_RIGHT" }, - { RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_LEFT, "RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_LEFT" }, - { RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_RIGHT, "RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_RIGHT" }, - { RAND_INF_BEEHIVE_LW_DEKU_SCRUB_GROTTO, "RAND_INF_BEEHIVE_LW_DEKU_SCRUB_GROTTO" }, - { RAND_INF_BEEHIVE_SFM_STORMS_GROTTO, "RAND_INF_BEEHIVE_SFM_STORMS_GROTTO" }, - { RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_LEFT, "RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_LEFT" }, - { RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_RIGHT, "RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_RIGHT" }, - { RAND_INF_BEEHIVE_HF_OPEN_GROTTO_LEFT, "RAND_INF_BEEHIVE_HF_OPEN_GROTTO_LEFT" }, - { RAND_INF_BEEHIVE_HF_OPEN_GROTTO_RIGHT, "RAND_INF_BEEHIVE_HF_OPEN_GROTTO_RIGHT" }, - { RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_LEFT, "RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_LEFT" }, - { RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_RIGHT, "RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_RIGHT" }, - { RAND_INF_BEEHIVE_HF_INSIDE_FENCE_GROTTO, "RAND_INF_BEEHIVE_HF_INSIDE_FENCE_GROTTO" }, - { RAND_INF_BEEHIVE_LLR_GROTTO, "RAND_INF_BEEHIVE_LLR_GROTTO" }, - { RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_LEFT, "RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_LEFT" }, - { RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_RIGHT, "RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_RIGHT" }, - { RAND_INF_BEEHIVE_DMT_COW_GROTTO, "RAND_INF_BEEHIVE_DMT_COW_GROTTO" }, - { RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_LEFT, "RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_LEFT" }, - { RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_RIGHT, "RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_RIGHT" }, - { RAND_INF_BEEHIVE_GC_GROTTO, "RAND_INF_BEEHIVE_GC_GROTTO" }, - { RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_LEFT, "RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_LEFT" }, - { RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_RIGHT, "RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_RIGHT" }, - { RAND_INF_BEEHIVE_DMC_HAMMER_GROTTO, "RAND_INF_BEEHIVE_DMC_HAMMER_GROTTO" }, - { RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_LEFT, "RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_LEFT" }, - { RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_RIGHT, "RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_RIGHT" }, - { RAND_INF_BEEHIVE_ZR_STORMS_GROTTO, "RAND_INF_BEEHIVE_ZR_STORMS_GROTTO" }, - { RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_LEFT, "RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_LEFT" }, - { RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_RIGHT, "RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_RIGHT" }, - { RAND_INF_BEEHIVE_ZD_BEHIND_KING_ZORA, "RAND_INF_BEEHIVE_ZD_BEHIND_KING_ZORA" }, - { RAND_INF_BEEHIVE_LH_GROTTO, "RAND_INF_BEEHIVE_LH_GROTTO" }, - { RAND_INF_BEEHIVE_GV_DEKU_SCRUB_GROTTO, "RAND_INF_BEEHIVE_GV_DEKU_SCRUB_GROTTO" }, - { RAND_INF_BEEHIVE_COLOSSUS_GROTTO, "RAND_INF_BEEHIVE_COLOSSUS_GROTTO" }, + { RAND_INF_HAS_WALLET, "RAND_INF_HAS_WALLET" }, - { RAND_INF_CHILD_FISH_1, "RAND_INF_CHILD_FISH_1" }, - { RAND_INF_CHILD_FISH_2, "RAND_INF_CHILD_FISH_2" }, - { RAND_INF_CHILD_FISH_3, "RAND_INF_CHILD_FISH_3" }, - { RAND_INF_CHILD_FISH_4, "RAND_INF_CHILD_FISH_4" }, - { RAND_INF_CHILD_FISH_5, "RAND_INF_CHILD_FISH_5" }, - { RAND_INF_CHILD_FISH_6, "RAND_INF_CHILD_FISH_6" }, - { RAND_INF_CHILD_FISH_7, "RAND_INF_CHILD_FISH_7" }, - { RAND_INF_CHILD_FISH_8, "RAND_INF_CHILD_FISH_8" }, - { RAND_INF_CHILD_FISH_9, "RAND_INF_CHILD_FISH_9" }, - { RAND_INF_CHILD_FISH_10, "RAND_INF_CHILD_FISH_10" }, - { RAND_INF_CHILD_FISH_11, "RAND_INF_CHILD_FISH_11" }, - { RAND_INF_CHILD_FISH_12, "RAND_INF_CHILD_FISH_12" }, - { RAND_INF_CHILD_FISH_13, "RAND_INF_CHILD_FISH_13" }, - { RAND_INF_CHILD_FISH_14, "RAND_INF_CHILD_FISH_14" }, - { RAND_INF_CHILD_FISH_15, "RAND_INF_CHILD_FISH_15" }, - { RAND_INF_CHILD_LOACH_1, "RAND_INF_CHILD_LOACH_1" }, - { RAND_INF_CHILD_LOACH_2, "RAND_INF_CHILD_LOACH_2" }, - { RAND_INF_ADULT_FISH_1, "RAND_INF_ADULT_FISH_1" }, - { RAND_INF_ADULT_FISH_2, "RAND_INF_ADULT_FISH_2" }, - { RAND_INF_ADULT_FISH_3, "RAND_INF_ADULT_FISH_3" }, - { RAND_INF_ADULT_FISH_4, "RAND_INF_ADULT_FISH_4" }, - { RAND_INF_ADULT_FISH_5, "RAND_INF_ADULT_FISH_5" }, - { RAND_INF_ADULT_FISH_6, "RAND_INF_ADULT_FISH_6" }, - { RAND_INF_ADULT_FISH_7, "RAND_INF_ADULT_FISH_7" }, - { RAND_INF_ADULT_FISH_8, "RAND_INF_ADULT_FISH_8" }, - { RAND_INF_ADULT_FISH_9, "RAND_INF_ADULT_FISH_9" }, - { RAND_INF_ADULT_FISH_10, "RAND_INF_ADULT_FISH_10" }, - { RAND_INF_ADULT_FISH_11, "RAND_INF_ADULT_FISH_11" }, - { RAND_INF_ADULT_FISH_12, "RAND_INF_ADULT_FISH_12" }, - { RAND_INF_ADULT_FISH_13, "RAND_INF_ADULT_FISH_13" }, - { RAND_INF_ADULT_FISH_14, "RAND_INF_ADULT_FISH_14" }, - { RAND_INF_ADULT_FISH_15, "RAND_INF_ADULT_FISH_15" }, - { RAND_INF_ADULT_LOACH, "RAND_INF_ADULT_LOACH" }, - { RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO, "RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO" }, - { RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO, "RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO" }, - { RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO, "RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO" }, - { RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO, "RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO" }, - { RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO, "RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO" }, - { RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO, "RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO" }, - { RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO, "RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO" }, - { RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO, "RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO" }, - { RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO, "RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO" }, - { RAND_INF_FISHING_POLE_FOUND, "RAND_INF_FISHING_POLE_FOUND" }, - { RAND_INF_ZD_FISH_1, "RAND_INF_ZD_FISH_1" }, - { RAND_INF_ZD_FISH_2, "RAND_INF_ZD_FISH_2" }, - { RAND_INF_ZD_FISH_3, "RAND_INF_ZD_FISH_3" }, - { RAND_INF_ZD_FISH_4, "RAND_INF_ZD_FISH_4" }, - { RAND_INF_ZD_FISH_5, "RAND_INF_ZD_FISH_5" }, + { RAND_INF_BEEHIVE_KF_STORMS_GROTTO_LEFT, "RAND_INF_BEEHIVE_KF_STORMS_GROTTO_LEFT" }, + { RAND_INF_BEEHIVE_KF_STORMS_GROTTO_RIGHT, "RAND_INF_BEEHIVE_KF_STORMS_GROTTO_RIGHT" }, + { RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_LEFT, "RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_LEFT" }, + { RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_RIGHT, "RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_RIGHT" }, + { RAND_INF_BEEHIVE_LW_DEKU_SCRUB_GROTTO, "RAND_INF_BEEHIVE_LW_DEKU_SCRUB_GROTTO" }, + { RAND_INF_BEEHIVE_SFM_STORMS_GROTTO, "RAND_INF_BEEHIVE_SFM_STORMS_GROTTO" }, + { RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_LEFT, "RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_LEFT" }, + { RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_RIGHT, "RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_RIGHT" }, + { RAND_INF_BEEHIVE_HF_OPEN_GROTTO_LEFT, "RAND_INF_BEEHIVE_HF_OPEN_GROTTO_LEFT" }, + { RAND_INF_BEEHIVE_HF_OPEN_GROTTO_RIGHT, "RAND_INF_BEEHIVE_HF_OPEN_GROTTO_RIGHT" }, + { RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_LEFT, "RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_LEFT" }, + { RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_RIGHT, "RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_RIGHT" }, + { RAND_INF_BEEHIVE_HF_INSIDE_FENCE_GROTTO, "RAND_INF_BEEHIVE_HF_INSIDE_FENCE_GROTTO" }, + { RAND_INF_BEEHIVE_LLR_GROTTO, "RAND_INF_BEEHIVE_LLR_GROTTO" }, + { RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_LEFT, "RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_LEFT" }, + { RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_RIGHT, "RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_RIGHT" }, + { RAND_INF_BEEHIVE_DMT_COW_GROTTO, "RAND_INF_BEEHIVE_DMT_COW_GROTTO" }, + { RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_LEFT, "RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_LEFT" }, + { RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_RIGHT, "RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_RIGHT" }, + { RAND_INF_BEEHIVE_GC_GROTTO, "RAND_INF_BEEHIVE_GC_GROTTO" }, + { RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_LEFT, "RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_LEFT" }, + { RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_RIGHT, "RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_RIGHT" }, + { RAND_INF_BEEHIVE_DMC_HAMMER_GROTTO, "RAND_INF_BEEHIVE_DMC_HAMMER_GROTTO" }, + { RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_LEFT, "RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_LEFT" }, + { RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_RIGHT, "RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_RIGHT" }, + { RAND_INF_BEEHIVE_ZR_STORMS_GROTTO, "RAND_INF_BEEHIVE_ZR_STORMS_GROTTO" }, + { RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_LEFT, "RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_LEFT" }, + { RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_RIGHT, "RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_RIGHT" }, + { RAND_INF_BEEHIVE_ZD_BEHIND_KING_ZORA, "RAND_INF_BEEHIVE_ZD_BEHIND_KING_ZORA" }, + { RAND_INF_BEEHIVE_LH_GROTTO, "RAND_INF_BEEHIVE_LH_GROTTO" }, + { RAND_INF_BEEHIVE_GV_DEKU_SCRUB_GROTTO, "RAND_INF_BEEHIVE_GV_DEKU_SCRUB_GROTTO" }, + { RAND_INF_BEEHIVE_COLOSSUS_GROTTO, "RAND_INF_BEEHIVE_COLOSSUS_GROTTO" }, - { RAND_INF_HAS_INFINITE_QUIVER, "RAND_INF_HAS_INFINITE_QUIVER" }, - { RAND_INF_HAS_INFINITE_BOMB_BAG, "RAND_INF_HAS_INFINITE_BOMB_BAG" }, - { RAND_INF_HAS_INFINITE_BULLET_BAG, "RAND_INF_HAS_INFINITE_BULLET_BAG" }, - { RAND_INF_HAS_INFINITE_STICK_UPGRADE, "RAND_INF_HAS_INFINITE_STICK_UPGRADE" }, - { RAND_INF_HAS_INFINITE_NUT_UPGRADE, "RAND_INF_HAS_INFINITE_NUT_UPGRADE" }, - { RAND_INF_HAS_INFINITE_MAGIC_METER, "RAND_INF_HAS_INFINITE_MAGIC_METER" }, - { RAND_INF_HAS_INFINITE_BOMBCHUS, "RAND_INF_HAS_INFINITE_BOMBCHUS" }, - { RAND_INF_HAS_INFINITE_MONEY, "RAND_INF_HAS_INFINITE_MONEY" }, + { RAND_INF_CHILD_FISH_1, "RAND_INF_CHILD_FISH_1" }, + { RAND_INF_CHILD_FISH_2, "RAND_INF_CHILD_FISH_2" }, + { RAND_INF_CHILD_FISH_3, "RAND_INF_CHILD_FISH_3" }, + { RAND_INF_CHILD_FISH_4, "RAND_INF_CHILD_FISH_4" }, + { RAND_INF_CHILD_FISH_5, "RAND_INF_CHILD_FISH_5" }, + { RAND_INF_CHILD_FISH_6, "RAND_INF_CHILD_FISH_6" }, + { RAND_INF_CHILD_FISH_7, "RAND_INF_CHILD_FISH_7" }, + { RAND_INF_CHILD_FISH_8, "RAND_INF_CHILD_FISH_8" }, + { RAND_INF_CHILD_FISH_9, "RAND_INF_CHILD_FISH_9" }, + { RAND_INF_CHILD_FISH_10, "RAND_INF_CHILD_FISH_10" }, + { RAND_INF_CHILD_FISH_11, "RAND_INF_CHILD_FISH_11" }, + { RAND_INF_CHILD_FISH_12, "RAND_INF_CHILD_FISH_12" }, + { RAND_INF_CHILD_FISH_13, "RAND_INF_CHILD_FISH_13" }, + { RAND_INF_CHILD_FISH_14, "RAND_INF_CHILD_FISH_14" }, + { RAND_INF_CHILD_FISH_15, "RAND_INF_CHILD_FISH_15" }, + { RAND_INF_CHILD_LOACH_1, "RAND_INF_CHILD_LOACH_1" }, + { RAND_INF_CHILD_LOACH_2, "RAND_INF_CHILD_LOACH_2" }, + { RAND_INF_ADULT_FISH_1, "RAND_INF_ADULT_FISH_1" }, + { RAND_INF_ADULT_FISH_2, "RAND_INF_ADULT_FISH_2" }, + { RAND_INF_ADULT_FISH_3, "RAND_INF_ADULT_FISH_3" }, + { RAND_INF_ADULT_FISH_4, "RAND_INF_ADULT_FISH_4" }, + { RAND_INF_ADULT_FISH_5, "RAND_INF_ADULT_FISH_5" }, + { RAND_INF_ADULT_FISH_6, "RAND_INF_ADULT_FISH_6" }, + { RAND_INF_ADULT_FISH_7, "RAND_INF_ADULT_FISH_7" }, + { RAND_INF_ADULT_FISH_8, "RAND_INF_ADULT_FISH_8" }, + { RAND_INF_ADULT_FISH_9, "RAND_INF_ADULT_FISH_9" }, + { RAND_INF_ADULT_FISH_10, "RAND_INF_ADULT_FISH_10" }, + { RAND_INF_ADULT_FISH_11, "RAND_INF_ADULT_FISH_11" }, + { RAND_INF_ADULT_FISH_12, "RAND_INF_ADULT_FISH_12" }, + { RAND_INF_ADULT_FISH_13, "RAND_INF_ADULT_FISH_13" }, + { RAND_INF_ADULT_FISH_14, "RAND_INF_ADULT_FISH_14" }, + { RAND_INF_ADULT_FISH_15, "RAND_INF_ADULT_FISH_15" }, + { RAND_INF_ADULT_LOACH, "RAND_INF_ADULT_LOACH" }, + { RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO, "RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO" }, + { RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO, "RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO" }, + { RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO, "RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO" }, + { RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO, "RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO" }, + { RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO, "RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO" }, + { RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO, "RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO" }, + { RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO, "RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO" }, + { RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO, "RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO" }, + { RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO, "RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO" }, + { RAND_INF_FISHING_POLE_FOUND, "RAND_INF_FISHING_POLE_FOUND" }, + { RAND_INF_ZD_FISH_1, "RAND_INF_ZD_FISH_1" }, + { RAND_INF_ZD_FISH_2, "RAND_INF_ZD_FISH_2" }, + { RAND_INF_ZD_FISH_3, "RAND_INF_ZD_FISH_3" }, + { RAND_INF_ZD_FISH_4, "RAND_INF_ZD_FISH_4" }, + { RAND_INF_ZD_FISH_5, "RAND_INF_ZD_FISH_5" }, - { RAND_INF_HAS_SKELETON_KEY, "RAND_INF_HAS_SKELETON_KEY" }, + { RAND_INF_HAS_INFINITE_QUIVER, "RAND_INF_HAS_INFINITE_QUIVER" }, + { RAND_INF_HAS_INFINITE_BOMB_BAG, "RAND_INF_HAS_INFINITE_BOMB_BAG" }, + { RAND_INF_HAS_INFINITE_BULLET_BAG, "RAND_INF_HAS_INFINITE_BULLET_BAG" }, + { RAND_INF_HAS_INFINITE_STICK_UPGRADE, "RAND_INF_HAS_INFINITE_STICK_UPGRADE" }, + { RAND_INF_HAS_INFINITE_NUT_UPGRADE, "RAND_INF_HAS_INFINITE_NUT_UPGRADE" }, + { RAND_INF_HAS_INFINITE_MAGIC_METER, "RAND_INF_HAS_INFINITE_MAGIC_METER" }, + { RAND_INF_HAS_INFINITE_BOMBCHUS, "RAND_INF_HAS_INFINITE_BOMBCHUS" }, + { RAND_INF_HAS_INFINITE_MONEY, "RAND_INF_HAS_INFINITE_MONEY" }, - { RAND_INF_LINKS_POCKET, "RAND_INF_LINKS_POCKET" }, - { RAND_INF_LEARNED_EPONA_SONG, "RAND_INF_LEARNED_EPONA_SONG" }, - { RAND_INF_DARUNIAS_JOY, "RAND_INF_DARUNIAS_JOY" }, - { RAND_INF_KING_ZORA_THAWED, "RAND_INF_KING_ZORA_THAWED" }, + { RAND_INF_HAS_SKELETON_KEY, "RAND_INF_HAS_SKELETON_KEY" }, - { RAND_INF_HC_GREAT_FAIRY_REWARD, "RAND_INF_HC_GREAT_FAIRY_REWARD" }, - { RAND_INF_DMT_GREAT_FAIRY_REWARD, "RAND_INF_DMT_GREAT_FAIRY_REWARD" }, - { RAND_INF_DMC_GREAT_FAIRY_REWARD, "RAND_INF_DMC_GREAT_FAIRY_REWARD" }, - { RAND_INF_ZF_GREAT_FAIRY_REWARD, "RAND_INF_ZF_GREAT_FAIRY_REWARD" }, - { RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD, "RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD" }, - { RAND_INF_OGC_GREAT_FAIRY_REWARD, "RAND_INF_OGC_GREAT_FAIRY_REWARD" }, + { RAND_INF_LINKS_POCKET, "RAND_INF_LINKS_POCKET" }, + { RAND_INF_LEARNED_EPONA_SONG, "RAND_INF_LEARNED_EPONA_SONG" }, + { RAND_INF_DARUNIAS_JOY, "RAND_INF_DARUNIAS_JOY" }, + { RAND_INF_KING_ZORA_THAWED, "RAND_INF_KING_ZORA_THAWED" }, - { RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE, "RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE" }, - { RAND_INF_KF_NORTH_GRASS_WEST_RUPEE, "RAND_INF_KF_NORTH_GRASS_WEST_RUPEE" }, - { RAND_INF_KF_NORTH_GRASS_EAST_RUPEE, "RAND_INF_KF_NORTH_GRASS_EAST_RUPEE" }, - { RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE, "RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE" }, - { RAND_INF_KF_SARIAS_TOP_LEFT_HEART, "RAND_INF_KF_SARIAS_TOP_LEFT_HEART" }, - { RAND_INF_KF_SARIAS_TOP_RIGHT_HEART, "RAND_INF_KF_SARIAS_TOP_RIGHT_HEART" }, - { RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART, "RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART" }, - { RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART, "RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART" }, - { RAND_INF_KF_BEAN_RUPEE_1, "RAND_INF_KF_BEAN_RUPEE_1" }, - { RAND_INF_KF_BEAN_RUPEE_2, "RAND_INF_KF_BEAN_RUPEE_2" }, - { RAND_INF_KF_BEAN_RUPEE_3, "RAND_INF_KF_BEAN_RUPEE_3" }, - { RAND_INF_KF_BEAN_RUPEE_4, "RAND_INF_KF_BEAN_RUPEE_4" }, - { RAND_INF_KF_BEAN_RUPEE_5, "RAND_INF_KF_BEAN_RUPEE_5" }, - { RAND_INF_KF_BEAN_RUPEE_6, "RAND_INF_KF_BEAN_RUPEE_6" }, - { RAND_INF_KF_BEAN_RED_RUPEE, "RAND_INF_KF_BEAN_RED_RUPEE" }, - { RAND_INF_LW_SHORTCUT_RUPEE_1, "RAND_INF_LW_SHORTCUT_RUPEE_1" }, - { RAND_INF_LW_SHORTCUT_RUPEE_2, "RAND_INF_LW_SHORTCUT_RUPEE_2" }, - { RAND_INF_LW_SHORTCUT_RUPEE_3, "RAND_INF_LW_SHORTCUT_RUPEE_3" }, - { RAND_INF_LW_SHORTCUT_RUPEE_4, "RAND_INF_LW_SHORTCUT_RUPEE_4" }, - { RAND_INF_LW_SHORTCUT_RUPEE_5, "RAND_INF_LW_SHORTCUT_RUPEE_5" }, - { RAND_INF_LW_SHORTCUT_RUPEE_6, "RAND_INF_LW_SHORTCUT_RUPEE_6" }, - { RAND_INF_LW_SHORTCUT_RUPEE_7, "RAND_INF_LW_SHORTCUT_RUPEE_7" }, - { RAND_INF_LW_SHORTCUT_RUPEE_8, "RAND_INF_LW_SHORTCUT_RUPEE_8" }, - { RAND_INF_LH_FRONT_RUPEE, "RAND_INF_LH_FRONT_RUPEE" }, - { RAND_INF_LH_MIDDLE_RUPEE, "RAND_INF_LH_MIDDLE_RUPEE" }, - { RAND_INF_LH_BACK_RUPEE, "RAND_INF_LH_BACK_RUPEE" }, - { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1" }, - { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2" }, - { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3" }, - { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4" }, - { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5" }, - { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6" }, - { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7" }, - { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8" }, - { RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE" }, - { RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE" }, - { RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE" }, - { RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE" }, - { RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE" }, - { RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE" }, - { RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE" }, - { RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE" }, - { RAND_INF_DMT_BLUE_RUPEE, "RAND_INF_DMT_BLUE_RUPEE" }, - { RAND_INF_DMT_COW_GROTTO_LEFT_HEART, "RAND_INF_DMT_COW_GROTTO_LEFT_HEART" }, - { RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, "RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART" }, - { RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, "RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART" }, - { RAND_INF_DMT_COW_GROTTO_RIGHT_HEART, "RAND_INF_DMT_COW_GROTTO_RIGHT_HEART" }, - { RAND_INF_DMT_COW_GROTTO_RUPEE_1, "RAND_INF_DMT_COW_GROTTO_RUPEE_1" }, - { RAND_INF_DMT_COW_GROTTO_RUPEE_2, "RAND_INF_DMT_COW_GROTTO_RUPEE_2" }, - { RAND_INF_DMT_COW_GROTTO_RUPEE_3, "RAND_INF_DMT_COW_GROTTO_RUPEE_3" }, - { RAND_INF_DMT_COW_GROTTO_RUPEE_4, "RAND_INF_DMT_COW_GROTTO_RUPEE_4" }, - { RAND_INF_DMT_COW_GROTTO_RUPEE_5, "RAND_INF_DMT_COW_GROTTO_RUPEE_5" }, - { RAND_INF_DMT_COW_GROTTO_RUPEE_6, "RAND_INF_DMT_COW_GROTTO_RUPEE_6" }, - { RAND_INF_DMT_COW_GROTTO_RED_RUPEE, "RAND_INF_DMT_COW_GROTTO_RED_RUPEE" }, - { RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE, "RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE" }, - { RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE, "RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE" }, - { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1" }, - { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2" }, - { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3" }, - { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4" }, - { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5" }, - { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6" }, - { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1" }, - { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2" }, - { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3" }, - { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4" }, - { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5" }, - { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6" }, - { RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE, "RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE" }, - { RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE" }, - { RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE" }, - { RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE" }, - { RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE" }, - { RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE" }, - { RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE" }, - { RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE" }, - { RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE" }, - { RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE" }, - { RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE" }, - { RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE" }, - { RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE" }, - { RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART, "RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART" }, - { RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART, "RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART" }, - { RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, "RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART" }, - { RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, "RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART" }, - { RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, "RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART" }, - { RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART, "RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART" }, - { RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, "RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART" }, - { RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, "RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART" }, - { RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, "RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART" }, - { RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART, "RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART" }, - { RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART" }, - { RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART" }, - { RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART" }, - { RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART" }, - { RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART" }, - { RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, "RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART" }, - { RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, "RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART" }, - { RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, "RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART" }, - { RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART" }, - { RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART" }, - { RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART" }, - { RAND_INF_WATER_TEMPLE_RIVER_HEART_1, "RAND_INF_WATER_TEMPLE_RIVER_HEART_1" }, - { RAND_INF_WATER_TEMPLE_RIVER_HEART_2, "RAND_INF_WATER_TEMPLE_RIVER_HEART_2" }, - { RAND_INF_WATER_TEMPLE_RIVER_HEART_3, "RAND_INF_WATER_TEMPLE_RIVER_HEART_3" }, - { RAND_INF_WATER_TEMPLE_RIVER_HEART_4, "RAND_INF_WATER_TEMPLE_RIVER_HEART_4" }, - { RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART" }, - { RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, "RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART" }, - { RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, "RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART" }, - { RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, "RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART" }, - { RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART" }, - { RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, "RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART" }, - { RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, "RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART" }, - { RAND_INF_ICE_CAVERN_LOBBY_RUPEE, "RAND_INF_ICE_CAVERN_LOBBY_RUPEE" }, - { RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART, "RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART" }, - { RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, "RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART" }, - { RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, "RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART" }, - { RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, "RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1" }, - { RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, "RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2" }, - { RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, "RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3" }, - { RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART" }, - { RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, "RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART" }, - { RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, "RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART" }, - { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1" }, - { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2" }, - { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3" }, - { RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART, "RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART" }, - { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART" }, - { RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART, "RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART" }, - { RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART, "RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART" }, - { RAND_INF_DEKU_TREE_MQ_LOBBY_HEART, "RAND_INF_DEKU_TREE_MQ_LOBBY_HEART" }, - { RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, "RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART" }, - { RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, "RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART" }, - { RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, "RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART" }, - { RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, "RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART" }, - { RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, "RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, "RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1" }, - { RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, "RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2" }, - { RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, "RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART" }, - { RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, "RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART" }, - { RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, "RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART" }, - { RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART" }, - { RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART, "RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART" }, - { RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART" }, - { RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART" }, - { RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART" }, - { RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART" }, - { RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART" }, - { RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART" }, - { RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART" }, - { RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART" }, - { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART" }, - { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART" }, - { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART" }, - { RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, "RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART" }, - { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART" }, - { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART" }, + { RAND_INF_HC_GREAT_FAIRY_REWARD, "RAND_INF_HC_GREAT_FAIRY_REWARD" }, + { RAND_INF_DMT_GREAT_FAIRY_REWARD, "RAND_INF_DMT_GREAT_FAIRY_REWARD" }, + { RAND_INF_DMC_GREAT_FAIRY_REWARD, "RAND_INF_DMC_GREAT_FAIRY_REWARD" }, + { RAND_INF_ZF_GREAT_FAIRY_REWARD, "RAND_INF_ZF_GREAT_FAIRY_REWARD" }, + { RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD, "RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD" }, + { RAND_INF_OGC_GREAT_FAIRY_REWARD, "RAND_INF_OGC_GREAT_FAIRY_REWARD" }, - { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1" }, - { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2" }, - { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3" }, - { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4" }, - { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5" }, - { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6" }, - { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7" }, - { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8" }, - { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1" }, - { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2" }, - { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3" }, - { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4" }, - { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5" }, - { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6" }, - { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7" }, - { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8" }, - { RAND_INF_HF_FAIRY_GROTTO_FAIRY_1, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_1" }, - { RAND_INF_HF_FAIRY_GROTTO_FAIRY_2, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_2" }, - { RAND_INF_HF_FAIRY_GROTTO_FAIRY_3, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_3" }, - { RAND_INF_HF_FAIRY_GROTTO_FAIRY_4, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_4" }, - { RAND_INF_HF_FAIRY_GROTTO_FAIRY_5, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_5" }, - { RAND_INF_HF_FAIRY_GROTTO_FAIRY_6, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_6" }, - { RAND_INF_HF_FAIRY_GROTTO_FAIRY_7, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_7" }, - { RAND_INF_HF_FAIRY_GROTTO_FAIRY_8, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_8" }, - { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1" }, - { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2" }, - { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3" }, - { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4" }, - { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5" }, - { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6" }, - { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7" }, - { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8" }, - { RAND_INF_GF_FAIRY_GROTTO_FAIRY_1, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_1" }, - { RAND_INF_GF_FAIRY_GROTTO_FAIRY_2, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_2" }, - { RAND_INF_GF_FAIRY_GROTTO_FAIRY_3, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_3" }, - { RAND_INF_GF_FAIRY_GROTTO_FAIRY_4, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_4" }, - { RAND_INF_GF_FAIRY_GROTTO_FAIRY_5, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_5" }, - { RAND_INF_GF_FAIRY_GROTTO_FAIRY_6, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_6" }, - { RAND_INF_GF_FAIRY_GROTTO_FAIRY_7, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_7" }, - { RAND_INF_GF_FAIRY_GROTTO_FAIRY_8, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_8" }, - { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1" }, - { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2" }, - { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3" }, - { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4" }, - { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5" }, - { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6" }, - { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7" }, - { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8" }, - { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1" }, - { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2" }, - { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3" }, - { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4" }, - { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5" }, - { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6" }, - { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7" }, - { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8" }, - { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1" }, - { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2" }, - { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3" }, - { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4" }, - { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5" }, - { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6" }, - { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7" }, - { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8" }, - { RAND_INF_COLOSSUS_OASIS_FAIRY_1, "RAND_INF_COLOSSUS_OASIS_FAIRY_1" }, - { RAND_INF_COLOSSUS_OASIS_FAIRY_2, "RAND_INF_COLOSSUS_OASIS_FAIRY_2" }, - { RAND_INF_COLOSSUS_OASIS_FAIRY_3, "RAND_INF_COLOSSUS_OASIS_FAIRY_3" }, - { RAND_INF_COLOSSUS_OASIS_FAIRY_4, "RAND_INF_COLOSSUS_OASIS_FAIRY_4" }, - { RAND_INF_COLOSSUS_OASIS_FAIRY_5, "RAND_INF_COLOSSUS_OASIS_FAIRY_5" }, - { RAND_INF_COLOSSUS_OASIS_FAIRY_6, "RAND_INF_COLOSSUS_OASIS_FAIRY_6" }, - { RAND_INF_COLOSSUS_OASIS_FAIRY_7, "RAND_INF_COLOSSUS_OASIS_FAIRY_7" }, - { RAND_INF_COLOSSUS_OASIS_FAIRY_8, "RAND_INF_COLOSSUS_OASIS_FAIRY_8" }, + { RAND_INF_ZELDAS_LETTER, "RAND_INF_ZELDAS_LETTER" }, + { RAND_INF_WEIRD_EGG, "RAND_INF_WEIRD_EGG" }, - { RAND_INF_ZR_BEAN_SPROUT_FAIRY_1, "RAND_INF_ZR_BEAN_SPROUT_FAIRY_1" }, - { RAND_INF_ZR_BEAN_SPROUT_FAIRY_2, "RAND_INF_ZR_BEAN_SPROUT_FAIRY_2" }, - { RAND_INF_ZR_BEAN_SPROUT_FAIRY_3, "RAND_INF_ZR_BEAN_SPROUT_FAIRY_3" }, - { RAND_INF_KF_BEAN_SPROUT_FAIRY_1, "RAND_INF_KF_BEAN_SPROUT_FAIRY_1" }, - { RAND_INF_KF_BEAN_SPROUT_FAIRY_2, "RAND_INF_KF_BEAN_SPROUT_FAIRY_2" }, - { RAND_INF_KF_BEAN_SPROUT_FAIRY_3, "RAND_INF_KF_BEAN_SPROUT_FAIRY_3" }, - { RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, "RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1" }, - { RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, "RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2" }, - { RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, "RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3" }, - { RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, "RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1" }, - { RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, "RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2" }, - { RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, "RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3" }, - { RAND_INF_LH_BEAN_SPROUT_FAIRY_1, "RAND_INF_LH_BEAN_SPROUT_FAIRY_1" }, - { RAND_INF_LH_BEAN_SPROUT_FAIRY_2, "RAND_INF_LH_BEAN_SPROUT_FAIRY_2" }, - { RAND_INF_LH_BEAN_SPROUT_FAIRY_3, "RAND_INF_LH_BEAN_SPROUT_FAIRY_3" }, - { RAND_INF_GV_BEAN_SPROUT_FAIRY_1, "RAND_INF_GV_BEAN_SPROUT_FAIRY_1" }, - { RAND_INF_GV_BEAN_SPROUT_FAIRY_2, "RAND_INF_GV_BEAN_SPROUT_FAIRY_2" }, - { RAND_INF_GV_BEAN_SPROUT_FAIRY_3, "RAND_INF_GV_BEAN_SPROUT_FAIRY_3" }, - { RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1, "RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1" }, - { RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2, "RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2" }, - { RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3, "RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3" }, - { RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1, "RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1" }, - { RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2, "RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2" }, - { RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3, "RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3" }, - { RAND_INF_DMC_BEAN_SPROUT_FAIRY_1, "RAND_INF_DMC_BEAN_SPROUT_FAIRY_1" }, - { RAND_INF_DMC_BEAN_SPROUT_FAIRY_2, "RAND_INF_DMC_BEAN_SPROUT_FAIRY_2" }, - { RAND_INF_DMC_BEAN_SPROUT_FAIRY_3, "RAND_INF_DMC_BEAN_SPROUT_FAIRY_3" }, - { RAND_INF_DMT_BEAN_SPROUT_FAIRY_1, "RAND_INF_DMT_BEAN_SPROUT_FAIRY_1" }, - { RAND_INF_DMT_BEAN_SPROUT_FAIRY_2, "RAND_INF_DMT_BEAN_SPROUT_FAIRY_2" }, - { RAND_INF_DMT_BEAN_SPROUT_FAIRY_3, "RAND_INF_DMT_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE, "RAND_INF_KF_SOUTH_GRASS_WEST_RUPEE" }, + { RAND_INF_KF_NORTH_GRASS_WEST_RUPEE, "RAND_INF_KF_NORTH_GRASS_WEST_RUPEE" }, + { RAND_INF_KF_NORTH_GRASS_EAST_RUPEE, "RAND_INF_KF_NORTH_GRASS_EAST_RUPEE" }, + { RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE, "RAND_INF_KF_SOUTH_GRASS_EAST_RUPEE" }, + { RAND_INF_KF_SARIAS_TOP_LEFT_HEART, "RAND_INF_KF_SARIAS_TOP_LEFT_HEART" }, + { RAND_INF_KF_SARIAS_TOP_RIGHT_HEART, "RAND_INF_KF_SARIAS_TOP_RIGHT_HEART" }, + { RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART, "RAND_INF_KF_SARIAS_BOTTOM_LEFT_HEART" }, + { RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART, "RAND_INF_KF_SARIAS_BOTTOM_RIGHT_HEART" }, + { RAND_INF_KF_BEAN_RUPEE_1, "RAND_INF_KF_BEAN_RUPEE_1" }, + { RAND_INF_KF_BEAN_RUPEE_2, "RAND_INF_KF_BEAN_RUPEE_2" }, + { RAND_INF_KF_BEAN_RUPEE_3, "RAND_INF_KF_BEAN_RUPEE_3" }, + { RAND_INF_KF_BEAN_RUPEE_4, "RAND_INF_KF_BEAN_RUPEE_4" }, + { RAND_INF_KF_BEAN_RUPEE_5, "RAND_INF_KF_BEAN_RUPEE_5" }, + { RAND_INF_KF_BEAN_RUPEE_6, "RAND_INF_KF_BEAN_RUPEE_6" }, + { RAND_INF_KF_BEAN_RED_RUPEE, "RAND_INF_KF_BEAN_RED_RUPEE" }, + { RAND_INF_LW_SHORTCUT_RUPEE_1, "RAND_INF_LW_SHORTCUT_RUPEE_1" }, + { RAND_INF_LW_SHORTCUT_RUPEE_2, "RAND_INF_LW_SHORTCUT_RUPEE_2" }, + { RAND_INF_LW_SHORTCUT_RUPEE_3, "RAND_INF_LW_SHORTCUT_RUPEE_3" }, + { RAND_INF_LW_SHORTCUT_RUPEE_4, "RAND_INF_LW_SHORTCUT_RUPEE_4" }, + { RAND_INF_LW_SHORTCUT_RUPEE_5, "RAND_INF_LW_SHORTCUT_RUPEE_5" }, + { RAND_INF_LW_SHORTCUT_RUPEE_6, "RAND_INF_LW_SHORTCUT_RUPEE_6" }, + { RAND_INF_LW_SHORTCUT_RUPEE_7, "RAND_INF_LW_SHORTCUT_RUPEE_7" }, + { RAND_INF_LW_SHORTCUT_RUPEE_8, "RAND_INF_LW_SHORTCUT_RUPEE_8" }, + { RAND_INF_LH_FRONT_RUPEE, "RAND_INF_LH_FRONT_RUPEE" }, + { RAND_INF_LH_MIDDLE_RUPEE, "RAND_INF_LH_MIDDLE_RUPEE" }, + { RAND_INF_LH_BACK_RUPEE, "RAND_INF_LH_BACK_RUPEE" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_1" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_2" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_3" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_4" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_5" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_6" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_7" }, + { RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8, "RAND_INF_GRAVEYARD_DAMPE_RACE_RUPEE_8" }, + { RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE" }, + { RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE, "RAND_INF_GV_OCTOROK_GROTTO_RED_RUPEE" }, + { RAND_INF_DMT_BLUE_RUPEE, "RAND_INF_DMT_BLUE_RUPEE" }, + { RAND_INF_DMT_COW_GROTTO_LEFT_HEART, "RAND_INF_DMT_COW_GROTTO_LEFT_HEART" }, + { RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, "RAND_INF_DMT_COW_GROTTO_MIDDLE_LEFT_HEART" }, + { RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART, "RAND_INF_DMT_COW_GROTTO_MIDDLE_RIGHT_HEART" }, + { RAND_INF_DMT_COW_GROTTO_RIGHT_HEART, "RAND_INF_DMT_COW_GROTTO_RIGHT_HEART" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_1, "RAND_INF_DMT_COW_GROTTO_RUPEE_1" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_2, "RAND_INF_DMT_COW_GROTTO_RUPEE_2" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_3, "RAND_INF_DMT_COW_GROTTO_RUPEE_3" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_4, "RAND_INF_DMT_COW_GROTTO_RUPEE_4" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_5, "RAND_INF_DMT_COW_GROTTO_RUPEE_5" }, + { RAND_INF_DMT_COW_GROTTO_RUPEE_6, "RAND_INF_DMT_COW_GROTTO_RUPEE_6" }, + { RAND_INF_DMT_COW_GROTTO_RED_RUPEE, "RAND_INF_DMT_COW_GROTTO_RED_RUPEE" }, + { RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE, "RAND_INF_DMC_NEAR_PLATFORM_RED_RUPEE" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE, "RAND_INF_DMC_MIDDLE_PLATFORM_RED_RUPEE" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5" }, + { RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, "RAND_INF_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_1" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_2" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_3" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_4" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_5" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6, "RAND_INF_DMC_DISTANT_PLATFORM_RUPEE_6" }, + { RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE, "RAND_INF_DMC_DISTANT_PLATFORM_RED_RUPEE" }, + { RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_LEFT_RUPEE" }, + { RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE" }, + { RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE" }, + { RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, "RAND_INF_ZR_BENEATH_WATERFALL_RIGHT_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTH_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHEAST_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTH_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHWEST_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHWEST_INNER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_NORTH_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHEAST_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHEAST_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTH_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHWEST_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHWEST_MIDDLE_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTH_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHEAST_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHEAST_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTH_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_SOUTHWEST_OUTER_RUPEE" }, + { RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, "RAND_INF_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE" }, + { RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART, "RAND_INF_DEKU_TREE_LOBBY_LOWER_HEART" }, + { RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART, "RAND_INF_DEKU_TREE_LOBBY_UPPER_HEART" }, + { RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, "RAND_INF_DEKU_TREE_BEFORE_BOSS_LEFT_HEART" }, + { RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, "RAND_INF_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART" }, + { RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, "RAND_INF_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART" }, + { RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART, "RAND_INF_DODONGOS_CAVERN_BLADE_ROOM_HEART" }, + { RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, "RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART" }, + { RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, + "RAND_INF_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART" }, + { RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, "RAND_INF_FOREST_TEMPLE_COURTYARD_RIGHT_HEART" }, + { RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART, "RAND_INF_FOREST_TEMPLE_COURTYARD_LEFT_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_WEST_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_EAST_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART" }, + { RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, "RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART" }, + { RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, "RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART" }, + { RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, "RAND_INF_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_WALL_EAST_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_WALL_WEST_HEART" }, + { RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, "RAND_INF_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART" }, + { RAND_INF_WATER_TEMPLE_RIVER_HEART_1, "RAND_INF_WATER_TEMPLE_RIVER_HEART_1" }, + { RAND_INF_WATER_TEMPLE_RIVER_HEART_2, "RAND_INF_WATER_TEMPLE_RIVER_HEART_2" }, + { RAND_INF_WATER_TEMPLE_RIVER_HEART_3, "RAND_INF_WATER_TEMPLE_RIVER_HEART_3" }, + { RAND_INF_WATER_TEMPLE_RIVER_HEART_4, "RAND_INF_WATER_TEMPLE_RIVER_HEART_4" }, + { RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, + "RAND_INF_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, "RAND_INF_SHADOW_TEMPLE_SCARECROW_NORTH_HEART" }, + { RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, "RAND_INF_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, "RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, + "RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, "RAND_INF_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART" }, + { RAND_INF_ICE_CAVERN_LOBBY_RUPEE, "RAND_INF_ICE_CAVERN_LOBBY_RUPEE" }, + { RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART, "RAND_INF_ICE_CAVERN_MAP_ROOM_LEFT_HEART" }, + { RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, "RAND_INF_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART" }, + { RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, "RAND_INF_ICE_CAVERN_MAP_ROOM_RIGHT_HEART" }, + { RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, "RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1" }, + { RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, "RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2" }, + { RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, "RAND_INF_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3" }, + { RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, + "RAND_INF_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART" }, + { RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, "RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART" }, + { RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, "RAND_INF_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_1" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_2" }, + { RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, "RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_HEART_3" }, + { RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART, "RAND_INF_GANONS_CASTLE_FIRE_TRIAL_HEART" }, + { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_HEART" }, + { RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART, "RAND_INF_DEKU_TREE_MQ_COMPASS_ROOM_HEART" }, + { RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART, "RAND_INF_DEKU_TREE_MQ_DEKU_BABA_HEART" }, + { RAND_INF_DEKU_TREE_MQ_LOBBY_HEART, "RAND_INF_DEKU_TREE_MQ_LOBBY_HEART" }, + { RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, "RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART" }, + { RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, "RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART" }, + { RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, "RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART" }, + { RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, "RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART" }, + { RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, + "RAND_INF_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, "RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_1" }, + { RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, "RAND_INF_JABU_JABUS_BELLY_MQ_LIFT_HEART_2" }, + { RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, "RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART" }, + { RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, "RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART" }, + { RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, "RAND_INF_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_MQ_WEST_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART, "RAND_INF_FOREST_TEMPLE_WELL_MQ_MIDDLE_HEART" }, + { RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART, "RAND_INF_FOREST_TEMPLE_WELL_MQ_EAST_HEART" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART" }, + { RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, "RAND_INF_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, + "RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, + "RAND_INF_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, + "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, + "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART" }, + { RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, "RAND_INF_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, + "RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, + "RAND_INF_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, + "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, + "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, + "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART" }, + { RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, "RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART" }, + { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART" }, + { RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, "RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART" }, - { RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY" }, - { RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY" }, - { RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY" }, - { RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY" }, - { RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_DMC_GOSSIP_STONE_FAIRY, "RAND_INF_DMC_GOSSIP_STONE_FAIRY" }, - { RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_DMT_GOSSIP_STONE_FAIRY, "RAND_INF_DMT_GOSSIP_STONE_FAIRY" }, - { RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY, "RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY" }, - { RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, "RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY" }, - { RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, "RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY" }, - { RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_GV_GOSSIP_STONE_FAIRY, "RAND_INF_GV_GOSSIP_STONE_FAIRY" }, - { RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY, "RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY" }, - { RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY, "RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY" }, - { RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY, "RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY" }, - { RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY, "RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY" }, - { RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, "RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY" }, - { RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, "RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY" }, - { RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, "RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY" }, - { RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_KF_GOSSIP_STONE_FAIRY, "RAND_INF_KF_GOSSIP_STONE_FAIRY" }, - { RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY, "RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY" }, - { RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, "RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY" }, - { RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, "RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY" }, - { RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_LW_GOSSIP_STONE_FAIRY, "RAND_INF_LW_GOSSIP_STONE_FAIRY" }, - { RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, "RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY" }, - { RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, "RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY" }, - { RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY, "RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY" }, - { RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_ZD_GOSSIP_STONE_FAIRY, "RAND_INF_ZD_GOSSIP_STONE_FAIRY" }, - { RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY, "RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY" }, - { RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY, "RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY" }, - { RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, "RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY" }, - { RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, "RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY" }, - { RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY" }, - { RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - - { RAND_INF_LH_ISLAND_SUN_FAIRY, "RAND_INF_LH_ISLAND_SUN_FAIRY" }, - { RAND_INF_HF_POND_STORMS_FAIRY, "RAND_INF_HF_POND_STORMS_FAIRY" }, - { RAND_INF_DMT_FLAG_SUN_FAIRY, "RAND_INF_DMT_FLAG_SUN_FAIRY" }, - { RAND_INF_LW_SHORTCUT_STORMS_FAIRY, "RAND_INF_LW_SHORTCUT_STORMS_FAIRY" }, - { RAND_INF_GF_KITCHEN_SUN_FAIRY, "RAND_INF_GF_KITCHEN_SUN_FAIRY" }, - { RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY" }, - { RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY" }, - { RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY" }, - { RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY" }, - { RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, "RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY" }, - { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY" }, - { RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, "RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY" }, - { RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, "RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY" }, - { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY" }, - { RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, "RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY" }, - { RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, "RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY" }, - { RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, "RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY" }, - { RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, "RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY" }, - { RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, "RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY" }, - { RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY" }, - { RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY" }, - { RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY" }, - { RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, "RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY" }, - { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8, "RAND_INF_SFM_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8, "RAND_INF_ZR_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_1, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_2, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_3, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_4, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_5, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_6, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_7, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_HF_FAIRY_GROTTO_FAIRY_8, "RAND_INF_HF_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8, "RAND_INF_ZD_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_1, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_1" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_2, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_2" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_3, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_3" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_4, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_4" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_5, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_5" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_6, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_6" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_7, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_7" }, + { RAND_INF_GF_FAIRY_GROTTO_FAIRY_8, "RAND_INF_GF_FAIRY_GROTTO_FAIRY_8" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_1" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_3" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_4" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_5" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_6" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_7" }, + { RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, "RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_8" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_1" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_2" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_3" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_4" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_5" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_6" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_7" }, + { RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8, "RAND_INF_GANONS_CASTLE_SCRUBS_FAIRY_8" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7" }, + { RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, "RAND_INF_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_1, "RAND_INF_COLOSSUS_OASIS_FAIRY_1" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_2, "RAND_INF_COLOSSUS_OASIS_FAIRY_2" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_3, "RAND_INF_COLOSSUS_OASIS_FAIRY_3" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_4, "RAND_INF_COLOSSUS_OASIS_FAIRY_4" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_5, "RAND_INF_COLOSSUS_OASIS_FAIRY_5" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_6, "RAND_INF_COLOSSUS_OASIS_FAIRY_6" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_7, "RAND_INF_COLOSSUS_OASIS_FAIRY_7" }, + { RAND_INF_COLOSSUS_OASIS_FAIRY_8, "RAND_INF_COLOSSUS_OASIS_FAIRY_8" }, - { RAND_INF_GUARD_HOUSE_UNLOCKED, "RAND_INF_GUARD_HOUSE_UNLOCKED" }, - { RAND_INF_GUARD_HOUSE_KEY_OBTAINED, "RAND_INF_GUARD_HOUSE_KEY_OBTAINED" }, - { RAND_INF_MARKET_BAZAAR_UNLOCKED, "RAND_INF_MARKET_BAZAAR_UNLOCKED" }, - { RAND_INF_MARKET_BAZAAR_KEY_OBTAINED, "RAND_INF_MARKET_BAZAAR_KEY_OBTAINED" }, - { RAND_INF_MARKET_POTION_SHOP_UNLOCKED, "RAND_INF_MARKET_POTION_SHOP_UNLOCKED" }, - { RAND_INF_MARKET_POTION_SHOP_KEY_OBTAINED, "RAND_INF_MARKET_POTION_SHOP_KEY_OBTAINED" }, - { RAND_INF_MASK_SHOP_UNLOCKED, "RAND_INF_MASK_SHOP_UNLOCKED" }, - { RAND_INF_MASK_SHOP_KEY_OBTAINED, "RAND_INF_MASK_SHOP_KEY_OBTAINED" }, - { RAND_INF_MARKET_SHOOTING_GALLERY_UNLOCKED, "RAND_INF_MARKET_SHOOTING_GALLERY_UNLOCKED" }, - { RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED, "RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED" }, - { RAND_INF_BOMBCHU_BOWLING_UNLOCKED, "RAND_INF_BOMBCHU_BOWLING_UNLOCKED" }, - { RAND_INF_BOMBCHU_BOWLING_KEY_OBTAINED, "RAND_INF_BOMBCHU_BOWLING_KEY_OBTAINED" }, - { RAND_INF_TREASURE_CHEST_GAME_BUILDING_UNLOCKED, "RAND_INF_TREASURE_CHEST_GAME_BUILDING_UNLOCKED" }, - { RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED, "RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED" }, - { RAND_INF_BOMBCHU_SHOP_UNLOCKED, "RAND_INF_BOMBCHU_SHOP_UNLOCKED" }, - { RAND_INF_BOMBCHU_SHOP_KEY_OBTAINED, "RAND_INF_BOMBCHU_SHOP_KEY_OBTAINED" }, - { RAND_INF_RICHARDS_HOUSE_UNLOCKED, "RAND_INF_RICHARDS_HOUSE_UNLOCKED" }, - { RAND_INF_RICHARDS_HOUSE_KEY_OBTAINED, "RAND_INF_RICHARDS_HOUSE_KEY_OBTAINED" }, - { RAND_INF_ALLEY_HOUSE_UNLOCKED, "RAND_INF_ALLEY_HOUSE_UNLOCKED" }, - { RAND_INF_ALLEY_HOUSE_KEY_OBTAINED, "RAND_INF_ALLEY_HOUSE_KEY_OBTAINED" }, - { RAND_INF_KAK_BAZAAR_UNLOCKED, "RAND_INF_KAK_BAZAAR_UNLOCKED" }, - { RAND_INF_KAK_BAZAAR_KEY_OBTAINED, "RAND_INF_KAK_BAZAAR_KEY_OBTAINED" }, - { RAND_INF_KAK_POTION_SHOP_UNLOCKED, "RAND_INF_KAK_POTION_SHOP_UNLOCKED" }, - { RAND_INF_KAK_POTION_SHOP_KEY_OBTAINED, "RAND_INF_KAK_POTION_SHOP_KEY_OBTAINED" }, - { RAND_INF_BOSS_HOUSE_UNLOCKED, "RAND_INF_BOSS_HOUSE_UNLOCKED" }, - { RAND_INF_BOSS_HOUSE_KEY_OBTAINED, "RAND_INF_BOSS_HOUSE_KEY_OBTAINED" }, - { RAND_INF_GRANNYS_POTION_SHOP_UNLOCKED, "RAND_INF_GRANNYS_POTION_SHOP_UNLOCKED" }, - { RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED, "RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED" }, - { RAND_INF_SKULLTULA_HOUSE_UNLOCKED, "RAND_INF_SKULLTULA_HOUSE_UNLOCKED" }, - { RAND_INF_SKULLTULA_HOUSE_KEY_OBTAINED, "RAND_INF_SKULLTULA_HOUSE_KEY_OBTAINED" }, - { RAND_INF_IMPAS_HOUSE_UNLOCKED, "RAND_INF_IMPAS_HOUSE_UNLOCKED" }, - { RAND_INF_IMPAS_HOUSE_KEY_OBTAINED, "RAND_INF_IMPAS_HOUSE_KEY_OBTAINED" }, - { RAND_INF_WINDMILL_UNLOCKED, "RAND_INF_WINDMILL_UNLOCKED" }, - { RAND_INF_WINDMILL_KEY_OBTAINED, "RAND_INF_WINDMILL_KEY_OBTAINED" }, - { RAND_INF_KAK_SHOOTING_GALLERY_UNLOCKED, "RAND_INF_KAK_SHOOTING_GALLERY_UNLOCKED" }, - { RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED, "RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED" }, - { RAND_INF_DAMPES_HUT_UNLOCKED, "RAND_INF_DAMPES_HUT_UNLOCKED" }, - { RAND_INF_DAMPES_HUT_KEY_OBTAINED, "RAND_INF_DAMPES_HUT_KEY_OBTAINED" }, - { RAND_INF_TALONS_HOUSE_UNLOCKED, "RAND_INF_TALONS_HOUSE_UNLOCKED" }, - { RAND_INF_TALONS_HOUSE_KEY_OBTAINED, "RAND_INF_TALONS_HOUSE_KEY_OBTAINED" }, - { RAND_INF_STABLES_UNLOCKED, "RAND_INF_STABLES_UNLOCKED" }, - { RAND_INF_STABLES_KEY_OBTAINED, "RAND_INF_STABLES_KEY_OBTAINED" }, - { RAND_INF_BACK_TOWER_UNLOCKED, "RAND_INF_BACK_TOWER_UNLOCKED" }, - { RAND_INF_BACK_TOWER_KEY_OBTAINED, "RAND_INF_BACK_TOWER_KEY_OBTAINED" }, - { RAND_INF_HYLIA_LAB_UNLOCKED, "RAND_INF_HYLIA_LAB_UNLOCKED" }, - { 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_ZR_BEAN_SPROUT_FAIRY_1, "RAND_INF_ZR_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_ZR_BEAN_SPROUT_FAIRY_2, "RAND_INF_ZR_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_ZR_BEAN_SPROUT_FAIRY_3, "RAND_INF_ZR_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_KF_BEAN_SPROUT_FAIRY_1, "RAND_INF_KF_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_KF_BEAN_SPROUT_FAIRY_2, "RAND_INF_KF_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_KF_BEAN_SPROUT_FAIRY_3, "RAND_INF_KF_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, "RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, "RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, "RAND_INF_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, "RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, "RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2" }, + { RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, "RAND_INF_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3" }, + { RAND_INF_LH_BEAN_SPROUT_FAIRY_1, "RAND_INF_LH_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_LH_BEAN_SPROUT_FAIRY_2, "RAND_INF_LH_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_LH_BEAN_SPROUT_FAIRY_3, "RAND_INF_LH_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_GV_BEAN_SPROUT_FAIRY_1, "RAND_INF_GV_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_GV_BEAN_SPROUT_FAIRY_2, "RAND_INF_GV_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_GV_BEAN_SPROUT_FAIRY_3, "RAND_INF_GV_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1, "RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2, "RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3, "RAND_INF_COLOSSUS_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1, "RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2, "RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3, "RAND_INF_GRAVEYARD_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_DMC_BEAN_SPROUT_FAIRY_1, "RAND_INF_DMC_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_DMC_BEAN_SPROUT_FAIRY_2, "RAND_INF_DMC_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_DMC_BEAN_SPROUT_FAIRY_3, "RAND_INF_DMC_BEAN_SPROUT_FAIRY_3" }, + { RAND_INF_DMT_BEAN_SPROUT_FAIRY_1, "RAND_INF_DMT_BEAN_SPROUT_FAIRY_1" }, + { RAND_INF_DMT_BEAN_SPROUT_FAIRY_2, "RAND_INF_DMT_BEAN_SPROUT_FAIRY_2" }, + { RAND_INF_DMT_BEAN_SPROUT_FAIRY_3, "RAND_INF_DMT_BEAN_SPROUT_FAIRY_3" }, - { 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_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY" }, + { RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY" }, + { RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY" }, + { RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, "RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY" }, + { RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DMC_GOSSIP_STONE_FAIRY, "RAND_INF_DMC_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMC_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DMT_GOSSIP_STONE_FAIRY, "RAND_INF_DMT_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMT_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY, "RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY" }, + { RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_COLOSSUS_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, "RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, "RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_GV_GOSSIP_STONE_FAIRY, "RAND_INF_GV_GOSSIP_STONE_FAIRY" }, + { RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GV_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY, "RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY" }, + { RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GC_MAZE_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY, "RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY" }, + { RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY, "RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY" }, + { RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY, "RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HC_MALON_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, "RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, "RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, "RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KF_GOSSIP_STONE_FAIRY, "RAND_INF_KF_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY, "RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LH_LAB_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, "RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, "RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LW_GOSSIP_STONE_FAIRY, "RAND_INF_LW_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_LW_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, "RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY" }, + { RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, "RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY" }, + { RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY, "RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY" }, + { RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZD_GOSSIP_STONE_FAIRY, "RAND_INF_ZD_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZD_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY, "RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY, "RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZF_JABU_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, "RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, "RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, + "RAND_INF_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, + "RAND_INF_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, + "RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, + "RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, + { RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, "RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY" }, + { RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, "RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG" }, - { 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" }, - } }, + { RAND_INF_LH_ISLAND_SUN_FAIRY, "RAND_INF_LH_ISLAND_SUN_FAIRY" }, + { RAND_INF_HF_POND_STORMS_FAIRY, "RAND_INF_HF_POND_STORMS_FAIRY" }, + { RAND_INF_DMT_FLAG_SUN_FAIRY, "RAND_INF_DMT_FLAG_SUN_FAIRY" }, + { RAND_INF_LW_SHORTCUT_STORMS_FAIRY, "RAND_INF_LW_SHORTCUT_STORMS_FAIRY" }, + { RAND_INF_GF_KITCHEN_SUN_FAIRY, "RAND_INF_GF_KITCHEN_SUN_FAIRY" }, + { RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY" }, + { RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_PIT_STORM_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, "RAND_INF_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY" }, + { RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, "RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY" }, + { RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, "RAND_INF_ICE_CAVERN_ENTRANCE_STORMS_FAIRY" }, + { RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, + "RAND_INF_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY" }, + { RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, "RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY" }, + { RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, "RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY" }, + { RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, "RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY" }, + { RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, "RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY" }, + { RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, + "RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY" }, + { RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, "RAND_INF_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY" }, + { RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY" }, + { RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, "RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY" }, + { RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, "RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY" }, + + { RAND_INF_GUARD_HOUSE_UNLOCKED, "RAND_INF_GUARD_HOUSE_UNLOCKED" }, + { RAND_INF_GUARD_HOUSE_KEY_OBTAINED, "RAND_INF_GUARD_HOUSE_KEY_OBTAINED" }, + { RAND_INF_MARKET_BAZAAR_UNLOCKED, "RAND_INF_MARKET_BAZAAR_UNLOCKED" }, + { RAND_INF_MARKET_BAZAAR_KEY_OBTAINED, "RAND_INF_MARKET_BAZAAR_KEY_OBTAINED" }, + { RAND_INF_MARKET_POTION_SHOP_UNLOCKED, "RAND_INF_MARKET_POTION_SHOP_UNLOCKED" }, + { RAND_INF_MARKET_POTION_SHOP_KEY_OBTAINED, "RAND_INF_MARKET_POTION_SHOP_KEY_OBTAINED" }, + { RAND_INF_MASK_SHOP_UNLOCKED, "RAND_INF_MASK_SHOP_UNLOCKED" }, + { RAND_INF_MASK_SHOP_KEY_OBTAINED, "RAND_INF_MASK_SHOP_KEY_OBTAINED" }, + { RAND_INF_MARKET_SHOOTING_GALLERY_UNLOCKED, "RAND_INF_MARKET_SHOOTING_GALLERY_UNLOCKED" }, + { RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED, "RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED" }, + { RAND_INF_BOMBCHU_BOWLING_UNLOCKED, "RAND_INF_BOMBCHU_BOWLING_UNLOCKED" }, + { RAND_INF_BOMBCHU_BOWLING_KEY_OBTAINED, "RAND_INF_BOMBCHU_BOWLING_KEY_OBTAINED" }, + { RAND_INF_TREASURE_CHEST_GAME_BUILDING_UNLOCKED, "RAND_INF_TREASURE_CHEST_GAME_BUILDING_UNLOCKED" }, + { RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED, "RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED" }, + { RAND_INF_BOMBCHU_SHOP_UNLOCKED, "RAND_INF_BOMBCHU_SHOP_UNLOCKED" }, + { RAND_INF_BOMBCHU_SHOP_KEY_OBTAINED, "RAND_INF_BOMBCHU_SHOP_KEY_OBTAINED" }, + { RAND_INF_RICHARDS_HOUSE_UNLOCKED, "RAND_INF_RICHARDS_HOUSE_UNLOCKED" }, + { RAND_INF_RICHARDS_HOUSE_KEY_OBTAINED, "RAND_INF_RICHARDS_HOUSE_KEY_OBTAINED" }, + { RAND_INF_ALLEY_HOUSE_UNLOCKED, "RAND_INF_ALLEY_HOUSE_UNLOCKED" }, + { RAND_INF_ALLEY_HOUSE_KEY_OBTAINED, "RAND_INF_ALLEY_HOUSE_KEY_OBTAINED" }, + { RAND_INF_KAK_BAZAAR_UNLOCKED, "RAND_INF_KAK_BAZAAR_UNLOCKED" }, + { RAND_INF_KAK_BAZAAR_KEY_OBTAINED, "RAND_INF_KAK_BAZAAR_KEY_OBTAINED" }, + { RAND_INF_KAK_POTION_SHOP_UNLOCKED, "RAND_INF_KAK_POTION_SHOP_UNLOCKED" }, + { RAND_INF_KAK_POTION_SHOP_KEY_OBTAINED, "RAND_INF_KAK_POTION_SHOP_KEY_OBTAINED" }, + { RAND_INF_BOSS_HOUSE_UNLOCKED, "RAND_INF_BOSS_HOUSE_UNLOCKED" }, + { RAND_INF_BOSS_HOUSE_KEY_OBTAINED, "RAND_INF_BOSS_HOUSE_KEY_OBTAINED" }, + { RAND_INF_GRANNYS_POTION_SHOP_UNLOCKED, "RAND_INF_GRANNYS_POTION_SHOP_UNLOCKED" }, + { RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED, "RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED" }, + { RAND_INF_SKULLTULA_HOUSE_UNLOCKED, "RAND_INF_SKULLTULA_HOUSE_UNLOCKED" }, + { RAND_INF_SKULLTULA_HOUSE_KEY_OBTAINED, "RAND_INF_SKULLTULA_HOUSE_KEY_OBTAINED" }, + { RAND_INF_IMPAS_HOUSE_UNLOCKED, "RAND_INF_IMPAS_HOUSE_UNLOCKED" }, + { RAND_INF_IMPAS_HOUSE_KEY_OBTAINED, "RAND_INF_IMPAS_HOUSE_KEY_OBTAINED" }, + { RAND_INF_WINDMILL_UNLOCKED, "RAND_INF_WINDMILL_UNLOCKED" }, + { RAND_INF_WINDMILL_KEY_OBTAINED, "RAND_INF_WINDMILL_KEY_OBTAINED" }, + { RAND_INF_KAK_SHOOTING_GALLERY_UNLOCKED, "RAND_INF_KAK_SHOOTING_GALLERY_UNLOCKED" }, + { RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED, "RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED" }, + { RAND_INF_DAMPES_HUT_UNLOCKED, "RAND_INF_DAMPES_HUT_UNLOCKED" }, + { RAND_INF_DAMPES_HUT_KEY_OBTAINED, "RAND_INF_DAMPES_HUT_KEY_OBTAINED" }, + { RAND_INF_TALONS_HOUSE_UNLOCKED, "RAND_INF_TALONS_HOUSE_UNLOCKED" }, + { RAND_INF_TALONS_HOUSE_KEY_OBTAINED, "RAND_INF_TALONS_HOUSE_KEY_OBTAINED" }, + { RAND_INF_STABLES_UNLOCKED, "RAND_INF_STABLES_UNLOCKED" }, + { RAND_INF_STABLES_KEY_OBTAINED, "RAND_INF_STABLES_KEY_OBTAINED" }, + { RAND_INF_BACK_TOWER_UNLOCKED, "RAND_INF_BACK_TOWER_UNLOCKED" }, + { RAND_INF_BACK_TOWER_KEY_OBTAINED, "RAND_INF_BACK_TOWER_KEY_OBTAINED" }, + { RAND_INF_HYLIA_LAB_UNLOCKED, "RAND_INF_HYLIA_LAB_UNLOCKED" }, + { 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" }, + } }, }; const std::vector state1 = { @@ -1658,8 +1720,8 @@ const std::vector state1 = { "In Water", "In Item Cutscene", "In Cutscene", - "30", //Unknown - "Floor collision disabled" + "30", // Unknown + "Floor collision disabled", }; const std::vector state2 = { @@ -1694,7 +1756,7 @@ const std::vector state2 = { "Idling", "Disabled draw func", "Sword Lunge", - "Void out" + "Void out", }; const std::vector state3 = { @@ -1705,7 +1767,7 @@ const std::vector state3 = { "Check Floor Water Collision", "Force Pull Ocarina", "Restore Nayru's Love", - "Travelling to Hook Target" + "Travelling to Hook Target", }; class SaveEditorWindow : public Ship::GuiWindow { @@ -1714,5 +1776,5 @@ class SaveEditorWindow : public Ship::GuiWindow { void InitElement() override; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; diff --git a/soh/soh/Enhancements/debugger/dlViewer.cpp b/soh/soh/Enhancements/debugger/dlViewer.cpp index a591cf948..7cedcdf26 100644 --- a/soh/soh/Enhancements/debugger/dlViewer.cpp +++ b/soh/soh/Enhancements/debugger/dlViewer.cpp @@ -66,7 +66,8 @@ std::map cmdMap = { }; void PerformDisplayListSearch() { - auto result = Ship::Context::GetInstance()->GetResourceManager()->GetArchiveManager()->ListFiles("*" + std::string(searchString) + "*DL*"); + auto result = Ship::Context::GetInstance()->GetResourceManager()->GetArchiveManager()->ListFiles( + "*" + std::string(searchString) + "*DL*"); displayListSearchResults.clear(); @@ -79,20 +80,19 @@ void PerformDisplayListSearch() { } // Sort the final list - std::sort(displayListSearchResults.begin(), displayListSearchResults.end(), [](const std::string& a, const std::string& b) { - return std::lexicographical_compare( - a.begin(), a.end(), - b.begin(), b.end(), - [](char c1, char c2) { - return std::tolower(c1) < std::tolower(c2); - } - ); - }); + std::sort(displayListSearchResults.begin(), displayListSearchResults.end(), + [](const std::string& a, const std::string& b) { + return std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end(), [](char c1, char c2) { + return std::tolower(c1) < std::tolower(c2); + }); + }); } void DLViewerWindow::DrawElement() { // Debounce the search field as listing otr files is expensive UIWidgets::PushStyleInput(THEME_COLOR); + ImGui::PushFont(OTRGlobals::Instance->fontMonoLarger); + if (ImGui::InputText("Search Display Lists", searchString, ARRAY_COUNT(searchString))) { doSearch = true; searchDebounceFrames = 30; @@ -121,11 +121,13 @@ void DLViewerWindow::DrawElement() { UIWidgets::PopStyleCombobox(); if (activeDisplayList == "") { + ImGui::PopFont(); return; } try { - auto res = std::static_pointer_cast(Ship::Context::GetInstance()->GetResourceManager()->LoadResource(activeDisplayList)); + auto res = std::static_pointer_cast( + Ship::Context::GetInstance()->GetResourceManager()->LoadResource(activeDisplayList)); if (res->GetInitData()->Type != static_cast(Fast::ResourceType::DisplayList)) { ImGui::Text("Resource type is not a Display List. Please choose another."); @@ -138,7 +140,8 @@ void DLViewerWindow::DrawElement() { std::string id = "##CMD" + std::to_string(i); Gfx* gfx = (Gfx*)&res->Instructions[i]; int cmd = gfx->words.w0 >> 24; - if (cmdMap.find(cmd) == cmdMap.end()) continue; + if (cmdMap.find(cmd) == cmdMap.end()) + continue; std::string cmdLabel = cmdMap.at(cmd); @@ -196,14 +199,13 @@ void DLViewerWindow::DrawElement() { } ImGui::PopItemWidth(); } - if (cmd == G_RDPPIPESYNC) { - } + if (cmd == G_RDPPIPESYNC) {} if (cmd == G_SETGRAYSCALE) { bool* state = (bool*)&gfx->words.w1; ImGui::SameLine(); UIWidgets::PushStyleCheckbox(THEME_COLOR); if (ImGui::Checkbox(("state" + id).c_str(), state)) { - // + // } UIWidgets::PopStyleCheckbox(); } @@ -301,8 +303,7 @@ void DLViewerWindow::DrawElement() { ImGui::SameLine(); ImGui::Text("Vertex Name: %s", fileName); } - if (cmd == G_DL) { - } + if (cmd == G_DL) {} if (cmd == G_DL_OTR_HASH) { gfx++; uint64_t hash = ((uint64_t)gfx->words.w0 << 32) + (uint64_t)gfx->words.w1; @@ -317,8 +318,8 @@ void DLViewerWindow::DrawElement() { } // Skip second half of instructions that are over 128-bit wide - if (cmd == G_SETTIMG_OTR_HASH || cmd == G_DL_OTR_HASH || cmd == G_VTX_OTR_HASH || - cmd == G_BRANCH_Z_OTR || cmd == G_MARKER || cmd == G_MTX_OTR) { + if (cmd == G_SETTIMG_OTR_HASH || cmd == G_DL_OTR_HASH || cmd == G_VTX_OTR_HASH || cmd == G_BRANCH_Z_OTR || + cmd == G_MARKER || cmd == G_MTX_OTR) { i++; ImGui::Text("%lu - Reserved - Second half of %s", i, cmdLabel.c_str()); } @@ -326,8 +327,11 @@ void DLViewerWindow::DrawElement() { } } catch (const std::exception& e) { ImGui::Text("Error displaying DL instructions."); + ImGui::PopFont(); return; } + + ImGui::PopFont(); } void DLViewerWindow::InitElement() { diff --git a/soh/soh/Enhancements/debugger/dlViewer.h b/soh/soh/Enhancements/debugger/dlViewer.h index 9d2785456..3655c8964 100644 --- a/soh/soh/Enhancements/debugger/dlViewer.h +++ b/soh/soh/Enhancements/debugger/dlViewer.h @@ -8,5 +8,5 @@ class DLViewerWindow : public Ship::GuiWindow { void InitElement() override; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; diff --git a/soh/soh/Enhancements/debugger/hookDebugger.cpp b/soh/soh/Enhancements/debugger/hookDebugger.cpp index a9d6ca891..113862282 100644 --- a/soh/soh/Enhancements/debugger/hookDebugger.cpp +++ b/soh/soh/Enhancements/debugger/hookDebugger.cpp @@ -1,6 +1,7 @@ #include "hookDebugger.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" #include "soh/SohGui/UIWidgets.hpp" +#include "soh/OTRGlobals.h" #include #include @@ -82,12 +83,16 @@ void HookDebuggerWindow::DrawElement() { "(\"__cpp_lib_source_location\" not defined in \"\")."); #endif + ImGui::PushFont(OTRGlobals::Instance->fontMonoLarger); + for (auto& [hookName, _] : hookData) { if (ImGui::TreeNode(hookName)) { DrawHookRegisteringInfos(hookName); ImGui::TreePop(); } } + + ImGui::PopFont(); } void HookDebuggerWindow::InitElement() { diff --git a/soh/soh/Enhancements/debugger/hookDebugger.h b/soh/soh/Enhancements/debugger/hookDebugger.h index ae6f5113f..4d5c776db 100644 --- a/soh/soh/Enhancements/debugger/hookDebugger.h +++ b/soh/soh/Enhancements/debugger/hookDebugger.h @@ -6,5 +6,5 @@ class HookDebuggerWindow : public Ship::GuiWindow { void InitElement() override; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; diff --git a/soh/soh/Enhancements/debugger/performanceTimer.cpp b/soh/soh/Enhancements/debugger/performanceTimer.cpp index 69ffc6925..43999e7bc 100644 --- a/soh/soh/Enhancements/debugger/performanceTimer.cpp +++ b/soh/soh/Enhancements/debugger/performanceTimer.cpp @@ -1,17 +1,21 @@ #include "performanceTimer.h" -void StartPerformanceTimer(TimerID timer){ +void StartPerformanceTimer(TimerID timer) { timeStarted[timer] = std::chrono::high_resolution_clock::now(); } -void StopPerformanceTimer(TimerID timer){ +void StopPerformanceTimer(TimerID timer) { totalTimes[timer] += (std::chrono::high_resolution_clock::now() - timeStarted[timer]); } -std::chrono::duration GetPerformanceTimer(TimerID timer){ +std::chrono::duration GetPerformanceTimer(TimerID timer) { return totalTimes[timer]; } -void ResetPerformanceTimers(){ +void ResetPerformanceTimer(TimerID timer) { + totalTimes[timer] = {}; +} + +void ResetPerformanceTimers() { totalTimes = {}; } \ No newline at end of file diff --git a/soh/soh/Enhancements/debugger/performanceTimer.h b/soh/soh/Enhancements/debugger/performanceTimer.h index f4bc8f017..6bff229a3 100644 --- a/soh/soh/Enhancements/debugger/performanceTimer.h +++ b/soh/soh/Enhancements/debugger/performanceTimer.h @@ -5,33 +5,34 @@ #include typedef enum { - PT_WHOLE_SEED, - PT_LOGIC_RESET, - PT_REGION_RESET, - PT_SPOILER_LOG, - PT_ENTRANCE_SHUFFLE, - PT_SHOPSANITY, - PT_OWN_DUNGEON, - PT_LIMITED_CHECKS, - PT_ADVANCEMENT_ITEMS, - PT_REMAINING_ITEMS, - PT_PLAYTHROUGH_GENERATION, - PT_PARE_DOWN_PLAYTHROUGH, - PT_WOTH, - PT_FOOLISH, - PT_OVERRIDES, - PT_HINTS, - PT_EVENT_ACCESS, - PT_TOD_ACCESS, - PT_ENTRANCE_LOGIC, - PT_LOCATION_LOGIC, - PT_MAX + PT_WHOLE_SEED, + PT_LOGIC_RESET, + PT_REGION_RESET, + PT_SPOILER_LOG, + PT_ENTRANCE_SHUFFLE, + PT_SHOPSANITY, + PT_OWN_DUNGEON, + PT_LIMITED_CHECKS, + PT_ADVANCEMENT_ITEMS, + PT_REMAINING_ITEMS, + PT_PLAYTHROUGH_GENERATION, + PT_PARE_DOWN_PLAYTHROUGH, + PT_WOTH, + PT_FOOLISH, + PT_OVERRIDES, + PT_HINTS, + PT_EVENT_ACCESS, + PT_TOD_ACCESS, + PT_ENTRANCE_LOGIC, + PT_LOCATION_LOGIC, + PT_RECALCULATE_AVAILABLE_CHECKS, + PT_MAX } TimerID; void StartPerformanceTimer(TimerID timer); void StopPerformanceTimer(TimerID timer); std::chrono::duration GetPerformanceTimer(TimerID timer); +void ResetPerformanceTimer(TimerID timer); void ResetPerformanceTimers(); static std::array, PT_MAX> totalTimes = {}; static std::array timeStarted = {}; - diff --git a/soh/soh/Enhancements/debugger/valueViewer.cpp b/soh/soh/Enhancements/debugger/valueViewer.cpp index 23ce4e26c..1ea117444 100644 --- a/soh/soh/Enhancements/debugger/valueViewer.cpp +++ b/soh/soh/Enhancements/debugger/valueViewer.cpp @@ -22,6 +22,7 @@ s32 GfxPrint_Printf(GfxPrint* printer, const char* fmt, ...); ImVec4 WHITE = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); +// clang-format off std::vector valueTable = { { "Time", "gSaveContext.dayTime", "TIME:", TYPE_U16, false, []() -> void* { return &gSaveContext.dayTime; }, WHITE }, { "Age", "gSaveContext.linkAge", "AGE:", TYPE_S32, false, []() -> void* { return &gSaveContext.linkAge; }, WHITE }, @@ -71,31 +72,40 @@ std::vector valueTable = { "Deku Tree Warp Timer" u16 0x801F83A2 */ }; +// clang-format on extern "C" void ValueViewer_Draw(GfxPrint* printer) { for (int i = 0; i < valueTable.size(); i++) { ValueTableElement& element = valueTable[i]; - if (!element.isActive || !element.isPrinted || (gPlayState == NULL && element.requiresPlayState)) continue; - GfxPrint_SetColor(printer, element.color.x * 255, element.color.y * 255, element.color.z * 255, element.color.w * 255); + if (!element.isActive || !element.isPrinted || (gPlayState == NULL && element.requiresPlayState)) + continue; + GfxPrint_SetColor(printer, element.color.x * 255, element.color.y * 255, element.color.z * 255, + element.color.w * 255); GfxPrint_SetPos(printer, element.x, element.y); switch (element.type) { case TYPE_S8: - GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%d"), element.prefix.c_str(), *(s8*)element.valueFn()); + GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%d"), element.prefix.c_str(), + *(s8*)element.valueFn()); break; case TYPE_U8: - GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%u"), element.prefix.c_str(), *(u8*)element.valueFn()); + GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%u"), element.prefix.c_str(), + *(u8*)element.valueFn()); break; case TYPE_S16: - GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%d"), element.prefix.c_str(), *(s16*)element.valueFn()); + GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%d"), element.prefix.c_str(), + *(s16*)element.valueFn()); break; case TYPE_U16: - GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%u"), element.prefix.c_str(), *(u16*)element.valueFn()); + GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%u"), element.prefix.c_str(), + *(u16*)element.valueFn()); break; case TYPE_S32: - GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%d"), element.prefix.c_str(), *(s32*)element.valueFn()); + GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%d"), element.prefix.c_str(), + *(s32*)element.valueFn()); break; case TYPE_U32: - GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%u"), element.prefix.c_str(), *(u32*)element.valueFn()); + GfxPrint_Printf(printer, (element.typeFormat ? "%s0x%x" : "%s%u"), element.prefix.c_str(), + *(u32*)element.valueFn()); break; case TYPE_CHAR: GfxPrint_Printf(printer, "%s%c", element.prefix.c_str(), *(char*)element.valueFn()); @@ -104,7 +114,8 @@ extern "C" void ValueViewer_Draw(GfxPrint* printer) { GfxPrint_Printf(printer, "%s%s", element.prefix.c_str(), (char*)element.valueFn()); break; case TYPE_FLOAT: - GfxPrint_Printf(printer, (element.typeFormat ? "%s%4.1f" : "%s%f"), element.prefix.c_str(), *(float*)element.valueFn()); + GfxPrint_Printf(printer, (element.typeFormat ? "%s%4.1f" : "%s%f"), element.prefix.c_str(), + *(float*)element.valueFn()); break; } } @@ -147,17 +158,16 @@ void ValueViewerWindow::DrawElement() { ImGui::BeginGroup(); static int selectedElement = -1; - std::string selectedElementText = (selectedElement == -1) ? "Select a value" : ( - std::string(valueTable[selectedElement].name) + " (" + std::string(valueTable[selectedElement].path) + ")" - ); + std::string selectedElementText = (selectedElement == -1) ? "Select a value" + : (std::string(valueTable[selectedElement].name) + " (" + + std::string(valueTable[selectedElement].path) + ")"); UIWidgets::PushStyleCombobox(THEME_COLOR); if (ImGui::BeginCombo("##valueViewerElement", selectedElementText.c_str())) { for (int i = 0; i < valueTable.size(); i++) { - if (valueTable[i].isActive) continue; + if (valueTable[i].isActive) + continue; bool isSelected = (selectedElement == i); - std::string elementText = ( - std::string(valueTable[i].name) + " (" + std::string(valueTable[i].path) + ")" - ); + std::string elementText = (std::string(valueTable[i].name) + " (" + std::string(valueTable[i].path) + ")"); if (ImGui::Selectable(elementText.c_str(), isSelected)) { selectedElement = i; } @@ -179,7 +189,8 @@ void ValueViewerWindow::DrawElement() { for (int i = 0; i < valueTable.size(); i++) { ValueTableElement& element = valueTable[i]; - if (!element.isActive || (gPlayState == NULL && element.requiresPlayState)) continue; + if (!element.isActive || (gPlayState == NULL && element.requiresPlayState)) + continue; UIWidgets::PushStyleButton(THEME_COLOR); UIWidgets::PushStyleCheckbox(THEME_COLOR); ImGui::AlignTextToFramePadding(); @@ -247,7 +258,8 @@ void ValueViewerWindow::DrawElement() { } UIWidgets::PopStyleInput(); ImGui::SameLine(); - ImGui::ColorEdit3(("##color" + std::string(element.name)).c_str(), (float*)&element.color, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel); + ImGui::ColorEdit3(("##color" + std::string(element.name)).c_str(), (float*)&element.color, + ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel); ImGui::SameLine(); UIWidgets::PushStyleCheckbox(THEME_COLOR); if (ImGui::Button(("Position##" + std::string(element.name)).c_str())) { diff --git a/soh/soh/Enhancements/debugger/valueViewer.h b/soh/soh/Enhancements/debugger/valueViewer.h index e93491fa5..c5e51a126 100644 --- a/soh/soh/Enhancements/debugger/valueViewer.h +++ b/soh/soh/Enhancements/debugger/valueViewer.h @@ -39,7 +39,7 @@ class ValueViewerWindow : public Ship::GuiWindow { void InitElement() override; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; #endif diff --git a/soh/soh/Enhancements/enemyrandomizer.cpp b/soh/soh/Enhancements/enemyrandomizer.cpp index e638d04ad..611131584 100644 --- a/soh/soh/Enhancements/enemyrandomizer.cpp +++ b/soh/soh/Enhancements/enemyrandomizer.cpp @@ -42,18 +42,54 @@ const char* enemyCVarList[] = { }; const char* enemyNameList[] = { - "Armos", "Arwing", "Baby Dodongo", "Bari", - "Beamos", "Big Skulltula", "Stalchild (Big)", "Biri", - "Iron Knuckle (Black)", "Blue Tektite", "Bubble", "Club Moblin", - "Dark Link", "Dinolfos", "Dodongo", "Fire Keese", - "Floor Tile", "Floormaster", "Flying Peahat", "Flying Pot", - "Freezard", "Gibdo", "Gohma Larva", "Guay", - "Ice Keese", "Invisible Skulltula", "Keese", "Large Deku Baba", - "Like-Like", "Lizalfos", "Mad Scrub", "Wolfos (Normal)", - "Peahat Larva", "Redead", "Red Tektite", "Shabom", - "ShellBlade", "Skulltula", "Small Deku Baba", "Stalchild (Small)", - "Spike", "Stalfos", "Stinger", "Tailparasan", - "Torch Slug", "Wallmaster", "Iron Knuckle (White)", "Wolfos (White)", + "Armos", + "Arwing", + "Baby Dodongo", + "Bari", + "Beamos", + "Big Skulltula", + "Stalchild (Big)", + "Biri", + "Iron Knuckle (Black)", + "Blue Tektite", + "Bubble", + "Club Moblin", + "Dark Link", + "Dinolfos", + "Dodongo", + "Fire Keese", + "Floor Tile", + "Floormaster", + "Flying Peahat", + "Flying Pot", + "Freezard", + "Gibdo", + "Gohma Larva", + "Guay", + "Ice Keese", + "Invisible Skulltula", + "Keese", + "Large Deku Baba", + "Like-Like", + "Lizalfos", + "Mad Scrub", + "Wolfos (Normal)", + "Peahat Larva", + "Redead", + "Red Tektite", + "Shabom", + "Shell Blade", + "Skulltula", + "Small Deku Baba", + "Stalchild (Small)", + "Spike", + "Stalfos", + "Stinger", + "Tailpasaran", + "Torch Slug", + "Wallmaster", + "Iron Knuckle (White)", + "Wolfos (White)", "Withered Deku Baba", }; @@ -80,7 +116,7 @@ static EnemyEntry randomizedEnemySpawnTable[RANDOMIZED_ENEMY_SPAWN_TABLE_SIZE] = { ACTOR_EN_TUBO_TRAP, 0 }, // Flying pot { ACTOR_EN_FZ, 0 }, // Freezard { ACTOR_EN_RD, 32766 }, // Gibdo (standing) - { ACTOR_EN_GOMA, 7 }, // Gohma larva (non-gohma rooms) + { ACTOR_EN_GOMA, 7 }, // Gohma Larva (Non-Gohma rooms) { ACTOR_EN_CROW, 0 }, // Guay { ACTOR_EN_FIREFLY, 4 }, // Ice Keese { ACTOR_EN_ST, 2 }, // Skulltula (invisible) @@ -102,7 +138,7 @@ static EnemyEntry randomizedEnemySpawnTable[RANDOMIZED_ENEMY_SPAWN_TABLE_SIZE] = { ACTOR_EN_NY, 0 }, // Spike (rolling enemy) { ACTOR_EN_TEST, 2 }, // Stalfos { ACTOR_EN_EIYER, 10 }, // Stinger (land) (One in formation, sink under floor and do not activate) - { ACTOR_EN_TP, -1 }, // Electric Tailparasan + { ACTOR_EN_TP, -1 }, // Electric Tailpasaran { ACTOR_EN_BW, 0 }, // Torch Slug { ACTOR_EN_WALLMAS, 1 }, // Wallmaster { ACTOR_EN_WF, 1 }, // Wolfos (white) @@ -111,43 +147,45 @@ static EnemyEntry randomizedEnemySpawnTable[RANDOMIZED_ENEMY_SPAWN_TABLE_SIZE] = // Doesn't work {ACTOR_EN_POH, 0}, // Poe (Seems to rely on other objects?) // Doesn't work {ACTOR_EN_POH, 2}, // Poe (composer Sharp) (Seems to rely on other objects?) // Doesn't work {ACTOR_EN_POH, 3}, // Poe (composer Flat) (Seems to rely on other objects?) - // Doesn't work {ACTOR_EN_OKUTA, 0}, // Octorok (actor directly uses water box collision to handle hiding/popping up) - // Doesn't work {ACTOR_EN_REEBA, 0}, // Leever (reliant on surface and also normally used in tandem with a leever spawner, kills itself too quickly otherwise) - // Kinda doesn't work { ACTOR_EN_FD, 0 }, // Flare Dancer (jumps out of bounds a lot, and possible cause of crashes because of spawning a ton of flame actors) + // Doesn't work {ACTOR_EN_OKUTA, 0}, // Octorok (actor directly uses water box collision to handle hiding/popping + // up) Doesn't work {ACTOR_EN_REEBA, 0}, // Leever (reliant on surface and also normally used in tandem with a + // leever spawner, kills itself too quickly otherwise) Kinda doesn't work { ACTOR_EN_FD, 0 }, // Flare Dancer (jumps + // out of bounds a lot, and possible cause of crashes because of spawning a ton of flame actors) }; static int enemiesToRandomize[] = { - ACTOR_EN_FIREFLY, // Keese (including fire/ice) - ACTOR_EN_TEST, // Stalfos - ACTOR_EN_TITE, // Tektite - ACTOR_EN_POH, // Poe (normal, blue rupee, composers - ACTOR_EN_OKUTA, // Octorok - ACTOR_EN_WALLMAS, // Wallmaster - ACTOR_EN_DODONGO, // Dodongo + ACTOR_EN_FIREFLY, // Keese (including fire/ice) + ACTOR_EN_TEST, // Stalfos + ACTOR_EN_TITE, // Tektite + ACTOR_EN_POH, // Poe (normal, blue rupee, composers) + ACTOR_EN_OKUTA, // Octorok + ACTOR_EN_WALLMAS, // Wallmaster + ACTOR_EN_DODONGO, // Dodongo // ACTOR_EN_REEBA, // Leever (reliant on spawner (z_e_encount1.c) - ACTOR_EN_PEEHAT, // Flying Peahat, big one spawning larva, larva - ACTOR_EN_ZF, // Lizalfos, dinolfos - ACTOR_EN_GOMA, // Gohma larva (normal, eggs, gohma eggs) - ACTOR_EN_BUBBLE, // Shabom (bubble) - ACTOR_EN_DODOJR, // Baby Dodongo - ACTOR_EN_TORCH2, // Dark Link - ACTOR_EN_BILI, // Biri (small jellyfish) - ACTOR_EN_TP, // Electric Tailparasan - ACTOR_EN_ST, // Skulltula (normal, big, invisible) - ACTOR_EN_BW, // Torch Slug - ACTOR_EN_EIYER, // Stinger (land) - ACTOR_EN_MB, // Moblins (Club, spear) - ACTOR_EN_DEKUBABA, // Deku Baba (small, large) - ACTOR_EN_AM, // Armos (enemy variant) - ACTOR_EN_DEKUNUTS, // Mad Scrub (single attack, triple attack) - ACTOR_EN_VALI, // Bari (big jellyfish) (spawns very high up) - ACTOR_EN_BB, // Bubble (flying skull enemy) (all colors) - ACTOR_EN_YUKABYUN, // Flying Floor Tile - ACTOR_EN_VM, // Beamos - ACTOR_EN_FLOORMAS, // Floormaster - ACTOR_EN_RD, // Redead, Gibdo - ACTOR_EN_SW, // Skullwalltula - // ACTOR_EN_FD, // Flare Dancer (can be randomized, but not randomized to, so keeping it in vanilla locations means it atleast shows up in the game + ACTOR_EN_PEEHAT, // Flying Peahat, big one spawning larva, larva + ACTOR_EN_ZF, // Lizalfos, Dinolfos + ACTOR_EN_GOMA, // Gohma Larva (normal, eggs, gohma eggs) + ACTOR_EN_BUBBLE, // Shabom (bubble) + ACTOR_EN_DODOJR, // Baby Dodongo + ACTOR_EN_TORCH2, // Dark Link + ACTOR_EN_BILI, // Biri (small jellyfish) + ACTOR_EN_TP, // Electric Tailpasaran + ACTOR_EN_ST, // Skulltula (normal, big, invisible) + ACTOR_EN_BW, // Torch Slug + ACTOR_EN_EIYER, // Stinger (land) + ACTOR_EN_MB, // Moblins (Club, spear) + ACTOR_EN_DEKUBABA, // Deku Baba (small, large) + ACTOR_EN_AM, // Armos (enemy variant) + ACTOR_EN_DEKUNUTS, // Mad Scrub (single attack, triple attack) + ACTOR_EN_VALI, // Bari (big jellyfish) (spawns very high up) + ACTOR_EN_BB, // Bubble (flying skull enemy) (all colors) + ACTOR_EN_YUKABYUN, // Flying Floor Tile + ACTOR_EN_VM, // Beamos + ACTOR_EN_FLOORMAS, // Floormaster + ACTOR_EN_RD, // Redead, Gibdo + ACTOR_EN_SW, // Skullwalltula + // ACTOR_EN_FD, // Flare Dancer (can be randomized, but not randomized to, so keeping it in vanilla locations + // means it at least shows up in the game) ACTOR_EN_SB, // Shell Blade ACTOR_EN_KAREBABA, // Withered Deku Baba ACTOR_EN_RR, // Like-Like @@ -156,22 +194,23 @@ static int enemiesToRandomize[] = { ACTOR_EN_TUBO_TRAP, // Flying pot ACTOR_EN_FZ, // Freezard ACTOR_EN_WEIYER, // Stinger (Water) - ACTOR_EN_HINTNUTS, // Hint deku scrubs + ACTOR_EN_HINTNUTS, // Hint Deku Scrubs ACTOR_EN_WF, // Wolfos ACTOR_EN_SKB, // Stalchild - ACTOR_EN_CROW // Guay + ACTOR_EN_CROW, // Guay }; -extern "C" uint8_t GetRandomizedEnemy(PlayState* play, int16_t *actorId, f32 *posX, f32 *posY, f32 *posZ, int16_t *rotX, - int16_t *rotY, int16_t *rotZ, int16_t *params) { +extern "C" uint8_t GetRandomizedEnemy(PlayState* play, int16_t* actorId, f32* posX, f32* posY, f32* posZ, int16_t* rotX, + int16_t* rotY, int16_t* rotZ, int16_t* params) { uint32_t isMQ = ResourceMgr_IsSceneMasterQuest(play->sceneNum); // Hack to remove enemies that wrongfully spawn because of bypassing object dependency with enemy randomizer on. // This should probably be handled on OTR generation in the future when object dependency is fully removed. - // Remove bats and skulltulas from graveyard. - // Remove octorok in lost woods. - if (((*actorId == ACTOR_EN_FIREFLY || (*actorId == ACTOR_EN_SW && *params == 0)) && play->sceneNum == SCENE_GRAVEYARD) || + // Remove bats and Skulltulas from graveyard. + // Remove Octorok in Lost Woods. + if (((*actorId == ACTOR_EN_FIREFLY || (*actorId == ACTOR_EN_SW && *params == 0)) && + play->sceneNum == SCENE_GRAVEYARD) || (*actorId == ACTOR_EN_OKUTA && play->sceneNum == SCENE_LOST_WOODS)) { return 0; } @@ -186,7 +225,7 @@ extern "C" uint8_t GetRandomizedEnemy(PlayState* play, int16_t *actorId, f32 *po // Lengthen timer in non-MQ Jabu Jabu bubble room. if (!isMQ && *actorId == ACTOR_OBJ_ROOMTIMER && *params == 30760 && play->sceneNum == SCENE_JABU_JABU && play->roomCtx.curRoom.num == 12) { - *params = 92280; + *params = (*params & ~0x3FF) | 120; } if (IsEnemyFoundToRandomize(play->sceneNum, play->roomCtx.curRoom.num, *actorId, *params, *posX)) { @@ -229,7 +268,8 @@ extern "C" uint8_t GetRandomizedEnemy(PlayState* play, int16_t *actorId, f32 *po } // Get randomized enemy ID and parameter. - uint32_t seed = play->sceneNum + *actorId + (int)*posX + (int)*posY + (int)*posZ + *rotX + *rotY + *rotZ + *params; + uint32_t seed = + play->sceneNum + *actorId + (int)*posX + (int)*posY + (int)*posZ + *rotX + *rotY + *rotZ + *params; EnemyEntry randomEnemy = GetRandomizedEnemyEntry(seed); int8_t timesRandomized = 1; @@ -251,13 +291,13 @@ extern "C" uint8_t GetRandomizedEnemy(PlayState* play, int16_t *actorId, f32 *po case ACTOR_EN_VALI: *posY = *posY + 300; break; - // Spawn peahat off the ground, otherwise it kills itself by colliding with the ground. + // Spawn Peahat off the ground, otherwise it kills itself by colliding with the ground. case ACTOR_EN_PEEHAT: if (*params == 1) { *posY = *posY + 100; } break; - // Spawn skulltulas off the ground. + // Spawn Skulltulas off the ground. case ACTOR_EN_ST: *posY = *posY + 200; break; @@ -305,7 +345,8 @@ EnemyEntry GetRandomizedEnemyEntry(uint32_t seed) { GetSelectedEnemies(); } if (CVarGetInteger(CVAR_ENHANCEMENT("RandomizedEnemies"), ENEMY_RANDOMIZER_OFF) == ENEMY_RANDOMIZER_RANDOM_SEEDED) { - uint32_t finalSeed = seed + (IS_RANDO ? Rando::Context::GetInstance()->GetSeed() : gSaveContext.ship.stats.fileCreatedAt); + uint32_t finalSeed = + seed + (IS_RANDO ? Rando::Context::GetInstance()->GetSeed() : gSaveContext.ship.stats.fileCreatedAt); Random_Init(finalSeed); uint32_t randomNumber = Random(0, RANDOMIZED_ENEMY_SPAWN_TABLE_SIZE); return selectedEnemyList[randomNumber]; @@ -327,14 +368,14 @@ bool IsEnemyFoundToRandomize(int16_t sceneNum, int8_t roomNum, int16_t actorId, // Only randomize the main component of Electric Tailparasans, not the tail segments they spawn. case ACTOR_EN_TP: return (params == -1); - // Only randomize the initial deku scrub actor (single and triple attack), not the flower they spawn. + // Only randomize the initial Deku Scrub actor (single and triple attack), not the flower they spawn. case ACTOR_EN_DEKUNUTS: return (params == -256 || params == 768); - // Don't randomize the OoB wallmaster in the silver rupee room because it's only there to + // Don't randomize the OoB wallmaster in the Silver Rupee room because it's only there to // not trigger unlocking the door after killing the other wallmaster in authentic gameplay. case ACTOR_EN_WALLMAS: return (!(!isMQ && sceneNum == SCENE_GERUDO_TRAINING_GROUND && roomNum == 2 && posX == -2345)); - // Only randomize initial floormaster actor (it can split and does some spawning on init). + // Only randomize initial Floormaster actor (it can split and does some spawning on init). case ACTOR_EN_FLOORMAS: return (params == 0 || params == -32768); // Only randomize the initial eggs, not the enemies that spawn from them. @@ -348,26 +389,28 @@ bool IsEnemyFoundToRandomize(int16_t sceneNum, int8_t roomNum, int16_t actorId, // break the thrones in the room to access a button. case ACTOR_EN_IK: return (params != 1280 && !(isMQ && sceneNum == SCENE_INSIDE_GANONS_CASTLE && roomNum == 17)); - // Only randomize the intitial spawn of the huge jellyfish. It spawns another copy when hit with a sword. + // Only randomize the initial spawn of the huge jellyfish. It spawns another copy when hit with a sword. case ACTOR_EN_VALI: return (params == -1); - // Don't randomize lizalfos in Doodong's Cavern because the gates won't work correctly otherwise. + // Don't randomize Lizalfos in Dodongo's Cavern because the gates won't work correctly otherwise. case ACTOR_EN_ZF: return (params != 1280 && params != 1281 && params != 1536 && params != 1537); // Don't randomize the Wolfos in SFM because it's needed to open the gate. case ACTOR_EN_WF: return (params != 7936); - // Don't randomize the Stalfos in Forest Temple because other enemies fall through the hole and don't trigger the platform. - // Don't randomize the Stalfos spawning on the boat in Shadow Temple, as randomizing them places the new enemies - // down in the river. + // Don't randomize the Stalfos in Forest Temple because other enemies fall through the hole and don't + // trigger the platform. Don't randomize the Stalfos spawning on the boat in Shadow Temple, as + // randomizing them places the new enemies down in the river. case ACTOR_EN_TEST: return (params != 1 && !(sceneNum == SCENE_SHADOW_TEMPLE && roomNum == 21)); // Only randomize the enemy variant of Armos Statue. - // Leave one Armos unrandomized in the Spirit Temple room where an armos is needed to push down a button + // Leave one Armos unrandomized in the Spirit Temple room where an armos is needed to push down a + // button. case ACTOR_EN_AM: return ((params == -1 || params == 255) && !(sceneNum == SCENE_SPIRIT_TEMPLE && posX == 2141)); - // Don't randomize Shell Blades and Spikes in the underwater portion in Water Temple as it's impossible to kill - // most other enemies underwater with just hookshot and they're required to be killed for a grate to open. + // Don't randomize Shell Blades and Spikes in the underwater portion in Water Temple as it's impossible + // to kill most other enemies underwater with just hookshot and they're required to be killed for a + // grate to open. case ACTOR_EN_SB: case ACTOR_EN_NY: return (!(!isMQ && sceneNum == SCENE_WATER_TEMPLE && roomNum == 2)); @@ -385,9 +428,9 @@ bool IsEnemyAllowedToSpawn(int16_t sceneNum, int8_t roomNum, EnemyEntry enemy) { uint32_t isMQ = ResourceMgr_IsSceneMasterQuest(sceneNum); - // Freezard - Child Link can only kill this with jump slash deku sticks or other equipment like bombs. + // Freezard - Child Link can only kill this with jump slash Deku Sticks or other equipment like bombs. // Beamos - Needs bombs. - // Shell Blade & Spike - Child link can't kill these with sword or deku stick. + // Shell Blade & Spike - Child Link can't kill these with sword or Deku Stick. // Arwing & Dark Link - Both go out of bounds way too easily, softlocking the player. // Wallmaster - Not easily visible, often makes players think they're softlocked and that there's no enemies left. // Club Moblin - Many issues with them falling or placing out of bounds. Maybe fixable in the future? @@ -403,7 +446,8 @@ bool IsEnemyAllowedToSpawn(int16_t sceneNum, int8_t roomNum, EnemyEntry enemy) { // Deku Tree case SCENE_DEKU_TREE: return (!(!isMQ && enemiesToExcludeClearRooms && (roomNum == 1 || roomNum == 9)) && - !(isMQ && enemiesToExcludeClearRooms && (roomNum == 4 || roomNum == 6 || roomNum == 9 || roomNum == 10))); + !(isMQ && enemiesToExcludeClearRooms && + (roomNum == 4 || roomNum == 6 || roomNum == 9 || roomNum == 10))); // Dodongo's Cavern case SCENE_DODONGOS_CAVERN: return (!(!isMQ && enemiesToExcludeClearRooms && roomNum == 15) && @@ -415,8 +459,10 @@ bool IsEnemyAllowedToSpawn(int16_t sceneNum, int8_t roomNum, EnemyEntry enemy) { !(isMQ && enemiesToExcludeClearRooms && (roomNum == 11 || roomNum == 14))); // Forest Temple case SCENE_FOREST_TEMPLE: - return (!(!isMQ && enemiesToExcludeClearRooms && (roomNum == 6 || roomNum == 10 || roomNum == 18 || roomNum == 21)) && - !(isMQ && enemiesToExcludeClearRooms && (roomNum == 5 || roomNum == 6 || roomNum == 18 || roomNum == 21))); + return (!(!isMQ && enemiesToExcludeClearRooms && + (roomNum == 6 || roomNum == 10 || roomNum == 18 || roomNum == 21)) && + !(isMQ && enemiesToExcludeClearRooms && + (roomNum == 5 || roomNum == 6 || roomNum == 18 || roomNum == 21))); // Fire Temple case SCENE_FIRE_TEMPLE: return (!(!isMQ && enemiesToExcludeClearRooms && roomNum == 15) && @@ -427,23 +473,31 @@ bool IsEnemyAllowedToSpawn(int16_t sceneNum, int8_t roomNum, EnemyEntry enemy) { !(isMQ && enemiesToExcludeClearRooms && (roomNum == 13 || roomNum == 18))); // Spirit Temple case SCENE_SPIRIT_TEMPLE: - return (!(!isMQ && enemiesToExcludeClearRooms && (roomNum == 1 || roomNum == 10 || roomNum == 17 || roomNum == 20)) && - !(isMQ && enemiesToExcludeClearRooms && (roomNum == 1 || roomNum == 2 || roomNum == 4 || roomNum == 10 || roomNum == 15 || roomNum == 19 || roomNum == 20))); + return (!(!isMQ && enemiesToExcludeClearRooms && + (roomNum == 1 || roomNum == 10 || roomNum == 17 || roomNum == 20)) && + !(isMQ && enemiesToExcludeClearRooms && + (roomNum == 1 || roomNum == 2 || roomNum == 4 || roomNum == 10 || roomNum == 15 || + roomNum == 19 || roomNum == 20))); // Shadow Temple case SCENE_SHADOW_TEMPLE: - return (!(!isMQ && enemiesToExcludeClearRooms && - (roomNum == 1 || roomNum == 7 || roomNum == 11 || roomNum == 14 || roomNum == 16 || roomNum == 17 || roomNum == 19 || roomNum == 20)) && - !(isMQ && enemiesToExcludeClearRooms && (roomNum == 1 || roomNum == 6 || roomNum == 7 || roomNum == 11 || roomNum == 14 || roomNum == 20))); + return ( + !(!isMQ && enemiesToExcludeClearRooms && + (roomNum == 1 || roomNum == 7 || roomNum == 11 || roomNum == 14 || roomNum == 16 || roomNum == 17 || + roomNum == 19 || roomNum == 20)) && + !(isMQ && enemiesToExcludeClearRooms && + (roomNum == 1 || roomNum == 6 || roomNum == 7 || roomNum == 11 || roomNum == 14 || roomNum == 20))); // Ganon's Castle Trials case SCENE_INSIDE_GANONS_CASTLE: return (!(!isMQ && enemiesToExcludeClearRooms && (roomNum == 2 || roomNum == 5 || roomNum == 9)) && - !(isMQ && enemiesToExcludeClearRooms && (roomNum == 0 || roomNum == 2 || roomNum == 5 || roomNum == 9))); + !(isMQ && enemiesToExcludeClearRooms && + (roomNum == 0 || roomNum == 2 || roomNum == 5 || roomNum == 9))); // Ice Caverns case SCENE_ICE_CAVERN: return (!(!isMQ && enemiesToExcludeClearRooms && (roomNum == 1 || roomNum == 7)) && !(isMQ && enemiesToExcludeClearRooms && (roomNum == 3 || roomNum == 7))); // Bottom of the Well - // Exclude Dark Link from room with holes in the floor because it can pull you in a like-like making the player fall down. + // Exclude Dark Link from room with holes in the floor because it can pull you in a like-like making the player + // fall down. case SCENE_BOTTOM_OF_THE_WELL: return (!(!isMQ && enemy.id == ACTOR_EN_TORCH2 && roomNum == 3)); // Don't allow Dark Link in areas with lava void out zones as it voids out the player as well. @@ -452,18 +506,21 @@ bool IsEnemyAllowedToSpawn(int16_t sceneNum, int8_t roomNum, EnemyEntry enemy) { return (!(enemy.id == ACTOR_EN_TORCH2 && roomNum == 6) && !(!isMQ && enemiesToExcludeTimedRooms && (roomNum == 1 || roomNum == 7)) && !(!isMQ && enemiesToExcludeClearRooms && (roomNum == 3 || roomNum == 5 || roomNum == 10)) && - !(isMQ && enemiesToExcludeTimedRooms && (roomNum == 1 || roomNum == 3 || roomNum == 5 || roomNum == 7)) && + !(isMQ && enemiesToExcludeTimedRooms && + (roomNum == 1 || roomNum == 3 || roomNum == 5 || roomNum == 7)) && !(isMQ && enemiesToExcludeClearRooms && roomNum == 10)); - // Don't allow certain enemies in Ganon's Tower because they would spawn up on the ceilling, + // Don't allow certain enemies in Ganon's Tower because they would spawn up on the ceiling, // becoming impossible to kill. // Ganon's Tower. case SCENE_GANONS_TOWER: - return (!(enemiesToExcludeClearRooms || enemy.id == ACTOR_EN_VALI || (enemy.id == ACTOR_EN_ZF && enemy.params == -1))); + return (!(enemiesToExcludeClearRooms || enemy.id == ACTOR_EN_VALI || + (enemy.id == ACTOR_EN_ZF && enemy.params == -1))); // Ganon's Tower Escape. case SCENE_GANONS_TOWER_COLLAPSE_INTERIOR: return (!((enemiesToExcludeTimedRooms || (enemy.id == ACTOR_EN_ZF && enemy.params == -1)) && roomNum == 1)); - // Don't allow big stalchildren, big peahats and the large Bari (jellyfish) during the Gohma fight because they can clip into Gohma - // and it crashes the game. Likely because Gohma on the ceilling can't handle collision with other enemies. + // Don't allow big Stalchildren, big Peahats and the large Bari (jellyfish) during the Gohma fight because they + // can clip into Gohma and it crashes the game. Likely because Gohma on the ceiling can't handle collision with + // other enemies. case SCENE_DEKU_TREE_BOSS: return (!enemiesToExcludeTimedRooms && !(enemy.id == ACTOR_EN_SKB && enemy.params == 20) && !(enemy.id == ACTOR_EN_PEEHAT && enemy.params == -1)); diff --git a/soh/soh/Enhancements/enemyrandomizer.h b/soh/soh/Enhancements/enemyrandomizer.h index f819de9bf..4c4fd5576 100644 --- a/soh/soh/Enhancements/enemyrandomizer.h +++ b/soh/soh/Enhancements/enemyrandomizer.h @@ -18,5 +18,6 @@ extern const char* enemyNameList[]; extern void GetSelectedEnemies(); #ifndef __cplusplus -uint8_t GetRandomizedEnemy(PlayState* play, int16_t *actorId, f32 *posX, f32 *posY, f32 *posZ, int16_t *rotX, int16_t *rotY, int16_t *rotZ, int16_t *params); +uint8_t GetRandomizedEnemy(PlayState* play, int16_t* actorId, f32* posX, f32* posY, f32* posZ, int16_t* rotX, + int16_t* rotY, int16_t* rotZ, int16_t* params); #endif diff --git a/soh/soh/Enhancements/enhancementTypes.h b/soh/soh/Enhancements/enhancementTypes.h index 14228054b..ee3b26d2e 100644 --- a/soh/soh/Enhancements/enhancementTypes.h +++ b/soh/soh/Enhancements/enhancementTypes.h @@ -11,14 +11,14 @@ typedef enum { CSMC_DISABLED, CSMC_BOTH, CSMC_TEXTURE, - CSMC_SIZE + CSMC_SIZE, } ChestStyleMatchesContentsType; typedef enum { SGIA_DISABLED, SGIA_JUNK, SGIA_ALL, - SGIA_SIZE + SGIA_SIZE, } SkipGetItemAnimationType; typedef enum { @@ -30,8 +30,8 @@ typedef enum { typedef enum { BUNNY_HOOD_VANILLA, + BUNNY_HOOD_FAST, BUNNY_HOOD_FAST_AND_JUMP, - BUNNY_HOOD_FAST } BunnyHoodMode; typedef enum { @@ -55,7 +55,7 @@ typedef enum { typedef enum { BOOTSEQUENCE_DEFAULT, BOOTSEQUENCE_AUTHENTIC, - BOOTSEQUENCE_FILESELECT + BOOTSEQUENCE_FILESELECT, } BootSequenceType; typedef enum { @@ -102,13 +102,13 @@ typedef enum { typedef enum { TIME_TRAVEL_DISABLED, TIME_TRAVEL_OOT, - TIME_TRAVEL_ANY + TIME_TRAVEL_ANY, } TimeTravelType; typedef enum { WATERFALL_ALWAYS, WATERFALL_ONCE, - WATERFALL_NEVER + WATERFALL_NEVER, } SleepingWaterfallType; #endif diff --git a/soh/soh/Enhancements/game-interactor/GameInteractionEffect.cpp b/soh/soh/Enhancements/game-interactor/GameInteractionEffect.cpp index 913496159..95455926b 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractionEffect.cpp +++ b/soh/soh/Enhancements/game-interactor/GameInteractionEffect.cpp @@ -47,621 +47,617 @@ GameInteractionEffectQueryResult RemovableGameInteractionEffect::Remove() { namespace GameInteractionEffect { - // MARK: - Flags - GameInteractionEffectQueryResult SetSceneFlag::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } +// MARK: - Flags +GameInteractionEffectQueryResult SetSceneFlag::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } + return GameInteractionEffectQueryResult::Possible; +} + +void SetSceneFlag::_Apply() { + GameInteractor::RawAction::SetSceneFlag(parameters[0], parameters[1], parameters[2]); +} + +GameInteractionEffectQueryResult UnsetSceneFlag::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } + + return GameInteractionEffectQueryResult::Possible; +} + +void UnsetSceneFlag::_Apply() { + GameInteractor::RawAction::UnsetSceneFlag(parameters[0], parameters[1], parameters[2]); +} + +GameInteractionEffectQueryResult SetFlag::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } + + return GameInteractionEffectQueryResult::Possible; +} + +void SetFlag::_Apply() { + GameInteractor::RawAction::SetFlag(parameters[0], parameters[1]); +} + +GameInteractionEffectQueryResult UnsetFlag::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } + + return GameInteractionEffectQueryResult::Possible; +} + +void UnsetFlag::_Apply() { + GameInteractor::RawAction::UnsetFlag(parameters[0], parameters[1]); +} + +// MARK: - ModifyHeartContainers +GameInteractionEffectQueryResult ModifyHeartContainers::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else if ((parameters[0] > 0 && (gSaveContext.healthCapacity + (parameters[0] * 0x10) > 0x140)) || + (parameters[0] < 0 && (gSaveContext.healthCapacity + (parameters[0] * 0x10) < 0x10))) { + return GameInteractionEffectQueryResult::NotPossible; + } + + return GameInteractionEffectQueryResult::Possible; +} + +void ModifyHeartContainers::_Apply() { + GameInteractor::RawAction::AddOrRemoveHealthContainers(parameters[0]); +} + +// MARK: - FillMagic +GameInteractionEffectQueryResult FillMagic::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else if (!gSaveContext.isMagicAcquired || gSaveContext.magic >= ((gSaveContext.isDoubleMagicAcquired + 1) * 48)) { + return GameInteractionEffectQueryResult::NotPossible; + } else { return GameInteractionEffectQueryResult::Possible; } - - void SetSceneFlag::_Apply() { - GameInteractor::RawAction::SetSceneFlag(parameters[0], parameters[1], parameters[2]); - } - - GameInteractionEffectQueryResult UnsetSceneFlag::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } - - return GameInteractionEffectQueryResult::Possible; - } - - void UnsetSceneFlag::_Apply() { - GameInteractor::RawAction::UnsetSceneFlag(parameters[0], parameters[1], parameters[2]); - } - - GameInteractionEffectQueryResult SetFlag::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } - - return GameInteractionEffectQueryResult::Possible; - } - - void SetFlag::_Apply() { - GameInteractor::RawAction::SetFlag(parameters[0], parameters[1]); - } - - GameInteractionEffectQueryResult UnsetFlag::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } - - return GameInteractionEffectQueryResult::Possible; - } - - void UnsetFlag::_Apply() { - GameInteractor::RawAction::UnsetFlag(parameters[0], parameters[1]); - } - - // MARK: - ModifyHeartContainers - GameInteractionEffectQueryResult ModifyHeartContainers::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else if ( - (parameters[0] > 0 && (gSaveContext.healthCapacity + (parameters[0] * 0x10) > 0x140)) || - (parameters[0] < 0 && (gSaveContext.healthCapacity + (parameters[0] * 0x10) < 0x10)) - ) { - return GameInteractionEffectQueryResult::NotPossible; - } - - return GameInteractionEffectQueryResult::Possible; - } - - void ModifyHeartContainers::_Apply() { - GameInteractor::RawAction::AddOrRemoveHealthContainers(parameters[0]); - } - - // MARK: - FillMagic - GameInteractionEffectQueryResult FillMagic::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else if (!gSaveContext.isMagicAcquired || gSaveContext.magic >= ((gSaveContext.isDoubleMagicAcquired + 1) * 48)) { - return GameInteractionEffectQueryResult::NotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void FillMagic::_Apply() { - GameInteractor::RawAction::AddOrRemoveMagic(96); - } - - // MARK: - EmptyMagic - GameInteractionEffectQueryResult EmptyMagic::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else if (!gSaveContext.isMagicAcquired || gSaveContext.magic <= 0) { - return GameInteractionEffectQueryResult::NotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void EmptyMagic::_Apply() { - GameInteractor::RawAction::AddOrRemoveMagic(-96); - } - - // MARK: - ModifyRupees - GameInteractionEffectQueryResult ModifyRupees::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else if ( - (parameters[0] < 0 && gSaveContext.rupees <= 0) || - (parameters[0] > 0 && gSaveContext.rupees >= CUR_CAPACITY(UPG_WALLET)) - ) { - return GameInteractionEffectQueryResult::NotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void ModifyRupees::_Apply() { - Rupees_ChangeBy(parameters[0]); - } - - // MARK: - NoUI - GameInteractionEffectQueryResult NoUI::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void NoUI::_Apply() { - GameInteractor::State::NoUIActive = 1; - } - void NoUI::_Remove() { - GameInteractor::State::NoUIActive = 0; - } - - // MARK: - ModifyGravity - GameInteractionEffectQueryResult ModifyGravity::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void ModifyGravity::_Apply() { - GameInteractor::State::GravityLevel = (GIGravityLevel)parameters[0]; - } - void ModifyGravity::_Remove() { - GameInteractor::State::GravityLevel = GI_GRAVITY_LEVEL_NORMAL; - } - - // MARK: - ModifyHealth - GameInteractionEffectQueryResult ModifyHealth::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else if ( - (parameters[0] > 0 && gSaveContext.health == gSaveContext.healthCapacity) - || (parameters[0] < 0 && (gSaveContext.health + (16 * parameters[0]) <= 0)) - ) { - return GameInteractionEffectQueryResult::NotPossible; - } - - return GameInteractionEffectQueryResult::Possible; - } - void ModifyHealth::_Apply() { - GameInteractor::RawAction::HealOrDamagePlayer(parameters[0]); - } - - // MARK: - SetPlayerHealth - GameInteractionEffectQueryResult SetPlayerHealth::CanBeApplied() { - Player* player = GET_PLAYER(gPlayState); - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void SetPlayerHealth::_Apply() { - GameInteractor::RawAction::SetPlayerHealth(parameters[0]); - } - - // MARK: - FreezePlayer - GameInteractionEffectQueryResult FreezePlayer::CanBeApplied() { - Player* player = GET_PLAYER(gPlayState); - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused() || !PlayerGrounded(player)) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void FreezePlayer::_Apply() { - GameInteractor::RawAction::FreezePlayer(); - } - - // MARK: - BurnPlayer - GameInteractionEffectQueryResult BurnPlayer::CanBeApplied() { - Player* player = GET_PLAYER(gPlayState); - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused() || !PlayerGrounded(player)) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void BurnPlayer::_Apply() { - GameInteractor::RawAction::BurnPlayer(); - } - - // MARK: - ElectrocutePlayer - GameInteractionEffectQueryResult ElectrocutePlayer::CanBeApplied() { - Player* player = GET_PLAYER(gPlayState); - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused() || !PlayerGrounded(player)) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void ElectrocutePlayer::_Apply() { - GameInteractor::RawAction::ElectrocutePlayer(); - } - - // MARK: - KnockbackPlayer - GameInteractionEffectQueryResult KnockbackPlayer::CanBeApplied() { - Player* player = GET_PLAYER(gPlayState); - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused() || player->stateFlags2 & PLAYER_STATE2_CRAWLING) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void KnockbackPlayer::_Apply() { - GameInteractor::RawAction::KnockbackPlayer(parameters[0]); - } - - // MARK: - ModifyLinkSize - GameInteractionEffectQueryResult ModifyLinkSize::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void ModifyLinkSize::_Apply() { - GameInteractor::State::LinkSize = (GILinkSize)parameters[0]; - } - void ModifyLinkSize::_Remove() { - GameInteractor::State::LinkSize = GI_LINK_SIZE_RESET; - } - - // MARK: - InvisibleLink - GameInteractionEffectQueryResult InvisibleLink::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void InvisibleLink::_Apply() { - GameInteractor::RawAction::SetLinkInvisibility(true); - } - void InvisibleLink::_Remove() { - GameInteractor::RawAction::SetLinkInvisibility(false); - } - - // MARK: - PacifistMode - GameInteractionEffectQueryResult PacifistMode::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void PacifistMode::_Apply() { - GameInteractor::State::SetPacifistMode(true); - } - void PacifistMode::_Remove() { - GameInteractor::State::SetPacifistMode(false); - } - - // MARK: - DisableZTargeting - GameInteractionEffectQueryResult DisableZTargeting::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void DisableZTargeting::_Apply() { - GameInteractor::State::DisableZTargetingActive = 1; - } - void DisableZTargeting::_Remove() { - GameInteractor::State::DisableZTargetingActive = 0; - } - - // MARK: - WeatherRainstorm - GameInteractionEffectQueryResult WeatherRainstorm::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void WeatherRainstorm::_Apply() { - GameInteractor::RawAction::SetWeatherStorm(true); - } - void WeatherRainstorm::_Remove() { - GameInteractor::RawAction::SetWeatherStorm(false); - } - - // MARK: - ReverseControls - GameInteractionEffectQueryResult ReverseControls::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void ReverseControls::_Apply() { - GameInteractor::State::ReverseControlsActive = 1; - } - void ReverseControls::_Remove() { - GameInteractor::State::ReverseControlsActive = 0; - } - - // MARK: - ForceEquipBoots - GameInteractionEffectQueryResult ForceEquipBoots::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void ForceEquipBoots::_Apply() { - GameInteractor::RawAction::ForceEquipBoots(parameters[0]); - } - void ForceEquipBoots::_Remove() { - GameInteractor::RawAction::ForceEquipBoots(EQUIP_VALUE_BOOTS_KOKIRI); - } - - // MARK: - ModifyRunSpeedModifier - GameInteractionEffectQueryResult ModifyRunSpeedModifier::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void ModifyRunSpeedModifier::_Apply() { - GameInteractor::State::RunSpeedModifier = parameters[0]; - } - void ModifyRunSpeedModifier::_Remove() { - GameInteractor::State::RunSpeedModifier = 0; - } - - // MARK: - OneHitKO - GameInteractionEffectQueryResult OneHitKO::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void OneHitKO::_Apply() { - GameInteractor::State::OneHitKOActive = 1; - } - void OneHitKO::_Remove() { - GameInteractor::State::OneHitKOActive = 0; - } - - // MARK: - ModifyDefenseModifier - GameInteractionEffectQueryResult ModifyDefenseModifier::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void ModifyDefenseModifier::_Apply() { - GameInteractor::State::DefenseModifier = parameters[0]; - } - void ModifyDefenseModifier::_Remove() { - GameInteractor::State::DefenseModifier = 0; - } - - // MARK: - GiveOrTakeShield - GameInteractionEffectQueryResult GiveOrTakeShield::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else if ((parameters[0] > 0 && ((gBitFlags[parameters[0] - ITEM_SHIELD_DEKU] << gEquipShifts[EQUIP_TYPE_SHIELD]) & - gSaveContext.inventory.equipment)) || - (parameters[0] < 0 && !((gBitFlags[(parameters[0] * -1) - ITEM_SHIELD_DEKU] << gEquipShifts[EQUIP_TYPE_SHIELD]) & - gSaveContext.inventory.equipment))) { - return GameInteractionEffectQueryResult::NotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void GiveOrTakeShield::_Apply() { - GameInteractor::RawAction::GiveOrTakeShield(parameters[0]); - } - - // MARK: - TeleportPlayer - GameInteractionEffectQueryResult TeleportPlayer::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void TeleportPlayer::_Apply() { - GameInteractor::RawAction::TeleportPlayer(parameters[0]); - } - - // MARK: - ClearAssignedButtons - GameInteractionEffectQueryResult ClearAssignedButtons::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void ClearAssignedButtons::_Apply() { - GameInteractor::RawAction::ClearAssignedButtons(parameters[0]); - } - - // MARK: - SetTimeOfDay - GameInteractionEffectQueryResult SetTimeOfDay::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void SetTimeOfDay::_Apply() { - GameInteractor::RawAction::SetTimeOfDay(parameters[0]); - } - - // MARK: - SetCollisionViewer - GameInteractionEffectQueryResult SetCollisionViewer::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void SetCollisionViewer::_Apply() { - GameInteractor::RawAction::SetCollisionViewer(true); - } - void SetCollisionViewer::_Remove() { - GameInteractor::RawAction::SetCollisionViewer(false); - } - - // MARK: - SetCosmeticsColor - GameInteractionEffectQueryResult SetCosmeticsColor::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void SetCosmeticsColor::_Apply() { - GameInteractor::RawAction::SetCosmeticsColor(parameters[0], parameters[1]); - } - - // MARK: - RandomizeCosmetics - GameInteractionEffectQueryResult RandomizeCosmetics::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void RandomizeCosmetics::_Apply() { - GameInteractor::RawAction::RandomizeCosmeticsColors(true); - } - - // MARK: - PressButton - GameInteractionEffectQueryResult PressButton::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void PressButton::_Apply() { - GameInteractor::RawAction::EmulateButtonPress(parameters[0]); - } - - // MARK: - PressRandomButton - GameInteractionEffectQueryResult PressRandomButton::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void PressRandomButton::_Apply() { - GameInteractor::RawAction::EmulateRandomButtonPress(parameters[0]); - } - - // MARK: - AddOrTakeAmmo - GameInteractionEffectQueryResult AddOrTakeAmmo::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else if (!GameInteractor::CanAddOrTakeAmmo(parameters[0], parameters[1])) { - return GameInteractionEffectQueryResult::NotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void AddOrTakeAmmo::_Apply() { - GameInteractor::RawAction::AddOrTakeAmmo(parameters[0], parameters[1]); - } - - // MARK: - RandomBombFuseTimer - GameInteractionEffectQueryResult RandomBombFuseTimer::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void RandomBombFuseTimer::_Apply() { - GameInteractor::State::RandomBombFuseTimerActive = 1; - } - void RandomBombFuseTimer::_Remove() { - GameInteractor::State::RandomBombFuseTimerActive = 0; - } - - // MARK: - DisableLedgeGrabs - GameInteractionEffectQueryResult DisableLedgeGrabs::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void DisableLedgeGrabs::_Apply() { - GameInteractor::State::DisableLedgeGrabsActive = 1; - } - void DisableLedgeGrabs::_Remove() { - GameInteractor::State::DisableLedgeGrabsActive = 0; - } - - // MARK: - RandomWind - GameInteractionEffectQueryResult RandomWind::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void RandomWind::_Apply() { - GameInteractor::RawAction::SetRandomWind(true); - } - void RandomWind::_Remove() { - GameInteractor::RawAction::SetRandomWind(false); - } - - // MARK: - RandomBonks - GameInteractionEffectQueryResult RandomBonks::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void RandomBonks::_Apply() { - GameInteractor::State::RandomBonksActive = 1; - } - void RandomBonks::_Remove() { - GameInteractor::State::RandomBonksActive = 0; - } - - // MARK: - PlayerInvincibility - GameInteractionEffectQueryResult PlayerInvincibility::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void PlayerInvincibility::_Apply() { - GameInteractor::RawAction::SetPlayerInvincibility(true); - } - void PlayerInvincibility::_Remove() { - GameInteractor::RawAction::SetPlayerInvincibility(false); - } - - // MARK: - SlipperyFloor - GameInteractionEffectQueryResult SlipperyFloor::CanBeApplied() { - if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { - return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } else { - return GameInteractionEffectQueryResult::Possible; - } - } - void SlipperyFloor::_Apply() { - GameInteractor::State::SlipperyFloorActive = 1; - } - 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]); - } } +void FillMagic::_Apply() { + GameInteractor::RawAction::AddOrRemoveMagic(96); +} + +// MARK: - EmptyMagic +GameInteractionEffectQueryResult EmptyMagic::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else if (!gSaveContext.isMagicAcquired || gSaveContext.magic <= 0) { + return GameInteractionEffectQueryResult::NotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void EmptyMagic::_Apply() { + GameInteractor::RawAction::AddOrRemoveMagic(-96); +} + +// MARK: - ModifyRupees +GameInteractionEffectQueryResult ModifyRupees::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else if ((parameters[0] < 0 && gSaveContext.rupees <= 0) || + (parameters[0] > 0 && gSaveContext.rupees >= CUR_CAPACITY(UPG_WALLET))) { + return GameInteractionEffectQueryResult::NotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void ModifyRupees::_Apply() { + Rupees_ChangeBy(parameters[0]); +} + +// MARK: - NoUI +GameInteractionEffectQueryResult NoUI::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void NoUI::_Apply() { + GameInteractor::State::NoUIActive = 1; +} +void NoUI::_Remove() { + GameInteractor::State::NoUIActive = 0; +} + +// MARK: - ModifyGravity +GameInteractionEffectQueryResult ModifyGravity::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void ModifyGravity::_Apply() { + GameInteractor::State::GravityLevel = (GIGravityLevel)parameters[0]; +} +void ModifyGravity::_Remove() { + GameInteractor::State::GravityLevel = GI_GRAVITY_LEVEL_NORMAL; +} + +// MARK: - ModifyHealth +GameInteractionEffectQueryResult ModifyHealth::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else if ((parameters[0] > 0 && gSaveContext.health == gSaveContext.healthCapacity) || + (parameters[0] < 0 && (gSaveContext.health + (16 * parameters[0]) <= 0))) { + return GameInteractionEffectQueryResult::NotPossible; + } + + return GameInteractionEffectQueryResult::Possible; +} +void ModifyHealth::_Apply() { + GameInteractor::RawAction::HealOrDamagePlayer(parameters[0]); +} + +// MARK: - SetPlayerHealth +GameInteractionEffectQueryResult SetPlayerHealth::CanBeApplied() { + Player* player = GET_PLAYER(gPlayState); + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void SetPlayerHealth::_Apply() { + GameInteractor::RawAction::SetPlayerHealth(parameters[0]); +} + +// MARK: - FreezePlayer +GameInteractionEffectQueryResult FreezePlayer::CanBeApplied() { + Player* player = GET_PLAYER(gPlayState); + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused() || !PlayerGrounded(player)) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void FreezePlayer::_Apply() { + GameInteractor::RawAction::FreezePlayer(); +} + +// MARK: - BurnPlayer +GameInteractionEffectQueryResult BurnPlayer::CanBeApplied() { + Player* player = GET_PLAYER(gPlayState); + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused() || !PlayerGrounded(player)) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void BurnPlayer::_Apply() { + GameInteractor::RawAction::BurnPlayer(); +} + +// MARK: - ElectrocutePlayer +GameInteractionEffectQueryResult ElectrocutePlayer::CanBeApplied() { + Player* player = GET_PLAYER(gPlayState); + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused() || !PlayerGrounded(player)) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void ElectrocutePlayer::_Apply() { + GameInteractor::RawAction::ElectrocutePlayer(); +} + +// MARK: - KnockbackPlayer +GameInteractionEffectQueryResult KnockbackPlayer::CanBeApplied() { + Player* player = GET_PLAYER(gPlayState); + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused() || + player->stateFlags2 & PLAYER_STATE2_CRAWLING) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void KnockbackPlayer::_Apply() { + GameInteractor::RawAction::KnockbackPlayer(parameters[0]); +} + +// MARK: - ModifyLinkSize +GameInteractionEffectQueryResult ModifyLinkSize::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void ModifyLinkSize::_Apply() { + GameInteractor::State::LinkSize = (GILinkSize)parameters[0]; +} +void ModifyLinkSize::_Remove() { + GameInteractor::State::LinkSize = GI_LINK_SIZE_RESET; +} + +// MARK: - InvisibleLink +GameInteractionEffectQueryResult InvisibleLink::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void InvisibleLink::_Apply() { + GameInteractor::RawAction::SetLinkInvisibility(true); +} +void InvisibleLink::_Remove() { + GameInteractor::RawAction::SetLinkInvisibility(false); +} + +// MARK: - PacifistMode +GameInteractionEffectQueryResult PacifistMode::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void PacifistMode::_Apply() { + GameInteractor::State::SetPacifistMode(true); +} +void PacifistMode::_Remove() { + GameInteractor::State::SetPacifistMode(false); +} + +// MARK: - DisableZTargeting +GameInteractionEffectQueryResult DisableZTargeting::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void DisableZTargeting::_Apply() { + GameInteractor::State::DisableZTargetingActive = 1; +} +void DisableZTargeting::_Remove() { + GameInteractor::State::DisableZTargetingActive = 0; +} + +// MARK: - WeatherRainstorm +GameInteractionEffectQueryResult WeatherRainstorm::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void WeatherRainstorm::_Apply() { + GameInteractor::RawAction::SetWeatherStorm(true); +} +void WeatherRainstorm::_Remove() { + GameInteractor::RawAction::SetWeatherStorm(false); +} + +// MARK: - ReverseControls +GameInteractionEffectQueryResult ReverseControls::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void ReverseControls::_Apply() { + GameInteractor::State::ReverseControlsActive = 1; +} +void ReverseControls::_Remove() { + GameInteractor::State::ReverseControlsActive = 0; +} + +// MARK: - ForceEquipBoots +GameInteractionEffectQueryResult ForceEquipBoots::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void ForceEquipBoots::_Apply() { + GameInteractor::RawAction::ForceEquipBoots(parameters[0]); +} +void ForceEquipBoots::_Remove() { + GameInteractor::RawAction::ForceEquipBoots(EQUIP_VALUE_BOOTS_KOKIRI); +} + +// MARK: - ModifyRunSpeedModifier +GameInteractionEffectQueryResult ModifyRunSpeedModifier::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void ModifyRunSpeedModifier::_Apply() { + GameInteractor::State::RunSpeedModifier = parameters[0]; +} +void ModifyRunSpeedModifier::_Remove() { + GameInteractor::State::RunSpeedModifier = 0; +} + +// MARK: - OneHitKO +GameInteractionEffectQueryResult OneHitKO::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void OneHitKO::_Apply() { + GameInteractor::State::OneHitKOActive = 1; +} +void OneHitKO::_Remove() { + GameInteractor::State::OneHitKOActive = 0; +} + +// MARK: - ModifyDefenseModifier +GameInteractionEffectQueryResult ModifyDefenseModifier::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void ModifyDefenseModifier::_Apply() { + GameInteractor::State::DefenseModifier = parameters[0]; +} +void ModifyDefenseModifier::_Remove() { + GameInteractor::State::DefenseModifier = 0; +} + +// MARK: - GiveOrTakeShield +GameInteractionEffectQueryResult GiveOrTakeShield::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else if ((parameters[0] > 0 && ((gBitFlags[parameters[0] - ITEM_SHIELD_DEKU] << gEquipShifts[EQUIP_TYPE_SHIELD]) & + gSaveContext.inventory.equipment)) || + (parameters[0] < 0 && + !((gBitFlags[(parameters[0] * -1) - ITEM_SHIELD_DEKU] << gEquipShifts[EQUIP_TYPE_SHIELD]) & + gSaveContext.inventory.equipment))) { + return GameInteractionEffectQueryResult::NotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void GiveOrTakeShield::_Apply() { + GameInteractor::RawAction::GiveOrTakeShield(parameters[0]); +} + +// MARK: - TeleportPlayer +GameInteractionEffectQueryResult TeleportPlayer::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void TeleportPlayer::_Apply() { + GameInteractor::RawAction::TeleportPlayer(parameters[0]); +} + +// MARK: - ClearAssignedButtons +GameInteractionEffectQueryResult ClearAssignedButtons::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void ClearAssignedButtons::_Apply() { + GameInteractor::RawAction::ClearAssignedButtons(parameters[0]); +} + +// MARK: - SetTimeOfDay +GameInteractionEffectQueryResult SetTimeOfDay::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void SetTimeOfDay::_Apply() { + GameInteractor::RawAction::SetTimeOfDay(parameters[0]); +} + +// MARK: - SetCollisionViewer +GameInteractionEffectQueryResult SetCollisionViewer::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void SetCollisionViewer::_Apply() { + GameInteractor::RawAction::SetCollisionViewer(true); +} +void SetCollisionViewer::_Remove() { + GameInteractor::RawAction::SetCollisionViewer(false); +} + +// MARK: - SetCosmeticsColor +GameInteractionEffectQueryResult SetCosmeticsColor::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void SetCosmeticsColor::_Apply() { + GameInteractor::RawAction::SetCosmeticsColor(parameters[0], parameters[1]); +} + +// MARK: - RandomizeCosmetics +GameInteractionEffectQueryResult RandomizeCosmetics::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void RandomizeCosmetics::_Apply() { + GameInteractor::RawAction::RandomizeCosmeticsColors(true); +} + +// MARK: - PressButton +GameInteractionEffectQueryResult PressButton::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void PressButton::_Apply() { + GameInteractor::RawAction::EmulateButtonPress(parameters[0]); +} + +// MARK: - PressRandomButton +GameInteractionEffectQueryResult PressRandomButton::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void PressRandomButton::_Apply() { + GameInteractor::RawAction::EmulateRandomButtonPress(parameters[0]); +} + +// MARK: - AddOrTakeAmmo +GameInteractionEffectQueryResult AddOrTakeAmmo::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else if (!GameInteractor::CanAddOrTakeAmmo(parameters[0], parameters[1])) { + return GameInteractionEffectQueryResult::NotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void AddOrTakeAmmo::_Apply() { + GameInteractor::RawAction::AddOrTakeAmmo(parameters[0], parameters[1]); +} + +// MARK: - RandomBombFuseTimer +GameInteractionEffectQueryResult RandomBombFuseTimer::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void RandomBombFuseTimer::_Apply() { + GameInteractor::State::RandomBombFuseTimerActive = 1; +} +void RandomBombFuseTimer::_Remove() { + GameInteractor::State::RandomBombFuseTimerActive = 0; +} + +// MARK: - DisableLedgeGrabs +GameInteractionEffectQueryResult DisableLedgeGrabs::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void DisableLedgeGrabs::_Apply() { + GameInteractor::State::DisableLedgeGrabsActive = 1; +} +void DisableLedgeGrabs::_Remove() { + GameInteractor::State::DisableLedgeGrabsActive = 0; +} + +// MARK: - RandomWind +GameInteractionEffectQueryResult RandomWind::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void RandomWind::_Apply() { + GameInteractor::RawAction::SetRandomWind(true); +} +void RandomWind::_Remove() { + GameInteractor::RawAction::SetRandomWind(false); +} + +// MARK: - RandomBonks +GameInteractionEffectQueryResult RandomBonks::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void RandomBonks::_Apply() { + GameInteractor::State::RandomBonksActive = 1; +} +void RandomBonks::_Remove() { + GameInteractor::State::RandomBonksActive = 0; +} + +// MARK: - PlayerInvincibility +GameInteractionEffectQueryResult PlayerInvincibility::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void PlayerInvincibility::_Apply() { + GameInteractor::RawAction::SetPlayerInvincibility(true); +} +void PlayerInvincibility::_Remove() { + GameInteractor::RawAction::SetPlayerInvincibility(false); +} + +// MARK: - SlipperyFloor +GameInteractionEffectQueryResult SlipperyFloor::CanBeApplied() { + if (!GameInteractor::IsSaveLoaded() || GameInteractor::IsGameplayPaused()) { + return GameInteractionEffectQueryResult::TemporarilyNotPossible; + } else { + return GameInteractionEffectQueryResult::Possible; + } +} +void SlipperyFloor::_Apply() { + GameInteractor::State::SlipperyFloorActive = 1; +} +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]); +} +} // namespace GameInteractionEffect diff --git a/soh/soh/Enhancements/game-interactor/GameInteractionEffect.h b/soh/soh/Enhancements/game-interactor/GameInteractionEffect.h index 2a29022d5..72eb101b0 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractionEffect.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractionEffect.h @@ -6,271 +6,269 @@ #include #ifdef __cplusplus -enum GameInteractionEffectQueryResult { - Possible = 0x00, - TemporarilyNotPossible = 0x01, - NotPossible = 0xFF -}; +enum GameInteractionEffectQueryResult { Possible = 0x00, TemporarilyNotPossible = 0x01, NotPossible = 0xFF }; class GameInteractionEffectBase { -public: + public: virtual GameInteractionEffectQueryResult CanBeApplied() = 0; GameInteractionEffectQueryResult Apply(); -protected: + + protected: virtual void _Apply() = 0; }; -class RemovableGameInteractionEffect: public GameInteractionEffectBase { -public: +class RemovableGameInteractionEffect : public GameInteractionEffectBase { + public: virtual GameInteractionEffectQueryResult CanBeRemoved(); GameInteractionEffectQueryResult Remove(); -protected: - virtual void _Remove() {}; + + protected: + virtual void _Remove(){}; }; class ParameterizedGameInteractionEffect { -public: + public: int32_t parameters[3]; }; namespace GameInteractionEffect { - class SetSceneFlag: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class SetSceneFlag : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class UnsetSceneFlag: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class UnsetSceneFlag : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class SetFlag: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class SetFlag : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class UnsetFlag: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class UnsetFlag : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class ModifyHeartContainers: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class ModifyHeartContainers : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class FillMagic: public GameInteractionEffectBase { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class FillMagic : public GameInteractionEffectBase { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class EmptyMagic: public GameInteractionEffectBase { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class EmptyMagic : public GameInteractionEffectBase { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class ModifyRupees: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class ModifyRupees : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class NoUI: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class NoUI : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class ModifyGravity: public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class ModifyGravity : public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class ModifyHealth: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class ModifyHealth : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class SetPlayerHealth: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class SetPlayerHealth : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class FreezePlayer: public GameInteractionEffectBase { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class FreezePlayer : public GameInteractionEffectBase { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class BurnPlayer: public GameInteractionEffectBase { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class BurnPlayer : public GameInteractionEffectBase { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class ElectrocutePlayer: public GameInteractionEffectBase { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class ElectrocutePlayer : public GameInteractionEffectBase { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class KnockbackPlayer: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class KnockbackPlayer : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class ModifyLinkSize: public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class ModifyLinkSize : public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class InvisibleLink : public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class InvisibleLink : public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class PacifistMode : public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class PacifistMode : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class DisableZTargeting: public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class DisableZTargeting : public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class WeatherRainstorm: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class WeatherRainstorm : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class ReverseControls: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class ReverseControls : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class ForceEquipBoots: public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class ForceEquipBoots : public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class ModifyRunSpeedModifier: public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class ModifyRunSpeedModifier : public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class OneHitKO : public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class OneHitKO : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class ModifyDefenseModifier: public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class ModifyDefenseModifier : public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class GiveOrTakeShield: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class GiveOrTakeShield : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class TeleportPlayer: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class TeleportPlayer : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class ClearAssignedButtons: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class ClearAssignedButtons : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class SetTimeOfDay: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class SetTimeOfDay : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class SetCollisionViewer: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class SetCollisionViewer : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class SetCosmeticsColor: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class SetCosmeticsColor : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class RandomizeCosmetics: public GameInteractionEffectBase { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class RandomizeCosmetics : public GameInteractionEffectBase { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class PressButton: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class PressButton : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class PressRandomButton: public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class PressRandomButton : public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class AddOrTakeAmmo: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - }; +class AddOrTakeAmmo : public GameInteractionEffectBase, public ParameterizedGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; +}; - class RandomBombFuseTimer: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class RandomBombFuseTimer : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class DisableLedgeGrabs: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class DisableLedgeGrabs : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class RandomWind: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class RandomWind : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class RandomBonks: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class RandomBonks : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class PlayerInvincibility: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - void _Apply() override; - void _Remove() override; - }; +class PlayerInvincibility : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + void _Apply() override; + void _Remove() override; +}; - class SlipperyFloor: public RemovableGameInteractionEffect { - GameInteractionEffectQueryResult CanBeApplied() override; - 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; - }; -} +class SlipperyFloor : public RemovableGameInteractionEffect { + GameInteractionEffectQueryResult CanBeApplied() override; + 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; +}; +} // namespace GameInteractionEffect #endif /* __cplusplus */ #endif /* GameInteractionEffect_h */ diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.cpp b/soh/soh/Enhancements/game-interactor/GameInteractor.cpp index dbb4782fd..fb3db74df 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor.cpp +++ b/soh/soh/Enhancements/game-interactor/GameInteractor.cpp @@ -1,4 +1,4 @@ -/* +/* GameInteractor is meant to be used for interacting with the game (yup...). It exposes functions that directly modify, add or remove game related elements. @@ -54,7 +54,10 @@ bool GameInteractor::IsSaveLoaded(bool allowDbgSave) { bool GameInteractor::IsGameplayPaused() { Player* player = GET_PLAYER(gPlayState); - return (Player_InBlockingCsMode(gPlayState, player) || gPlayState->pauseCtx.state != 0 || gPlayState->msgCtx.msgMode != 0) ? true : false; + return (Player_InBlockingCsMode(gPlayState, player) || gPlayState->pauseCtx.state != 0 || + gPlayState->msgCtx.msgMode != 0) + ? true + : false; } bool GameInteractor::CanSpawnActor() { diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h b/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h index 3bd2ef36e..44d0e643a 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h @@ -33,6 +33,10 @@ DEFINE_HOOK(OnTimestamp, (u8 item)); DEFINE_HOOK(OnPlayerBonk, ()); DEFINE_HOOK(OnPlayerHealthChange, (int16_t amount)); DEFINE_HOOK(OnPlayerBottleUpdate, (int16_t contents)); +DEFINE_HOOK(OnPlayerHoldUpShield, ()); +DEFINE_HOOK(OnPlayerFirstPersonControl, (Player * player)); +DEFINE_HOOK(OnPlayerProcessStick, ()); +DEFINE_HOOK(OnPlayerShieldControl, (float_t * sp50, float_t* sp54)); DEFINE_HOOK(OnPlayDestroy, ()); DEFINE_HOOK(OnPlayDrawEnd, ()); DEFINE_HOOK(OnVanillaBehavior, (GIVanillaBehavior flag, bool* result, va_list originalArgs)); diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp index 9c861062b..9231da843 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp +++ b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp @@ -126,7 +126,7 @@ void GameInteractor_ExecuteOnBossDefeat(void* actor) { GameInteractor::Instance->ExecuteHooksForFilter(actor); } -void GameInteractor_ExecuteOnTimestamp (u8 item) { +void GameInteractor_ExecuteOnTimestamp(u8 item) { GameInteractor::Instance->ExecuteHooks(item); } @@ -142,6 +142,22 @@ void GameInteractor_ExecuteOnPlayerBottleUpdate(int16_t contents) { GameInteractor::Instance->ExecuteHooks(contents); } +void GameInteractor_ExecuteOnPlayerHoldUpShield() { + GameInteractor::Instance->ExecuteHooks(); +} + +void GameInteractor_ExecuteOnPlayerFirstPersonControl(Player* player) { + GameInteractor::Instance->ExecuteHooks(player); +} + +void GameInteractor_ExecuteOnPlayerShieldControl(float_t* sp50, float_t* sp54) { + GameInteractor::Instance->ExecuteHooks(sp50, sp54); +} + +void GameInteractor_ExecuteOnPlayerProcessStick() { + GameInteractor::Instance->ExecuteHooks(); +} + void GameInteractor_ExecuteOnPlayDestroy() { GameInteractor::Instance->ExecuteHooks(); } @@ -250,7 +266,8 @@ void GameInteractor_ExecuteOnUpdateFileQuestSelection(uint8_t questIndex) { } void GameInteractor_ExecuteOnUpdateFileBossRushOptionSelection(uint8_t optionIndex, uint8_t optionValue) { - GameInteractor::Instance->ExecuteHooks(optionIndex, optionValue); + GameInteractor::Instance->ExecuteHooks(optionIndex, + optionValue); } void GameInteractor_ExecuteOnUpdateFileNameSelection(int16_t charCode) { @@ -269,7 +286,7 @@ void GameInteractor_RegisterOnAssetAltChange(void (*fn)(void)) { GameInteractor::Instance->RegisterGameHook(fn); } -//MARK: Pause Menu +// MARK: Pause Menu void GameInteractor_ExecuteOnKaleidoUpdate() { GameInteractor::Instance->ExecuteHooks(); diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h index d20864012..33c8d2681 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h @@ -31,10 +31,14 @@ void GameInteractor_ExecuteOnActorUpdate(void* actor); void GameInteractor_ExecuteOnActorKill(void* actor); void GameInteractor_ExecuteOnEnemyDefeat(void* actor); void GameInteractor_ExecuteOnBossDefeat(void* actor); -void GameInteractor_ExecuteOnTimestamp (u8 item); +void GameInteractor_ExecuteOnTimestamp(u8 item); void GameInteractor_ExecuteOnPlayerBonk(); void GameInteractor_ExecuteOnPlayerHealthChange(int16_t amount); void GameInteractor_ExecuteOnPlayerBottleUpdate(int16_t contents); +void GameInteractor_ExecuteOnPlayerHoldUpShield(); +void GameInteractor_ExecuteOnPlayerFirstPersonControl(Player* player); +void GameInteractor_ExecuteOnPlayerShieldControl(float_t* sp50, float_t* sp54); +void GameInteractor_ExecuteOnPlayerProcessStick(); void GameInteractor_ExecuteOnShopSlotChangeHooks(uint8_t cursorIndex, int16_t price); void GameInteractor_ExecuteOnPlayDestroy(); void GameInteractor_ExecuteOnPlayDrawEnd(); @@ -72,7 +76,7 @@ void GameInteractor_ExecuteOnSetGameLanguage(); // MARK: - System void GameInteractor_RegisterOnAssetAltChange(void (*fn)(void)); -//Mark: - Pause Menu +// Mark: - Pause Menu void GameInteractor_ExecuteOnKaleidoUpdate(); #ifdef __cplusplus diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_RawAction.cpp b/soh/soh/Enhancements/game-interactor/GameInteractor_RawAction.cpp index d0b32018a..ac99859b5 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor_RawAction.cpp +++ b/soh/soh/Enhancements/game-interactor/GameInteractor_RawAction.cpp @@ -143,11 +143,13 @@ void GameInteractor::RawAction::SetSceneFlag(int16_t sceneNum, int16_t flagType, } break; case FlagType::FLAG_SCENE_CLEAR: - if (sceneNum == gPlayState->sceneNum) gPlayState->actorCtx.flags.clear |= (1 << flag); + if (sceneNum == gPlayState->sceneNum) + gPlayState->actorCtx.flags.clear |= (1 << flag); gSaveContext.sceneFlags[sceneNum].clear |= (1 << flag); break; case FlagType::FLAG_SCENE_TREASURE: - if (sceneNum == gPlayState->sceneNum) gPlayState->actorCtx.flags.chest |= (1 << flag); + if (sceneNum == gPlayState->sceneNum) + gPlayState->actorCtx.flags.chest |= (1 << flag); gSaveContext.sceneFlags[sceneNum].chest |= (1 << flag); break; case FlagType::FLAG_SCENE_COLLECTIBLE: @@ -182,11 +184,13 @@ void GameInteractor::RawAction::UnsetSceneFlag(int16_t sceneNum, int16_t flagTyp } break; case FlagType::FLAG_SCENE_CLEAR: - if (sceneNum == gPlayState->sceneNum) gPlayState->actorCtx.flags.clear &= ~(1 << flag); + if (sceneNum == gPlayState->sceneNum) + gPlayState->actorCtx.flags.clear &= ~(1 << flag); gSaveContext.sceneFlags[sceneNum].clear &= ~(1 << flag); break; case FlagType::FLAG_SCENE_TREASURE: - if (sceneNum == gPlayState->sceneNum) gPlayState->actorCtx.flags.chest &= ~(1 << flag); + if (sceneNum == gPlayState->sceneNum) + gPlayState->actorCtx.flags.chest &= ~(1 << flag); gSaveContext.sceneFlags[sceneNum].chest &= ~(1 << flag); break; case FlagType::FLAG_SCENE_COLLECTIBLE: @@ -220,6 +224,9 @@ bool GameInteractor::RawAction::CheckFlag(int16_t flagType, int16_t flag) { return Flags_GetRandomizerInf(static_cast(flag)); case FlagType::FLAG_GS_TOKEN: return GET_GS_FLAGS((flag & 0x1F00) >> 8); + default: + assert(false); + return false; } } @@ -334,7 +341,7 @@ void GameInteractor::RawAction::UpdateActor(void* refActor) { // Update actor again outside of their normal update cycle. Actor* actor = static_cast(refActor); - + // Sometimes the actor is destroyed in the previous Update, so check if the update function still exists. if (actor->update != NULL) { // Fix for enemies sometimes taking a "fake" hit, where their invincibility timer is @@ -352,7 +359,8 @@ void GameInteractor::RawAction::UpdateActor(void* refActor) { } void GameInteractor::RawAction::TeleportPlayer(int32_t nextEntrance) { - Audio_PlaySoundGeneral(NA_SE_EN_GANON_LAUGH, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_EN_GANON_LAUGH, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); gPlayState->nextEntranceIndex = nextEntrance; gPlayState->transitionTrigger = TRANS_TRIGGER_START; gPlayState->transitionType = TRANS_TYPE_FADE_BLACK; @@ -383,7 +391,7 @@ void GameInteractor::RawAction::SetTimeOfDay(uint32_t time) { void GameInteractor::RawAction::SetCollisionViewer(bool active) { CVarSetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Enabled"), active); CVarSetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Decal"), active); - + if (active) { CVarSetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Scene"), COLVIEW_TRANSPARENT); CVarSetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.BGActors"), COLVIEW_TRANSPARENT); @@ -403,8 +411,8 @@ void GameInteractor::RawAction::SetCosmeticsColor(uint8_t cosmeticCategory, uint newColor.g = 255; newColor.b = 255; newColor.a = 255; - - switch (colorValue) { + + switch (colorValue) { case GI_COLOR_RED: newColor.r = 200; newColor.g = 30; @@ -454,7 +462,7 @@ void GameInteractor::RawAction::SetCosmeticsColor(uint8_t cosmeticCategory, uint break; } - switch (cosmeticCategory) { + switch (cosmeticCategory) { case GI_COSMETICS_TUNICS: CVarSetColor(CVAR_COSMETIC("Link.KokiriTunic.Value"), newColor); CVarSetInteger(CVAR_COSMETIC("Link.KokiriTunic.Changed"), 1); @@ -492,19 +500,13 @@ void GameInteractor::RawAction::SetCosmeticsColor(uint8_t cosmeticCategory, uint } void GameInteractor::RawAction::RandomizeCosmeticsColors(bool excludeBiddingWarColors) { - const char* cvarsToLock[12] = { - CVAR_COSMETIC("Link.KokiriTunic.Locked"), - CVAR_COSMETIC("Link.GoronTunic.Locked"), - CVAR_COSMETIC("Link.ZoraTunic.Locked"), - CVAR_COSMETIC("Navi.EnemyPrimary.Locked"), - CVAR_COSMETIC("Navi.EnemySecondary.Locked"), - CVAR_COSMETIC("Navi.IdlePrimary.Locked"), - CVAR_COSMETIC("Navi.IdleSecondary.Locked"), - CVAR_COSMETIC("Navi.NPCPrimary.Locked"), - CVAR_COSMETIC("Navi.NPCSecondary.Locked"), - CVAR_COSMETIC("Navi.PropsPrimary.Locked"), - CVAR_COSMETIC("Navi.PropsSecondary.Locked"), - CVAR_COSMETIC("Link.Hair.Locked") + const char* cvarsToLock[12] = { + CVAR_COSMETIC("Link.KokiriTunic.Locked"), CVAR_COSMETIC("Link.GoronTunic.Locked"), + CVAR_COSMETIC("Link.ZoraTunic.Locked"), CVAR_COSMETIC("Navi.EnemyPrimary.Locked"), + CVAR_COSMETIC("Navi.EnemySecondary.Locked"), CVAR_COSMETIC("Navi.IdlePrimary.Locked"), + CVAR_COSMETIC("Navi.IdleSecondary.Locked"), CVAR_COSMETIC("Navi.NPCPrimary.Locked"), + CVAR_COSMETIC("Navi.NPCSecondary.Locked"), CVAR_COSMETIC("Navi.PropsPrimary.Locked"), + CVAR_COSMETIC("Navi.PropsSecondary.Locked"), CVAR_COSMETIC("Link.Hair.Locked") }; if (excludeBiddingWarColors) { @@ -530,7 +532,7 @@ void GameInteractor::RawAction::EmulateRandomButtonPress(uint32_t chancePercenta uint32_t emulatedButton; uint32_t randomNumber = rand(); uint32_t possibleButtons[14] = { BTN_CRIGHT, BTN_CLEFT, BTN_CDOWN, BTN_CUP, BTN_R, BTN_L, BTN_DRIGHT, - BTN_DLEFT, BTN_DDOWN, BTN_DUP, BTN_START, BTN_Z, BTN_B, BTN_A }; + BTN_DLEFT, BTN_DDOWN, BTN_DUP, BTN_START, BTN_Z, BTN_B, BTN_A }; emulatedButton = possibleButtons[randomNumber % 14]; @@ -572,12 +574,14 @@ void GameInteractor::RawAction::SetPlayerInvincibility(bool active) { /// Clears the cutscene pointer to a value safe for wrong warps. void GameInteractor::RawAction::ClearCutscenePointer() { - if (!gPlayState) return; - static uint32_t null_cs[] = {0, 0}; + if (!gPlayState) + return; + static uint32_t null_cs[] = { 0, 0 }; gPlayState->csCtx.segment = &null_cs; } -GameInteractionEffectQueryResult GameInteractor::RawAction::SpawnEnemyWithOffset(uint32_t enemyId, int32_t enemyParams) { +GameInteractionEffectQueryResult GameInteractor::RawAction::SpawnEnemyWithOffset(uint32_t enemyId, + int32_t enemyParams) { if (!GameInteractor::CanSpawnActor()) { return GameInteractionEffectQueryResult::TemporarilyNotPossible; @@ -605,8 +609,9 @@ GameInteractionEffectQueryResult GameInteractor::RawAction::SpawnEnemyWithOffset // Don't allow Arwings in certain areas because they cause issues. // Locations: King dodongo room, Morpha room, Twinrova room, Ganondorf room, Fishing pond, Ganon's room // TODO: Swap this to disabling the option in CC options menu instead. - if (sceneNum == SCENE_DODONGOS_CAVERN_BOSS || sceneNum == SCENE_WATER_TEMPLE_BOSS || sceneNum == SCENE_SPIRIT_TEMPLE_BOSS || - sceneNum == SCENE_GANONDORF_BOSS || sceneNum == SCENE_FISHING_POND || sceneNum == SCENE_GANON_BOSS) { + if (sceneNum == SCENE_DODONGOS_CAVERN_BOSS || sceneNum == SCENE_WATER_TEMPLE_BOSS || + sceneNum == SCENE_SPIRIT_TEMPLE_BOSS || sceneNum == SCENE_GANONDORF_BOSS || + sceneNum == SCENE_FISHING_POND || sceneNum == SCENE_GANON_BOSS) { return GameInteractionEffectQueryResult::NotPossible; } } @@ -646,13 +651,15 @@ GameInteractionEffectQueryResult GameInteractor::RawAction::SpawnEnemyWithOffset pos.x += 10; pos.y += 10; pos.z += 10; - if (Actor_Spawn(&gPlayState->actorCtx, gPlayState, enemyId, pos.x, pos.y, pos.z, 0, 0, 0, enemyParams, 0) == NULL) { + if (Actor_Spawn(&gPlayState->actorCtx, gPlayState, enemyId, pos.x, pos.y, pos.z, 0, 0, 0, enemyParams, 0) == + NULL) { return GameInteractionEffectQueryResult::TemporarilyNotPossible; } } return GameInteractionEffectQueryResult::Possible; } else { - if (Actor_Spawn(&gPlayState->actorCtx, gPlayState, enemyId, pos.x, pos.y, pos.z, 0, 0, 0, enemyParams, 0) != NULL) { + if (Actor_Spawn(&gPlayState->actorCtx, gPlayState, enemyId, pos.x, pos.y, pos.z, 0, 0, 0, enemyParams, 0) != + NULL) { return GameInteractionEffectQueryResult::Possible; } } @@ -670,8 +677,9 @@ GameInteractionEffectQueryResult GameInteractor::RawAction::SpawnActor(uint32_t if (actorId == ACTOR_EN_NIW) { // Spawn Cucco and make it angry - EnNiw* cucco = (EnNiw*)Actor_Spawn(&gPlayState->actorCtx, gPlayState, actorId, player->actor.world.pos.x, - player->actor.world.pos.y + 2200, player->actor.world.pos.z, 0, 0, 0, actorParams, 0); + EnNiw* cucco = + (EnNiw*)Actor_Spawn(&gPlayState->actorCtx, gPlayState, actorId, player->actor.world.pos.x, + player->actor.world.pos.y + 2200, player->actor.world.pos.z, 0, 0, 0, actorParams, 0); if (cucco == NULL) { return GameInteractionEffectQueryResult::TemporarilyNotPossible; } @@ -680,8 +688,9 @@ GameInteractionEffectQueryResult GameInteractor::RawAction::SpawnActor(uint32_t return GameInteractionEffectQueryResult::Possible; } else if (actorId == ACTOR_EN_BOM) { // Spawn a bomb, make it explode instantly when params is set to 1 to emulate spawning an explosion - EnBom* bomb = (EnBom*)Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_BOM, player->actor.world.pos.x, - player->actor.world.pos.y + 30, player->actor.world.pos.z, 0, 0, 0, BOMB_BODY, true); + EnBom* bomb = + (EnBom*)Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_BOM, player->actor.world.pos.x, + player->actor.world.pos.y + 30, player->actor.world.pos.z, 0, 0, 0, BOMB_BODY, true); if (bomb == NULL) { return GameInteractionEffectQueryResult::TemporarilyNotPossible; @@ -701,5 +710,4 @@ GameInteractionEffectQueryResult GameInteractor::RawAction::SpawnActor(uint32_t } return GameInteractionEffectQueryResult::TemporarilyNotPossible; - } diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index d6154347c..1c516fc6e 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -136,7 +136,8 @@ typedef enum { // #### `result` // ```c - // !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP) + // !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && + // Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP) // ``` // #### `args` // - None @@ -163,7 +164,8 @@ typedef enum { // #### `result` // ```c - // CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_IRON) && !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER) + // CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_IRON) && + // !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER) // ``` // #### `args` // - None @@ -276,6 +278,22 @@ typedef enum { // - `*EnDoor` VB_CONSUME_SMALL_KEY, + // #### `result` + // ```c + // itemDropped >= 0 && itemDropped < 0x1A + // ``` + // #### `args` + // - `*ObjKibako2` + VB_CRATE_DROP_ITEM, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*ObjKibako2` + VB_CRATE_SETUP_DRAW, + // #### `result` // ```c // !Flags_GetItemGetInf(ITEMGETINF_1C) @@ -286,7 +304,8 @@ typedef enum { // #### `result` // ```c - // gSaveContext.dayTime <= 0xC000 || gSaveContext.dayTime >= 0xE000 || LINK_IS_ADULT || play->sceneNum != SCENE_GRAVEYARD + // gSaveContext.dayTime <= 0xC000 || gSaveContext.dayTime >= 0xE000 || LINK_IS_ADULT || play->sceneNum != + // SCENE_GRAVEYARD // ``` // #### `args` // - `*EnTk` @@ -355,7 +374,8 @@ typedef enum { // #### `result` // ```c - // play->sceneNum == SCENE_LINKS_HOUSE && (!LINK_IS_ADULT || !Flags_GetEventChkInf(EVENTCHKINF_WON_COW_IN_MALONS_RACE) + // play->sceneNum == SCENE_LINKS_HOUSE && (!LINK_IS_ADULT || + // !Flags_GetEventChkInf(EVENTCHKINF_WON_COW_IN_MALONS_RACE) // ``` // #### `args` // - `*EnCow` @@ -974,6 +994,22 @@ typedef enum { // - `*EnDs` VB_GRANNY_TAKE_MONEY, + // ### `result` + // ```c + // false + // ``` + // ### `args` + // - `*EnKusa` + VB_GRASS_DROP_ITEM, + + // ### `result` + // ```c + // true + // ``` + // ### `args` + // - `*EnKusa` + VB_GRASS_SETUP_DRAW, + // #### `result` // ```c // Flags_GetSwitch(play, this->dyna.actor.params & 0x3F) @@ -1290,7 +1326,8 @@ typedef enum { // 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->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | + // PLAYER_STATE1_CLIMBING_LADDER))) && // (player->actor.bgCheckFlags & 1) // ``` // #### `args` @@ -1618,6 +1655,14 @@ typedef enum { // - `*EnRu1` VB_RUTO_WANT_TO_BE_TOSSED_TO_SAPPHIRE, + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `int32_t` (button - promoted from `s16`) + VB_SET_BUTTON_ITEM_FROM_C_BUTTON_SLOT, + // #### `result` // ```c // true @@ -1636,7 +1681,8 @@ typedef enum { // #### `result` // ```c - // (!CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_IRON) && !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER)) && LINK_IS_ADULT + // (!CHECK_OWNED_EQUIP(EQUIP_TYPE_BOOTS, EQUIP_INV_BOOTS_IRON) && + // !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER)) && LINK_IS_ADULT // ``` // #### `args` // - None @@ -1679,6 +1725,15 @@ typedef enum { // - `*VBFishingData` VB_SHOULD_SET_FISHING_RECORD, + // #### `result` + // ```c + // false + // ``` + // #### `args` + // - `*s8 iter2` + // - `s8 sp3C[4]` + VB_SHOULD_QUICKSPIN, + // #### `result` // ```c // (interactedActor->id == ACTOR_BG_TOKI_SWD) && LINK_IS_ADULT @@ -1695,6 +1750,22 @@ typedef enum { // - None VB_SHOW_TITLE_CARD, + // #### `result` + // ```c + // (collectible >= 0) && (collectible <= 0x19 + // ``` + // #### `args` + // - `*ObjKibako` + VB_SMALL_CRATE_DROP_ITEM, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*ObjKibako` + VB_SMALL_CRATE_SETUP_DRAW, + // #### `result` // ```c // false @@ -1794,6 +1865,15 @@ typedef enum { // - `*ShotSun` VB_SPAWN_SONG_FAIRY, + // #### `result` + // ```c + // (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->heldActor != NULL) && + // CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck) + // ``` + // #### `args` + // - `*Input` + VB_THROW_OR_PUT_DOWN_HELD_ITEM, + // #### `result` // ```c // true @@ -1874,6 +1954,15 @@ typedef enum { // - `*PauseContext` VB_TRANSITION_TO_SAVE_SCREEN_ON_DEATH, + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `int32_t` (button - promoted from `u8`) + // - `int32_t` (item - promoted from `u8`) + VB_UPDATE_BOTTLE_ITEM, + // #### `result` // ```c // INV_CONTENT(ITEM_ODD_MUSHROOM) == ITEM_EYEDROPS diff --git a/soh/soh/Enhancements/gameconsole.c b/soh/soh/Enhancements/gameconsole.c index da0c7cf97..6992b7fb4 100644 --- a/soh/soh/Enhancements/gameconsole.c +++ b/soh/soh/Enhancements/gameconsole.c @@ -17,4 +17,5 @@ extern PlayState* gPlayState; -void GameConsole_Init() {} \ No newline at end of file +void GameConsole_Init() { +} \ No newline at end of file diff --git a/soh/soh/Enhancements/gameconsole.h b/soh/soh/Enhancements/gameconsole.h index e9a3634a1..0952baf08 100644 --- a/soh/soh/Enhancements/gameconsole.h +++ b/soh/soh/Enhancements/gameconsole.h @@ -8,22 +8,19 @@ #define MAX_CVARS 2048 #ifdef __cplusplus -extern "C" -{ +extern "C" { #endif -typedef enum -{ +typedef enum { CONSOLECOMMAND_RESULT_SUCCESS, CONSOLECOMMAND_RESULT_INVALIDARGS, CONSOLECOMMAND_RESULT_INVALIDCOMMAND, CONSOLECOMMAND_RESULT_FAILURE } ConsoleCommandResult; -typedef ConsoleCommandResult(*ConsoleCommandFunc)(char** argv, s32 argc); // Returns the number of arguments it read +typedef ConsoleCommandResult (*ConsoleCommandFunc)(char** argv, s32 argc); // Returns the number of arguments it read -typedef struct ConsoleCommand -{ +typedef struct ConsoleCommand { char* name; ConsoleCommandFunc func; char* description; diff --git a/soh/soh/Enhancements/gameplaystats.cpp b/soh/soh/Enhancements/gameplaystats.cpp index af7807b3a..ca360543f 100644 --- a/soh/soh/Enhancements/gameplaystats.cpp +++ b/soh/soh/Enhancements/gameplaystats.cpp @@ -35,7 +35,7 @@ const char* const sceneMappings[] = { "Ice Cavern", "Ganon's Tower", "Gerudo Training Ground", - "Theives' Hideout", + "Thieves' Hideout", "Inside Ganon's Castle", "Tower Collapse", "Castle Collapse", @@ -124,7 +124,7 @@ const char* const sceneMappings[] = { "Goron City", "Lon Lon Ranch", "Outside Ganon's Castle", - //Debug Rooms + // Debug Rooms "Test Map", "Test Room", "Depth Test", @@ -189,7 +189,7 @@ const char* const countMappings[] = { "Poe Sisters:", "Redead:", "Shabom:", - "Shellblade:", + "Shell Blade:", "Skull Kid:", "Skulltula:", "Skulltula (Big):", @@ -230,15 +230,15 @@ const char* const countMappings[] = { "Start:", }; -#define COLOR_WHITE ImVec4(1.00f, 1.00f, 1.00f, 1.00f) -#define COLOR_RED ImVec4(1.00f, 0.00f, 0.00f, 1.00f) -#define COLOR_GREEN ImVec4(0.10f, 1.00f, 0.10f, 1.00f) -#define COLOR_BLUE ImVec4(0.00f, 0.33f, 1.00f, 1.00f) -#define COLOR_PURPLE ImVec4(0.54f, 0.19f, 0.89f, 1.00f) -#define COLOR_YELLOW ImVec4(1.00f, 1.00f, 0.00f, 1.00f) -#define COLOR_ORANGE ImVec4(1.00f, 0.67f, 0.11f, 1.00f) +#define COLOR_WHITE ImVec4(1.00f, 1.00f, 1.00f, 1.00f) +#define COLOR_RED ImVec4(1.00f, 0.00f, 0.00f, 1.00f) +#define COLOR_GREEN ImVec4(0.10f, 1.00f, 0.10f, 1.00f) +#define COLOR_BLUE ImVec4(0.00f, 0.33f, 1.00f, 1.00f) +#define COLOR_PURPLE ImVec4(0.54f, 0.19f, 0.89f, 1.00f) +#define COLOR_YELLOW ImVec4(1.00f, 1.00f, 0.00f, 1.00f) +#define COLOR_ORANGE ImVec4(1.00f, 0.67f, 0.11f, 1.00f) #define COLOR_LIGHT_BLUE ImVec4(0.00f, 0.88f, 1.00f, 1.00f) -#define COLOR_GREY ImVec4(0.78f, 0.78f, 0.78f, 1.00f) +#define COLOR_GREY ImVec4(0.78f, 0.78f, 0.78f, 1.00f) char itemTimestampDisplayName[TIMESTAMP_MAX][21] = { "" }; ImVec4 itemTimestampDisplayColor[TIMESTAMP_MAX]; @@ -248,14 +248,14 @@ typedef struct { u32 time; ImVec4 color; bool isRoom; -}TimestampInfo; +} TimestampInfo; // Timestamps are an array of structs, each with a name, time, and color -// Names and colors are set up at the bottom of this file -// Times are stored in gSaveContext.ship.stats.itemTimestamp +// Names and colors are set up at the bottom of this file. +// Times are stored in gSaveContext.ship.stats.itemTimestamp. TimestampInfo itemTimestampDisplay[TIMESTAMP_MAX]; TimestampInfo sceneTimestampDisplay[8191]; -//std::vector sceneTimestampDisplay; +// std::vector sceneTimestampDisplay; std::string formatTimestampGameplayStat(uint32_t value) { uint32_t sec = value / 10; @@ -302,37 +302,38 @@ void LoadStatsVersion1() { SaveManager::Instance->LoadData("fileCreatedAt", gSaveContext.ship.stats.fileCreatedAt); SaveManager::Instance->LoadData("playTimer", gSaveContext.ship.stats.playTimer); SaveManager::Instance->LoadData("pauseTimer", gSaveContext.ship.stats.pauseTimer); - SaveManager::Instance->LoadArray("itemTimestamps", ARRAY_COUNT(gSaveContext.ship.stats.itemTimestamp), [](size_t i) { - SaveManager::Instance->LoadData("", gSaveContext.ship.stats.itemTimestamp[i]); - }); - SaveManager::Instance->LoadArray("sceneTimestamps", ARRAY_COUNT(gSaveContext.ship.stats.sceneTimestamps), [&](size_t i) { - SaveManager::Instance->LoadStruct("", [&]() { - int scene, room, sceneTime, roomTime, isRoom; - SaveManager::Instance->LoadData("scene", scene); - SaveManager::Instance->LoadData("room", room); - SaveManager::Instance->LoadData("sceneTime", sceneTime); - SaveManager::Instance->LoadData("roomTime", roomTime); - SaveManager::Instance->LoadData("isRoom", isRoom); - if (scene == 0 && room == 0 && sceneTime == 0 && roomTime == 0 && isRoom == 0) { - return; - } - gSaveContext.ship.stats.sceneTimestamps[i].scene = scene; - gSaveContext.ship.stats.sceneTimestamps[i].room = room; - gSaveContext.ship.stats.sceneTimestamps[i].sceneTime = sceneTime; - gSaveContext.ship.stats.sceneTimestamps[i].roomTime = roomTime; - gSaveContext.ship.stats.sceneTimestamps[i].isRoom = isRoom; + SaveManager::Instance->LoadArray( + "itemTimestamps", ARRAY_COUNT(gSaveContext.ship.stats.itemTimestamp), + [](size_t i) { SaveManager::Instance->LoadData("", gSaveContext.ship.stats.itemTimestamp[i]); }); + SaveManager::Instance->LoadArray( + "sceneTimestamps", ARRAY_COUNT(gSaveContext.ship.stats.sceneTimestamps), [&](size_t i) { + SaveManager::Instance->LoadStruct("", [&]() { + int scene, room, sceneTime, roomTime, isRoom; + SaveManager::Instance->LoadData("scene", scene); + SaveManager::Instance->LoadData("room", room); + SaveManager::Instance->LoadData("sceneTime", sceneTime); + SaveManager::Instance->LoadData("roomTime", roomTime); + SaveManager::Instance->LoadData("isRoom", isRoom); + if (scene == 0 && room == 0 && sceneTime == 0 && roomTime == 0 && isRoom == 0) { + return; + } + gSaveContext.ship.stats.sceneTimestamps[i].scene = scene; + gSaveContext.ship.stats.sceneTimestamps[i].room = room; + gSaveContext.ship.stats.sceneTimestamps[i].sceneTime = sceneTime; + gSaveContext.ship.stats.sceneTimestamps[i].roomTime = roomTime; + gSaveContext.ship.stats.sceneTimestamps[i].isRoom = isRoom; + }); }); - }); SaveManager::Instance->LoadData("tsIdx", gSaveContext.ship.stats.tsIdx); SaveManager::Instance->LoadArray("counts", ARRAY_COUNT(gSaveContext.ship.stats.count), [](size_t i) { SaveManager::Instance->LoadData("", gSaveContext.ship.stats.count[i]); }); - SaveManager::Instance->LoadArray("scenesDiscovered", ARRAY_COUNT(gSaveContext.ship.stats.scenesDiscovered), [](size_t i) { - SaveManager::Instance->LoadData("", gSaveContext.ship.stats.scenesDiscovered[i]); - }); - SaveManager::Instance->LoadArray("entrancesDiscovered", ARRAY_COUNT(gSaveContext.ship.stats.entrancesDiscovered), [](size_t i) { - SaveManager::Instance->LoadData("", gSaveContext.ship.stats.entrancesDiscovered[i]); - }); + SaveManager::Instance->LoadArray( + "scenesDiscovered", ARRAY_COUNT(gSaveContext.ship.stats.scenesDiscovered), + [](size_t i) { SaveManager::Instance->LoadData("", gSaveContext.ship.stats.scenesDiscovered[i]); }); + SaveManager::Instance->LoadArray( + "entrancesDiscovered", ARRAY_COUNT(gSaveContext.ship.stats.entrancesDiscovered), + [](size_t i) { SaveManager::Instance->LoadData("", gSaveContext.ship.stats.entrancesDiscovered[i]); }); } void SaveStats(SaveContext* saveContext, int sectionID, bool fullSave) { @@ -350,30 +351,32 @@ void SaveStats(SaveContext* saveContext, int sectionID, bool fullSave) { SaveManager::Instance->SaveData("fileCreatedAt", saveContext->ship.stats.fileCreatedAt); SaveManager::Instance->SaveData("playTimer", saveContext->ship.stats.playTimer); SaveManager::Instance->SaveData("pauseTimer", saveContext->ship.stats.pauseTimer); - SaveManager::Instance->SaveArray("itemTimestamps", ARRAY_COUNT(saveContext->ship.stats.itemTimestamp), [&](size_t i) { - SaveManager::Instance->SaveData("", saveContext->ship.stats.itemTimestamp[i]); - }); - SaveManager::Instance->SaveArray("sceneTimestamps", ARRAY_COUNT(saveContext->ship.stats.sceneTimestamps), [&](size_t i) { - if (saveContext->ship.stats.sceneTimestamps[i].scene != 254 && saveContext->ship.stats.sceneTimestamps[i].room != 254) { - SaveManager::Instance->SaveStruct("", [&]() { - SaveManager::Instance->SaveData("scene", saveContext->ship.stats.sceneTimestamps[i].scene); - SaveManager::Instance->SaveData("room", saveContext->ship.stats.sceneTimestamps[i].room); - SaveManager::Instance->SaveData("sceneTime", saveContext->ship.stats.sceneTimestamps[i].sceneTime); - SaveManager::Instance->SaveData("roomTime", saveContext->ship.stats.sceneTimestamps[i].roomTime); - SaveManager::Instance->SaveData("isRoom", saveContext->ship.stats.sceneTimestamps[i].isRoom); - }); - } - }); + SaveManager::Instance->SaveArray( + "itemTimestamps", ARRAY_COUNT(saveContext->ship.stats.itemTimestamp), + [&](size_t i) { SaveManager::Instance->SaveData("", saveContext->ship.stats.itemTimestamp[i]); }); + SaveManager::Instance->SaveArray( + "sceneTimestamps", ARRAY_COUNT(saveContext->ship.stats.sceneTimestamps), [&](size_t i) { + if (saveContext->ship.stats.sceneTimestamps[i].scene != 254 && + saveContext->ship.stats.sceneTimestamps[i].room != 254) { + SaveManager::Instance->SaveStruct("", [&]() { + SaveManager::Instance->SaveData("scene", saveContext->ship.stats.sceneTimestamps[i].scene); + SaveManager::Instance->SaveData("room", saveContext->ship.stats.sceneTimestamps[i].room); + SaveManager::Instance->SaveData("sceneTime", saveContext->ship.stats.sceneTimestamps[i].sceneTime); + SaveManager::Instance->SaveData("roomTime", saveContext->ship.stats.sceneTimestamps[i].roomTime); + SaveManager::Instance->SaveData("isRoom", saveContext->ship.stats.sceneTimestamps[i].isRoom); + }); + } + }); SaveManager::Instance->SaveData("tsIdx", saveContext->ship.stats.tsIdx); SaveManager::Instance->SaveArray("counts", ARRAY_COUNT(saveContext->ship.stats.count), [&](size_t i) { SaveManager::Instance->SaveData("", saveContext->ship.stats.count[i]); }); - SaveManager::Instance->SaveArray("scenesDiscovered", ARRAY_COUNT(saveContext->ship.stats.scenesDiscovered), [&](size_t i) { - SaveManager::Instance->SaveData("", saveContext->ship.stats.scenesDiscovered[i]); - }); - SaveManager::Instance->SaveArray("entrancesDiscovered", ARRAY_COUNT(saveContext->ship.stats.entrancesDiscovered), [&](size_t i) { - SaveManager::Instance->SaveData("", saveContext->ship.stats.entrancesDiscovered[i]); - }); + SaveManager::Instance->SaveArray( + "scenesDiscovered", ARRAY_COUNT(saveContext->ship.stats.scenesDiscovered), + [&](size_t i) { SaveManager::Instance->SaveData("", saveContext->ship.stats.scenesDiscovered[i]); }); + SaveManager::Instance->SaveArray( + "entrancesDiscovered", ARRAY_COUNT(saveContext->ship.stats.entrancesDiscovered), + [&](size_t i) { SaveManager::Instance->SaveData("", saveContext->ship.stats.entrancesDiscovered[i]); }); } void GameplayStatsRow(const char* label, const std::string& value, ImVec4 color = COLOR_WHITE, @@ -391,10 +394,10 @@ void GameplayStatsRow(const char* label, const std::string& value, ImVec4 color } bool compareTimestampInfoByTime(const TimestampInfo& a, const TimestampInfo& b) { - return CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.ReverseTimestamps"), 0) ? a.time > b.time : a.time < b.time; + return CVarGetInteger(CVAR_GAMEPLAY_STATS("ReverseTimestamps"), 0) ? a.time > b.time : a.time < b.time; } -const char* ResolveSceneID(int sceneID, int roomID){ +const char* ResolveSceneID(int sceneID, int roomID) { if (sceneID == SCENE_GROTTOS) { switch (roomID) { case 0: @@ -427,7 +430,7 @@ const char* ResolveSceneID(int sceneID, int roomID){ return "Big Skulltula Grotto"; }; } else if (sceneID == SCENE_WINDMILL_AND_DAMPES_GRAVE) { - //Only the last room of Dampe's Grave (rm 6) is considered the windmill + // Only the last room of Dampe's Grave (rm 6) is considered the windmill. return roomID == 6 ? "Windmill" : "Dampe's Grave"; } else if (sceneID < SCENE_ID_MAX) { return sceneMappings[sceneID]; @@ -440,7 +443,7 @@ void DrawGameplayStatsHeader() { ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, { 4.0f, 4.0f }); ImGui::BeginTable("gameplayStatsHeader", 1, ImGuiTableFlags_BordersOuter); ImGui::TableSetupColumn("stat", ImGuiTableColumnFlags_WidthStretch); - //if tag is empty (not a release build) + // if tag is empty (not a release build) if (gGitCommitTag[0] == 0) { GameplayStatsRow("Git Branch:", (char*)gGitBranch); GameplayStatsRow("Git Commit Hash:", (char*)gGitCommitHash); @@ -448,21 +451,30 @@ void DrawGameplayStatsHeader() { GameplayStatsRow("Build Version:", (char*)gBuildVersion); } if (gSaveContext.ship.stats.rtaTiming) { - GameplayStatsRow("Total Time (RTA):", formatTimestampGameplayStat(GAMEPLAYSTAT_TOTAL_TIME), gSaveContext.ship.stats.gameComplete ? COLOR_GREEN : COLOR_WHITE); + GameplayStatsRow("Total Time (RTA):", formatTimestampGameplayStat(GAMEPLAYSTAT_TOTAL_TIME), + gSaveContext.ship.stats.gameComplete ? COLOR_GREEN : COLOR_WHITE); } else { - GameplayStatsRow("Total Game Time:", formatTimestampGameplayStat(GAMEPLAYSTAT_TOTAL_TIME), gSaveContext.ship.stats.gameComplete ? COLOR_GREEN : COLOR_WHITE); + GameplayStatsRow("Total Game Time:", formatTimestampGameplayStat(GAMEPLAYSTAT_TOTAL_TIME), + gSaveContext.ship.stats.gameComplete ? COLOR_GREEN : COLOR_WHITE); } - if (CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.ShowAdditionalTimers"), 0)) { // !Only display total game time - GameplayStatsRow("Gameplay Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.playTimer / 2), COLOR_GREY); - GameplayStatsRow("Pause Menu Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.pauseTimer / 3), COLOR_GREY); - GameplayStatsRow("Time in scene:", formatTimestampGameplayStat(gSaveContext.ship.stats.sceneTimer / 2), COLOR_LIGHT_BLUE); - GameplayStatsRow("Time in room:", formatTimestampGameplayStat(gSaveContext.ship.stats.roomTimer / 2), COLOR_LIGHT_BLUE); + if (CVarGetInteger(CVAR_GAMEPLAY_STATS("ShowAdditionalTimers"), 0)) { // !Only display total game time + GameplayStatsRow("Gameplay Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.playTimer / 2), + COLOR_GREY); + GameplayStatsRow("Pause Menu Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.pauseTimer / 3), + COLOR_GREY); + GameplayStatsRow("Time in scene:", formatTimestampGameplayStat(gSaveContext.ship.stats.sceneTimer / 2), + COLOR_LIGHT_BLUE); + GameplayStatsRow("Time in room:", formatTimestampGameplayStat(gSaveContext.ship.stats.roomTimer / 2), + COLOR_LIGHT_BLUE); } - if (gPlayState != NULL && CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.ShowDebugInfo"), 0)) { // && display debug info + if (gPlayState != NULL && CVarGetInteger(CVAR_GAMEPLAY_STATS("ShowDebugInfo"), 0)) { // && display debug info GameplayStatsRow("play->sceneNum:", formatHexGameplayStat(gPlayState->sceneNum), COLOR_YELLOW); - GameplayStatsRow("gSaveContext.entranceIndex:", formatHexGameplayStat(gSaveContext.entranceIndex), COLOR_YELLOW); - GameplayStatsRow("gSaveContext.cutsceneIndex:", formatHexOnlyGameplayStat(gSaveContext.cutsceneIndex), COLOR_YELLOW); - GameplayStatsRow("play->roomCtx.curRoom.num:", formatIntGameplayStat(gPlayState->roomCtx.curRoom.num), COLOR_YELLOW); + GameplayStatsRow("gSaveContext.entranceIndex:", formatHexGameplayStat(gSaveContext.entranceIndex), + COLOR_YELLOW); + GameplayStatsRow("gSaveContext.cutsceneIndex:", formatHexOnlyGameplayStat(gSaveContext.cutsceneIndex), + COLOR_YELLOW); + GameplayStatsRow("play->roomCtx.curRoom.num:", formatIntGameplayStat(gPlayState->roomCtx.curRoom.num), + COLOR_YELLOW); } ImGui::EndTable(); ImGui::PopStyleVar(1); @@ -484,12 +496,12 @@ void DrawGameplayStatsTimestampsTab() { for (int i = 0; i < TIMESTAMP_MAX; i++) { // To be shown, the entry must have a non-zero time and a string for its display name if (itemTimestampDisplay[i].time > 0 && strnlen(itemTimestampDisplay[i].name, 21) > 1) { - GameplayStatsRow(itemTimestampDisplay[i].name, formatTimestampGameplayStat(itemTimestampDisplay[i].time), itemTimestampDisplay[i].color); + GameplayStatsRow(itemTimestampDisplay[i].name, formatTimestampGameplayStat(itemTimestampDisplay[i].time), + itemTimestampDisplay[i].color); } } ImGui::EndTable(); ImGui::PopStyleVar(1); - } void DrawGameplayStatsCountsTab() { @@ -520,7 +532,8 @@ void DrawGameplayStatsCountsTab() { ImGui::TableSetupColumn("stat", ImGuiTableColumnFlags_WidthStretch); GameplayStatsRow("Enemies Defeated:", formatIntGameplayStat(enemiesDefeated)); if (enemiesDefeated > 0) { - ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); if (ImGui::TreeNodeEx("Enemy Details...", ImGuiTreeNodeFlags_NoTreePushOnOpen)) { for (int i = COUNT_ENEMIES_DEFEATED_ANUBIS; i <= COUNT_ENEMIES_DEFEATED_WOLFOS; i++) { if (i == COUNT_ENEMIES_DEFEATED_FLOORMASTER) { @@ -537,7 +550,8 @@ void DrawGameplayStatsCountsTab() { GameplayStatsRow("Chests Opened:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_CHESTS_OPENED])); GameplayStatsRow("Ammo Used:", formatIntGameplayStat(ammoUsed)); if (ammoUsed > 0) { - ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); if (ImGui::TreeNodeEx("Ammo Details...", ImGuiTreeNodeFlags_NoTreePushOnOpen)) { for (int i = COUNT_AMMO_USED_STICK; i <= COUNT_AMMO_USED_BEAN; i++) { GameplayStatsRow(countMappings[i], formatIntGameplayStat(gSaveContext.ship.stats.count[i])); @@ -548,8 +562,10 @@ void DrawGameplayStatsCountsTab() { GameplayStatsRow("Sword Swings:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_SWORD_SWINGS])); GameplayStatsRow("Steps Taken:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_STEPS])); // If using MM Bunny Hood enhancement, show how long it's been equipped (not counting pause time) - if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA || gSaveContext.ship.stats.count[COUNT_TIME_BUNNY_HOOD] > 0) { - GameplayStatsRow("Bunny Hood Time:", formatTimestampGameplayStat(gSaveContext.ship.stats.count[COUNT_TIME_BUNNY_HOOD] / 2)); + if (CVarGetInteger(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA || + gSaveContext.ship.stats.count[COUNT_TIME_BUNNY_HOOD] > 0) { + GameplayStatsRow("Bunny Hood Time:", + formatTimestampGameplayStat(gSaveContext.ship.stats.count[COUNT_TIME_BUNNY_HOOD] / 2)); } GameplayStatsRow("Rolls:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_ROLLS])); GameplayStatsRow("Bonks:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_BONKS])); @@ -561,7 +577,8 @@ void DrawGameplayStatsCountsTab() { GameplayStatsRow("Bushes Cut:", formatIntGameplayStat(gSaveContext.ship.stats.count[COUNT_BUSHES_CUT])); GameplayStatsRow("Buttons Pressed:", formatIntGameplayStat(buttonPresses)); if (buttonPresses > 0) { - ImGui::TableNextRow(); ImGui::TableNextColumn(); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); if (ImGui::TreeNodeEx("Buttons...", ImGuiTreeNodeFlags_NoTreePushOnOpen)) { for (int i = COUNT_BUTTON_PRESSES_A; i <= COUNT_BUTTON_PRESSES_START; i++) { GameplayStatsRow(countMappings[i], formatIntGameplayStat(gSaveContext.ship.stats.count[i])); @@ -574,16 +591,19 @@ void DrawGameplayStatsCountsTab() { void DrawGameplayStatsBreakdownTab() { for (int i = 0; i < gSaveContext.ship.stats.tsIdx; i++) { - std::string sceneName = ResolveSceneID(gSaveContext.ship.stats.sceneTimestamps[i].scene, gSaveContext.ship.stats.sceneTimestamps[i].room); + std::string sceneName = ResolveSceneID(gSaveContext.ship.stats.sceneTimestamps[i].scene, + gSaveContext.ship.stats.sceneTimestamps[i].room); std::string name; - if (CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) && gSaveContext.ship.stats.sceneTimestamps[i].scene != SCENE_GROTTOS) { + if (CVarGetInteger(CVAR_GAMEPLAY_STATS("RoomBreakdown"), 0) && + gSaveContext.ship.stats.sceneTimestamps[i].scene != SCENE_GROTTOS) { name = fmt::format("{:s} Room {:d}", sceneName, gSaveContext.ship.stats.sceneTimestamps[i].room); } else { name = sceneName; } strcpy(sceneTimestampDisplay[i].name, name.c_str()); - sceneTimestampDisplay[i].time = CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) ? - gSaveContext.ship.stats.sceneTimestamps[i].roomTime : gSaveContext.ship.stats.sceneTimestamps[i].sceneTime; + sceneTimestampDisplay[i].time = CVarGetInteger(CVAR_GAMEPLAY_STATS("RoomBreakdown"), 0) + ? gSaveContext.ship.stats.sceneTimestamps[i].roomTime + : gSaveContext.ship.stats.sceneTimestamps[i].sceneTime; sceneTimestampDisplay[i].color = COLOR_GREY; sceneTimestampDisplay[i].isRoom = gSaveContext.ship.stats.sceneTimestamps[i].isRoom; } @@ -593,14 +613,16 @@ void DrawGameplayStatsBreakdownTab() { ImGui::TableSetupColumn("stat", ImGuiTableColumnFlags_WidthStretch); for (int i = 0; i < gSaveContext.ship.stats.tsIdx; i++) { TimestampInfo tsInfo = sceneTimestampDisplay[i]; - bool canShow = !tsInfo.isRoom || CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0); + bool canShow = !tsInfo.isRoom || CVarGetInteger(CVAR_GAMEPLAY_STATS("RoomBreakdown"), 0); if (tsInfo.time > 0 && strnlen(tsInfo.name, 40) > 1 && canShow) { GameplayStatsRow(tsInfo.name, formatTimestampGameplayStat(tsInfo.time), tsInfo.color); } } std::string toPass; - if (CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) && gSaveContext.ship.stats.sceneNum != SCENE_GROTTOS) { - toPass = fmt::format("{:s} Room {:d}", ResolveSceneID(gSaveContext.ship.stats.sceneNum, gSaveContext.ship.stats.roomNum), gSaveContext.ship.stats.roomNum); + if (CVarGetInteger(CVAR_GAMEPLAY_STATS("RoomBreakdown"), 0) && gSaveContext.ship.stats.sceneNum != SCENE_GROTTOS) { + toPass = fmt::format("{:s} Room {:d}", + ResolveSceneID(gSaveContext.ship.stats.sceneNum, gSaveContext.ship.stats.roomNum), + gSaveContext.ship.stats.roomNum); } else { toPass = ResolveSceneID(gSaveContext.ship.stats.sceneNum, gSaveContext.ship.stats.roomNum); } @@ -610,34 +632,36 @@ void DrawGameplayStatsBreakdownTab() { } void DrawGameplayStatsOptionsTab() { - UIWidgets::CVarCheckbox("Show in-game total timer", CVAR_ENHANCEMENT("GameplayStats.ShowIngameTimer"), - UIWidgets::CheckboxOptions() - .Tooltip("Keep track of the timer as an in-game HUD element. The position of the " - "timer can be changed in the Cosmetics Editor.") - .Color(THEME_COLOR)); - UIWidgets::CVarCheckbox("Show latest timestamps on top", CVAR_ENHANCEMENT("GameplayStats.ReverseTimestamps"), - UIWidgets::CheckboxOptions().Color(THEME_COLOR)); - UIWidgets::CVarCheckbox("Room Breakdown", CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), - UIWidgets::CheckboxOptions() - .Tooltip("Allows a more in-depth perspective of time spent in a certain map.") - .Color(THEME_COLOR)); - UIWidgets::CVarCheckbox("RTA Timing on new files", CVAR_ENHANCEMENT("GameplayStats.RTATiming"), - UIWidgets::CheckboxOptions() - .Tooltip("Timestamps are relative to starting timestamp rather than in game time, " - "usually necessary for races/speedruns.\n\n" - "Starting timestamp is on first non-c-up input after intro cutscene.\n\n" - "NOTE: THIS NEEDS TO BE SET BEFORE CREATING A FILE TO TAKE EFFECT") - .Color(THEME_COLOR)); - UIWidgets::CVarCheckbox("Show additional detail timers", CVAR_ENHANCEMENT("GameplayStats.ShowAdditionalTimers"), - UIWidgets::CheckboxOptions().Color(THEME_COLOR)); - UIWidgets::CVarCheckbox("Show Debug Info", CVAR_ENHANCEMENT("GameplayStats.ShowDebugInfo"), - UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CVarCheckbox("Show in-game total timer", CVAR_GAMEPLAY_STATS("ShowIngameTimer"), + UIWidgets::CheckboxOptions() + .Tooltip("Keep track of the timer as an in-game HUD element. The position of the " + "timer can be changed in the Cosmetics Editor.") + .Color(THEME_COLOR)); + UIWidgets::CVarCheckbox("Show latest timestamps on top", CVAR_GAMEPLAY_STATS("ReverseTimestamps"), + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CVarCheckbox("Room Breakdown", CVAR_GAMEPLAY_STATS("RoomBreakdown"), + UIWidgets::CheckboxOptions() + .Tooltip("Allows a more in-depth perspective of time spent in a certain map.") + .Color(THEME_COLOR)); + UIWidgets::CVarCheckbox("RTA Timing on new files", CVAR_GAMEPLAY_STATS("RTATiming"), + UIWidgets::CheckboxOptions() + .Tooltip("Timestamps are relative to starting timestamp rather than in game time, " + "usually necessary for races/speedruns.\n\n" + "Starting timestamp is on first non-C-up input after intro cutscene.\n\n" + "NOTE: THIS NEEDS TO BE SET BEFORE CREATING A FILE TO TAKE EFFECT") + .Color(THEME_COLOR)); + UIWidgets::CVarCheckbox("Show additional detail timers", CVAR_GAMEPLAY_STATS("ShowAdditionalTimers"), + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CVarCheckbox("Show Debug Info", CVAR_GAMEPLAY_STATS("ShowDebugInfo"), + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); } void GameplayStatsWindow::DrawElement() { + ImGui::PushFont(OTRGlobals::Instance->fontMonoLarger); DrawGameplayStatsHeader(); UIWidgets::PushStyleTabs(THEME_COLOR); + if (ImGui::BeginTabBar("Stats", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) { if (ImGui::BeginTabItem("Timestamps")) { DrawGameplayStatsTimestampsTab(); @@ -657,7 +681,9 @@ void GameplayStatsWindow::DrawElement() { } ImGui::EndTabBar(); } + UIWidgets::PopStyleTabs(); + ImGui::PopFont(); ImGui::Text("Note: Gameplay stats are saved to the current file and will be\nlost if you quit without saving."); } @@ -667,7 +693,7 @@ void InitStats(bool isDebug) { for (int dungeon = 0; dungeon < ARRAY_COUNT(gSaveContext.ship.stats.dungeonKeys); dungeon++) { gSaveContext.ship.stats.dungeonKeys[dungeon] = isDebug ? 8 : 0; } - gSaveContext.ship.stats.rtaTiming = CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RTATiming"), 0); + gSaveContext.ship.stats.rtaTiming = CVarGetInteger(CVAR_GAMEPLAY_STATS("RTATiming"), 0); gSaveContext.ship.stats.fileCreatedAt = 0; gSaveContext.ship.stats.playTimer = 0; gSaveContext.ship.stats.pauseTimer = 0; @@ -689,7 +715,8 @@ void InitStats(bool isDebug) { for (int scenesIdx = 0; scenesIdx < ARRAY_COUNT(gSaveContext.ship.stats.scenesDiscovered); scenesIdx++) { gSaveContext.ship.stats.scenesDiscovered[scenesIdx] = 0; } - for (int entrancesIdx = 0; entrancesIdx < ARRAY_COUNT(gSaveContext.ship.stats.entrancesDiscovered); entrancesIdx++) { + for (int entrancesIdx = 0; entrancesIdx < ARRAY_COUNT(gSaveContext.ship.stats.entrancesDiscovered); + entrancesIdx++) { gSaveContext.ship.stats.entrancesDiscovered[entrancesIdx] = 0; } @@ -705,6 +732,7 @@ void SetupDisplayNames() { // To add a timestamp for an item or event, add it to this list and ensure // it has a corresponding entry in the enum (see gameplaystats.h) + // clang-format off strcpy(itemTimestampDisplayName[ITEM_BOW], "Fairy Bow: "); strcpy(itemTimestampDisplayName[ITEM_ARROW_FIRE], "Fire Arrows: "); strcpy(itemTimestampDisplayName[ITEM_DINS_FIRE], "Din's Fire: "); @@ -795,6 +823,7 @@ void SetupDisplayNames() { strcpy(itemTimestampDisplayName[TIMESTAMP_BOSSRUSH_FINISH], "Boss Rush Finished: "); strcpy(itemTimestampDisplayName[TIMESTAMP_FOUND_GREG], "Greg Found: "); strcpy(itemTimestampDisplayName[TIMESTAMP_TRIFORCE_COMPLETED], "Triforce Completed: "); + // clang-format on } void SetupDisplayColors() { @@ -863,9 +892,9 @@ void GameplayStatsWindow::InitElement() { SetupDisplayColors(); SaveManager::Instance->AddLoadFunction("sohStats", 1, LoadStatsVersion1); - // Add main section save, no parent + // Add main section save, no parent. SaveManager::Instance->AddSaveFunction("sohStats", 1, SaveStats, true, SECTION_PARENT_NONE); - // Add subsections, parent of "sohStats". Not sure how to do this without the redundant references to "SaveStats" + // Add subsections, parent of "sohStats". Not sure how to do this without the redundant references to "SaveStats". SaveManager::Instance->AddSaveFunction("entrances", 1, SaveStats, false, SECTION_ID_STATS); SaveManager::Instance->AddSaveFunction("scenes", 1, SaveStats, false, SECTION_ID_STATS); SaveManager::Instance->AddInitFunction(InitStats); diff --git a/soh/soh/Enhancements/gameplaystats.h b/soh/soh/Enhancements/gameplaystats.h index 81190c01e..1f89cb3a4 100644 --- a/soh/soh/Enhancements/gameplaystats.h +++ b/soh/soh/Enhancements/gameplaystats.h @@ -6,30 +6,32 @@ #ifdef __cplusplus extern "C" { #endif - uint64_t GetUnixTimestamp(void); - char* GameplayStats_GetCurrentTime(); +uint64_t GetUnixTimestamp(void); +char* GameplayStats_GetCurrentTime(); #ifdef __cplusplus }; #endif // When using RTA timing - // get the diff since the save was created, - // unless the game is complete in which we use the defeated ganon timestamp +// get the diff since the save was created, +// unless the game is complete in which we use the defeated ganon timestamp // When not using RTA timing - // Total gameplay time is tracked in tenths of seconds - // I.E. game time counts frames at 20fps/2, pause time counts frames at 30fps/3 - // Frame counts in z_play.c and z_kaleido_scope_call.c -#define GAMEPLAYSTAT_TOTAL_TIME (gSaveContext.ship.stats.rtaTiming ?\ - (!gSaveContext.ship.stats.gameComplete ?\ - (!gSaveContext.ship.stats.fileCreatedAt ? 0 : ((GetUnixTimestamp() - gSaveContext.ship.stats.fileCreatedAt) / 100)) :\ - (gSaveContext.ship.stats.itemTimestamp[TIMESTAMP_DEFEAT_GANON] \ +// Total gameplay time is tracked in tenths of seconds +// I.E. game time counts frames at 20fps/2, pause time counts frames at 30fps/3 +// Frame counts in z_play.c and z_kaleido_scope_call.c +#define GAMEPLAYSTAT_TOTAL_TIME \ + (gSaveContext.ship.stats.rtaTiming \ + ? (!gSaveContext.ship.stats.gameComplete \ + ? (!gSaveContext.ship.stats.fileCreatedAt \ + ? 0 \ + : ((GetUnixTimestamp() - gSaveContext.ship.stats.fileCreatedAt) / 100)) \ + : (gSaveContext.ship.stats.itemTimestamp[TIMESTAMP_DEFEAT_GANON] \ ? gSaveContext.ship.stats.itemTimestamp[TIMESTAMP_DEFEAT_GANON] \ : gSaveContext.ship.stats.itemTimestamp[TIMESTAMP_TRIFORCE_COMPLETED])) \ - :\ - (gSaveContext.ship.stats.playTimer / 2 + gSaveContext.ship.stats.pauseTimer / 3)) -#define CURRENT_MODE_TIMER (CVarGetInteger(CVAR_ENHANCEMENT("GameplayStats.RoomBreakdown"), 0) ?\ - gSaveContext.ship.stats.roomTimer :\ - gSaveContext.ship.stats.sceneTimer) + : (gSaveContext.ship.stats.playTimer / 2 + gSaveContext.ship.stats.pauseTimer / 3)) +#define CURRENT_MODE_TIMER \ + (CVarGetInteger(CVAR_GAMEPLAY_STATS("RoomBreakdown"), 0) ? gSaveContext.ship.stats.roomTimer \ + : gSaveContext.ship.stats.sceneTimer) void InitStatTracker(); @@ -37,22 +39,22 @@ typedef enum { // 0x00 to 0x9B (0 to 155) used for getting items, // piggybacked off enum "ItemID" in z64item.h - /* 0xA0 */ TIMESTAMP_DEFEAT_GOHMA = 0xA0, // z_boss_goma.c - /* 0xA1 */ TIMESTAMP_DEFEAT_KING_DODONGO, // z_boss_dodongo.c - /* 0xA2 */ TIMESTAMP_DEFEAT_BARINADE, // z_boss_va.c - /* 0xA3 */ TIMESTAMP_DEFEAT_PHANTOM_GANON, // z_boss_ganondrof.c - /* 0xA4 */ TIMESTAMP_DEFEAT_VOLVAGIA, // z_boss_fd2.c - /* 0xA5 */ TIMESTAMP_DEFEAT_MORPHA, // z_boss_mo.c - /* 0xA6 */ TIMESTAMP_DEFEAT_BONGO_BONGO, // z_boss_sst.c - /* 0xA7 */ TIMESTAMP_DEFEAT_TWINROVA, // z_boss_tw.c - /* 0xA8 */ TIMESTAMP_DEFEAT_GANONDORF, // z_boss_ganon.c - /* 0xA9 */ TIMESTAMP_DEFEAT_GANON, // z_boss_ganon2.c - /* 0xA9 */ TIMESTAMP_BOSSRUSH_FINISH, // z_boss_ganon2.c - /* 0xAA */ TIMESTAMP_FOUND_GREG, // z_parameter.c - /* 0xAA */ TIMESTAMP_TRIFORCE_COMPLETED, // z_parameter.c + /* 0xA0 */ TIMESTAMP_DEFEAT_GOHMA = 0xA0, // z_boss_goma.c + /* 0xA1 */ TIMESTAMP_DEFEAT_KING_DODONGO, // z_boss_dodongo.c + /* 0xA2 */ TIMESTAMP_DEFEAT_BARINADE, // z_boss_va.c + /* 0xA3 */ TIMESTAMP_DEFEAT_PHANTOM_GANON, // z_boss_ganondrof.c + /* 0xA4 */ TIMESTAMP_DEFEAT_VOLVAGIA, // z_boss_fd2.c + /* 0xA5 */ TIMESTAMP_DEFEAT_MORPHA, // z_boss_mo.c + /* 0xA6 */ TIMESTAMP_DEFEAT_BONGO_BONGO, // z_boss_sst.c + /* 0xA7 */ TIMESTAMP_DEFEAT_TWINROVA, // z_boss_tw.c + /* 0xA8 */ TIMESTAMP_DEFEAT_GANONDORF, // z_boss_ganon.c + /* 0xA9 */ TIMESTAMP_DEFEAT_GANON, // z_boss_ganon2.c + /* 0xA9 */ TIMESTAMP_BOSSRUSH_FINISH, // z_boss_ganon2.c + /* 0xAA */ TIMESTAMP_FOUND_GREG, // z_parameter.c + /* 0xAA */ TIMESTAMP_TRIFORCE_COMPLETED, // z_parameter.c /* 0xAB */ TIMESTAMP_MAX -}GameplayStatTimestamp; +} GameplayStatTimestamp; typedef enum { // Enemies defeated diff --git a/soh/soh/Enhancements/gameplaystatswindow.h b/soh/soh/Enhancements/gameplaystatswindow.h index 446cc1ef4..16cf94e53 100644 --- a/soh/soh/Enhancements/gameplaystatswindow.h +++ b/soh/soh/Enhancements/gameplaystatswindow.h @@ -6,5 +6,5 @@ class GameplayStatsWindow : public Ship::GuiWindow { void InitElement() override; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; \ No newline at end of file diff --git a/soh/soh/Enhancements/item-tables/ItemTableManager.h b/soh/soh/Enhancements/item-tables/ItemTableManager.h index e20632f38..8420e6897 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableManager.h +++ b/soh/soh/Enhancements/item-tables/ItemTableManager.h @@ -8,16 +8,16 @@ typedef std::unordered_map ItemTable; class ItemTableManager { public: - static ItemTableManager* Instance; - ItemTableManager(); - ~ItemTableManager(); - bool AddItemTable(uint16_t tableID); - bool AddItemEntry(uint16_t tableID, uint16_t getItemID, GetItemEntry getItemEntry); - GetItemEntry RetrieveItemEntry(uint16_t tableID, uint16_t getItemID); - bool ClearItemTable(uint16_t tableID); + static ItemTableManager* Instance; + ItemTableManager(); + ~ItemTableManager(); + bool AddItemTable(uint16_t tableID); + bool AddItemEntry(uint16_t tableID, uint16_t getItemID, GetItemEntry getItemEntry); + GetItemEntry RetrieveItemEntry(uint16_t tableID, uint16_t getItemID); + bool ClearItemTable(uint16_t tableID); private: - std::unordered_map itemTables; + std::unordered_map itemTables; - ItemTable* RetrieveItemTable(uint16_t tableID); + ItemTable* RetrieveItemTable(uint16_t tableID); }; diff --git a/soh/soh/Enhancements/item-tables/ItemTableTypes.h b/soh/soh/Enhancements/item-tables/ItemTableTypes.h index d9d742717..df59d6770 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableTypes.h +++ b/soh/soh/Enhancements/item-tables/ItemTableTypes.h @@ -29,11 +29,18 @@ typedef enum GetItemCategory { /* 0x05 */ ITEM_CATEGORY_MAJOR, } GetItemCategory; -#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim, itemCategory, modIndex, getItemId) \ - { itemId, field, (int16_t)((chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1)), textId, objectId, modIndex, modIndex, getItemId, drawId, true, ITEM_FROM_NPC, itemCategory, itemId, modIndex, NULL } +#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim, itemCategory, modIndex, getItemId) \ + { \ + itemId, field, (int16_t)((chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1)), textId, objectId, modIndex, \ + modIndex, getItemId, drawId, true, ITEM_FROM_NPC, itemCategory, itemId, modIndex, NULL \ + } -#define GET_ITEM_CUSTOM_TABLE(itemId, objectId, drawId, textId, field, chestAnim, itemCategory, modIndex, tableId, getItemId) \ - { itemId, field, (int16_t)((chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1)), textId, objectId, modIndex, tableId, getItemId, drawId, true, ITEM_FROM_NPC, itemCategory, itemId, modIndex, NULL } +#define GET_ITEM_CUSTOM_TABLE(itemId, objectId, drawId, textId, field, chestAnim, itemCategory, modIndex, tableId, \ + getItemId) \ + { \ + itemId, field, (int16_t)((chestAnim != CHEST_ANIM_SHORT ? 1 : -1) * (drawId + 1)), textId, objectId, modIndex, \ + tableId, getItemId, drawId, true, ITEM_FROM_NPC, itemCategory, itemId, modIndex, NULL \ + } #define GET_ITEM_NONE \ { ITEM_NONE, 0, 0, 0, 0, 0, 0, 0, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_JUNK, ITEM_NONE, 0, NULL } @@ -50,13 +57,16 @@ typedef struct GetItemEntry { /* 0x03 */ uint16_t textId; /* 0x04 */ uint16_t objectId; /* 0x06 */ uint16_t modIndex; // Primarily used for determining whether to use Item_Give or Randomizer_Item_Give - /* 0x07 */ uint16_t tableId; // GetItemEntry table this entry is in (usually the same as modIndex, but not always) + /* 0x07 */ uint16_t tableId; // GetItemEntry table this entry is in (usually the same as modIndex, but not always) /* 0x08 */ int16_t getItemId; /* 0x0A */ uint16_t gid; // Stores the GID value unmodified for future reference. - /* 0x0C */ uint16_t collectable; // determines whether the item can be collected on the overworld. Will be true in most cases. + /* 0x0C */ uint16_t + collectable; // determines whether the item can be collected on the overworld. Will be true in most cases. /* 0x0E */ GetItemFrom getItemFrom; /* 0x0F */ GetItemCategory getItemCategory; // Primarily made and used for chest size/texture matches contents - /* 0x10 */ uint16_t drawItemId; // Will be a copy of itemId unless the item is an ice trap. Needed for particles to function on ice traps. - /* 0x11 */ uint16_t drawModIndex; // Will be a copy of modIndex unless the item is an ice trap. Needed for particles to function on ice traps. + /* 0x10 */ uint16_t drawItemId; // Will be a copy of itemId unless the item is an ice trap. Needed for particles to + // function on ice traps. + /* 0x11 */ uint16_t drawModIndex; // Will be a copy of modIndex unless the item is an ice trap. Needed for particles + // to function on ice traps. CustomDrawFunc drawFunc; } GetItemEntry; // size = 0x11 diff --git a/soh/soh/Enhancements/kaleido.cpp b/soh/soh/Enhancements/kaleido.cpp index 4cddeef43..eef19b495 100644 --- a/soh/soh/Enhancements/kaleido.cpp +++ b/soh/soh/Enhancements/kaleido.cpp @@ -1,6 +1,7 @@ #include "kaleido.h" #include "soh/frame_interpolation.h" +#include "soh/ShipUtils.h" extern "C" { #include "z64.h" @@ -26,444 +27,423 @@ void KaleidoScope_MoveCursorToSpecialPos(PlayState* play, u16 specialPos); namespace Rando { - void KaleidoEntryIcon::LoadIconTex(std::vector* mEntryDl) { - if (mIconFormat == G_IM_FMT_IA) { - if (mIconSize == G_IM_SIZ_8b) { - Gfx iconTexture[] = { gsDPLoadTextureBlock(mIconResourceName, G_IM_FMT_IA, G_IM_SIZ_8b, mIconWidth, mIconHeight, 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) }; - mEntryDl->insert(mEntryDl->end(), std::begin(iconTexture), std::end(iconTexture)); - } - } else if (mIconFormat == G_IM_FMT_RGBA) { - if (mIconSize == G_IM_SIZ_32b) { - Gfx iconTexture[] = { gsDPLoadTextureBlock(mIconResourceName, G_IM_FMT_RGBA, G_IM_SIZ_32b, mIconWidth, mIconHeight, 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) }; - mEntryDl->insert(mEntryDl->end(), std::begin(iconTexture), std::end(iconTexture)); - } +void KaleidoEntryIcon::LoadIconTex(std::vector* mEntryDl) { + if (mIconFormat == G_IM_FMT_IA) { + if (mIconSize == G_IM_SIZ_8b) { + Gfx iconTexture[] = { gsDPLoadTextureBlock( + mIconResourceName, G_IM_FMT_IA, G_IM_SIZ_8b, mIconWidth, mIconHeight, 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) }; + mEntryDl->insert(mEntryDl->end(), std::begin(iconTexture), std::end(iconTexture)); + } + } else if (mIconFormat == G_IM_FMT_RGBA) { + if (mIconSize == G_IM_SIZ_32b) { + Gfx iconTexture[] = { gsDPLoadTextureBlock( + mIconResourceName, G_IM_FMT_RGBA, G_IM_SIZ_32b, mIconWidth, mIconHeight, 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) }; + mEntryDl->insert(mEntryDl->end(), std::begin(iconTexture), std::end(iconTexture)); } } +} - KaleidoEntry::KaleidoEntry(int16_t x, int16_t y, std::string text) : mX(x), mY(y), mText(std::move(text)) { - mHeight = 0; - mWidth = 0; - vtx = nullptr; +KaleidoEntry::KaleidoEntry(int16_t x, int16_t y, std::string text) : mX(x), mY(y), mText(std::move(text)) { + mHeight = 0; + mWidth = 0; + vtx = nullptr; +} + +void KaleidoEntry::SetYOffset(int yOffset) { + mY = yOffset; +} + +void KaleidoEntryIcon::Draw(PlayState* play, std::vector* mEntryDl) { + if (vtx == nullptr) { + return; + } + size_t numChar = mText.length(); + if (numChar == 0) { + return; } - void KaleidoEntry::SetYOffset(int yOffset) { - mY = yOffset; + Color_RGBA8 textColor = { 255, 255, 255, 255 }; + if (mAchieved) { + textColor = { 0x98, 0xFF, 0x44, 255 }; } - void KaleidoEntryIcon::Draw(PlayState* play, std::vector* mEntryDl) { - if (vtx == nullptr) { - return; - } - size_t numChar = mText.length(); - if (numChar == 0) { - return; - } + Matrix_Translate(mX, mY, 0.0f, MTXMODE_APPLY); - Color_RGBA8 textColor = { 255, 255, 255, 255 }; - if (mAchieved) { - textColor = { 0x98, 0xFF, 0x44, 255 }; - } + mEntryDl->push_back(gsSPMatrix(Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); - Matrix_Translate(mX, mY, 0.0f, MTXMODE_APPLY); - - mEntryDl->push_back(gsSPMatrix(Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); - - // icon - if (!mAchieved) { - mEntryDl->push_back(gsDPSetGrayscaleColor(109, 109, 109, 255)); - mEntryDl->push_back(gsSPGrayscale(true)); - } - mEntryDl->push_back(gsDPSetPrimColor(0, 0, mIconColor.r, mIconColor.g, mIconColor.b, mIconColor.a)); - mEntryDl->push_back(gsSPVertex(vtx, 4, 0)); - LoadIconTex(mEntryDl); - mEntryDl->push_back(gsSP1Quadrangle(0, 2, 3, 1, 0)); - mEntryDl->push_back(gsSPGrayscale(false)); - - // text - mEntryDl->push_back(gsDPSetPrimColor(0, 0, textColor.r, textColor.g, textColor.b, textColor.a)); - for (size_t i = 0, vtxGroup = 0; i < numChar; i++) { - uint16_t texIndex = mText[i] - 32; - - // A maximum of 64 Vtx can be loaded at once by gSPVertex, or basically 16 characters - // handle loading groups of 16 chars at a time until there are no more left to load. - // By this point 4 vertices have already been loaded for the preceding icon. - if (i % 16 == 0) { - size_t numVtxToLoad = std::min(numChar - i, 16) * 4; - mEntryDl->push_back(gsSPVertex(&vtx[4 + (vtxGroup * 16 * 4)], numVtxToLoad, 0)); - vtxGroup++; - } - - if (texIndex != 0) { - auto texture = reinterpret_cast(Font_FetchCharTexture(texIndex)); - auto vertexStart = static_cast(4 * (i % 16)); - - Gfx charTexture[] = {gsDPLoadTextureBlock_4b(texture, G_IM_FMT_I, FONT_CHAR_TEX_WIDTH, - FONT_CHAR_TEX_HEIGHT, 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)}; - mEntryDl->insert(mEntryDl->end(), std::begin(charTexture), std::end(charTexture)); - mEntryDl->push_back( - gsSP1Quadrangle(vertexStart, vertexStart + 2, vertexStart + 3, vertexStart + 1, 0)); - } - } - mEntryDl->push_back(gsSPPopMatrix(G_MTX_MODELVIEW)); + // icon + if (!mAchieved) { + mEntryDl->push_back(gsDPSetGrayscaleColor(109, 109, 109, 255)); + mEntryDl->push_back(gsSPGrayscale(true)); } + mEntryDl->push_back(gsDPSetPrimColor(0, 0, mIconColor.r, mIconColor.g, mIconColor.b, mIconColor.a)); + mEntryDl->push_back(gsSPVertex(vtx, 4, 0)); + LoadIconTex(mEntryDl); + mEntryDl->push_back(gsSP1Quadrangle(0, 2, 3, 1, 0)); + mEntryDl->push_back(gsSPGrayscale(false)); - Kaleido::Kaleido() { - const auto ctx = Rando::Context::GetInstance(); - int yOffset = 2; - mEntries.push_back(std::make_shared(gRupeeCounterIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, - Color_RGBA8{ 0xC8, 0xFF, 0x64, 255 }, FlagType::FLAG_RANDOMIZER_INF, - static_cast(RAND_INF_GREG_FOUND), 0, yOffset, "Greg")); + // text + mEntryDl->push_back(gsDPSetPrimColor(0, 0, textColor.r, textColor.g, textColor.b, textColor.a)); + for (size_t i = 0, vtxGroup = 0; i < numChar; i++) { + // A maximum of 64 Vtx can be loaded at once by gSPVertex, or basically 16 characters + // handle loading groups of 16 chars at a time until there are no more left to load. + // By this point 4 vertices have already been loaded for the preceding icon. + if (i % 16 == 0) { + size_t numVtxToLoad = std::min(numChar - i, 16) * 4; + mEntryDl->push_back(gsSPVertex(&vtx[4 + (vtxGroup * 16 * 4)], numVtxToLoad, 0)); + vtxGroup++; + } + + auto texture = reinterpret_cast(Ship_GetCharFontTexture(mText[i])); + auto vertexStart = static_cast(4 * (i % 16)); + + Gfx charTexture[] = { gsDPLoadTextureBlock_4b(texture, G_IM_FMT_I, FONT_CHAR_TEX_WIDTH, FONT_CHAR_TEX_HEIGHT, 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) }; + mEntryDl->insert(mEntryDl->end(), std::begin(charTexture), std::end(charTexture)); + mEntryDl->push_back(gsSP1Quadrangle(vertexStart, vertexStart + 2, vertexStart + 3, vertexStart + 1, 0)); + } + mEntryDl->push_back(gsSPPopMatrix(G_MTX_MODELVIEW)); +} + +Kaleido::Kaleido() { + const auto ctx = Rando::Context::GetInstance(); + int yOffset = 2; + mEntries.push_back(std::make_shared( + gRupeeCounterIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, Color_RGBA8{ 0xC8, 0xFF, 0x64, 255 }, + FlagType::FLAG_RANDOMIZER_INF, static_cast(RAND_INF_GREG_FOUND), 0, yOffset, "Greg")); + yOffset += 18; + if (ctx->GetOption(RSK_TRIFORCE_HUNT)) { + mEntries.push_back(std::make_shared( + gTriforcePieceTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, Color_RGBA8{ 255, 255, 255, 255 }, 0, yOffset, + reinterpret_cast(&gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected), + ctx->GetOption(RSK_TRIFORCE_HUNT_PIECES_REQUIRED).Get() + 1, + ctx->GetOption(RSK_TRIFORCE_HUNT_PIECES_TOTAL).Get() + 1)); yOffset += 18; - if (ctx->GetOption(RSK_TRIFORCE_HUNT)) { - mEntries.push_back( - std::make_shared( - gTriforcePieceTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, Color_RGBA8{ 255,255,255,255 }, 0, - yOffset, reinterpret_cast(&gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected), - ctx->GetOption(RSK_TRIFORCE_HUNT_PIECES_REQUIRED).Get() + 1, - ctx->GetOption(RSK_TRIFORCE_HUNT_PIECES_TOTAL).Get() + 1)); - yOffset += 18; - } - if (ctx->GetOption(RSK_SHUFFLE_OCARINA_BUTTONS)) { - mEntries.push_back(std::make_shared(0, yOffset)); - yOffset += 18; - } - if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).IsNot(RO_BOSS_SOULS_OFF)) { - static const char* bossSoulNames[] = { - "Gohma's Soul", - "King Dodongo's Soul", - "Barinade's Soul", - "Phantom Ganon's Soul", - "Volvagia's Soul", - "Morpha's Soul", - "Bongo Bongo's Soul", - "Twinrova's Soul", - }; - for (int i = RAND_INF_GOHMA_SOUL; i < RAND_INF_GANON_SOUL; i++) { - mEntries.push_back( - std::make_shared( - gBossSoulTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, Color_RGBA8{ 255, 255, 255, 255 }, - FlagType::FLAG_RANDOMIZER_INF, i, 0, yOffset, bossSoulNames[i - RAND_INF_GOHMA_SOUL] - ) - ); - yOffset += 18; - } - } - if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).Is(RO_BOSS_SOULS_ON_PLUS_GANON)) { - mEntries.push_back( - std::make_shared( - gBossSoulTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, Color_RGBA8{ 255, 255, 255, 255 }, - FlagType::FLAG_RANDOMIZER_INF, RAND_INF_GANON_SOUL, 0, yOffset, "Ganon's Soul" - ) - ); + } + if (ctx->GetOption(RSK_SHUFFLE_OCARINA_BUTTONS)) { + mEntries.push_back(std::make_shared(0, yOffset)); + yOffset += 18; + } + if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).IsNot(RO_BOSS_SOULS_OFF)) { + static const char* bossSoulNames[] = { + "Gohma's Soul", "King Dodongo's Soul", "Barinade's Soul", "Phantom Ganon's Soul", + "Volvagia's Soul", "Morpha's Soul", "Bongo Bongo's Soul", "Twinrova's Soul", + }; + for (int i = RAND_INF_GOHMA_SOUL; i < RAND_INF_GANON_SOUL; i++) { + mEntries.push_back(std::make_shared( + gBossSoulTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, Color_RGBA8{ 255, 255, 255, 255 }, + FlagType::FLAG_RANDOMIZER_INF, i, 0, yOffset, bossSoulNames[i - RAND_INF_GOHMA_SOUL])); yOffset += 18; } } - - extern "C" { - void FrameInterpolation_RecordCloseChild(void); - void FrameInterpolation_RecordOpenChild(const void* a, int b); + if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).Is(RO_BOSS_SOULS_ON_PLUS_GANON)) { + mEntries.push_back(std::make_shared( + gBossSoulTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, Color_RGBA8{ 255, 255, 255, 255 }, + FlagType::FLAG_RANDOMIZER_INF, RAND_INF_GANON_SOUL, 0, yOffset, "Ganon's Soul")); + yOffset += 18; } +} - void Kaleido::Draw(PlayState* play) { - if (play == nullptr || mEntries.empty()) { - return; - } - PauseContext* pauseCtx = &play->pauseCtx; - Input* input = &play->state.input[0]; - mEntryDl.clear(); - OPEN_DISPS(play->state.gfxCtx); - mEntryDl.push_back(gsDPPipeSync()); - Gfx_SetupDL_42Opa(play->state.gfxCtx); - mEntryDl.push_back(gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM)); +extern "C" { +void FrameInterpolation_RecordCloseChild(void); +void FrameInterpolation_RecordOpenChild(const void* a, int b); +} - // Move the matrix origin to the top-left corner of the kaleido page - Matrix_Translate(-108.f, 58.f, 0.0f, MTXMODE_APPLY); - // Invert the matrix to render vertices with positive going down - Matrix_Scale(1.0f, -1.0f, 1.0f, MTXMODE_APPLY); - // The scrolling logic is in here because the built in kaleido input throttling happens - // in its Draw functions, which get called after their update functions. I hate it but fixing - // it would be a much larger Kaleido change. - bool shouldScroll = false; - bool dpad = CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0); - if (((pauseCtx->unk_1E4 == 0) || (pauseCtx->unk_1E4 == 5) || (pauseCtx->unk_1E4 == 8)) && - (pauseCtx->pageIndex == PAUSE_QUEST)) { - if (!((pauseCtx->state != 6) || ((pauseCtx->stickRelX == 0) && (pauseCtx->stickRelY == 0)))) { - if (pauseCtx->cursorSpecialPos == 0) { - if ((pauseCtx->stickRelY > 30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DUP))) { - if (mTopIndex > 0) { - mTopIndex--; - shouldScroll = true; - } - } else if ((pauseCtx->stickRelY < -30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DDOWN))) { - if (mTopIndex + mNumVisible < mEntries.size()) { - mTopIndex++; - shouldScroll = true; - } +void Kaleido::Draw(PlayState* play) { + if (play == nullptr || mEntries.empty()) { + return; + } + PauseContext* pauseCtx = &play->pauseCtx; + Input* input = &play->state.input[0]; + mEntryDl.clear(); + OPEN_DISPS(play->state.gfxCtx); + mEntryDl.push_back(gsDPPipeSync()); + Gfx_SetupDL_42Opa(play->state.gfxCtx); + mEntryDl.push_back(gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM)); + + // Move the matrix origin to the top-left corner of the kaleido page + Matrix_Translate(-108.f, 58.f, 0.0f, MTXMODE_APPLY); + // Invert the matrix to render vertices with positive going down + Matrix_Scale(1.0f, -1.0f, 1.0f, MTXMODE_APPLY); + // The scrolling logic is in here because the built in kaleido input throttling happens + // in its Draw functions, which get called after their update functions. I hate it but fixing + // it would be a much larger Kaleido change. + bool shouldScroll = false; + bool dpad = CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0); + if (((pauseCtx->unk_1E4 == 0) || (pauseCtx->unk_1E4 == 5) || (pauseCtx->unk_1E4 == 8)) && + (pauseCtx->pageIndex == PAUSE_QUEST)) { + if (!((pauseCtx->state != 6) || ((pauseCtx->stickRelX == 0) && (pauseCtx->stickRelY == 0)))) { + if (pauseCtx->cursorSpecialPos == 0) { + if ((pauseCtx->stickRelY > 30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DUP))) { + if (mTopIndex > 0) { + mTopIndex--; + shouldScroll = true; } - if ((pauseCtx->stickRelX < -30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DLEFT))) { - KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT); - pauseCtx->unk_1E4 = 0; - } else if ((pauseCtx->stickRelX > 30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DRIGHT))) { - KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_RIGHT); - pauseCtx->unk_1E4 = 0; - } - } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { - if ((pauseCtx->stickRelX > 30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DRIGHT))) { - pauseCtx->cursorSpecialPos = 0; - Audio_PlaySoundGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); - } - } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) { - if ((pauseCtx->stickRelX < -30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DLEFT))) { - pauseCtx->cursorSpecialPos = 0; - Audio_PlaySoundGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } else if ((pauseCtx->stickRelY < -30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DDOWN))) { + if (mTopIndex + mNumVisible < mEntries.size()) { + mTopIndex++; + shouldScroll = true; } } - } else if (pauseCtx->cursorSpecialPos != 0 && pauseCtx->state == 7) { - pauseCtx->cursorSpecialPos = 0; + if ((pauseCtx->stickRelX < -30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DLEFT))) { + KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_LEFT); + pauseCtx->unk_1E4 = 0; + } else if ((pauseCtx->stickRelX > 30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DRIGHT))) { + KaleidoScope_MoveCursorToSpecialPos(play, PAUSE_CURSOR_PAGE_RIGHT); + pauseCtx->unk_1E4 = 0; + } + } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { + if ((pauseCtx->stickRelX > 30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DRIGHT))) { + pauseCtx->cursorSpecialPos = 0; + Audio_PlaySoundGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } + } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_RIGHT) { + if ((pauseCtx->stickRelX < -30) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DLEFT))) { + pauseCtx->cursorSpecialPos = 0; + Audio_PlaySoundGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + } } - } - int yOffset = 2; - for (int i = mTopIndex; i < (mTopIndex + mNumVisible) && i < mEntries.size(); i++) { - auto& entry = mEntries[i]; - if (shouldScroll) { - entry->SetYOffset(yOffset); - yOffset += 18; - Audio_PlaySoundGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); - } - Matrix_Push(); - entry->Draw(play, &mEntryDl); - Matrix_Pop(); - } - - mEntryDl.push_back(gsSPEndDisplayList()); - gSPDisplayList(POLY_OPA_DISP++, mEntryDl.data()); - CLOSE_DISPS(play->state.gfxCtx); - } - - void Kaleido::Update(PlayState *play) { - for(int i = mTopIndex; i < (mTopIndex + mNumVisible) && i < mEntries.size(); i++) { - const auto& entry = mEntries[i]; - entry->Update(play); + } else if (pauseCtx->cursorSpecialPos != 0 && pauseCtx->state == 7) { + pauseCtx->cursorSpecialPos = 0; } } - - extern "C" void RandoKaleido_DrawMiscCollectibles(PlayState* play) { - OTRGlobals::Instance->gRandoContext->GetKaleido()->Draw(play); - } - - extern "C" void RandoKaleido_UpdateMiscCollectibles(int16_t inDungeonScene) { - PauseContext* pauseCtx = &gPlayState->pauseCtx; - if (pauseCtx->randoQuestMode && pauseCtx->pageIndex == PAUSE_QUEST) { - OTRGlobals::Instance->gRandoContext->GetKaleido()->Update(gPlayState); + int yOffset = 2; + for (int i = mTopIndex; i < (mTopIndex + mNumVisible) && i < mEntries.size(); i++) { + auto& entry = mEntries[i]; + if (shouldScroll) { + entry->SetYOffset(yOffset); + yOffset += 18; + Audio_PlaySoundGeneral(NA_SE_SY_CURSOR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); } + Matrix_Push(); + entry->Draw(play, &mEntryDl); + Matrix_Pop(); } - KaleidoEntryIconFlag::KaleidoEntryIconFlag(const char *iconResourceName, int iconFormat, int iconSize, int iconWidth, - int iconHeight, Color_RGBA8 iconColor, FlagType flagType, int flag, - int16_t x, int16_t y, std::string name) : - mFlagType(flagType), mFlag(flag), - KaleidoEntryIcon(iconResourceName, iconFormat, iconSize, iconWidth, iconHeight, iconColor, x, y, std::move(name)) { - BuildVertices(); - } + mEntryDl.push_back(gsSPEndDisplayList()); + gSPDisplayList(POLY_OPA_DISP++, mEntryDl.data()); + CLOSE_DISPS(play->state.gfxCtx); +} - void KaleidoEntryIconFlag::Update(PlayState* play) { - mAchieved = GameInteractor::RawAction::CheckFlag(mFlagType, static_cast(mFlag)); +void Kaleido::Update(PlayState* play) { + for (int i = mTopIndex; i < (mTopIndex + mNumVisible) && i < mEntries.size(); i++) { + const auto& entry = mEntries[i]; + entry->Update(play); } +} - KaleidoEntryIconCountRequired::KaleidoEntryIconCountRequired(const char *iconResourceName, int iconFormat, - int iconSize, int iconWidth, int iconHeight, Color_RGBA8 iconColor, int16_t x, int16_t y, int* watch, - int required, int total) : mWatch(watch), mRequired(required), mTotal(total), - KaleidoEntryIcon(iconResourceName, iconFormat, iconSize, iconWidth, iconHeight, iconColor, x, y) { +extern "C" void RandoKaleido_DrawMiscCollectibles(PlayState* play) { + OTRGlobals::Instance->gRandoContext->GetKaleido()->Draw(play); +} + +extern "C" void RandoKaleido_UpdateMiscCollectibles(int16_t inDungeonScene) { + PauseContext* pauseCtx = &gPlayState->pauseCtx; + if (pauseCtx->randoQuestMode && pauseCtx->pageIndex == PAUSE_QUEST) { + OTRGlobals::Instance->gRandoContext->GetKaleido()->Update(gPlayState); + } +} + +KaleidoEntryIconFlag::KaleidoEntryIconFlag(const char* iconResourceName, int iconFormat, int iconSize, int iconWidth, + int iconHeight, Color_RGBA8 iconColor, FlagType flagType, int flag, + int16_t x, int16_t y, std::string name) + : mFlagType(flagType), mFlag(flag), KaleidoEntryIcon(iconResourceName, iconFormat, iconSize, iconWidth, iconHeight, + iconColor, x, y, std::move(name)) { + BuildVertices(); +} + +void KaleidoEntryIconFlag::Update(PlayState* play) { + mAchieved = GameInteractor::RawAction::CheckFlag(mFlagType, static_cast(mFlag)); +} + +KaleidoEntryIconCountRequired::KaleidoEntryIconCountRequired(const char* iconResourceName, int iconFormat, int iconSize, + int iconWidth, int iconHeight, Color_RGBA8 iconColor, + int16_t x, int16_t y, int* watch, int required, int total) + : mWatch(watch), mRequired(required), mTotal(total), + KaleidoEntryIcon(iconResourceName, iconFormat, iconSize, iconWidth, iconHeight, iconColor, x, y) { + mCount = *mWatch; + BuildText(); + BuildVertices(); +} + +void KaleidoEntryIconCountRequired::BuildText() { + std::ostringstream totals; + totals << mCount; + if (mRequired != 0 && mCount < mRequired) { + totals << '/' << mRequired; + } + if (mTotal >= mRequired && mCount >= mRequired) { + totals << '/' << mTotal; + } + mText = totals.str(); +} + +void KaleidoEntryIcon::BuildVertices() { + int offsetY = 0; + int offsetX = 0; + // 4 vertices per character, plus one for the preceding icon. + Vtx* vertices = (Vtx*)calloc(sizeof(Vtx[4]), mText.length() + 1); + // Vertex for the preceding icon. + Ship_CreateQuadVertexGroup(vertices, offsetX, offsetY, mIconWidth, mIconHeight, 0); + offsetX += 18; + for (size_t i = 0; i < mText.length(); i++) { + int charWidth = static_cast(Ship_GetCharFontWidth(mText[i])); + Ship_CreateQuadVertexGroup(&(vertices)[(i + 1) * 4], offsetX, offsetY, charWidth, 16, 0); + offsetX += charWidth; + } + offsetY += FONT_CHAR_TEX_HEIGHT; + mWidth = static_cast(offsetX); + mHeight = static_cast(offsetY); + + vertices[1].v.ob[0] = 16; + vertices[2].v.ob[1] = 16; + vertices[3].v.ob[0] = 16; + vertices[3].v.ob[1] = 16; + vtx = vertices; +} + +KaleidoEntryIcon::KaleidoEntryIcon(const char* iconResourceName, int iconFormat, int iconSize, int iconWidth, + int iconHeight, Color_RGBA8 iconColor, int16_t x, int16_t y, std::string text) + : mIconResourceName(iconResourceName), mIconFormat(iconFormat), mIconSize(iconSize), mIconWidth(iconWidth), + mIconHeight(iconHeight), mIconColor(iconColor), KaleidoEntry(x, y, std::move(text)) { +} + +void KaleidoEntryIcon::RebuildVertices() { + free(vtx); + vtx = nullptr; + BuildVertices(); +} + +void KaleidoEntryIconCountRequired::Update(PlayState* play) { + if (mCount != *mWatch) { mCount = *mWatch; BuildText(); - BuildVertices(); + RebuildVertices(); + mAchieved = mCount >= mRequired; } +} - void KaleidoEntryIconCountRequired::BuildText() { - std::ostringstream totals; - totals << mCount; - if (mRequired != 0 && mCount < mRequired) { - totals << '/' << mRequired; - } - if (mTotal >= mRequired && mCount >= mRequired) { - totals << '/' << mTotal; - } - mText = totals.str(); +KaleidoEntryOcarinaButtons::KaleidoEntryOcarinaButtons(int16_t x, int16_t y) + : KaleidoEntryIcon(gItemIconOcarinaOfTimeTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, + Color_RGBA8{ 255, 255, 255, 255 }, x, y, "\x9F\xA5\xA6\xA7\xA8") { + CalculateColors(); + BuildVertices(); +} + +void KaleidoEntryOcarinaButtons::CalculateColors() { + Color_RGB8 aButtonColor = { 80, 150, 255 }; + if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.Changed"), 0)) { + aButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.AButton.Value"), aButtonColor); + } else if (CVarGetInteger(CVAR_COSMETIC("DefaultColorScheme"), COLORSCHEME_N64) == COLORSCHEME_GAMECUBE) { + aButtonColor = { 80, 255, 150 }; } - - void KaleidoEntryIcon::BuildVertices() { - int offsetY = 0; - int offsetX = 0; - // 4 vertices per character, plus one for the preceding icon. - Vtx* vertices = (Vtx*)calloc(sizeof(Vtx[4]), mText.length() + 1); - // Vertex for the preceding icon. - Interface_CreateQuadVertexGroup(vertices, offsetX, offsetY, mIconWidth, mIconHeight, 0); - offsetX += 18; - for (size_t i = 0; i < mText.length(); i++) { - auto charIndex = static_cast(mText[i] - 32); - int charWidth = 0; - if (charIndex >= 0) { - charWidth = static_cast(Message_GetCharacterWidth(charIndex) * (100.0f / R_TEXT_CHAR_SCALE)); - } - Interface_CreateQuadVertexGroup(&(vertices)[(i + 1) * 4], offsetX, offsetY, charWidth, 16, 0); - offsetX += charWidth; - } - offsetY += FONT_CHAR_TEX_HEIGHT; - mWidth = static_cast(offsetX); - mHeight = static_cast(offsetY); - - vertices[1].v.ob[0] = 16; - vertices[2].v.ob[1] = 16; - vertices[3].v.ob[0] = 16; - vertices[3].v.ob[1] = 16; - vtx = vertices; + mButtonColors[0] = { aButtonColor.r, aButtonColor.g, aButtonColor.b, 255 }; + Color_RGB8 cButtonsColor = { 255, 255, 50 }; + Color_RGB8 cUpButtonColor = cButtonsColor; + Color_RGB8 cDownButtonColor = cButtonsColor; + Color_RGB8 cLeftButtonColor = cButtonsColor; + Color_RGB8 cRightButtonColor = cButtonsColor; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CButtons.Changed"), 0)) { + cUpButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor); + cDownButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor); + cLeftButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor); + cRightButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor); } - - KaleidoEntryIcon::KaleidoEntryIcon(const char *iconResourceName, int iconFormat, int iconSize, int iconWidth, - int iconHeight, Color_RGBA8 iconColor, int16_t x, int16_t y, std::string text) - : mIconResourceName(iconResourceName), mIconFormat(iconFormat), mIconSize(iconSize), - mIconWidth(iconWidth), mIconHeight(iconHeight), mIconColor(iconColor), - KaleidoEntry(x, y, std::move(text)) {} - - void KaleidoEntryIcon::RebuildVertices() { - free(vtx); - vtx = nullptr; - BuildVertices(); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.Changed"), 0)) { + cUpButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CUpButton.Value"), cUpButtonColor); } - - void KaleidoEntryIconCountRequired::Update(PlayState *play) { - if (mCount != *mWatch) { - mCount = *mWatch; - BuildText(); - RebuildVertices(); - mAchieved = mCount >= mRequired; - } - + if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.Changed"), 0)) { + cDownButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CDownButton.Value"), cDownButtonColor); } - - KaleidoEntryOcarinaButtons::KaleidoEntryOcarinaButtons(int16_t x, int16_t y) : - KaleidoEntryIcon(gItemIconOcarinaOfTimeTex, G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, - Color_RGBA8{ 255, 255, 255, 255 }, x, y, "\x9F\xA5\xA6\xA7\xA8") { - CalculateColors(); - BuildVertices(); + if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.Changed"), 0)) { + cLeftButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CLeftButton.Value"), cLeftButtonColor); } - - void KaleidoEntryOcarinaButtons::CalculateColors() { - Color_RGB8 aButtonColor = { 80, 150, 255 }; - if (CVarGetInteger(CVAR_COSMETIC("HUD.AButton.Changed"), 0)) { - aButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.AButton.Value"), aButtonColor); - } else if (CVarGetInteger(CVAR_COSMETIC("DefaultColorScheme"), COLORSCHEME_N64) == COLORSCHEME_GAMECUBE) { - aButtonColor = { 80, 255, 150}; - } - mButtonColors[0] = { aButtonColor.r, aButtonColor.g, aButtonColor.b, 255 }; - Color_RGB8 cButtonsColor = { 255, 255, 50 }; - Color_RGB8 cUpButtonColor = cButtonsColor; - Color_RGB8 cDownButtonColor = cButtonsColor; - Color_RGB8 cLeftButtonColor = cButtonsColor; - Color_RGB8 cRightButtonColor = cButtonsColor; - if (CVarGetInteger(CVAR_COSMETIC("HUD.CButtons.Changed"), 0)) { - cUpButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor); - cDownButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor); - cLeftButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor); - cRightButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CButtons.Value"), cButtonsColor); - } - if (CVarGetInteger(CVAR_COSMETIC("HUD.CUpButton.Changed"), 0)) { - cUpButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CUpButton.Value"), cUpButtonColor); - } - if (CVarGetInteger(CVAR_COSMETIC("HUD.CDownButton.Changed"), 0)) { - cDownButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CDownButton.Value"), cDownButtonColor); - } - if (CVarGetInteger(CVAR_COSMETIC("HUD.CLeftButton.Changed"), 0)) { - cLeftButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CLeftButton.Value"), cLeftButtonColor); - } - if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.Changed"), 0)) { - cRightButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CRightButton.Value"), cRightButtonColor); - } - mButtonColors[1] = { cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b, 255 }; - mButtonColors[2] = { cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, 255 }; - mButtonColors[3] = { cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, 255 }; - mButtonColors[4] = { cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, 255 }; + if (CVarGetInteger(CVAR_COSMETIC("HUD.CRightButton.Changed"), 0)) { + cRightButtonColor = CVarGetColor24(CVAR_COSMETIC("HUD.CRightButton.Value"), cRightButtonColor); } + mButtonColors[1] = { cUpButtonColor.r, cUpButtonColor.g, cUpButtonColor.b, 255 }; + mButtonColors[2] = { cDownButtonColor.r, cDownButtonColor.g, cDownButtonColor.b, 255 }; + mButtonColors[3] = { cLeftButtonColor.r, cLeftButtonColor.g, cLeftButtonColor.b, 255 }; + mButtonColors[4] = { cRightButtonColor.r, cRightButtonColor.g, cRightButtonColor.b, 255 }; +} - void KaleidoEntryOcarinaButtons::Update(PlayState *play) { - mButtonCollected[0] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_A) > 0; - mButtonCollected[1] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_C_UP) > 0; - mButtonCollected[2] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_C_DOWN) > 0; - mButtonCollected[3] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_C_LEFT) > 0; - mButtonCollected[4] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_C_RIGHT) > 0; - CalculateColors(); - mAchieved = false; - for (int i = 0; i < mButtonCollected.size(); i++) { - if (!mButtonCollected[i]) { - mButtonColors[i] = Color_RGBA8{ 109, 109, 109, 255 }; - } else { - mAchieved = true; - } +void KaleidoEntryOcarinaButtons::Update(PlayState* play) { + mButtonCollected[0] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_A) > 0; + mButtonCollected[1] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_C_UP) > 0; + mButtonCollected[2] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_C_DOWN) > 0; + mButtonCollected[3] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_C_LEFT) > 0; + mButtonCollected[4] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_C_RIGHT) > 0; + CalculateColors(); + mAchieved = false; + for (int i = 0; i < mButtonCollected.size(); i++) { + if (!mButtonCollected[i]) { + mButtonColors[i] = Color_RGBA8{ 109, 109, 109, 255 }; + } else { + mAchieved = true; } } +} - void KaleidoEntryOcarinaButtons::Draw(PlayState *play, std::vector* mEntryDl) { - if (vtx == nullptr) { - return; - } - size_t numChar = mText.length(); - if (numChar == 0) { - return; - } - - Matrix_Translate(mX, mY, 0.0f, MTXMODE_APPLY); -// Matrix_Scale(0.75f, 0.75f, 0.75f, MTXMODE_APPLY); - - mEntryDl->push_back(gsSPMatrix(Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); - - // icon - if (!mAchieved) { - mEntryDl->push_back(gsDPSetGrayscaleColor(109, 109, 109, 255)); - mEntryDl->push_back(gsSPGrayscale(true)); - } - mEntryDl->push_back(gsDPSetPrimColor(0, 0, mIconColor.r, mIconColor.g, mIconColor.b, mIconColor.a)); - mEntryDl->push_back(gsSPVertex(vtx, 4, 0)); - LoadIconTex(mEntryDl); - mEntryDl->push_back(gsSP1Quadrangle(0, 2, 3, 1, 0)); - mEntryDl->push_back(gsSPGrayscale(false)); - - // text - for (size_t i = 0, vtxGroup = 0; i < numChar; i++) { - mEntryDl->push_back(gsDPSetPrimColor(0, 0, mButtonColors[i].r, mButtonColors[i].g, mButtonColors[i].b, mButtonColors[i].a)); - uint16_t texIndex = mText[i] - 32; - - // A maximum of 64 Vtx can be loaded at once by gSPVertex, or basically 16 characters - // handle loading groups of 16 chars at a time until there are no more left to load. - // By this point 4 vertices have already been loaded for the preceding icon. - if (i % 16 == 0) { - size_t numVtxToLoad = std::min(numChar - i, 16) * 4; - mEntryDl->push_back(gsSPVertex(&vtx[4 + (vtxGroup * 16 * 4)], numVtxToLoad, 0)); - vtxGroup++; - } - - if (texIndex != 0) { - auto texture = reinterpret_cast(Font_FetchCharTexture(texIndex)); - auto vertexStart = static_cast(4 * (i % 16)); - - Gfx charTexture[] = {gsDPLoadTextureBlock_4b(texture, G_IM_FMT_I, FONT_CHAR_TEX_WIDTH, - FONT_CHAR_TEX_HEIGHT, 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)}; - mEntryDl->insert(mEntryDl->end(), std::begin(charTexture), std::end(charTexture)); - mEntryDl->push_back( - gsSP1Quadrangle(vertexStart, vertexStart + 2, vertexStart + 3, vertexStart + 1, 0)); - } - } - mEntryDl->push_back(gsSPPopMatrix(G_MTX_MODELVIEW)); +void KaleidoEntryOcarinaButtons::Draw(PlayState* play, std::vector* mEntryDl) { + if (vtx == nullptr) { + return; } -} // Rando + size_t numChar = mText.length(); + if (numChar == 0) { + return; + } + + Matrix_Translate(mX, mY, 0.0f, MTXMODE_APPLY); + // Matrix_Scale(0.75f, 0.75f, 0.75f, MTXMODE_APPLY); + + mEntryDl->push_back(gsSPMatrix(Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); + + // icon + if (!mAchieved) { + mEntryDl->push_back(gsDPSetGrayscaleColor(109, 109, 109, 255)); + mEntryDl->push_back(gsSPGrayscale(true)); + } + mEntryDl->push_back(gsDPSetPrimColor(0, 0, mIconColor.r, mIconColor.g, mIconColor.b, mIconColor.a)); + mEntryDl->push_back(gsSPVertex(vtx, 4, 0)); + LoadIconTex(mEntryDl); + mEntryDl->push_back(gsSP1Quadrangle(0, 2, 3, 1, 0)); + mEntryDl->push_back(gsSPGrayscale(false)); + + // text + for (size_t i = 0, vtxGroup = 0; i < numChar; i++) { + mEntryDl->push_back( + gsDPSetPrimColor(0, 0, mButtonColors[i].r, mButtonColors[i].g, mButtonColors[i].b, mButtonColors[i].a)); + + // A maximum of 64 Vtx can be loaded at once by gSPVertex, or basically 16 characters + // handle loading groups of 16 chars at a time until there are no more left to load. + // By this point 4 vertices have already been loaded for the preceding icon. + if (i % 16 == 0) { + size_t numVtxToLoad = std::min(numChar - i, 16) * 4; + mEntryDl->push_back(gsSPVertex(&vtx[4 + (vtxGroup * 16 * 4)], numVtxToLoad, 0)); + vtxGroup++; + } + + auto texture = reinterpret_cast(Ship_GetCharFontTexture(mText[i])); + auto vertexStart = static_cast(4 * (i % 16)); + + Gfx charTexture[] = { gsDPLoadTextureBlock_4b(texture, G_IM_FMT_I, FONT_CHAR_TEX_WIDTH, FONT_CHAR_TEX_HEIGHT, 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) }; + mEntryDl->insert(mEntryDl->end(), std::begin(charTexture), std::end(charTexture)); + mEntryDl->push_back(gsSP1Quadrangle(vertexStart, vertexStart + 2, vertexStart + 3, vertexStart + 1, 0)); + } + mEntryDl->push_back(gsSPPopMatrix(G_MTX_MODELVIEW)); +} +} // namespace Rando void RandoKaleido_RegisterHooks() { - GameInteractor::Instance->RegisterGameHook(RandoKaleido_UpdateMiscCollectibles); + GameInteractor::Instance->RegisterGameHook( + RandoKaleido_UpdateMiscCollectibles); } diff --git a/soh/soh/Enhancements/kaleido.h b/soh/soh/Enhancements/kaleido.h index db86a817e..7776afb66 100644 --- a/soh/soh/Enhancements/kaleido.h +++ b/soh/soh/Enhancements/kaleido.h @@ -2,7 +2,6 @@ #define KALEIDO_H #include - #ifdef __cplusplus #include #include @@ -18,7 +17,7 @@ namespace Rando { * subclasses to declare their Draw and Update functions. */ class KaleidoEntry { -public: + public: /** * @brief Constructor for Base KaleidoEntry class. Sets the position and * initial value of the line of text. @@ -31,7 +30,8 @@ public: virtual void Draw(PlayState* play, std::vector* mEntryDl) = 0; virtual void Update(PlayState* play) = 0; void SetYOffset(int yOffset); -protected: + + protected: int16_t mX; int16_t mY; int16_t mHeight; @@ -39,7 +39,6 @@ protected: Vtx* vtx; std::string mText; bool mAchieved = false; - }; /** @@ -47,7 +46,7 @@ protected: * that wish to render an Icon at the start of their line. */ class KaleidoEntryIcon : public KaleidoEntry { -public: + public: /** * @param iconResourceName resource name of the icon to draw * @param iconFormat flag representing the format of the icon (i.e. G_IM_FMT_IA) @@ -63,7 +62,8 @@ public: Color_RGBA8 iconColor, int16_t x, int16_t y, std::string text = ""); void Draw(PlayState* play, std::vector* mEntryDl) override; void RebuildVertices(); -protected: + + protected: const char* mIconResourceName; int mIconFormat; int mIconSize; @@ -80,7 +80,7 @@ protected: * that is either colored in or Grayscale according to a flag */ class KaleidoEntryIconFlag : public KaleidoEntryIcon { -public : + public: /** * @param iconResourceName resource name of the icon to draw * @param iconFormat flag representing the format of the icon (i.e. G_IM_FMT_IA) @@ -98,7 +98,8 @@ public : Color_RGBA8 iconColor, FlagType flagType, int flag, int16_t x, int16_t y, std::string name = ""); void Update(PlayState* play) override; -private: + + private: FlagType mFlagType; int mFlag; }; @@ -109,7 +110,7 @@ private: * render the count and not show progress towards a required amount or a total. */ class KaleidoEntryIconCountRequired : public KaleidoEntryIcon { -public: + public: /** * @param iconResourceName resource name of the icon to draw * @param iconFormat flag representing the format of the icon (i.e. G_IM_FMT_IA) @@ -126,10 +127,12 @@ public: * @param required The amount of this collectible required to beat the seed. Set to 0 to not render. * @param total The amount of this collectible available in the seed. Set to 0 to not render. */ - KaleidoEntryIconCountRequired(const char* iconResourceName, int iconFormat, int iconSize, int iconWidth, int iconHeight, - Color_RGBA8 iconColor, int16_t x, int16_t y, int* watch, int required = 0, int total = 0); + KaleidoEntryIconCountRequired(const char* iconResourceName, int iconFormat, int iconSize, int iconWidth, + int iconHeight, Color_RGBA8 iconColor, int16_t x, int16_t y, int* watch, + int required = 0, int total = 0); void Update(PlayState* play) override; -private: + + private: int* mWatch; int mRequired; int mTotal; @@ -139,11 +142,12 @@ private: }; class KaleidoEntryOcarinaButtons : public KaleidoEntryIcon { -public: + public: KaleidoEntryOcarinaButtons(int16_t x, int16_t y); void Update(PlayState* play) override; void Draw(PlayState* play, std::vector* mEntryDl) override; -private: + + private: void CalculateColors(); std::array mButtonColors = {}; @@ -151,17 +155,18 @@ private: }; class Kaleido { -public: + public: Kaleido(); void Draw(PlayState* play); void Update(PlayState* play); -private: + + private: std::vector> mEntries; std::vector mEntryDl; int mTopIndex = 0; int mNumVisible = 7; }; -} // Rando +} // namespace Rando extern "C" { #endif @@ -172,5 +177,4 @@ void RandoKaleido_UpdateMiscCollectibles(int16_t inDungeonScene); #endif void RandoKaleido_RegisterHooks(); - -#endif //KALEIDO_H +#endif // KALEIDO_H diff --git a/soh/soh/Enhancements/mods.cpp b/soh/soh/Enhancements/mods.cpp index d357ea277..f65a9618a 100644 --- a/soh/soh/Enhancements/mods.cpp +++ b/soh/soh/Enhancements/mods.cpp @@ -66,7 +66,8 @@ static const ALIGN_ASSET(2) char tokinoma_room_0DL_007FD0[] = dtokinoma_room_0DL /// Switches Link's age and respawns him at the last entrance he entered. void SwitchAge() { - if (gPlayState == NULL) return; + if (gPlayState == NULL) + return; Player* player = GET_PLAYER(gPlayState); @@ -114,14 +115,16 @@ void RegisterOcarinaTimeTravel() { } Actor* player = &GET_PLAYER(gPlayState)->actor; - Actor* nearbyTimeBlockEmpty = Actor_FindNearby(gPlayState, player, ACTOR_OBJ_WARP2BLOCK, ACTORCAT_ITEMACTION, 300.0f); + Actor* nearbyTimeBlockEmpty = + Actor_FindNearby(gPlayState, player, ACTOR_OBJ_WARP2BLOCK, ACTORCAT_ITEMACTION, 300.0f); Actor* nearbyTimeBlock = Actor_FindNearby(gPlayState, player, ACTOR_OBJ_TIMEBLOCK, ACTORCAT_ITEMACTION, 300.0f); Actor* nearbyOcarinaSpot = Actor_FindNearby(gPlayState, player, ACTOR_EN_OKARINA_TAG, ACTORCAT_PROP, 120.0f); Actor* nearbyDoorOfTime = Actor_FindNearby(gPlayState, player, ACTOR_DOOR_TOKI, ACTORCAT_BG, 500.0f); Actor* nearbyFrogs = Actor_FindNearby(gPlayState, player, ACTOR_EN_FR, ACTORCAT_NPC, 300.0f); Actor* nearbyGossipStone = Actor_FindNearby(gPlayState, player, ACTOR_EN_GS, ACTORCAT_NPC, 300.0f); bool justPlayedSoT = gPlayState->msgCtx.lastPlayedSong == OCARINA_SONG_TIME; - bool notNearAnySource = !nearbyTimeBlockEmpty && !nearbyTimeBlock && !nearbyOcarinaSpot && !nearbyDoorOfTime && !nearbyFrogs && !nearbyGossipStone; + bool notNearAnySource = !nearbyTimeBlockEmpty && !nearbyTimeBlock && !nearbyOcarinaSpot && !nearbyDoorOfTime && + !nearbyFrogs && !nearbyGossipStone; bool hasOcarinaOfTime = (INV_CONTENT(ITEM_OCARINA_TIME) == ITEM_OCARINA_TIME); bool doesntNeedOcarinaOfTime = CVarGetInteger(CVAR_ENHANCEMENT("TimeTravel"), 0) == 2; bool hasMasterSword = CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER); @@ -140,10 +143,10 @@ void RegisterShadowTag() { if (!CVarGetInteger(CVAR_ENHANCEMENT("ShadowTag"), 0)) { return; } - if (gPlayState->sceneNum == SCENE_FOREST_TEMPLE && // Forest Temple Scene - gPlayState->roomCtx.curRoom.num == 16 || // Green Poe Room - gPlayState->roomCtx.curRoom.num == 13 || // Blue Poe Room - gPlayState->roomCtx.curRoom.num == 12) { // Red Poe Room + if (gPlayState->sceneNum == SCENE_FOREST_TEMPLE && // Forest Temple Scene + gPlayState->roomCtx.curRoom.num == 16 || // Green Poe Room + gPlayState->roomCtx.curRoom.num == 13 || // Blue Poe Room + gPlayState->roomCtx.curRoom.num == 12) { // Red Poe Room return; } else { if (shouldSpawn && (delayTimer <= 0)) { @@ -166,13 +169,14 @@ void RegisterShadowTag() { static bool hasAffectedHealth = false; void UpdatePermanentHeartLossState() { - if (!GameInteractor::IsSaveLoaded()) return; + if (!GameInteractor::IsSaveLoaded()) + return; if (!CVarGetInteger(CVAR_ENHANCEMENT("PermanentHeartLoss"), 0) && hasAffectedHealth) { uint8_t heartContainers = gSaveContext.ship.stats.heartContainers; // each worth 16 health uint8_t heartPieces = gSaveContext.ship.stats.heartPieces; // each worth 4 health, but only in groups of 4 - uint8_t startingHealth = 16 * (IS_RANDO ? (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_STARTING_HEARTS) + 1) : 3); - + uint8_t startingHealth = + 16 * (IS_RANDO ? (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_STARTING_HEARTS) + 1) : 3); uint8_t newCapacity = startingHealth + (heartContainers * 16) + ((heartPieces - (heartPieces % 4)) * 4); gSaveContext.healthCapacity = MAX(newCapacity, gSaveContext.healthCapacity); @@ -188,7 +192,8 @@ void RegisterPermanentHeartLoss() { }); GameInteractor::Instance->RegisterGameHook([]() { - if (!CVarGetInteger(CVAR_ENHANCEMENT("PermanentHeartLoss"), 0) || !GameInteractor::IsSaveLoaded()) return; + if (!CVarGetInteger(CVAR_ENHANCEMENT("PermanentHeartLoss"), 0) || !GameInteractor::IsSaveLoaded()) + return; if (gSaveContext.healthCapacity > 16 && gSaveContext.healthCapacity - gSaveContext.health >= 16) { gSaveContext.healthCapacity -= 16; @@ -200,12 +205,16 @@ void RegisterPermanentHeartLoss() { void RegisterDeleteFileOnDeath() { GameInteractor::Instance->RegisterGameHook([]() { - if (!CVarGetInteger(CVAR_ENHANCEMENT("DeleteFileOnDeath"), 0) || !GameInteractor::IsSaveLoaded() || gPlayState == NULL) return; + if (!CVarGetInteger(CVAR_ENHANCEMENT("DeleteFileOnDeath"), 0) || !GameInteractor::IsSaveLoaded() || + gPlayState == NULL) + return; if (gPlayState->gameOverCtx.state == GAMEOVER_DEATH_MENU && gPlayState->pauseCtx.state == 9) { SaveManager::Instance->DeleteZeldaFile(gSaveContext.fileNum); hasAffectedHealth = false; - std::reinterpret_pointer_cast(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console"))->Dispatch("reset"); + std::reinterpret_pointer_cast( + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console")) + ->Dispatch("reset"); } }); } @@ -233,7 +242,10 @@ void RegisterDaytimeGoldSkultullas() { // ZF { SCENE_ZORAS_FOUNTAIN, 0, true, { { ACTOR_EN_SW, { -1891, 187, 1911 }, { 16384, 18022, 0 }, -19964 } } }, // GF - { SCENE_GERUDOS_FORTRESS, 0, false, { { ACTOR_EN_SW, { 1598, 999, -2008 }, { 16384, -16384, 0 }, -19198 } } }, + { SCENE_GERUDOS_FORTRESS, + 0, + false, + { { ACTOR_EN_SW, { 1598, 999, -2008 }, { 16384, -16384, 0 }, -19198 } } }, { SCENE_GERUDOS_FORTRESS, 1, false, { { ACTOR_EN_SW, { 3377, 1734, -4935 }, { 16384, 0, 0 }, -19199 } } }, // Kak { SCENE_KAKARIKO_VILLAGE, 0, false, { { ACTOR_EN_SW, { -18, 540, 1800 }, { 0, -32768, 0 }, -20160 } } }, @@ -268,7 +280,8 @@ void RegisterDaytimeGoldSkultullas() { bool IsHyperBossesActive() { return CVarGetInteger(CVAR_ENHANCEMENT("HyperBosses"), 0) || - (IS_BOSS_RUSH && gSaveContext.ship.quest.data.bossRush.options[BR_OPTIONS_HYPERBOSSES] == BR_CHOICE_HYPERBOSSES_YES); + (IS_BOSS_RUSH && + gSaveContext.ship.quest.data.bossRush.options[BR_OPTIONS_HYPERBOSSES] == BR_CHOICE_HYPERBOSSES_YES); } void UpdateHyperBossesState() { @@ -279,53 +292,53 @@ void UpdateHyperBossesState() { } if (IsHyperBossesActive()) { - actorUpdateHookId = GameInteractor::Instance->RegisterGameHook([](void* refActor) { - // Run the update function a second time to make bosses move and act twice as fast. + actorUpdateHookId = + GameInteractor::Instance->RegisterGameHook([](void* refActor) { + // Run the update function a second time to make bosses move and act twice as fast. - Player* player = GET_PLAYER(gPlayState); - Actor* actor = static_cast(refActor); + Player* player = GET_PLAYER(gPlayState); + Actor* actor = static_cast(refActor); - uint8_t isBossActor = - actor->id == ACTOR_BOSS_GOMA || // Gohma - actor->id == ACTOR_BOSS_DODONGO || // King Dodongo - actor->id == ACTOR_EN_BDFIRE || // King Dodongo Fire Breath - actor->id == ACTOR_BOSS_VA || // Barinade - actor->id == ACTOR_BOSS_GANONDROF || // Phantom Ganon - actor->id == ACTOR_EN_FHG_FIRE || // Phantom Ganon/Ganondorf Energy Ball/Thunder - actor->id == ACTOR_EN_FHG || // Phantom Ganon's Horse - actor->id == ACTOR_BOSS_FD || actor->id == ACTOR_BOSS_FD2 || // Volvagia (grounded/flying) - actor->id == ACTOR_EN_VB_BALL || // Volvagia Rocks - actor->id == ACTOR_BOSS_MO || // Morpha - actor->id == ACTOR_BOSS_SST || // Bongo Bongo - actor->id == ACTOR_BOSS_TW || // Twinrova - actor->id == ACTOR_BOSS_GANON || // Ganondorf - actor->id == ACTOR_BOSS_GANON2; // Ganon + uint8_t isBossActor = actor->id == ACTOR_BOSS_GOMA || // Gohma + actor->id == ACTOR_BOSS_DODONGO || // King Dodongo + actor->id == ACTOR_EN_BDFIRE || // King Dodongo Fire Breath + actor->id == ACTOR_BOSS_VA || // Barinade + actor->id == ACTOR_BOSS_GANONDROF || // Phantom Ganon + actor->id == ACTOR_EN_FHG_FIRE || // Phantom Ganon/Ganondorf Energy Ball/Thunder + actor->id == ACTOR_EN_FHG || // Phantom Ganon's Horse + actor->id == ACTOR_BOSS_FD || + actor->id == ACTOR_BOSS_FD2 || // Volvagia (grounded/flying) + actor->id == ACTOR_EN_VB_BALL || // Volvagia Rocks + actor->id == ACTOR_BOSS_MO || // Morpha + actor->id == ACTOR_BOSS_SST || // Bongo Bongo + actor->id == ACTOR_BOSS_TW || // Twinrova + actor->id == ACTOR_BOSS_GANON || // Ganondorf + actor->id == ACTOR_BOSS_GANON2; // Ganon - // Don't apply during cutscenes because it causes weird behaviour and/or crashes on some bosses. - if (IsHyperBossesActive() && isBossActor && !Player_InBlockingCsMode(gPlayState, player)) { - // Barinade needs to be updated in sequence to avoid unintended behaviour. - if (actor->id == ACTOR_BOSS_VA) { - // params -1 is BOSSVA_BODY - if (actor->params == -1) { - Actor* actorList = gPlayState->actorCtx.actorLists[ACTORCAT_BOSS].head; - while (actorList != NULL) { - GameInteractor::RawAction::UpdateActor(actorList); - actorList = actorList->next; + // Don't apply during cutscenes because it causes weird behaviour and/or crashes on some bosses. + if (IsHyperBossesActive() && isBossActor && !Player_InBlockingCsMode(gPlayState, player)) { + // Barinade needs to be updated in sequence to avoid unintended behaviour. + if (actor->id == ACTOR_BOSS_VA) { + // params -1 is BOSSVA_BODY + if (actor->params == -1) { + Actor* actorList = gPlayState->actorCtx.actorLists[ACTORCAT_BOSS].head; + while (actorList != NULL) { + GameInteractor::RawAction::UpdateActor(actorList); + actorList = actorList->next; + } } + } else { + GameInteractor::RawAction::UpdateActor(actor); } - } else { - GameInteractor::RawAction::UpdateActor(actor); } - } - }); + }); } } void RegisterHyperBosses() { UpdateHyperBossesState(); - GameInteractor::Instance->RegisterGameHook([](int16_t fileNum) { - UpdateHyperBossesState(); - }); + GameInteractor::Instance->RegisterGameHook( + [](int16_t fileNum) { UpdateHyperBossesState(); }); } void UpdateHyperEnemiesState() { @@ -336,22 +349,23 @@ void UpdateHyperEnemiesState() { } if (CVarGetInteger(CVAR_ENHANCEMENT("HyperEnemies"), 0)) { - actorUpdateHookId = GameInteractor::Instance->RegisterGameHook([](void* refActor) { - // Run the update function a second time to make enemies and minibosses move and act twice as fast. + actorUpdateHookId = + GameInteractor::Instance->RegisterGameHook([](void* refActor) { + // Run the update function a second time to make enemies and minibosses move and act twice as fast. - Player* player = GET_PLAYER(gPlayState); - Actor* actor = static_cast(refActor); + Player* player = GET_PLAYER(gPlayState); + Actor* actor = static_cast(refActor); - // Some enemies are not in the ACTORCAT_ENEMY category, and some are that aren't really enemies. - bool isEnemy = actor->category == ACTORCAT_ENEMY || actor->id == ACTOR_EN_TORCH2; - bool isExcludedEnemy = actor->id == ACTOR_EN_FIRE_ROCK || actor->id == ACTOR_EN_ENCOUNT2; + // Some enemies are not in the ACTORCAT_ENEMY category, and some are that aren't really enemies. + bool isEnemy = actor->category == ACTORCAT_ENEMY || actor->id == ACTOR_EN_TORCH2; + bool isExcludedEnemy = actor->id == ACTOR_EN_FIRE_ROCK || actor->id == ACTOR_EN_ENCOUNT2; - // Don't apply during cutscenes because it causes weird behaviour and/or crashes on some cutscenes. - if (CVarGetInteger(CVAR_ENHANCEMENT("HyperEnemies"), 0) && isEnemy && !isExcludedEnemy && - !Player_InBlockingCsMode(gPlayState, player)) { - GameInteractor::RawAction::UpdateActor(actor); - } - }); + // Don't apply during cutscenes because it causes weird behaviour and/or crashes on some cutscenes. + if (CVarGetInteger(CVAR_ENHANCEMENT("HyperEnemies"), 0) && isEnemy && !isExcludedEnemy && + !Player_InBlockingCsMode(gPlayState, player)) { + GameInteractor::RawAction::UpdateActor(actor); + } + }); } } @@ -390,7 +404,7 @@ void RegisterBonkDamage() { default: break; } - + Health_ChangeBy(gPlayState, -bonkDamage); // Set invincibility to make Link flash red as a visual damage indicator. Player* player = GET_PLAYER(gPlayState); @@ -403,7 +417,8 @@ void UpdateDirtPathFixState(int32_t sceneNum) { case SCENE_HYRULE_FIELD: case SCENE_KOKIRI_FOREST: case SCENE_HYRULE_CASTLE: - CVarSetInteger(CVAR_Z_FIGHTING_MODE, CVarGetInteger(CVAR_ENHANCEMENT("SceneSpecificDirtPathFix"), ZFIGHT_FIX_DISABLED)); + CVarSetInteger(CVAR_Z_FIGHTING_MODE, + CVarGetInteger(CVAR_ENHANCEMENT("SceneSpecificDirtPathFix"), ZFIGHT_FIX_DISABLED)); return; default: CVarClear(CVAR_Z_FIGHTING_MODE); @@ -411,9 +426,8 @@ void UpdateDirtPathFixState(int32_t sceneNum) { } void RegisterMenuPathFix() { - GameInteractor::Instance->RegisterGameHook([](int32_t sceneNum) { - UpdateDirtPathFixState(sceneNum); - }); + GameInteractor::Instance->RegisterGameHook( + [](int32_t sceneNum) { UpdateDirtPathFixState(sceneNum); }); } void UpdateMirrorModeState(int32_t sceneNum) { @@ -421,27 +435,28 @@ void UpdateMirrorModeState(int32_t sceneNum) { bool nextMirroredWorld = false; int16_t mirroredMode = CVarGetInteger(CVAR_ENHANCEMENT("MirroredWorldMode"), MIRRORED_WORLD_OFF); - int16_t inDungeon = (sceneNum >= SCENE_DEKU_TREE && sceneNum <= SCENE_INSIDE_GANONS_CASTLE_COLLAPSE && sceneNum != SCENE_THIEVES_HIDEOUT) || + int16_t inDungeon = (sceneNum >= SCENE_DEKU_TREE && sceneNum <= SCENE_INSIDE_GANONS_CASTLE_COLLAPSE && + sceneNum != SCENE_THIEVES_HIDEOUT) || (sceneNum >= SCENE_DEKU_TREE_BOSS && sceneNum <= SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR) || (sceneNum == SCENE_GANON_BOSS); if (mirroredMode == MIRRORED_WORLD_RANDOM_SEEDED || mirroredMode == MIRRORED_WORLD_DUNGEONS_RANDOM_SEEDED) { - uint32_t seed = sceneNum + (IS_RANDO ? Rando::Context::GetInstance()->GetSeed() - : gSaveContext.ship.stats.fileCreatedAt); + uint32_t seed = + sceneNum + (IS_RANDO ? Rando::Context::GetInstance()->GetSeed() : gSaveContext.ship.stats.fileCreatedAt); Random_Init(seed); } bool randomMirror = Random(0, 2) == 1; - if ( - mirroredMode == MIRRORED_WORLD_ALWAYS || + if (mirroredMode == MIRRORED_WORLD_ALWAYS || ((mirroredMode == MIRRORED_WORLD_RANDOM || mirroredMode == MIRRORED_WORLD_RANDOM_SEEDED) && randomMirror) || // Dungeon modes - (inDungeon && (mirroredMode == MIRRORED_WORLD_DUNGEONS_ALL || - (mirroredMode == MIRRORED_WORLD_DUNGEONS_VANILLA && !ResourceMgr_IsSceneMasterQuest(sceneNum)) || - (mirroredMode == MIRRORED_WORLD_DUNGEONS_MQ && ResourceMgr_IsSceneMasterQuest(sceneNum)) || - ((mirroredMode == MIRRORED_WORLD_DUNGEONS_RANDOM || mirroredMode == MIRRORED_WORLD_DUNGEONS_RANDOM_SEEDED) && randomMirror))) - ) { + (inDungeon && + (mirroredMode == MIRRORED_WORLD_DUNGEONS_ALL || + (mirroredMode == MIRRORED_WORLD_DUNGEONS_VANILLA && !ResourceMgr_IsSceneMasterQuest(sceneNum)) || + (mirroredMode == MIRRORED_WORLD_DUNGEONS_MQ && ResourceMgr_IsSceneMasterQuest(sceneNum)) || + ((mirroredMode == MIRRORED_WORLD_DUNGEONS_RANDOM || mirroredMode == MIRRORED_WORLD_DUNGEONS_RANDOM_SEEDED) && + randomMirror)))) { nextMirroredWorld = true; CVarSetInteger(CVAR_ENHANCEMENT("MirroredWorld"), 1); } else { @@ -456,25 +471,33 @@ void UpdateMirrorModeState(int32_t sceneNum) { } void RegisterMirrorModeHandler() { - GameInteractor::Instance->RegisterGameHook([](int32_t sceneNum) { - UpdateMirrorModeState(sceneNum); - }); + GameInteractor::Instance->RegisterGameHook( + [](int32_t sceneNum) { UpdateMirrorModeState(sceneNum); }); } void UpdatePatchHand() { if ((CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && LINK_IS_CHILD) { - ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingHammerNearDL, "childHammer1", 92, gsSPDisplayListOTRFilePath(gLinkChildLeftFistNearDL)); + ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingHammerNearDL, "childHammer1", 92, + gsSPDisplayListOTRFilePath(gLinkChildLeftFistNearDL)); ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingHammerNearDL, "childHammer2", 93, gsSPEndDisplayList()); - ResourceMgr_PatchGfxByName(gLinkAdultRightHandHoldingHookshotNearDL, "childHookshot1", 84, gsSPDisplayListOTRFilePath(gLinkChildRightHandClosedNearDL)); - ResourceMgr_PatchGfxByName(gLinkAdultRightHandHoldingHookshotNearDL, "childHookshot2", 85, gsSPEndDisplayList()); - ResourceMgr_PatchGfxByName(gLinkAdultRightHandHoldingBowNearDL, "childBow1", 51, gsSPDisplayListOTRFilePath(gLinkChildRightHandClosedNearDL)); + ResourceMgr_PatchGfxByName(gLinkAdultRightHandHoldingHookshotNearDL, "childHookshot1", 84, + gsSPDisplayListOTRFilePath(gLinkChildRightHandClosedNearDL)); + ResourceMgr_PatchGfxByName(gLinkAdultRightHandHoldingHookshotNearDL, "childHookshot2", 85, + gsSPEndDisplayList()); + ResourceMgr_PatchGfxByName(gLinkAdultRightHandHoldingBowNearDL, "childBow1", 51, + gsSPDisplayListOTRFilePath(gLinkChildRightHandClosedNearDL)); ResourceMgr_PatchGfxByName(gLinkAdultRightHandHoldingBowNearDL, "childBow2", 52, gsSPEndDisplayList()); - ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingMasterSwordNearDL, "childMasterSword1", 104, gsSPDisplayListOTRFilePath(gLinkChildLeftFistNearDL)); - ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingMasterSwordNearDL, "childMasterSword2", 105, gsSPEndDisplayList()); - ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingBgsNearDL, "childBiggoronSword1", 79, gsSPDisplayListOTRFilePath(gLinkChildLeftFistNearDL)); + ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingMasterSwordNearDL, "childMasterSword1", 104, + gsSPDisplayListOTRFilePath(gLinkChildLeftFistNearDL)); + ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingMasterSwordNearDL, "childMasterSword2", 105, + gsSPEndDisplayList()); + ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingBgsNearDL, "childBiggoronSword1", 79, + gsSPDisplayListOTRFilePath(gLinkChildLeftFistNearDL)); ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingBgsNearDL, "childBiggoronSword2", 80, gsSPEndDisplayList()); - ResourceMgr_PatchGfxByName(gLinkAdultHandHoldingBrokenGiantsKnifeDL, "childBrokenGiantsKnife1", 76, gsSPDisplayListOTRFilePath(gLinkChildLeftFistNearDL)); - ResourceMgr_PatchGfxByName(gLinkAdultHandHoldingBrokenGiantsKnifeDL, "childBrokenGiantsKnife2", 77, gsSPEndDisplayList()); + ResourceMgr_PatchGfxByName(gLinkAdultHandHoldingBrokenGiantsKnifeDL, "childBrokenGiantsKnife1", 76, + gsSPDisplayListOTRFilePath(gLinkChildLeftFistNearDL)); + ResourceMgr_PatchGfxByName(gLinkAdultHandHoldingBrokenGiantsKnifeDL, "childBrokenGiantsKnife2", 77, + gsSPEndDisplayList()); } else { ResourceMgr_UnpatchGfxByName(gLinkAdultLeftHandHoldingHammerNearDL, "childHammer1"); @@ -489,12 +512,16 @@ void UpdatePatchHand() { ResourceMgr_UnpatchGfxByName(gLinkAdultLeftHandHoldingBgsNearDL, "childBiggoronSword2"); ResourceMgr_UnpatchGfxByName(gLinkAdultHandHoldingBrokenGiantsKnifeDL, "childBrokenGiantsKnife1"); ResourceMgr_UnpatchGfxByName(gLinkAdultHandHoldingBrokenGiantsKnifeDL, "childBrokenGiantsKnife2"); - } + } if ((CVarGetInteger(CVAR_ENHANCEMENT("EquipmentAlwaysVisible"), 0)) && LINK_IS_ADULT) { - ResourceMgr_PatchGfxByName(gLinkChildLeftFistAndKokiriSwordNearDL, "adultKokiriSword", 13, gsSPDisplayListOTRFilePath(gLinkAdultLeftHandClosedNearDL)); - ResourceMgr_PatchGfxByName(gLinkChildRightHandHoldingSlingshotNearDL, "adultSlingshot", 13, gsSPDisplayListOTRFilePath(gLinkAdultRightHandClosedNearDL)); - ResourceMgr_PatchGfxByName(gLinkChildLeftFistAndBoomerangNearDL, "adultBoomerang", 50, gsSPDisplayListOTRFilePath(gLinkAdultLeftHandClosedNearDL)); - ResourceMgr_PatchGfxByName(gLinkChildRightFistAndDekuShieldNearDL, "adultDekuShield", 49, gsSPDisplayListOTRFilePath(gLinkAdultRightHandClosedNearDL)); + ResourceMgr_PatchGfxByName(gLinkChildLeftFistAndKokiriSwordNearDL, "adultKokiriSword", 13, + gsSPDisplayListOTRFilePath(gLinkAdultLeftHandClosedNearDL)); + ResourceMgr_PatchGfxByName(gLinkChildRightHandHoldingSlingshotNearDL, "adultSlingshot", 13, + gsSPDisplayListOTRFilePath(gLinkAdultRightHandClosedNearDL)); + ResourceMgr_PatchGfxByName(gLinkChildLeftFistAndBoomerangNearDL, "adultBoomerang", 50, + gsSPDisplayListOTRFilePath(gLinkAdultLeftHandClosedNearDL)); + ResourceMgr_PatchGfxByName(gLinkChildRightFistAndDekuShieldNearDL, "adultDekuShield", 49, + gsSPDisplayListOTRFilePath(gLinkAdultRightHandClosedNearDL)); } else { ResourceMgr_UnpatchGfxByName(gLinkChildLeftFistAndKokiriSwordNearDL, "adultKokiriSword"); ResourceMgr_UnpatchGfxByName(gLinkChildRightHandHoldingSlingshotNearDL, "adultSlingshot"); @@ -502,7 +529,8 @@ void UpdatePatchHand() { ResourceMgr_UnpatchGfxByName(gLinkChildRightFistAndDekuShieldNearDL, "adultDekuShield"); } if (CVarGetInteger("gEnhancements.FixHammerHand", 0) && LINK_IS_ADULT) { - ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingHammerNearDL, "hammerHand1", 92, gsSPDisplayListOTRFilePath(gLinkAdultLeftHandClosedNearDL)); + ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingHammerNearDL, "hammerHand1", 92, + gsSPDisplayListOTRFilePath(gLinkAdultLeftHandClosedNearDL)); ResourceMgr_PatchGfxByName(gLinkAdultLeftHandHoldingHammerNearDL, "hammerHand2", 93, gsSPEndDisplayList()); } else { ResourceMgr_UnpatchGfxByName(gLinkAdultLeftHandHoldingHammerNearDL, "hammerHand1"); @@ -511,62 +539,61 @@ void UpdatePatchHand() { } void RegisterPatchHandHandler() { - GameInteractor::Instance->RegisterGameHook([](int32_t sceneNum) { - UpdatePatchHand(); - }); + GameInteractor::Instance->RegisterGameHook( + [](int32_t sceneNum) { UpdatePatchHand(); }); } void RegisterResetNaviTimer() { GameInteractor::Instance->RegisterGameHook([](int32_t sceneNum) { - if (CVarGetInteger(CVAR_ENHANCEMENT("ResetNaviTimer"), 0)) { - gSaveContext.naviTimer = 0; - } - }); + if (CVarGetInteger(CVAR_ENHANCEMENT("ResetNaviTimer"), 0)) { + gSaveContext.naviTimer = 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 -//or only sometimes count (like ACTOR_EN_TP) -//have to be manually handled in RegisterEnemyDefeatCounts +// 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 +// or only sometimes count (like ACTOR_EN_TP) +// have to be manually handled in RegisterEnemyDefeatCounts static std::unordered_map uniqueEnemyIdToStatCount = { - { ACTOR_EN_ANUBICE, COUNT_ENEMIES_DEFEATED_ANUBIS }, - { ACTOR_EN_AM, COUNT_ENEMIES_DEFEATED_ARMOS }, - { ACTOR_EN_CLEAR_TAG, COUNT_ENEMIES_DEFEATED_ARWING }, - { ACTOR_EN_VALI, COUNT_ENEMIES_DEFEATED_BARI }, - { ACTOR_EN_VM, COUNT_ENEMIES_DEFEATED_BEAMOS }, - { ACTOR_EN_BIGOKUTA, COUNT_ENEMIES_DEFEATED_BIG_OCTO }, - { ACTOR_EN_BILI, COUNT_ENEMIES_DEFEATED_BIRI }, - { ACTOR_EN_DNS, COUNT_ENEMIES_DEFEATED_BUSINESS_SCRUB }, - { ACTOR_EN_TORCH, COUNT_ENEMIES_DEFEATED_DARK_LINK }, - { ACTOR_EN_DH, COUNT_ENEMIES_DEFEATED_DEAD_HAND }, - { ACTOR_EN_HINTNUTS, COUNT_ENEMIES_DEFEATED_DEKU_SCRUB }, - { ACTOR_EN_DODONGO, COUNT_ENEMIES_DEFEATED_DODONGO }, - { ACTOR_EN_DODOJR, COUNT_ENEMIES_DEFEATED_DODONGO_BABY }, - { ACTOR_DOOR_KILLER, COUNT_ENEMIES_DEFEATED_DOOR_TRAP }, - { ACTOR_EN_FD, COUNT_ENEMIES_DEFEATED_FLARE_DANCER }, - { ACTOR_EN_FLOORMAS, COUNT_ENEMIES_DEFEATED_FLOORMASTER }, - { ACTOR_EN_TUBO_TRAP, COUNT_ENEMIES_DEFEATED_FLYING_POT }, - { ACTOR_EN_YUKABYUN, COUNT_ENEMIES_DEFEATED_FLOOR_TILE }, - { ACTOR_EN_FZ, COUNT_ENEMIES_DEFEATED_FREEZARD }, - { ACTOR_EN_GELDB, COUNT_ENEMIES_DEFEATED_GERUDO_THIEF }, - { ACTOR_EN_GOMA, COUNT_ENEMIES_DEFEATED_GOHMA_LARVA }, - { ACTOR_EN_CROW, COUNT_ENEMIES_DEFEATED_GUAY }, - { ACTOR_EN_RR, COUNT_ENEMIES_DEFEATED_LIKE_LIKE }, - { ACTOR_EN_DEKUNUTS, COUNT_ENEMIES_DEFEATED_MAD_SCRUB }, - { ACTOR_EN_OKUTA, COUNT_ENEMIES_DEFEATED_OCTOROK }, - { ACTOR_EN_BA, COUNT_ENEMIES_DEFEATED_PARASITIC_TENTACLE }, + { ACTOR_EN_ANUBICE, COUNT_ENEMIES_DEFEATED_ANUBIS }, + { ACTOR_EN_AM, COUNT_ENEMIES_DEFEATED_ARMOS }, + { ACTOR_EN_CLEAR_TAG, COUNT_ENEMIES_DEFEATED_ARWING }, + { ACTOR_EN_VALI, COUNT_ENEMIES_DEFEATED_BARI }, + { ACTOR_EN_VM, COUNT_ENEMIES_DEFEATED_BEAMOS }, + { ACTOR_EN_BIGOKUTA, COUNT_ENEMIES_DEFEATED_BIG_OCTO }, + { ACTOR_EN_BILI, COUNT_ENEMIES_DEFEATED_BIRI }, + { ACTOR_EN_DNS, COUNT_ENEMIES_DEFEATED_BUSINESS_SCRUB }, + { ACTOR_EN_TORCH, COUNT_ENEMIES_DEFEATED_DARK_LINK }, + { ACTOR_EN_DH, COUNT_ENEMIES_DEFEATED_DEAD_HAND }, + { ACTOR_EN_HINTNUTS, COUNT_ENEMIES_DEFEATED_DEKU_SCRUB }, + { ACTOR_EN_DODONGO, COUNT_ENEMIES_DEFEATED_DODONGO }, + { ACTOR_EN_DODOJR, COUNT_ENEMIES_DEFEATED_DODONGO_BABY }, + { ACTOR_DOOR_KILLER, COUNT_ENEMIES_DEFEATED_DOOR_TRAP }, + { ACTOR_EN_FD, COUNT_ENEMIES_DEFEATED_FLARE_DANCER }, + { ACTOR_EN_FLOORMAS, COUNT_ENEMIES_DEFEATED_FLOORMASTER }, + { ACTOR_EN_TUBO_TRAP, COUNT_ENEMIES_DEFEATED_FLYING_POT }, + { ACTOR_EN_YUKABYUN, COUNT_ENEMIES_DEFEATED_FLOOR_TILE }, + { ACTOR_EN_FZ, COUNT_ENEMIES_DEFEATED_FREEZARD }, + { ACTOR_EN_GELDB, COUNT_ENEMIES_DEFEATED_GERUDO_THIEF }, + { ACTOR_EN_GOMA, COUNT_ENEMIES_DEFEATED_GOHMA_LARVA }, + { ACTOR_EN_CROW, COUNT_ENEMIES_DEFEATED_GUAY }, + { ACTOR_EN_RR, COUNT_ENEMIES_DEFEATED_LIKE_LIKE }, + { ACTOR_EN_DEKUNUTS, COUNT_ENEMIES_DEFEATED_MAD_SCRUB }, + { ACTOR_EN_OKUTA, COUNT_ENEMIES_DEFEATED_OCTOROK }, + { ACTOR_EN_BA, COUNT_ENEMIES_DEFEATED_PARASITIC_TENTACLE }, { ACTOR_EN_PO_SISTERS, COUNT_ENEMIES_DEFEATED_POE_SISTERS }, - { ACTOR_EN_BUBBLE, COUNT_ENEMIES_DEFEATED_SHABOM }, - { ACTOR_EN_SB, COUNT_ENEMIES_DEFEATED_SHELLBLADE }, - { ACTOR_EN_SKJ, COUNT_ENEMIES_DEFEATED_SKULL_KID }, - { ACTOR_EN_NY, COUNT_ENEMIES_DEFEATED_SPIKE }, - { ACTOR_EN_SKB, COUNT_ENEMIES_DEFEATED_STALCHILD }, - { ACTOR_EN_TEST, COUNT_ENEMIES_DEFEATED_STALFOS }, - { ACTOR_EN_WEIYER, COUNT_ENEMIES_DEFEATED_STINGER }, - { ACTOR_EN_BW, COUNT_ENEMIES_DEFEATED_TORCH_SLUG }, - { ACTOR_EN_WALLMAS, COUNT_ENEMIES_DEFEATED_WALLMASTER }, - { ACTOR_EN_KAREBABA, COUNT_ENEMIES_DEFEATED_WITHERED_DEKU_BABA }, + { ACTOR_EN_BUBBLE, COUNT_ENEMIES_DEFEATED_SHABOM }, + { ACTOR_EN_SB, COUNT_ENEMIES_DEFEATED_SHELLBLADE }, + { ACTOR_EN_SKJ, COUNT_ENEMIES_DEFEATED_SKULL_KID }, + { ACTOR_EN_NY, COUNT_ENEMIES_DEFEATED_SPIKE }, + { ACTOR_EN_SKB, COUNT_ENEMIES_DEFEATED_STALCHILD }, + { ACTOR_EN_TEST, COUNT_ENEMIES_DEFEATED_STALFOS }, + { ACTOR_EN_WEIYER, COUNT_ENEMIES_DEFEATED_STINGER }, + { ACTOR_EN_BW, COUNT_ENEMIES_DEFEATED_TORCH_SLUG }, + { ACTOR_EN_WALLMAS, COUNT_ENEMIES_DEFEATED_WALLMASTER }, + { ACTOR_EN_KAREBABA, COUNT_ENEMIES_DEFEATED_WITHERED_DEKU_BABA }, }; void RegisterEnemyDefeatCounts() { @@ -630,16 +657,14 @@ void RegisterEnemyDefeatCounts() { } break; - case ACTOR_EN_REEBA: - { - EnReeba* reeba = (EnReeba*)actor; - if (reeba->isBig) { - gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_LEEVER_BIG]++; - } else { - gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_LEEVER]++; - } + case ACTOR_EN_REEBA: { + EnReeba* reeba = (EnReeba*)actor; + if (reeba->isBig) { + gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_LEEVER_BIG]++; + } else { + gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_LEEVER]++; } - break; + } break; case ACTOR_EN_MB: if (actor->params == 0) { @@ -690,7 +715,8 @@ void RegisterEnemyDefeatCounts() { break; case ACTOR_EN_TP: - if (actor->params == TAILPASARAN_HEAD) { // Only count the head, otherwise each body segment will increment + // Only count the head, otherwise each body segment will increment + if (actor->params == TAILPASARAN_HEAD) { gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_TAILPASARAN]++; } break; @@ -755,26 +781,25 @@ void RegisterBossDefeatTimestamps() { } void UpdateHurtContainerModeState(bool newState) { - static bool hurtEnabled = false; - if (hurtEnabled == newState) { - return; - } + static bool hurtEnabled = false; + if (hurtEnabled == newState) { + return; + } - hurtEnabled = newState; - uint16_t getHeartPieces = gSaveContext.ship.stats.heartPieces / 4; - uint16_t getHeartContainers = gSaveContext.ship.stats.heartContainers; + hurtEnabled = newState; + uint16_t getHeartPieces = gSaveContext.ship.stats.heartPieces / 4; + uint16_t getHeartContainers = gSaveContext.ship.stats.heartContainers; - if (hurtEnabled) { - gSaveContext.healthCapacity = 320 - ((getHeartPieces + getHeartContainers) * 16); - } else { - gSaveContext.healthCapacity = 48 + ((getHeartPieces + getHeartContainers) * 16); - } + if (hurtEnabled) { + gSaveContext.healthCapacity = 320 - ((getHeartPieces + getHeartContainers) * 16); + } else { + gSaveContext.healthCapacity = 48 + ((getHeartPieces + getHeartContainers) * 16); + } } void RegisterHurtContainerModeHandler() { - GameInteractor::Instance->RegisterGameHook([](int32_t fileNum) { - UpdateHurtContainerModeState(CVarGetInteger(CVAR_ENHANCEMENT("HurtContainer"), 0)); - }); + GameInteractor::Instance->RegisterGameHook( + [](int32_t fileNum) { UpdateHurtContainerModeState(CVarGetInteger(CVAR_ENHANCEMENT("HurtContainer"), 0)); }); } void RegisterRandomizedEnemySizes() { @@ -794,7 +819,8 @@ void RegisterRandomizedEnemySizes() { actor->id == ACTOR_BOSS_FD2 || actor->id == ACTOR_EN_DH; // Only apply to enemies and bosses. - if (!CVarGetInteger(CVAR_ENHANCEMENT("RandomizedEnemySizes"), 0) || (actor->category != ACTORCAT_ENEMY && actor->category != ACTORCAT_BOSS) || excludedEnemy) { + if (!CVarGetInteger(CVAR_ENHANCEMENT("RandomizedEnemySizes"), 0) || + (actor->category != ACTORCAT_ENEMY && actor->category != ACTORCAT_BOSS) || excludedEnemy) { return; } @@ -808,8 +834,8 @@ void RegisterRandomizedEnemySizes() { randomNumber = rand() % 200; // Between 100% and 300% size. randomScale = 1.0f + (randomNumber / 100); - // Small actor } else { + // Small actor randomNumber = rand() % 90; // Between 10% and 100% size. randomScale = 0.1f + (randomNumber / 100); @@ -834,7 +860,8 @@ void RegisterOpenAllHours() { GameInteractor::Instance->RegisterGameHook([](void* refActor) { Actor* actor = static_cast(refActor); - if (CVarGetInteger(CVAR_ENHANCEMENT("OpenAllHours"), 0) && (actor->id == ACTOR_EN_DOOR) && (!IS_RANDO || !OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_LOCK_OVERWORLD_DOORS))) { + if (CVarGetInteger(CVAR_ENHANCEMENT("OpenAllHours"), 0) && (actor->id == ACTOR_EN_DOOR) && + (!IS_RANDO || !OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_LOCK_OVERWORLD_DOORS))) { switch (actor->params) { case 4753: // Night Market Bazaar case 1678: // Night Potion Shop @@ -866,47 +893,65 @@ void PatchToTMedallions() { ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_StartGrayscale", 7, gsSPGrayscale(true)); if (CHECK_QUEST_ITEM(QUEST_MEDALLION_WATER)) { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeBlue", 16, gsDPSetGrayscaleColor(0, 161, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeBlue", 16, + gsDPSetGrayscaleColor(0, 161, 255, 255)); } else { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeBlue", 16, gsDPSetGrayscaleColor(255, 255, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeBlue", 16, + gsDPSetGrayscaleColor(255, 255, 255, 255)); } if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeOrange", 45, gsDPSetGrayscaleColor(255, 135, 0, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeOrange", 45, + gsDPSetGrayscaleColor(255, 135, 0, 255)); } else { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeOrange", 45, gsDPSetGrayscaleColor(255, 255, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeOrange", 45, + gsDPSetGrayscaleColor(255, 255, 255, 255)); } if (CHECK_QUEST_ITEM(QUEST_MEDALLION_LIGHT)) { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeYellow", 69, gsDPSetGrayscaleColor(255, 255, 0, 255)); - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_MakeYellow", 16, gsDPSetGrayscaleColor(255, 255, 0, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeYellow", 69, + gsDPSetGrayscaleColor(255, 255, 0, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_MakeYellow", 16, + gsDPSetGrayscaleColor(255, 255, 0, 255)); } else { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeYellow", 69, gsDPSetGrayscaleColor(255, 255, 255, 255)); - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_MakeYellow", 16, gsDPSetGrayscaleColor(255, 255, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeYellow", 69, + gsDPSetGrayscaleColor(255, 255, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_MakeYellow", 16, + gsDPSetGrayscaleColor(255, 255, 255, 255)); } if (CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST)) { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeGreen", 94, gsDPSetGrayscaleColor(0, 255, 0, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeGreen", 94, + gsDPSetGrayscaleColor(0, 255, 0, 255)); } else { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeGreen", 94, gsDPSetGrayscaleColor(255, 255, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeGreen", 94, + gsDPSetGrayscaleColor(255, 255, 255, 255)); } if (CHECK_QUEST_ITEM(QUEST_MEDALLION_FIRE)) { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeRed", 118, gsDPSetGrayscaleColor(255, 0, 0, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeRed", 118, + gsDPSetGrayscaleColor(255, 0, 0, 255)); } else { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeRed", 118, gsDPSetGrayscaleColor(255, 255, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakeRed", 118, + gsDPSetGrayscaleColor(255, 255, 255, 255)); } if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW)) { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakePurple", 142, gsDPSetGrayscaleColor(212, 0, 255, 255)); - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_MakePurple", 27, gsDPSetGrayscaleColor(212, 0, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakePurple", 142, + gsDPSetGrayscaleColor(212, 0, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_MakePurple", 27, + gsDPSetGrayscaleColor(212, 0, 255, 255)); } else { - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakePurple", 142, gsDPSetGrayscaleColor(255, 255, 255, 255)); - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_MakePurple", 27, gsDPSetGrayscaleColor(255, 255, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_MakePurple", 142, + gsDPSetGrayscaleColor(255, 255, 255, 255)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_MakePurple", 27, + gsDPSetGrayscaleColor(255, 255, 255, 255)); } - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_EndGrayscaleAndEndDlist", 160, gsSPBranchListOTRFilePath(gEndGrayscaleAndEndDlistDL)); - ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_EndGrayscaleAndEndDlist", 51, gsSPBranchListOTRFilePath(gEndGrayscaleAndEndDlistDL)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_EndGrayscaleAndEndDlist", 160, + gsSPBranchListOTRFilePath(gEndGrayscaleAndEndDlistDL)); + ResourceMgr_PatchGfxByName(tokinoma_room_0DL_007FD0, "ToTMedallions_2_EndGrayscaleAndEndDlist", 51, + gsSPBranchListOTRFilePath(gEndGrayscaleAndEndDlistDL)); } else { // Unpatch everything ResourceMgr_UnpatchGfxByName(tokinoma_room_0DL_007A70, "ToTMedallions_StartGrayscale"); @@ -927,7 +972,8 @@ void PatchToTMedallions() { void RegisterToTMedallions() { GameInteractor::Instance->RegisterGameHook([](GetItemEntry _unused) { - if (!CVarGetInteger(CVAR_ENHANCEMENT("ToTMedallionsColors"), 0) || !gPlayState || gPlayState->sceneNum != SCENE_TEMPLE_OF_TIME) { + if (!CVarGetInteger(CVAR_ENHANCEMENT("ToTMedallionsColors"), 0) || !gPlayState || + gPlayState->sceneNum != SCENE_TEMPLE_OF_TIME) { return; } PatchToTMedallions(); @@ -940,7 +986,6 @@ void RegisterToTMedallions() { }); } - void RegisterFloorSwitchesHook() { GameInteractor::Instance->RegisterGameHook([](void* refActor) { Actor* actor = static_cast(refActor); @@ -965,10 +1010,10 @@ void RegisterPauseMenuHooks() { return; } if (!pauseWarpHooksRegistered) { - GameInteractor::Instance->RegisterGameHook([]() {PauseWarp_HandleSelection();}); - GameInteractor::Instance->RegisterGameHook([]() { - PauseWarp_Execute(); - }); + GameInteractor::Instance->RegisterGameHook( + []() { PauseWarp_HandleSelection(); }); + GameInteractor::Instance->RegisterGameHook( + []() { PauseWarp_Execute(); }); pauseWarpHooksRegistered = true; } }); @@ -978,7 +1023,6 @@ void RegisterCustomSkeletons() { static int8_t previousTunic = -1; GameInteractor::Instance->RegisterGameHook([]() { - if (!GameInteractor::IsSaveLoaded() || gPlayState == NULL) { return; } diff --git a/soh/soh/Enhancements/nametag.cpp b/soh/soh/Enhancements/nametag.cpp index 49b0891fa..253c0980b 100644 --- a/soh/soh/Enhancements/nametag.cpp +++ b/soh/soh/Enhancements/nametag.cpp @@ -19,15 +19,15 @@ extern PlayState* gPlayState; typedef struct { Actor* actor; - std::string text; // Original text + std::string text; // Original text std::string processedText; // Text filtered for supported font textures - const char* tag; // Tag identifier - Color_RGBA8 textColor; // Text color override. Global color is used if alpha is 0 - int16_t height; // Textbox height - int16_t width; // Textbox width - int16_t yOffset; // Addition Y offset - Mtx* mtx; // Allocated Mtx for rendering - Vtx* vtx; // Allocated Vtx for rendering + const char* tag; // Tag identifier + Color_RGBA8 textColor; // Text color override. Global color is used if alpha is 0 + int16_t height; // Textbox height + int16_t width; // Textbox width + int16_t yOffset; // Addition Y offset + Mtx* mtx; // Allocated Mtx for rendering + Vtx* vtx; // Allocated Vtx for rendering } NameTag; static std::vector nameTags; @@ -69,7 +69,7 @@ void DrawNameTag(PlayState* play, const NameTag* nameTag) { return; } - Color_RGBA8 textboxColor = { 0, 0, 0, 80}; + Color_RGBA8 textboxColor = { 0, 0, 0, 80 }; Color_RGBA8 textColor = { 255, 255, 255, 255 }; if (CVarGetInteger(CVAR_COSMETIC("HUD.NameTagActorBackground.Changed"), 0)) { @@ -118,8 +118,6 @@ void DrawNameTag(PlayState* play, const NameTag* nameTag) { } for (size_t i = 0, vtxGroup = 0; i < numChar; i++) { - uint16_t texIndex = nameTag->processedText[i] - 32; - // A maximum of 64 Vtx can be loaded at once by gSPVertex, or basically 16 characters // handle loading groups of 16 chars at a time until there are no more left to load if (i % 16 == 0) { @@ -128,18 +126,16 @@ void DrawNameTag(PlayState* play, const NameTag* nameTag) { vtxGroup++; } - if (texIndex != 0 && nameTag->processedText[i] != '\n') { - uintptr_t texture = (uintptr_t)Font_FetchCharTexture(texIndex); - int16_t vertexStart = 4 * (i % 16); + uintptr_t texture = (uintptr_t)Ship_GetCharFontTexture(nameTag->processedText[i]); + int16_t vertexStart = 4 * (i % 16); - // Multi-instruction macro, need to insert all to the dl buffer - Gfx charTexture[] = { gsDPLoadTextureBlock_4b( - texture, G_IM_FMT_I, FONT_CHAR_TEX_WIDTH, FONT_CHAR_TEX_HEIGHT, 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) }; - nameTagDl.insert(nameTagDl.end(), std::begin(charTexture), std::end(charTexture)); + // Multi-instruction macro, need to insert all to the dl buffer + Gfx charTexture[] = { gsDPLoadTextureBlock_4b(texture, G_IM_FMT_I, FONT_CHAR_TEX_WIDTH, FONT_CHAR_TEX_HEIGHT, 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) }; + nameTagDl.insert(nameTagDl.end(), std::begin(charTexture), std::end(charTexture)); - nameTagDl.push_back(gsSP1Quadrangle(vertexStart, vertexStart + 2, vertexStart + 3, vertexStart + 1, 0)); - } + nameTagDl.push_back(gsSP1Quadrangle(vertexStart, vertexStart + 2, vertexStart + 3, vertexStart + 1, 0)); } nameTagDl.push_back(gsSPPopMatrix(G_MTX_MODELVIEW)); @@ -199,11 +195,14 @@ extern "C" void NameTag_RegisterForActorWithOptions(Actor* actor, const char* te std::string processedText = std::string(Interface_ReplaceSpecialCharacters((char*)text)); // Strip out unsupported characters - processedText.erase(std::remove_if(processedText.begin(), processedText.end(), [](const char& c) { - // 172 is max supported texture for the in-game font system, - // and filter anything less than a space but not the newline or nul characters - return (unsigned char)c > 172 || (c < ' ' && c != '\n' && c != '\0'); - }), processedText.end()); + processedText.erase(std::remove_if(processedText.begin(), processedText.end(), + [](const char& c) { + // 172 is max supported texture for the in-game font system, + // and filter anything less than a space but not the newline or nul + // characters + return (unsigned char)c > 172 || (c < ' ' && c != '\n' && c != '\0'); + }), + processedText.end()); int16_t numChar = processedText.length(); int16_t numLines = 1; @@ -220,14 +219,9 @@ extern "C" void NameTag_RegisterForActorWithOptions(Actor* actor, const char* te numLines++; } - int16_t charIndex = processedText[i] - 32; - int16_t charWidth = 0; - // Don't add width for newline chars - if (charIndex >= 0) { - charWidth = (int16_t)(Message_GetCharacterWidth(charIndex) * (100.0f / R_TEXT_CHAR_SCALE)); - } + int16_t charWidth = (int16_t)(Ship_GetCharFontWidth(processedText[i])); - Interface_CreateQuadVertexGroup(&(vertices)[(i + 1) * 4], offsetX, (numLines - 1) * 16, charWidth, 16, 0); + Ship_CreateQuadVertexGroup(&(vertices)[(i + 1) * 4], offsetX, (numLines - 1) * 16, charWidth, 16, 0); offsetX += charWidth; if (offsetX > maxOffsetX) { @@ -238,7 +232,7 @@ extern "C" void NameTag_RegisterForActorWithOptions(Actor* actor, const char* te // Vtx for textbox, add +/- 4 in all directions int16_t height = (numLines * 16) + 8; int16_t width = maxOffsetX + 8; - Interface_CreateQuadVertexGroup(vertices, -4, -4, width, height, 0); + Ship_CreateQuadVertexGroup(vertices, -4, -4, width, height, 0); // Update the texture coordinates to consume the full textbox texture size (including mirror region) vertices[1].v.tc[0] = 256 << 5; diff --git a/soh/soh/Enhancements/nametag.h b/soh/soh/Enhancements/nametag.h index 9fd26643e..98b83f7cc 100644 --- a/soh/soh/Enhancements/nametag.h +++ b/soh/soh/Enhancements/nametag.h @@ -3,8 +3,8 @@ #include typedef struct { - const char* tag; // Tag identifier to filter/remove multiple tags - int16_t yOffset; // Additional Y offset to apply for the name tag + const char* tag; // Tag identifier to filter/remove multiple tags + int16_t yOffset; // Additional Y offset to apply for the name tag Color_RGBA8 textColor; // Text color override. Global color is used if alpha is 0 } NameTagOptions; diff --git a/soh/soh/Enhancements/pausewarp.c b/soh/soh/Enhancements/pausewarp.c index c767a3412..10f7e4e39 100644 --- a/soh/soh/Enhancements/pausewarp.c +++ b/soh/soh/Enhancements/pausewarp.c @@ -4,49 +4,37 @@ #include "game-interactor/GameInteractor.h" #include "soh/OTRGlobals.h" -static const int songMessageMap[] = { - TEXT_WARP_MINUET_OF_FOREST, - TEXT_WARP_BOLERO_OF_FIRE, - TEXT_WARP_SERENADE_OF_WATER, - TEXT_WARP_REQUIEM_OF_SPIRIT, - TEXT_WARP_NOCTURNE_OF_SHADOW, - TEXT_WARP_PRELUDE_OF_LIGHT +static const int songMessageMap[] = { + TEXT_WARP_MINUET_OF_FOREST, TEXT_WARP_BOLERO_OF_FIRE, TEXT_WARP_SERENADE_OF_WATER, + TEXT_WARP_REQUIEM_OF_SPIRIT, TEXT_WARP_NOCTURNE_OF_SHADOW, TEXT_WARP_PRELUDE_OF_LIGHT, }; static const int ocarinaSongMap[] = { - OCARINA_SONG_MINUET, - OCARINA_SONG_BOLERO, - OCARINA_SONG_SERENADE, - OCARINA_SONG_REQUIEM, - OCARINA_SONG_NOCTURNE, - OCARINA_SONG_PRELUDE + OCARINA_SONG_MINUET, OCARINA_SONG_BOLERO, OCARINA_SONG_SERENADE, + OCARINA_SONG_REQUIEM, OCARINA_SONG_NOCTURNE, OCARINA_SONG_PRELUDE, }; static const int entranceIndexMap[] = { - ENTR_SACRED_FOREST_MEADOW_WARP_PAD, // Minuet + ENTR_SACRED_FOREST_MEADOW_WARP_PAD, // Minuet ENTR_DEATH_MOUNTAIN_CRATER_WARP_PAD, // Bolero - ENTR_LAKE_HYLIA_WARP_PAD, // Serenade - ENTR_DESERT_COLOSSUS_WARP_PAD, // Requiem - ENTR_GRAVEYARD_WARP_PAD, // Nocturne - ENTR_TEMPLE_OF_TIME_WARP_PAD // Prelude + ENTR_LAKE_HYLIA_WARP_PAD, // Serenade + ENTR_DESERT_COLOSSUS_WARP_PAD, // Requiem + ENTR_GRAVEYARD_WARP_PAD, // Nocturne + ENTR_TEMPLE_OF_TIME_WARP_PAD, // Prelude }; -static const int songAudioMap[] = { - NA_BGM_OCA_MINUET, - NA_BGM_OCA_BOLERO, - NA_BGM_OCA_SERENADE, - NA_BGM_OCA_REQUIEM, - NA_BGM_OCA_NOCTURNE, - NA_BGM_OCA_LIGHT +static const int songAudioMap[] = { + NA_BGM_OCA_MINUET, NA_BGM_OCA_BOLERO, NA_BGM_OCA_SERENADE, + NA_BGM_OCA_REQUIEM, NA_BGM_OCA_NOCTURNE, NA_BGM_OCA_LIGHT, }; -static bool isWarpActive = false; +static bool isWarpActive = false; void PauseWarp_Execute() { if (!isWarpActive || gPlayState->msgCtx.msgMode != MSGMODE_NONE) { return; } - isWarpActive = false; + isWarpActive = false; GET_PLAYER(gPlayState)->stateFlags1 &= ~PLAYER_STATE1_IN_CUTSCENE; if (gPlayState->msgCtx.choiceIndex != 0) { return; @@ -88,41 +76,42 @@ void PauseWarp_HandleSelection() { int song = gPlayState->pauseCtx.cursorPoint[PAUSE_QUEST]; if (aButtonPressed && CHECK_QUEST_ITEM(song) && song >= QUEST_SONG_MINUET && song <= QUEST_SONG_PRELUDE && gPlayState->pauseCtx.pageIndex == PAUSE_QUEST && gPlayState->pauseCtx.state == 6) { - if (gSaveContext.ship.quest.id == QUEST_RANDOMIZER && Randomizer_GetSettingValue(RSK_SHUFFLE_OCARINA_BUTTONS)) { + if (gSaveContext.ship.quest.id == QUEST_RANDOMIZER && + Randomizer_GetSettingValue(RSK_SHUFFLE_OCARINA_BUTTONS)) { bool canplay = false; switch (song) { case QUEST_SONG_MINUET: canplay = Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_A) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_UP); + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT) && + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_UP); break; case QUEST_SONG_BOLERO: canplay = Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_A) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_DOWN); + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_DOWN); break; case QUEST_SONG_SERENADE: canplay = Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_A) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_DOWN); + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT) && + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_DOWN); break; case QUEST_SONG_REQUIEM: canplay = Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_A) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_DOWN); + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_DOWN); break; case QUEST_SONG_NOCTURNE: canplay = Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_A) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_DOWN); + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT) && + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_DOWN); break; case QUEST_SONG_PRELUDE: canplay = Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_LEFT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && - Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_UP); + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_RIGHT) && + Flags_GetRandomizerInf(RAND_INF_HAS_OCARINA_C_UP); break; } if (!canplay) { diff --git a/soh/soh/Enhancements/presets.h b/soh/soh/Enhancements/presets.h deleted file mode 100644 index a7bca4e66..000000000 --- a/soh/soh/Enhancements/presets.h +++ /dev/null @@ -1,907 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include "soh/Enhancements/randomizer/randomizerTypes.h" -#include "soh/Enhancements/enhancementTypes.h" -#include "soh/OTRGlobals.h" -#include "soh/cvar_prefixes.h" - -enum PresetEntryType { - PRESET_ENTRY_TYPE_S32, - PRESET_ENTRY_TYPE_FLOAT, - PRESET_ENTRY_TYPE_STRING, - PRESET_ENTRY_TYPE_CPP_STRING, -}; - -enum PresetType { - PRESET_TYPE_ENHANCEMENTS, - PRESET_TYPE_RANDOMIZER, -}; - -enum EnhancementPreset { - ENHANCEMENT_PRESET_DEFAULT, - ENHANCEMENT_PRESET_VANILLA_PLUS, - ENHANCEMENT_PRESET_ENHANCED, - ENHANCEMENT_PRESET_RANDOMIZER, -}; - -enum RandomizerPreset { - RANDOMIZER_PRESET_DEFAULT, - RANDOMIZER_PRESET_SPOCK_RACE, - RANDOMIZER_PRESET_SPOCK_RACE_NO_LOGIC, - RANDOMIZER_PRESET_S6, - RANDOMIZER_PRESET_HELL_MODE, - RANDOMIZER_PRESET_BENCHMARK, -}; - -typedef struct PresetEntry { - const char* cvar; - PresetEntryType type; - std::variant value; -} PresetEntry; - -std::string FormatLocations(std::vector locs); - -#define PRESET_ENTRY_S32(cvar, value) \ - { cvar, PRESET_ENTRY_TYPE_S32, value } -#define PRESET_ENTRY_FLOAT(cvar, value) \ - { cvar, PRESET_ENTRY_TYPE_FLOAT, value } -#define PRESET_ENTRY_STRING(cvar, value) \ - { cvar, PRESET_ENTRY_TYPE_STRING, value } -#define PRESET_ENTRY_CPP_STRING(cvar, value) \ - { cvar, PRESET_ENTRY_TYPE_CPP_STRING, value } - -void DrawPresetSelector(PresetType presetType); -void clearCvars(std::vector cvarsToClear); -void applyPreset(std::vector entries); - -// TODO: Ideally everything below this point will come from one/many JSON files - -const std::vector vanillaPlusPresetEntries = { - // D-pad Support in text and file select - PRESET_ENTRY_S32(CVAR_SETTING("DpadInText"), 1), - // Play Ocarina with D-pad - PRESET_ENTRY_S32(CVAR_SETTING("OcarinaControl.Dpad"), 1), - // Play Ocarina with Right Stick - PRESET_ENTRY_S32(CVAR_SETTING("OcarinaControl.RStick"), 1), - // D-pad as Equip Items - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), - // Prevent Dropped Ocarina Inputs - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), - - // Text Speed (1 to 5) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), - // Slow Text Speed (1 to 5) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SlowTextSpeed"), 5), - // Skip Text - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipText"), 1), - // King Zora Speed (1 to 5) - PRESET_ENTRY_FLOAT(CVAR_ENHANCEMENT("MweepSpeed"), 2.0f), - // Faster Block Push (+0 to +5) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterBlockPush"), 5), - // Better Owl - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterOwl"), 1), - - // Assignable Tunics and Boots - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 1), - // Enable passage of time on file select - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeFlowFileSelect"), 1), - // Inject Item Counts in messages - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.GoldSkulltula"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), - - // Dynamic Wallet Icon - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DynamicWalletIcon"), 1), - // Always show dungeon entrances - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AlwaysShowDungeonMinimapIcon"), 1), - - // Fix L&R Pause menu - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixMenuLR"), 1), - // Fix Dungeon entrances - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixDungeonMinimapIcon"), 1), - // Fix Two Handed idle animations - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TwoHandedIdle"), 1), - // Fix the Gravedigging Tour Glitch - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GravediggingTourFix"), 1), - // Fix Deku Nut upgrade - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DekuNutUpgradeFix"), 1), - // Fix Navi text HUD position - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NaviTextFix"), 1), - // Extend Silver Rupee Jingle - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 1), - // Fix some Floor Switches - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixFloorSwitches"), 1), - - // Red Ganon blood - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("RedGanonBlood"), 1), - // Fish while hovering - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("HoverFishing"), 1), - // N64 Weird Frames - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("N64WeirdFrames"), 1), - // Bombchus out of bounds - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BombchusOOB"), 1), - // Quick Putaway - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("QuickPutaway"), 1), - // Skip save confirmation - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 1), -}; - -const std::vector enhancedPresetEntries = { - // D-pad Support in text and file select - PRESET_ENTRY_S32(CVAR_SETTING("DpadInText"), 1), - // Play Ocarina with D-pad - PRESET_ENTRY_S32(CVAR_SETTING("OcarinaControl.Dpad"), 1), - // Play Ocarina with Right Stick - PRESET_ENTRY_S32(CVAR_SETTING("OcarinaControl.RStick"), 1), - // D-pad as Equip Items - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), - // Prevent Dropped Ocarina Inputs - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), - - // Text Speed (1 to 5) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), - // Slow Text Speed (1 to 5) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SlowTextSpeed"), 5), - // Skip Text - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipText"), 1), - // King Zora Speed (1 to 5) - PRESET_ENTRY_FLOAT(CVAR_ENHANCEMENT("MweepSpeed"), 5.0f), - // Faster Block Push (+0 to +5) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterBlockPush"), 5), - // Better Owl - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterOwl"), 1), - - // Assignable Tunics and Boots - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 1), - // Enable passage of time on file select - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeFlowFileSelect"), 1), - // Inject Item Counts in messages - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.GoldSkulltula"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), - - // Dynamic Wallet Icon - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DynamicWalletIcon"), 1), - // Always show dungeon entrances - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AlwaysShowDungeonMinimapIcon"), 1), - - // Fix L&R Pause menu - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixMenuLR"), 1), - // Fix Dungeon entrances - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixDungeonMinimapIcon"), 1), - // Fix Two Handed idle animations - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TwoHandedIdle"), 1), - // Fix the Gravedigging Tour Glitch - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GravediggingTourFix"), 1), - // Fix Deku Nut upgrade - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DekuNutUpgradeFix"), 1), - // Fix Navi text HUD position - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NaviTextFix"), 1), - // Extend Silver Rupee Jingle - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 1), - // Fix enemies not spawning on ground over water - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EnemySpawnsOverWaterboxes"), 1), - // Fix some Floor Switches - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixFloorSwitches"), 1), - - // Red Ganon blood - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("RedGanonBlood"), 1), - // Fish while hovering - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("HoverFishing"), 1), - // N64 Weird Frames - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("N64WeirdFrames"), 1), - // Bombchus out of bounds - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BombchusOOB"), 1), - // Quick Putaway - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("QuickPutaway"), 1), - // Skip save confirmation - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 1), - // Biggoron Forge Time (0 to 3) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ForgeTime"), 0), - // Vine/Ladder Climb speed (+0 to +12) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ClimbSpeed"), 3), - // Faster Heavy Block Lift - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 1), - // No Forced Navi - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NoForcedNavi"), 1), - // No Skulltula Freeze - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkulltulaFreeze"), 1), - // MM Bunny Hood - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_FAST_AND_JUMP), - // Adult Bunny Hood - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AdultMasks"), 1), - // Fast Chests - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastChests"), 1), - // Fast Drops - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastDrops"), 1), - // Fast Ocarina Playback - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastOcarinaPlayback"), 1), - // Instant Putaway - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantPutaway"), 1), - // Instant Boomerang Recall - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastBoomerang"), 1), - // Nuts Explode Bombs - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NutsExplodeBombs"), 1), - // Ask to Equip New Items - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AskToEquip"), 1), - // Mask Select in Inventory - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MaskSelect"), 1), - // Always Win Goron Pot - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GoronPot"), 1), - // Always Win Dampe Digging - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DampeWin"), 1), - // Skip Magic Arrow Equip Animation - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipArrowAnimation"), 1), - - // Equip arrows on multiple slots - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SeparateArrows"), 1), - - // Disable Navi Call Audio - PRESET_ENTRY_S32(CVAR_AUDIO("DisableNaviCallAudio"), 1), - - // Equipment Toggle - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EquipmentCanBeRemoved"), 1), - // Link's Cow in Both Time Periods - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CowOfTime"), 1), - - // Enable 3D Dropped items/projectiles - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NewDrops"), 1), - - // Fix Anubis fireballs - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AnubisFix"), 1), - - // Autosave - 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), -}; - -const std::vector randomizerPresetEntries = { - // D-pad Support in text and file select - PRESET_ENTRY_S32(CVAR_SETTING("DpadInText"), 1), - // Play Ocarina with D-pad - PRESET_ENTRY_S32(CVAR_SETTING("OcarinaControl.Dpad"), 1), - // Play Ocarina with Right Stick - PRESET_ENTRY_S32(CVAR_SETTING("OcarinaControl.RStick"), 1), - // D-pad as Equip Items - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), - // Prevent Dropped Ocarina Inputs - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), - - // Text Speed (1 to 5) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), - // Slow Text Speed (1 to 5) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SlowTextSpeed"), 5), - // Skip Text - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipText"), 1), - // King Zora Speed (1 to 5) - PRESET_ENTRY_FLOAT(CVAR_ENHANCEMENT("MweepSpeed"), 5.0f), - // Faster Block Push (+0 to +5) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterBlockPush"), 5), - // Better Owl - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BetterOwl"), 1), - - // Assignable Tunics and Boots - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 1), - // Enable passage of time on file select - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TimeFlowFileSelect"), 1), - // Inject Item Counts in messages - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.GoldSkulltula"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), - - // Dynamic Wallet Icon - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DynamicWalletIcon"), 1), - // Always show dungeon entrances - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AlwaysShowDungeonMinimapIcon"), 1), - - // Fix L&R Pause menu - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixMenuLR"), 1), - // Fix Dungeon entrances - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixDungeonMinimapIcon"), 1), - // Fix Two Handed idle animations - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TwoHandedIdle"), 1), - // Fix the Gravedigging Tour Glitch - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GravediggingTourFix"), 1), - // Fix Deku Nut upgrade - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DekuNutUpgradeFix"), 1), - // Fix Navi text HUD position - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NaviTextFix"), 1), - // Extend Silver Rupee Jingle - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 1), - // Fix some Floor Switches - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FixFloorSwitches"), 1), - - // Red Ganon blood - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("RedGanonBlood"), 1), - // Fish while hovering - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("HoverFishing"), 1), - // N64 Weird Frames - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("N64WeirdFrames"), 1), - // Bombchus out of bounds - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("BombchusOOB"), 1), - // Quick Putaway - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("QuickPutaway"), 1), - // Skip save confirmation - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipSaveConfirmation"), 1), - // Biggoron Forge Time (0 to 3) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ForgeTime"), 0), - // Vine/Ladder Climb speed (+0 to +12) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ClimbSpeed"), 3), - // Faster Heavy Block Lift - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 1), - // No Forced Navi - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NoForcedNavi"), 1), - // No Skulltula Freeze - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkulltulaFreeze"), 1), - // MM Bunny Hood - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_FAST_AND_JUMP), - // Adult Bunny Hood - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AdultMasks"), 1), - // Fast Chests - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastChests"), 1), - // Fast Drops - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastDrops"), 1), - // Fast Ocarina Playback - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastOcarinaPlayback"), 1), - // Instant Putaway - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantPutaway"), 1), - // Instant Boomerang Recall - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastBoomerang"), 1), - // Nuts Explode Bombs - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NutsExplodeBombs"), 1), - // Ask to Equip New Items - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AskToEquip"), 1), - // Mask Select in Inventory - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MaskSelect"), 1), - // Always Win Goron Pot - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GoronPot"), 1), - // Always Win Dampe Digging - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DampeWin"), 1), - // Skip Magic Arrow Equip Animation - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipArrowAnimation"), 1), - // Exit Market at Night - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MarketSneak"), 1), - - // Equip arrows on multiple slots - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SeparateArrows"), 1), - - // Disable Navi Call Audio - PRESET_ENTRY_S32(CVAR_AUDIO("DisableNaviCallAudio"), 1), - - // Equipment Toggle - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EquipmentCanBeRemoved"), 1), - // Link's Cow in Both Time Periods - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CowOfTime"), 1), - - // Enable 3D Dropped items/projectiles - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NewDrops"), 1), - - // Fix Anubis fireballs - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AnubisFix"), 1), - - // Autosave - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("Autosave"), 1), - - // Customize Fishing Behaviour - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeFishing"), 1), - // Guarantee Bite - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GuaranteeFishingBite"), 1), - // Fish Never Escape - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FishNeverEscape"), 1), - // Child Minimum Weight (6 to 10) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinimumFishWeightChild"), 3), - // Adult Minimum Weight (8 to 13) - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinimumFishWeightAdult"), 6), - - // Customize Lost Woods Ocarina Game Behavior - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeOcarinaGame"), 1), - // Start With Five Notes - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("OcarinaGame.StartingNotes"), 5), - // Round One Notes - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("OcarinaGame.RoundOneNotes"), 5), - - // Visual Stone of Agony - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("VisualAgony"), 1), - // Pull grave during the day - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DayGravePull"), 1), - // Pull out Ocarina to Summon Scarecrow - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantScarecrow"), 1), - // Chest size & texture matches contents - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_BOTH), - - // Color Temple of Time's Medallions - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ToTMedallionsColors"), 1), - - // Frames to wait - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinFrameCount"), 200), - - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NoInputForCredits"), 1), - - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastFarores"), 1), -}; - -const std::vector spockRacePresetEntries = { - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LogicRules"), 0), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("TextSpeed"), 5), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SlowTextSpeed"), 5), - PRESET_ENTRY_FLOAT(CVAR_ENHANCEMENT("MweepSpeed"), 5.0f), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ClimbSpeed"), 4), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterBlockPush"), 5), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NoForcedNavi"), 1), - PRESET_ENTRY_S32(CVAR_AUDIO("DisableNaviCallAudio"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastChests"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastDrops"), 1), - PRESET_ENTRY_S32(CVAR_SETTING("DpadInText"), 1), - PRESET_ENTRY_S32(CVAR_SETTING("OcarinaControl.Dpad"), 1), - PRESET_ENTRY_S32(CVAR_SETTING("OcarinaControl.RStick"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadEquips"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastOcarinaPlayback"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantScarecrow"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MarketSneak"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantPutaway"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastBoomerang"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AdultMasks"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_FAST), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SeparateArrows"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EquipmentCanBeRemoved"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DayGravePull"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NewDrops"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CreditsFix"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkipText"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkulltulaFreeze"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PauseAnyCursor"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastFarores"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NoInputForCredits"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MaskSelect"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.GoldSkulltula"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeFishing"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FishNeverEscape"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantFishing"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GuaranteeFishingBite"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinimumFishWeightAdult"), 6), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinimumFishWeightChild"), 3), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GoronPot"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ForgeTime"), 0), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DampeAllNight"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("10GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("20GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("30GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("40GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("50GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("AllLocationsReachable"), 0), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BlueFireArrows"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BombchuBag"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CompleteMaskQuest"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CuccosToReturn"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DampeHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DoorOfTime"), RO_DOOROFTIME_OPEN), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("EnableBombchuDrops"), 1), - PRESET_ENTRY_CPP_STRING(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), FormatLocations( - { RC_MARKET_10_BIG_POES, RC_KAK_40_GOLD_SKULLTULA_REWARD, RC_KAK_50_GOLD_SKULLTULA_REWARD, RC_ZR_FROGS_OCARINA_GAME })), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ClosedForest"), RO_CLOSED_FOREST_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FullWallets"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrial"), RO_GANONS_TRIALS_SKIP), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_FAST), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GregHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GsExpectSunsSong"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("KakarikoGate"), RO_KAK_GATE_OPEN), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LacsRewardCount"), 5), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_GREG), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubText"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IncludeTycoonWallet"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_RANDOM), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), RO_PRICE_BALANCED), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_REWARDS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKeyRings"), RO_KEYRINGS_COUNT), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKokiriSword"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleScrubs"), RO_SCRUBS_ALL), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubsPrice"), RO_PRICE_FIXED), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubsFixedPrice"), 10), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildStealth"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildZelda"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipEponaRace"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipScarecrowsSong"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipTowerEscape"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingConsumables"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_STARTWITH), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingOcarina"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SunlightArrows"), 1), -}; - -const std::vector spockRaceNoLogicPresetEntries = { - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AdultMasks"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinimumFishWeightAdult"), 6), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AssignableTunicsAndBoots"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MinimumFishWeightChild"), 3), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ClimbSpeed"), 4), - PRESET_ENTRY_S32(CVAR_COSMETIC("Goron.NeckLength"), 1000), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CreditsFix"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("CustomizeFishing"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DampeAllNight"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DayGravePull"), 1), - PRESET_ENTRY_S32(CVAR_AUDIO("DisableNaviCallAudio"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("DpadNoDropOcarinaInput"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("EquipmentCanBeRemoved"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastBoomerang"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastChests"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastDrops"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastFarores"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastOcarinaPlayback"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterBlockPush"), 5), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FasterHeavyBlockLift"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FishNeverEscape"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ForgeTime"), 0), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GoronPot"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("GuaranteeFishingBite"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.GoldSkulltula"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartPiece"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InjectItemCounts.HeartContainer"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantFishing"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantPutaway"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_FAST), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MarketSneak"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MaskSelect"), 1), - PRESET_ENTRY_FLOAT(CVAR_ENHANCEMENT("MweepSpeed"), 5.0f), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NoForcedNavi"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("NoInputForCredits"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("PauseAnyCursor"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("10GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("20GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("30GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("40GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("50GSHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("AllLocationsReachable"), 0), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BlueFireArrows"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BombchuBag"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BossKeysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CompleteMaskQuest"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CuccosToReturn"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DampeHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DoorOfTime"), RO_DOOROFTIME_OPEN), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("EnableBombchuDrops"), 1), - PRESET_ENTRY_CPP_STRING(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), FormatLocations( - { RC_MARKET_10_BIG_POES, RC_KAK_40_GOLD_SKULLTULA_REWARD, RC_KAK_50_GOLD_SKULLTULA_REWARD, RC_ZR_FROGS_OCARINA_GAME })), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ClosedForest"), RO_CLOSED_FOREST_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FullWallets"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrial"), RO_GANONS_TRIALS_SKIP), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_FAST), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GregHint"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GsExpectSunsSong"), 0), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("KakarikoGate"), RO_KAK_GATE_OPEN), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Keysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LacsRewardCount"), 5), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_NO_LOGIC), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_GREG), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubText"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IncludeTycoonWallet"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_RANDOM), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), RO_PRICE_BALANCED), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), 0), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), RO_SHUFFLE_MERCHANTS_BEANS_ONLY), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMerchantPrices"), RO_PRICE_VANILLA), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_REWARDS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKeyRings"), RO_KEYRINGS_COUNT), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKokiriSword"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleScrubs"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSongs"), RO_SONG_SHUFFLE_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_ALL), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildStealth"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildZelda"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipEponaRace"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipScarecrowsSong"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipTowerEscape"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingConsumables"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_STARTWITH), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingOcarina"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SunlightArrows"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SeparateArrows"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("InstantScarecrow"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("SkulltulaFreeze"), 1), -}; - -const std::vector s6PresetEntries = { - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_BOTH), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastChests"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_FAST), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AdultMasks"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BigPoeTargetCount"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CuccosToReturn"), 4), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DoorOfTime"), RO_DOOROFTIME_OPEN), - PRESET_ENTRY_CPP_STRING(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), FormatLocations({ RC_DEKU_THEATER_MASK_OF_TRUTH })), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ClosedForest"), RO_CLOSED_FOREST_DEKU_ONLY), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrial"), RO_GANONS_TRIALS_SKIP), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_FAST), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IceTraps"), RO_ICE_TRAPS_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("KakarikoGate"), RO_KAK_GATE_OPEN), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MedallionCount"), 6), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_NONE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_MEDALLIONS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDungeonReward"), RO_DUNGEON_REWARDS_END_OF_DUNGEON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_STARTWITH), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKokiriSword"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOverworldSpawns"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildStealth"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildZelda"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipEponaRace"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipTowerEscape"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SleepingWaterfall"), RO_WATERFALL_CLOSED), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingAge"), RO_AGE_RANDOM), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingConsumables"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingDekuShield"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_STARTWITH), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingOcarina"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ZorasFountain"), RO_ZF_CLOSED), -}; - -const std::vector hellModePresetEntries = { - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_BOTH), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("FastChests"), 1), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("MMBunnyHood"), BUNNY_HOOD_FAST), - PRESET_ENTRY_S32(CVAR_ENHANCEMENT("AdultMasks"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BigPoeTargetCount"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BlueFireArrows"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BossKeysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CompleteMaskQuest"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CuccosToReturn"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DoorOfTime"), RO_DOOROFTIME_OPEN), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("EnableBombchuDrops"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ClosedForest"), RO_CLOSED_FOREST_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrial"), RO_GANONS_TRIALS_SET_NUMBER), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrialCount"), 6), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GsExpectSunsSong"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IceTraps"), RO_ICE_TRAPS_ONSLAUGHT), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ItemPool"), RO_ITEM_POOL_MINIMAL), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("KakarikoGate"), RO_KAK_GATE_OPEN), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Keysanity"), RO_DUNGEON_ITEM_LOC_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LinksPocket"), RO_LINKS_POCKET_NOTHING), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_RANDOM_NUMBER), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_DUNGEON_REWARDS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IncludeTycoonWallet"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_SPECIFIC_COUNT), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityCount"), RO_SHOPSANITY_COUNT_FOUR_ITEMS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), RO_PRICE_RANGE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityPriceRange1"), 0), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityPriceRange2"), 999), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), RO_SHUFFLE_MERCHANTS_BEANS_ONLY), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMerchantPrices"), RO_PRICE_VANILLA), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleCows"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDungeonReward"), RO_DUNGEON_REWARDS_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleFrogSongRupees"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_DUNGEONS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKeyRings"), RO_KEYRINGS_RANDOM), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKokiriSword"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMasterSword"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleScrubs"), RO_SCRUBS_ALL), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubsPrice"), RO_PRICE_CHEAP_BALANCED), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSongs"), RO_SONG_SHUFFLE_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_ALL), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildStealth"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipEponaRace"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipScarecrowsSong"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipTowerEscape"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SleepingWaterfall"), RO_WATERFALL_OPEN), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingAge"), RO_AGE_RANDOM), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SunlightArrows"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ZorasFountain"), RO_ZF_OPEN), -}; - -const std::vector BenchmarkPresetEntries = { - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ClosedForest"), RO_CLOSED_FOREST_DEKU_ONLY), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("KakarikoGate"), RO_KAK_GATE_OPEN), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DoorOfTime"), RO_DOOROFTIME_SONGONLY), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SleepingWaterfall"), RO_WATERFALL_CLOSED), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ZorasFountain"), RO_ZF_CLOSED), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RainbowBridge"), RO_BRIDGE_DUNGEON_REWARDS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("RewardCount"), 5), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BridgeRewardOptions"), RO_BRIDGE_GREG_REWARD), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrial"), RO_GANONS_TRIALS_SET_NUMBER), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanonTrialCount"), 6), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingAge"), RO_AGE_RANDOM), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDungeonsEntrances"), RO_DUNGEON_ENTRANCE_SHUFFLE_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleBossEntrances"), RO_BOSS_ROOM_ENTRANCE_SHUFFLE_FULL), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOverworldEntrances"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleInteriorsEntrances"), RO_INTERIOR_ENTRANCE_SHUFFLE_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGrottosEntrances"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleWarpSongs"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOverworldSpawns"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MixedEntrances"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DecoupleEntrances"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BombchusInLogic"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("EnableBombchuDrops"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("TriforceHunt"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_RANDOM_NUMBER), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MQDungeonsSelection"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDungeonReward"), RO_DUNGEON_REWARDS_END_OF_DUNGEON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LinksPocket"), RO_LINKS_POCKET_DUNGEON_REWARD), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSongs"), RO_SONG_SHUFFLE_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shopsanity"), RO_SHOPSANITY_SPECIFIC_COUNT), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShopsanityCount"), RO_SHOPSANITY_COUNT_FOUR_ITEMS), - //RANDOTODO add refactored price/scrub/merchant settings - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleBeehives"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleCows"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKokiriSword"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleMasterSword"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleChildWallet"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleOcarinaButtons"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleSwim"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleFrogSongRupees"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Shuffle100GSReward"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleBossSouls"), RO_BOSS_SOULS_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDekuStickBag"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleDekuNutBag"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("Fishsanity"), RO_FISHSANITY_BOTH), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FishsanityAgeSplit"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_ANYWHERE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BossKeysanity"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_LACS_MEDALLIONS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LacsMedallionCount"), 6), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ShuffleKeyRings"), RO_KEYRINGS_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipChildZelda"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipEponaRace"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkipScarecrowsSong"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BigPoeTargetCount"), 1), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CuccosToReturn"), 4), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("CompleteMaskQuest"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GossipStoneHints"), RO_GOSSIP_STONES_NEED_NOTHING), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("HintClarity"), RO_HINT_CLARITY_CLEAR), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("HintDistribution"), RO_HINT_DIST_STRONG), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("AltarHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GanondorfHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SheikLAHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("DampeHint"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GregHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SariaHint"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FrogsHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("OoTHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BiggoronHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BigPoesHint"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ChickensHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MalonHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("HBAHint"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("WarpSongText"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ScrubText"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("10GSHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("20GSHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("30GSHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("40GSHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("50GSHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("MaskShopHint"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("BlueFireArrows"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SunlightArrows"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("InfiniteUpgrades"), RO_INF_UPGRADES_PROGRESSIVE), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("SkeletonKey"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("ItemPool"), RO_ITEM_POOL_BALANCED), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("IceTraps"), RO_ICE_TRAPS_NORMAL), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingOcarina"), RO_STARTING_OCARINA_FAIRY), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingDekuShield"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingKokiriSword"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMasterSword"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingConsumables"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("FullWallets"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingZeldasLullaby"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingEponasSong"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingSariasSong"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingSunsSong"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingSongOfTime"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingSongOfStorms"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingMinuetOfForest"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingBoleroOfFire"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingSerenadeOfWater"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingRequiemOfSpirit"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingNocturneOfShadow"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingPreludeOfLight"), RO_GENERIC_OFF), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("StartingSkulltulaToken"), 0), - PRESET_ENTRY_S32("gRandomizeStartingHearts", 2), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("AllLocationsReachable"), RO_GENERIC_ON), - PRESET_ENTRY_S32(CVAR_RANDOMIZER_SETTING("GsExpectSunsSong"), RO_GENERIC_ON), -}; - -typedef struct PresetDefinition { - const char* label; - const char* description; - std::vector entries; -} PresetDefinition; - -typedef struct PresetTypeDefinition { - std::vector blocksToClear; - std::map presets; -} PresetTypeDefinition; - -const std::map presetTypes = { - { PRESET_TYPE_ENHANCEMENTS, { { CVAR_PREFIX_ENHANCEMENT, CVAR_PREFIX_CHEAT }, { - { ENHANCEMENT_PRESET_DEFAULT, { - "Default", - "Reset all options to their default values.", - {}, - } }, - { ENHANCEMENT_PRESET_VANILLA_PLUS, { - "Vanilla Plus", - "Adds Quality of Life features that enhance your experience, but don't alter gameplay. Recommended for a first playthrough of OoT.", - vanillaPlusPresetEntries, - } }, - { ENHANCEMENT_PRESET_ENHANCED, { - "Enhanced", - "The \"Vanilla Plus\" preset, but with more quality of life enhancements that might alter gameplay slightly. Recommended for returning players.", - enhancedPresetEntries - } }, - { ENHANCEMENT_PRESET_RANDOMIZER, { - "Randomizer", - "The \"Enhanced\" preset, plus any other enhancements that are recommended for playing Randomizer.", - randomizerPresetEntries - } }, - } } }, - { PRESET_TYPE_RANDOMIZER, { { CVAR_PREFIX_RANDOMIZER_SETTING, CVAR_PREFIX_RANDOMIZER_ENHANCEMENT }, { - { RANDOMIZER_PRESET_DEFAULT, { - "Default", - "Reset all options to their default values.", - {}, - } }, - { RANDOMIZER_PRESET_SPOCK_RACE, { - "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" \ - "- Ganon's Boss Key is 5 dungeon rewards\n" \ - "- Shopsanity and Scrubsanity enabled\n" \ - "- All locations reachable is off\n", \ - spockRacePresetEntries, - } }, - { RANDOMIZER_PRESET_SPOCK_RACE_NO_LOGIC, { - "Spock Race - No Logic", - "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" - "- Ganon's Boss Key is 5 dungeon rewards\n" - "- Shopsanity and Scrubsanity enabled\n" - "- All locations reachable is off\n", - spockRaceNoLogicPresetEntries, - } }, - { RANDOMIZER_PRESET_S6, { - "S6 Tournament (Adapted)", - "Matches OOTR S6 tournament settings as close as we can get with the options available in SoH. The following differences are notable:\n" \ - "- Both child and adult overworld spawns are randomized\n" \ - "- Dungeon rewards are shuffled at the end of dungeons, rather than at the end of their own dungeon\n" \ - "- Full adult trade sequence is shuffled instead of the selected 4\n" \ - "- Hint distribution no \"tournament\" mode, falling back to balanced", - s6PresetEntries, - } }, - { RANDOMIZER_PRESET_HELL_MODE, { - "Hell Mode", - "All settings maxed but still using glitchless logic. Expect pain.", - hellModePresetEntries - } }, - { RANDOMIZER_PRESET_BENCHMARK, { - "Benchmark", - "Used for benchmarking the logic.", - BenchmarkPresetEntries - } }, - } } } -}; diff --git a/soh/soh/Enhancements/randomizer/3drando/custom_messages.cpp b/soh/soh/Enhancements/randomizer/3drando/custom_messages.cpp index fcab083b4..cec16a468 100644 --- a/soh/soh/Enhancements/randomizer/3drando/custom_messages.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/custom_messages.cpp @@ -5,40 +5,76 @@ namespace CustomMessages { using namespace std::literals::string_literals; - std::string MESSAGE_END() { return "\x7F\x00"s; } - std::string WAIT_FOR_INPUT() { return "\x7F\x01"s; } - std::string HORIZONTAL_SPACE(uint8_t x) { - return "\x7F\x02"s + char(x); - } - std::string GO_TO(uint16_t x) { - return "\x7F\x03"s + char(x >> 8) + char(x & 0x00FF); - } - std::string INSTANT_TEXT_ON() { return "\x7F\x04"s; } - std::string INSTANT_TEXT_OFF() { return "\x7F\x05"s; } - std::string SHOP_MESSAGE_BOX() { return "\x7F\x06\x00"s; } - std::string EVENT_TRIGGER() { return "\x7F\x07"s; } - std::string DELAY_FRAMES(uint8_t x) { - return "\x7F\x08"s + char(x); - } - std::string CLOSE_AFTER(uint8_t x) { - return "\x7F\x0A"s + char(x); - } - std::string PLAYER_NAME() { return "\x7F\x0B"s; } - std::string PLAY_OCARINA() { return "\x7F\x0C"s; } - std::string ITEM_OBTAINED(uint8_t x) { - return "\x7F\x0F"s + char(x); - } - std::string SET_SPEED(uint8_t x) { - return "\x7F\x10"s + char(x); - } - std::string SKULLTULAS_DESTROYED() { return "\x7F\x15"s; } - std::string CURRENT_TIME() { return "\x7F\x17"s; } - std::string UNSKIPPABLE() { return "\x7F\x19"s; } - std::string TWO_WAY_CHOICE() { return "\x1B"s; } - std::string NEWLINE() { return "\x7F\x1C"s; } - std::string COLOR(std::string x) { return "\x7F\x1D"s + x; } - std::string CENTER_TEXT() { return "\x7F\x1E"s; } - std::string IF_NOT_MQ() { return "\x7F\x29"s; } - std::string MQ_ELSE() { return "\x7F\x2A"s; } - std::string MQ_END() { return "\x7F\x2B"s; } +std::string MESSAGE_END() { + return "\x7F\x00"s; } +std::string WAIT_FOR_INPUT() { + return "\x7F\x01"s; +} +std::string HORIZONTAL_SPACE(uint8_t x) { + return "\x7F\x02"s + char(x); +} +std::string GO_TO(uint16_t x) { + return "\x7F\x03"s + char(x >> 8) + char(x & 0x00FF); +} +std::string INSTANT_TEXT_ON() { + return "\x7F\x04"s; +} +std::string INSTANT_TEXT_OFF() { + return "\x7F\x05"s; +} +std::string SHOP_MESSAGE_BOX() { + return "\x7F\x06\x00"s; +} +std::string EVENT_TRIGGER() { + return "\x7F\x07"s; +} +std::string DELAY_FRAMES(uint8_t x) { + return "\x7F\x08"s + char(x); +} +std::string CLOSE_AFTER(uint8_t x) { + return "\x7F\x0A"s + char(x); +} +std::string PLAYER_NAME() { + return "\x7F\x0B"s; +} +std::string PLAY_OCARINA() { + return "\x7F\x0C"s; +} +std::string ITEM_OBTAINED(uint8_t x) { + return "\x7F\x0F"s + char(x); +} +std::string SET_SPEED(uint8_t x) { + return "\x7F\x10"s + char(x); +} +std::string SKULLTULAS_DESTROYED() { + return "\x7F\x15"s; +} +std::string CURRENT_TIME() { + return "\x7F\x17"s; +} +std::string UNSKIPPABLE() { + return "\x7F\x19"s; +} +std::string TWO_WAY_CHOICE() { + return "\x1B"s; +} +std::string NEWLINE() { + return "\x7F\x1C"s; +} +std::string COLOR(std::string x) { + return "\x7F\x1D"s + x; +} +std::string CENTER_TEXT() { + return "\x7F\x1E"s; +} +std::string IF_NOT_MQ() { + return "\x7F\x29"s; +} +std::string MQ_ELSE() { + return "\x7F\x2A"s; +} +std::string MQ_END() { + return "\x7F\x2B"s; +} +} // namespace CustomMessages diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index b0548f5ee..e5e22ad1d 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -20,264 +20,287 @@ using namespace Rando; - static bool placementFailure = false; +PriceSettingsStruct shopsanityPrices = { + RSK_SHOPSANITY_PRICES, + RSK_SHOPSANITY_PRICES_FIXED_PRICE, + RSK_SHOPSANITY_PRICES_RANGE_1, + RSK_SHOPSANITY_PRICES_RANGE_2, + RSK_SHOPSANITY_PRICES_NO_WALLET_WEIGHT, + RSK_SHOPSANITY_PRICES_CHILD_WALLET_WEIGHT, + RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT, + RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT, + RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT, + RSK_SHOPSANITY_PRICES_AFFORDABLE, +}; -PriceSettingsStruct shopsanityPrices = {RSK_SHOPSANITY_PRICES, - RSK_SHOPSANITY_PRICES_FIXED_PRICE, - RSK_SHOPSANITY_PRICES_RANGE_1, - RSK_SHOPSANITY_PRICES_RANGE_2, - RSK_SHOPSANITY_PRICES_NO_WALLET_WEIGHT, - RSK_SHOPSANITY_PRICES_CHILD_WALLET_WEIGHT, - RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT, - RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT, - RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT, - RSK_SHOPSANITY_PRICES_AFFORDABLE}; - -PriceSettingsStruct scrubPrices = {RSK_SCRUBS_PRICES, - RSK_SCRUBS_PRICES_FIXED_PRICE, - RSK_SCRUBS_PRICES_RANGE_1, - RSK_SCRUBS_PRICES_RANGE_2, - RSK_SCRUBS_PRICES_NO_WALLET_WEIGHT, - RSK_SCRUBS_PRICES_CHILD_WALLET_WEIGHT, - RSK_SCRUBS_PRICES_ADULT_WALLET_WEIGHT, - RSK_SCRUBS_PRICES_GIANT_WALLET_WEIGHT, - RSK_SCRUBS_PRICES_TYCOON_WALLET_WEIGHT, - RSK_SCRUBS_PRICES_AFFORDABLE}; +PriceSettingsStruct scrubPrices = { + RSK_SCRUBS_PRICES, + RSK_SCRUBS_PRICES_FIXED_PRICE, + RSK_SCRUBS_PRICES_RANGE_1, + RSK_SCRUBS_PRICES_RANGE_2, + RSK_SCRUBS_PRICES_NO_WALLET_WEIGHT, + RSK_SCRUBS_PRICES_CHILD_WALLET_WEIGHT, + RSK_SCRUBS_PRICES_ADULT_WALLET_WEIGHT, + RSK_SCRUBS_PRICES_GIANT_WALLET_WEIGHT, + RSK_SCRUBS_PRICES_TYCOON_WALLET_WEIGHT, + RSK_SCRUBS_PRICES_AFFORDABLE, +}; -PriceSettingsStruct merchantPrices = {RSK_MERCHANT_PRICES, - RSK_MERCHANT_PRICES_FIXED_PRICE, - RSK_MERCHANT_PRICES_RANGE_1, - RSK_MERCHANT_PRICES_RANGE_2, - RSK_MERCHANT_PRICES_NO_WALLET_WEIGHT, - RSK_MERCHANT_PRICES_CHILD_WALLET_WEIGHT, - RSK_MERCHANT_PRICES_ADULT_WALLET_WEIGHT, - RSK_MERCHANT_PRICES_GIANT_WALLET_WEIGHT, - RSK_MERCHANT_PRICES_TYCOON_WALLET_WEIGHT, - RSK_MERCHANT_PRICES_AFFORDABLE}; +PriceSettingsStruct merchantPrices = { + RSK_MERCHANT_PRICES, + RSK_MERCHANT_PRICES_FIXED_PRICE, + RSK_MERCHANT_PRICES_RANGE_1, + RSK_MERCHANT_PRICES_RANGE_2, + RSK_MERCHANT_PRICES_NO_WALLET_WEIGHT, + RSK_MERCHANT_PRICES_CHILD_WALLET_WEIGHT, + RSK_MERCHANT_PRICES_ADULT_WALLET_WEIGHT, + RSK_MERCHANT_PRICES_GIANT_WALLET_WEIGHT, + RSK_MERCHANT_PRICES_TYCOON_WALLET_WEIGHT, + RSK_MERCHANT_PRICES_AFFORDABLE, +}; static void RemoveStartingItemsFromPool() { - for (RandomizerGet startingItem : StartingInventory) { - for (size_t i = 0; i < ItemPool.size(); i++) { - if (startingItem == RG_BIGGORON_SWORD) { - if (ItemPool[i] == RG_GIANTS_KNIFE || ItemPool[i] == RG_BIGGORON_SWORD) { - ItemPool[i] = GetJunkItem(); + for (RandomizerGet startingItem : StartingInventory) { + for (size_t i = 0; i < ItemPool.size(); i++) { + if (startingItem == RG_BIGGORON_SWORD) { + if (ItemPool[i] == RG_GIANTS_KNIFE || ItemPool[i] == RG_BIGGORON_SWORD) { + ItemPool[i] = GetJunkItem(); + } + continue; + } else if (startingItem == ItemPool[i] || (Rando::StaticData::RetrieveItem(startingItem).IsBottleItem() && + Rando::StaticData::RetrieveItem(ItemPool[i]).IsBottleItem())) { + if (AdditionalHeartContainers > 0 && + (startingItem == RG_PIECE_OF_HEART || startingItem == RG_TREASURE_GAME_HEART)) { + ItemPool[i] = RG_HEART_CONTAINER; + AdditionalHeartContainers--; + } else { + ItemPool[i] = GetJunkItem(); + } + break; + } } - continue; - } else if (startingItem == ItemPool[i] || (Rando::StaticData::RetrieveItem(startingItem).IsBottleItem() && - Rando::StaticData::RetrieveItem(ItemPool[i]).IsBottleItem())) { - if (AdditionalHeartContainers > 0 && - (startingItem == RG_PIECE_OF_HEART || startingItem == RG_TREASURE_GAME_HEART)) { - ItemPool[i] = RG_HEART_CONTAINER; - AdditionalHeartContainers--; - } else { - ItemPool[i] = GetJunkItem(); - } - break; - } } - } } -static void PropagateTimeTravel(GetAccessibleLocationsStruct& gals, RandomizerGet ignore = RG_NONE, - bool stopOnBeatable = false, bool addToPlaythrough = false){ - //special check for temple of time - if(gals.haveTimeAccess && gals.foundTempleOfTime && gals.validatedStartingRegion){ - if (!RegionTable(RR_ROOT)->Adult() && RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->Child()) { //RANDOTODO: sphere weirdness, other age locations not propagated in this sphere - RegionTable(RR_ROOT)->adultDay = RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->childDay; - RegionTable(RR_ROOT)->adultNight = RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->childNight; - ProcessRegion(RegionTable(RR_ROOT), gals, ignore, stopOnBeatable, addToPlaythrough); - } else if (!RegionTable(RR_ROOT)->Child() && RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->Adult()){ - RegionTable(RR_ROOT)->childDay = RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->adultDay; - RegionTable(RR_ROOT)->childNight = RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->adultNight; - ProcessRegion(RegionTable(RR_ROOT), gals, ignore, stopOnBeatable, addToPlaythrough); +static void PropagateTimeTravel(GetAccessibleLocationsStruct& gals, RandomizerGet ignore = RG_NONE, + bool stopOnBeatable = false, bool addToPlaythrough = false) { + // special check for temple of time + if (gals.haveTimeAccess && gals.foundTempleOfTime && gals.validatedStartingRegion) { + if (!RegionTable(RR_ROOT)->Adult() && + RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME) + ->Child()) { // RANDOTODO: sphere weirdness, other age locations not propagated in this sphere + RegionTable(RR_ROOT)->adultDay = RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->childDay; + RegionTable(RR_ROOT)->adultNight = RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->childNight; + ProcessRegion(RegionTable(RR_ROOT), gals, ignore, stopOnBeatable, addToPlaythrough); + } else if (!RegionTable(RR_ROOT)->Child() && RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->Adult()) { + RegionTable(RR_ROOT)->childDay = RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->adultDay; + RegionTable(RR_ROOT)->childNight = RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->adultNight; + ProcessRegion(RegionTable(RR_ROOT), gals, ignore, stopOnBeatable, addToPlaythrough); + } } - } } -//This function will propagate Time of Day access through the entrance +// This function will propagate Time of Day access through the entrance static bool UpdateToDAccess(Entrance* entrance, Region* connection) { - StartPerformanceTimer(PT_TOD_ACCESS); + StartPerformanceTimer(PT_TOD_ACCESS); - bool ageTimePropogated = false; - Region* parent = entrance->GetParentRegion(); + bool ageTimePropogated = false; + Region* parent = entrance->GetParentRegion(); - if (!connection->childDay && parent->childDay && entrance->CheckConditionAtAgeTime(logic->IsChild, logic->AtDay)) { - connection->childDay = true; - ageTimePropogated = true; - } - if (!connection->childNight && parent->childNight && entrance->CheckConditionAtAgeTime(logic->IsChild, logic->AtNight)) { - connection->childNight = true; - ageTimePropogated = true; - } - if (!connection->adultDay && parent->adultDay && entrance->CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay)) { - connection->adultDay = true; - ageTimePropogated = true; - } - if (!connection->adultNight && parent->adultNight && entrance->CheckConditionAtAgeTime(logic->IsAdult, logic->AtNight)) { - connection->adultNight = true; - ageTimePropogated = true; - } + if (!connection->childDay && parent->childDay && entrance->CheckConditionAtAgeTime(logic->IsChild, logic->AtDay)) { + connection->childDay = true; + ageTimePropogated = true; + } + if (!connection->childNight && parent->childNight && + entrance->CheckConditionAtAgeTime(logic->IsChild, logic->AtNight)) { + connection->childNight = true; + ageTimePropogated = true; + } + if (!connection->adultDay && parent->adultDay && entrance->CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay)) { + connection->adultDay = true; + ageTimePropogated = true; + } + if (!connection->adultNight && parent->adultNight && + entrance->CheckConditionAtAgeTime(logic->IsAdult, logic->AtNight)) { + connection->adultNight = true; + ageTimePropogated = true; + } - StopPerformanceTimer(PT_TOD_ACCESS); - return ageTimePropogated; + StopPerformanceTimer(PT_TOD_ACCESS); + return ageTimePropogated; } // Check if key locations in the overworld are accessable static void ValidateOtherEntrance(GetAccessibleLocationsStruct& gals) { - auto ctx = Rando::Context::GetInstance(); - // Condition for validating Temple of Time Access - if (!gals.foundTempleOfTime && ((ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD) && RegionTable(RR_TEMPLE_OF_TIME)->Adult()) || - (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_ADULT) && RegionTable(RR_TEMPLE_OF_TIME)->Child()))) { - gals.foundTempleOfTime = true; - } - // Condition for validating a valid starting region - if (!gals.validatedStartingRegion) { - bool childAccess = ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD) || RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->Child(); - bool adultAccess = ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_ADULT) || RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->Adult(); - - Region* kokiri = RegionTable(RR_KOKIRI_FOREST); - Region* kakariko = RegionTable(RR_KAKARIKO_VILLAGE); - - if ((childAccess && (kokiri->Child() || kakariko->Child())) ||// RANDOTODO when proper ammo logic is done, this could probably be made optional - (adultAccess && (kokiri->Adult() || kakariko->Adult()))) { - gals.validatedStartingRegion = true; - ApplyStartingInventory(); // RANDOTODO when proper ammo logic is done, this could be moved to the start + auto ctx = Rando::Context::GetInstance(); + // Condition for validating Temple of Time Access + if (!gals.foundTempleOfTime && + ((ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD) && RegionTable(RR_TEMPLE_OF_TIME)->Adult()) || + (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_ADULT) && RegionTable(RR_TEMPLE_OF_TIME)->Child()))) { + gals.foundTempleOfTime = true; + } + // Condition for validating a valid starting region + if (!gals.validatedStartingRegion) { + bool childAccess = ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD) || + RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->Child(); + bool adultAccess = ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_ADULT) || + RegionTable(RR_TOT_BEYOND_DOOR_OF_TIME)->Adult(); + + Region* kokiri = RegionTable(RR_KOKIRI_FOREST); + Region* kakariko = RegionTable(RR_KAKARIKO_VILLAGE); + + if ((childAccess && + (kokiri->Child() || + kakariko->Child())) || // RANDOTODO when proper ammo logic is done, this could probably be made optional + (adultAccess && (kokiri->Adult() || kakariko->Adult()))) { + gals.validatedStartingRegion = true; + ApplyStartingInventory(); // RANDOTODO when proper ammo logic is done, this could be moved to the start + } + } + // If we are not shuffling the guard house, add the key so we can properly check for poe merchant access + if (gals.validatedStartingRegion && gals.foundTempleOfTime && + !ctx->GetOption(RSK_SHUFFLE_INTERIOR_ENTRANCES).Is(RO_INTERIOR_ENTRANCE_SHUFFLE_ALL)) { + Rando::StaticData::RetrieveItem(RG_GUARD_HOUSE_KEY).ApplyEffect(); } - } } // Apply all items that are necessary for checking all location access -static void ApplyAllAdvancmentItems(){ - std::vector itemsToPlace = - FilterFromPool(ItemPool, [](const auto i) { return Rando::StaticData::RetrieveItem(i).IsAdvancement(); }); - for (RandomizerGet unplacedItem : itemsToPlace) { - Rando::StaticData::RetrieveItem(unplacedItem).ApplyEffect(); - } +static void ApplyAllAdvancmentItems() { + std::vector itemsToPlace = + FilterFromPool(ItemPool, [](const auto i) { return Rando::StaticData::RetrieveItem(i).IsAdvancement(); }); + for (RandomizerGet unplacedItem : itemsToPlace) { + Rando::StaticData::RetrieveItem(unplacedItem).ApplyEffect(); + } } // Check if everything in an entrance rando seed that needs to be avalible without items, is, // and if so allow obtaining items in logic -static void ValidateSphereZero(GetAccessibleLocationsStruct& gals){ - auto ctx = Rando::Context::GetInstance(); - // Condition for verifying everything required for sphere 0, expanding search to all locations - if (logic->CouldEmptyBigPoes && gals.validatedStartingRegion && gals.foundTempleOfTime && gals.haveTimeAccess) { - // Apply all items that are necessary for checking all location access - ApplyAllAdvancmentItems(); - // Reset access as the non-starting age - if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { - for (RandomizerRegion regionKey : gals.regionPool) { - RegionTable(regionKey)->adultDay = false; - RegionTable(regionKey)->adultNight = false; - } - } else { - for (RandomizerRegion regionKey : gals.regionPool) { - RegionTable(regionKey)->childDay = false; - RegionTable(regionKey)->childNight = false; - } +static void ValidateSphereZero(GetAccessibleLocationsStruct& gals) { + auto ctx = Rando::Context::GetInstance(); + // Condition for verifying everything required for sphere 0, expanding search to all locations + if ((!logic->AreCheckingBigPoes || logic->CanEmptyBigPoes) && gals.validatedStartingRegion && + gals.foundTempleOfTime && gals.haveTimeAccess) { + // stop checking for big poes + logic->AreCheckingBigPoes = false; + // Apply all items that are necessary for checking all location access + ApplyAllAdvancmentItems(); + // Reset access as the non-starting age + if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { + for (RandomizerRegion regionKey : gals.regionPool) { + RegionTable(regionKey)->adultDay = false; + RegionTable(regionKey)->adultNight = false; + } + } else { + for (RandomizerRegion regionKey : gals.regionPool) { + RegionTable(regionKey)->childDay = false; + RegionTable(regionKey)->childNight = false; + } + } + // RANDOTODO do we want to keep the region pool after this reset? + // It's a lot of potential looping over regions we have no access to + gals.sphereZeroComplete = true; } - //RANDOTODO do we want to keep the region pool after this reset? - //It's a lot of potential looping over regions we have no access to - gals.sphereZeroComplete = true; - } } -//This function handles each possible exit -void ProcessExits(Region* region, GetAccessibleLocationsStruct& gals, RandomizerGet ignore = RG_NONE, - bool stopOnBeatable = false, bool addToPlaythrough = false){ - auto ctx = Rando::Context::GetInstance(); - for (auto& exit : region->exits) { - Region* exitRegion = exit.GetConnectedRegion(); - //Update Time of Day Access for the exit - if (UpdateToDAccess(&exit, exitRegion)) { - gals.logicUpdated = true; - if (!gals.sphereZeroComplete){ - if (!gals.foundTempleOfTime || !gals.validatedStartingRegion){ - ValidateOtherEntrance(gals); +// This function handles each possible exit +void ProcessExits(Region* region, GetAccessibleLocationsStruct& gals, RandomizerGet ignore = RG_NONE, + bool stopOnBeatable = false, bool addToPlaythrough = false) { + auto ctx = Rando::Context::GetInstance(); + for (auto& exit : region->exits) { + Region* exitRegion = exit.GetConnectedRegion(); + // Update Time of Day Access for the exit + if (UpdateToDAccess(&exit, exitRegion)) { + gals.logicUpdated = true; + if (!gals.sphereZeroComplete) { + if (!gals.foundTempleOfTime || !gals.validatedStartingRegion) { + ValidateOtherEntrance(gals); + } + ValidateSphereZero(gals); + } + // process the region we just expanded to, to reduce looping + ProcessRegion(exitRegion, gals, ignore, stopOnBeatable, addToPlaythrough); } - ValidateSphereZero(gals); - } - //process the region we just expanded to, to reduce looping - ProcessRegion(exitRegion, gals, ignore, stopOnBeatable, addToPlaythrough); - } - //If the exit is accessible and hasn't been added yet, add it to the pool - //RANDOTODO do we want to add the region after the loop now, considering we - //are processing the new region immediately. Maybe a reverse for loop in ProcessRegion? - if (!exitRegion->addedToPool && exit.ConditionsMet()) { - exitRegion->addedToPool = true; - gals.regionPool.push_back(exit.GetConnectedRegionKey()); - } - - if (addToPlaythrough){ - // RANDOTODO Should this match the regular spheres? - // Add shuffled entrances to the entrance playthrough - // Include bluewarps when unshuffled but dungeon or boss shuffle is on - if((exit.IsShuffled() || (exit.GetType() == Rando::EntranceType::BlueWarp && - (ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES) || ctx->GetOption(RSK_SHUFFLE_BOSS_ENTRANCES)))) && - !exit.IsAddedToPool() && !ctx->GetEntranceShuffler()->HasNoRandomEntrances()) { - gals.entranceSphere.push_back(&exit); - exit.AddToPool(); - // Don't list a two-way coupled entrance from both directions - if (exit.GetReverse() != nullptr && exit.GetReplacement()->GetReverse() != nullptr && !exit.IsDecoupled()) { - exit.GetReplacement()->GetReverse()->AddToPool(); + // If the exit is accessible and hasn't been added yet, add it to the pool + // RANDOTODO do we want to add the region after the loop now, considering we + // are processing the new region immediately. Maybe a reverse for loop in ProcessRegion? + if (!exitRegion->addedToPool && exit.ConditionsMet()) { + exitRegion->addedToPool = true; + gals.regionPool.push_back(exit.GetConnectedRegionKey()); + } + + if (addToPlaythrough) { + // RANDOTODO Should this match the regular spheres? + // Add shuffled entrances to the entrance playthrough + // Include bluewarps when unshuffled but dungeon or boss shuffle is on + if ((exit.IsShuffled() || + (exit.GetType() == Rando::EntranceType::BlueWarp && + (ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES) || ctx->GetOption(RSK_SHUFFLE_BOSS_ENTRANCES)))) && + !exit.IsAddedToPool() && !ctx->GetEntranceShuffler()->HasNoRandomEntrances()) { + gals.entranceSphere.push_back(&exit); + exit.AddToPool(); + // Don't list a two-way coupled entrance from both directions + if (exit.GetReverse() != nullptr && exit.GetReplacement()->GetReverse() != nullptr && + !exit.IsDecoupled()) { + exit.GetReplacement()->GetReverse()->AddToPool(); + } + } } - } } - } } - -//Get the max number of tokens that can possibly be useful +// Get the max number of tokens that can possibly be useful static int GetMaxGSCount() { - auto ctx = Rando::Context::GetInstance(); - //If bridge or LACS is set to tokens, get how many are required - int maxBridge = 0; - int maxLACS = 0; - if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_TOKENS)) { - maxBridge = ctx->GetOption(RSK_RAINBOW_BRIDGE_TOKEN_COUNT).Get(); - } - if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_TOKENS)) { - maxLACS = ctx->GetOption(RSK_LACS_TOKEN_COUNT).Get(); - } - maxBridge = std::max(maxBridge, maxLACS); - //Get the max amount of GS which could be useful from token reward locations - int maxUseful = 0; - //If the highest advancement item is a token, we know it is useless since it won't lead to an otherwise useful item - if (ctx->GetItemLocation(RC_KAK_100_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && ctx->GetItemLocation(RC_KAK_100_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { - maxUseful = 100; - } else if (ctx->GetItemLocation(RC_KAK_50_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && - ctx->GetItemLocation(RC_KAK_50_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { - maxUseful = 50; - } else if (ctx->GetItemLocation(RC_KAK_40_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && - ctx->GetItemLocation(RC_KAK_40_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { - maxUseful = 40; - } else if (ctx->GetItemLocation(RC_KAK_30_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && - ctx->GetItemLocation(RC_KAK_30_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { - maxUseful = 30; - } else if (ctx->GetItemLocation(RC_KAK_20_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && - ctx->GetItemLocation(RC_KAK_20_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { - maxUseful = 20; - } else if (ctx->GetItemLocation(RC_KAK_10_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && - ctx->GetItemLocation(RC_KAK_10_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { - maxUseful = 10; - } - //Return max of the two possible reasons tokens could be important, minus the tokens in the starting inventory - return std::max(maxUseful, maxBridge) - ctx->GetOption(RSK_STARTING_SKULLTULA_TOKEN).Get(); + auto ctx = Rando::Context::GetInstance(); + // If bridge or LACS is set to tokens, get how many are required + int maxBridge = 0; + int maxLACS = 0; + if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_TOKENS)) { + maxBridge = ctx->GetOption(RSK_RAINBOW_BRIDGE_TOKEN_COUNT).Get(); + } + if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_TOKENS)) { + maxLACS = ctx->GetOption(RSK_LACS_TOKEN_COUNT).Get(); + } + maxBridge = std::max(maxBridge, maxLACS); + // Get the max amount of GS which could be useful from token reward locations + int maxUseful = 0; + // If the highest advancement item is a token, we know it is useless since it won't lead to an otherwise useful item + if (ctx->GetItemLocation(RC_KAK_100_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && + ctx->GetItemLocation(RC_KAK_100_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { + maxUseful = 100; + } else if (ctx->GetItemLocation(RC_KAK_50_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && + ctx->GetItemLocation(RC_KAK_50_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { + maxUseful = 50; + } else if (ctx->GetItemLocation(RC_KAK_40_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && + ctx->GetItemLocation(RC_KAK_40_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { + maxUseful = 40; + } else if (ctx->GetItemLocation(RC_KAK_30_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && + ctx->GetItemLocation(RC_KAK_30_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { + maxUseful = 30; + } else if (ctx->GetItemLocation(RC_KAK_20_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && + ctx->GetItemLocation(RC_KAK_20_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { + maxUseful = 20; + } else if (ctx->GetItemLocation(RC_KAK_10_GOLD_SKULLTULA_REWARD)->GetPlacedItem().IsAdvancement() && + ctx->GetItemLocation(RC_KAK_10_GOLD_SKULLTULA_REWARD)->GetPlacedItem().GetItemType() != ITEMTYPE_TOKEN) { + maxUseful = 10; + } + // Return max of the two possible reasons tokens could be important, minus the tokens in the starting inventory + return std::max(maxUseful, maxBridge) - ctx->GetOption(RSK_STARTING_SKULLTULA_TOKEN).Get(); } std::string GetShopItemBaseName(std::string itemName) { - std::string baseName = itemName.erase(0, 4); //Delete "Buy " - //Delete amount, if present (so when it looks like Buy Deku Nut (10) remove the (10)) - if (baseName.find("(") != std::string::npos) { - baseName = baseName.erase(baseName.find("(")); - } - //Do the same for [] (only applies to red potions, other things with [] also have a ()) - if (baseName.find("[") != std::string::npos) { - baseName = baseName.erase(baseName.find("[")); - } - return baseName; + std::string baseName = itemName.erase(0, 4); // Delete "Buy " + // Delete amount, if present (so when it looks like Buy Deku Nut (10) remove the (10)) + if (baseName.find("(") != std::string::npos) { + baseName = baseName.erase(baseName.find("(")); + } + // Do the same for [] (only applies to red potions, other things with [] also have a ()) + if (baseName.find("[") != std::string::npos) { + baseName = baseName.erase(baseName.find("[")); + } + return baseName; } std::vector GetEmptyLocations(std::vector targetLocations) { @@ -294,486 +317,512 @@ std::vector GetAllEmptyLocations() { }); } -bool IsBombchus(RandomizerGet item, bool includeShops = false){ - return (item >= RG_BOMBCHU_5 && item <= RG_BOMBCHU_20) || item == RG_PROGRESSIVE_BOMBCHUS || - (includeShops && (item == RG_BUY_BOMBCHUS_10 || item == RG_BUY_BOMBCHUS_20)); +bool IsBombchus(RandomizerGet item, bool includeShops = false) { + return (item >= RG_BOMBCHU_5 && item <= RG_BOMBCHU_20) || item == RG_PROGRESSIVE_BOMBCHUS || + (includeShops && (item == RG_BUY_BOMBCHUS_10 || item == RG_BUY_BOMBCHUS_20)); } -bool IsBeatableWithout(RandomizerCheck excludedCheck, bool replaceItem, RandomizerGet ignore = RG_NONE){ //RANDOTODO make excludCheck an ItemLocation - auto ctx = Rando::Context::GetInstance(); - RandomizerGet copy = ctx->GetItemLocation(excludedCheck)->GetPlacedRandomizerGet(); //Copy out item - ctx->GetItemLocation(excludedCheck)->SetPlacedItem(RG_NONE); //Write in empty item - ctx->playthroughBeatable = false; - logic->Reset(); - CheckBeatable(ignore); - if (replaceItem){ - ctx->GetItemLocation(excludedCheck)->SetPlacedItem(copy); //Immediately put item back - } - return ctx->playthroughBeatable; +bool IsBeatableWithout(RandomizerCheck excludedCheck, bool replaceItem, + RandomizerGet ignore = RG_NONE) { // RANDOTODO make excludCheck an ItemLocation + auto ctx = Rando::Context::GetInstance(); + RandomizerGet copy = ctx->GetItemLocation(excludedCheck)->GetPlacedRandomizerGet(); // Copy out item + ctx->GetItemLocation(excludedCheck)->SetPlacedItem(RG_NONE); // Write in empty item + ctx->playthroughBeatable = false; + logic->Reset(); + CheckBeatable(ignore); + if (replaceItem) { + ctx->GetItemLocation(excludedCheck)->SetPlacedItem(copy); // Immediately put item back + } + return ctx->playthroughBeatable; } // Reset non-Logic-class logic, and optionally apply the initial inventory -void ResetLogic(std::shared_ptr& ctx, GetAccessibleLocationsStruct& gals, bool applyInventory = false){ - gals.timePassChildDay = true; - gals.timePassChildNight = true; - gals.timePassAdultDay = true; - gals.timePassAdultNight = true; - gals.haveTimeAccess = true; - gals.foundTempleOfTime = true; - gals.validatedStartingRegion = true; - gals.sphereZeroComplete = true; - if (applyInventory){ - ApplyStartingInventory(); - } - Regions::AccessReset(); - ctx->LocationReset(); -} - -//Generate the playthrough, so we want to add advancement items, unless we know to ignore them -void AddToPlaythrough(LocationAccess& locPair, GetAccessibleLocationsStruct& gals){ - auto ctx = Rando::Context::GetInstance(); - RandomizerCheck loc = locPair.GetLocation(); - Rando::ItemLocation* location = ctx->GetItemLocation(loc); - RandomizerGet locItem = location->GetPlacedRandomizerGet(); - //Item is an advancement item, figure out if it should be added to this sphere - if (!ctx->playthroughBeatable && location->GetPlacedItem().IsAdvancement()) { - ItemType type = location->GetPlacedItem().GetItemType(); - - //Decide whether to exclude this location - //This preprocessing is done to reduce the amount of searches performed in PareDownPlaythrough - //Want to exclude: - //1) Tokens after the last potentially useful one (the last one that gives an advancement item or last for token bridge) - //2) Buy items of the same type, after the first (So only see Buy Deku Nut of any amount once) - bool exclude = true; - //Exclude tokens after the last possibly useful one - if (type == ITEMTYPE_TOKEN && gals.gsCount < gals.maxGsCount) { - gals.gsCount++; - exclude = false; +void ResetLogic(std::shared_ptr& ctx, GetAccessibleLocationsStruct& gals, bool applyInventory = false) { + gals.timePassChildDay = true; + gals.timePassChildNight = true; + gals.timePassAdultDay = true; + gals.timePassAdultNight = true; + gals.haveTimeAccess = true; + gals.foundTempleOfTime = true; + gals.validatedStartingRegion = true; + gals.sphereZeroComplete = true; + if (applyInventory) { + ApplyStartingInventory(); } - //Handle buy items - //If ammo drops are off, don't do this step, since buyable ammo becomes logically important - // TODO: Reimplement Ammo Drops setting - else if (/*AmmoDrops.IsNot(AMMODROPS_NONE) &&*/ type == ITEMTYPE_SHOP) { - //Only check each buy item once - auto buyItem = location->GetPlacedItem().GetLogicVal(); - //Buy item not in list to ignore, add it to list and write to playthrough - if (std::find(gals.buyIgnores.begin(), gals.buyIgnores.end(), buyItem) == gals.buyIgnores.end()) { - exclude = false; - gals.buyIgnores.push_back(buyItem); - } - } - //Add all other advancement items - else if (type != ITEMTYPE_TOKEN && (/*AmmoDrops.Is(AMMODROPS_NONE) ||*/ type != ITEMTYPE_SHOP)) { - exclude = false; - } - //Has not been excluded, add to playthrough - if (!exclude) { - gals.itemSphere.push_back(loc); - } - } - //Triforce has been found, seed is beatable, nothing else in this or future spheres matters - else if (location->GetPlacedRandomizerGet() == RG_TRIFORCE) { - gals.itemSphere.clear(); - gals.itemSphere.push_back(loc); - ctx->playthroughBeatable = true; - } + Regions::AccessReset(); + ctx->LocationReset(); } -void ApplyOrStoreItem(Rando::ItemLocation* loc, GetAccessibleLocationsStruct& gals, bool addToPlaythrough){ - if (addToPlaythrough){ - gals.newItemLocations.push_back(loc); - } else { - loc->ApplyPlacedItemEffect(); - } - gals.logicUpdated = true; +// Generate the playthrough, so we want to add advancement items, unless we know to ignore them +void AddToPlaythrough(LocationAccess& locPair, GetAccessibleLocationsStruct& gals) { + auto ctx = Rando::Context::GetInstance(); + RandomizerCheck loc = locPair.GetLocation(); + Rando::ItemLocation* location = ctx->GetItemLocation(loc); + RandomizerGet locItem = location->GetPlacedRandomizerGet(); + // Item is an advancement item, figure out if it should be added to this sphere + if (!ctx->playthroughBeatable && location->GetPlacedItem().IsAdvancement()) { + ItemType type = location->GetPlacedItem().GetItemType(); + + // Decide whether to exclude this location + // This preprocessing is done to reduce the amount of searches performed in PareDownPlaythrough + // Want to exclude: + // 1) Tokens after the last potentially useful one (the last one that gives an advancement item or last for + // token bridge) 2) Buy items of the same type, after the first (So only see Buy Deku Nut of any amount once) + bool exclude = true; + // Exclude tokens after the last possibly useful one + if (type == ITEMTYPE_TOKEN && gals.gsCount < gals.maxGsCount) { + gals.gsCount++; + exclude = false; + } + // Handle buy items + // If ammo drops are off, don't do this step, since buyable ammo becomes logically important + // TODO: Reimplement Ammo Drops setting + else if (/*AmmoDrops.IsNot(AMMODROPS_NONE) &&*/ type == ITEMTYPE_SHOP) { + // Only check each buy item once + auto buyItem = location->GetPlacedItem().GetLogicVal(); + // Buy item not in list to ignore, add it to list and write to playthrough + if (std::find(gals.buyIgnores.begin(), gals.buyIgnores.end(), buyItem) == gals.buyIgnores.end()) { + exclude = false; + gals.buyIgnores.push_back(buyItem); + } + } + // Add all other advancement items + else if (type != ITEMTYPE_TOKEN && (/*AmmoDrops.Is(AMMODROPS_NONE) ||*/ type != ITEMTYPE_SHOP)) { + exclude = false; + } + // Has not been excluded, add to playthrough + if (!exclude) { + gals.itemSphere.push_back(loc); + } + } + // Triforce has been found, seed is beatable, nothing else in this or future spheres matters + else if (location->GetPlacedRandomizerGet() == RG_TRIFORCE) { + gals.itemSphere.clear(); + gals.itemSphere.push_back(loc); + ctx->playthroughBeatable = true; + } +} + +void ApplyOrStoreItem(Rando::ItemLocation* loc, GetAccessibleLocationsStruct& gals, bool addToPlaythrough) { + if (addToPlaythrough) { + gals.newItemLocations.push_back(loc); + } else { + loc->ApplyPlacedItemEffect(); + } + gals.logicUpdated = true; } // Adds the contents of a location to the current progression and optionally playthrough -bool AddCheckToLogic(LocationAccess& locPair, GetAccessibleLocationsStruct& gals, RandomizerGet ignore, bool stopOnBeatable, Region* parentRegion, bool addToPlaythrough=false){ - auto ctx = Rando::Context::GetInstance(); - StartPerformanceTimer(PT_LOCATION_LOGIC); - RandomizerCheck loc = locPair.GetLocation(); - Rando::ItemLocation* location = ctx->GetItemLocation(loc); - RandomizerGet locItem = location->GetPlacedRandomizerGet(); +bool AddCheckToLogic(LocationAccess& locPair, GetAccessibleLocationsStruct& gals, RandomizerGet ignore, + bool stopOnBeatable, Region* parentRegion, bool addToPlaythrough = false) { + auto ctx = Rando::Context::GetInstance(); + StartPerformanceTimer(PT_LOCATION_LOGIC); + RandomizerCheck loc = locPair.GetLocation(); + Rando::ItemLocation* location = ctx->GetItemLocation(loc); + RandomizerGet locItem = location->GetPlacedRandomizerGet(); - if (!location->IsAddedToPool() && locPair.ConditionsMet(parentRegion)) { - location->AddToPool(); + if (!location->IsAddedToPool() && locPair.ConditionsMet(parentRegion, gals.calculatingAvailableChecks)) { + if (gals.calculatingAvailableChecks) { + gals.accessibleLocations.push_back(loc); + StopPerformanceTimer(PT_LOCATION_LOGIC); + return false; + } - if (locItem == RG_NONE) { - gals.accessibleLocations.push_back(loc); //Empty location, consider for placement - } else { - //If ignore has a value, we want to check if the item location should be considered or not - //This is necessary due to the below preprocessing for playthrough generation - if (ignore != RG_NONE) { - ItemType type = location->GetPlacedItem().GetItemType(); - //If we want to ignore tokens, only add if not a token - if (ignore == RG_GOLD_SKULLTULA_TOKEN && type != ITEMTYPE_TOKEN) { - ApplyOrStoreItem(location, gals, addToPlaythrough); + location->AddToPool(); + + if (locItem == RG_NONE) { + gals.accessibleLocations.push_back(loc); // Empty location, consider for placement + } else { + // If ignore has a value, we want to check if the item location should be considered or not + // This is necessary due to the below preprocessing for playthrough generation + if (ignore != RG_NONE) { + ItemType type = location->GetPlacedItem().GetItemType(); + // If we want to ignore tokens, only add if not a token + if (ignore == RG_GOLD_SKULLTULA_TOKEN && type != ITEMTYPE_TOKEN) { + ApplyOrStoreItem(location, gals, addToPlaythrough); + } + // If we want to ignore bombchus, only add if bombchu is not in the name + else if (IsBombchus(ignore) && IsBombchus(locItem, true)) { + ApplyOrStoreItem(location, gals, addToPlaythrough); + } + // We want to ignore a specific Buy item. Buy items with different RandomizerGets are recognised by a + // shared GetLogicVal + else if (ignore != RG_GOLD_SKULLTULA_TOKEN && IsBombchus(ignore)) { + if ((type == ITEMTYPE_SHOP && Rando::StaticData::GetItemTable()[ignore].GetLogicVal() != + location->GetPlacedItem().GetLogicVal()) || + type != ITEMTYPE_SHOP) { + ApplyOrStoreItem(location, gals, addToPlaythrough); + } + } + } + // If it doesn't, we can just add the location + else { + ApplyOrStoreItem(location, gals, + addToPlaythrough); // Add item to cache to be considered in logic next iteration + } } - //If we want to ignore bombchus, only add if bombchu is not in the name - else if (IsBombchus(ignore) && IsBombchus(locItem, true)) { - ApplyOrStoreItem(location, gals, addToPlaythrough); + if (addToPlaythrough) { + AddToPlaythrough(locPair, gals); } - //We want to ignore a specific Buy item. Buy items with different RandomizerGets are recognised by a shared GetLogicVal - else if (ignore != RG_GOLD_SKULLTULA_TOKEN && IsBombchus(ignore)) { - if ((type == ITEMTYPE_SHOP && Rando::StaticData::GetItemTable()[ignore].GetLogicVal() != location->GetPlacedItem().GetLogicVal()) || type != ITEMTYPE_SHOP) { - ApplyOrStoreItem(location, gals, addToPlaythrough); - } + // All we care about is if the game is beatable, used to pare down playthrough + if (location->GetPlacedRandomizerGet() == RG_TRIFORCE && stopOnBeatable) { + StopPerformanceTimer(PT_LOCATION_LOGIC); + return true; // Return early for efficiency } - } - //If it doesn't, we can just add the location - else { - ApplyOrStoreItem(location, gals, addToPlaythrough); //Add item to cache to be considered in logic next iteration - } } - if (addToPlaythrough){ - AddToPlaythrough(locPair, gals); - } - //All we care about is if the game is beatable, used to pare down playthrough - if (location->GetPlacedRandomizerGet() == RG_TRIFORCE && stopOnBeatable) { - StopPerformanceTimer(PT_LOCATION_LOGIC); - return true; //Return early for efficiency - } - } - StopPerformanceTimer(PT_LOCATION_LOGIC); - return false; + StopPerformanceTimer(PT_LOCATION_LOGIC); + return false; } -void ProcessRegion(Region* region, GetAccessibleLocationsStruct& gals, RandomizerGet ignore, - bool stopOnBeatable, bool addToPlaythrough){ - - if (gals.haveTimeAccess) { - region->ApplyTimePass(); - } else { - // If we're checking for TimePass access do that for each region as it's being updated. - // TimePass Access is satisfied when every AgeTime can reach a region with TimePass - // without the aid of TimePass. During this mode, TimePass won't update ToD access - // in any region. - //RANDOTODO can probably be removed after a ToD rework that accounts for having Dampe time access - if (region->timePass) { - if (region->childDay) { - gals.timePassChildDay = true; - } - if (region->childNight) { - gals.timePassChildNight = true; - } - if (region->adultDay) { - gals.timePassAdultDay = true; - } - if (region->adultNight) { - gals.timePassAdultNight = true; - } - } - // Condition for validating that all startring AgeTimes have timepass access - if (gals.timePassChildDay && gals.timePassChildNight && - gals.timePassAdultDay && gals.timePassAdultNight) { - gals.haveTimeAccess = true; - region->ApplyTimePass(); - } - } +void ProcessRegion(Region* region, GetAccessibleLocationsStruct& gals, RandomizerGet ignore, bool stopOnBeatable, + bool addToPlaythrough) { - if (region->UpdateEvents()){ - gals.logicUpdated = true; - //if we are working in spheres, reset the sphere on an event being enabled to avoid sphere skipping - if (addToPlaythrough){ - gals.resetSphere = true; + if (gals.haveTimeAccess) { + region->ApplyTimePass(); + } else { + // If we're checking for TimePass access do that for each region as it's being updated. + // TimePass Access is satisfied when every AgeTime can reach a region with TimePass + // without the aid of TimePass. During this mode, TimePass won't update ToD access + // in any region. + // RANDOTODO can probably be removed after a ToD rework that accounts for having Dampe time access + if (region->timePass) { + if (region->childDay) { + gals.timePassChildDay = true; + } + if (region->childNight) { + gals.timePassChildNight = true; + } + if (region->adultDay) { + gals.timePassAdultDay = true; + } + if (region->adultNight) { + gals.timePassAdultNight = true; + } + } + // Condition for validating that all startring AgeTimes have timepass access + if (gals.timePassChildDay && gals.timePassChildNight && gals.timePassAdultDay && gals.timePassAdultNight) { + gals.haveTimeAccess = true; + region->ApplyTimePass(); + } } - } - - ProcessExits(region, gals, ignore, stopOnBeatable, addToPlaythrough); - - PropagateTimeTravel(gals, ignore, stopOnBeatable, addToPlaythrough); - for (size_t k = 0; k < region->locations.size(); k++) { - if(AddCheckToLogic(region->locations[k], gals, ignore, stopOnBeatable, region, addToPlaythrough)){ - Rando::Context::GetInstance()->playthroughBeatable = true; - return; + + if (region->UpdateEvents()) { + gals.logicUpdated = true; + // if we are working in spheres, reset the sphere on an event being enabled to avoid sphere skipping + if (addToPlaythrough) { + gals.resetSphere = true; + } + } + + ProcessExits(region, gals, ignore, stopOnBeatable, addToPlaythrough); + + PropagateTimeTravel(gals, ignore, stopOnBeatable, addToPlaythrough); + for (size_t k = 0; k < region->locations.size(); k++) { + if (AddCheckToLogic(region->locations[k], gals, ignore, stopOnBeatable, region, addToPlaythrough)) { + Rando::Context::GetInstance()->playthroughBeatable = true; + return; + } } - } } // Return any of the targetLocations that are accessible in logic -std::vector ReachabilitySearch(const std::vector& targetLocations, RandomizerGet ignore /* = RG_NONE*/) { - auto ctx = Rando::Context::GetInstance(); - GetAccessibleLocationsStruct gals(0); - ResetLogic(ctx, gals, true); - do { - gals.InitLoop(); - for (size_t i = 0; i < gals.regionPool.size(); i++) { - ProcessRegion(RegionTable(gals.regionPool[i]), gals, ignore); - } - } while (gals.logicUpdated); - erase_if(gals.accessibleLocations, [&targetLocations, ctx](RandomizerCheck loc){ - for (RandomizerCheck allowedLocation : targetLocations) { - if (loc == allowedLocation || ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() != RG_NONE) { - return false; - } - } - return true; - }); - return gals.accessibleLocations; +std::vector ReachabilitySearch(const std::vector& targetLocations, + RandomizerGet ignore /* = RG_NONE*/, + bool calculatingAvailableChecks /* = false */) { + auto ctx = Rando::Context::GetInstance(); + GetAccessibleLocationsStruct gals(0); + gals.calculatingAvailableChecks = calculatingAvailableChecks; + ResetLogic(ctx, gals, !calculatingAvailableChecks); + do { + gals.InitLoop(); + for (size_t i = 0; i < gals.regionPool.size(); i++) { + ProcessRegion(RegionTable(gals.regionPool[i]), gals, ignore); + } + } while (gals.logicUpdated); + erase_if(gals.accessibleLocations, [&targetLocations, ctx, calculatingAvailableChecks](RandomizerCheck loc) { + if (ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() != RG_NONE && !calculatingAvailableChecks) { + return false; + } + for (RandomizerCheck allowedLocation : targetLocations) { + if (loc == allowedLocation) { + return false; + } + } + return true; + }); + return gals.accessibleLocations; } // Create the playthrough for the seed void GeneratePlaythrough() { - auto ctx = Rando::Context::GetInstance(); - ctx->playthroughBeatable = false; - logic->Reset(); - GetAccessibleLocationsStruct gals(GetMaxGSCount()); - ResetLogic(ctx, gals, true); - do { - gals.InitLoop(); - for (size_t i = 0; i < gals.regionPool.size(); i++) { - ProcessRegion(RegionTable(gals.regionPool[i]), gals, RG_NONE, false, true); - if (gals.resetSphere){ - gals.resetSphere = false; - i = -1; - } - } - if (gals.itemSphere.size() > 0) { - ctx->playthroughLocations.push_back(gals.itemSphere); - } - if (gals.entranceSphere.size() > 0 && !ctx->GetEntranceShuffler()->HasNoRandomEntrances()) { - ctx->GetEntranceShuffler()->playthroughEntrances.push_back(gals.entranceSphere); - } - } while (gals.logicUpdated); + auto ctx = Rando::Context::GetInstance(); + ctx->playthroughBeatable = false; + logic->Reset(); + GetAccessibleLocationsStruct gals(GetMaxGSCount()); + ResetLogic(ctx, gals, true); + do { + gals.InitLoop(); + for (size_t i = 0; i < gals.regionPool.size(); i++) { + ProcessRegion(RegionTable(gals.regionPool[i]), gals, RG_NONE, false, true); + if (gals.resetSphere) { + gals.resetSphere = false; + i = -1; + } + } + if (gals.itemSphere.size() > 0) { + ctx->playthroughLocations.push_back(gals.itemSphere); + } + if (gals.entranceSphere.size() > 0 && !ctx->GetEntranceShuffler()->HasNoRandomEntrances()) { + ctx->GetEntranceShuffler()->playthroughEntrances.push_back(gals.entranceSphere); + } + } while (gals.logicUpdated); } // return if the seed is currently beatable or not bool CheckBeatable(RandomizerGet ignore /* = RG_NONE*/) { - auto ctx = Rando::Context::GetInstance(); - GetAccessibleLocationsStruct gals(0); - ResetLogic(ctx, gals, true); - do { - gals.InitLoop(); - for (size_t i = 0; i < gals.regionPool.size(); i++) { - ProcessRegion(RegionTable(gals.regionPool[i]), gals, ignore, true); - if (ctx->playthroughBeatable == true){ - return true; - } - } - } while (gals.logicUpdated); - return false; + auto ctx = Rando::Context::GetInstance(); + GetAccessibleLocationsStruct gals(0); + ResetLogic(ctx, gals, true); + do { + gals.InitLoop(); + for (size_t i = 0; i < gals.regionPool.size(); i++) { + ProcessRegion(RegionTable(gals.regionPool[i]), gals, ignore, true); + if (ctx->playthroughBeatable == true) { + return true; + } + } + } while (gals.logicUpdated); + return false; } // Check if the currently randomised set of entrances is a valid game map. void ValidateEntrances(bool checkPoeCollectorAccess, bool checkOtherEntranceAccess) { - auto ctx = Rando::Context::GetInstance(); - GetAccessibleLocationsStruct gals(0); - ResetLogic(ctx, gals, !checkOtherEntranceAccess); + auto ctx = Rando::Context::GetInstance(); + GetAccessibleLocationsStruct gals(0); + ResetLogic(ctx, gals, !checkOtherEntranceAccess); - ctx->allLocationsReachable = false; - if (checkPoeCollectorAccess){ - logic->CouldEmptyBigPoes = false; - } - - if (checkOtherEntranceAccess){ - gals.foundTempleOfTime = false; - gals.validatedStartingRegion = false; - //Variables for Time Pass access - gals.timePassChildDay = false; - gals.timePassChildNight = false; - gals.timePassAdultDay = false; - gals.timePassAdultNight = false; - gals.haveTimeAccess = false; - gals.sphereZeroComplete = false; - RegionTable(RR_ROOT)->childNight = true; - RegionTable(RR_ROOT)->adultNight = true; - RegionTable(RR_ROOT)->childDay = true; - RegionTable(RR_ROOT)->adultDay = true; - } else { - ApplyAllAdvancmentItems(); - } - - do { - gals.InitLoop(); - for (size_t i = 0; i < gals.regionPool.size(); i++) { - ProcessRegion(RegionTable(gals.regionPool[i]), gals); + ctx->allLocationsReachable = false; + if (checkPoeCollectorAccess) { + logic->AreCheckingBigPoes = true; } - } while (gals.logicUpdated); - if (gals.sphereZeroComplete) { - ctx->allLocationsReachable = true; - //RANDOTODO a size check here before getting the exact fails would be a minor optimization - //and a full list of location failures would be useful for logging when it does fail - for (const RandomizerCheck loc : ctx->allLocations) { - if (!ctx->GetItemLocation(loc)->IsAddedToPool()) { - ctx->allLocationsReachable = false; - auto message = "Location " + - Rando::StaticData::GetLocation(ctx->GetItemLocation(loc)->GetRandomizerCheck())->GetName() + - " not reachable\n"; - LUSLOG_DEBUG("%s", message.c_str()); - #ifndef ENABLE_DEBUG - break; - #endif - } - } - } -} -void LookForExternalArea(Region* currentRegion, std::set &alreadyChecked, std::set &areas, bool LowPriorityMode=false){ - for (const auto& entrance : currentRegion->entrances) { - //if the region is arealess and hasn't already been checked, recursivly check what connects to it - //if this entrance does not pass areas, only process it if we are in low priority mode - if ((LowPriorityMode || entrance->DoesSpreadAreas()) && !alreadyChecked.contains(entrance->GetParentRegion())){ - std::set otherAreas = entrance->GetParentRegion()->GetAllAreas(); - if (otherAreas.size() == 0) { - alreadyChecked.insert(entrance->GetParentRegion()); - LookForExternalArea(entrance->GetParentRegion(), alreadyChecked, areas, LowPriorityMode); - //If we find a valid area we should add it. - //If it's Links Pocket or RA_NONE, do not propagate those, they are not real areas. - //This check is likely to fail if a region somehow is both in Link's Pocket and elsewhere, but this should never happen - } else if (*otherAreas.begin() > RA_LINKS_POCKET){ - areas.merge(otherAreas); - } - } - } -} - -void SetAreas(){ - auto ctx = Rando::Context::GetInstance(); -//RANDOTODO give entrances an enum like RandomizerCheck, the give them all areas here, -//then use those areas to not need to recursivly find ItemLocation areas when an identifying entrance's area - for (int regionType = 0; regionType < RR_MARKER_AREAS_END; regionType++) { - Region* region = &areaTable[regionType]; - std::set areas = region->GetAllAreas(); - std::set regionsToSet = {region}; - if (areas.empty()) { - LookForExternalArea(region, regionsToSet, areas); - //If we found nothing, try again in low priority mode to try every entrance - if (areas.empty()) { - LookForExternalArea(region, regionsToSet, areas, true); - //If we still found nothing, we're disconnected, use RA_NONE to represent that - if (areas.empty()){ - areas.insert(RA_NONE); + if (checkOtherEntranceAccess) { + gals.foundTempleOfTime = false; + gals.validatedStartingRegion = false; + // Variables for Time Pass access + gals.timePassChildDay = false; + gals.timePassChildNight = false; + gals.timePassAdultDay = false; + gals.timePassAdultNight = false; + gals.haveTimeAccess = false; + gals.sphereZeroComplete = false; + RegionTable(RR_ROOT)->childNight = true; + RegionTable(RR_ROOT)->adultNight = true; + RegionTable(RR_ROOT)->childDay = true; + RegionTable(RR_ROOT)->adultDay = true; + } else if (checkPoeCollectorAccess) { + // If we are not shuffling the guard house, add the key so we can properly check for poe merchant access + if (!ctx->GetOption(RSK_SHUFFLE_INTERIOR_ENTRANCES).Is(RO_INTERIOR_ENTRANCE_SHUFFLE_ALL)) { + Rando::StaticData::RetrieveItem(RG_GUARD_HOUSE_KEY).ApplyEffect(); } - } + } else { + ApplyAllAdvancmentItems(); } - for (auto regionToSet : regionsToSet) { - regionToSet->ReplaceAreas(areas); - for (auto& loc : regionToSet->locations){ - ctx->GetItemLocation(loc.GetLocation())->MergeAreas(areas); - } + + do { + gals.InitLoop(); + for (size_t i = 0; i < gals.regionPool.size(); i++) { + ProcessRegion(RegionTable(gals.regionPool[i]), gals); + } + } while (gals.logicUpdated); + if (gals.sphereZeroComplete) { + ctx->allLocationsReachable = true; + // RANDOTODO a size check here before getting the exact fails would be a minor optimization + // and a full list of location failures would be useful for logging when it does fail + for (const RandomizerCheck loc : ctx->allLocations) { + if (!ctx->GetItemLocation(loc)->IsAddedToPool()) { + ctx->allLocationsReachable = false; + auto message = + "Location " + + Rando::StaticData::GetLocation(ctx->GetItemLocation(loc)->GetRandomizerCheck())->GetName() + + " not reachable\n"; + LUSLOG_DEBUG("%s", message.c_str()); +#ifndef ENABLE_DEBUG + break; +#endif + } + } } - } } -//Remove unnecessary items from playthrough by removing their location, and checking if game is still beatable -//To reduce searches, some preprocessing is done in playthrough generation to avoid adding obviously unnecessary items +void LookForExternalArea(Region* currentRegion, std::set& alreadyChecked, std::set& areas, + bool LowPriorityMode = false) { + for (const auto& entrance : currentRegion->entrances) { + // if the region is arealess and hasn't already been checked, recursivly check what connects to it + // if this entrance does not pass areas, only process it if we are in low priority mode + if ((LowPriorityMode || entrance->DoesSpreadAreas()) && !alreadyChecked.contains(entrance->GetParentRegion())) { + std::set otherAreas = entrance->GetParentRegion()->GetAllAreas(); + if (otherAreas.size() == 0) { + alreadyChecked.insert(entrance->GetParentRegion()); + LookForExternalArea(entrance->GetParentRegion(), alreadyChecked, areas, LowPriorityMode); + // If we find a valid area we should add it. + // If it's Links Pocket or RA_NONE, do not propagate those, they are not real areas. + // This check is likely to fail if a region somehow is both in Link's Pocket and elsewhere, but this + // should never happen + } else if (*otherAreas.begin() > RA_LINKS_POCKET) { + areas.merge(otherAreas); + } + } + } +} + +void SetAreas() { + auto ctx = Rando::Context::GetInstance(); + // RANDOTODO give entrances an enum like RandomizerCheck, the give them all areas here, + // then use those areas to not need to recursivly find ItemLocation areas when an identifying entrance's area + for (int regionType = 0; regionType < RR_MARKER_AREAS_END; regionType++) { + Region* region = &areaTable[regionType]; + std::set areas = region->GetAllAreas(); + std::set regionsToSet = { region }; + if (areas.empty()) { + LookForExternalArea(region, regionsToSet, areas); + // If we found nothing, try again in low priority mode to try every entrance + if (areas.empty()) { + LookForExternalArea(region, regionsToSet, areas, true); + // If we still found nothing, we're disconnected, use RA_NONE to represent that + if (areas.empty()) { + areas.insert(RA_NONE); + } + } + } + for (auto regionToSet : regionsToSet) { + regionToSet->ReplaceAreas(areas); + for (auto& loc : regionToSet->locations) { + ctx->GetItemLocation(loc.GetLocation())->MergeAreas(areas); + } + } + } +} + +// Remove unnecessary items from playthrough by removing their location, and checking if game is still beatable +// To reduce searches, some preprocessing is done in playthrough generation to avoid adding obviously unnecessary items static void PareDownPlaythrough() { - auto ctx = Rando::Context::GetInstance(); - std::vector toAddBackItem; - //Start at sphere before Ganon's and count down - for (int i = ctx->playthroughLocations.size() - 2; i >= 0; i--) { - //Check each item location in sphere - std::vector erasableIndices; - std::vector sphere = ctx->playthroughLocations.at(i); - for (int j = sphere.size() - 1; j >= 0; j--) { - RandomizerCheck loc = sphere.at(j); - RandomizerGet locGet = ctx->GetItemLocation(loc)->GetPlacedRandomizerGet(); //Copy out item + auto ctx = Rando::Context::GetInstance(); + std::vector toAddBackItem; + // Start at sphere before Ganon's and count down + for (int i = ctx->playthroughLocations.size() - 2; i >= 0; i--) { + // Check each item location in sphere + std::vector erasableIndices; + std::vector sphere = ctx->playthroughLocations.at(i); + for (int j = sphere.size() - 1; j >= 0; j--) { + RandomizerCheck loc = sphere.at(j); + RandomizerGet locGet = ctx->GetItemLocation(loc)->GetPlacedRandomizerGet(); // Copy out item - RandomizerGet ignore = RG_NONE; - if (locGet == RG_GOLD_SKULLTULA_TOKEN || IsBombchus(locGet, true) - || Rando::StaticData::RetrieveItem(locGet).GetItemType() == ITEMTYPE_SHOP) { - ignore = locGet; - } + RandomizerGet ignore = RG_NONE; + if (locGet == RG_GOLD_SKULLTULA_TOKEN || IsBombchus(locGet, true) || + Rando::StaticData::RetrieveItem(locGet).GetItemType() == ITEMTYPE_SHOP) { + ignore = locGet; + } - //Playthrough is still beatable without this item, therefore it can be removed from playthrough section. - if (IsBeatableWithout(loc, false, ignore)) { - ctx->playthroughLocations[i].erase(ctx->playthroughLocations[i].begin() + j); - ctx->GetItemLocation(loc)->SetDelayedItem(locGet); //Game is still beatable, don't add back until later - toAddBackItem.push_back(loc); - } - else { - ctx->GetItemLocation(loc)->SetPlacedItem(locGet); //Immediately put item back so game is beatable again - } + // Playthrough is still beatable without this item, therefore it can be removed from playthrough section. + if (IsBeatableWithout(loc, false, ignore)) { + ctx->playthroughLocations[i].erase(ctx->playthroughLocations[i].begin() + j); + ctx->GetItemLocation(loc)->SetDelayedItem(locGet); // Game is still beatable, don't add back until later + toAddBackItem.push_back(loc); + } else { + ctx->GetItemLocation(loc)->SetPlacedItem(locGet); // Immediately put item back so game is beatable again + } + } } - } - //Some spheres may now be empty, remove these - for (int i = ctx->playthroughLocations.size() - 2; i >= 0; i--) { - if (ctx->playthroughLocations.at(i).size() == 0) { - ctx->playthroughLocations.erase(ctx->playthroughLocations.begin() + i); + // Some spheres may now be empty, remove these + for (int i = ctx->playthroughLocations.size() - 2; i >= 0; i--) { + if (ctx->playthroughLocations.at(i).size() == 0) { + ctx->playthroughLocations.erase(ctx->playthroughLocations.begin() + i); + } } - } - //Now we can add back items which were removed previously - for (RandomizerCheck loc : toAddBackItem) { - ctx->GetItemLocation(loc)->SaveDelayedItem(); - } + // Now we can add back items which were removed previously + for (RandomizerCheck loc : toAddBackItem) { + ctx->GetItemLocation(loc)->SaveDelayedItem(); + } } -//Very similar to PareDownPlaythrough except it sets WotH candidacy of Way of the Hero items -//Way of the Hero items are more specific than playthrough items in that they are items which *must* -// be obtained to logically be able to complete the seed, rather than playthrough items which -// are just possible items you *can* collect to complete the seed. +// Very similar to PareDownPlaythrough except it sets WotH candidacy of Way of the Hero items +// Way of the Hero items are more specific than playthrough items in that they are items which *must* +// be obtained to logically be able to complete the seed, rather than playthrough items which +// are just possible items you *can* collect to complete the seed. static void CalculateWotH() { - auto ctx = Rando::Context::GetInstance(); - //size - 1 so Triforce is not counted - for (size_t i = 0; i < ctx->playthroughLocations.size() - 1; i++) { - for (size_t j = 0; j < ctx->playthroughLocations[i].size(); j++) { - //If removing this item and no other item caused the game to become unbeatable, then it is strictly necessary, - //so add it unless it is in Links Pocket or an isolated place. - auto itemLoc = ctx->GetItemLocation(ctx->playthroughLocations[i][j]); - if (itemLoc->IsHintable() && itemLoc->GetFirstArea() > RA_LINKS_POCKET && - !(IsBeatableWithout(ctx->playthroughLocations[i][j], true))) { - itemLoc->SetWothCandidate(); - } + auto ctx = Rando::Context::GetInstance(); + // size - 1 so Triforce is not counted + for (size_t i = 0; i < ctx->playthroughLocations.size() - 1; i++) { + for (size_t j = 0; j < ctx->playthroughLocations[i].size(); j++) { + // If removing this item and no other item caused the game to become unbeatable, then it is strictly + // necessary, so add it unless it is in Links Pocket or an isolated place. + auto itemLoc = ctx->GetItemLocation(ctx->playthroughLocations[i][j]); + if (itemLoc->IsHintable() && itemLoc->GetFirstArea() > RA_LINKS_POCKET && + !(IsBeatableWithout(ctx->playthroughLocations[i][j], true))) { + itemLoc->SetWothCandidate(); + } + } } - } - ctx->playthroughBeatable = true; - logic->Reset(); - ReachabilitySearch(ctx->allLocations); + ctx->playthroughBeatable = true; + logic->Reset(); + ReachabilitySearch(ctx->allLocations); } -static bool FindIfBarren(Rando::ItemLocation* itemLoc, std::array NotBarren){ - std::set locAreas = itemLoc->GetAreas(); - for (auto locArea: locAreas){ - if (NotBarren[locArea]){ - return false; - } - } - return true; -} - -//Calculate barren locations and assign Barren Candidacy to all locations inside those areas -static void CalculateBarren() { - auto ctx = Rando::Context::GetInstance(); - std::array NotBarren = {}; //I would invert this but the "initialise all as true" syntax wasn't working - //Isolated Areas and Link's Pocket are never Hinted Barren - NotBarren[RA_NONE] = true; - NotBarren[RA_LINKS_POCKET] = true; - - for (RandomizerCheck loc : ctx->allLocations) { - Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc); +static bool FindIfBarren(Rando::ItemLocation* itemLoc, std::array NotBarren) { std::set locAreas = itemLoc->GetAreas(); - for (auto locArea: locAreas){ - // If a location has a major item or is a way of the hero location, it is not barren - if (NotBarren[locArea] == false && (itemLoc->GetPlacedItem().IsMajorItem() || itemLoc->IsWothCandidate())) { - NotBarren[locArea] = true; - } + for (auto locArea : locAreas) { + if (NotBarren[locArea]) { + return false; + } } - } - - for (RandomizerCheck loc : ctx->allLocations) { - Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc); - if (FindIfBarren(itemLoc, NotBarren)){ - itemLoc->SetBarrenCandidate(); - } - } + return true; } -//Will place things completely randomly, no logic checks are performed -static void FastFill(std::vector items, std::vector locations, bool endOnItemsEmpty = false) { - auto ctx = Rando::Context::GetInstance(); - //Loop until locations are empty, or also end if items are empty and the parameters specify to end then - while (!locations.empty() && (!endOnItemsEmpty || !items.empty())) { - if (items.empty() && !endOnItemsEmpty) { - items.push_back(GetJunkItem()); +// Calculate barren locations and assign Barren Candidacy to all locations inside those areas +static void CalculateBarren() { + auto ctx = Rando::Context::GetInstance(); + std::array + NotBarren = {}; // I would invert this but the "initialise all as true" syntax wasn't working + // Isolated Areas and Link's Pocket are never Hinted Barren + NotBarren[RA_NONE] = true; + NotBarren[RA_LINKS_POCKET] = true; + + for (RandomizerCheck loc : ctx->allLocations) { + Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc); + std::set locAreas = itemLoc->GetAreas(); + for (auto locArea : locAreas) { + // If a location has a major item or is a way of the hero location, it is not barren + if (NotBarren[locArea] == false && (itemLoc->GetPlacedItem().IsMajorItem() || itemLoc->IsWothCandidate())) { + NotBarren[locArea] = true; + } + } } - RandomizerCheck loc = RandomElement(locations, true); - ctx->GetItemLocation(loc)->SetAsHintable(); - ctx->PlaceItemInLocation(loc, RandomElement(items, true)); - } + for (RandomizerCheck loc : ctx->allLocations) { + Rando::ItemLocation* itemLoc = ctx->GetItemLocation(loc); + if (FindIfBarren(itemLoc, NotBarren)) { + itemLoc->SetBarrenCandidate(); + } + } +} + +// Will place things completely randomly, no logic checks are performed +static void FastFill(std::vector items, std::vector locations, + bool endOnItemsEmpty = false) { + auto ctx = Rando::Context::GetInstance(); + // Loop until locations are empty, or also end if items are empty and the parameters specify to end then + while (!locations.empty() && (!endOnItemsEmpty || !items.empty())) { + if (items.empty() && !endOnItemsEmpty) { + items.push_back(GetJunkItem()); + } + + RandomizerCheck loc = RandomElement(locations, true); + ctx->GetItemLocation(loc)->SetAsHintable(); + ctx->PlaceItemInLocation(loc, RandomElement(items, true)); + } } /* @@ -857,7 +906,7 @@ static void AssumedFill(const std::vector& items, const std::vect // reset any locations that got an item for (RandomizerCheck loc : attemptedLocations) { ctx->GetItemLocation(loc)->SetPlacedItem(RG_NONE); - //itemsPlaced--; + // itemsPlaced--; } attemptedLocations.clear(); @@ -885,7 +934,7 @@ static void AssumedFill(const std::vector& items, const std::vect CheckBeatable(); if (ctx->playthroughBeatable) { SPDLOG_DEBUG("Game beatable, now placing items randomly. " + std::to_string(itemsToPlace.size()) + - " major items remaining.\n\n"); + " major items remaining.\n\n"); FastFill(itemsToPlace, GetEmptyLocations(allowedLocations), true); return; } @@ -894,121 +943,135 @@ static void AssumedFill(const std::vector& items, const std::vect } while (unsuccessfulPlacement); } -//This function will specifically randomize dungeon rewards for the End of Dungeons -//setting, or randomize one dungeon reward to Link's Pocket if that setting is on +// This function will specifically randomize dungeon rewards for the End of Dungeons +// setting, or randomize one dungeon reward to Link's Pocket if that setting is on static void RandomizeDungeonRewards() { - auto ctx = Rando::Context::GetInstance(); - //quest item bit mask of each stone/medallion for the savefile - // static constexpr std::array bitMaskTable = { - // 0x00040000, //Kokiri Emerald - // 0x00080000, //Goron Ruby - // 0x00100000, //Zora Sapphire - // 0x00000001, //Forest Medallion - // 0x00000002, //Fire Medallion - // 0x00000004, //Water Medallion - // 0x00000008, //Spirit Medallion - // 0x00000010, //Shadow Medallion - // 0x00000020, //Light Medallion - // }; - int baseOffset = Rando::StaticData::RetrieveItem(RG_KOKIRI_EMERALD).GetItemID(); + auto ctx = Rando::Context::GetInstance(); + // quest item bit mask of each stone/medallion for the savefile + // static constexpr std::array bitMaskTable = { + // 0x00040000, //Kokiri Emerald + // 0x00080000, //Goron Ruby + // 0x00100000, //Zora Sapphire + // 0x00000001, //Forest Medallion + // 0x00000002, //Fire Medallion + // 0x00000004, //Water Medallion + // 0x00000008, //Spirit Medallion + // 0x00000010, //Shadow Medallion + // 0x00000020, //Light Medallion + // }; + 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) || 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;}); + // End of Dungeons includes Link's Pocket + 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 (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(); - } - 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); + 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(); + } + 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 + std::vector rewards = FilterFromPool(ItemPool, [](const auto i) { + return Rando::StaticData::RetrieveItem(i).GetItemType() == ITEMTYPE_DUNGEONREWARD; + }); + // If there are no remaining stones/medallions, then Link's pocket won't get one + if (rewards.empty()) { + ctx->PlaceItemInLocation(RC_LINKS_POCKET, RG_GREEN_RUPEE); + return; + } + RandomizerGet startingReward = RandomElement(rewards, true); + + // LinksPocketRewardBitMask = bitMaskTable[Rando::StaticData::RetrieveItem(startingReward).GetItemID() - + // baseOffset]; + ctx->PlaceItemInLocation(RC_LINKS_POCKET, startingReward); + // erase the stone/medallion from the Item Pool + FilterAndEraseFromPool(ItemPool, [startingReward](const RandomizerGet i) { return i == startingReward; }); } - } else if (ctx->GetOption(RSK_LINKS_POCKET).Is(RO_LINKS_POCKET_DUNGEON_REWARD)) { - //get 1 stone/medallion - std::vector rewards = FilterFromPool( - ItemPool, [](const auto i) { return Rando::StaticData::RetrieveItem(i).GetItemType() == ITEMTYPE_DUNGEONREWARD; }); - // If there are no remaining stones/medallions, then Link's pocket won't get one - if (rewards.empty()) { - ctx->PlaceItemInLocation(RC_LINKS_POCKET, RG_GREEN_RUPEE); - return; - } - RandomizerGet startingReward = RandomElement(rewards, true); - - //LinksPocketRewardBitMask = bitMaskTable[Rando::StaticData::RetrieveItem(startingReward).GetItemID() - baseOffset]; - ctx->PlaceItemInLocation(RC_LINKS_POCKET, startingReward); - //erase the stone/medallion from the Item Pool - FilterAndEraseFromPool(ItemPool, [startingReward](const RandomizerGet i) {return i == startingReward;}); - } } -//Fills any locations excluded by the player with junk items so that advancement items -//can't be placed there. +// Fills any locations excluded by the player with junk items so that advancement items +// can't be placed there. static void FillExcludedLocations() { - auto ctx = Rando::Context::GetInstance(); - //Only fill in excluded locations that don't already have something and are forbidden - std::vector excludedLocations = FilterFromPool(ctx->allLocations, [ctx](const auto loc){ - return ctx->GetItemLocation(loc)->IsExcluded(); - }); + auto ctx = Rando::Context::GetInstance(); + // Only fill in excluded locations that don't already have something and are forbidden + std::vector excludedLocations = + FilterFromPool(ctx->allLocations, [ctx](const auto loc) { return ctx->GetItemLocation(loc)->IsExcluded(); }); - for (RandomizerCheck loc : excludedLocations) { - PlaceJunkInExcludedLocation(loc); - } + for (RandomizerCheck loc : excludedLocations) { + PlaceJunkInExcludedLocation(loc); + } } -//Function to handle the Own Dungeon setting +// Function to handle the Own Dungeon setting static void RandomizeOwnDungeon(const Rando::DungeonInfo* dungeon) { - auto ctx = Rando::Context::GetInstance(); - std::vector dungeonItems; + auto ctx = Rando::Context::GetInstance(); + std::vector dungeonItems; - // Search and filter for locations that match the hint region of the dungeon - // This accounts for boss room shuffle so that own dungeon items can be placed - // in the shuffled boss room - std::vector dungeonLocations = FilterFromPool(ctx->allLocations, [dungeon, ctx](const auto loc) { - return ctx->GetItemLocation(loc)->GetAreas().contains(dungeon->GetArea()); - }); + // Search and filter for locations that match the hint region of the dungeon + // This accounts for boss room shuffle so that own dungeon items can be placed + // in the shuffled boss room + std::vector dungeonLocations = FilterFromPool(ctx->allLocations, [dungeon, ctx](const auto loc) { + return ctx->GetItemLocation(loc)->GetAreas().contains(dungeon->GetArea()); + }); - //filter out locations that may be required to have songs placed at them - dungeonLocations = FilterFromPool(dungeonLocations, [ctx](const auto loc) { - if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_SONG_LOCATIONS)) { - return !(Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_SONG_LOCATION); + // filter out locations that may be required to have songs placed at them + dungeonLocations = FilterFromPool(dungeonLocations, [ctx](const auto loc) { + if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_SONG_LOCATIONS)) { + return !(Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_SONG_LOCATION); + } + if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_DUNGEON_REWARDS)) { + return !(Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_BOSS_HEART_OR_OTHER_REWARD || + loc == RC_SHEIK_IN_ICE_CAVERN || loc == RC_SONG_FROM_IMPA); + } + return true; + }); + + // Add specific items that need be randomized within this dungeon + if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) && dungeon->GetSmallKey() != RG_NONE) { + std::vector dungeonSmallKeys = + FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { + return (i == dungeon->GetSmallKey()) || (i == dungeon->GetKeyRing()); + }); + AddElementsToPool(dungeonItems, dungeonSmallKeys); } - if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_DUNGEON_REWARDS)) { - return !(Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_BOSS_HEART_OR_OTHER_REWARD || - loc == RC_SHEIK_IN_ICE_CAVERN || - loc == RC_SONG_FROM_IMPA); - } - return true; - }); - //Add specific items that need be randomized within this dungeon - if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) && dungeon->GetSmallKey() != RG_NONE) { - std::vector dungeonSmallKeys = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){ return (i == dungeon->GetSmallKey()) || (i == dungeon->GetKeyRing());}); - AddElementsToPool(dungeonItems, dungeonSmallKeys); - } - - if ((ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) && dungeon->GetBossKey() != RG_GANONS_CASTLE_BOSS_KEY) || - (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OWN_DUNGEON) && dungeon->GetBossKey() == RG_GANONS_CASTLE_BOSS_KEY)) { - auto dungeonBossKey = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){ return i == dungeon->GetBossKey();}); + if ((ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) && + dungeon->GetBossKey() != RG_GANONS_CASTLE_BOSS_KEY) || + (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OWN_DUNGEON) && + dungeon->GetBossKey() == RG_GANONS_CASTLE_BOSS_KEY)) { + auto dungeonBossKey = + FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { return i == dungeon->GetBossKey(); }); AddElementsToPool(dungeonItems, dungeonBossKey); - } + } - //randomize boss key and small keys together for even distribution - AssumedFill(dungeonItems, dungeonLocations); + // randomize boss key and small keys together for even distribution + AssumedFill(dungeonItems, dungeonLocations); - //randomize map and compass separately since they're not progressive - if (ctx->GetOption(RSK_SHUFFLE_MAPANDCOMPASS).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) && dungeon->GetMap() != RG_NONE && dungeon->GetCompass() != RG_NONE) { - auto dungeonMapAndCompass = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){ return i == dungeon->GetMap() || i == dungeon->GetCompass();}); - AssumedFill(dungeonMapAndCompass, dungeonLocations); - } + // randomize map and compass separately since they're not progressive + if (ctx->GetOption(RSK_SHUFFLE_MAPANDCOMPASS).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) && dungeon->GetMap() != RG_NONE && + dungeon->GetCompass() != RG_NONE) { + auto dungeonMapAndCompass = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { + return i == dungeon->GetMap() || i == dungeon->GetCompass(); + }); + AssumedFill(dungeonMapAndCompass, dungeonLocations); + } } /*Randomize items restricted to a certain set of locations. @@ -1020,353 +1083,373 @@ static void RandomizeOwnDungeon(const Rando::DungeonInfo* dungeon) { will be randomized together if they have the same setting. Maps and Compasses are randomized separately once the dungeon advancement items have all been placed.*/ static void RandomizeDungeonItems() { - auto ctx = Rando::Context::GetInstance(); + auto ctx = Rando::Context::GetInstance(); - //Get Any Dungeon and Overworld group locations - std::vector anyDungeonLocations = Rando::StaticData::GetAllDungeonLocations(); + // Get Any Dungeon and Overworld group locations + std::vector anyDungeonLocations = Rando::StaticData::GetAllDungeonLocations(); - //Create Any Dungeon and Overworld item pools - std::vector anyDungeonItems; - std::vector overworldItems; + // Create Any Dungeon and Overworld item pools + std::vector anyDungeonItems; + std::vector overworldItems; - for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { - if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON)) { - auto dungeonKeys = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){return (i == dungeon->GetSmallKey()) || (i == dungeon->GetKeyRing());}); - AddElementsToPool(anyDungeonItems, dungeonKeys); - } else if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { - auto dungeonKeys = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){return (i == dungeon->GetSmallKey()) || (i == dungeon->GetKeyRing());}); - AddElementsToPool(overworldItems, dungeonKeys); + for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { + if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON)) { + auto dungeonKeys = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { + return (i == dungeon->GetSmallKey()) || (i == dungeon->GetKeyRing()); + }); + AddElementsToPool(anyDungeonItems, dungeonKeys); + } else if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { + auto dungeonKeys = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { + return (i == dungeon->GetSmallKey()) || (i == dungeon->GetKeyRing()); + }); + AddElementsToPool(overworldItems, dungeonKeys); + } + + if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON) && + dungeon->GetBossKey() != RG_GANONS_CASTLE_BOSS_KEY) { + auto bossKey = FilterAndEraseFromPool( + ItemPool, [dungeon](const RandomizerGet i) { return i == dungeon->GetBossKey(); }); + AddElementsToPool(anyDungeonItems, bossKey); + } else if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD) && + dungeon->GetBossKey() != RG_GANONS_CASTLE_BOSS_KEY) { + auto bossKey = FilterAndEraseFromPool( + ItemPool, [dungeon](const RandomizerGet i) { return i == dungeon->GetBossKey(); }); + AddElementsToPool(overworldItems, bossKey); + } + + if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANY_DUNGEON)) { + auto ganonBossKey = + FilterAndEraseFromPool(ItemPool, [](const auto i) { return i == RG_GANONS_CASTLE_BOSS_KEY; }); + AddElementsToPool(anyDungeonItems, ganonBossKey); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OVERWORLD)) { + auto ganonBossKey = + FilterAndEraseFromPool(ItemPool, [](const auto i) { return i == RG_GANONS_CASTLE_BOSS_KEY; }); + AddElementsToPool(overworldItems, ganonBossKey); + } } - if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON) && dungeon->GetBossKey() != RG_GANONS_CASTLE_BOSS_KEY) { - auto bossKey = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){return i == dungeon->GetBossKey();}); - AddElementsToPool(anyDungeonItems, bossKey); - } else if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD) && dungeon->GetBossKey() != RG_GANONS_CASTLE_BOSS_KEY) { - auto bossKey = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){return i == dungeon->GetBossKey();}); - AddElementsToPool(overworldItems, bossKey); + if (ctx->GetOption(RSK_GERUDO_KEYS).Is(RO_GERUDO_KEYS_ANY_DUNGEON)) { + auto gerudoKeys = FilterAndEraseFromPool(ItemPool, [](const auto i) { + return i == RG_GERUDO_FORTRESS_SMALL_KEY || i == RG_GERUDO_FORTRESS_KEY_RING; + }); + AddElementsToPool(anyDungeonItems, gerudoKeys); + } else if (ctx->GetOption(RSK_GERUDO_KEYS).Is(RO_GERUDO_KEYS_OVERWORLD)) { + auto gerudoKeys = FilterAndEraseFromPool(ItemPool, [](const auto i) { + return i == RG_GERUDO_FORTRESS_SMALL_KEY || i == RG_GERUDO_FORTRESS_KEY_RING; + }); + AddElementsToPool(overworldItems, gerudoKeys); } - if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANY_DUNGEON)) { - auto ganonBossKey = FilterAndEraseFromPool(ItemPool, [](const auto i){return i == RG_GANONS_CASTLE_BOSS_KEY;}); - AddElementsToPool(anyDungeonItems, ganonBossKey); - } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OVERWORLD)) { - auto ganonBossKey = FilterAndEraseFromPool(ItemPool, [](const auto i) { return i == RG_GANONS_CASTLE_BOSS_KEY; }); - AddElementsToPool(overworldItems, ganonBossKey); + if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_ANY_DUNGEON)) { + auto rewards = FilterAndEraseFromPool(ItemPool, [](const auto i) { + return Rando::StaticData::RetrieveItem(i).GetItemType() == ITEMTYPE_DUNGEONREWARD; + }); + AddElementsToPool(anyDungeonItems, rewards); + } else if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_OVERWORLD)) { + auto rewards = FilterAndEraseFromPool(ItemPool, [](const auto i) { + return Rando::StaticData::RetrieveItem(i).GetItemType() == ITEMTYPE_DUNGEONREWARD; + }); + AddElementsToPool(overworldItems, rewards); } - } - if (ctx->GetOption(RSK_GERUDO_KEYS).Is(RO_GERUDO_KEYS_ANY_DUNGEON)) { - auto gerudoKeys = FilterAndEraseFromPool(ItemPool, [](const auto i) { return i == RG_GERUDO_FORTRESS_SMALL_KEY || i == RG_GERUDO_FORTRESS_KEY_RING; }); - AddElementsToPool(anyDungeonItems, gerudoKeys); - } else if (ctx->GetOption(RSK_GERUDO_KEYS).Is(RO_GERUDO_KEYS_OVERWORLD)) { - auto gerudoKeys = FilterAndEraseFromPool(ItemPool, [](const auto i) { return i == RG_GERUDO_FORTRESS_SMALL_KEY || i == RG_GERUDO_FORTRESS_KEY_RING; }); - AddElementsToPool(overworldItems, gerudoKeys); - } + // Randomize Any Dungeon and Overworld pools + AssumedFill(anyDungeonItems, anyDungeonLocations, true); + AssumedFill(overworldItems, ctx->overworldLocations, true); - if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_ANY_DUNGEON)) { - auto rewards = FilterAndEraseFromPool( - ItemPool, [](const auto i) { return Rando::StaticData::RetrieveItem(i).GetItemType() == ITEMTYPE_DUNGEONREWARD; }); - AddElementsToPool(anyDungeonItems, rewards); - } else if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_OVERWORLD)) { - auto rewards = FilterAndEraseFromPool( - ItemPool, [](const auto i) { return Rando::StaticData::RetrieveItem(i).GetItemType() == ITEMTYPE_DUNGEONREWARD; }); - AddElementsToPool(overworldItems, rewards); - } - - //Randomize Any Dungeon and Overworld pools - AssumedFill(anyDungeonItems, anyDungeonLocations, true); - AssumedFill(overworldItems, ctx->overworldLocations, true); - - //Randomize maps and compasses after since they're not advancement items - for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { - if (ctx->GetOption(RSK_SHUFFLE_MAPANDCOMPASS).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON)) { - auto mapAndCompassItems = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){return i == dungeon->GetMap() || i == dungeon->GetCompass();}); - 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, ctx->overworldLocations, true); + // Randomize maps and compasses after since they're not advancement items + for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { + if (ctx->GetOption(RSK_SHUFFLE_MAPANDCOMPASS).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON)) { + auto mapAndCompassItems = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { + return i == dungeon->GetMap() || i == dungeon->GetCompass(); + }); + 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, ctx->overworldLocations, true); + } } - } } static void RandomizeLinksPocket() { - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_LINKS_POCKET).Is(RO_LINKS_POCKET_ADVANCEMENT)) { - //Get all the advancement items don't include tokens - std::vector advancementItems = FilterAndEraseFromPool(ItemPool, [](const auto i) { - return Rando::StaticData::RetrieveItem(i).IsAdvancement() && Rando::StaticData::RetrieveItem(i).GetItemType() != ITEMTYPE_TOKEN; - }); - //select a random one - RandomizerGet startingItem = RandomElement(advancementItems, true); - //add the others back - AddElementsToPool(ItemPool, advancementItems); + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_LINKS_POCKET).Is(RO_LINKS_POCKET_ADVANCEMENT)) { + // Get all the advancement items don't include tokens + std::vector advancementItems = FilterAndEraseFromPool(ItemPool, [](const auto i) { + return Rando::StaticData::RetrieveItem(i).IsAdvancement() && + Rando::StaticData::RetrieveItem(i).GetItemType() != ITEMTYPE_TOKEN; + }); + // select a random one + RandomizerGet startingItem = RandomElement(advancementItems, true); + // add the others back + AddElementsToPool(ItemPool, advancementItems); - ctx->PlaceItemInLocation(RC_LINKS_POCKET, startingItem); - } else if (ctx->GetOption(RSK_LINKS_POCKET).Is(RO_LINKS_POCKET_NOTHING)) { - ctx->PlaceItemInLocation(RC_LINKS_POCKET, RG_GREEN_RUPEE); - } + ctx->PlaceItemInLocation(RC_LINKS_POCKET, startingItem); + } else if (ctx->GetOption(RSK_LINKS_POCKET).Is(RO_LINKS_POCKET_NOTHING)) { + ctx->PlaceItemInLocation(RC_LINKS_POCKET, RG_GREEN_RUPEE); + } } void VanillaFill() { - auto ctx = Rando::Context::GetInstance(); - //Perform minimum needed initialization - RegionTable_Init(); - ctx->GenerateLocationPool(); - GenerateItemPool(); - GenerateStartingInventory(); - //Place vanilla item in each location - RandomizeDungeonRewards(); - for (RandomizerCheck loc : ctx->allLocations) { - ctx->GetItemLocation(loc)->PlaceVanillaItem(); - } - //If necessary, handle ER stuff - if (ctx->GetOption(RSK_SHUFFLE_ENTRANCES)) { - SPDLOG_INFO("Shuffling Entrances..."); - ctx->GetEntranceShuffler()->ShuffleAllEntrances(); - SPDLOG_INFO("Shuffling Entrances Done"); - } - // Populate the playthrough for entrances so they are placed in the spoiler log - GeneratePlaythrough(); - //Finish up - ctx->CreateItemOverrides(); - ctx->GetEntranceShuffler()->CreateEntranceOverrides(); - CreateWarpSongTexts(); + auto ctx = Rando::Context::GetInstance(); + // Perform minimum needed initialization + RegionTable_Init(); + ctx->GenerateLocationPool(); + GenerateItemPool(); + GenerateStartingInventory(); + // Place vanilla item in each location + RandomizeDungeonRewards(); + for (RandomizerCheck loc : ctx->allLocations) { + ctx->GetItemLocation(loc)->PlaceVanillaItem(); + } + // If necessary, handle ER stuff + if (ctx->GetOption(RSK_SHUFFLE_ENTRANCES)) { + SPDLOG_INFO("Shuffling Entrances..."); + ctx->GetEntranceShuffler()->ShuffleAllEntrances(); + SPDLOG_INFO("Shuffling Entrances Done"); + } + // Populate the playthrough for entrances so they are placed in the spoiler log + GeneratePlaythrough(); + // Finish up + ctx->CreateItemOverrides(); + ctx->GetEntranceShuffler()->CreateEntranceOverrides(); + CreateWarpSongTexts(); } void ClearProgress() { } int Fill() { - auto ctx = Rando::Context::GetInstance(); - int retries = 0; - SPDLOG_INFO("Starting seed generation..."); - while(retries < 5) { - SPDLOG_INFO("Attempt {}...", retries + 1); - placementFailure = false; - //showItemProgress = false; - ctx->playthroughLocations.clear(); - ctx->GetEntranceShuffler()->playthroughEntrances.clear(); - RegionTable_Init(); //Reset the world graph to intialize the proper locations - ctx->ItemReset(); //Reset shops incase of shopsanity random - ctx->GenerateLocationPool(); - GenerateItemPool(); - GenerateStartingInventory(); - RemoveStartingItemsFromPool(); - FillExcludedLocations(); + auto ctx = Rando::Context::GetInstance(); + int retries = 0; + SPDLOG_INFO("Starting seed generation..."); + while (retries < 5) { + SPDLOG_INFO("Attempt {}...", retries + 1); + placementFailure = false; + // showItemProgress = false; + ctx->playthroughLocations.clear(); + ctx->GetEntranceShuffler()->playthroughEntrances.clear(); + RegionTable_Init(); // Reset the world graph to intialize the proper locations + ctx->ItemReset(); // Reset shops incase of shopsanity random + ctx->GenerateLocationPool(); + GenerateItemPool(); + GenerateStartingInventory(); + RemoveStartingItemsFromPool(); + FillExcludedLocations(); - //Temporarily add shop items to the ItemPool so that entrance randomization - //can validate the world using deku/hylian shields - StartPerformanceTimer(PT_ENTRANCE_SHUFFLE); - AddElementsToPool(ItemPool, GetMinVanillaShopItems(8)); //assume worst case shopsanity 7 - if (ctx->GetOption(RSK_SHUFFLE_ENTRANCES)) { - SPDLOG_INFO("Shuffling Entrances..."); - if (ctx->GetEntranceShuffler()->ShuffleAllEntrances() == ENTRANCE_SHUFFLE_FAILURE) { + // Temporarily add shop items to the ItemPool so that entrance randomization + // can validate the world using deku/hylian shields + StartPerformanceTimer(PT_ENTRANCE_SHUFFLE); + AddElementsToPool(ItemPool, GetMinVanillaShopItems(8)); // assume worst case shopsanity 7 + if (ctx->GetOption(RSK_SHUFFLE_ENTRANCES)) { + SPDLOG_INFO("Shuffling Entrances..."); + if (ctx->GetEntranceShuffler()->ShuffleAllEntrances() == ENTRANCE_SHUFFLE_FAILURE) { + retries++; + ClearProgress(); + continue; + } + SPDLOG_INFO("Shuffling Entrances Done"); + } + SetAreas(); + // erase temporary shop items + FilterAndEraseFromPool(ItemPool, [](const auto item) { + return Rando::StaticData::RetrieveItem(item).GetItemType() == ITEMTYPE_SHOP; + }); + StopPerformanceTimer(PT_ENTRANCE_SHUFFLE); + + // ctx->showItemProgress = true; + // Place shop items first, since a buy shield is needed to place a dungeon reward on Gohma due to access + + StartPerformanceTimer(PT_SHOPSANITY); + if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF)) { + SPDLOG_INFO("Placing Vanilla Shop Items..."); + PlaceVanillaShopItems(); // Place vanilla shop items in vanilla location + } else { + SPDLOG_INFO("Shuffling Shop Items"); + int total_replaced = 0; + if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_RANDOM) || + ctx->GetOption(RSK_SHOPSANITY_COUNT).IsNot(RO_SHOPSANITY_COUNT_ZERO_ITEMS)) { // Shopsanity 1-7, random + /* + Indices from OoTR. So shopsanity one will overwrite 7, three will overwrite 7, 5, 8, etc. + 8 6 2 4 + 7 5 1 3 + */ + const std::array indices = { 7, 5, 8, 6, 3, 1, 4, 2 }; +// Overwrite appropriate number of shop items +#define LOCATIONS_PER_SHOP 8 + for (size_t i = 0; i < Rando::StaticData::GetShopLocations().size() / LOCATIONS_PER_SHOP; i++) { + int num_to_replace = + GetShopsanityReplaceAmount(); // 1-7 shop items will be overwritten, depending on settings + total_replaced += num_to_replace; + for (int j = 0; j < num_to_replace; j++) { + int itemindex = indices[j]; + RandomizerCheck rc = + Rando::StaticData::GetShopLocations()[i * LOCATIONS_PER_SHOP + itemindex - 1]; + Rando::ItemLocation* itemLoc = ctx->GetItemLocation(rc); + uint16_t shopsanityPrice = GetRandomPrice(Rando::StaticData::GetLocation(rc), shopsanityPrices); + itemLoc->SetCustomPrice(shopsanityPrice); + } + } +#undef LOCATIONS_PER_SHOP + } + // Get all locations and items that don't have a shopsanity price attached + std::vector shopLocations = {}; + // Get as many vanilla shop items as the total number of shop items minus the number of replaced items + // So shopsanity 0 will get all 64 vanilla items, shopsanity 4 will get 32, etc. + std::vector shopItems = GetMinVanillaShopItems(total_replaced); + + for (RandomizerCheck& randomizerCheck : Rando::StaticData::GetShopLocations()) { + if (!(ctx->GetItemLocation(randomizerCheck)->HasCustomPrice())) { + shopLocations.push_back(randomizerCheck); + } + } + // Place the shop items which will still be at shop locations + AssumedFill(shopItems, shopLocations); + } + + // Add prices to scrubs + auto scrubLoc = Rando::StaticData::GetScrubLocations(); + if (ctx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_ALL)) { + for (size_t i = 0; i < scrubLoc.size(); i++) { + ctx->GetItemLocation(scrubLoc[i]) + ->SetCustomPrice(GetRandomPrice(Rando::StaticData::GetLocation(scrubLoc[i]), scrubPrices)); + } + } else { + for (size_t i = 0; i < scrubLoc.size(); i++) { + ctx->GetItemLocation(scrubLoc[i]) + ->SetCustomPrice(Rando::StaticData::GetLocation(scrubLoc[i])->GetVanillaPrice()); + } + } + + // set merchant prices + if (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_BEANS_ONLY) || + ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL)) { + ctx->GetItemLocation(RC_ZR_MAGIC_BEAN_SALESMAN) + ->SetCustomPrice( + GetRandomPrice(Rando::StaticData::GetLocation(RC_ZR_MAGIC_BEAN_SALESMAN), merchantPrices)); + } else { + ctx->GetItemLocation(RC_ZR_MAGIC_BEAN_SALESMAN) + ->SetCustomPrice(Rando::StaticData::GetLocation(RC_ZR_MAGIC_BEAN_SALESMAN)->GetVanillaPrice()); + } + + auto merchantLoc = Rando::StaticData::GetMerchantLocations(); + + if (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) || + ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL)) { + for (size_t i = 0; i < merchantLoc.size(); i++) { + ctx->GetItemLocation(merchantLoc[i]) + ->SetCustomPrice(GetRandomPrice(Rando::StaticData::GetLocation(merchantLoc[i]), merchantPrices)); + } + } else { + for (size_t i = 0; i < merchantLoc.size(); i++) { + ctx->GetItemLocation(merchantLoc[i]) + ->SetCustomPrice(Rando::StaticData::GetLocation(merchantLoc[i])->GetVanillaPrice()); + } + } + StopPerformanceTimer(PT_SHOPSANITY); + + StartPerformanceTimer(PT_OWN_DUNGEON); + // Place dungeon rewards + SPDLOG_INFO("Shuffling and Placing Dungeon Items..."); + RandomizeDungeonRewards(); + + // Place dungeon items restricted to their Own Dungeon + for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { + RandomizeOwnDungeon(dungeon); + } + StopPerformanceTimer(PT_OWN_DUNGEON); + + StartPerformanceTimer(PT_LIMITED_CHECKS); + // Then Place songs if song shuffle is set to specific locations + if (ctx->GetOption(RSK_SHUFFLE_SONGS).IsNot(RO_SONG_SHUFFLE_ANYWHERE)) { + + // Get each song + std::vector songs = FilterAndEraseFromPool(ItemPool, [](const auto i) { + return Rando::StaticData::RetrieveItem(i).GetItemType() == ITEMTYPE_SONG; + }); + + // Get each song location + std::vector songLocations; + if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_SONG_LOCATIONS)) { + songLocations = FilterFromPool(ctx->allLocations, [](const auto loc) { + return Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_SONG_LOCATION; + }); + + } else if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_DUNGEON_REWARDS)) { + songLocations = FilterFromPool(ctx->allLocations, [](const auto loc) { + return Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_BOSS_HEART_OR_OTHER_REWARD || + loc == RC_SHEIK_IN_ICE_CAVERN || loc == RC_SONG_FROM_IMPA; + }); + } + + AssumedFill(songs, songLocations, true); + } + + // Then place dungeon items that are assigned to restrictive location pools + RandomizeDungeonItems(); + SPDLOG_INFO("Dungeon Items Done"); + + // Then place Link's Pocket Item if it has to be an advancement item + RandomizeLinksPocket(); + StopPerformanceTimer(PT_LIMITED_CHECKS); + + StartPerformanceTimer(PT_ADVANCEMENT_ITEMS); + SPDLOG_INFO("Shuffling Advancement Items"); + // Then place the rest of the advancement items + std::vector remainingAdvancementItems = FilterAndEraseFromPool( + ItemPool, [](const auto i) { return Rando::StaticData::RetrieveItem(i).IsAdvancement(); }); + AssumedFill(remainingAdvancementItems, ctx->allLocations, true); + StopPerformanceTimer(PT_ADVANCEMENT_ITEMS); + + StartPerformanceTimer(PT_REMAINING_ITEMS); + // Fast fill for the rest of the pool + SPDLOG_INFO("Shuffling Remaining Items"); + std::vector remainingPool = FilterAndEraseFromPool(ItemPool, [](const auto i) { return true; }); + FastFill(remainingPool, GetAllEmptyLocations(), false); + StopPerformanceTimer(PT_REMAINING_ITEMS); + + StartPerformanceTimer(PT_PLAYTHROUGH_GENERATION); + GeneratePlaythrough(); + StopPerformanceTimer(PT_PLAYTHROUGH_GENERATION); + // Successful placement, produced beatable result + if (ctx->playthroughBeatable && !placementFailure) { + + SPDLOG_INFO("Calculating Playthrough..."); + StartPerformanceTimer(PT_PARE_DOWN_PLAYTHROUGH); + PareDownPlaythrough(); + StopPerformanceTimer(PT_PARE_DOWN_PLAYTHROUGH); + + StartPerformanceTimer(PT_WOTH); + CalculateWotH(); + StopPerformanceTimer(PT_WOTH); + + StartPerformanceTimer(PT_FOOLISH); + CalculateBarren(); + StopPerformanceTimer(PT_FOOLISH); + SPDLOG_INFO("Calculating Playthrough Done"); + + StartPerformanceTimer(PT_OVERRIDES); + ctx->CreateItemOverrides(); + ctx->GetEntranceShuffler()->CreateEntranceOverrides(); + StopPerformanceTimer(PT_OVERRIDES); + + StartPerformanceTimer(PT_HINTS); + CreateAllHints(); + CreateWarpSongTexts(); + StopPerformanceTimer(PT_HINTS); + SPDLOG_DEBUG("Number of retries {}", retries); + return 1; + } + // Unsuccessful placement + if (retries < 4) { + SPDLOG_DEBUG("Failed to generate a beatable seed. Retrying..."); + Regions::ResetAllLocations(); + logic->Reset(); + ClearProgress(); + } retries++; - ClearProgress(); - continue; - } - SPDLOG_INFO("Shuffling Entrances Done"); } - SetAreas(); - //erase temporary shop items - FilterAndEraseFromPool(ItemPool, [](const auto item) { return Rando::StaticData::RetrieveItem(item).GetItemType() == ITEMTYPE_SHOP; }); - StopPerformanceTimer(PT_ENTRANCE_SHUFFLE); - - //ctx->showItemProgress = true; - //Place shop items first, since a buy shield is needed to place a dungeon reward on Gohma due to access - - StartPerformanceTimer(PT_SHOPSANITY); - if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF)) { - SPDLOG_INFO("Placing Vanilla Shop Items..."); - PlaceVanillaShopItems(); //Place vanilla shop items in vanilla location - } else { - SPDLOG_INFO("Shuffling Shop Items"); - int total_replaced = 0; - if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_RANDOM) || ctx->GetOption(RSK_SHOPSANITY_COUNT).IsNot(RO_SHOPSANITY_COUNT_ZERO_ITEMS)) { //Shopsanity 1-7, random - /* - Indices from OoTR. So shopsanity one will overwrite 7, three will overwrite 7, 5, 8, etc. - 8 6 2 4 - 7 5 1 3 - */ - const std::array indices = { 7, 5, 8, 6, 3, 1, 4, 2 }; - //Overwrite appropriate number of shop items - #define LOCATIONS_PER_SHOP 8 - for (size_t i = 0; i < Rando::StaticData::GetShopLocations().size() / LOCATIONS_PER_SHOP; i++) { - int num_to_replace = GetShopsanityReplaceAmount(); //1-7 shop items will be overwritten, depending on settings - total_replaced += num_to_replace; - for (int j = 0; j < num_to_replace; j++) { - int itemindex = indices[j]; - RandomizerCheck rc = Rando::StaticData::GetShopLocations()[i * LOCATIONS_PER_SHOP + itemindex - 1]; - Rando::ItemLocation* itemLoc = ctx->GetItemLocation(rc); - uint16_t shopsanityPrice = GetRandomPrice(Rando::StaticData::GetLocation(rc), shopsanityPrices); - itemLoc->SetCustomPrice(shopsanityPrice); - } - } - #undef LOCATIONS_PER_SHOP - } - //Get all locations and items that don't have a shopsanity price attached - std::vector shopLocations = {}; - //Get as many vanilla shop items as the total number of shop items minus the number of replaced items - //So shopsanity 0 will get all 64 vanilla items, shopsanity 4 will get 32, etc. - std::vector shopItems = GetMinVanillaShopItems(total_replaced); - - for (RandomizerCheck& randomizerCheck : Rando::StaticData::GetShopLocations()) { - if (!(ctx->GetItemLocation(randomizerCheck)->HasCustomPrice())) { - shopLocations.push_back(randomizerCheck); - } - } - //Place the shop items which will still be at shop locations - AssumedFill(shopItems, shopLocations); - } - - //Add prices to scrubs - auto scrubLoc = Rando::StaticData::GetScrubLocations(); - if (ctx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_ALL)) { - for (size_t i = 0; i < scrubLoc.size(); i++) { - ctx->GetItemLocation(scrubLoc[i])->SetCustomPrice( - GetRandomPrice(Rando::StaticData::GetLocation(scrubLoc[i]), scrubPrices) - ); - } - } else { - for (size_t i = 0; i < scrubLoc.size(); i++) { - ctx->GetItemLocation(scrubLoc[i])->SetCustomPrice( - Rando::StaticData::GetLocation(scrubLoc[i])->GetVanillaPrice() - ); - } - } - - //set merchant prices - if (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_BEANS_ONLY) || - ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL)){ - ctx->GetItemLocation(RC_ZR_MAGIC_BEAN_SALESMAN)->SetCustomPrice( - GetRandomPrice(Rando::StaticData::GetLocation(RC_ZR_MAGIC_BEAN_SALESMAN), merchantPrices) - ); - } else { - ctx->GetItemLocation(RC_ZR_MAGIC_BEAN_SALESMAN)->SetCustomPrice( - Rando::StaticData::GetLocation(RC_ZR_MAGIC_BEAN_SALESMAN)->GetVanillaPrice() - ); - } - - auto merchantLoc = Rando::StaticData::GetMerchantLocations(); - - if (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) || - ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL)){ - for (size_t i = 0; i < merchantLoc.size(); i++) { - ctx->GetItemLocation(merchantLoc[i])->SetCustomPrice( - GetRandomPrice(Rando::StaticData::GetLocation(merchantLoc[i]), merchantPrices) - ); - } - } else { - for (size_t i = 0; i < merchantLoc.size(); i++) { - ctx->GetItemLocation(merchantLoc[i])->SetCustomPrice( - Rando::StaticData::GetLocation(merchantLoc[i])->GetVanillaPrice() - ); - } - } - StopPerformanceTimer(PT_SHOPSANITY); - - StartPerformanceTimer(PT_OWN_DUNGEON); - //Place dungeon rewards - SPDLOG_INFO("Shuffling and Placing Dungeon Items..."); - RandomizeDungeonRewards(); - - //Place dungeon items restricted to their Own Dungeon - for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { - RandomizeOwnDungeon(dungeon); - } - StopPerformanceTimer(PT_OWN_DUNGEON); - - StartPerformanceTimer(PT_LIMITED_CHECKS); - //Then Place songs if song shuffle is set to specific locations - if (ctx->GetOption(RSK_SHUFFLE_SONGS).IsNot(RO_SONG_SHUFFLE_ANYWHERE)) { - - //Get each song - std::vector songs = FilterAndEraseFromPool( - ItemPool, [](const auto i) { return Rando::StaticData::RetrieveItem(i).GetItemType() == ITEMTYPE_SONG; }); - - //Get each song location - std::vector songLocations; - if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_SONG_LOCATIONS)) { - songLocations = FilterFromPool( - ctx->allLocations, [](const auto loc) { return Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_SONG_LOCATION; }); - - } else if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_DUNGEON_REWARDS)) { - songLocations = FilterFromPool(ctx->allLocations, [](const auto loc) { - return Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_BOSS_HEART_OR_OTHER_REWARD || - loc == RC_SHEIK_IN_ICE_CAVERN || - loc == RC_SONG_FROM_IMPA; - }); - } - - AssumedFill(songs, songLocations, true); - } - - //Then place dungeon items that are assigned to restrictive location pools - RandomizeDungeonItems(); - SPDLOG_INFO("Dungeon Items Done"); - - //Then place Link's Pocket Item if it has to be an advancement item - RandomizeLinksPocket(); - StopPerformanceTimer(PT_LIMITED_CHECKS); - - - StartPerformanceTimer(PT_ADVANCEMENT_ITEMS); - SPDLOG_INFO("Shuffling Advancement Items"); - //Then place the rest of the advancement items - std::vector remainingAdvancementItems = - FilterAndEraseFromPool(ItemPool, [](const auto i) { return Rando::StaticData::RetrieveItem(i).IsAdvancement(); }); - AssumedFill(remainingAdvancementItems, ctx->allLocations, true); - StopPerformanceTimer(PT_ADVANCEMENT_ITEMS); - - StartPerformanceTimer(PT_REMAINING_ITEMS); - //Fast fill for the rest of the pool - SPDLOG_INFO("Shuffling Remaining Items"); - std::vector remainingPool = FilterAndEraseFromPool(ItemPool, [](const auto i) { return true; }); - FastFill(remainingPool, GetAllEmptyLocations(), false); - StopPerformanceTimer(PT_REMAINING_ITEMS); - - - StartPerformanceTimer(PT_PLAYTHROUGH_GENERATION); - GeneratePlaythrough(); - StopPerformanceTimer(PT_PLAYTHROUGH_GENERATION); - //Successful placement, produced beatable result - if(ctx->playthroughBeatable && !placementFailure) { - - SPDLOG_INFO("Calculating Playthrough..."); - StartPerformanceTimer(PT_PARE_DOWN_PLAYTHROUGH); - PareDownPlaythrough(); - StopPerformanceTimer(PT_PARE_DOWN_PLAYTHROUGH); - - StartPerformanceTimer(PT_WOTH); - CalculateWotH(); - StopPerformanceTimer(PT_WOTH); - - StartPerformanceTimer(PT_FOOLISH); - CalculateBarren(); - StopPerformanceTimer(PT_FOOLISH); - SPDLOG_INFO("Calculating Playthrough Done"); - - StartPerformanceTimer(PT_OVERRIDES); - ctx->CreateItemOverrides(); - ctx->GetEntranceShuffler()->CreateEntranceOverrides(); - StopPerformanceTimer(PT_OVERRIDES); - - StartPerformanceTimer(PT_HINTS); - CreateAllHints(); - CreateWarpSongTexts(); - StopPerformanceTimer(PT_HINTS); - SPDLOG_DEBUG("Number of retries {}", retries); - return 1; - } - //Unsuccessful placement - if(retries < 4) { - SPDLOG_DEBUG("Failed to generate a beatable seed. Retrying..."); - Regions::ResetAllLocations(); - logic->Reset(); - ClearProgress(); - } - retries++; - } - //All retries failed - return -1; + // All retries failed + return -1; } diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.hpp b/soh/soh/Enhancements/randomizer/3drando/fill.hpp index 106af7aab..bb013cc13 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.hpp @@ -34,6 +34,8 @@ struct GetAccessibleLocationsStruct { std::vector itemSphere; std::list entranceSphere; + bool calculatingAvailableChecks = false; + GetAccessibleLocationsStruct(int _maxGsCount){ regionPool = {RR_ROOT}; gsCount = 0; @@ -62,7 +64,7 @@ std::vector GetEmptyLocations(std::vector allo void ProcessRegion(Region* region, GetAccessibleLocationsStruct& gals, RandomizerGet ignore = RG_NONE, bool stopOnBeatable = false, bool addToPlaythrough = false); -std::vector ReachabilitySearch(const std::vector& allowedLocations, RandomizerGet ignore=RG_NONE); +std::vector ReachabilitySearch(const std::vector& allowedLocations, RandomizerGet ignore=RG_NONE, bool calculatingAvailableChecks=false); void GeneratePlaythrough(); diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp index 3081d4863..5d880f047 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list.cpp @@ -22,6 +22,7 @@ using namespace std::literals::string_literals; namespace Rando { void StaticData::HintTable_Init() { + // clang-format off /*-------------------------- | GENERAL TEXT | ---------------------------*/ @@ -46,12 +47,13 @@ void StaticData::HintTable_Init() { "Man erzählt sich, daß #[[2]]# #[[1]]# horte.", /*french*/ "Selon moi, #[[2]]# recèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ "Según dicen, #[[2]]# acapara #[[1]]#." + // clang-format on HintTable_Init_Item(); HintTable_Init_Exclude_Overworld(); HintTable_Init_Exclude_Dungeon(); - + // clang-format off /*-------------------------- | SOMETIMES HINT TEXT | ---------------------------*/ @@ -2279,15 +2281,15 @@ void StaticData::HintTable_Init() { {QM_RED, QM_GREEN, QM_GREEN, QM_GREEN}, {}, TEXTBOX_TYPE_WOODEN)); hintTextTable[RHT_HBA_HINT_NOT_ON_HORSE] = HintText(CustomMessage("Hey, rookie!&Come back on your #horse# and take on then #Horseback Archery# challenge!^" - "Impress me with a high score of 1000 to win a #[[1]]# or score 1500 for my #[[2]]#!", + "Impress me with a high score of 1000 to win a #[[1]]# or score 1500 for #[[2]]#!", {QM_RED, QM_RED, QM_GREEN, QM_GREEN})); hintTextTable[RHT_HBA_HINT_INITIAL] = HintText(CustomMessage("Hey, rookie!&Want to take on the #Horseback Archery# challenge?^" - "Impress me with a high score of 1000 to win a #[[1]]# or score 1500 for my #[[2]]#!\x0B", + "Impress me with a high score of 1000 to win a #[[1]]# or score 1500 for #[[2]]#!\x0B", {QM_RED, QM_GREEN, QM_GREEN})); hintTextTable[RHT_HBA_HINT_HAVE_1000] = HintText(CustomMessage("Hey, newcomer!&Want to take on the #Horseback Archery# challenge?^" - "Prove yourself to be a horsemaster by scoring 1500 points to win my #[[1]]#!\x0B", + "Prove yourself to be a horsemaster by scoring 1500 points to win #[[2]]#!\x0B", {QM_RED, QM_GREEN})); hintTextTable[RHT_MALON_HINT_HOW_IS_EPONA] = HintText(CustomMessage("@! You should come back with Epona and try to beat my time on the #Obstacle Course#!^" @@ -2418,5 +2420,6 @@ void StaticData::HintTable_Init() { /*german*/ "&Man kann darauf die Worte&%r\"Master Quest\"%w entziffern...", /*french*/ "&Étrange... les mots %r\"Master&Quest\"%w sont gravés dessus.")); + // clang-format on } -} +} // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index ed447fe30..1347945ec 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -4,10 +4,12 @@ namespace Rando { void StaticData::HintTable_Init_Exclude_Dungeon() { - /*-------------------------- - | DEKU TREE | - ---------------------------*/ - hintTextTable[RHT_DEKU_TREE_MAP_CHEST] = HintText(CustomMessage("They say that in the #center of the Deku Tree# lies #[[1]]#.", + // clang-format off + + /*-------------------------- + | DEKU TREE | + ---------------------------*/ + hintTextTable[RHT_DEKU_TREE_MAP_CHEST] = HintText(CustomMessage("They say that in the #center of the Deku Tree# lies #[[1]]#.", /*german*/ "Man erzählt sich, daß im #Zentrum des Deku-Baums# #[[1]]# läge.", /*french*/ "Selon moi, #le centre de l'Arbre Mojo# recèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, al #centro del Gran Árbol Deku# yace #[[1]]#. @@ -118,13 +120,21 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { // /*spanish*/ Según dicen, un #deku del Gran Árbol Deku# vende #[[1]]#. hintTextTable[RHT_DEKU_TREE_HEART] = HintText(CustomMessage("They say that a #heart in the Deku Tree# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Herz im Deku-Baum# #[[1]]# verstecke.", /*french*/ "Selon moi, un #coeur dans l'Arbre Mojo# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_DEKU_TREE_GRASS] = HintText(CustomMessage("They say that some #grass in the Deku Tree# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_CRATE_DEKU_TREE] = HintText(CustomMessage("They say that a #crate in the Deku Tree# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans l'Arbre Mojo# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | DODONGOS CAVERN | ---------------------------*/ -hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("They say that #above King Dodongo# lies #[[1]]#.", + hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("They say that #above King Dodongo# lies #[[1]]#.", /*german*/ "Man erzählt sich, daß #auf König Dodongo# #[[1]]# läge.", /*french*/ "Selon moi, #par dessus le Roi Dodongo# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #sobre el Rey Dodongo# yace #[[1]]#. @@ -280,21 +290,28 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The // /*spanish*/ Según dicen, un #deku custodiado por Lizalfos# vende #[[1]]#. hintTextTable[RHT_POT_DODONGOS_CAVERN] = HintText(CustomMessage("They say that a #pot in Dodongo's Cavern# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in Dodongos Höhle# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans la Caverne Dodongo# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_DODONGOS_CAVERN_HEART] = HintText(CustomMessage("They say that a #heart in Dodongo's Cavern# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Herz in Dodongos Höhle# #[[1]]# verstecke.", /*french*/ "Selon moi, un #coeur# dans la Caverne Dodongo# cache #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY] = HintText(CustomMessage("They say that #playing a tune for an odd stone in Dodongo's Cavern# reveals #[[1]]#.", - /*german*/ "!!!", + /*german*/ "Man erzählt sich, daß das #Spielen einer Melodie für einen seltsamen Stein in Dodongos Höhle# #[[1]]# enthülle.", /*french*/ "Selon moi, #jouer un air pour une pierre étrange dans la Caverne Dodongo# révèle #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG] = HintText(CustomMessage("They say that #playing a stormy tune for an odd stone in Dodongo's Cavern# reveals #[[1]]#.", - /*german*/ "!!!", + /*german*/ "Man erzählt sich, daß das #Spielen einer stürmischen Melodie für einen seltsamen Stein in Dodongos Höhle# #[[1]]# enthülle.", /*french*/ "Selon moi, #jouer un air orageux pour une pierre étrange dans la Caverne Dodongo# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_DODONGOS_CAVERN_GRASS] = HintText(CustomMessage("They say that some #grass in Dodongo's Cavern# hides #[[1]]#.", + /*german*/ "!!!", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_CRATE_DODONGOS_CAVERN] = HintText(CustomMessage("They say that a #crate in Dodongo's Cavern# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans la Caverne Dodongo# contient #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- | JABU JABUS BELLY | @@ -444,22 +461,29 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The // /*spanish*/ Según dicen, un #deku dentro de cierta deidad# vende #[[1]]#. hintTextTable[RHT_POT_JABU_JABUS_BELLY] = HintText(CustomMessage("They say that a #pot in Jabu Jabu's Belly# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in Jabu-Jabus Bauch# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Ventre de Jabu-Jabu# contient #[[1]]#.", {QM_RED, QM_GREEN})); - hintTextTable[RHT_JABU_JABU_RUPEE] = HintText(CustomMessage("They say that #underwater in Jabu-Jabu's Belly# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß #unter Wasser in Jabu-Jabus Bauch# #[[1]]# läge.", /*french*/ "Selon moi, #[[1]]# se trouve #sous l'eau dans le Ventre de Jabu Jabu#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_JABU_JABU_HEART] = HintText(CustomMessage("They say that near a #central lift in Jabu-Jabu's Belly# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß sich #nahe des zentralen Lifts in Jabu-Jabus Bauch# #[[1]]# befände.", /*french*/ "Selon moi, près d'un #ascenceur central dans le Ventre de Jabu-Jabu# se trouve #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_JABU_JABUS_BELLY_GRASS] = HintText(CustomMessage("They say that some #grass in Jabu Jabu's Belly# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_CRATE_JABU_JABU] = HintText(CustomMessage("They say that a #crate in Jabu Jabu's Belly# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Ventre de Jabu-Jabu# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | FOREST TEMPLE | ---------------------------*/ - hintTextTable[RHT_FOREST_TEMPLE_FIRST_ROOM_CHEST] = HintText(CustomMessage("They say that a #tree in the Forest Temple# supports #[[1]]#.", + hintTextTable[RHT_FOREST_TEMPLE_FIRST_ROOM_CHEST] = HintText(CustomMessage("They say that a #tree in the Forest Temple# supports #[[1]]#.", /*german*/ "Man erzählt sich, daß ein #Baum im Waldtempel# #[[1]]# unterstütze.", /*french*/ "Selon moi, sur l'#arbre dans le Temple de la Forêt# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, sobre un #árbol del Templo del Bosque# yace #[[1]]#. @@ -679,17 +703,21 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The // /*spanish*/ Según dicen, #vaciar el pozo# del Templo del Bosque desvela una Skulltula que otorga #[[1]]#. hintTextTable[RHT_POT_FOREST_TEMPLE] = HintText(CustomMessage("They say that a #pot in Forest Temple# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase im Waldtempel# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Temple de la Fôret# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_FOREST_TEMPLE_HEART] = HintText(CustomMessage("They say that a #heart in the Forest Temple# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Herz im Waldtempel# #[[1]]# verstecke.", /*french*/ "Selon moi, un #coeur dans le Temple de la Fôret# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_FOREST_TEMPLE] = HintText(CustomMessage("They say that a #crate in Forest Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Temple de la Fôret# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | FIRE TEMPLE | ---------------------------*/ -hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They say that #near a dragon# is #[[1]]#.", + hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They say that #near a dragon# is #[[1]]#.", /*german*/ "Man erzählt sich, daß #nahe eines Drachens# #[[1]]# sei.", /*french*/ "Selon moi, #près d'un dragon# gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cerca de un dragón# yace #[[1]]#. @@ -875,11 +903,11 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa // /*spanish*/ Según dicen, una #Skulltula junto a un ardiente laberinto# otorga #[[1]]#. hintTextTable[RHT_POT_FIRE_TEMPLE] = HintText(CustomMessage("They say that a #pot in Fire Temple# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase im Feuertempel# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Temple du Feu# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_FIRE_TEMPLE_HEART] = HintText(CustomMessage("They say that a #heart in the Fire Temple# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Herz im Feuertempel# #[[1]]# verstecke.", /*french*/ "Selon moi, un #coeur dans le Temple du Feu# cache #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a hot arena# reveals #[[1]]#.", @@ -890,6 +918,10 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil derrière le trône d’un chevalier dans un volcan# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_FIRE_TEMPLE] = HintText(CustomMessage("They say that a #crate in Fire Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Temple du Feu# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | WATER TEMPLE | ---------------------------*/ @@ -1018,11 +1050,11 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa // /*spanish*/ Según dicen, una #Skulltula sobre un río# del Templo del Agua otorga #[[1]]#. hintTextTable[RHT_POT_WATER_TEMPLE] = HintText(CustomMessage("They say that a #pot in Water Temple# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase im Wassertempel# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Temple de l'Eau# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_WATER_TEMPLE_HEART] = HintText(CustomMessage("They say that in a #river in the Water Temple# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß in einem #Fluß im Wassertempel# #[[1]]# läge.", /*french*/ "Selon moi, une #rivière dans le Temple de l'Eau# cache #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun atop a small pillar before a duel with one's shadow# reveals #[[1]]#.", @@ -1037,6 +1069,10 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil avant un duel avec son ombre# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_WATER_TEMPLE] = HintText(CustomMessage("They say that a #crate in Water Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Temple de l'Eau# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | SPIRIT TEMPLE | ---------------------------*/ @@ -1271,7 +1307,7 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa // /*spanish*/ Según dicen, #sobre una plataforma de cristal# yace una Skulltula que otorga #[[1]]#. hintTextTable[RHT_POT_SPIRIT_TEMPLE] = HintText(CustomMessage("They say that a #pot in Spirit Temple# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase im Geistertempel# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Temple de l'Esprit# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_SPIRIT_TEMPLE_HEART] = HintText(CustomMessage("They say that on a #small platform# in the Spirit Temple lies #[[1]]#.", @@ -1282,10 +1318,14 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "", /*french*/ "Selon moi, protégé par un #cercle de flammes# dans le Temple de l'Esprit se trouve #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_SPIRIT_TEMPLE] = HintText(CustomMessage("They say that a #crate in Spirit Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Temple de l'Esprit# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | SHADOW TEMPLE | ---------------------------*/ -hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth# pierces a hall of faces to reveal #[[1]]#.", + hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth# pierces a hall of faces to reveal #[[1]]#.", /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# eine Halle der Gesichter durchdränge und #[[1]]# offenbaren würde.", /*french*/ "Selon moi, l'#oeil de vérité# voit dans les couloirs du Temple de l'Ombre #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# descubrirá un pasillo de facetas con #[[1]]#. @@ -1526,11 +1566,11 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th // /*spanish*/ Según dicen, una #Skulltula flotante# del Templo de las Sombras otorga #[[1]]#. hintTextTable[RHT_POT_SHADOW_TEMPLE] = HintText(CustomMessage("They say that a #pot in Shadow Temple# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase im Schattentempel# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Temple de l'Ombre# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_SHADOW_TEMPLE_HEART] = HintText(CustomMessage("They say that a #heart in the Shadow Temple# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Herz im Schattentempel# #[[1]]# verstecke.", /*french*/ "Selon moi, un #coeur dans le Temple de l'Ombre# cache #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY] = HintText(CustomMessage("They say that an #calling the rain for a sentry guarding a house of the dead# reveals #[[1]]#.", @@ -1545,6 +1585,10 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil près d’un coffre invisible gardé par les morts# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_SHADOW_TEMPLE] = HintText(CustomMessage("They say that a #crate in Shadow Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Temple de l'Ombre# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | BOTTOM OF THE WELL | ---------------------------*/ @@ -1664,29 +1708,33 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th // /*spanish*/ Según dicen, una #Skulltula encerrada en una cripta# del pozo otorga #[[1]]#. hintTextTable[RHT_POT_BOTTOM_OF_THE_WELL] = HintText(CustomMessage("They say that a #pot in Bottom of the Well# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase auf dem Grund des Brunnens# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Puits# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_BOTTOM_OF_THE_WELL_HEART] = HintText(CustomMessage("They say that a #heart within the well# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Herz im Brunnen# #[[1]]# verstecke.", /*french*/ "Selon moi, un #coeur dans le Puits# cache #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_BOTTOM_OF_THE_WELL_RUPEE] = HintText(CustomMessage("They say that a #hidden path through the floor# in the well leads to #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #versteckter Pfad durch den Grund# im Brunnen zu #[[1]]# führe.", /*french*/ "Selon moi, un #passage caché sous le sol# dans le puits mène à #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY] = HintText(CustomMessage("They say that an #calling the sun a dead end# within the well reveals #[[1]]#.", - /*german*/ "!!!", + /*german*/ "Man erzählt sich, daß das #Anrufen der Sonne in einer Sackgasse# innerhalb des Brunnens #[[1]]# enthülle.", /*french*/ "Selon moi, #appeler le soleil dans une impasse# à l’intérieur du puits révèle #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY] = HintText(CustomMessage("They say that an #calling the sun in an empty cell# within the well reveals #[[1]]#.", - /*german*/ "!!!", + /*german*/ "Man erzählt sich, daß das #Anrufen der Sonne in einer leeren Zelle# innerhalb des Brunnens #[[1]]# enthülle.", /*french*/ "Selon moi, #appeler le soleil dans une cellule vide# à l’intérieur du puits révèle #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY] = HintText(CustomMessage("They say that an #calling the sun a dead end# within the well reveals #[[1]]#.", - /*german*/ "!!!", + /*german*/ "Man erzählt sich, daß das #Anrufen der Sonne in einer Sackgasse# innerhalb des Brunnens #[[1]]# enthülle.", /*french*/ "Selon moi, #appeler le soleil dans une impasse# à l’intérieur du puits révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_BOTTOM_OF_THE_WELL_GRASS] = HintText(CustomMessage("They say that some #grass in the Bottom of the Well# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | ICE CAVERN | @@ -1762,19 +1810,19 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th // /*spanish*/ Según dicen, una #Skulltula tras un ardiente hielo# otorga #[[1]]#. hintTextTable[RHT_POT_ICE_CAVERN] = HintText(CustomMessage("They say that a #pot in Ice Cavern# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in der Eiskaverne# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans la Caverne Polaire# contient #[[1]]#.", { QM_RED, QM_GREEN })); hintTextTable[RHT_ICE_CAVERN_HEART] = HintText(CustomMessage("They say that atop on a #frozen pillar# lies #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß auf einer #gefrorenen Säule# #[[1]]# läge.", /*french*/ "Selon moi, ", {QM_RED, QM_GREEN})); hintTextTable[RHT_ICE_CAVERN_RUPEE] = HintText(CustomMessage("They say that a #rupee in a frozen cavern# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Rubin in einer gefrorenen Kaverne# #[[1]]# verstecke.", /*french*/ "Selon moi, un #rubis dans la Caverne Polaire# cache #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_ICE_CAVERN_ENTRANCE_STORMS_FAIRY] = HintText(CustomMessage("They say that #calling the rain near the entrance to a frozen cave# reveals #[[1]]#.", - /*german*/ "!!!", + /*german*/ "Man erzählt sich, daß das #Anrufen des Regens in der Nähe des Eingangs zu einer gefrorenen Kaverne# #[[1]]# enthülle.", /*french*/ "Selon moi, #appeler la pluie près de l’entrée d’une grotte gelée# révèle #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #Skulltula tras un ardiente hielo# otorga #[[1]]#. @@ -1782,27 +1830,27 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th | Gerudo Training Ground | ---------------------------*/ hintTextTable[RHT_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST] = HintText(CustomMessage("They say that a #blinded eye in the Gerudo Training Ground# drops #[[1]]#.", - /*german*/ "Man erzählt sich, daß ein #erblindetes Auge in der Gerudo-Trainingsarena# #[[1]]# fallen ließe.", + /*german*/ "Man erzählt sich, daß ein #erblindetes Auge auf dem Gerudo-Trainingsgelände# #[[1]]# fallen ließe.", /*french*/ "Selon moi, l'#Oeil dans le Gymnase Gerudo# voit #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cegar un ojo en el Centro de Instrucción Gerudo# revela #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST] = HintText(CustomMessage("They say that a #blinded eye in the Gerudo Training Ground# drops #[[1]]#.", - /*german*/ "Man erzählt sich, daß ein #erblindetes Auge in der Gerudo-Trainingsarena# #[[1]]# fallen ließe.", + /*german*/ "Man erzählt sich, daß ein #erblindetes Auge auf dem Gerudo-Trainingsgelände# #[[1]]# fallen ließe.", /*french*/ "Selon moi, l'#Oeil dans le Gymnase Gerudo# voit #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #cegar un ojo en el Centro de Instrucción Gerudo# revela #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_STALFOS_CHEST] = HintText(CustomMessage("They say that #soldiers walking on shifting sands# in the Gerudo Training Ground guard #[[1]]#.", - /*german*/ "Man erzählt sich, daß #auf veränderlichen Sanden laufende Soldaten# in der Gerudo-Trainingsarena #[[1]]# bewachen würden.", + /*german*/ "Man erzählt sich, daß #auf veränderlichen Sanden laufende Soldaten# auf dem Gerudo-Trainingsgelände #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #squelettes# du Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #soldados en resbaladizas arenas# del Centro de Instrucción Gerudo protegen #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_BEAMOS_CHEST] = HintText(CustomMessage("They say that #reptilian warriors# in the Gerudo Training Ground protect #[[1]]#.", - /*german*/ "Man erzählt sich, daß #reptilienartige Krieger# in der Gerudo-Trainingsarena #[[1]]# schützen würden.", + /*german*/ "Man erzählt sich, daß #reptilienartige Krieger# auf dem Gerudo-Trainingsgelände #[[1]]# schützen würden.", /*french*/ "Selon moi, les #lézards# dans le Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #unos escamosos guerreros# del Centro de Instrucción Gerudo protegen #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth# in the Gerudo Training Ground reveals #[[1]]#.", - /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# in der Gerudo-Trainingsarena #[[1]]# enthülle.", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# auf dem Gerudo-Trainingsgelände #[[1]]# enthülle.", /*french*/ "Selon moi, #bien caché# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# en el Centro de Instrucción Gerudo revela #[[1]]#. @@ -1822,17 +1870,17 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th // /*spanish*/ Según dicen, el tercer premio de la #instrucción bandida# se trata de #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST] = HintText(CustomMessage("They say that the #Song of Time# in the Gerudo Training Ground leads to #[[1]]#.", - /*german*/ "Man erzählt sich, daß die #Hymne der Zeit# in der Gerudo-Trainingsarena zu #[[1]]# führe.", + /*german*/ "Man erzählt sich, daß die #Hymne der Zeit# auf dem Gerudo-Trainingsgelände zu #[[1]]# führe.", /*french*/ "Selon moi, le #chant du temps# révèle dans le Gymnase Gerudo #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #Canción del Tiempo# en el Centro de Instrucción Gerudo conduce a #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST] = HintText(CustomMessage("They say that the #Song of Time# in the Gerudo Training Ground leads to #[[1]]#.", - /*german*/ "Man erzählt sich, daß die #Hymne der Zeit# in der Gerudo-Trainingsarena zu #[[1]]# führe.", + /*german*/ "Man erzählt sich, daß die #Hymne der Zeit# auf dem Gerudo-Trainingsgelände zu #[[1]]# führe.", /*french*/ "Selon moi, le #chant du temps# révèle dans le Gymnase Gerudo #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #Canción del Tiempo# en el Centro de Instrucción Gerudo conduce a #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST] = HintText(CustomMessage("They say that #fiery foes# in the Gerudo Training Ground guard #[[1]]#.", - /*german*/ "Man erzählt sich, daß #feurige Feinde# in der Gerudo-Trainingsarena #[[1]]# bewachen würden.", + /*german*/ "Man erzählt sich, daß #feurige Feinde# auf dem Gerudo-Trainingsgelände #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #limaces de feu# du Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unos #flamígeros enemigos# del Centro de Instrucción Gerudo guardan #[[1]]#. @@ -1876,12 +1924,12 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th /*french*/ "Selon moi, #derrière un bloc argent# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #hazaña de fuerza# premia a las bandidas con #[[1]]#. - hintTextTable[RHT_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY] = HintText(CustomMessage("They say that #calling the rain near the entrance to the Gerudo Training Grounds# reveals #[[1]]#.", - /*german*/ "!!!", + hintTextTable[RHT_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY] = HintText(CustomMessage("They say that #calling the rain near the entrance to the Gerudo Training Ground# reveals #[[1]]#.", + /*german*/ "Man erzählt sich, daß das #Anrufen des Regens in der Nähe des Eingangs zum Gerudo-Trainingsgelände #[[1]]# enthülle.", /*french*/ "Selon moi, #appeler la pluie près de l’entrée du Gymnase Gerudo# révèle #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_GERUDO_TRAINING_GROUND_FREESTANDING_KEY] = HintText(CustomMessage("They say that the #Song of Time# in the Gerudo Training Ground leads to #[[1]]#.", - /*german*/ "Man erzählt sich, daß die #Hymne der Zeit# in der Gerudo-Trainingsarena zu #[[1]]# führe.", + /*german*/ "Man erzählt sich, daß die #Hymne der Zeit# auf dem Gerudo-Trainingsgelände zu #[[1]]# führe.", /*french*/ "Selon moi, le #chant du temps# révèle dans le Gymnase Gerudo #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, la #Canción del Tiempo# en el Centro de Instrucción Gerudo conduce a #[[1]]#. @@ -1896,7 +1944,7 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th // /*spanish*/ Según dicen, las #bandidas se instruyen# con #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST] = HintText(CustomMessage("They say that #soldiers walking on shifting sands# in the Gerudo Training Ground guard #[[1]]#.", - /*german*/ "Man erzählt sich, daß #auf veränderlichen Sanden laufende Soldaten# in der Gerudo-Trainingsarena #[[1]]# bewachen würden.", + /*german*/ "Man erzählt sich, daß #auf veränderlichen Sanden laufende Soldaten# auf dem Gerudo-Trainingsgelände #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #squelettes# du Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #soldados en resbaladizas arenas# del Centro de Instrucción Gerudo protegen #[[1]]#. @@ -1916,12 +1964,12 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th // /*spanish*/ Según dicen, donde entrenan las bandidas #entre llamas# yace #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST] = HintText(CustomMessage("They say that #fiery foes# in the Gerudo Training Ground guard #[[1]]#.", - /*german*/ "Man erzählt sich, daß #feurige Feinde# in der Gerudo-Trainingsarena #[[1]]# bewachen würden.", + /*german*/ "Man erzählt sich, daß #feurige Feinde# auf dem Gerudo-Trainingsgelände #[[1]]# bewachen würden.", /*french*/ "Selon moi, les #ennemis de feu# du Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, unos #flamígeros enemigos# del Centro de Instrucción Gerudo guardan #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST] = HintText(CustomMessage("They say that #reptilian warriors# in the Gerudo Training Ground protect #[[1]]#.", - /*german*/ "Man erzählt sich, daß #reptilienartige Krieger# in der Gerudo-Trainingsarena #[[1]]# schützen würden.", + /*german*/ "Man erzählt sich, daß #reptilienartige Krieger# auf dem Gerudo-Trainingsgelände #[[1]]# schützen würden.", /*french*/ "Selon moi, les #lézards# dans le Gymnase Gerudo protègent #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, #unos escamosos guerreros# del Centro de Instrucción Gerudo protegen #[[1]]#. @@ -1951,7 +1999,7 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th // /*spanish*/ Según dicen, el segundo premio de la #instrucción bandida# se trata de #[[1]]#. hintTextTable[RHT_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST] = HintText(CustomMessage("They say that the #Eye of Truth# in the Gerudo Training Ground reveals #[[1]]#.", - /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# in der Gerudo-Trainingsarena #[[1]]# enthülle.", + /*german*/ "Man erzählt sich, daß das #Auge der Wahrheit# auf dem Gerudo-Trainingsgelände #[[1]]# enthülle.", /*french*/ "Selon moi, #bien caché# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, el #Ojo de la Verdad# en el Centro de Instrucción Gerudo revela #[[1]]#. @@ -1960,9 +2008,13 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th /*french*/ "Selon moi, #derrière un bloc argent# dans le Gymnase Gerudo gît #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ Según dicen, una #hazaña de fuerza# premia a las bandidas con #[[1]]#. - hintTextTable[RHT_GERUDO_TRAINING_GROUNDS_HEART] = HintText(CustomMessage("They say that a watching a #trial with Dinalfos# is #[[1]]#.", - /*german*/ "", - /*french*/ "Selon moi, dans #une épreuve avec un Dinalfos# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_GERUDO_TRAINING_GROUNDS_HEART] = HintText(CustomMessage("They say that a watching a #trial with Dinolfos# is #[[1]]#.", + /*german*/ "Man erzählt sich, daß das Sehen einer #Prüfung mit Dinodorus# #[[1]]# enthülle.", + /*french*/ "Selon moi, dans #une épreuve avec un Dinolfos# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + + hintTextTable[RHT_CRATE_GERUDO_TRAINING_GROUND] = HintText(CustomMessage("They say that a #crate in Gerudo Training Ground# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Gymnase Gerudo# contient #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- | GANONS CASTLE | @@ -2048,11 +2100,11 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th // /*spanish*/ Según dicen, la #música en la prueba del resplandor# revela #[[1]]#. hintTextTable[RHT_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun for a sentry in the test of the sands# reveals #[[1]]#.", - /*german*/ "!!!", + /*german*/ "Man erzählt sich, daß das #Anrufen der Sonne für eine Wache in einer Prüfung der Sande# #[[1]]# enthülle.", /*french*/ "Selon moi, #appeler le soleil pour une sentinelle dans l’épreuve des sables# révèle #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_GANONS_CASTLE_SCRUBS_FAIRY] = HintText(CustomMessage("They say that within a #sanctuary before the final trial# rests #[[1]]#.", - /*german*/ "!!!", + /*german*/ "Man erzählt sich, daß innerhalb eines #Heiligtum vor der finalen Prüfung# #[[1]]# ruhe.", /*french*/ "Selon moi, #dans un sanctuaire avant l’épreuve finale# repose #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST] = HintText(CustomMessage("They say that the #test of the seas# holds #[[1]]#.", @@ -2166,12 +2218,13 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th // /*spanish*/ Según dicen, los #dekus del Castillo de Ganon# venden #[[1]]#. hintTextTable[RHT_POT_GANONS_CASTLE] = HintText(CustomMessage("They say that a #pot in Ganon's Castle# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in Ganons Schloß# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Château de Ganon# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_GANONS_CASTLE_HEART] = HintText(CustomMessage("They say that a #heart in Ganon's Castle# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein #Herz in Ganons Schloß# #[[1]]# verstecke.", /*french*/ "Selon moi, un #coeur dans le Château de Ganon# cache #[[1]]#.", {QM_RED, QM_GREEN})); + // clang-format on } -} +} // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp index a6c6b99f3..11d89d837 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp @@ -4,6 +4,7 @@ namespace Rando { void StaticData::HintTable_Init_Exclude_Overworld() { + // clang-format off hintTextTable[RHT_KF_KOKIRI_SWORD_CHEST] = HintText(CustomMessage("They say that the #hidden treasure of the Kokiri# is #[[1]]#.", /*german*/ "Man erzählt sich, daß der #versteckte Schatz der Kokiri# #[[1]]# sei.", @@ -1492,67 +1493,67 @@ void StaticData::HintTable_Init_Exclude_Overworld() { // /*spanish*/ Según dicen, una #colmena detrás del rey de los zoras# esconde #[[1]]#. hintTextTable[RHT_POT_KOKIRI_FOREST] = HintText(CustomMessage("They say that a #pot in Kokiri Forest# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase im Kokiri-Wald# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans la Fôret Kokiri# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_GERUDO_FORTRESS] = HintText(CustomMessage("They say that a #pot in Gerudo Fortress# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in der Gerudo-Festung# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans la Forteresse Gerudo# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_WASTELAND] = HintText(CustomMessage("They say that a #pot in Haunted Wasteland# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in der Gespensterwüste# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Désert Hanté# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_MARKET] = HintText(CustomMessage("They say that a #pot in Market# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase auf dem Markt# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans la Place du Marché# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_KAKARIKO] = HintText(CustomMessage("They say that a #pot in Kakariko Village# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in Kakariko# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Village de Cocorico# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_GRAVEYARD] = HintText(CustomMessage("They say that a #pot in Graveyard# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase auf dem Friedhof# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Cimetière# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_GORON_CITY] = HintText(CustomMessage("They say that a #pot in Goron City# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in Goronia# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Village Goron# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_DEATH_MOUNTAIN_CRATER] = HintText(CustomMessage("They say that a #pot in Death Mountain Crater# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase im Todeskrater# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre sur le Mont du Péril# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_ZORAS_DOMAIN] = HintText(CustomMessage("They say that a #pot in Zora's Domain# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in Zoras Reich# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Domaine Zora# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_ZORAS_FOUNTAIN] = HintText(CustomMessage("They say that a #pot in Zora's Fountain# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in Zoras Quelle# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans la Fontaine Zora# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_LON_LON_RANCH] = HintText(CustomMessage("They say that a #pot in Lon Lon Ranch# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase auf der Lon Lon-Farm# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Ranch Lon Lon# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_HYRULE_FIELD] = HintText(CustomMessage("They say that a #pot in Hyrule Field# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in der Hylianischen Steppe# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans la Plaine d'Hyrule# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_POT_HYRULE_CASTLE] = HintText(CustomMessage("They say that a #pot in Hyrule Castle# contains #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß eine #Vase in Schloß Hyrule# #[[1]]# enthielte.", /*french*/ "Selon moi, une #jarre dans le Château d'Hyrule# contient #[[1]]#.", {QM_RED, QM_GREEN})); hintTextTable[RHT_KOKIRI_FOREST_RUPEE] = HintText(CustomMessage("They say that a rupee in a #tranquil forest# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein Rubin in einem #ruhigen Wald# #[[1]]# verstecke.", /*french*/ "Selon moi, un rubis dans une #forêt tranquille# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ hintTextTable[RHT_KOKIRI_FOREST_HEART] = HintText(CustomMessage("They say that a heart in a #tranquil forest# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein Herz in einem #ruhigen Wald# #[[1]]# verstecke.", /*french*/ "Selon moi, un cœur dans une #forêt tranquille# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ hintTextTable[RHT_SARIAS_HOUSE_HEART] = HintText(CustomMessage("They say that a heart in a #dear friend's home# hides #[[1]]#.", - /*german*/ "", + /*german*/ "Man erzählt sich, daß ein Herz #im Heim eines lieben Freundes# #[[1]]# verstecke.", /*french*/ "Selon moi, un cœur dans la #maison d'une amie chère# cache #[[1]]#.", {QM_RED, QM_GREEN})); // /*spanish*/ hintTextTable[RHT_LOST_WOODS_RUPEE] = HintText(CustomMessage("They say that under a #boulder in the woods# lies #[[1]]#.", @@ -1954,5 +1955,66 @@ void StaticData::HintTable_Init_Exclude_Overworld() { hintTextTable[RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a royal tomb# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + hintTextTable[RHT_KF_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a forest# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_LW_GRASS] = HintText(CustomMessage("They say that #cutting some grass in the woods# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_MARKET_GRASS] = HintText(CustomMessage("They say that #cutting some grass in the market# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_HC_GRASS] = HintText(CustomMessage("They say that #cutting some grass near the castle# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_KAK_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a village# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_GY_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a graveyard# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_LH_GRASS] = HintText(CustomMessage("They say that #cutting some grass near a lake# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_HF_GRASS] = HintText(CustomMessage("They say that #cutting some grass on a field# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_ZR_GRASS] = HintText(CustomMessage("They say that #cutting some grass near a river# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_GROTTO_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a grotto# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_GERUDO_VALLEY] = HintText(CustomMessage("They say that a #crate in Gerudo Valley# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans une vallée# a #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_GERUDOS_FORTRESS] = HintText(CustomMessage("They say that a #crate in Gerudo Fortress# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans la Forteresse Gerudo# contient #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_WASTELAND] = HintText(CustomMessage("They say that a #crate in Haunted Wasteland# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Désert Hanté# contient #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_MARKET] = HintText(CustomMessage("They say that a #crate in the Market# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans la Place du Marché# contient #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_KAKARIKO_VILLAGE] = HintText(CustomMessage("They say that a #crate in Kakariko Village# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Village de Cocorico# contient #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_GRAVEYARD] = HintText(CustomMessage("They say that a #crate in the Graveyard# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Cimetière# contient #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_GORON_CITY] = HintText(CustomMessage("They say that a #crate in Goron City# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Village Goron# contient #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_DEATH_MOUNTAIN_CRATER] = HintText(CustomMessage("They say that a #crate in Death Mountain Crater# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse sur le Mont du Péril# contient #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_LON_LON_RANCH] = HintText(CustomMessage("They say that a #crate in Lon Lon Ranch# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Ranch Lon Lon# contient #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_LAKESIDE_LABORATORY] = HintText(CustomMessage("They say that a #crate in the Laboratory# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans un laboratoire# contient #[[1]]#.", { QM_RED, QM_GREEN })); + + // clang-format on } -} +} // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp index c786dd8de..ba0468849 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp @@ -5,7 +5,8 @@ namespace Rando { void StaticData::HintTable_Init_Item() { - + // clang-format off + hintTextTable[RHT_KOKIRI_SWORD] = HintText(CustomMessage("the Kokiri Sword", /*german*/"das Kokiri-Schwert", /*french*/"l'Épée Kokiri"), // /*spanish*/la Espada Kokiri { @@ -2079,14 +2080,14 @@ void StaticData::HintTable_Init_Item() { CustomMessage("a fish-puller", /*german*/"ein Fischzieher", /*french*/"(un aimant à poisson)")}); // /*spanish*/(caña de pescar) - hintTextTable[RHT_BOMBCHU_BAG] = HintText(CustomMessage("Bombchu Bag", /*german*/"!!!", /*french*/"un Sac de Missiles Teigneux"), + hintTextTable[RHT_BOMBCHU_BAG] = HintText(CustomMessage("a Bombchu Bag", /*german*/"eine Krabbelminentasche", /*french*/"un Sac de Missiles Teigneux"), { CustomMessage("explosives", /*german*/"ein Explosivpaket", /*french*/"un paquet d'explosifs"), // /*spanish*/un montón de explosivos CustomMessage("something that can remove boulders", /*german*/"etwas, das Geröll entfernen kann", /*french*/"une chose qui enlève les rochers") // /*spanish*/algo que pueda quitar rocas }, { - CustomMessage("sack of mice", /*german*/"!!!", /*french*/"un Sac rempli de souris")}); + CustomMessage("sack of mice", /*german*/"ein Sack Mäuse", /*french*/"un Sac rempli de souris")}); hintTextTable[RHT_SKELETON_KEY] = HintText(CustomMessage("a Skeleton Key", /*german*/ "ein Universalschlüssel", /*french*/ "une Clé Squelette"), // /*spanish*/una Llave Maestra @@ -2096,49 +2097,50 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("a master unlocker", /*german*/ "ein Meisterentsperrer", /*french*/ "un Kit de Déverrouillage") }); // /*spanish*/un desbloqueador maestro - hintTextTable[RHT_QUIVER_INF] = HintText(CustomMessage("an infinite Quiver", /*german*/"!!!", /*french*/"un Carquois Infini"), + + hintTextTable[RHT_QUIVER_INF] = HintText(CustomMessage("an infinite Quiver", /*german*/"ein unendlicher Köcher", /*french*/"un Carquois Infini"), { CustomMessage("", /*german*/"!!!", /*french*/"!!!"), }, { CustomMessage("", /*german*/"!!!", /*french*/"!!!")}); - hintTextTable[RHT_BOMB_BAG_INF] = HintText(CustomMessage("an infinite Bomb Bag", /*german*/"!!!", /*french*/"un Sac de Bombe sans fond"), + hintTextTable[RHT_BOMB_BAG_INF] = HintText(CustomMessage("an infinite Bomb Bag", /*german*/"eine unendliche Bombentasche", /*french*/"un Sac de Bombe sans fond"), { CustomMessage("", /*german*/"!!!", /*french*/"!!!"), }, { CustomMessage("", /*german*/"!!!", /*french*/"!!!")}); - hintTextTable[RHT_BULLET_BAG_INF] = HintText(CustomMessage("an infinite Bullet Bag", /*german*/"!!!", /*french*/"un Sac de Graine sans fond"), + hintTextTable[RHT_BULLET_BAG_INF] = HintText(CustomMessage("an infinite Bullet Bag", /*german*/"eine unendliche Samentasche", /*french*/"un Sac de Graine sans fond"), { CustomMessage("", /*german*/"!!!", /*french*/"!!!"), }, { CustomMessage("", /*german*/"!!!", /*french*/"!!!")}); - hintTextTable[RHT_STICK_UPGRADE_INF] = HintText(CustomMessage("infinite Deku Sticks", /*german*/"!!!", /*french*/" des Bâtons Mojo illimités"), + hintTextTable[RHT_STICK_UPGRADE_INF] = HintText(CustomMessage("infinite Deku Sticks", /*german*/"unendliche Deku-Stäbe", /*french*/"des Bâtons Mojo illimités"), { CustomMessage("", /*german*/"!!!", /*french*/"!!!"), }, { CustomMessage("", /*german*/"!!!", /*french*/"!!!")}); - hintTextTable[RHT_NUT_UPGRADE_INF] = HintText(CustomMessage("infinite Deku Nut", /*german*/"!!!", /*french*/"des Noix Mojo illimitées"), + hintTextTable[RHT_NUT_UPGRADE_INF] = HintText(CustomMessage("infinite Deku Nuts", /*german*/"unendliche Deku-Nüsse", /*french*/"des Noix Mojo illimitées"), { CustomMessage("", /*german*/"!!!", /*french*/"!!!"), }, { CustomMessage("", /*german*/"!!!", /*french*/"!!!")}); - hintTextTable[RHT_MAGIC_INF] = HintText(CustomMessage("unlimited Magic", /*german*/"!!!", /*french*/"de la Magie infinie"), + hintTextTable[RHT_MAGIC_INF] = HintText(CustomMessage("unlimited Magic", /*german*/"unendliche Magie", /*french*/"de la Magie infinie"), { CustomMessage("", /*german*/"!!!", /*french*/"!!!"), }, { CustomMessage("", /*german*/"!!!", /*french*/"!!!")}); - hintTextTable[RHT_BOMBCHU_INF] = HintText(CustomMessage("infinite Bombchus", /*german*/"!!!", /*french*/"des Missiles Teigneux illimités"), + hintTextTable[RHT_BOMBCHU_INF] = HintText(CustomMessage("infinite Bombchus", /*german*/"unendliche Krabbelminen", /*french*/"des Missiles Teigneux illimités"), { CustomMessage("", /*german*/"!!!", /*french*/"!!!"), }, { CustomMessage("", /*german*/"!!!", /*french*/"!!!")}); - hintTextTable[RHT_WALLET_INF] = HintText(CustomMessage("an infinite Wallet", /*german*/"!!!", /*french*/"une Bourse sans fond"), + hintTextTable[RHT_WALLET_INF] = HintText(CustomMessage("an infinite Wallet", /*german*/"eine unendliche Geldbörse", /*french*/"une Bourse sans fond"), { CustomMessage("", /*german*/"!!!", /*french*/"!!!"), }, { @@ -2169,5 +2171,6 @@ void StaticData::HintTable_Init_Item() { hintTextTable[RHT_MYSTERIOUS_ITEM_CAPITAL] = HintText(CustomMessage("Mysterious Item", /*german*/"Mysteriöser Gegenstand", /*french*/"Objet Mystérieux")); // /*spanish*/Algo Misterioso + // clang-format on } -} +} // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/3drando/hints.cpp b/soh/soh/Enhancements/randomizer/3drando/hints.cpp index 932b97316..c55145fcd 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hints.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hints.cpp @@ -13,16 +13,11 @@ #include "../hint.h" #include "../static_data.h" - using namespace Rando; -HintDistributionSetting::HintDistributionSetting(std::string _name, - HintType _type, - uint32_t _weight, - uint8_t _fixed, - uint8_t _copies, - std::function _filter, - uint8_t _dungeonLimit){ +HintDistributionSetting::HintDistributionSetting(std::string _name, HintType _type, uint32_t _weight, uint8_t _fixed, + uint8_t _copies, std::function _filter, + uint8_t _dungeonLimit) { name = _name; type = _type; weight = _weight; @@ -30,10 +25,12 @@ HintDistributionSetting::HintDistributionSetting(std::string _name, copies = _copies; filter = _filter; dungeonLimit = _dungeonLimit; - } +} -HintText::HintText(CustomMessage clearText_, std::vector ambiguousText_, std::vector obscureText_) -: clearText(std::move(clearText_)), ambiguousText(std::move(ambiguousText_)), obscureText(std::move(obscureText_)){} +HintText::HintText(CustomMessage clearText_, std::vector ambiguousText_, + std::vector obscureText_) + : clearText(std::move(clearText_)), ambiguousText(std::move(ambiguousText_)), obscureText(std::move(obscureText_)) { +} const CustomMessage& HintText::GetClear() const { return clearText; @@ -44,7 +41,7 @@ const CustomMessage& HintText::GetObscure() const { } const CustomMessage& HintText::GetObscure(uint8_t selection) const { - if (obscureText.size() > selection){ + if (obscureText.size() > selection) { return obscureText[selection]; } else if (obscureText.size() > 0) { return obscureText[0]; @@ -57,7 +54,7 @@ const CustomMessage& HintText::GetAmbiguous() const { } const CustomMessage& HintText::GetAmbiguous(uint8_t selection) const { - if (ambiguousText.size() > selection){ + if (ambiguousText.size() > selection) { return ambiguousText[selection]; } else if (ambiguousText.size() > 0) { return ambiguousText[0]; @@ -65,11 +62,11 @@ const CustomMessage& HintText::GetAmbiguous(uint8_t selection) const { return clearText; } -uint8_t HintText::GetAmbiguousSize() const{ +uint8_t HintText::GetAmbiguousSize() const { return ambiguousText.size(); } -uint8_t HintText::GetObscureSize() const{ +uint8_t HintText::GetObscureSize() const { return obscureText.size(); } @@ -96,66 +93,65 @@ const CustomMessage HintText::GetMessageCopy() const { } bool HintText::operator==(const HintText& right) const { - return obscureText == right.obscureText && - ambiguousText == right.ambiguousText && - clearText == right.clearText; + return obscureText == right.obscureText && ambiguousText == right.ambiguousText && clearText == right.clearText; } bool HintText::operator!=(const HintText& right) const { return !operator==(right); } -StaticHintInfo::StaticHintInfo(HintType _type, std::vector _hintKeys, RandomizerSettingKey _setting, - std::variant _condition, std::vector _targetChecks, - std::vector _targetItems, std::vector _hintChecks, bool _yourPocket, int _num): - type(_type), hintKeys(_hintKeys), setting(_setting), condition(_condition), targetChecks(_targetChecks), - targetItems(_targetItems), hintChecks(_hintChecks), yourPocket(_yourPocket), num(_num){} +StaticHintInfo::StaticHintInfo(HintType _type, std::vector _hintKeys, + RandomizerSettingKey _setting, std::variant _condition, + std::vector _targetChecks, std::vector _targetItems, + std::vector _hintChecks, bool _yourPocket, int _num) + : type(_type), hintKeys(_hintKeys), setting(_setting), condition(_condition), targetChecks(_targetChecks), + targetItems(_targetItems), hintChecks(_hintChecks), yourPocket(_yourPocket), num(_num) { +} -RandomizerHintTextKey GetRandomJunkHint(){ +RandomizerHintTextKey GetRandomJunkHint() { // Temp code to handle random junk hints now I work in keys instead of a vector of HintText // Will be replaced with a better system once more customisable hint pools are added uint32_t range = RHT_JUNK71 - RHT_JUNK01; return (RandomizerHintTextKey)(Random(0, range) + RHT_JUNK01); } -RandomizerHintTextKey GetRandomGanonJoke(){ - uint32_t range = RHT_GANON_JOKE11 - RHT_GANON_JOKE01; - return (RandomizerHintTextKey)(Random(0, range) + RHT_GANON_JOKE01); +RandomizerHintTextKey GetRandomGanonJoke() { + uint32_t range = RHT_GANON_JOKE11 - RHT_GANON_JOKE01; + return (RandomizerHintTextKey)(Random(0, range) + RHT_GANON_JOKE01); } - -bool FilterWotHLocations(RandomizerCheck loc){ - auto ctx = Rando::Context::GetInstance(); - return ctx->GetItemLocation(loc)->IsWothCandidate(); +bool FilterWotHLocations(RandomizerCheck loc) { + auto ctx = Rando::Context::GetInstance(); + return ctx->GetItemLocation(loc)->IsWothCandidate(); } -bool FilterFoolishLocations(RandomizerCheck loc){ - auto ctx = Rando::Context::GetInstance(); - return ctx->GetItemLocation(loc)->IsFoolishCandidate(); +bool FilterFoolishLocations(RandomizerCheck loc) { + auto ctx = Rando::Context::GetInstance(); + return ctx->GetItemLocation(loc)->IsFoolishCandidate(); } -bool FilterSongLocations(RandomizerCheck loc){ - auto ctx = Rando::Context::GetInstance(); - return Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_SONG_LOCATION; +bool FilterSongLocations(RandomizerCheck loc) { + auto ctx = Rando::Context::GetInstance(); + return Rando::StaticData::GetLocation(loc)->GetRCType() == RCTYPE_SONG_LOCATION; } -bool FilterOverworldLocations(RandomizerCheck loc){ - auto ctx = Rando::Context::GetInstance(); - return Rando::StaticData::GetLocation(loc)->IsOverworld(); +bool FilterOverworldLocations(RandomizerCheck loc) { + auto ctx = Rando::Context::GetInstance(); + return Rando::StaticData::GetLocation(loc)->IsOverworld(); } -bool FilterDungeonLocations(RandomizerCheck loc){ - auto ctx = Rando::Context::GetInstance(); - return Rando::StaticData::GetLocation(loc)->IsDungeon(); +bool FilterDungeonLocations(RandomizerCheck loc) { + auto ctx = Rando::Context::GetInstance(); + return Rando::StaticData::GetLocation(loc)->IsDungeon(); } -bool FilterGoodItems(RandomizerCheck loc){ - auto ctx = Rando::Context::GetInstance(); - return ctx->GetItemLocation(loc)->GetPlacedItem().IsMajorItem(); +bool FilterGoodItems(RandomizerCheck loc) { + auto ctx = Rando::Context::GetInstance(); + return ctx->GetItemLocation(loc)->GetPlacedItem().IsMajorItem(); } -bool NoFilter(RandomizerCheck loc){ - return true; +bool NoFilter(RandomizerCheck loc) { + return true; } const std::array hintSettingTable{{ @@ -225,15 +221,16 @@ uint8_t StonesRequiredBySettings() { stones = ctx->GetOption(RSK_RAINBOW_BRIDGE_STONE_COUNT).Get(); } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEON_REWARDS)) { stones = ctx->GetOption(RSK_RAINBOW_BRIDGE_REWARD_COUNT).Get() - 6; - } else if ((ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEONS)) && (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON))) { + } else if ((ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEONS)) && + (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON))) { stones = ctx->GetOption(RSK_RAINBOW_BRIDGE_DUNGEON_COUNT).Get() - 6; } if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_STONES)) { stones = std::max({ stones, ctx->GetOption(RSK_LACS_STONE_COUNT).Get() }); } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_STONES)) { - stones = std::max({ stones, (uint8_t)(ctx->GetOption(RSK_LACS_REWARD_COUNT).Get() - 6 )}); + stones = std::max({ stones, (uint8_t)(ctx->GetOption(RSK_LACS_REWARD_COUNT).Get() - 6) }); } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_DUNGEONS)) { - stones = std::max({ stones, (uint8_t)(ctx->GetOption(RSK_LACS_DUNGEON_COUNT).Get() - 6 )}); + stones = std::max({ stones, (uint8_t)(ctx->GetOption(RSK_LACS_DUNGEON_COUNT).Get() - 6) }); } return stones; } @@ -245,15 +242,17 @@ uint8_t MedallionsRequiredBySettings() { medallions = ctx->GetOption(RSK_RAINBOW_BRIDGE_MEDALLION_COUNT).Get(); } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEON_REWARDS)) { medallions = ctx->GetOption(RSK_RAINBOW_BRIDGE_REWARD_COUNT).Get() - 3; - } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEONS) && ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) { + } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEONS) && + ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) { medallions = ctx->GetOption(RSK_RAINBOW_BRIDGE_DUNGEON_COUNT).Get() - 3; } if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_MEDALLIONS)) { medallions = std::max({ medallions, ctx->GetOption(RSK_LACS_MEDALLION_COUNT).Get() }); } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_REWARDS)) { - medallions = std::max({ medallions, (uint8_t)(ctx->GetOption(RSK_LACS_REWARD_COUNT).Get() - 3 )}); - } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_DUNGEONS) && ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) { - medallions = std::max({ medallions, (uint8_t)(ctx->GetOption(RSK_LACS_DUNGEON_COUNT).Get() - 3 )}); + medallions = std::max({ medallions, (uint8_t)(ctx->GetOption(RSK_LACS_REWARD_COUNT).Get() - 3) }); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_DUNGEONS) && + ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) { + medallions = std::max({ medallions, (uint8_t)(ctx->GetOption(RSK_LACS_DUNGEON_COUNT).Get() - 3) }); } return medallions; } @@ -271,555 +270,601 @@ uint8_t TokensRequiredBySettings() { } std::vector>> conditionalAlwaysHints = { - std::make_pair(RC_MARKET_10_BIG_POES, []() { + std::make_pair(RC_MARKET_10_BIG_POES, + []() { auto ctx = Rando::Context::GetInstance(); return ctx->GetOption(RSK_BIG_POE_COUNT).Get() >= 3 && !ctx->GetOption(RSK_BIG_POES_HINT); }), // Remember, the option's value being 3 means 4 are required - std::make_pair(RC_DEKU_THEATER_MASK_OF_TRUTH, []() { + std::make_pair(RC_DEKU_THEATER_MASK_OF_TRUTH, + []() { auto ctx = Rando::Context::GetInstance(); return !ctx->GetOption(RSK_MASK_SHOP_HINT) && !ctx->GetOption(RSK_COMPLETE_MASK_QUEST); }), - std::make_pair(RC_SONG_FROM_OCARINA_OF_TIME, []() { - auto ctx = Rando::Context::GetInstance(); - return StonesRequiredBySettings() < 2 && !ctx->GetOption(RSK_OOT_HINT); + std::make_pair(RC_SONG_FROM_OCARINA_OF_TIME, + []() { + auto ctx = Rando::Context::GetInstance(); + return StonesRequiredBySettings() < 2 && !ctx->GetOption(RSK_OOT_HINT); }), std::make_pair(RC_HF_OCARINA_OF_TIME_ITEM, []() { return StonesRequiredBySettings() < 2; }), std::make_pair(RC_SHEIK_IN_KAKARIKO, []() { return MedallionsRequiredBySettings() < 5; }), - std::make_pair(RC_DMT_TRADE_CLAIM_CHECK, []() { + std::make_pair(RC_DMT_TRADE_CLAIM_CHECK, + []() { auto ctx = Rando::Context::GetInstance(); return !ctx->GetOption(RSK_BIGGORON_HINT); }), - std::make_pair(RC_KAK_30_GOLD_SKULLTULA_REWARD, []() { + std::make_pair(RC_KAK_30_GOLD_SKULLTULA_REWARD, + []() { auto ctx = Rando::Context::GetInstance(); return !ctx->GetOption(RSK_KAK_30_SKULLS_HINT) && TokensRequiredBySettings() < 30; }), - std::make_pair(RC_KAK_40_GOLD_SKULLTULA_REWARD, []() { + std::make_pair(RC_KAK_40_GOLD_SKULLTULA_REWARD, + []() { auto ctx = Rando::Context::GetInstance(); return !ctx->GetOption(RSK_KAK_40_SKULLS_HINT) && TokensRequiredBySettings() < 40; }), - std::make_pair(RC_KAK_50_GOLD_SKULLTULA_REWARD, []() { + std::make_pair(RC_KAK_50_GOLD_SKULLTULA_REWARD, + []() { auto ctx = Rando::Context::GetInstance(); return !ctx->GetOption(RSK_KAK_50_SKULLS_HINT) && TokensRequiredBySettings() < 50; }), - std::make_pair(RC_ZR_FROGS_OCARINA_GAME, []() { + std::make_pair(RC_ZR_FROGS_OCARINA_GAME, + []() { auto ctx = Rando::Context::GetInstance(); return !ctx->GetOption(RSK_FROGS_HINT); }), - std::make_pair(RC_KF_LINKS_HOUSE_COW, []() { + std::make_pair(RC_KF_LINKS_HOUSE_COW, + []() { auto ctx = Rando::Context::GetInstance(); return !ctx->GetOption(RSK_MALON_HINT); }), - std::make_pair(RC_KAK_100_GOLD_SKULLTULA_REWARD, []() { + std::make_pair(RC_KAK_100_GOLD_SKULLTULA_REWARD, + []() { auto ctx = Rando::Context::GetInstance(); return !ctx->GetOption(RSK_KAK_100_SKULLS_HINT) && TokensRequiredBySettings() < 100; }), }; static std::vector GetEmptyGossipStones() { - auto emptyGossipStones = GetEmptyLocations(Rando::StaticData::GetGossipStoneLocations()); - return emptyGossipStones; + auto emptyGossipStones = GetEmptyLocations(Rando::StaticData::GetGossipStoneLocations()); + return emptyGossipStones; } static std::vector GetAccessibleGossipStones(const RandomizerCheck hintedLocation = RC_GANON) { - auto ctx = Rando::Context::GetInstance(); - //temporarily remove the hinted location's item, and then perform a - //reachability search for gossip stone locations. - RandomizerGet originalItem = ctx->GetItemLocation(hintedLocation)->GetPlacedRandomizerGet(); - ctx->GetItemLocation(hintedLocation)->SetPlacedItem(RG_NONE); + auto ctx = Rando::Context::GetInstance(); + // temporarily remove the hinted location's item, and then perform a + // reachability search for gossip stone locations. + RandomizerGet originalItem = ctx->GetItemLocation(hintedLocation)->GetPlacedRandomizerGet(); + ctx->GetItemLocation(hintedLocation)->SetPlacedItem(RG_NONE); - ctx->GetLogic()->Reset(); - auto accessibleGossipStones = ReachabilitySearch(Rando::StaticData::GetGossipStoneLocations()); - //Give the item back to the location - ctx->GetItemLocation(hintedLocation)->SetPlacedItem(originalItem); - - return accessibleGossipStones; -} - -bool IsReachableWithout(std::vector locsToCheck, RandomizerCheck excludedCheck, bool resetAfter = true){ - //temporarily remove the hinted location's item, and then perform a - //reachability search for this check RANDOTODO convert excludedCheck to an ItemLocation - auto ctx = Rando::Context::GetInstance(); - RandomizerGet originalItem = ctx->GetItemLocation(excludedCheck)->GetPlacedRandomizerGet(); - ctx->GetItemLocation(excludedCheck)->SetPlacedItem(RG_NONE); - ctx->GetLogic()->Reset(); - const auto rechableWithout = ReachabilitySearch(locsToCheck); - ctx->GetItemLocation(excludedCheck)->SetPlacedItem(originalItem); - if (resetAfter){ - //if resetAfter is on, reset logic we are done ctx->GetLogic()->Reset(); - } - if (rechableWithout.empty()) { - return false; - } - return true; + auto accessibleGossipStones = ReachabilitySearch(Rando::StaticData::GetGossipStoneLocations()); + // Give the item back to the location + ctx->GetItemLocation(hintedLocation)->SetPlacedItem(originalItem); + + return accessibleGossipStones; } -static void SetAllInAreaAsHintAccesible(RandomizerArea area, std::vector locations){ - auto ctx = Rando::Context::GetInstance(); - std::vector locsInArea = FilterFromPool(locations, [area, ctx](const RandomizerCheck loc){ - return ctx->GetItemLocation(loc)->GetAreas().contains(area); - }); - for(RandomizerCheck loc: locsInArea){ - ctx->GetItemLocation(loc)->SetHintAccesible(); - } +bool IsReachableWithout(std::vector locsToCheck, RandomizerCheck excludedCheck, + bool resetAfter = true) { + // temporarily remove the hinted location's item, and then perform a + // reachability search for this check RANDOTODO convert excludedCheck to an ItemLocation + auto ctx = Rando::Context::GetInstance(); + RandomizerGet originalItem = ctx->GetItemLocation(excludedCheck)->GetPlacedRandomizerGet(); + ctx->GetItemLocation(excludedCheck)->SetPlacedItem(RG_NONE); + ctx->GetLogic()->Reset(); + const auto rechableWithout = ReachabilitySearch(locsToCheck); + ctx->GetItemLocation(excludedCheck)->SetPlacedItem(originalItem); + if (resetAfter) { + // if resetAfter is on, reset logic we are done + ctx->GetLogic()->Reset(); + } + if (rechableWithout.empty()) { + return false; + } + return true; } -static void AddGossipStoneHint( const RandomizerCheck gossipStone, - const HintType hintType, - const std::string distributionName, - const std::vector hintKeys, - const std::vector locations, - const std::vector areas, - const std::vector trials) { - auto ctx = Rando::Context::GetInstance(); - ctx->AddHint(StaticData::gossipStoneCheckToHint[gossipStone], Hint(StaticData::gossipStoneCheckToHint[gossipStone], hintType, distributionName, hintKeys, locations, areas, trials)); - ctx->GetItemLocation(gossipStone)->SetPlacedItem(RG_HINT); //RANDOTODO, better gossip stone to location to hint key system +static void SetAllInAreaAsHintAccesible(RandomizerArea area, std::vector locations) { + auto ctx = Rando::Context::GetInstance(); + std::vector locsInArea = FilterFromPool(locations, [area, ctx](const RandomizerCheck loc) { + return ctx->GetItemLocation(loc)->GetAreas().contains(area); + }); + for (RandomizerCheck loc : locsInArea) { + ctx->GetItemLocation(loc)->SetHintAccesible(); + } } -static void AddGossipStoneHintCopies(uint8_t copies, - const HintType hintType, - const std::string distributionName, +static void AddGossipStoneHint(const RandomizerCheck gossipStone, const HintType hintType, + const std::string distributionName, const std::vector hintKeys, + const std::vector locations, const std::vector areas, + const std::vector trials) { + auto ctx = Rando::Context::GetInstance(); + ctx->AddHint(StaticData::gossipStoneCheckToHint[gossipStone], + Hint(StaticData::gossipStoneCheckToHint[gossipStone], hintType, distributionName, hintKeys, locations, + areas, trials)); + ctx->GetItemLocation(gossipStone) + ->SetPlacedItem(RG_HINT); // RANDOTODO, better gossip stone to location to hint key system +} + +static void AddGossipStoneHintCopies(uint8_t copies, const HintType hintType, const std::string distributionName, const std::vector hintKeys = {}, const std::vector locations = {}, const std::vector areas = {}, const std::vector trials = {}, - RandomizerCheck firstStone = RC_UNKNOWN_CHECK){ + RandomizerCheck firstStone = RC_UNKNOWN_CHECK) { - if (firstStone != RC_UNKNOWN_CHECK && copies > 0){ - AddGossipStoneHint(firstStone, hintType, distributionName, hintKeys, locations, areas, trials); - copies -= 1; - } - for(int c=0; c 0) { + AddGossipStoneHint(firstStone, hintType, distributionName, hintKeys, locations, areas, trials); + copies -= 1; + } + for (int c = 0; c < copies; c++) { + // get a random gossip stone + auto gossipStones = GetEmptyGossipStones(); + if (gossipStones.empty()) { + SPDLOG_DEBUG("\tNO GOSSIP STONES TO PLACE HINT\n\n"); + return; + } + auto gossipStone = RandomElement(gossipStones, false); + AddGossipStoneHint(gossipStone, hintType, distributionName, hintKeys, locations, areas, trials); } - auto gossipStone = RandomElement(gossipStones, false); - AddGossipStoneHint(gossipStone, hintType, distributionName, hintKeys, locations, areas, trials); - } } -static bool CreateHint(RandomizerCheck location, uint8_t copies, HintType type, std::string distribution){ - auto ctx = Rando::Context::GetInstance(); +static bool CreateHint(RandomizerCheck location, uint8_t copies, HintType type, std::string distribution) { + auto ctx = Rando::Context::GetInstance(); - //get a gossip stone accessible without the hinted item - std::vector gossipStoneLocations = GetAccessibleGossipStones(location); - if (gossipStoneLocations.empty()) { - SPDLOG_DEBUG("\tNO IN LOGIC GOSSIP STONE\n\n"); - return false; - } - RandomizerCheck gossipStone = RandomElement(gossipStoneLocations); - RandomizerArea area = ctx->GetItemLocation(location)->GetRandomArea(); + // get a gossip stone accessible without the hinted item + std::vector gossipStoneLocations = GetAccessibleGossipStones(location); + if (gossipStoneLocations.empty()) { + SPDLOG_DEBUG("\tNO IN LOGIC GOSSIP STONE\n\n"); + return false; + } + RandomizerCheck gossipStone = RandomElement(gossipStoneLocations); + RandomizerArea area = ctx->GetItemLocation(location)->GetRandomArea(); - //Set that hints are accesible - ctx->GetItemLocation(location)->SetHintAccesible(); - if (type == HINT_TYPE_FOOLISH){ - SetAllInAreaAsHintAccesible(area, ctx->allLocations); - } + // Set that hints are accesible + ctx->GetItemLocation(location)->SetHintAccesible(); + if (type == HINT_TYPE_FOOLISH) { + SetAllInAreaAsHintAccesible(area, ctx->allLocations); + } - AddGossipStoneHintCopies(copies, type, distribution, {}, {location}, {area}, {}, gossipStone); - return true; + AddGossipStoneHintCopies(copies, type, distribution, {}, { location }, { area }, {}, gossipStone); + return true; } +static RandomizerCheck CreateRandomHint(std::vector& possibleHintLocations, uint8_t copies, + HintType type, std::string distributionName) { + auto ctx = Rando::Context::GetInstance(); -static RandomizerCheck CreateRandomHint(std::vector& possibleHintLocations, - uint8_t copies, - HintType type, - std::string distributionName) { - auto ctx = Rando::Context::GetInstance(); - - //return if there aren't any hintable locations or gossip stones available - if (GetEmptyGossipStones().size() < copies) { - SPDLOG_DEBUG("\tNOT ENOUGH GOSSIP STONES TO PLACE HINTS\n\n"); - return RC_UNKNOWN_CHECK; - } - - RandomizerCheck hintedLocation; - bool placed = false; - while (!placed){ - if (possibleHintLocations.empty()) { - SPDLOG_DEBUG("\tNO LOCATIONS TO HINT\n\n"); - return RC_UNKNOWN_CHECK; + // return if there aren't any hintable locations or gossip stones available + if (GetEmptyGossipStones().size() < copies) { + SPDLOG_DEBUG("\tNOT ENOUGH GOSSIP STONES TO PLACE HINTS\n\n"); + return RC_UNKNOWN_CHECK; } - hintedLocation = RandomElement(possibleHintLocations, true); //removing the location to avoid it being hinted again on fail - - SPDLOG_DEBUG("\tLocation: "); - SPDLOG_DEBUG(Rando::StaticData::GetLocation(hintedLocation)->GetName()); - SPDLOG_DEBUG("\n"); - SPDLOG_DEBUG("\tItem: "); - SPDLOG_DEBUG(ctx->GetItemLocation(hintedLocation)->GetPlacedItemName().GetEnglish()); - SPDLOG_DEBUG("\n"); + RandomizerCheck hintedLocation; + bool placed = false; + while (!placed) { + if (possibleHintLocations.empty()) { + SPDLOG_DEBUG("\tNO LOCATIONS TO HINT\n\n"); + return RC_UNKNOWN_CHECK; + } + hintedLocation = + RandomElement(possibleHintLocations, true); // removing the location to avoid it being hinted again on fail - placed = CreateHint(hintedLocation, copies, type, distributionName); - } - return hintedLocation; + SPDLOG_DEBUG("\tLocation: "); + SPDLOG_DEBUG(Rando::StaticData::GetLocation(hintedLocation)->GetName()); + SPDLOG_DEBUG("\n"); + + SPDLOG_DEBUG("\tItem: "); + SPDLOG_DEBUG(ctx->GetItemLocation(hintedLocation)->GetPlacedItemName().GetEnglish()); + SPDLOG_DEBUG("\n"); + + placed = CreateHint(hintedLocation, copies, type, distributionName); + } + return hintedLocation; } static std::vector FilterHintability(std::vector& locations, - std::function extraFilter = NoFilter){ - auto ctx = Rando::Context::GetInstance(); - return FilterFromPool(locations, [extraFilter, ctx](const RandomizerCheck loc) { - return ctx->GetItemLocation(loc)->IsHintable() && !(ctx->GetItemLocation(loc)->IsAHintAccessible()) - && extraFilter(loc); - }); + std::function extraFilter = NoFilter) { + auto ctx = Rando::Context::GetInstance(); + return FilterFromPool(locations, [extraFilter, ctx](const RandomizerCheck loc) { + return ctx->GetItemLocation(loc)->IsHintable() && !(ctx->GetItemLocation(loc)->IsAHintAccessible()) && + extraFilter(loc); + }); } static void CreateJunkHints(uint8_t numHints) { - for(uint8_t c = 0; c < numHints; c++){ - //duplicate junk hints are possible for now - AddGossipStoneHintCopies(1, HINT_TYPE_HINT_KEY, "Junk", {GetRandomJunkHint()}); - } + for (uint8_t c = 0; c < numHints; c++) { + // duplicate junk hints are possible for now + AddGossipStoneHintCopies(1, HINT_TYPE_HINT_KEY, "Junk", { GetRandomJunkHint() }); + } } static void CreateTrialHints(uint8_t copies) { - if (copies > 0) { - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_TRIAL_COUNT).Is(6)) {//six trials - AddGossipStoneHintCopies(copies, HINT_TYPE_HINT_KEY, "Trial", {RHT_SIX_TRIALS}); - } else if (ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) {//zero trials - AddGossipStoneHintCopies(copies, HINT_TYPE_HINT_KEY, "Trial", {RHT_ZERO_TRIALS}); - } else { - std::vector trials = ctx->GetTrials()->GetTrialList(); //there's probably a way to remove this assignment - if (ctx->GetOption(RSK_TRIAL_COUNT).Get() >= 4) {//4 or 5 required trials, get skipped trials - trials = FilterFromPool(trials, [](TrialInfo* trial){return trial->IsSkipped();}); - } else {//1 to 3 trials, get requried trials - auto requiredTrials = FilterFromPool(trials, [](TrialInfo* trial){return trial->IsRequired();}); - } - for (auto& trial : trials) {//create a hint for each hinted trial - AddGossipStoneHintCopies(copies, HINT_TYPE_TRIAL, "Trial", {}, {}, {}, {trial->GetTrialKey()}); - } + if (copies > 0) { + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_TRIAL_COUNT).Is(6)) { // six trials + AddGossipStoneHintCopies(copies, HINT_TYPE_HINT_KEY, "Trial", { RHT_SIX_TRIALS }); + } else if (ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) { // zero trials + AddGossipStoneHintCopies(copies, HINT_TYPE_HINT_KEY, "Trial", { RHT_ZERO_TRIALS }); + } else { + std::vector trials = + ctx->GetTrials()->GetTrialList(); // there's probably a way to remove this assignment + if (ctx->GetOption(RSK_TRIAL_COUNT).Get() >= 4) { // 4 or 5 required trials, get skipped trials + trials = FilterFromPool(trials, [](TrialInfo* trial) { return trial->IsSkipped(); }); + } else { // 1 to 3 trials, get requried trials + auto requiredTrials = FilterFromPool(trials, [](TrialInfo* trial) { return trial->IsRequired(); }); + } + for (auto& trial : trials) { // create a hint for each hinted trial + AddGossipStoneHintCopies(copies, HINT_TYPE_TRIAL, "Trial", {}, {}, {}, { trial->GetTrialKey() }); + } + } } - } } void CreateWarpSongTexts() { - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_WARP_SONG_HINTS)){ - auto warpSongEntrances = GetShuffleableEntrances(EntranceType::WarpSong, false); - for (auto entrance : warpSongEntrances) { - //RANDOTODO make random - RandomizerArea destination = entrance->GetConnectedRegion()->GetFirstArea(); - switch (entrance->GetIndex()) { - case 0x0600: // minuet RANDOTODO make into entrance hints when they are added - ctx->AddHint(RH_MINUET_WARP_LOC, Hint(RH_MINUET_WARP_LOC, HINT_TYPE_AREA, "", {RHT_WARP_SONG}, {}, {destination})); - break; - case 0x04F6: // bolero - ctx->AddHint(RH_BOLERO_WARP_LOC, Hint(RH_BOLERO_WARP_LOC, HINT_TYPE_AREA, "", {RHT_WARP_SONG}, {}, {destination})); - break; - case 0x0604: // serenade - ctx->AddHint(RH_SERENADE_WARP_LOC, Hint(RH_SERENADE_WARP_LOC, HINT_TYPE_AREA, "", {RHT_WARP_SONG}, {}, {destination})); - break; - case 0x01F1: // requiem - ctx->AddHint(RH_REQUIEM_WARP_LOC, Hint(RH_REQUIEM_WARP_LOC, HINT_TYPE_AREA, "", {RHT_WARP_SONG}, {}, {destination})); - break; - case 0x0568: // nocturne - ctx->AddHint(RH_NOCTURNE_WARP_LOC, Hint(RH_NOCTURNE_WARP_LOC, HINT_TYPE_AREA, "", {RHT_WARP_SONG}, {}, {destination})); - break; - case 0x05F4: // prelude - ctx->AddHint(RH_PRELUDE_WARP_LOC, Hint(RH_PRELUDE_WARP_LOC, HINT_TYPE_AREA, "", {RHT_WARP_SONG}, {}, {destination})); - break; - default: - break; - } - } - } -} - -int32_t getRandomWeight(int32_t totalWeight){ - if (totalWeight <= 1){ - return 1; - } - return Random(1,totalWeight); -} - -static void DistributeHints(std::vector& selected, size_t stoneCount, std::vector distTable, uint8_t junkWieght, bool addFixed = true){ - int32_t totalWeight = junkWieght; //Start with our Junk Weight, the natural chance of a junk hint - - for (size_t c=0; c < distTable.size(); c++){ //Gather the weights of each distribution and, if it's the first pass, apply fixed hints - totalWeight += distTable[c].weight; //Note that PlaceHints will set weights of distributions to zero if it can't place anything from them - if (addFixed){ - selected[c] += distTable[c].fixed; - stoneCount -= distTable[c].fixed * distTable[c].copies; - } - } - int32_t currentWeight = getRandomWeight(totalWeight); //Initialise with the first random weight from 1 to the total. - while(stoneCount > 0 && totalWeight > 0){//Loop until we run out of stones or have no TotalWeight. 0 totalWeight means junkWeight is 0 - //and that all weights have been 0'd out for another reason, and skips to placing all junk hints - for (size_t distribution = 0; distribution < distTable.size(); distribution++){ - currentWeight -= distTable[distribution].weight; //go over each distribution, subtracting the weight each time. Once we reach zero or less, - if (currentWeight <= 0){ //tell the system to make 1 of that hint, unless not enough stones remain - if (stoneCount >= distTable[distribution].copies && distTable[distribution].copies > 0){ - selected[distribution] += 1; //if we have enough stones, and copies are not zero, assign 1 to this hint type, remove the stones, and break - stoneCount -= distTable[distribution].copies; - break; //This leaves the whole for loop - } else { //If we don't have the stones, or copies is 0 despite there being the wieght to trigger a hit, temporerally set wieght to zero - totalWeight -= distTable[distribution].weight; //Unlike PlaceHint, distTable is passed by value here, making this temporary - distTable[distribution].weight = 0; //this is so we can still roll this hint type if more stones free up later - break; + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_WARP_SONG_HINTS)) { + auto warpSongEntrances = GetShuffleableEntrances(EntranceType::WarpSong, false); + for (auto entrance : warpSongEntrances) { + // RANDOTODO make random + RandomizerArea destination = entrance->GetConnectedRegion()->GetFirstArea(); + switch (entrance->GetIndex()) { + case 0x0600: // minuet RANDOTODO make into entrance hints when they are added + ctx->AddHint(RH_MINUET_WARP_LOC, + Hint(RH_MINUET_WARP_LOC, HINT_TYPE_AREA, "", { RHT_WARP_SONG }, {}, { destination })); + break; + case 0x04F6: // bolero + ctx->AddHint(RH_BOLERO_WARP_LOC, + Hint(RH_BOLERO_WARP_LOC, HINT_TYPE_AREA, "", { RHT_WARP_SONG }, {}, { destination })); + break; + case 0x0604: // serenade + ctx->AddHint(RH_SERENADE_WARP_LOC, Hint(RH_SERENADE_WARP_LOC, HINT_TYPE_AREA, "", { RHT_WARP_SONG }, + {}, { destination })); + break; + case 0x01F1: // requiem + ctx->AddHint(RH_REQUIEM_WARP_LOC, + Hint(RH_REQUIEM_WARP_LOC, HINT_TYPE_AREA, "", { RHT_WARP_SONG }, {}, { destination })); + break; + case 0x0568: // nocturne + ctx->AddHint(RH_NOCTURNE_WARP_LOC, Hint(RH_NOCTURNE_WARP_LOC, HINT_TYPE_AREA, "", { RHT_WARP_SONG }, + {}, { destination })); + break; + case 0x05F4: // prelude + ctx->AddHint(RH_PRELUDE_WARP_LOC, + Hint(RH_PRELUDE_WARP_LOC, HINT_TYPE_AREA, "", { RHT_WARP_SONG }, {}, { destination })); + break; + default: + break; + } } - } } - //if there's still weight then it's junk, as the leftover weight is junkWeight - if (currentWeight > 0){ //zero TotalWeight breaks the while loop and hits the fallback, so skipping this is fine in that case - selected[selected.size()-1] += 1; - stoneCount -= 1; - } - currentWeight = getRandomWeight(totalWeight); - } - //if stones are left, assign junk to every remaining stone as a fallback. - if (stoneCount > 0){ - selected[selected.size()-1] += stoneCount; - } } -uint8_t PlaceHints(std::vector& selectedHints, std::vector& distTable){ - auto ctx = Rando::Context::GetInstance(); - uint8_t curSlot = 0; - for (HintDistributionSetting distribution : distTable){ - std::vector hintTypePool = FilterHintability(ctx->allLocations, distribution.filter); - for (uint8_t numHint = 0; numHint < selectedHints[curSlot]; numHint++){ - hintTypePool = FilterHintability(hintTypePool); - SPDLOG_DEBUG("Attempting to make hint of type: " + StaticData::hintTypeNames[distribution.type].GetEnglish(MF_CLEAN) + "\n"); - RandomizerCheck hintedLocation = RC_UNKNOWN_CHECK; - - hintedLocation = CreateRandomHint(hintTypePool, distribution.copies, distribution.type, distribution.name); - - if (hintedLocation == RC_UNKNOWN_CHECK){ //if hint failed to place, remove all wieght and copies then return the number of stones to redistribute - uint8_t hintsToRemove = (selectedHints[curSlot] - numHint) * distribution.copies; - selectedHints[curSlot] = 0; //as distTable is passed by refernce here, these changes stick for the rest of this seed generation - distTable[curSlot].copies = 0;//and prevent future distribution from choosing this slot - distTable[curSlot].weight = 0; - return hintsToRemove; - } - if(Rando::StaticData::GetLocation(hintedLocation)->IsDungeon()){ - distribution.dungeonLimit -= 1; - if (distribution.dungeonLimit == 0){ - FilterFromPool(hintTypePool, FilterOverworldLocations); - } - } +int32_t getRandomWeight(int32_t totalWeight) { + if (totalWeight <= 1) { + return 1; } - selectedHints[curSlot] = 0; - curSlot += 1; - } - CreateJunkHints(selectedHints[selectedHints.size() - 1]); - return 0; + return Random(1, totalWeight); +} + +static void DistributeHints(std::vector& selected, size_t stoneCount, + std::vector distTable, uint8_t junkWieght, bool addFixed = true) { + int32_t totalWeight = junkWieght; // Start with our Junk Weight, the natural chance of a junk hint + + for (size_t c = 0; c < distTable.size(); + c++) { // Gather the weights of each distribution and, if it's the first pass, apply fixed hints + totalWeight += distTable[c].weight; // Note that PlaceHints will set weights of distributions to zero if it + // can't place anything from them + if (addFixed) { + selected[c] += distTable[c].fixed; + stoneCount -= distTable[c].fixed * distTable[c].copies; + } + } + int32_t currentWeight = getRandomWeight(totalWeight); // Initialise with the first random weight from 1 to the + // total. + while (stoneCount > 0 && + totalWeight > + 0) { // Loop until we run out of stones or have no TotalWeight. 0 totalWeight means junkWeight is 0 + // and that all weights have been 0'd out for another reason, and skips to placing all junk hints + for (size_t distribution = 0; distribution < distTable.size(); distribution++) { + currentWeight -= + distTable[distribution] + .weight; // go over each distribution, subtracting the weight each time. Once we reach zero or less, + if (currentWeight <= 0) { // tell the system to make 1 of that hint, unless not enough stones remain + if (stoneCount >= distTable[distribution].copies && distTable[distribution].copies > 0) { + selected[distribution] += 1; // if we have enough stones, and copies are not zero, assign 1 to this + // hint type, remove the stones, and break + stoneCount -= distTable[distribution].copies; + break; // This leaves the whole for loop + } else { // If we don't have the stones, or copies is 0 despite there being the wieght to trigger a hit, + // temporerally set wieght to zero + totalWeight -= + distTable[distribution] + .weight; // Unlike PlaceHint, distTable is passed by value here, making this temporary + distTable[distribution].weight = + 0; // this is so we can still roll this hint type if more stones free up later + break; + } + } + } + // if there's still weight then it's junk, as the leftover weight is junkWeight + if (currentWeight > + 0) { // zero TotalWeight breaks the while loop and hits the fallback, so skipping this is fine in that case + selected[selected.size() - 1] += 1; + stoneCount -= 1; + } + currentWeight = getRandomWeight(totalWeight); + } + // if stones are left, assign junk to every remaining stone as a fallback. + if (stoneCount > 0) { + selected[selected.size() - 1] += stoneCount; + } +} + +uint8_t PlaceHints(std::vector& selectedHints, std::vector& distTable) { + auto ctx = Rando::Context::GetInstance(); + uint8_t curSlot = 0; + for (HintDistributionSetting distribution : distTable) { + std::vector hintTypePool = FilterHintability(ctx->allLocations, distribution.filter); + for (uint8_t numHint = 0; numHint < selectedHints[curSlot]; numHint++) { + hintTypePool = FilterHintability(hintTypePool); + SPDLOG_DEBUG("Attempting to make hint of type: " + + StaticData::hintTypeNames[distribution.type].GetEnglish(MF_CLEAN) + "\n"); + RandomizerCheck hintedLocation = RC_UNKNOWN_CHECK; + + hintedLocation = CreateRandomHint(hintTypePool, distribution.copies, distribution.type, distribution.name); + + if (hintedLocation == RC_UNKNOWN_CHECK) { // if hint failed to place, remove all wieght and copies then + // return the number of stones to redistribute + uint8_t hintsToRemove = (selectedHints[curSlot] - numHint) * distribution.copies; + selectedHints[curSlot] = 0; // as distTable is passed by refernce here, these changes stick for the rest + // of this seed generation + distTable[curSlot].copies = 0; // and prevent future distribution from choosing this slot + distTable[curSlot].weight = 0; + return hintsToRemove; + } + if (Rando::StaticData::GetLocation(hintedLocation)->IsDungeon()) { + distribution.dungeonLimit -= 1; + if (distribution.dungeonLimit == 0) { + FilterFromPool(hintTypePool, FilterOverworldLocations); + } + } + } + selectedHints[curSlot] = 0; + curSlot += 1; + } + CreateJunkHints(selectedHints[selectedHints.size() - 1]); + return 0; } void CreateStoneHints() { - auto ctx = Rando::Context::GetInstance(); - SPDLOG_DEBUG("\nNOW CREATING HINTS\n"); - const HintSetting& hintSetting = hintSettingTable[ctx->GetOption(RSK_HINT_DISTRIBUTION).Get()]; - std::vector distTable = hintSetting.distTable; + auto ctx = Rando::Context::GetInstance(); + SPDLOG_DEBUG("\nNOW CREATING HINTS\n"); + const HintSetting& hintSetting = hintSettingTable[ctx->GetOption(RSK_HINT_DISTRIBUTION).Get()]; + std::vector distTable = hintSetting.distTable; - // Apply impa's song exclusions when zelda is skipped - if(ctx->GetOption(RSK_SKIP_CHILD_ZELDA)){ - ctx->GetItemLocation(RC_SONG_FROM_IMPA)->SetHintAccesible(); - } - - // Add 'always' location hints - std::vector alwaysHintLocations = {}; - if (hintSetting.alwaysCopies > 0) { - if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_GREG)){ - // If we have Rainbow Bridge set to Greg and the greg hint isn't useful, add a hint for where Greg is - // Do we really need this with the greg hint? - auto gregLocations = FilterFromPool(ctx->allLocations, [ctx](const RandomizerCheck loc) { - return ( - (ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == RG_GREG_RUPEE)) && - ctx->GetItemLocation(loc)->IsHintable() && - !(ctx->GetOption(RSK_GREG_HINT) && (IsReachableWithout({RC_GREG_HINT}, loc, true))); - }); - if (gregLocations.size() > 0){ - alwaysHintLocations.push_back(gregLocations[0]); - } + // Apply impa's song exclusions when zelda is skipped + if (ctx->GetOption(RSK_SKIP_CHILD_ZELDA)) { + ctx->GetItemLocation(RC_SONG_FROM_IMPA)->SetHintAccesible(); } - for (auto& hint : conditionalAlwaysHints) { - RandomizerCheck loc = hint.first; - if (hint.second() && ctx->GetItemLocation(loc)->IsHintable()) { - alwaysHintLocations.push_back(loc); + // Add 'always' location hints + std::vector alwaysHintLocations = {}; + if (hintSetting.alwaysCopies > 0) { + if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_GREG)) { + // If we have Rainbow Bridge set to Greg and the greg hint isn't useful, add a hint for where Greg is + // Do we really need this with the greg hint? + auto gregLocations = FilterFromPool(ctx->allLocations, [ctx](const RandomizerCheck loc) { + return ((ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == RG_GREG_RUPEE)) && + ctx->GetItemLocation(loc)->IsHintable() && + !(ctx->GetOption(RSK_GREG_HINT) && (IsReachableWithout({ RC_GREG_HINT }, loc, true))); + }); + if (gregLocations.size() > 0) { + alwaysHintLocations.push_back(gregLocations[0]); + } + } + + for (auto& hint : conditionalAlwaysHints) { + RandomizerCheck loc = hint.first; + if (hint.second() && ctx->GetItemLocation(loc)->IsHintable()) { + alwaysHintLocations.push_back(loc); + } + } + + for (RandomizerCheck location : alwaysHintLocations) { + CreateHint(location, hintSetting.alwaysCopies, HINT_TYPE_ITEM, "Always"); } } - for (RandomizerCheck location : alwaysHintLocations) { - CreateHint(location, hintSetting.alwaysCopies, HINT_TYPE_ITEM, "Always"); + // Add 'trial' location hints + if (ctx->GetOption(RSK_GANONS_TRIALS).IsNot(RO_GANONS_TRIALS_SKIP)) { + CreateTrialHints(hintSetting.trialCopies); } - } - //Add 'trial' location hints - if (ctx->GetOption(RSK_GANONS_TRIALS).IsNot(RO_GANONS_TRIALS_SKIP)) { - CreateTrialHints(hintSetting.trialCopies); - } - - size_t totalStones = GetEmptyGossipStones().size(); - std::vector selectedHints = {}; - for (size_t c=0; c < distTable.size(); c++){ + size_t totalStones = GetEmptyGossipStones().size(); + std::vector selectedHints = {}; + for (size_t c = 0; c < distTable.size(); c++) { + selectedHints.push_back(0); + } selectedHints.push_back(0); - } - selectedHints.push_back(0); - DistributeHints(selectedHints, totalStones, distTable, hintSetting.junkWeight); - - while(totalStones != 0){ - totalStones = PlaceHints(selectedHints, distTable); - if (totalStones != 0){ - DistributeHints(selectedHints, totalStones, distTable, hintSetting.junkWeight, false); - } - } + DistributeHints(selectedHints, totalStones, distTable, hintSetting.junkWeight); - //Getting gossip stone locations temporarily sets one location to not be reachable. - //Call the function one last time to get rid of false positives on locations not - //being reachable. - ReachabilitySearch({}); + while (totalStones != 0) { + totalStones = PlaceHints(selectedHints, distTable); + if (totalStones != 0) { + DistributeHints(selectedHints, totalStones, distTable, hintSetting.junkWeight, false); + } + } + + // Getting gossip stone locations temporarily sets one location to not be reachable. + // Call the function one last time to get rid of false positives on locations not + // being reachable. + ReachabilitySearch({}); } -std::vector FindItemsAndMarkHinted(std::vector items, std::vector hintChecks){ - std::vector locations = {}; - auto ctx = Rando::Context::GetInstance(); - for (size_t c = 0; c < items.size(); c++){ - std::vector found = FilterFromPool(ctx->allLocations, [items, ctx, c](const RandomizerCheck loc) { - return ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == items[c];}); - if (found.size() > 0){ - locations.push_back(found[0]); - //RANDOTODO make the called functions of this always return true if empty hintChecks are provided - if (!ctx->GetItemLocation(found[0])->IsAHintAccessible() && (hintChecks.size() == 0 || IsReachableWithout(hintChecks, found[0],true))){ - ctx->GetItemLocation(found[0])->SetHintAccesible(); - } - } else { - locations.push_back(RC_UNKNOWN_CHECK); +std::vector FindItemsAndMarkHinted(std::vector items, + std::vector hintChecks) { + std::vector locations = {}; + auto ctx = Rando::Context::GetInstance(); + for (size_t c = 0; c < items.size(); c++) { + std::vector found = + FilterFromPool(ctx->allLocations, [items, ctx, c](const RandomizerCheck loc) { + return ctx->GetItemLocation(loc)->GetPlacedRandomizerGet() == items[c]; + }); + if (found.size() > 0) { + locations.push_back(found[0]); + // RANDOTODO make the called functions of this always return true if empty hintChecks are provided + if (!ctx->GetItemLocation(found[0])->IsAHintAccessible() && + (hintChecks.size() == 0 || IsReachableWithout(hintChecks, found[0], true))) { + ctx->GetItemLocation(found[0])->SetHintAccesible(); + } + } else { + locations.push_back(RC_UNKNOWN_CHECK); + } } - } - return locations; + return locations; } void CreateChildAltarHint() { - auto ctx = Rando::Context::GetInstance(); - if (!ctx->GetHint(RH_ALTAR_CHILD)->IsEnabled() && ctx->GetOption(RSK_TOT_ALTAR_HINT)){ - std::vector stoneLocs = {}; - //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}); + auto ctx = Rando::Context::GetInstance(); + if (!ctx->GetHint(RH_ALTAR_CHILD)->IsEnabled() && ctx->GetOption(RSK_TOT_ALTAR_HINT)) { + std::vector stoneLocs = {}; + // 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) { + 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)); } - std::vector stoneAreas = {}; - for (auto loc : stoneLocs){ - 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)); - } } void CreateAdultAltarHint() { - auto ctx = Rando::Context::GetInstance(); - 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 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}, - {RC_ALTAR_HINT_ADULT}); - } + auto ctx = Rando::Context::GetInstance(); + 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 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 }, + { RC_ALTAR_HINT_ADULT }); + } + } + std::vector medallionAreas = {}; + for (auto loc : medallionLocs) { + 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)); } - std::vector medallionAreas = {}; - for (auto loc : medallionLocs){ - 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)); - } } -void CreateStaticHintFromData(RandomizerHint hint, StaticHintInfo staticData){ - auto ctx = Rando::Context::GetInstance(); - if (!ctx->GetHint(hint)->IsEnabled()){ - OptionValue& option = ctx->GetOption(staticData.setting); - if ((std::holds_alternative(staticData.condition) && option.Is(std::get(staticData.condition))) || - (std::holds_alternative(staticData.condition) && option.Is(std::get(staticData.condition)))){ +void CreateStaticHintFromData(RandomizerHint hint, StaticHintInfo staticData) { + auto ctx = Rando::Context::GetInstance(); + if (!ctx->GetHint(hint)->IsEnabled()) { + OptionValue& option = ctx->GetOption(staticData.setting); + if ((std::holds_alternative(staticData.condition) && option.Is(std::get(staticData.condition))) || + (std::holds_alternative(staticData.condition) && + option.Is(std::get(staticData.condition)))) { - std::vector locations = {}; - if (staticData.targetItems.size() > 0){ - locations = FindItemsAndMarkHinted(staticData.targetItems, staticData.hintChecks); - } else { - for(auto check: staticData.targetChecks){ - locations.push_back(check); + std::vector locations = {}; + if (staticData.targetItems.size() > 0) { + locations = FindItemsAndMarkHinted(staticData.targetItems, staticData.hintChecks); + } else { + for (auto check : staticData.targetChecks) { + locations.push_back(check); + } + } + std::vector areas = {}; + for (auto loc : locations) { + ctx->GetItemLocation(loc)->SetHintAccesible(); + if (ctx->GetItemLocation(loc)->GetAreas().empty()) { + // If we get to here then it means a location got through with no area assignment, which means + // something went wrong elsewhere. + SPDLOG_DEBUG("Attempted to hint location with no areas: "); + SPDLOG_DEBUG(Rando::StaticData::GetLocation(loc)->GetName()); + // assert(false); + areas.push_back(RA_NONE); + } else { + areas.push_back(ctx->GetItemLocation(loc)->GetRandomArea()); + } + } + // hintKeys are defaulted to in the hint object and do not need to be specified + ctx->AddHint(hint, + Hint(hint, staticData.type, {}, locations, areas, {}, staticData.yourPocket, staticData.num)); } - } - std::vector areas = {}; - for (auto loc : locations){ - ctx->GetItemLocation(loc)->SetHintAccesible(); - if (ctx->GetItemLocation(loc)->GetAreas().empty()){ - //If we get to here then it means a location got through with no area assignment, which means something went wrong elsewhere. - SPDLOG_DEBUG("Attempted to hint location with no areas: "); - SPDLOG_DEBUG(Rando::StaticData::GetLocation(loc)->GetName()); - //assert(false); - areas.push_back(RA_NONE); - } else { - areas.push_back(ctx->GetItemLocation(loc)->GetRandomArea()); - } - } - //hintKeys are defaulted to in the hint object and do not need to be specified - ctx->AddHint(hint, Hint(hint, staticData.type, {}, locations, areas, {}, staticData.yourPocket, staticData.num)); } - } } void CreateStaticItemHint(RandomizerHint hintKey, std::vector hintTextKeys, - std::vector items, std::vector hintChecks, bool yourPocket = false) { - //RANDOTODO choose area in case there are multiple - auto ctx = Rando::Context::GetInstance(); - std::vector locations = FindItemsAndMarkHinted(items, hintChecks); - std::vector areas = {}; - for (auto loc : locations){ - areas.push_back(ctx->GetItemLocation(loc)->GetRandomArea()); - } - ctx->AddHint(hintKey, Hint(hintKey, HINT_TYPE_AREA, hintTextKeys, locations, areas, {}, yourPocket)); -} - -void CreateGanondorfJoke(){ - auto ctx = Rando::Context::GetInstance(); - if (!ctx->GetHint(RH_GANONDORF_JOKE)->IsEnabled()){ - ctx->AddHint(RH_GANONDORF_JOKE, Hint(RH_GANONDORF_JOKE, HINT_TYPE_HINT_KEY, {GetRandomGanonJoke()})); - } -} - -void CreateGanondorfHint(){ - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_GANONDORF_HINT) && !ctx->GetHint(RH_GANONDORF_HINT)->IsEnabled()){ - if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) { - CreateStaticItemHint(RH_GANONDORF_HINT, {RHT_GANONDORF_HINT_LA_ONLY, RHT_GANONDORF_HINT_MS_ONLY, RHT_GANONDORF_HINT_LA_AND_MS}, - {RG_LIGHT_ARROWS, RG_MASTER_SWORD}, {RC_GANONDORF_HINT}, true); - } else { - CreateStaticItemHint(RH_GANONDORF_HINT, {RHT_GANONDORF_HINT_LA_ONLY}, {RG_LIGHT_ARROWS}, {RC_GANONDORF_HINT}, true); + std::vector items, std::vector hintChecks, + bool yourPocket = false) { + // RANDOTODO choose area in case there are multiple + auto ctx = Rando::Context::GetInstance(); + std::vector locations = FindItemsAndMarkHinted(items, hintChecks); + std::vector areas = {}; + for (auto loc : locations) { + areas.push_back(ctx->GetItemLocation(loc)->GetRandomArea()); } - } + ctx->AddHint(hintKey, Hint(hintKey, HINT_TYPE_AREA, hintTextKeys, locations, areas, {}, yourPocket)); } -void CreateStaticHints(){ - CreateChildAltarHint(); - CreateAdultAltarHint(); - CreateGanondorfJoke(); - CreateGanondorfHint(); - for (auto[hint, staticData] : StaticData::staticHintInfoMap){ - CreateStaticHintFromData(hint, staticData); - } +void CreateGanondorfJoke() { + auto ctx = Rando::Context::GetInstance(); + if (!ctx->GetHint(RH_GANONDORF_JOKE)->IsEnabled()) { + ctx->AddHint(RH_GANONDORF_JOKE, Hint(RH_GANONDORF_JOKE, HINT_TYPE_HINT_KEY, { GetRandomGanonJoke() })); + } } -void CreateAllHints(){ - auto ctx = Rando::Context::GetInstance(); - - CreateStaticHints(); - - if (ctx->GetOption(RSK_GOSSIP_STONE_HINTS).IsNot(RO_GOSSIP_STONES_NONE)) { - SPDLOG_INFO("Creating Hints..."); - CreateStoneHints(); - SPDLOG_INFO("Creating Hints Done"); - } +void CreateGanondorfHint() { + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_GANONDORF_HINT) && !ctx->GetHint(RH_GANONDORF_HINT)->IsEnabled()) { + if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) { + CreateStaticItemHint( + RH_GANONDORF_HINT, + { RHT_GANONDORF_HINT_LA_ONLY, RHT_GANONDORF_HINT_MS_ONLY, RHT_GANONDORF_HINT_LA_AND_MS }, + { RG_LIGHT_ARROWS, RG_MASTER_SWORD }, { RC_GANONDORF_HINT }, true); + } else { + CreateStaticItemHint(RH_GANONDORF_HINT, { RHT_GANONDORF_HINT_LA_ONLY }, { RG_LIGHT_ARROWS }, + { RC_GANONDORF_HINT }, true); + } + } +} + +void CreateStaticHints() { + CreateChildAltarHint(); + CreateAdultAltarHint(); + CreateGanondorfJoke(); + CreateGanondorfHint(); + for (auto [hint, staticData] : StaticData::staticHintInfoMap) { + CreateStaticHintFromData(hint, staticData); + } +} + +void CreateAllHints() { + auto ctx = Rando::Context::GetInstance(); + + CreateStaticHints(); + + if (ctx->GetOption(RSK_GOSSIP_STONE_HINTS).IsNot(RO_GOSSIP_STONES_NONE)) { + SPDLOG_INFO("Creating Hints..."); + CreateStoneHints(); + SPDLOG_INFO("Creating Hints Done"); + } } diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index 5cbfb9a9e..a04a7d65c 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -13,1364 +13,1254 @@ std::vector ItemPool = {}; std::vector PendingJunkPool = {}; const std::array dungeonRewards = { - RG_KOKIRI_EMERALD, - RG_GORON_RUBY, - RG_ZORA_SAPPHIRE, - RG_FOREST_MEDALLION, - RG_FIRE_MEDALLION, - RG_WATER_MEDALLION, - RG_SPIRIT_MEDALLION, - RG_SHADOW_MEDALLION, - RG_LIGHT_MEDALLION, + RG_KOKIRI_EMERALD, RG_GORON_RUBY, RG_ZORA_SAPPHIRE, RG_FOREST_MEDALLION, RG_FIRE_MEDALLION, + RG_WATER_MEDALLION, RG_SPIRIT_MEDALLION, RG_SHADOW_MEDALLION, RG_LIGHT_MEDALLION, }; const std::array JunkPoolItems = { - RG_BOMBS_5, - RG_BOMBS_10, - RG_BOMBS_20, - RG_DEKU_NUTS_5, - RG_DEKU_STICK_1, - RG_DEKU_SEEDS_30, - RG_RECOVERY_HEART, - RG_ARROWS_5, - RG_ARROWS_10, - RG_ARROWS_30, - RG_BLUE_RUPEE, - RG_RED_RUPEE, - RG_PURPLE_RUPEE, - RG_HUGE_RUPEE, - RG_DEKU_NUTS_10, - RG_ICE_TRAP, + RG_BOMBS_5, RG_BOMBS_10, RG_BOMBS_20, RG_DEKU_NUTS_5, RG_DEKU_STICK_1, RG_DEKU_SEEDS_30, + RG_RECOVERY_HEART, RG_ARROWS_5, RG_ARROWS_10, RG_ARROWS_30, RG_BLUE_RUPEE, RG_RED_RUPEE, + RG_PURPLE_RUPEE, RG_HUGE_RUPEE, RG_DEKU_NUTS_10, RG_ICE_TRAP, }; const std::array alwaysItems = { - RG_BIGGORON_SWORD, - RG_BOOMERANG, - RG_LENS_OF_TRUTH, - RG_MEGATON_HAMMER, - RG_IRON_BOOTS, - RG_GORON_TUNIC, - RG_ZORA_TUNIC, - RG_HOVER_BOOTS, - RG_MIRROR_SHIELD, - RG_STONE_OF_AGONY, - RG_FIRE_ARROWS, - RG_ICE_ARROWS, - RG_LIGHT_ARROWS, - RG_DINS_FIRE, - RG_FARORES_WIND, - RG_NAYRUS_LOVE, - RG_GREG_RUPEE, - RG_PROGRESSIVE_HOOKSHOT, //2 progressive hookshots - RG_PROGRESSIVE_HOOKSHOT, - RG_DEKU_SHIELD, - RG_HYLIAN_SHIELD, - RG_PROGRESSIVE_STRENGTH, //3 progressive strength upgrades - RG_PROGRESSIVE_STRENGTH, - RG_PROGRESSIVE_STRENGTH, - RG_PROGRESSIVE_SCALE, //2 progressive scales - RG_PROGRESSIVE_SCALE, - RG_PROGRESSIVE_BOW, //3 progressive Bows - RG_PROGRESSIVE_BOW, - RG_PROGRESSIVE_BOW, - RG_PROGRESSIVE_SLINGSHOT, //3 progressive bullet bags - RG_PROGRESSIVE_SLINGSHOT, - RG_PROGRESSIVE_SLINGSHOT, - RG_PROGRESSIVE_BOMB_BAG, //3 progressive bomb bags - RG_PROGRESSIVE_BOMB_BAG, - RG_PROGRESSIVE_BOMB_BAG, - RG_PROGRESSIVE_WALLET, //2 progressive wallets - RG_PROGRESSIVE_WALLET, - RG_PROGRESSIVE_MAGIC_METER, //2 progressive magic meters - RG_PROGRESSIVE_MAGIC_METER, - RG_DOUBLE_DEFENSE, - RG_PROGRESSIVE_STICK_UPGRADE, //2 stick upgrades - RG_PROGRESSIVE_STICK_UPGRADE, - RG_PROGRESSIVE_NUT_UPGRADE, //2 nut upgrades - RG_PROGRESSIVE_NUT_UPGRADE, - RG_RECOVERY_HEART, //6 recovery hearts - RG_RECOVERY_HEART, - RG_RECOVERY_HEART, - RG_RECOVERY_HEART, - RG_RECOVERY_HEART, - RG_RECOVERY_HEART, - RG_BOMBS_5, //2 - RG_BOMBS_5, - RG_BOMBS_10, - RG_BOMBS_20, - RG_ARROWS_5, - RG_ARROWS_10, //5 - RG_ARROWS_10, - RG_ARROWS_10, - RG_TREASURE_GAME_HEART, -}; -const std::array easyItems = { - RG_BIGGORON_SWORD, - RG_KOKIRI_SWORD, - RG_MASTER_SWORD, - RG_BOOMERANG, - RG_LENS_OF_TRUTH, - RG_MEGATON_HAMMER, - RG_IRON_BOOTS, - RG_GORON_TUNIC, - RG_ZORA_TUNIC, - RG_HOVER_BOOTS, - RG_MIRROR_SHIELD, - RG_FIRE_ARROWS, - RG_LIGHT_ARROWS, - RG_DINS_FIRE, - RG_PROGRESSIVE_HOOKSHOT, - RG_PROGRESSIVE_STRENGTH, - RG_PROGRESSIVE_SCALE, - RG_PROGRESSIVE_WALLET, - RG_PROGRESSIVE_MAGIC_METER, - RG_PROGRESSIVE_STICK_UPGRADE, - RG_PROGRESSIVE_NUT_UPGRADE, - RG_PROGRESSIVE_BOW, - RG_PROGRESSIVE_SLINGSHOT, - RG_PROGRESSIVE_BOMB_BAG, - RG_DOUBLE_DEFENSE, - RG_HEART_CONTAINER, //16 Heart Containers - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_PIECE_OF_HEART, //3 heart pieces - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, -}; -const std::array normalItems = { - RG_PIECE_OF_HEART, //35 pieces of heart - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_PIECE_OF_HEART, - RG_HEART_CONTAINER, //8 heart containers - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, - RG_HEART_CONTAINER, -}; -const std::array DT_Vanilla = { - RG_RECOVERY_HEART, - RG_RECOVERY_HEART, -}; -const std::array DT_MQ = { - RG_DEKU_SHIELD, - RG_DEKU_SHIELD, - RG_PURPLE_RUPEE, -}; -const std::array DC_Vanilla = { - RG_RED_RUPEE, -}; -const std::array DC_MQ = { - RG_HYLIAN_SHIELD, - RG_BLUE_RUPEE, -}; -const std::array JB_MQ = { - RG_DEKU_NUTS_5, - RG_DEKU_NUTS_5, - RG_DEKU_NUTS_5, - RG_DEKU_NUTS_5, - RG_RECOVERY_HEART, - RG_DEKU_SHIELD, - RG_DEKU_STICK_1, -}; -const std::array FoT_Vanilla = { - RG_RECOVERY_HEART, - RG_ARROWS_10, - RG_ARROWS_30, -}; -const std::array FoT_MQ = { - RG_ARROWS_5, -}; -const std::array FiT_Vanilla = { - RG_HUGE_RUPEE, -}; -const std::array FiT_MQ = { - RG_BOMBS_20, - RG_HYLIAN_SHIELD, -}; -const std::array SpT_Vanilla = { - RG_DEKU_SHIELD, - RG_DEKU_SHIELD, - RG_RECOVERY_HEART, - RG_BOMBS_20, -}; -const std::array SpT_MQ = { - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_ARROWS_30, -}; -const std::array ShT_Vanilla = { - RG_ARROWS_30, -}; -const std::array ShT_MQ = { - RG_ARROWS_5, - RG_ARROWS_5, - RG_RED_RUPEE, -}; -const std::array BW_Vanilla = { - RG_RECOVERY_HEART, - RG_BOMBS_10, - RG_HUGE_RUPEE, - RG_DEKU_NUTS_5, - RG_DEKU_NUTS_10, - RG_DEKU_SHIELD, - RG_HYLIAN_SHIELD, -}; -const std::array GTG_Vanilla = { - RG_ARROWS_30, - RG_ARROWS_30, - RG_ARROWS_30, - RG_HUGE_RUPEE, -}; -const std::array GTG_MQ = { - RG_TREASURE_GAME_GREEN_RUPEE, - RG_TREASURE_GAME_GREEN_RUPEE, - RG_ARROWS_10, - RG_GREEN_RUPEE, - RG_PURPLE_RUPEE, -}; -const std::array GC_Vanilla = { - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_ARROWS_30, -}; -const std::array GC_MQ = { - RG_ARROWS_10, - RG_ARROWS_10, - RG_BOMBS_5, - RG_RED_RUPEE, - RG_RECOVERY_HEART, -}; -const std::array normalBottles = { - RG_EMPTY_BOTTLE, - RG_BOTTLE_WITH_MILK, - RG_BOTTLE_WITH_RED_POTION, - RG_BOTTLE_WITH_GREEN_POTION, - RG_BOTTLE_WITH_BLUE_POTION, - RG_BOTTLE_WITH_FAIRY, - RG_BOTTLE_WITH_FISH, - RG_BOTTLE_WITH_BUGS, - RG_BOTTLE_WITH_POE, - RG_BOTTLE_WITH_BIG_POE, - RG_BOTTLE_WITH_BLUE_FIRE, -}; -const std::array normalRupees = { - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_HUGE_RUPEE, - RG_HUGE_RUPEE, - RG_HUGE_RUPEE, -}; -const std::array shopsanityRupees = { - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_RED_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_PURPLE_RUPEE, - RG_HUGE_RUPEE, - RG_HUGE_RUPEE, - RG_HUGE_RUPEE, - RG_HUGE_RUPEE, - RG_HUGE_RUPEE, - RG_HUGE_RUPEE, -}; -const std::array dekuScrubItems = { - RG_DEKU_NUTS_5, - RG_DEKU_NUTS_5, - RG_DEKU_NUTS_5, - RG_DEKU_NUTS_5, - RG_DEKU_NUTS_5, - RG_DEKU_STICK_1, - RG_BOMBS_5, - RG_BOMBS_5, - RG_BOMBS_5, - RG_BOMBS_5, - RG_BOMBS_5, - RG_RECOVERY_HEART, - RG_RECOVERY_HEART, - RG_RECOVERY_HEART, - RG_RECOVERY_HEART, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, - RG_BLUE_RUPEE, -}; -const std::array songList = { - RG_ZELDAS_LULLABY, - RG_EPONAS_SONG, - RG_SUNS_SONG, - RG_SARIAS_SONG, - RG_SONG_OF_TIME, - RG_SONG_OF_STORMS, - RG_MINUET_OF_FOREST, - RG_PRELUDE_OF_LIGHT, - RG_BOLERO_OF_FIRE, - RG_SERENADE_OF_WATER, - RG_NOCTURNE_OF_SHADOW, - RG_REQUIEM_OF_SPIRIT, -}; -const std::array tradeItems = { - RG_POCKET_EGG, - //RG_POCKET_CUCCO, - RG_COJIRO, - RG_ODD_MUSHROOM, - RG_POACHERS_SAW, - RG_BROKEN_SWORD, - RG_PRESCRIPTION, - RG_EYEBALL_FROG, - RG_EYEDROPS, - RG_CLAIM_CHECK, -}; - -void AddItemToPool(std::vector& pool, RandomizerGet item, size_t count /*= 1*/) { - pool.insert(pool.end(), count, item); -} - -template -static void AddItemsToPool(std::vector& toPool, const FromPool& fromPool) { - AddElementsToPool(toPool, fromPool); -} - -static void AddItemToMainPool(const RandomizerGet item, size_t count = 1) { - ItemPool.insert(ItemPool.end(), count, item); -} - -static void AddRandomBottle(std::vector& bottlePool) { - AddItemToMainPool(RandomElement(bottlePool, true)); -} - -RandomizerGet GetJunkItem() { - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_MAYHEM) || ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_ONSLAUGHT)) { - return RG_ICE_TRAP; - } else if (ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_EXTRA)) { - return RandomElement(JunkPoolItems); - } - //Ice Trap is the last item in JunkPoolItems, so subtract 1 to never hit that index - uint8_t idx = Random(0, JunkPoolItems.size() - 1); - return JunkPoolItems[idx]; -} - -static RandomizerGet GetPendingJunkItem() { - if (PendingJunkPool.empty()) { - return GetJunkItem(); - } - - return RandomElement(PendingJunkPool, true); -} - -//Replace junk items in the pool with pending junk -static void ReplaceMaxItem(const RandomizerGet itemToReplace, int max) { - int itemCount = 0; - for (size_t i = 0; i < ItemPool.size(); i++) { - if (ItemPool[i] == itemToReplace) { - if (itemCount >= max) { - ItemPool[i] = GetJunkItem(); - } - itemCount++; - } - } -} - -void PlaceJunkInExcludedLocation(const RandomizerCheck il) { - //place a non-advancement item in this location - auto ctx = Rando::Context::GetInstance(); - for (size_t i = 0; i < ItemPool.size(); i++) { - if (!Rando::StaticData::RetrieveItem(ItemPool[i]).IsAdvancement()) { - ctx->PlaceItemInLocation(il, ItemPool[i]); - ItemPool.erase(ItemPool.begin() + i); - return; - } - } - SPDLOG_ERROR("ERROR: No Junk to Place!!!"); -} - -static void PlaceVanillaMapsAndCompasses() { - auto ctx = Rando::Context::GetInstance(); - for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { - dungeon->PlaceVanillaMap(); - dungeon->PlaceVanillaCompass(); - } -} - -static void PlaceVanillaSmallKeys() { - auto ctx = Rando::Context::GetInstance(); - for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { - dungeon->PlaceVanillaSmallKeys(); - } -} - -static void PlaceVanillaBossKeys() { - auto ctx = Rando::Context::GetInstance(); - for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { - dungeon->PlaceVanillaBossKey(); - } -} - -static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, bool dungeonActive) { - if (!(overworldActive || dungeonActive)) { - return; - } - for (RandomizerCheck rc : ctx->GetLocations(ctx->allLocations, rctype)) { - auto loc = Rando::StaticData::GetLocation(rc); - - // If item is in the overworld and shuffled, add its item to the pool - if (loc->IsOverworld()) { - if (overworldActive) { - AddItemToMainPool(loc->GetVanillaItem()); - } - } else { - if (dungeonActive) { - // If the same in MQ and vanilla, add. - RandomizerCheckQuest currentQuest = loc->GetQuest(); - if (currentQuest == RCQUEST_BOTH) { - AddItemToMainPool(loc->GetVanillaItem()); - } else { - // Check if current item's dungeon is vanilla or MQ, and only add if quest corresponds to it. - SceneID itemScene = loc->GetScene(); - - if (itemScene >= SCENE_DEKU_TREE && itemScene <= SCENE_GERUDO_TRAINING_GROUND) { - bool isMQ = ctx->GetDungeon(itemScene)->IsMQ(); - - if ((isMQ && currentQuest == RCQUEST_MQ) || (!isMQ && currentQuest == RCQUEST_VANILLA)) { - AddItemToMainPool(loc->GetVanillaItem()); - } - } - } - } - } - } -} - -static void SetScarceItemPool() { - ReplaceMaxItem(RG_PROGRESSIVE_BOMBCHUS, 3); - ReplaceMaxItem(RG_BOMBCHU_5, 1); - ReplaceMaxItem(RG_BOMBCHU_10, 2); - ReplaceMaxItem(RG_BOMBCHU_20, 0); - ReplaceMaxItem(RG_PROGRESSIVE_MAGIC_METER, 1); - ReplaceMaxItem(RG_DOUBLE_DEFENSE, 0); - ReplaceMaxItem(RG_PROGRESSIVE_STICK_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG) ? 2 : 1); - ReplaceMaxItem(RG_PROGRESSIVE_NUT_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG) ? 2 : 1); - ReplaceMaxItem(RG_PROGRESSIVE_BOW, 2); - ReplaceMaxItem(RG_PROGRESSIVE_SLINGSHOT, 2); - ReplaceMaxItem(RG_PROGRESSIVE_BOMB_BAG, 2); - ReplaceMaxItem(RG_HEART_CONTAINER, 0); -} - -static void SetMinimalItemPool() { - auto ctx = Rando::Context::GetInstance(); - ReplaceMaxItem(RG_PROGRESSIVE_BOMBCHUS, 1); - ReplaceMaxItem(RG_BOMBCHU_5, 1); - ReplaceMaxItem(RG_BOMBCHU_10, 0); - ReplaceMaxItem(RG_BOMBCHU_20, 0); - ReplaceMaxItem(RG_NAYRUS_LOVE, 0); - ReplaceMaxItem(RG_PROGRESSIVE_MAGIC_METER, 1); - ReplaceMaxItem(RG_DOUBLE_DEFENSE, 0); - ReplaceMaxItem(RG_PROGRESSIVE_STICK_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG) ? 1 : 0); - ReplaceMaxItem(RG_PROGRESSIVE_NUT_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG) ? 1 : 0); - ReplaceMaxItem(RG_PROGRESSIVE_BOW, 1); - ReplaceMaxItem(RG_PROGRESSIVE_SLINGSHOT, 1); - ReplaceMaxItem(RG_PROGRESSIVE_BOMB_BAG, 1); - ReplaceMaxItem(RG_PIECE_OF_HEART, 0); - // Need an extra heart container when starting with 1 heart to be able to reach 3 hearts - ReplaceMaxItem(RG_HEART_CONTAINER, (ctx->GetOption(RSK_STARTING_HEARTS).Get() == 18)? 1 : 0); -} - -void GenerateItemPool() { - //RANDOTODO proper removal of items not in pool or logically relevant instead of dummy checks. - auto ctx = Rando::Context::GetInstance(); - ItemPool.clear(); - PendingJunkPool.clear(); - - //Initialize ice trap models to always major items - ctx->possibleIceTrapModels = { - RG_MIRROR_SHIELD, + RG_BIGGORON_SWORD, RG_BOOMERANG, RG_LENS_OF_TRUTH, RG_MEGATON_HAMMER, RG_IRON_BOOTS, + RG_GORON_TUNIC, + RG_ZORA_TUNIC, RG_HOVER_BOOTS, + RG_MIRROR_SHIELD, RG_STONE_OF_AGONY, - RG_DINS_FIRE, - RG_FARORES_WIND, - RG_NAYRUS_LOVE, RG_FIRE_ARROWS, RG_ICE_ARROWS, RG_LIGHT_ARROWS, + RG_DINS_FIRE, + RG_FARORES_WIND, + RG_NAYRUS_LOVE, + RG_GREG_RUPEE, + RG_PROGRESSIVE_HOOKSHOT, // 2 progressive hookshots + RG_PROGRESSIVE_HOOKSHOT, + RG_DEKU_SHIELD, + RG_HYLIAN_SHIELD, + RG_PROGRESSIVE_STRENGTH, // 3 progressive strength upgrades + RG_PROGRESSIVE_STRENGTH, + RG_PROGRESSIVE_STRENGTH, + RG_PROGRESSIVE_SCALE, // 2 progressive scales + RG_PROGRESSIVE_SCALE, + RG_PROGRESSIVE_BOW, // 3 progressive Bows + RG_PROGRESSIVE_BOW, + RG_PROGRESSIVE_BOW, + RG_PROGRESSIVE_SLINGSHOT, // 3 progressive bullet bags + RG_PROGRESSIVE_SLINGSHOT, + RG_PROGRESSIVE_SLINGSHOT, + RG_PROGRESSIVE_BOMB_BAG, // 3 progressive bomb bags + RG_PROGRESSIVE_BOMB_BAG, + RG_PROGRESSIVE_BOMB_BAG, + RG_PROGRESSIVE_WALLET, // 2 progressive wallets + RG_PROGRESSIVE_WALLET, + RG_PROGRESSIVE_MAGIC_METER, // 2 progressive magic meters + RG_PROGRESSIVE_MAGIC_METER, RG_DOUBLE_DEFENSE, - RG_CLAIM_CHECK, + RG_PROGRESSIVE_STICK_UPGRADE, // 2 stick upgrades + RG_PROGRESSIVE_STICK_UPGRADE, + RG_PROGRESSIVE_NUT_UPGRADE, // 2 nut upgrades + RG_PROGRESSIVE_NUT_UPGRADE, + RG_RECOVERY_HEART, // 6 recovery hearts + RG_RECOVERY_HEART, + RG_RECOVERY_HEART, + RG_RECOVERY_HEART, + RG_RECOVERY_HEART, + RG_RECOVERY_HEART, + RG_BOMBS_5, // 2 + RG_BOMBS_5, + RG_BOMBS_10, + RG_BOMBS_20, + RG_ARROWS_5, + RG_ARROWS_10, // 5 + RG_ARROWS_10, + RG_ARROWS_10, + RG_TREASURE_GAME_HEART, +}; +const std::array easyItems = { + RG_BIGGORON_SWORD, + RG_KOKIRI_SWORD, + RG_MASTER_SWORD, + RG_BOOMERANG, + RG_LENS_OF_TRUTH, + RG_MEGATON_HAMMER, + RG_IRON_BOOTS, + RG_GORON_TUNIC, + RG_ZORA_TUNIC, + RG_HOVER_BOOTS, + RG_MIRROR_SHIELD, + RG_FIRE_ARROWS, + RG_LIGHT_ARROWS, + RG_DINS_FIRE, RG_PROGRESSIVE_HOOKSHOT, RG_PROGRESSIVE_STRENGTH, - RG_PROGRESSIVE_BOMB_BAG, + RG_PROGRESSIVE_SCALE, + RG_PROGRESSIVE_WALLET, + RG_PROGRESSIVE_MAGIC_METER, + RG_PROGRESSIVE_STICK_UPGRADE, + RG_PROGRESSIVE_NUT_UPGRADE, RG_PROGRESSIVE_BOW, RG_PROGRESSIVE_SLINGSHOT, - RG_PROGRESSIVE_WALLET, - RG_PROGRESSIVE_SCALE, - RG_PROGRESSIVE_MAGIC_METER, - }; - //Check song shuffle and dungeon reward shuffle just for ice traps - if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_ANYWHERE)) { - //Push item ids for songs - ctx->possibleIceTrapModels.push_back(RG_ZELDAS_LULLABY); - ctx->possibleIceTrapModels.push_back(RG_EPONAS_SONG); - ctx->possibleIceTrapModels.push_back(RG_SARIAS_SONG); - ctx->possibleIceTrapModels.push_back(RG_SUNS_SONG); - ctx->possibleIceTrapModels.push_back(RG_SONG_OF_TIME); - ctx->possibleIceTrapModels.push_back(RG_SONG_OF_STORMS); - ctx->possibleIceTrapModels.push_back(RG_MINUET_OF_FOREST); - ctx->possibleIceTrapModels.push_back(RG_BOLERO_OF_FIRE); - ctx->possibleIceTrapModels.push_back(RG_SERENADE_OF_WATER); - ctx->possibleIceTrapModels.push_back(RG_REQUIEM_OF_SPIRIT); - ctx->possibleIceTrapModels.push_back(RG_NOCTURNE_OF_SHADOW); - ctx->possibleIceTrapModels.push_back(RG_PRELUDE_OF_LIGHT); - } - if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_ANYWHERE)) { - //Push item ids for dungeon rewards - ctx->possibleIceTrapModels.push_back(RG_KOKIRI_EMERALD); - ctx->possibleIceTrapModels.push_back(RG_GORON_RUBY); - ctx->possibleIceTrapModels.push_back(RG_ZORA_SAPPHIRE); - ctx->possibleIceTrapModels.push_back(RG_FOREST_MEDALLION); - ctx->possibleIceTrapModels.push_back(RG_FIRE_MEDALLION); - ctx->possibleIceTrapModels.push_back(RG_WATER_MEDALLION); - ctx->possibleIceTrapModels.push_back(RG_SPIRIT_MEDALLION); - ctx->possibleIceTrapModels.push_back(RG_SHADOW_MEDALLION); - ctx->possibleIceTrapModels.push_back(RG_LIGHT_MEDALLION); - } + RG_PROGRESSIVE_BOMB_BAG, + RG_DOUBLE_DEFENSE, + RG_HEART_CONTAINER, // 16 Heart Containers + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_PIECE_OF_HEART, // 3 heart pieces + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, +}; +const std::array normalItems = { + // 35 pieces of heart + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + RG_PIECE_OF_HEART, + // 8 heart containers + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, + RG_HEART_CONTAINER, +}; +const std::array DT_Vanilla = { + RG_RECOVERY_HEART, + RG_RECOVERY_HEART, +}; +const std::array DT_MQ = { + RG_DEKU_SHIELD, + RG_DEKU_SHIELD, + RG_PURPLE_RUPEE, +}; +const std::array DC_Vanilla = { + RG_RED_RUPEE, +}; +const std::array DC_MQ = { + RG_HYLIAN_SHIELD, + RG_BLUE_RUPEE, +}; +const std::array JB_MQ = { + RG_DEKU_NUTS_5, RG_DEKU_NUTS_5, RG_DEKU_NUTS_5, RG_DEKU_NUTS_5, RG_RECOVERY_HEART, RG_DEKU_SHIELD, RG_DEKU_STICK_1, +}; +const std::array FoT_Vanilla = { + RG_RECOVERY_HEART, + RG_ARROWS_10, + RG_ARROWS_30, +}; +const std::array FoT_MQ = { + RG_ARROWS_5, +}; +const std::array FiT_Vanilla = { + RG_HUGE_RUPEE, +}; +const std::array FiT_MQ = { + RG_BOMBS_20, + RG_HYLIAN_SHIELD, +}; +const std::array SpT_Vanilla = { + RG_DEKU_SHIELD, + RG_DEKU_SHIELD, + RG_RECOVERY_HEART, + RG_BOMBS_20, +}; +const std::array SpT_MQ = { + RG_PURPLE_RUPEE, + RG_PURPLE_RUPEE, + RG_ARROWS_30, +}; +const std::array ShT_Vanilla = { + RG_ARROWS_30, +}; +const std::array ShT_MQ = { + RG_ARROWS_5, + RG_ARROWS_5, + RG_RED_RUPEE, +}; +const std::array BW_Vanilla = { + RG_RECOVERY_HEART, RG_BOMBS_10, RG_HUGE_RUPEE, RG_DEKU_NUTS_5, RG_DEKU_NUTS_10, RG_DEKU_SHIELD, RG_HYLIAN_SHIELD, +}; +const std::array GTG_Vanilla = { + RG_ARROWS_30, + RG_ARROWS_30, + RG_ARROWS_30, + RG_HUGE_RUPEE, +}; +const std::array GTG_MQ = { + RG_TREASURE_GAME_GREEN_RUPEE, RG_TREASURE_GAME_GREEN_RUPEE, RG_ARROWS_10, RG_GREEN_RUPEE, RG_PURPLE_RUPEE, +}; +const std::array GC_Vanilla = { + RG_BLUE_RUPEE, + RG_BLUE_RUPEE, + RG_BLUE_RUPEE, + RG_ARROWS_30, +}; +const std::array GC_MQ = { + RG_ARROWS_10, RG_ARROWS_10, RG_BOMBS_5, RG_RED_RUPEE, RG_RECOVERY_HEART, +}; +const std::array normalBottles = { + RG_EMPTY_BOTTLE, + RG_BOTTLE_WITH_MILK, + RG_BOTTLE_WITH_RED_POTION, + RG_BOTTLE_WITH_GREEN_POTION, + RG_BOTTLE_WITH_BLUE_POTION, + RG_BOTTLE_WITH_FAIRY, + RG_BOTTLE_WITH_FISH, + RG_BOTTLE_WITH_BUGS, + RG_BOTTLE_WITH_POE, + RG_BOTTLE_WITH_BIG_POE, + RG_BOTTLE_WITH_BLUE_FIRE, +}; +const std::array normalRupees = { + RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, + RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, + RG_BLUE_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, + RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, + RG_PURPLE_RUPEE, RG_HUGE_RUPEE, RG_HUGE_RUPEE, RG_HUGE_RUPEE, +}; +const std::array shopsanityRupees = { + RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, + RG_RED_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, RG_RED_RUPEE, + RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, + RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_PURPLE_RUPEE, RG_HUGE_RUPEE, RG_HUGE_RUPEE, + RG_HUGE_RUPEE, RG_HUGE_RUPEE, RG_HUGE_RUPEE, RG_HUGE_RUPEE, +}; +const std::array dekuScrubItems = { + RG_DEKU_NUTS_5, RG_DEKU_NUTS_5, RG_DEKU_NUTS_5, RG_DEKU_NUTS_5, RG_DEKU_NUTS_5, + RG_DEKU_STICK_1, RG_BOMBS_5, RG_BOMBS_5, RG_BOMBS_5, RG_BOMBS_5, + RG_BOMBS_5, RG_RECOVERY_HEART, RG_RECOVERY_HEART, RG_RECOVERY_HEART, RG_RECOVERY_HEART, + RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, RG_BLUE_RUPEE, +}; +const std::array songList = { + RG_ZELDAS_LULLABY, RG_EPONAS_SONG, RG_SUNS_SONG, RG_SARIAS_SONG, + RG_SONG_OF_TIME, RG_SONG_OF_STORMS, RG_MINUET_OF_FOREST, RG_PRELUDE_OF_LIGHT, + RG_BOLERO_OF_FIRE, RG_SERENADE_OF_WATER, RG_NOCTURNE_OF_SHADOW, RG_REQUIEM_OF_SPIRIT, +}; +const std::array tradeItems = { + RG_POCKET_EGG, + // RG_POCKET_CUCCO, + RG_COJIRO, + RG_ODD_MUSHROOM, + RG_POACHERS_SAW, + RG_BROKEN_SWORD, + RG_PRESCRIPTION, + RG_EYEBALL_FROG, + RG_EYEDROPS, + RG_CLAIM_CHECK, +}; - if (ctx->GetOption(RSK_TRIFORCE_HUNT)) { - ctx->possibleIceTrapModels.push_back(RG_TRIFORCE_PIECE); - AddItemToMainPool(RG_TRIFORCE_PIECE, (ctx->GetOption(RSK_TRIFORCE_HUNT_PIECES_TOTAL).Get() + 1)); - ctx->PlaceItemInLocation(RC_TRIFORCE_COMPLETED, RG_TRIFORCE); // Win condition - ctx->PlaceItemInLocation(RC_GANON, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_GANON, RG_TRIFORCE); // Win condition - } +void AddItemToPool(std::vector& pool, RandomizerGet item, size_t count /*= 1*/) { + pool.insert(pool.end(), count, item); +} - //Fixed item locations - ctx->PlaceItemInLocation(RC_HC_ZELDAS_LETTER, RG_ZELDAS_LETTER); +template static void AddItemsToPool(std::vector& toPool, const FromPool& fromPool) { + AddElementsToPool(toPool, fromPool); +} - if (ctx->GetOption(RSK_SHUFFLE_KOKIRI_SWORD)) { - AddItemToMainPool(RG_KOKIRI_SWORD); - ctx->possibleIceTrapModels.push_back(RG_KOKIRI_SWORD); - } else { - if (!ctx->GetOption(RSK_STARTING_KOKIRI_SWORD)) { - ctx->PlaceItemInLocation(RC_KF_KOKIRI_SWORD_CHEST, RG_KOKIRI_SWORD, false, true); - } - } +static void AddItemToMainPool(const RandomizerGet item, size_t count = 1) { + ItemPool.insert(ItemPool.end(), count, item); +} - if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) { - AddItemToMainPool(RG_MASTER_SWORD); - ctx->possibleIceTrapModels.push_back(RG_MASTER_SWORD); - } else { - if (!ctx->GetOption(RSK_STARTING_MASTER_SWORD)) { - ctx->PlaceItemInLocation(RC_TOT_MASTER_SWORD, RG_MASTER_SWORD, false, true); - } - } +static void AddRandomBottle(std::vector& bottlePool) { + AddItemToMainPool(RandomElement(bottlePool, true)); +} - if (ctx->GetOption(RSK_SHUFFLE_WEIRD_EGG)) { - AddItemToMainPool(RG_WEIRD_EGG); - ctx->possibleIceTrapModels.push_back(RG_WEIRD_EGG); - } else { - ctx->PlaceItemInLocation(RC_HC_MALON_EGG, RG_WEIRD_EGG, false, true); - } - - if (ctx->GetOption(RSK_SHUFFLE_OCARINA)) { - AddItemToMainPool(RG_PROGRESSIVE_OCARINA, 2); - if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { - AddItemToPool(PendingJunkPool, RG_PROGRESSIVE_OCARINA); +RandomizerGet GetJunkItem() { + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_MAYHEM) || + ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_ONSLAUGHT)) { + return RG_ICE_TRAP; + } else if (ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_EXTRA)) { + return RandomElement(JunkPoolItems); } - ctx->possibleIceTrapModels.push_back(RG_PROGRESSIVE_OCARINA); - } else { - if (ctx->GetOption(RSK_STARTING_OCARINA).Is(RO_STARTING_OCARINA_OFF)) { - ctx->PlaceItemInLocation(RC_LW_GIFT_FROM_SARIA, RG_PROGRESSIVE_OCARINA, false, true); - ctx->PlaceItemInLocation(RC_HF_OCARINA_OF_TIME_ITEM, RG_PROGRESSIVE_OCARINA, false, true); - } else { - if (ctx->GetOption(RSK_STARTING_OCARINA).IsNot(RO_STARTING_OCARINA_TIME)) { - ctx->PlaceItemInLocation(RC_HF_OCARINA_OF_TIME_ITEM, RG_PROGRESSIVE_OCARINA, false, true); - } - } - } + // Ice Trap is the last item in JunkPoolItems, so subtract 1 to never hit that index + uint8_t idx = Random(0, JunkPoolItems.size() - 1); + return JunkPoolItems[idx]; +} - if (ctx->GetOption(RSK_SHUFFLE_OCARINA_BUTTONS)) { - AddItemToMainPool(RG_OCARINA_A_BUTTON); - AddItemToMainPool(RG_OCARINA_C_UP_BUTTON); - AddItemToMainPool(RG_OCARINA_C_DOWN_BUTTON); - AddItemToMainPool(RG_OCARINA_C_LEFT_BUTTON); - AddItemToMainPool(RG_OCARINA_C_RIGHT_BUTTON); - - ctx->possibleIceTrapModels.push_back(RG_OCARINA_A_BUTTON); - ctx->possibleIceTrapModels.push_back(RG_OCARINA_C_UP_BUTTON); - ctx->possibleIceTrapModels.push_back(RG_OCARINA_C_DOWN_BUTTON); - ctx->possibleIceTrapModels.push_back(RG_OCARINA_C_LEFT_BUTTON); - ctx->possibleIceTrapModels.push_back(RG_OCARINA_C_RIGHT_BUTTON); - } - - if (ctx->GetOption(RSK_SKELETON_KEY)) { - AddItemToMainPool(RG_SKELETON_KEY); - } - - if (ctx->GetOption(RSK_SHUFFLE_SWIM)) { - AddItemToMainPool(RG_PROGRESSIVE_SCALE); - } - - if (ctx->GetOption(RSK_SHUFFLE_BEEHIVES)) { - //32 total beehive locations - AddItemToMainPool(RG_RED_RUPEE, 23); - AddItemToMainPool(RG_BLUE_RUPEE, 9); - } - - if (ctx->GetOption(RSK_SHUFFLE_COWS)) { - //9 total cow locations - for (uint8_t i = 0; i < 9; i++) { - AddItemToMainPool(GetJunkItem()); +static RandomizerGet GetPendingJunkItem() { + if (PendingJunkPool.empty()) { + return GetJunkItem(); } - //extra location for Jabu MQ - if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsMQ()) { - AddItemToMainPool(GetJunkItem()); - } - } - // Shuffle Pots - bool overworldPotsActive = ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_OVERWORLD) || - 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); - PlaceItemsForType(RCTYPE_POT, overworldPotsActive, dungeonPotsActive); - - auto fsMode = ctx->GetOption(RSK_FISHSANITY); - if (fsMode.IsNot(RO_FISHSANITY_OFF)) { - if (fsMode.Is(RO_FISHSANITY_POND) || fsMode.Is(RO_FISHSANITY_BOTH)) { - // 17 max child pond fish - uint8_t pondCt = ctx->GetOption(RSK_FISHSANITY_POND_COUNT).Get(); - for (uint8_t i = 0; i < pondCt; i++) { - AddItemToMainPool(GetJunkItem()); - } + return RandomElement(PendingJunkPool, true); +} - if (ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)) { - // 16 max adult pond fish, have to reduce to 16 if every fish is enabled - if (pondCt > 16) - pondCt = 16; - for (uint8_t i = 0; i < pondCt; i++) { - AddItemToMainPool(GetJunkItem()); +// Replace junk items in the pool with pending junk +static void ReplaceMaxItem(const RandomizerGet itemToReplace, int max) { + int itemCount = 0; + for (size_t i = 0; i < ItemPool.size(); i++) { + if (ItemPool[i] == itemToReplace) { + if (itemCount >= max) { + ItemPool[i] = RG_NONE; + } + itemCount++; } - } - } - // 9 grotto fish, 5 zora's domain fish - if (fsMode.Is(RO_FISHSANITY_OVERWORLD) || fsMode.Is(RO_FISHSANITY_BOTH)) { - for (uint8_t i = 0; i < Rando::StaticData::GetOverworldFishLocations().size(); i++) - AddItemToMainPool(GetJunkItem()); } +} - if (fsMode.Is(RO_FISHSANITY_HYRULE_LOACH)) { - AddItemToMainPool(RG_PURPLE_RUPEE); - } else { - ctx->PlaceItemInLocation(RC_LH_HYRULE_LOACH, RG_PURPLE_RUPEE, false, true); - } - } - - if (ctx->GetOption(RSK_SHUFFLE_FISHING_POLE)) { - AddItemToMainPool(RG_FISHING_POLE); - ctx->possibleIceTrapModels.push_back(RG_FISHING_POLE); - } - - if (ctx->GetOption(RSK_INFINITE_UPGRADES).Is(RO_INF_UPGRADES_PROGRESSIVE)) { - AddItemToMainPool(RG_PROGRESSIVE_BOMB_BAG); - AddItemToMainPool(RG_PROGRESSIVE_BOW); - AddItemToMainPool(RG_PROGRESSIVE_NUT_UPGRADE); - AddItemToMainPool(RG_PROGRESSIVE_SLINGSHOT); - AddItemToMainPool(RG_PROGRESSIVE_STICK_UPGRADE); - AddItemToMainPool(RG_PROGRESSIVE_MAGIC_METER); - AddItemToMainPool(RG_PROGRESSIVE_WALLET); - } - - if (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_BEANS_ONLY) || - ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL)) { - AddItemToMainPool(RG_MAGIC_BEAN_PACK); - if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { - AddItemToPool(PendingJunkPool, RG_MAGIC_BEAN_PACK); - } - ctx->possibleIceTrapModels.push_back(RG_MAGIC_BEAN_PACK); - } else { - ctx->PlaceItemInLocation(RC_ZR_MAGIC_BEAN_SALESMAN, RG_MAGIC_BEAN, false, true); - } - - if (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) || - ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL)) { - if (/*!ProgressiveGoronSword TODO: Implement Progressive Goron Sword*/true) { - AddItemToMainPool(RG_GIANTS_KNIFE); - } - if (ctx->GetOption(RSK_BOMBCHU_BAG)) { - AddItemToMainPool(RG_PROGRESSIVE_BOMBCHUS); - } else { - AddItemToMainPool(RG_BOMBCHU_10); - } - } else { - ctx->PlaceItemInLocation(RC_KAK_GRANNYS_SHOP, RG_BLUE_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_GC_MEDIGORON, RG_GIANTS_KNIFE, false, true); - ctx->PlaceItemInLocation(RC_WASTELAND_BOMBCHU_SALESMAN, RG_BOMBCHU_10, false, true); - } - - if (ctx->GetOption(RSK_SHUFFLE_FROG_SONG_RUPEES)) { - AddItemToMainPool(RG_PURPLE_RUPEE, 5); - } else { - ctx->PlaceItemInLocation(RC_ZR_FROGS_ZELDAS_LULLABY, RG_PURPLE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_FROGS_EPONAS_SONG, RG_PURPLE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_FROGS_SARIAS_SONG, RG_PURPLE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_FROGS_SUNS_SONG, RG_PURPLE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_FROGS_SONG_OF_TIME, RG_PURPLE_RUPEE, false, true); - } - - if (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE)) { - AddItemToMainPool(RG_POCKET_EGG); - AddItemToMainPool(RG_COJIRO); - AddItemToMainPool(RG_ODD_MUSHROOM); - AddItemToMainPool(RG_ODD_POTION); - AddItemToMainPool(RG_POACHERS_SAW); - AddItemToMainPool(RG_BROKEN_SWORD); - AddItemToMainPool(RG_PRESCRIPTION); - AddItemToMainPool(RG_EYEBALL_FROG); - AddItemToMainPool(RG_EYEDROPS); - } - AddItemToMainPool(RG_CLAIM_CHECK); - - if (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS)) { - AddItemToMainPool(RG_TREASURE_GAME_SMALL_KEY, 6); // 6 individual keys - } else if (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK)) { - AddItemToMainPool(RG_TREASURE_GAME_SMALL_KEY); // 1 key which will behave as a pack of 6 - } else { - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, RG_GREEN_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, RG_GREEN_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_1, RG_TREASURE_GAME_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_2, RG_TREASURE_GAME_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_3, RG_TREASURE_GAME_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, RG_TREASURE_GAME_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, RG_TREASURE_GAME_SMALL_KEY, false, true); - }; - - if (ctx->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OFF)) { - for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, RCTYPE_SKULL_TOKEN)) { - ctx->PlaceItemInLocation(loc, RG_GOLD_SKULLTULA_TOKEN, false, true); - } - } else if (ctx->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_DUNGEONS)) { - for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, RCTYPE_SKULL_TOKEN)) { - if (Rando::StaticData::GetLocation(loc)->IsOverworld()) { - ctx->PlaceItemInLocation((RandomizerCheck)loc, RG_GOLD_SKULLTULA_TOKEN, false, true); - } else { - AddItemToMainPool(RG_GOLD_SKULLTULA_TOKEN); - } - } - } else if (ctx->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OVERWORLD)) { - for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, RCTYPE_SKULL_TOKEN)) { - if (Rando::StaticData::GetLocation(loc)->IsDungeon()) { - ctx->PlaceItemInLocation((RandomizerCheck)loc, RG_GOLD_SKULLTULA_TOKEN, false, true); - } else { - AddItemToMainPool(RG_GOLD_SKULLTULA_TOKEN); - } - } - } else { - AddItemToMainPool(RG_GOLD_SKULLTULA_TOKEN, 100); - } - - if (ctx->GetOption(RSK_SHUFFLE_100_GS_REWARD)) { - if (ctx->GetOption(RSK_SHUFFLE_TOKENS).IsNot(RO_TOKENSANITY_OFF) && ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { - AddItemToPool(PendingJunkPool, RG_GOLD_SKULLTULA_TOKEN, 10); - } - AddItemToMainPool(RG_HUGE_RUPEE); - } else { - ctx->PlaceItemInLocation(RC_KAK_100_GOLD_SKULLTULA_REWARD, RG_HUGE_RUPEE, false, true); - } - - if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS)) { - AddItemToMainPool(RG_GOHMA_SOUL); - AddItemToMainPool(RG_KING_DODONGO_SOUL); - AddItemToMainPool(RG_BARINADE_SOUL); - AddItemToMainPool(RG_PHANTOM_GANON_SOUL); - AddItemToMainPool(RG_VOLVAGIA_SOUL); - AddItemToMainPool(RG_MORPHA_SOUL); - AddItemToMainPool(RG_BONGO_BONGO_SOUL); - AddItemToMainPool(RG_TWINROVA_SOUL); - - ctx->possibleIceTrapModels.push_back(RG_GOHMA_SOUL); - ctx->possibleIceTrapModels.push_back(RG_KING_DODONGO_SOUL); - ctx->possibleIceTrapModels.push_back(RG_BARINADE_SOUL); - ctx->possibleIceTrapModels.push_back(RG_PHANTOM_GANON_SOUL); - ctx->possibleIceTrapModels.push_back(RG_VOLVAGIA_SOUL); - ctx->possibleIceTrapModels.push_back(RG_MORPHA_SOUL); - ctx->possibleIceTrapModels.push_back(RG_BONGO_BONGO_SOUL); - ctx->possibleIceTrapModels.push_back(RG_TWINROVA_SOUL); - if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).Is(RO_BOSS_SOULS_ON_PLUS_GANON)) { - AddItemToMainPool(RG_GANON_SOUL); - ctx->possibleIceTrapModels.push_back(RG_GANON_SOUL); - } - } - - if (ctx->GetOption(RSK_SHUFFLE_CHILD_WALLET)) { - AddItemToMainPool(RG_PROGRESSIVE_WALLET); - } - - if (ctx->GetOption(RSK_INCLUDE_TYCOON_WALLET)) { - AddItemToMainPool(RG_PROGRESSIVE_WALLET); - } - - if (ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG)) { - AddItemToMainPool(RG_PROGRESSIVE_STICK_UPGRADE); - } - - if (ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG)) { - AddItemToMainPool(RG_PROGRESSIVE_NUT_UPGRADE); - } - - if (ctx->GetOption(RSK_BOMBCHU_BAG)) { - AddItemToMainPool(RG_PROGRESSIVE_BOMBCHUS, 5); - } else { - AddItemToMainPool(RG_BOMBCHU_5); - AddItemToMainPool(RG_BOMBCHU_10, 3); - AddItemToMainPool(RG_BOMBCHU_20); - } - - //Ice Traps - AddItemToMainPool(RG_ICE_TRAP); - if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla()) { - AddItemToMainPool(RG_ICE_TRAP); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { - AddItemToMainPool(RG_ICE_TRAP, 4); - } - - //Gerudo Fortress - if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE)) { - ctx->PlaceItemInLocation(RC_GF_NORTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true); - ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); - ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true); - ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); - } else if (ctx->GetOption(RSK_GERUDO_KEYS).IsNot(RO_GERUDO_KEYS_VANILLA)) { - if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST)) { - AddItemToMainPool(RG_GERUDO_FORTRESS_SMALL_KEY); - ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); - ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true); - 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) && 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++) { - AddItemToMainPool(GetJunkItem()); +void PlaceJunkInExcludedLocation(const RandomizerCheck il) { + // place a non-advancement item in this location + auto ctx = Rando::Context::GetInstance(); + for (size_t i = 0; i < ItemPool.size(); i++) { + if (!Rando::StaticData::RetrieveItem(ItemPool[i]).IsAdvancement()) { + ctx->PlaceItemInLocation(il, ItemPool[i]); + ItemPool.erase(ItemPool.begin() + i); + return; } - } else { - AddItemToMainPool(RG_GERUDO_FORTRESS_SMALL_KEY, 4); - } } - 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) && ctx->GetOption(RSK_KEYRINGS) ) { - AddItemToPool(PendingJunkPool, RG_GERUDO_FORTRESS_KEY_RING); - } else { - AddItemToPool(PendingJunkPool, RG_GERUDO_FORTRESS_SMALL_KEY); - } - } - } else { - if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST)) { - ctx->PlaceItemInLocation(RC_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); - ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true); - ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); - } else { - ctx->PlaceItemInLocation(RC_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); - ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); - } - } + SPDLOG_ERROR("ERROR: No Junk to Place!!!"); +} - //Gerudo Membership Card - if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) && ctx->GetOption(RSK_GERUDO_FORTRESS).IsNot(RO_GF_CARPENTERS_FREE)) { - AddItemToMainPool(RG_GERUDO_MEMBERSHIP_CARD); - ctx->possibleIceTrapModels.push_back(RG_GERUDO_MEMBERSHIP_CARD); - } else if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { - AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD); - ctx->PlaceItemInLocation(RC_GF_GERUDO_MEMBERSHIP_CARD, RG_ICE_TRAP, false, true); - } else { - ctx->PlaceItemInLocation(RC_GF_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, false, true); - } - - //Keys - - //For key rings, need to add as many junk items as "missing" keys - if (ctx->GetOption(RSK_KEYRINGS).IsNot(RO_KEYRINGS_OFF)) { - uint8_t ringJunkAmt = 0; +static void PlaceVanillaMapsAndCompasses() { + auto ctx = Rando::Context::GetInstance(); for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { - if (dungeon->HasKeyRing()) { - ringJunkAmt += dungeon->GetSmallKeyCount() - 1; - } + dungeon->PlaceVanillaMap(); + dungeon->PlaceVanillaCompass(); } - for (uint8_t i = 0; i < ringJunkAmt; i++) { - AddItemToMainPool(GetJunkItem()); - } - } +} - if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { - if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { - AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD); +static void PlaceVanillaSmallKeys() { + auto ctx = Rando::Context::GetInstance(); + for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { + dungeon->PlaceVanillaSmallKeys(); + } +} + +static void PlaceVanillaBossKeys() { + auto ctx = Rando::Context::GetInstance(); + for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { + dungeon->PlaceVanillaBossKey(); + } +} + +static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, bool dungeonActive) { + if (!(overworldActive || dungeonActive)) { + return; + } + for (RandomizerCheck rc : ctx->GetLocations(ctx->allLocations, rctype)) { + auto loc = Rando::StaticData::GetLocation(rc); + + // If item is in the overworld and shuffled, add its item to the pool + if (loc->IsOverworld()) { + if (overworldActive) { + AddItemToMainPool(loc->GetVanillaItem()); + } + } else { + if (dungeonActive) { + // If the same in MQ and vanilla, add. + RandomizerCheckQuest currentQuest = loc->GetQuest(); + if (currentQuest == RCQUEST_BOTH) { + AddItemToMainPool(loc->GetVanillaItem()); + } else { + // Check if current item's dungeon is vanilla or MQ, and only add if quest corresponds to it. + SceneID itemScene = loc->GetScene(); + + if (itemScene >= SCENE_DEKU_TREE && itemScene <= SCENE_GERUDO_TRAINING_GROUND) { + bool isMQ = ctx->GetDungeon(itemScene)->IsMQ(); + + if ((isMQ && currentQuest == RCQUEST_MQ) || (!isMQ && currentQuest == RCQUEST_VANILLA)) { + AddItemToMainPool(loc->GetVanillaItem()); + } + } + } + } + } + } +} + +static void SetScarceItemPool() { + ReplaceMaxItem(RG_PROGRESSIVE_BOMBCHUS, 3); + ReplaceMaxItem(RG_BOMBCHU_5, 1); + ReplaceMaxItem(RG_BOMBCHU_10, 2); + ReplaceMaxItem(RG_BOMBCHU_20, 0); + ReplaceMaxItem(RG_PROGRESSIVE_MAGIC_METER, 1); + ReplaceMaxItem(RG_DOUBLE_DEFENSE, 0); + ReplaceMaxItem(RG_PROGRESSIVE_STICK_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG) ? 2 : 1); + ReplaceMaxItem(RG_PROGRESSIVE_NUT_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG) ? 2 : 1); + ReplaceMaxItem(RG_PROGRESSIVE_BOW, 2); + ReplaceMaxItem(RG_PROGRESSIVE_SLINGSHOT, 2); + ReplaceMaxItem(RG_PROGRESSIVE_BOMB_BAG, 2); + ReplaceMaxItem(RG_HEART_CONTAINER, 0); +} + +static void SetMinimalItemPool() { + auto ctx = Rando::Context::GetInstance(); + ReplaceMaxItem(RG_PROGRESSIVE_BOMBCHUS, 1); + ReplaceMaxItem(RG_BOMBCHU_5, 1); + ReplaceMaxItem(RG_BOMBCHU_10, 0); + ReplaceMaxItem(RG_BOMBCHU_20, 0); + ReplaceMaxItem(RG_NAYRUS_LOVE, 0); + ReplaceMaxItem(RG_PROGRESSIVE_MAGIC_METER, 1); + ReplaceMaxItem(RG_DOUBLE_DEFENSE, 0); + ReplaceMaxItem(RG_PROGRESSIVE_STICK_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG) ? 1 : 0); + ReplaceMaxItem(RG_PROGRESSIVE_NUT_UPGRADE, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG) ? 1 : 0); + ReplaceMaxItem(RG_PROGRESSIVE_BOW, 1); + ReplaceMaxItem(RG_PROGRESSIVE_SLINGSHOT, 1); + ReplaceMaxItem(RG_PROGRESSIVE_BOMB_BAG, 1); + ReplaceMaxItem(RG_PIECE_OF_HEART, 0); + // Need an extra heart container when starting with 1 heart to be able to reach 3 hearts + ReplaceMaxItem(RG_HEART_CONTAINER, (ctx->GetOption(RSK_STARTING_HEARTS).Get() == 18) ? 1 : 0); +} + +void GenerateItemPool() { + // RANDOTODO proper removal of items not in pool or logically relevant instead of dummy checks. + auto ctx = Rando::Context::GetInstance(); + ItemPool.clear(); + PendingJunkPool.clear(); + + // Initialize ice trap models to always major items + ctx->possibleIceTrapModels = { + RG_MIRROR_SHIELD, + RG_BOOMERANG, + RG_LENS_OF_TRUTH, + RG_MEGATON_HAMMER, + RG_IRON_BOOTS, + RG_HOVER_BOOTS, + RG_STONE_OF_AGONY, + RG_DINS_FIRE, + RG_FARORES_WIND, + RG_NAYRUS_LOVE, + RG_FIRE_ARROWS, + RG_ICE_ARROWS, + RG_LIGHT_ARROWS, + RG_DOUBLE_DEFENSE, + RG_CLAIM_CHECK, + RG_PROGRESSIVE_HOOKSHOT, + RG_PROGRESSIVE_STRENGTH, + RG_PROGRESSIVE_BOMB_BAG, + RG_PROGRESSIVE_BOW, + RG_PROGRESSIVE_SLINGSHOT, + RG_PROGRESSIVE_WALLET, + RG_PROGRESSIVE_SCALE, + RG_PROGRESSIVE_MAGIC_METER, + }; + // Check song shuffle and dungeon reward shuffle just for ice traps + if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_ANYWHERE)) { + // Push item ids for songs + ctx->possibleIceTrapModels.push_back(RG_ZELDAS_LULLABY); + ctx->possibleIceTrapModels.push_back(RG_EPONAS_SONG); + ctx->possibleIceTrapModels.push_back(RG_SARIAS_SONG); + ctx->possibleIceTrapModels.push_back(RG_SUNS_SONG); + ctx->possibleIceTrapModels.push_back(RG_SONG_OF_TIME); + ctx->possibleIceTrapModels.push_back(RG_SONG_OF_STORMS); + ctx->possibleIceTrapModels.push_back(RG_MINUET_OF_FOREST); + ctx->possibleIceTrapModels.push_back(RG_BOLERO_OF_FIRE); + ctx->possibleIceTrapModels.push_back(RG_SERENADE_OF_WATER); + ctx->possibleIceTrapModels.push_back(RG_REQUIEM_OF_SPIRIT); + ctx->possibleIceTrapModels.push_back(RG_NOCTURNE_OF_SHADOW); + ctx->possibleIceTrapModels.push_back(RG_PRELUDE_OF_LIGHT); + } + if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_ANYWHERE)) { + // Push item ids for dungeon rewards + ctx->possibleIceTrapModels.push_back(RG_KOKIRI_EMERALD); + ctx->possibleIceTrapModels.push_back(RG_GORON_RUBY); + ctx->possibleIceTrapModels.push_back(RG_ZORA_SAPPHIRE); + ctx->possibleIceTrapModels.push_back(RG_FOREST_MEDALLION); + ctx->possibleIceTrapModels.push_back(RG_FIRE_MEDALLION); + ctx->possibleIceTrapModels.push_back(RG_WATER_MEDALLION); + ctx->possibleIceTrapModels.push_back(RG_SPIRIT_MEDALLION); + ctx->possibleIceTrapModels.push_back(RG_SHADOW_MEDALLION); + ctx->possibleIceTrapModels.push_back(RG_LIGHT_MEDALLION); + } + + if (ctx->GetOption(RSK_TRIFORCE_HUNT)) { + ctx->possibleIceTrapModels.push_back(RG_TRIFORCE_PIECE); + AddItemToMainPool(RG_TRIFORCE_PIECE, (ctx->GetOption(RSK_TRIFORCE_HUNT_PIECES_TOTAL).Get() + 1)); + ctx->PlaceItemInLocation(RC_TRIFORCE_COMPLETED, RG_TRIFORCE); // Win condition + ctx->PlaceItemInLocation(RC_GANON, GetJunkItem(), false, true); + } else { + ctx->PlaceItemInLocation(RC_GANON, RG_TRIFORCE); // Win condition + } + + // Fixed item locations + ctx->PlaceItemInLocation(RC_HC_ZELDAS_LETTER, RG_ZELDAS_LETTER); + + if (ctx->GetOption(RSK_SHUFFLE_KOKIRI_SWORD)) { + AddItemToMainPool(RG_KOKIRI_SWORD); + ctx->possibleIceTrapModels.push_back(RG_KOKIRI_SWORD); + } else { + if (!ctx->GetOption(RSK_STARTING_KOKIRI_SWORD)) { + ctx->PlaceItemInLocation(RC_KF_KOKIRI_SWORD_CHEST, RG_KOKIRI_SWORD, false, true); + } + } + + if (ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) { + AddItemToMainPool(RG_MASTER_SWORD); + ctx->possibleIceTrapModels.push_back(RG_MASTER_SWORD); + } else { + if (!ctx->GetOption(RSK_STARTING_MASTER_SWORD)) { + ctx->PlaceItemInLocation(RC_TOT_MASTER_SWORD, RG_MASTER_SWORD, false, true); + } + } + + if (ctx->GetOption(RSK_SHUFFLE_WEIRD_EGG)) { + AddItemToMainPool(RG_WEIRD_EGG); + ctx->possibleIceTrapModels.push_back(RG_WEIRD_EGG); + } else { + ctx->PlaceItemInLocation(RC_HC_MALON_EGG, RG_WEIRD_EGG, false, true); + } + + if (ctx->GetOption(RSK_SHUFFLE_OCARINA)) { + AddItemToMainPool(RG_PROGRESSIVE_OCARINA, 2); + if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { + AddItemToPool(PendingJunkPool, RG_PROGRESSIVE_OCARINA); + } + ctx->possibleIceTrapModels.push_back(RG_PROGRESSIVE_OCARINA); + } else { + if (ctx->GetOption(RSK_STARTING_OCARINA).Is(RO_STARTING_OCARINA_OFF)) { + ctx->PlaceItemInLocation(RC_LW_GIFT_FROM_SARIA, RG_PROGRESSIVE_OCARINA, false, true); + ctx->PlaceItemInLocation(RC_HF_OCARINA_OF_TIME_ITEM, RG_PROGRESSIVE_OCARINA, false, true); + } else { + if (ctx->GetOption(RSK_STARTING_OCARINA).IsNot(RO_STARTING_OCARINA_TIME)) { + ctx->PlaceItemInLocation(RC_HF_OCARINA_OF_TIME_ITEM, RG_PROGRESSIVE_OCARINA, false, true); + } + } + } + + if (ctx->GetOption(RSK_SHUFFLE_OCARINA_BUTTONS)) { + AddItemToMainPool(RG_OCARINA_A_BUTTON); + AddItemToMainPool(RG_OCARINA_C_UP_BUTTON); + AddItemToMainPool(RG_OCARINA_C_DOWN_BUTTON); + AddItemToMainPool(RG_OCARINA_C_LEFT_BUTTON); + AddItemToMainPool(RG_OCARINA_C_RIGHT_BUTTON); + + ctx->possibleIceTrapModels.push_back(RG_OCARINA_A_BUTTON); + ctx->possibleIceTrapModels.push_back(RG_OCARINA_C_UP_BUTTON); + ctx->possibleIceTrapModels.push_back(RG_OCARINA_C_DOWN_BUTTON); + ctx->possibleIceTrapModels.push_back(RG_OCARINA_C_LEFT_BUTTON); + ctx->possibleIceTrapModels.push_back(RG_OCARINA_C_RIGHT_BUTTON); + } + + if (ctx->GetOption(RSK_SKELETON_KEY)) { + AddItemToMainPool(RG_SKELETON_KEY); + } + + if (ctx->GetOption(RSK_SHUFFLE_SWIM)) { + AddItemToMainPool(RG_PROGRESSIVE_SCALE); + } + + if (ctx->GetOption(RSK_SHUFFLE_BEEHIVES)) { + // 32 total beehive locations + AddItemToPool(PendingJunkPool, RG_RED_RUPEE, 23); + AddItemToPool(PendingJunkPool, RG_BLUE_RUPEE, 9); + } + + // Shuffle Pots + bool overworldPotsActive = ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_OVERWORLD) || + 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); + PlaceItemsForType(RCTYPE_POT, overworldPotsActive, dungeonPotsActive); + + // Shuffle Crates + bool overworldCratesActive = ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_OVERWORLD) || + ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL); + bool overworldNLCratesActive = ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NO_LOGIC) && + (ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_OVERWORLD) || + ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL)); + bool dungeonCratesActive = ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_DUNGEONS) || + ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL); + PlaceItemsForType(RCTYPE_CRATE, overworldCratesActive, dungeonCratesActive); + PlaceItemsForType(RCTYPE_NLCRATE, overworldNLCratesActive, dungeonCratesActive); + PlaceItemsForType(RCTYPE_SMALL_CRATE, overworldCratesActive, dungeonCratesActive); + + auto fsMode = ctx->GetOption(RSK_FISHSANITY); + if (fsMode.IsNot(RO_FISHSANITY_OFF)) { + if (fsMode.Is(RO_FISHSANITY_POND) || fsMode.Is(RO_FISHSANITY_BOTH)) { + // 17 max child pond fish + uint8_t pondCt = ctx->GetOption(RSK_FISHSANITY_POND_COUNT).Get(); + for (uint8_t i = 0; i < pondCt; i++) { + AddItemToMainPool(GetJunkItem()); + } + + if (ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)) { + // 16 max adult pond fish, have to reduce to 16 if every fish is enabled + if (pondCt > 16) + pondCt = 16; + for (uint8_t i = 0; i < pondCt; i++) { + AddItemToMainPool(GetJunkItem()); + } + } + } + // 9 grotto fish, 5 zora's domain fish + if (fsMode.Is(RO_FISHSANITY_OVERWORLD) || fsMode.Is(RO_FISHSANITY_BOTH)) { + for (uint8_t i = 0; i < Rando::StaticData::GetOverworldFishLocations().size(); i++) + AddItemToMainPool(GetJunkItem()); + } + + if (fsMode.Is(RO_FISHSANITY_HYRULE_LOACH)) { + AddItemToMainPool(RG_PURPLE_RUPEE); + } else { + ctx->PlaceItemInLocation(RC_LH_HYRULE_LOACH, RG_PURPLE_RUPEE, false, true); + } } if (ctx->GetOption(RSK_SHUFFLE_FISHING_POLE)) { - AddItemToPool(PendingJunkPool, RG_FISHING_POLE); + AddItemToMainPool(RG_FISHING_POLE); + ctx->possibleIceTrapModels.push_back(RG_FISHING_POLE); } - //Plentiful small keys - if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE) || ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON) || ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { - if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_BOTTOM_OF_THE_WELL_KEY_RING); - } else { - AddItemToPool(PendingJunkPool, RG_BOTTOM_OF_THE_WELL_SMALL_KEY); - } - if (ctx->GetDungeon(Rando::FOREST_TEMPLE)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_FOREST_TEMPLE_KEY_RING); - } else { - AddItemToPool(PendingJunkPool, RG_FOREST_TEMPLE_SMALL_KEY); - } - if (ctx->GetDungeon(Rando::FIRE_TEMPLE)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_FIRE_TEMPLE_KEY_RING); - } else { - AddItemToPool(PendingJunkPool, RG_FIRE_TEMPLE_SMALL_KEY); - } - if (ctx->GetDungeon(Rando::WATER_TEMPLE)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_WATER_TEMPLE_KEY_RING); - } else { - AddItemToPool(PendingJunkPool, RG_WATER_TEMPLE_SMALL_KEY); - } - if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_SPIRIT_TEMPLE_KEY_RING); - } else { - AddItemToPool(PendingJunkPool, RG_SPIRIT_TEMPLE_SMALL_KEY); - } - if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_SHADOW_TEMPLE_KEY_RING); - } else { - AddItemToPool(PendingJunkPool, RG_SHADOW_TEMPLE_SMALL_KEY); - } - if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_GERUDO_TRAINING_GROUND_KEY_RING); - } else { - AddItemToPool(PendingJunkPool, RG_GERUDO_TRAINING_GROUND_SMALL_KEY); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->HasKeyRing()) { - AddItemToPool(PendingJunkPool, RG_GANONS_CASTLE_KEY_RING); - } else { - AddItemToPool(PendingJunkPool, RG_GANONS_CASTLE_SMALL_KEY); - } + if (ctx->GetOption(RSK_INFINITE_UPGRADES).Is(RO_INF_UPGRADES_PROGRESSIVE)) { + AddItemToMainPool(RG_PROGRESSIVE_BOMB_BAG); + AddItemToMainPool(RG_PROGRESSIVE_BOW); + AddItemToMainPool(RG_PROGRESSIVE_NUT_UPGRADE); + AddItemToMainPool(RG_PROGRESSIVE_SLINGSHOT); + AddItemToMainPool(RG_PROGRESSIVE_STICK_UPGRADE); + AddItemToMainPool(RG_PROGRESSIVE_MAGIC_METER); + AddItemToMainPool(RG_PROGRESSIVE_WALLET); } - if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE) || ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON) || ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { - AddItemToPool(PendingJunkPool, RG_FOREST_TEMPLE_BOSS_KEY); - AddItemToPool(PendingJunkPool, RG_FIRE_TEMPLE_BOSS_KEY); - AddItemToPool(PendingJunkPool, RG_WATER_TEMPLE_BOSS_KEY); - AddItemToPool(PendingJunkPool, RG_SPIRIT_TEMPLE_BOSS_KEY); - AddItemToPool(PendingJunkPool, RG_SHADOW_TEMPLE_BOSS_KEY); - } - - if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANYWHERE) || ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANY_DUNGEON) || ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OVERWORLD)) { - AddItemToPool(PendingJunkPool, RG_GANONS_CASTLE_BOSS_KEY); - } - } - - if (ctx->GetOption(RSK_LOCK_OVERWORLD_DOORS)) { - AddItemToPool(ItemPool, RG_GUARD_HOUSE_KEY); - AddItemToPool(ItemPool, RG_MARKET_BAZAAR_KEY); - AddItemToPool(ItemPool, RG_MARKET_POTION_SHOP_KEY); - AddItemToPool(ItemPool, RG_MASK_SHOP_KEY); - AddItemToPool(ItemPool, RG_MARKET_SHOOTING_GALLERY_KEY); - AddItemToPool(ItemPool, RG_BOMBCHU_BOWLING_KEY); - AddItemToPool(ItemPool, RG_TREASURE_CHEST_GAME_BUILDING_KEY); - AddItemToPool(ItemPool, RG_BOMBCHU_SHOP_KEY); - AddItemToPool(ItemPool, RG_RICHARDS_HOUSE_KEY); - AddItemToPool(ItemPool, RG_ALLEY_HOUSE_KEY); - AddItemToPool(ItemPool, RG_KAK_BAZAAR_KEY); - AddItemToPool(ItemPool, RG_KAK_POTION_SHOP_KEY); - AddItemToPool(ItemPool, RG_BOSS_HOUSE_KEY); - AddItemToPool(ItemPool, RG_GRANNYS_POTION_SHOP_KEY); - AddItemToPool(ItemPool, RG_SKULLTULA_HOUSE_KEY); - AddItemToPool(ItemPool, RG_IMPAS_HOUSE_KEY); - AddItemToPool(ItemPool, RG_WINDMILL_KEY); - AddItemToPool(ItemPool, RG_KAK_SHOOTING_GALLERY_KEY); - AddItemToPool(ItemPool, RG_DAMPES_HUT_KEY); - AddItemToPool(ItemPool, RG_TALONS_HOUSE_KEY); - AddItemToPool(ItemPool, RG_STABLES_KEY); - AddItemToPool(ItemPool, RG_BACK_TOWER_KEY); - AddItemToPool(ItemPool, RG_HYLIA_LAB_KEY); - AddItemToPool(ItemPool, RG_FISHING_HOLE_KEY); - } - - //Shopsanity - if ( - ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF) || - ( - ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_SPECIFIC_COUNT) && - ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_ZERO_ITEMS) - ) - ) { - AddItemsToPool(ItemPool, normalRupees); - } else { - AddItemsToPool(ItemPool, shopsanityRupees); //Shopsanity gets extra large rupees - } - - // Shuffle Fairies - if (ctx->GetOption(RSK_SHUFFLE_FAIRIES)) { - for (auto rc : Rando::StaticData::GetOverworldFairyLocations()) { - AddItemToMainPool(GetJunkItem()); - } - // 8 extra for Ganon's Castle + 2 Dodongo's Cavern Gossip Stone + 3 Shadow Temple - int extra = 13; - extra += ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsVanilla() ? 0 : 2; - extra += ctx->GetDungeon(Rando::WATER_TEMPLE)->IsVanilla() ? 0 : 3; - extra += ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla() ? 2 : 1; - extra += ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla() ? 1 : 2; - extra += ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla() ? 1 : 0; - extra += ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla() ? 1 : 0; - extra += ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla() ? 1 : 0; - for (int i = 0; i < extra; i++) { - AddItemToMainPool(GetJunkItem()); - } - } - - //Scrubsanity - if (ctx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_ALL)) { - //Deku Tree - if (ctx->GetDungeon(Rando::DEKU_TREE)->IsMQ()) { - AddItemToMainPool(RG_DEKU_SHIELD); - } - - //Dodongos Cavern - AddItemToMainPool(RG_DEKU_STICK_1); - AddItemToMainPool(RG_DEKU_SHIELD); - if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ()) { - AddItemToMainPool(RG_RECOVERY_HEART); - } else { - AddItemToMainPool(RG_DEKU_NUTS_5); - } - - //Jabu Jabus Belly - if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsVanilla()) { - AddItemToMainPool(RG_DEKU_NUTS_5); - } - - //Ganons Castle - AddItemToMainPool(RG_BOMBS_5); - AddItemToMainPool(RG_RECOVERY_HEART); - AddItemToMainPool(RG_BLUE_RUPEE); - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ()) { - AddItemToMainPool(RG_DEKU_NUTS_5); - } - - //Overworld Scrubs - AddItemsToPool(ItemPool, dekuScrubItems); - - //Scrubs which sell seeds or arrows sell it based on age, this randomly assigns them - for (uint8_t i = 0; i < 7; i++) { - if (Random(0, 3)) { - AddItemToMainPool(RG_ARROWS_30); - } else { - AddItemToMainPool(RG_DEKU_SEEDS_30); - } - } - } - - 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); - PlaceItemsForType(RCTYPE_FREESTANDING, overworldFreeStandingActive, dungeonFreeStandingActive); - - AddItemsToPool(ItemPool, alwaysItems); - AddItemsToPool(ItemPool, dungeonRewards); - - //Dungeon pools - if (ctx->GetDungeon(Rando::DEKU_TREE)->IsMQ()) { - AddItemsToPool(ItemPool, DT_MQ); - } else { - AddItemsToPool(ItemPool, DT_Vanilla); - } - if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ()) { - AddItemsToPool(ItemPool, DC_MQ); - } else { - AddItemsToPool(ItemPool, DC_Vanilla); - } - if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsMQ()) { - AddItemsToPool(ItemPool, JB_MQ); - } - if (ctx->GetDungeon(Rando::FOREST_TEMPLE)->IsMQ()) { - AddItemsToPool(ItemPool, FoT_MQ); - } else { - AddItemsToPool(ItemPool, FoT_Vanilla); - } - if (ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsMQ()) { - AddItemsToPool(ItemPool, FiT_MQ); - } else { - AddItemsToPool(ItemPool, FiT_Vanilla); - } - if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsMQ()) { - AddItemsToPool(ItemPool, SpT_MQ); - } else { - AddItemsToPool(ItemPool, SpT_Vanilla); - } - if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsMQ()) { - AddItemsToPool(ItemPool, ShT_MQ); - } else { - AddItemsToPool(ItemPool, ShT_Vanilla); - } - if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla()) { - AddItemsToPool(ItemPool, BW_Vanilla); - } - if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsMQ()) { - AddItemsToPool(ItemPool, GTG_MQ); - } else { - AddItemsToPool(ItemPool, GTG_Vanilla); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ()) { - AddItemsToPool(ItemPool, GC_MQ); - } else { - AddItemsToPool(ItemPool, GC_Vanilla); - } - - uint8_t rutoBottles = 1; - if (ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN)) { - rutoBottles = 0; - } - - //Add 4 total bottles - uint8_t bottleCount = 4; - std::vector bottles; - bottles.assign(normalBottles.begin(), normalBottles.end()); - ctx->possibleIceTrapModels.push_back( - Rando::StaticData::RetrieveItem(RandomElement(bottles)).GetRandomizerGet()); // Get one random bottle type for ice traps - for (uint8_t i = 0; i < bottleCount; i++) { - if (i >= rutoBottles) { - if ((i == bottleCount - 1) && - (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) || - ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL))) { - AddItemToMainPool(RG_BOTTLE_WITH_BLUE_POTION); - } else { - AddRandomBottle(bottles); - } - } else { - AddItemToMainPool(RG_RUTOS_LETTER); - } - } - - //add extra songs only if song shuffle is anywhere - AddItemsToPool(ItemPool, songList); - if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_ANYWHERE) && ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { - AddItemsToPool(PendingJunkPool, songList); - } - - /*For item pool generation, dungeon items are either placed in their vanilla - | location, or added to the pool now and filtered out later depending on when - | they need to get placed or removed in fill.cpp. These items are kept in the - | pool until removal because the filling algorithm needs to know all of the - | advancement items that haven't been placed yet for placing higher priority - | items like stones/medallions.*/ - - if (ctx->GetOption(RSK_SHUFFLE_MAPANDCOMPASS).Is(RO_DUNGEON_ITEM_LOC_VANILLA)) { - PlaceVanillaMapsAndCompasses(); - } else { - for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { - if (dungeon->GetMap() != RG_NONE) { - AddItemToMainPool(dungeon->GetMap()); - } - - if (dungeon->GetCompass() != RG_NONE) { - AddItemToMainPool(dungeon->GetCompass()); - } - } - } - - if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA)) { - PlaceVanillaSmallKeys(); - } else { - for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { - if (dungeon->HasKeyRing() && ctx->GetOption(RSK_KEYSANITY).IsNot(RO_DUNGEON_ITEM_LOC_STARTWITH)) { - AddItemToMainPool(dungeon->GetKeyRing()); - } else if (dungeon->GetSmallKeyCount() > 0) { - AddItemToMainPool(dungeon->GetSmallKey(), dungeon->GetSmallKeyCount()); - } - } - } - - if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA)) { - PlaceVanillaBossKeys(); - } else { - AddItemToMainPool(RG_FOREST_TEMPLE_BOSS_KEY); - AddItemToMainPool(RG_FIRE_TEMPLE_BOSS_KEY); - AddItemToMainPool(RG_WATER_TEMPLE_BOSS_KEY); - AddItemToMainPool(RG_SPIRIT_TEMPLE_BOSS_KEY); - AddItemToMainPool(RG_SHADOW_TEMPLE_BOSS_KEY); - } - - if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_KAK_TOKENS)) { - ctx->PlaceItemInLocation(RC_KAK_100_GOLD_SKULLTULA_REWARD, RG_GANONS_CASTLE_BOSS_KEY); - } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Get() >= RO_GANON_BOSS_KEY_LACS_VANILLA) { - ctx->PlaceItemInLocation(RC_TOT_LIGHT_ARROWS_CUTSCENE, RG_GANONS_CASTLE_BOSS_KEY); - } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_VANILLA)) { - ctx->PlaceItemInLocation(RC_GANONS_TOWER_BOSS_KEY_CHEST, RG_GANONS_CASTLE_BOSS_KEY); - } else { - AddItemToMainPool(RG_GANONS_CASTLE_BOSS_KEY); - } - - if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { - AddItemsToPool(ItemPool, easyItems); - } else { - AddItemsToPool(ItemPool, normalItems); - } - - if (!ctx->GetOption(RSK_SHUFFLE_KOKIRI_SWORD)) { - ReplaceMaxItem(RG_KOKIRI_SWORD, 0); - } - - if (!ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) { - ReplaceMaxItem(RG_MASTER_SWORD, 0); - } - - if (/*ProgressiveGoronSword TODO: Implement Setting*/false) { - ReplaceMaxItem(RG_BIGGORON_SWORD, 0); - AddItemToMainPool(RG_PROGRESSIVE_GORONSWORD, 2); - ctx->possibleIceTrapModels.push_back(RG_PROGRESSIVE_GORONSWORD); - } else { - ctx->possibleIceTrapModels.push_back(RG_BIGGORON_SWORD); - } - - //Replace ice traps with junk from the pending junk pool if necessary - if (ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_OFF)) { - ReplaceMaxItem(RG_ICE_TRAP, 0); - } - //Replace all junk items with ice traps for onslaught mode - else if (ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_ONSLAUGHT)) { - for (uint8_t i = 0; i < JunkPoolItems.size() - 3; i++) { // -3 Omits Huge Rupees and Deku Nuts 10 - ReplaceMaxItem(JunkPoolItems[i], 0); - } - } - - if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_SCARCE)) { - SetScarceItemPool(); - } else if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_MINIMAL)) { - SetMinimalItemPool(); - } else if (/*RemoveDoubleDefense TODO: Implement setting*/ false) { - ReplaceMaxItem(RG_DOUBLE_DEFENSE, 0); - } - - //this feels ugly and there's probably a better way, but - //it replaces random junk with pending junk. - bool junkSet; - for (RandomizerGet pendingJunk : PendingJunkPool) { - junkSet = false; - for (RandomizerGet& item : ItemPool) { - for (RandomizerGet junk : JunkPoolItems) { - if (item == junk && item != RG_HUGE_RUPEE && item != RG_DEKU_NUTS_10) { - item = pendingJunk; - junkSet = true; - break; + if (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_BEANS_ONLY) || + ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL)) { + AddItemToMainPool(RG_MAGIC_BEAN_PACK); + if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { + AddItemToPool(PendingJunkPool, RG_MAGIC_BEAN_PACK); } - } - if (junkSet) break; + ctx->possibleIceTrapModels.push_back(RG_MAGIC_BEAN_PACK); + } else { + ctx->PlaceItemInLocation(RC_ZR_MAGIC_BEAN_SALESMAN, RG_MAGIC_BEAN, false, true); } - } - PendingJunkPool.clear(); - // RANDOTODO: Ideally this should be checking for equality, but that is not currently the case and has never been - // the case, and isn't even currently the case in the 3drando repo we inherited this from years ago, so it may - // be a large undertaking to fix. - assert(ItemPool.size() <= ctx->allLocations.size() || !"Item Pool larger than Location Pool"); -} + if (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) || + ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL)) { + if (/*!ProgressiveGoronSword TODO: Implement Progressive Goron Sword*/ true) { + AddItemToMainPool(RG_GIANTS_KNIFE); + } + if (ctx->GetOption(RSK_BOMBCHU_BAG)) { + AddItemToMainPool(RG_PROGRESSIVE_BOMBCHUS); + } else { + AddItemToMainPool(RG_BOMBCHU_10); + } + } else { + ctx->PlaceItemInLocation(RC_KAK_GRANNYS_SHOP, RG_BLUE_POTION_REFILL, false, true); + ctx->PlaceItemInLocation(RC_GC_MEDIGORON, RG_GIANTS_KNIFE, false, true); + ctx->PlaceItemInLocation(RC_WASTELAND_BOMBCHU_SALESMAN, RG_BOMBCHU_10, false, true); + } -void AddJunk() { - SPDLOG_DEBUG("HAD TO PLACE EXTRA JUNK "); - AddItemToMainPool(GetPendingJunkItem()); + if (ctx->GetOption(RSK_SHUFFLE_FROG_SONG_RUPEES)) { + AddItemToMainPool(RG_PURPLE_RUPEE, 5); + } else { + ctx->PlaceItemInLocation(RC_ZR_FROGS_ZELDAS_LULLABY, RG_PURPLE_RUPEE, false, true); + ctx->PlaceItemInLocation(RC_ZR_FROGS_EPONAS_SONG, RG_PURPLE_RUPEE, false, true); + ctx->PlaceItemInLocation(RC_ZR_FROGS_SARIAS_SONG, RG_PURPLE_RUPEE, false, true); + ctx->PlaceItemInLocation(RC_ZR_FROGS_SUNS_SONG, RG_PURPLE_RUPEE, false, true); + ctx->PlaceItemInLocation(RC_ZR_FROGS_SONG_OF_TIME, RG_PURPLE_RUPEE, false, true); + } + + if (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE)) { + AddItemToMainPool(RG_POCKET_EGG); + AddItemToMainPool(RG_COJIRO); + AddItemToMainPool(RG_ODD_MUSHROOM); + AddItemToMainPool(RG_ODD_POTION); + AddItemToMainPool(RG_POACHERS_SAW); + AddItemToMainPool(RG_BROKEN_SWORD); + AddItemToMainPool(RG_PRESCRIPTION); + AddItemToMainPool(RG_EYEBALL_FROG); + AddItemToMainPool(RG_EYEDROPS); + } + AddItemToMainPool(RG_CLAIM_CHECK); + + if (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS)) { + AddItemToMainPool(RG_TREASURE_GAME_SMALL_KEY, 6); // 6 individual keys + } else if (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK)) { + AddItemToMainPool(RG_TREASURE_GAME_SMALL_KEY); // 1 key which will behave as a pack of 6 + } + + if (ctx->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OFF)) { + for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, RCTYPE_SKULL_TOKEN)) { + ctx->PlaceItemInLocation(loc, RG_GOLD_SKULLTULA_TOKEN, false, true); + } + } else if (ctx->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_DUNGEONS)) { + for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, RCTYPE_SKULL_TOKEN)) { + if (Rando::StaticData::GetLocation(loc)->IsOverworld()) { + ctx->PlaceItemInLocation((RandomizerCheck)loc, RG_GOLD_SKULLTULA_TOKEN, false, true); + } else { + AddItemToMainPool(RG_GOLD_SKULLTULA_TOKEN); + } + } + } else if (ctx->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OVERWORLD)) { + for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, RCTYPE_SKULL_TOKEN)) { + if (Rando::StaticData::GetLocation(loc)->IsDungeon()) { + ctx->PlaceItemInLocation((RandomizerCheck)loc, RG_GOLD_SKULLTULA_TOKEN, false, true); + } else { + AddItemToMainPool(RG_GOLD_SKULLTULA_TOKEN); + } + } + } else { + AddItemToMainPool(RG_GOLD_SKULLTULA_TOKEN, 100); + } + + if (ctx->GetOption(RSK_SHUFFLE_100_GS_REWARD)) { + if (ctx->GetOption(RSK_SHUFFLE_TOKENS).IsNot(RO_TOKENSANITY_OFF) && + ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { + AddItemToPool(PendingJunkPool, RG_GOLD_SKULLTULA_TOKEN, 10); + } + AddItemToMainPool(RG_HUGE_RUPEE); + } else { + ctx->PlaceItemInLocation(RC_KAK_100_GOLD_SKULLTULA_REWARD, RG_HUGE_RUPEE, false, true); + } + + if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS)) { + AddItemToMainPool(RG_GOHMA_SOUL); + AddItemToMainPool(RG_KING_DODONGO_SOUL); + AddItemToMainPool(RG_BARINADE_SOUL); + AddItemToMainPool(RG_PHANTOM_GANON_SOUL); + AddItemToMainPool(RG_VOLVAGIA_SOUL); + AddItemToMainPool(RG_MORPHA_SOUL); + AddItemToMainPool(RG_BONGO_BONGO_SOUL); + AddItemToMainPool(RG_TWINROVA_SOUL); + + ctx->possibleIceTrapModels.push_back(RG_GOHMA_SOUL); + ctx->possibleIceTrapModels.push_back(RG_KING_DODONGO_SOUL); + ctx->possibleIceTrapModels.push_back(RG_BARINADE_SOUL); + ctx->possibleIceTrapModels.push_back(RG_PHANTOM_GANON_SOUL); + ctx->possibleIceTrapModels.push_back(RG_VOLVAGIA_SOUL); + ctx->possibleIceTrapModels.push_back(RG_MORPHA_SOUL); + ctx->possibleIceTrapModels.push_back(RG_BONGO_BONGO_SOUL); + ctx->possibleIceTrapModels.push_back(RG_TWINROVA_SOUL); + if (ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).Is(RO_BOSS_SOULS_ON_PLUS_GANON)) { + AddItemToMainPool(RG_GANON_SOUL); + ctx->possibleIceTrapModels.push_back(RG_GANON_SOUL); + } + } + + if (ctx->GetOption(RSK_SHUFFLE_CHILD_WALLET)) { + AddItemToMainPool(RG_PROGRESSIVE_WALLET); + } + + if (ctx->GetOption(RSK_INCLUDE_TYCOON_WALLET)) { + AddItemToMainPool(RG_PROGRESSIVE_WALLET); + } + + if (ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG)) { + AddItemToMainPool(RG_PROGRESSIVE_STICK_UPGRADE); + } + + if (ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG)) { + AddItemToMainPool(RG_PROGRESSIVE_NUT_UPGRADE); + } + + if (ctx->GetOption(RSK_BOMBCHU_BAG)) { + AddItemToMainPool(RG_PROGRESSIVE_BOMBCHUS, 5); + } else { + AddItemToMainPool(RG_BOMBCHU_5); + AddItemToMainPool(RG_BOMBCHU_10, 3); + AddItemToMainPool(RG_BOMBCHU_20); + } + + // Ice Traps + AddItemToMainPool(RG_ICE_TRAP); + if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla()) { + AddItemToMainPool(RG_ICE_TRAP); + } + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { + AddItemToMainPool(RG_ICE_TRAP, 4); + } + + // Gerudo Fortress + if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE)) { + ctx->PlaceItemInLocation(RC_GF_NORTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true); + ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); + ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true); + ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); + } else if (ctx->GetOption(RSK_GERUDO_KEYS).IsNot(RO_GERUDO_KEYS_VANILLA)) { + if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST)) { + AddItemToMainPool(RG_GERUDO_FORTRESS_SMALL_KEY); + ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); + ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true); + 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) && 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++) { + AddItemToMainPool(GetJunkItem()); + } + } else { + AddItemToMainPool(RG_GERUDO_FORTRESS_SMALL_KEY, 4); + } + } + 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) && ctx->GetOption(RSK_KEYRINGS)) { + AddItemToPool(PendingJunkPool, RG_GERUDO_FORTRESS_KEY_RING); + } else { + AddItemToPool(PendingJunkPool, RG_GERUDO_FORTRESS_SMALL_KEY); + } + } + } else { + if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST)) { + ctx->PlaceItemInLocation(RC_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); + ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); + ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true); + ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true); + } else { + ctx->PlaceItemInLocation(RC_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); + ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); + ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); + ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true); + } + } + + // Gerudo Membership Card + if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) && + ctx->GetOption(RSK_GERUDO_FORTRESS).IsNot(RO_GF_CARPENTERS_FREE)) { + AddItemToMainPool(RG_GERUDO_MEMBERSHIP_CARD); + ctx->possibleIceTrapModels.push_back(RG_GERUDO_MEMBERSHIP_CARD); + } else if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { + AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD); + ctx->PlaceItemInLocation(RC_GF_GERUDO_MEMBERSHIP_CARD, RG_ICE_TRAP, false, true); + } else { + ctx->PlaceItemInLocation(RC_GF_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, false, true); + } + + // Keys + + // For key rings, need to add as many junk items as "missing" keys + if (ctx->GetOption(RSK_KEYRINGS).IsNot(RO_KEYRINGS_OFF)) { + uint8_t ringJunkAmt = 0; + for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { + if (dungeon->HasKeyRing()) { + ringJunkAmt += dungeon->GetSmallKeyCount() - 1; + } + } + for (uint8_t i = 0; i < ringJunkAmt; i++) { + AddItemToMainPool(GetJunkItem()); + } + } + + if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { + if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { + AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD); + } + + if (ctx->GetOption(RSK_SHUFFLE_FISHING_POLE)) { + AddItemToPool(PendingJunkPool, RG_FISHING_POLE); + } + + // Plentiful small keys + if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE) || + ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON) || + ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { + if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->HasKeyRing()) { + AddItemToPool(PendingJunkPool, RG_BOTTOM_OF_THE_WELL_KEY_RING); + } else { + AddItemToPool(PendingJunkPool, RG_BOTTOM_OF_THE_WELL_SMALL_KEY); + } + if (ctx->GetDungeon(Rando::FOREST_TEMPLE)->HasKeyRing()) { + AddItemToPool(PendingJunkPool, RG_FOREST_TEMPLE_KEY_RING); + } else { + AddItemToPool(PendingJunkPool, RG_FOREST_TEMPLE_SMALL_KEY); + } + if (ctx->GetDungeon(Rando::FIRE_TEMPLE)->HasKeyRing()) { + AddItemToPool(PendingJunkPool, RG_FIRE_TEMPLE_KEY_RING); + } else { + AddItemToPool(PendingJunkPool, RG_FIRE_TEMPLE_SMALL_KEY); + } + if (ctx->GetDungeon(Rando::WATER_TEMPLE)->HasKeyRing()) { + AddItemToPool(PendingJunkPool, RG_WATER_TEMPLE_KEY_RING); + } else { + AddItemToPool(PendingJunkPool, RG_WATER_TEMPLE_SMALL_KEY); + } + if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->HasKeyRing()) { + AddItemToPool(PendingJunkPool, RG_SPIRIT_TEMPLE_KEY_RING); + } else { + AddItemToPool(PendingJunkPool, RG_SPIRIT_TEMPLE_SMALL_KEY); + } + if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->HasKeyRing()) { + AddItemToPool(PendingJunkPool, RG_SHADOW_TEMPLE_KEY_RING); + } else { + AddItemToPool(PendingJunkPool, RG_SHADOW_TEMPLE_SMALL_KEY); + } + if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->HasKeyRing()) { + AddItemToPool(PendingJunkPool, RG_GERUDO_TRAINING_GROUND_KEY_RING); + } else { + AddItemToPool(PendingJunkPool, RG_GERUDO_TRAINING_GROUND_SMALL_KEY); + } + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->HasKeyRing()) { + AddItemToPool(PendingJunkPool, RG_GANONS_CASTLE_KEY_RING); + } else { + AddItemToPool(PendingJunkPool, RG_GANONS_CASTLE_SMALL_KEY); + } + } + + if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE) || + ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON) || + ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { + AddItemToPool(PendingJunkPool, RG_FOREST_TEMPLE_BOSS_KEY); + AddItemToPool(PendingJunkPool, RG_FIRE_TEMPLE_BOSS_KEY); + AddItemToPool(PendingJunkPool, RG_WATER_TEMPLE_BOSS_KEY); + AddItemToPool(PendingJunkPool, RG_SPIRIT_TEMPLE_BOSS_KEY); + AddItemToPool(PendingJunkPool, RG_SHADOW_TEMPLE_BOSS_KEY); + } + + if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANYWHERE) || + ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANY_DUNGEON) || + ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OVERWORLD)) { + AddItemToPool(PendingJunkPool, RG_GANONS_CASTLE_BOSS_KEY); + } + } + + if (ctx->GetOption(RSK_LOCK_OVERWORLD_DOORS)) { + AddItemToPool(ItemPool, RG_GUARD_HOUSE_KEY); + AddItemToPool(ItemPool, RG_MARKET_BAZAAR_KEY); + AddItemToPool(ItemPool, RG_MARKET_POTION_SHOP_KEY); + AddItemToPool(ItemPool, RG_MASK_SHOP_KEY); + AddItemToPool(ItemPool, RG_MARKET_SHOOTING_GALLERY_KEY); + AddItemToPool(ItemPool, RG_BOMBCHU_BOWLING_KEY); + AddItemToPool(ItemPool, RG_TREASURE_CHEST_GAME_BUILDING_KEY); + AddItemToPool(ItemPool, RG_BOMBCHU_SHOP_KEY); + AddItemToPool(ItemPool, RG_RICHARDS_HOUSE_KEY); + AddItemToPool(ItemPool, RG_ALLEY_HOUSE_KEY); + AddItemToPool(ItemPool, RG_KAK_BAZAAR_KEY); + AddItemToPool(ItemPool, RG_KAK_POTION_SHOP_KEY); + AddItemToPool(ItemPool, RG_BOSS_HOUSE_KEY); + AddItemToPool(ItemPool, RG_GRANNYS_POTION_SHOP_KEY); + AddItemToPool(ItemPool, RG_SKULLTULA_HOUSE_KEY); + AddItemToPool(ItemPool, RG_IMPAS_HOUSE_KEY); + AddItemToPool(ItemPool, RG_WINDMILL_KEY); + AddItemToPool(ItemPool, RG_KAK_SHOOTING_GALLERY_KEY); + AddItemToPool(ItemPool, RG_DAMPES_HUT_KEY); + AddItemToPool(ItemPool, RG_TALONS_HOUSE_KEY); + AddItemToPool(ItemPool, RG_STABLES_KEY); + AddItemToPool(ItemPool, RG_BACK_TOWER_KEY); + AddItemToPool(ItemPool, RG_HYLIA_LAB_KEY); + AddItemToPool(ItemPool, RG_FISHING_HOLE_KEY); + } + + // Shopsanity + if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF) || + (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_SPECIFIC_COUNT) && + ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_ZERO_ITEMS))) { + AddItemsToPool(ItemPool, normalRupees); + } else { + AddItemsToPool(ItemPool, shopsanityRupees); // Shopsanity gets extra large rupees + } + + // Shuffle Fairies + if (ctx->GetOption(RSK_SHUFFLE_FAIRIES)) { + for (auto rc : Rando::StaticData::GetOverworldFairyLocations()) { + AddItemToMainPool(GetJunkItem()); + } + // 8 extra for Ganon's Castle + 2 Dodongo's Cavern Gossip Stone + 3 Shadow Temple + int extra = 13; + extra += ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsVanilla() ? 0 : 2; + extra += ctx->GetDungeon(Rando::WATER_TEMPLE)->IsVanilla() ? 0 : 3; + extra += ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla() ? 2 : 1; + extra += ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla() ? 1 : 2; + extra += ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla() ? 1 : 0; + extra += ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla() ? 1 : 0; + extra += ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla() ? 1 : 0; + for (int i = 0; i < extra; i++) { + AddItemToMainPool(GetJunkItem()); + } + } + + // Scrubsanity + if (ctx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_ALL)) { + // Deku Tree + if (ctx->GetDungeon(Rando::DEKU_TREE)->IsMQ()) { + AddItemToMainPool(RG_DEKU_SHIELD); + } + + // Dodongos Cavern + AddItemToMainPool(RG_DEKU_STICK_1); + AddItemToMainPool(RG_DEKU_SHIELD); + if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ()) { + AddItemToMainPool(RG_RECOVERY_HEART); + } else { + AddItemToMainPool(RG_DEKU_NUTS_5); + } + + // Jabu Jabus Belly + if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsVanilla()) { + AddItemToMainPool(RG_DEKU_NUTS_5); + } + + // Ganons Castle + AddItemToMainPool(RG_BOMBS_5); + AddItemToMainPool(RG_RECOVERY_HEART); + AddItemToMainPool(RG_BLUE_RUPEE); + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ()) { + AddItemToMainPool(RG_DEKU_NUTS_5); + } + + // Overworld Scrubs + AddItemsToPool(ItemPool, dekuScrubItems); + + // Scrubs which sell seeds or arrows sell it based on age, this randomly assigns them + for (uint8_t i = 0; i < 7; i++) { + if (Random(0, 3)) { + AddItemToMainPool(RG_ARROWS_30); + } else { + AddItemToMainPool(RG_DEKU_SEEDS_30); + } + } + } + + 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); + PlaceItemsForType(RCTYPE_FREESTANDING, overworldFreeStandingActive, dungeonFreeStandingActive); + + AddItemsToPool(ItemPool, alwaysItems); + AddItemsToPool(ItemPool, dungeonRewards); + + // Dungeon pools + if (ctx->GetDungeon(Rando::DEKU_TREE)->IsMQ()) { + AddItemsToPool(ItemPool, DT_MQ); + } else { + AddItemsToPool(ItemPool, DT_Vanilla); + } + if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ()) { + AddItemsToPool(ItemPool, DC_MQ); + } else { + AddItemsToPool(ItemPool, DC_Vanilla); + } + if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsMQ()) { + AddItemsToPool(ItemPool, JB_MQ); + } + if (ctx->GetDungeon(Rando::FOREST_TEMPLE)->IsMQ()) { + AddItemsToPool(ItemPool, FoT_MQ); + } else { + AddItemsToPool(ItemPool, FoT_Vanilla); + } + if (ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsMQ()) { + AddItemsToPool(ItemPool, FiT_MQ); + } else { + AddItemsToPool(ItemPool, FiT_Vanilla); + } + if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsMQ()) { + AddItemsToPool(ItemPool, SpT_MQ); + } else { + AddItemsToPool(ItemPool, SpT_Vanilla); + } + if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsMQ()) { + AddItemsToPool(ItemPool, ShT_MQ); + } else { + AddItemsToPool(ItemPool, ShT_Vanilla); + } + if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla()) { + AddItemsToPool(ItemPool, BW_Vanilla); + } + if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsMQ()) { + AddItemsToPool(ItemPool, GTG_MQ); + } else { + AddItemsToPool(ItemPool, GTG_Vanilla); + } + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ()) { + AddItemsToPool(ItemPool, GC_MQ); + } else { + AddItemsToPool(ItemPool, GC_Vanilla); + } + + uint8_t rutoBottles = 1; + if (ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN)) { + rutoBottles = 0; + } + + // Add 4 total bottles + uint8_t bottleCount = 4; + std::vector bottles; + bottles.assign(normalBottles.begin(), normalBottles.end()); + ctx->possibleIceTrapModels.push_back(Rando::StaticData::RetrieveItem(RandomElement(bottles)) + .GetRandomizerGet()); // Get one random bottle type for ice traps + for (uint8_t i = 0; i < bottleCount; i++) { + if (i >= rutoBottles) { + if ((i == bottleCount - 1) && + (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) || + ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL))) { + AddItemToMainPool(RG_BOTTLE_WITH_BLUE_POTION); + } else { + AddRandomBottle(bottles); + } + } else { + AddItemToMainPool(RG_RUTOS_LETTER); + } + } + + // add extra songs only if song shuffle is anywhere + AddItemsToPool(ItemPool, songList); + if (ctx->GetOption(RSK_SHUFFLE_SONGS).Is(RO_SONG_SHUFFLE_ANYWHERE) && + ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { + AddItemsToPool(PendingJunkPool, songList); + } + + /*For item pool generation, dungeon items are either placed in their vanilla + | location, or added to the pool now and filtered out later depending on when + | they need to get placed or removed in fill.cpp. These items are kept in the + | pool until removal because the filling algorithm needs to know all of the + | advancement items that haven't been placed yet for placing higher priority + | items like stones/medallions.*/ + + if (ctx->GetOption(RSK_SHUFFLE_MAPANDCOMPASS).Is(RO_DUNGEON_ITEM_LOC_VANILLA)) { + PlaceVanillaMapsAndCompasses(); + } else { + for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { + if (dungeon->GetMap() != RG_NONE) { + AddItemToMainPool(dungeon->GetMap()); + } + + if (dungeon->GetCompass() != RG_NONE) { + AddItemToMainPool(dungeon->GetCompass()); + } + } + } + + if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA)) { + PlaceVanillaSmallKeys(); + } else { + for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { + if (dungeon->HasKeyRing() && ctx->GetOption(RSK_KEYSANITY).IsNot(RO_DUNGEON_ITEM_LOC_STARTWITH)) { + AddItemToMainPool(dungeon->GetKeyRing()); + } else if (dungeon->GetSmallKeyCount() > 0) { + AddItemToMainPool(dungeon->GetSmallKey(), dungeon->GetSmallKeyCount()); + } + } + } + + if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA)) { + PlaceVanillaBossKeys(); + } else { + AddItemToMainPool(RG_FOREST_TEMPLE_BOSS_KEY); + AddItemToMainPool(RG_FIRE_TEMPLE_BOSS_KEY); + AddItemToMainPool(RG_WATER_TEMPLE_BOSS_KEY); + AddItemToMainPool(RG_SPIRIT_TEMPLE_BOSS_KEY); + AddItemToMainPool(RG_SHADOW_TEMPLE_BOSS_KEY); + } + + if (!ctx->GetOption(RSK_TRIFORCE_HUNT)) { // Don't add GBK to the pool at all for Triforce Hunt. + if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_KAK_TOKENS)) { + ctx->PlaceItemInLocation(RC_KAK_100_GOLD_SKULLTULA_REWARD, RG_GANONS_CASTLE_BOSS_KEY); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Get() >= RO_GANON_BOSS_KEY_LACS_VANILLA) { + ctx->PlaceItemInLocation(RC_TOT_LIGHT_ARROWS_CUTSCENE, RG_GANONS_CASTLE_BOSS_KEY); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_VANILLA)) { + ctx->PlaceItemInLocation(RC_GANONS_TOWER_BOSS_KEY_CHEST, RG_GANONS_CASTLE_BOSS_KEY); + } else { + AddItemToMainPool(RG_GANONS_CASTLE_BOSS_KEY); + } + } + + if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { + AddItemsToPool(ItemPool, easyItems); + } else { + AddItemsToPool(ItemPool, normalItems); + } + + if (!ctx->GetOption(RSK_SHUFFLE_KOKIRI_SWORD)) { + ReplaceMaxItem(RG_KOKIRI_SWORD, 0); + } + + if (!ctx->GetOption(RSK_SHUFFLE_MASTER_SWORD)) { + ReplaceMaxItem(RG_MASTER_SWORD, 0); + } + + if (/*ProgressiveGoronSword TODO: Implement Setting*/ false) { + ReplaceMaxItem(RG_BIGGORON_SWORD, 0); + AddItemToMainPool(RG_PROGRESSIVE_GORONSWORD, 2); + ctx->possibleIceTrapModels.push_back(RG_PROGRESSIVE_GORONSWORD); + } else { + ctx->possibleIceTrapModels.push_back(RG_BIGGORON_SWORD); + } + + // Replace ice traps with junk from the pending junk pool if necessary + if (ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_OFF)) { + ReplaceMaxItem(RG_ICE_TRAP, 0); + } + // Replace all junk items with ice traps for onslaught mode + else if (ctx->GetOption(RSK_ICE_TRAPS).Is(RO_ICE_TRAPS_ONSLAUGHT)) { + PendingJunkPool.clear(); + for (uint8_t i = 0; i < JunkPoolItems.size() - 3; i++) { // -3 Omits Huge Rupees and Deku Nuts 10 + ReplaceMaxItem(JunkPoolItems[i], 0); + } + } + + if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_SCARCE)) { + SetScarceItemPool(); + } else if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_MINIMAL)) { + SetMinimalItemPool(); + } else if (/*RemoveDoubleDefense TODO: Implement setting*/ false) { + ReplaceMaxItem(RG_DOUBLE_DEFENSE, 0); + } + + std::erase(ItemPool, RG_NONE); + + if (ItemPool.size() < ctx->allLocations.size()) { + Shuffle(PendingJunkPool); + size_t junkNeeded = std::min(PendingJunkPool.size(), ctx->allLocations.size() - ItemPool.size()); + ItemPool.insert(ItemPool.end(), PendingJunkPool.begin(), PendingJunkPool.begin() + junkNeeded); + PendingJunkPool.erase(PendingJunkPool.begin(), PendingJunkPool.begin() + junkNeeded); + } else if (ItemPool.size() > ctx->allLocations.size()) { + // RANDOTODO: all junk should be put in PendingJunkPool so this is never needed + size_t remove = ItemPool.size() - ctx->allLocations.size(); + for (size_t i = 0; remove > 0 && i < ItemPool.size(); i++) { + for (size_t j = 0; j < JunkPoolItems.size(); j++) { + if (ItemPool[i] == JunkPoolItems[j]) { + ItemPool[i] = RG_NONE; + remove--; + break; + } + } + } + std::erase(ItemPool, RG_NONE); + } + + // RANDOTODO: Ideally this should be checking for equality, but that is not currently the case and has never been + // the case, and isn't even currently the case in the 3drando repo we inherited this from years ago, so it may + // be a large undertaking to fix. + assert(ItemPool.size() <= ctx->allLocations.size() || !"Item Pool larger than Location Pool"); } diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.hpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.hpp index 4ef583001..095b417b4 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.hpp @@ -11,6 +11,5 @@ void AddItemToPool(std::vector& pool, const RandomizerGet item, s RandomizerGet GetJunkItem(); void PlaceJunkInExcludedLocation(const RandomizerCheck il); void GenerateItemPool(); -void AddJunk(); extern std::vector ItemPool; diff --git a/soh/soh/Enhancements/randomizer/3drando/menu.cpp b/soh/soh/Enhancements/randomizer/3drando/menu.cpp index 6bcf21af9..831330571 100644 --- a/soh/soh/Enhancements/randomizer/3drando/menu.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/menu.cpp @@ -22,7 +22,7 @@ Rando::Option* currentSetting; } // namespace bool GenerateRandomizer(std::set excludedLocations, std::set enabledTricks, - std::string seedInput) { + std::string seedInput) { const auto ctx = Rando::Context::GetInstance(); ResetPerformanceTimers(); StartPerformanceTimer(PT_WHOLE_SEED); @@ -35,9 +35,7 @@ bool GenerateRandomizer(std::set excludedLocations, std::set excludedLocations, std::set enabledTricks) { +int Playthrough_Init(uint32_t seed, std::set excludedLocations, + std::set enabledTricks) { // initialize the RNG with just the seed incase any settings need to be // resolved to something random Random_Init(seed); @@ -65,7 +66,6 @@ int Playthrough_Init(uint32_t seed, std::set excludedLocations, Random_Init(finalHash); ctx->SetHash(std::to_string(finalHash)); - if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_VANILLA)) { VanillaFill(); // Just place items in their vanilla locations } else { // Fill locations with logic @@ -78,8 +78,9 @@ int Playthrough_Init(uint32_t seed, std::set excludedLocations, GenerateHash(); if (true) { - //TODO: Handle different types of file output (i.e. Spoiler Log, Plando Template, Patch Files, Race Files, etc.) - // write logs + // TODO: Handle different types of file output (i.e. Spoiler Log, Plando Template, Patch Files, Race Files, + // etc.) + // write logs SPDLOG_INFO("Writing Spoiler Log..."); StartPerformanceTimer(PT_SPOILER_LOG); if (SpoilerLog_Write()) { @@ -97,7 +98,8 @@ int Playthrough_Init(uint32_t seed, std::set excludedLocations, } // used for generating a lot of seeds at once -int Playthrough_Repeat(std::set excludedLocations, std::set enabledTricks, int count /*= 1*/) { +int Playthrough_Repeat(std::set excludedLocations, std::set enabledTricks, + int count /*= 1*/) { SPDLOG_INFO("GENERATING {} SEEDS", count); auto ctx = Rando::Context::GetInstance(); uint32_t repeatedSeed = 0; diff --git a/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp b/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp index d26e89adb..51cfdd535 100644 --- a/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/rando_main.cpp @@ -11,7 +11,7 @@ #include "soh/cvar_prefixes.h" void RandoMain::GenerateRando(std::set excludedLocations, std::set enabledTricks, - std::string seedString) { + std::string seedString) { Rando::Context::GetInstance()->SetSeedGenerated(GenerateRandomizer(excludedLocations, enabledTricks, seedString)); diff --git a/soh/soh/Enhancements/randomizer/3drando/random.cpp b/soh/soh/Enhancements/randomizer/3drando/random.cpp index 92cf22b85..f2599da94 100644 --- a/soh/soh/Enhancements/randomizer/3drando/random.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/random.cpp @@ -8,16 +8,16 @@ static bool init = false; static boost::random::mt19937 generator; -//Initialize with seed specified +// Initialize with seed specified void Random_Init(uint32_t seed) { init = true; - generator = boost::random::mt19937{seed}; + generator = boost::random::mt19937{ seed }; } -//Returns a random integer in range [min, max-1] +// Returns a random integer in range [min, max-1] uint32_t Random(int min, int max) { if (!init) { - //No seed given, get a random number from device to seed + // No seed given, get a random number from device to seed #if !defined(__SWITCH__) && !defined(__WIIU__) const auto seed = static_cast(std::random_device{}()); #else @@ -25,11 +25,11 @@ uint32_t Random(int min, int max) { #endif Random_Init(seed); } - boost::random::uniform_int_distribution distribution(min, max-1); + boost::random::uniform_int_distribution distribution(min, max - 1); return distribution(generator); } -//Returns a random floating point number in [0.0, 1.0] +// Returns a random floating point number in [0.0, 1.0] double RandomDouble() { boost::random::uniform_real_distribution distribution(0.0, 1.0); return distribution(generator); diff --git a/soh/soh/Enhancements/randomizer/3drando/shops.cpp b/soh/soh/Enhancements/randomizer/3drando/shops.cpp index 75120fa41..8224865ac 100644 --- a/soh/soh/Enhancements/randomizer/3drando/shops.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/shops.cpp @@ -10,235 +10,186 @@ #include #include "z64item.h" -PriceSettingsStruct::PriceSettingsStruct(RandomizerSettingKey _main, - RandomizerSettingKey _fixedPrice, - RandomizerSettingKey _range1, - RandomizerSettingKey _range2, - RandomizerSettingKey _noWallet, - RandomizerSettingKey _childWallet, - RandomizerSettingKey _adultWallet, - RandomizerSettingKey _giantWallet, - RandomizerSettingKey _tycoonWallet, - RandomizerSettingKey _affordable){ - main = _main; - fixedPrice = _fixedPrice; - range1 = _range1; - range2 = _range2; - noWallet = _noWallet; - childWallet = _childWallet; - adultWallet = _adultWallet; - giantWallet= _giantWallet; - tycoonWallet= _tycoonWallet; - affordable= _affordable; +PriceSettingsStruct::PriceSettingsStruct(RandomizerSettingKey _main, RandomizerSettingKey _fixedPrice, + RandomizerSettingKey _range1, RandomizerSettingKey _range2, + RandomizerSettingKey _noWallet, RandomizerSettingKey _childWallet, + RandomizerSettingKey _adultWallet, RandomizerSettingKey _giantWallet, + RandomizerSettingKey _tycoonWallet, RandomizerSettingKey _affordable) { + main = _main; + fixedPrice = _fixedPrice; + range1 = _range1; + range2 = _range2; + noWallet = _noWallet; + childWallet = _childWallet; + adultWallet = _adultWallet; + giantWallet = _giantWallet; + tycoonWallet = _tycoonWallet; + affordable = _affordable; } - static std::array, 0xF1> trickNameTable; // Table of trick names for ice traps -bool initTrickNames = false; //Indicates if trick ice trap names have been initialized yet +bool initTrickNames = false; // Indicates if trick ice trap names have been initialized yet -//Set vanilla shop item locations before potentially shuffling +// Set vanilla shop item locations before potentially shuffling void PlaceVanillaShopItems() { auto ctx = Rando::Context::GetInstance(); - //Loop to place vanilla items in each location + // Loop to place vanilla items in each location for (RandomizerCheck& randomizerCheck : Rando::StaticData::GetShopLocations()) { ctx->GetItemLocation(randomizerCheck)->PlaceVanillaItem(); } } -//These are the vanilla shop items, but in a priority order of importance -//However many shop item slots were cleared, this will return 64 minus that number of vanilla shop items to be placed with assumed fill -//The first 32 items here will always be present in shops -//Shopsanity 4 will only have the first 32, shopsanity 1 will have the first 56, etc. -//Shopsanity random will have anywhere from the first 32 to the first 56, so the order of items after 32 is relevant +// These are the vanilla shop items, but in a priority order of importance +// However many shop item slots were cleared, this will return 64 minus that number of vanilla shop items to be placed +// with assumed fill The first 32 items here will always be present in shops Shopsanity 4 will only have the first 32, +// shopsanity 1 will have the first 56, etc. Shopsanity random will have anywhere from the first 32 to the first 56, so +// the order of items after 32 is relevant std::vector GetMinVanillaShopItems(int total_replaced) { std::vector minShopItems = { - RG_BUY_DEKU_SHIELD, - RG_BUY_HYLIAN_SHIELD, - RG_BUY_GORON_TUNIC, - RG_BUY_ZORA_TUNIC, - RG_BUY_DEKU_NUTS_5, - RG_BUY_BOMBS_20, - RG_BUY_BOMBCHUS_10, - RG_BUY_DEKU_STICK_1, + RG_BUY_DEKU_SHIELD, RG_BUY_HYLIAN_SHIELD, RG_BUY_GORON_TUNIC, RG_BUY_ZORA_TUNIC, RG_BUY_DEKU_NUTS_5, + RG_BUY_BOMBS_20, RG_BUY_BOMBCHUS_10, RG_BUY_DEKU_STICK_1, //^First 8 items: Exist on shopsanity 7 or less - RG_BUY_FAIRYS_SPIRIT, - RG_BUY_DEKU_SEEDS_30, - RG_BUY_ARROWS_10, - RG_BUY_BLUE_FIRE, - RG_BUY_RED_POTION_30, - RG_BUY_GREEN_POTION, - RG_BUY_DEKU_NUTS_10, - RG_BUY_BOMBCHUS_10, + RG_BUY_FAIRYS_SPIRIT, RG_BUY_DEKU_SEEDS_30, RG_BUY_ARROWS_10, RG_BUY_BLUE_FIRE, RG_BUY_RED_POTION_30, + RG_BUY_GREEN_POTION, RG_BUY_DEKU_NUTS_10, RG_BUY_BOMBCHUS_10, //^First 16 items: Exist on shopsanity 6 or less - RG_BUY_BOMBCHUS_10, - RG_BUY_BOMBCHUS_20, - RG_BUY_BOMBS_525, - RG_BUY_BOMBS_535, - RG_BUY_BOMBS_10, - RG_BUY_DEKU_NUTS_5, - RG_BUY_ARROWS_30, - RG_BUY_ARROWS_50, + RG_BUY_BOMBCHUS_10, RG_BUY_BOMBCHUS_20, RG_BUY_BOMBS_525, RG_BUY_BOMBS_535, RG_BUY_BOMBS_10, RG_BUY_DEKU_NUTS_5, + RG_BUY_ARROWS_30, RG_BUY_ARROWS_50, //^First 24 items: Exist on shopsanity 5 or less - RG_BUY_ARROWS_10, - RG_BUY_FAIRYS_SPIRIT, - RG_BUY_BOTTLE_BUG, - RG_BUY_FISH, + RG_BUY_ARROWS_10, RG_BUY_FAIRYS_SPIRIT, RG_BUY_BOTTLE_BUG, RG_BUY_FISH, //^First 28 items from OoTR - RG_BUY_HYLIAN_SHIELD, - RG_BUY_BOTTLE_BUG, - RG_BUY_DEKU_STICK_1, - RG_BUY_DEKU_STICK_1, + RG_BUY_HYLIAN_SHIELD, RG_BUY_BOTTLE_BUG, RG_BUY_DEKU_STICK_1, RG_BUY_DEKU_STICK_1, //^First 32 items: Exist on shopsanity 4 or less - RG_BUY_BLUE_FIRE, - RG_BUY_FISH, - RG_BUY_BOMBCHUS_10, - RG_BUY_DEKU_NUTS_5, - RG_BUY_ARROWS_10, - RG_BUY_BOMBCHUS_20, - RG_BUY_BOMBS_535, - RG_BUY_RED_POTION_30, + RG_BUY_BLUE_FIRE, RG_BUY_FISH, RG_BUY_BOMBCHUS_10, RG_BUY_DEKU_NUTS_5, RG_BUY_ARROWS_10, RG_BUY_BOMBCHUS_20, + RG_BUY_BOMBS_535, RG_BUY_RED_POTION_30, //^First 40 items: Exist on shopsanity 3 or less - RG_BUY_BOMBS_30, - RG_BUY_BOMBCHUS_20, - RG_BUY_DEKU_NUTS_5, - RG_BUY_ARROWS_10, - RG_BUY_DEKU_NUTS_5, - RG_BUY_ARROWS_30, - RG_BUY_RED_POTION_40, - RG_BUY_FISH, + RG_BUY_BOMBS_30, RG_BUY_BOMBCHUS_20, RG_BUY_DEKU_NUTS_5, RG_BUY_ARROWS_10, RG_BUY_DEKU_NUTS_5, RG_BUY_ARROWS_30, + RG_BUY_RED_POTION_40, RG_BUY_FISH, //^First 48 items: Exist on shopsanity 2 or less - RG_BUY_BOMBCHUS_20, - RG_BUY_ARROWS_30, - RG_BUY_RED_POTION_50, - RG_BUY_ARROWS_30, - RG_BUY_DEKU_NUTS_5, - RG_BUY_ARROWS_50, - RG_BUY_ARROWS_50, - RG_BUY_GREEN_POTION, + RG_BUY_BOMBCHUS_20, RG_BUY_ARROWS_30, RG_BUY_RED_POTION_50, RG_BUY_ARROWS_30, RG_BUY_DEKU_NUTS_5, + RG_BUY_ARROWS_50, RG_BUY_ARROWS_50, RG_BUY_GREEN_POTION, //^First 56 items: Exist on shopsanity 1 or less - RG_BUY_POE, - RG_BUY_POE, - RG_BUY_HEART, - RG_BUY_HEART, - RG_BUY_HEART, - RG_BUY_HEART, - RG_BUY_HEART, - RG_BUY_HEART, + RG_BUY_POE, RG_BUY_POE, RG_BUY_HEART, RG_BUY_HEART, RG_BUY_HEART, RG_BUY_HEART, RG_BUY_HEART, RG_BUY_HEART, //^All 64 items: Only exist with shopsanity 0 }; - //Now delete however many items there are to replace + // Now delete however many items there are to replace for (int i = 0; i < total_replaced; i++) { minShopItems.pop_back(); } return minShopItems; } -//This table contains a cumulative probability for each possible shop price based on -// a beta distribution with alpha = 1.5, beta = 2, and the result of the distribution, a float in [0.0, 1.0), -// being mutliplied by 60, casted to an integer, then multiplied by 5 to give a value in range [0, 295] in increments of 5. -// Meaning the first value is the probability of 0, the next value is the probability of 0 plus the probability of 5, etc. -//Probabilities generated using a python script with 1 billion trials, so should hopefully be pretty good -//Average price ~126 +// This table contains a cumulative probability for each possible shop price based on +// a beta distribution with alpha = 1.5, beta = 2, and the result of the distribution, a float in [0.0, 1.0), +// being mutliplied by 60, casted to an integer, then multiplied by 5 to give a value in range [0, 295] in increments +// of 5. Meaning the first value is the probability of 0, the next value is the probability of 0 plus the probability +// of 5, etc. +// Probabilities generated using a python script with 1 billion trials, so should hopefully be pretty good +// Average price ~126 //~38% chance of needing no wallet, ~45% chance of needing 1, ~17% chance of needing 2 -static constexpr std::array ShopPriceProbability= { - 0.005326994, 0.014908518, 0.027114719, 0.041315285, 0.057136304, 0.074325887, 0.092667151, 0.112002061, 0.132198214, 0.153125390, - 0.174696150, 0.196810540, 0.219388148, 0.242361379, 0.265657012, 0.289205134, 0.312970402, 0.336877590, 0.360881110, 0.384932772, - 0.408976198, 0.432982176, 0.456902494, 0.480686053, 0.504313389, 0.527746488, 0.550938554, 0.573856910, 0.596465330, 0.618736235, - 0.640646600, 0.662162782, 0.683240432, 0.703859801, 0.724001242, 0.743631336, 0.762722631, 0.781259986, 0.799198449, 0.816521905, - 0.833208595, 0.849243398, 0.864579161, 0.879211177, 0.893112051, 0.906263928, 0.918639420, 0.930222611, 0.940985829, 0.950914731, - 0.959992180, 0.968187000, 0.975495390, 0.981884488, 0.987344345, 0.991851853, 0.995389113, 0.997937921, 0.999481947, 1.000000000, +static constexpr std::array ShopPriceProbability = { + 0.005326994, 0.014908518, 0.027114719, 0.041315285, 0.057136304, 0.074325887, 0.092667151, 0.112002061, 0.132198214, + 0.153125390, 0.174696150, 0.196810540, 0.219388148, 0.242361379, 0.265657012, 0.289205134, 0.312970402, 0.336877590, + 0.360881110, 0.384932772, 0.408976198, 0.432982176, 0.456902494, 0.480686053, 0.504313389, 0.527746488, 0.550938554, + 0.573856910, 0.596465330, 0.618736235, 0.640646600, 0.662162782, 0.683240432, 0.703859801, 0.724001242, 0.743631336, + 0.762722631, 0.781259986, 0.799198449, 0.816521905, 0.833208595, 0.849243398, 0.864579161, 0.879211177, 0.893112051, + 0.906263928, 0.918639420, 0.930222611, 0.940985829, 0.950914731, 0.959992180, 0.968187000, 0.975495390, 0.981884488, + 0.987344345, 0.991851853, 0.995389113, 0.997937921, 0.999481947, 1.000000000, }; // Generate random number from 5 to wallet max int GetPriceFromMax(int max) { - return Random(1, max) * 5; // random range of 1 - wallet max / 5, where wallet max is the highest it goes as a multiple of 5 + // random range of 1 - wallet max / 5, where wallet max is the highest it goes as a multiple of 5 + return Random(1, max) * 5; } -uint16_t GetPriceFromSettings(Rando::Location *loc, PriceSettingsStruct priceSettings) { - auto ctx = Rando::Context::GetInstance(); - switch (ctx->GetOption(priceSettings.main).Get()){ - case RO_PRICE_VANILLA: - return loc->GetVanillaPrice(); - case RO_PRICE_CHEAP_BALANCED: - return GetCheapBalancedPrice(); - case RO_PRICE_BALANCED:{ - double random = RandomDouble(); //Randomly generated probability value - for (size_t i = 0; i < ShopPriceProbability.size(); i++) { - if (random < ShopPriceProbability[i]) { - //The randomly generated value has surpassed the total probability up to this point, so this is the generated price - return i * 5; //i in range [0, 59], output in range [0, 295] in increments of 5 +uint16_t GetPriceFromSettings(Rando::Location* loc, PriceSettingsStruct priceSettings) { + auto ctx = Rando::Context::GetInstance(); + switch (ctx->GetOption(priceSettings.main).Get()) { + case RO_PRICE_VANILLA: + return loc->GetVanillaPrice(); + case RO_PRICE_CHEAP_BALANCED: + return GetCheapBalancedPrice(); + case RO_PRICE_BALANCED: { + double random = RandomDouble(); // Randomly generated probability value + for (size_t i = 0; i < ShopPriceProbability.size(); i++) { + if (random < ShopPriceProbability[i]) { + // The randomly generated value has surpassed the total probability up to this point, so this is the + // generated price i in range [0, 59], output in range [0, 295] in increments of 5 + return i * 5; + } } - } - return 150; - } - case RO_PRICE_FIXED: - return (uint16_t)ctx->GetOption(priceSettings.fixedPrice).Get() * 5; - case RO_PRICE_RANGE:{ - uint16_t range1 = (uint16_t)ctx->GetOption(priceSettings.range1).Get() * 5; - uint16_t range2 = (uint16_t)ctx->GetOption(priceSettings.range2).Get() * 5; - return range1 < range2 ? Random(range1, range2+1) : Random(range2, range1+1); - } - case RO_PRICE_SET_BY_WALLET:{ - bool isTycoon = ctx->GetOption(RSK_INCLUDE_TYCOON_WALLET).Get(); - uint16_t noWeight = ctx->GetOption(priceSettings.noWallet).Get(); - uint16_t childWeight = ctx->GetOption(priceSettings.childWallet).Get(); - uint16_t adultWeight = ctx->GetOption(priceSettings.adultWallet).Get(); - uint16_t giantWeight = ctx->GetOption(priceSettings.giantWallet).Get(); - uint16_t tycoonWeight = isTycoon ? ctx->GetOption(priceSettings.tycoonWallet).Get() : 0; - uint16_t totalWeight = noWeight + childWeight + adultWeight + giantWeight + tycoonWeight; - if (totalWeight == 0){ //if no weight, return from sane range - return Random(0, 501); - } - int16_t selected = Random(1, totalWeight + 1); - selected = selected - noWeight; - if (selected <= 0){ - return 0; - } - selected = selected - childWeight; - if (selected <= 0){ - return Random(1, 100); - } - selected = selected - adultWeight; - if (selected <= 0){ - return Random(100, 201); - } - selected = selected - giantWeight; - if (selected <= 0){ - return Random(201, 501); - } - return Random(501, 999); - } - } - SPDLOG_ERROR("GetPriceFromSettings has failed to return a price for location {}, assigning a default value.", loc->GetName()); - assert(false); - return 69; //this should never happen, if it does, EASTER EGG that tells us something is wrong + return 150; + } + case RO_PRICE_FIXED: + return (uint16_t)ctx->GetOption(priceSettings.fixedPrice).Get() * 5; + case RO_PRICE_RANGE: { + uint16_t range1 = (uint16_t)ctx->GetOption(priceSettings.range1).Get() * 5; + uint16_t range2 = (uint16_t)ctx->GetOption(priceSettings.range2).Get() * 5; + return range1 < range2 ? Random(range1, range2 + 1) : Random(range2, range1 + 1); + } + case RO_PRICE_SET_BY_WALLET: { + bool isTycoon = ctx->GetOption(RSK_INCLUDE_TYCOON_WALLET).Get(); + uint16_t noWeight = ctx->GetOption(priceSettings.noWallet).Get(); + uint16_t childWeight = ctx->GetOption(priceSettings.childWallet).Get(); + uint16_t adultWeight = ctx->GetOption(priceSettings.adultWallet).Get(); + uint16_t giantWeight = ctx->GetOption(priceSettings.giantWallet).Get(); + uint16_t tycoonWeight = isTycoon ? ctx->GetOption(priceSettings.tycoonWallet).Get() : 0; + uint16_t totalWeight = noWeight + childWeight + adultWeight + giantWeight + tycoonWeight; + if (totalWeight == 0) { // if no weight, return from sane range + return Random(0, 501); + } + int16_t selected = Random(1, totalWeight + 1); + selected = selected - noWeight; + if (selected <= 0) { + return 0; + } + selected = selected - childWeight; + if (selected <= 0) { + return Random(1, 100); + } + selected = selected - adultWeight; + if (selected <= 0) { + return Random(100, 201); + } + selected = selected - giantWeight; + if (selected <= 0) { + return Random(201, 501); + } + return Random(501, 999); + } + } + SPDLOG_ERROR("GetPriceFromSettings has failed to return a price for location {}, assigning a default value.", + loc->GetName()); + assert(false); + return 69; // this should never happen, if it does, EASTER EGG that tells us something is wrong } -uint16_t GetRandomPrice(Rando::Location *loc, PriceSettingsStruct priceSettings) { - uint16_t initialPrice = GetPriceFromSettings(loc, priceSettings); - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(priceSettings.affordable) && !ctx->GetOption(priceSettings.main).Is(RO_PRICE_FIXED)){ - if (initialPrice > 500) { - return 505; - } else if (initialPrice > 200) { - return 205; - } else if (initialPrice > 99) { - return 100; - } else if (initialPrice > 0) { - return 5; - } - return 0; - } else { - return initialPrice; - } +uint16_t GetRandomPrice(Rando::Location* loc, PriceSettingsStruct priceSettings) { + uint16_t initialPrice = GetPriceFromSettings(loc, priceSettings); + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(priceSettings.affordable) && !ctx->GetOption(priceSettings.main).Is(RO_PRICE_FIXED)) { + if (initialPrice > 500) { + return 505; + } else if (initialPrice > 200) { + return 205; + } else if (initialPrice > 99) { + return 100; + } else if (initialPrice > 0) { + return 5; + } + return 0; + } else { + return initialPrice; + } } -//Similar to above, beta distribution with alpha = 1, beta = 2, -// multiplied by 20 instead of 60 to give values in rage [0, 95] in increments of 5 -//Average price ~31 +// Similar to above, beta distribution with alpha = 1, beta = 2, +// multiplied by 20 instead of 60 to give values in rage [0, 95] in increments of 5 +// Average price ~31 static constexpr std::array CheapPriceProbability = { - 0.097500187, 0.190002748, 0.277509301, 0.360018376, 0.437522571, 0.510021715, 0.577520272, 0.640029304, 0.697527584, 0.750024535, - 0.797518749, 0.840011707, 0.877508776, 0.910010904, 0.937504342, 0.960004661, 0.977502132, 0.989998967, 0.997500116, 1.000000000, + 0.097500187, 0.190002748, 0.277509301, 0.360018376, 0.437522571, 0.510021715, 0.577520272, + 0.640029304, 0.697527584, 0.750024535, 0.797518749, 0.840011707, 0.877508776, 0.910010904, + 0.937504342, 0.960004661, 0.977502132, 0.989998967, 0.997500116, 1.000000000, }; uint16_t GetCheapBalancedPrice() { @@ -251,7 +202,7 @@ uint16_t GetCheapBalancedPrice() { return -1; } -//Get 0 to 7, or a random number from 1-7 depending on shopsanity setting +// Get 0 to 7, or a random number from 1-7 depending on shopsanity setting int GetShopsanityReplaceAmount() { auto ctx = Rando::Context::GetInstance(); if (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF)) { @@ -274,670 +225,668 @@ int GetShopsanityReplaceAmount() { } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_SEVEN_ITEMS)) { return 7; } else if (ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_EIGHT_ITEMS)) { - return 8; //temporarily unreachable due to logic limitations + return 8; // temporarily unreachable due to logic limitations } else { assert(false); return 0; } - } else { //Random, get number in [1, 7] + } else { // Random, get number in [1, 7] return Random(1, 8); } } -//Initialize the table of trick names with an easy, medium, and hard name for each language +// Initialize the table of trick names with an easy, medium, and hard name for each language void InitTrickNames() { trickNameTable[RG_KOKIRI_SWORD] = { - Text{"Korok Sword", "Épée Korok", "Espada Korok"}, - Text{"Hero's Sword", "Épée du Héros", "Espada del héroe"}, - Text{"Razor Sword", "Lame Rasoir", "Espada de esmeril"} + Text{ "Korok Sword", "Épée Korok", "Espada Korok" }, + Text{ "Hero's Sword", "Épée du Héros", "Espada del héroe" }, + Text{ "Razor Sword", "Lame Rasoir", "Espada de esmeril" }, }; trickNameTable[RG_MASTER_SWORD] = { - Text{"Goddess Sword", "Épée de la déesse", "Espada Divina"}, - Text{"Gilded Sword", "Excalibur", "Espada de los Sabios"}, - Text{"Magical Sword", "Lame dorée", "Fay"} + Text{ "Goddess Sword", "Épée de la déesse", "Espada Divina" }, + Text{ "Gilded Sword", "Excalibur", "Espada de los Sabios" }, + Text{ "Magical Sword", "Lame dorée", "Fay" }, }; trickNameTable[RG_GIANTS_KNIFE] = { - Text{"Medigoron's Sword", "l'Épée de Medigoron", "La espada de Medigoron"}, - Text{"Razor Sword", "Lame Rasoir", "Espada de esmeril"}, - Text{"Royal Claymore", "Claymore Royale", "Royal Claymore"} + Text{ "Medigoron's Sword", "l'Épée de Medigoron", "La espada de Medigoron" }, + Text{ "Razor Sword", "Lame Rasoir", "Espada de esmeril" }, + Text{ "Royal Claymore", "Claymore Royale", "Royal Claymore" }, }; trickNameTable[RG_BIGGORON_SWORD] = { - Text{"Power Sword", "Épée de Puissance", "Espada de poder"}, - Text{"Fierce Deity Sword", "Épée du dieu démon", "Espada de la Fiera Deidad"}, - Text{"Tempered Sword", "Épée de Légende Nv.2", "Espada Maestra mejorada"}, - Text{"Biggoron's Knife", "Lame de Grogoron", "Daga de Biggoron"} + Text{ "Power Sword", "Épée de Puissance", "Espada de poder" }, + Text{ "Fierce Deity Sword", "Épée du dieu démon", "Espada de la Fiera Deidad" }, + Text{ "Tempered Sword", "Épée de Légende Nv.2", "Espada Maestra mejorada" }, + Text{ "Biggoron's Knife", "Lame de Grogoron", "Daga de Biggoron" }, }; trickNameTable[RG_DEKU_SHIELD] = { - Text{"Boko Shield", "Bouclier Boko", "Escudo Boko"}, - Text{"Ordon Shield", "Bouclier de Toal", "Escudo de Ordon"}, - Text{"Wooden Shield", "Bouclier de Bois", "Escudo de madera"} + Text{ "Boko Shield", "Bouclier Boko", "Escudo Boko" }, + Text{ "Ordon Shield", "Bouclier de Toal", "Escudo de Ordon" }, + Text{ "Wooden Shield", "Bouclier de Bois", "Escudo de madera" }, }; trickNameTable[RG_HYLIAN_SHIELD] = { - Text{"Hyrule Shield", "Bouclier d'Hyrule", "Escudo Hylian"}, - Text{"Goddess Shield", "Bouclier Sacré", "Escudo Divino"}, - Text{"Hero's Shield", "Bouclier du Héros", "Escudo del héroe"} + Text{ "Hyrule Shield", "Bouclier d'Hyrule", "Escudo Hylian" }, + Text{ "Goddess Shield", "Bouclier Sacré", "Escudo Divino" }, + Text{ "Hero's Shield", "Bouclier du Héros", "Escudo del héroe" }, }; trickNameTable[RG_MIRROR_SHIELD] = { - Text{"Magic Mirror", "Miroir Magique", "Escudo mágico"}, - Text{"Magical Shield", "Bouclier Magique", "Escudo arcano"}, - Text{"Mirror of Twilight", "Miroir des Ombres", "Espejo del Crepúsculo"} + Text{ "Magic Mirror", "Miroir Magique", "Escudo mágico" }, + Text{ "Magical Shield", "Bouclier Magique", "Escudo arcano" }, + Text{ "Mirror of Twilight", "Miroir des Ombres", "Espejo del Crepúsculo" }, }; trickNameTable[RG_GORON_TUNIC] = { - Text{"Gerudo Top", "Tunique Gerudo", "Pechera gerudo"}, - Text{"Flamebreaker Armor", "Armure de Pierre", " Armadura ignífuga"}, - Text{"Red Mail", "Habits Rouges", "Ropas rojas"} + Text{ "Gerudo Top", "Tunique Gerudo", "Pechera gerudo" }, + Text{ "Flamebreaker Armor", "Armure de Pierre", " Armadura ignífuga" }, + Text{ "Red Mail", "Habits Rouges", "Ropas rojas" }, }; trickNameTable[RG_ZORA_TUNIC] = { - Text{"Rito Tunic", "Tunique Rito", "Sayo rito"}, - Text{"Mermaid Suit", "Costume de sirène", "Costume de sirène"}, - Text{"Zora Armor", "Armure Zora", "Túnica Zora"}, - Text{"Blue Mail", "Habits Bleus", "Ropas azules"} + Text{ "Rito Tunic", "Tunique Rito", "Sayo rito" }, + Text{ "Mermaid Suit", "Costume de sirène", "Costume de sirène" }, + Text{ "Zora Armor", "Armure Zora", "Túnica Zora" }, + Text{ "Blue Mail", "Habits Bleus", "Ropas azules" }, }; trickNameTable[RG_IRON_BOOTS] = { - Text{"Iron Hoofs", "Patins de Plomb", "Botas férreas"}, - Text{"Snow Boots", "Bottes de Neige", "Botas de nieve"}, - Text{"Red Boots", "Bottes rouges", "Botas rojas"}, - Text{"Zora Greaves", "Bottes Zora", "Zora Greaves"}, - Text{"Boots of Power", "Bottes de Puissance", "Botas de plomo"} + Text{ "Iron Hoofs", "Patins de Plomb", "Botas férreas" }, + Text{ "Snow Boots", "Bottes de Neige", "Botas de nieve" }, + Text{ "Red Boots", "Bottes rouges", "Botas rojas" }, + Text{ "Zora Greaves", "Bottes Zora", "Zora Greaves" }, + Text{ "Boots of Power", "Bottes de Puissance", "Botas de plomo" }, }; trickNameTable[RG_HOVER_BOOTS] = { - Text{"Hover Hoofs", "Patins des airs", "Botas flotadoras"}, - Text{"Golden Boots", "Bottes dorées", "Botas de Oro"}, - Text{"Pegasus Boots", "Bottes pégase", "Botas de Pegaso"}, - Text{"Boots of Speed", "Bottes de vitesse", "Botas del desierto"} + Text{ "Hover Hoofs", "Patins des airs", "Botas flotadoras" }, + Text{ "Golden Boots", "Bottes dorées", "Botas de Oro" }, + Text{ "Pegasus Boots", "Bottes pégase", "Botas de Pegaso" }, + Text{ "Boots of Speed", "Bottes de vitesse", "Botas del desierto" }, }; trickNameTable[RG_WEIRD_EGG] = { - Text{"Poached Egg", "Oeuf à la coque", "Huevo pasado"}, - Text{"Lon Lon Egg", "Oeuf Lon Lon", "Huevo Lon Lon"}, - Text{"Zora Egg", "Oeuf Zora", "Huevo Zora"} + Text{ "Poached Egg", "Oeuf à la coque", "Huevo pasado" }, + Text{ "Lon Lon Egg", "Oeuf Lon Lon", "Huevo Lon Lon" }, + Text{ "Zora Egg", "Oeuf Zora", "Huevo Zora" }, }; trickNameTable[RG_ZELDAS_LETTER] = { - Text{"Ruto's Letter", "Lettre de Ruto", "Carta de Ruto"}, - Text{"Royal Letter", "Lettre Eoyale", "Carta para Kafei"}, - Text{"Zelda's Business Card", "Carte d'affaires de Zelda", "Carta"}, - Text{"Letter to Kafei", "Lettre pour Kafei", "Carta para Kafei "}, - Text{"Goat's Letter", "Lettre de la Chèvre", "Carta de la Cabra"}, - Text{"Maggie's Letter", "Lettre de Maggy", "Carta de Dolores"} + Text{ "Ruto's Letter", "Lettre de Ruto", "Carta de Ruto" }, + Text{ "Royal Letter", "Lettre Eoyale", "Carta para Kafei" }, + Text{ "Zelda's Business Card", "Carte d'affaires de Zelda", "Carta" }, + Text{ "Letter to Kafei", "Lettre pour Kafei", "Carta para Kafei " }, + Text{ "Goat's Letter", "Lettre de la Chèvre", "Carta de la Cabra" }, + Text{ "Maggie's Letter", "Lettre de Maggy", "Carta de Dolores" }, }; trickNameTable[RG_BOOMERANG] = { - Text{"Banana", "Banane", "Plátano"}, - Text{"Prank Fetch Toy", "Inséparable Bâtonnet", "Bumerang"}, - Text{"Gale Boomerang", "Boomerang Tornade", "Bumerán tornado"}, - Text{"Magic Boomerang", "Boomerang Magique", "Bumerán mágico"} + Text{ "Banana", "Banane", "Plátano" }, + Text{ "Prank Fetch Toy", "Inséparable Bâtonnet", "Bumerang" }, + Text{ "Gale Boomerang", "Boomerang Tornade", "Bumerán tornado" }, + Text{ "Magic Boomerang", "Boomerang Magique", "Bumerán mágico" }, }; trickNameTable[RG_LENS_OF_TRUTH] = { - Text{"Sheikah-leidoscope", "Sheikah-léidoscope", "Monóculo de la Verdad"}, - Text{"Sheikah Sensor", "Sonar Sheikah", "Sensor Sheikah"}, - Text{"Crystal of Vision", "Cristal de Vision", "Cristal de Visión"}, - Text{"Magnifying Lens", "Loupe", "Lente Aumentadora"} + Text{ "Sheikah-leidoscope", "Sheikah-léidoscope", "Monóculo de la Verdad" }, + Text{ "Sheikah Sensor", "Sonar Sheikah", "Sensor Sheikah" }, + Text{ "Crystal of Vision", "Cristal de Vision", "Cristal de Visión" }, + Text{ "Magnifying Lens", "Loupe", "Lente Aumentadora" }, }; trickNameTable[RG_MEGATON_HAMMER] = { - Text{"Goron Gavel", "Masse Perforatrice", "Mazo Goron"}, - Text{"Magic Hammer", "Marteau Magique", "Martillo mágico"}, - Text{"Skull Hammer", "Maillet Ressort", "Martillo de hierro"} + Text{ "Goron Gavel", "Masse Perforatrice", "Mazo Goron" }, + Text{ "Magic Hammer", "Marteau Magique", "Martillo mágico" }, + Text{ "Skull Hammer", "Maillet Ressort", "Martillo de hierro" }, }; trickNameTable[RG_STONE_OF_AGONY] = { - Text{"Cave Charm", "Charme de grotte", "Amuleto de la cueva"}, - Text{"Stone of Agahnim", "Fragment d'Agahnim", "Piedra de Agahnim"}, - Text{"Shard of Agony", "Fragment de Souffrance", "Piedra de la Agonía"}, - Text{"Pirate's Charm", "Pierre de Pirate", "Amuleto Pirata"} + Text{ "Cave Charm", "Charme de grotte", "Amuleto de la cueva" }, + Text{ "Stone of Agahnim", "Fragment d'Agahnim", "Piedra de Agahnim" }, + Text{ "Shard of Agony", "Fragment de Souffrance", "Piedra de la Agonía" }, + Text{ "Pirate's Charm", "Pierre de Pirate", "Amuleto Pirata" }, }; trickNameTable[RG_DINS_FIRE] = { - Text{"Eldin's Fire", "Feu d'Eldin", "Fuego de Eldin"}, - Text{"Din's Blaze", "Flamme de Din", "Poder de Din"}, - Text{"Magic Lantern", "Lanterne Magique", "Linterna mágica"}, - Text{"Ether Medallion", "Médaillon d'Éther", "Medallón de Tesoro"}, - Text{"Bombos Medallion", "Médaillon des Flammes", "Medallón del Temblor"} + Text{ "Eldin's Fire", "Feu d'Eldin", "Fuego de Eldin" }, + Text{ "Din's Blaze", "Flamme de Din", "Poder de Din" }, + Text{ "Magic Lantern", "Lanterne Magique", "Linterna mágica" }, + Text{ "Ether Medallion", "Médaillon d'Éther", "Medallón de Tesoro" }, + Text{ "Bombos Medallion", "Médaillon des Flammes", "Medallón del Temblor" }, }; trickNameTable[RG_FARORES_WIND] = { - Text{"Faron's Wind", "Vent de Firone", "Viento de Farone"}, - Text{"Farore's Windfall", "Zéphyr de Farore", "Valor de Farore"}, - Text{"Tingle Air", "Tingle Air", "Tingle de aire"}, - Text{"Travel Medallion", "Amulette de téléportation", "Medallón Maligno"}, - Text{"Irene's Taxi", "Le taxi d'Aëline", "El taxi de Airín"} + Text{ "Faron's Wind", "Vent de Firone", "Viento de Farone" }, + Text{ "Farore's Windfall", "Zéphyr de Farore", "Valor de Farore" }, + Text{ "Tingle Air", "Tingle Air", "Tingle de aire" }, + Text{ "Travel Medallion", "Amulette de téléportation", "Medallón Maligno" }, + Text{ "Irene's Taxi", "Le taxi d'Aëline", "El taxi de Airín" }, }; trickNameTable[RG_NAYRUS_LOVE] = { - Text{"Lanayru's Love", "Amour de Lanelle", "Amor de Lanayru"}, - Text{"Nayru's Passion", "Passion de Nayru", "Sabiduría de Nayru"}, - Text{"Tingle Shield", "Bouclier Tingle", "Escudo de hormigueo"}, - Text{"Shield Spell", "Bouclier Magique", "Hechizo de Protección"}, - Text{"Magic Armor", "Armure Magique", "Armadura mágica"} + Text{ "Lanayru's Love", "Amour de Lanelle", "Amor de Lanayru" }, + Text{ "Nayru's Passion", "Passion de Nayru", "Sabiduría de Nayru" }, + Text{ "Tingle Shield", "Bouclier Tingle", "Escudo de hormigueo" }, + Text{ "Shield Spell", "Bouclier Magique", "Hechizo de Protección" }, + Text{ "Magic Armor", "Armure Magique", "Armadura mágica" }, }; trickNameTable[RG_FIRE_ARROWS] = { - Text{"Fire Rod", "Baguette de feu", "Cetro de fuego"}, - Text{"Bomb Arrow", "Flèche-Bombe", "Flecha bomba"}, - Text{"Red Candle", "Bougie Rouge", "Vela roja"} + Text{ "Fire Rod", "Baguette de feu", "Cetro de fuego" }, + Text{ "Bomb Arrow", "Flèche-Bombe", "Flecha bomba" }, + Text{ "Red Candle", "Bougie Rouge", "Vela roja" }, }; trickNameTable[RG_ICE_ARROWS] = { - Text{"Ice Rod", "Baguette des Glaces", "Cetro de Hielo"}, - Text{"Ancient Arrow", "Flèche Archéonique", "Flecha ancestral"}, - Text{"Ice Trap Arrow", "Flèche de Piège de Glace", "Cetro de hielo"} + Text{ "Ice Rod", "Baguette des Glaces", "Cetro de Hielo" }, + Text{ "Ancient Arrow", "Flèche Archéonique", "Flecha ancestral" }, + Text{ "Ice Trap Arrow", "Flèche de Piège de Glace", "Cetro de hielo" }, }; trickNameTable[RG_LIGHT_ARROWS] = { - Text{"Wind Arrow", "Flèche de Vent", "Flecha del Viento"}, - Text{"Wand of Gamelon", "Baguette de Gamelon", "Varita de Gamelón"}, - Text{"Shock Arrow", "Flèches Électriques", "Flecha eléctrica"}, - Text{"Silver Arrow", "Flèches d'Argent", "Flecha de plata"} + Text{ "Wind Arrow", "Flèche de Vent", "Flecha del Viento" }, + Text{ "Wand of Gamelon", "Baguette de Gamelon", "Varita de Gamelón" }, + Text{ "Shock Arrow", "Flèches Électriques", "Flecha eléctrica" }, + Text{ "Silver Arrow", "Flèches d'Argent", "Flecha de plata" }, }; trickNameTable[RG_GERUDO_MEMBERSHIP_CARD] = { - Text{"Desert Title Deed", "Abonnement Gerudo", "Escritura del desierto"}, - Text{"Sickle Moon Flag", "Drapeau du croissant de lune", "Bandera de la Luna Creciente"}, - Text{"Complimentary ID", "Bon de félicitation", "Cupón especial"}, - Text{"Gerudo's Card", "Carte Goron", "Tóken Gerudo"}, - Text{"Gerudo's Membership Card", "Autographe de Nabooru", "Tarjeta Gerudo"} + Text{ "Desert Title Deed", "Abonnement Gerudo", "Escritura del desierto" }, + Text{ "Sickle Moon Flag", "Drapeau du croissant de lune", "Bandera de la Luna Creciente" }, + Text{ "Complimentary ID", "Bon de félicitation", "Cupón especial" }, + Text{ "Gerudo's Card", "Carte Goron", "Tóken Gerudo" }, + Text{ "Gerudo's Membership Card", "Autographe de Nabooru", "Tarjeta Gerudo" }, }; trickNameTable[RG_MAGIC_BEAN_PACK] = { - Text{"Funky Bean Pack", "Paquet de Fèves Magiques", "Lote de frijoles mágicos"}, - Text{"Grapple Berries", "Baies de grappin", "Bayas de garfio"}, - Text{"Crenel Bean Pack", "Paquet de Haricots Gonggle", "Lote de alubias mágicas"}, - Text{"Mystical Seed Pack", "Pack de graines mystiques", "Paquete de semillas místicas"} + Text{ "Funky Bean Pack", "Paquet de Fèves Magiques", "Lote de frijoles mágicos" }, + Text{ "Grapple Berries", "Baies de grappin", "Bayas de garfio" }, + Text{ "Crenel Bean Pack", "Paquet de Haricots Gonggle", "Lote de alubias mágicas" }, + Text{ "Mystical Seed Pack", "Pack de graines mystiques", "Paquete de semillas místicas" }, }; trickNameTable[RG_DOUBLE_DEFENSE] = { - Text{"Diamond Hearts", "Coeurs de Diamant", "Contenedor de diamante"}, - Text{"Double Damage", "Double Souffrance", "Doble daño receptivo"}, - Text{"Quadruple Defence", "Quadruple Défence", "Defensa cuádruple"} + Text{ "Diamond Hearts", "Coeurs de Diamant", "Contenedor de diamante" }, + Text{ "Double Damage", "Double Souffrance", "Doble daño receptivo" }, + Text{ "Quadruple Defence", "Quadruple Défence", "Defensa cuádruple" }, }; trickNameTable[RG_POCKET_EGG] = { - Text{"Arpagos Egg", "Oeuf d'Arpagos", "Huevo de Arpagos"}, - Text{"Lon Lon Egg", "oeuf Lon Lon", "Huevo Lon Lon"}, - Text{"Zora Egg", "oeuf Zora", "Huevo del Pez Viento"} + Text{ "Arpagos Egg", "Oeuf d'Arpagos", "Huevo de Arpagos" }, + Text{ "Lon Lon Egg", "oeuf Lon Lon", "Huevo Lon Lon" }, + Text{ "Zora Egg", "oeuf Zora", "Huevo del Pez Viento" }, }; trickNameTable[RG_POCKET_EGG] = { - Text{"D.I.Y. Alarm Clock", "Réveille-matin improvisé", "Alarma emplumada portátil"}, - Text{"Kakariko Cucco", "Cocotte Cocorico", "Cuco de Kakariko"}, - Text{"Hatched Cucco", "Cocotte éclose", "Pollo de bolsillo"} + Text{ "D.I.Y. Alarm Clock", "Réveille-matin improvisé", "Alarma emplumada portátil" }, + Text{ "Kakariko Cucco", "Cocotte Cocorico", "Cuco de Kakariko" }, + Text{ "Hatched Cucco", "Cocotte éclose", "Pollo de bolsillo" }, }; trickNameTable[RG_COJIRO] = { - Text{"Blucco", "Chair-Qui-Poule", "Cucazul"}, - Text{"Piyoko", "Piyoko", "Piyoko"}, - Text{"Dark Cucco", "Cocotte Sombre", "Cucco oscuro"}, - Text{"Grog's Cucco", "Cocotte de Grog", "Cuco de Grog"} + Text{ "Blucco", "Chair-Qui-Poule", "Cucazul" }, + Text{ "Piyoko", "Piyoko", "Piyoko" }, + Text{ "Dark Cucco", "Cocotte Sombre", "Cucco oscuro" }, + Text{ "Grog's Cucco", "Cocotte de Grog", "Cuco de Grog" }, }; trickNameTable[RG_ODD_MUSHROOM] = { - Text{"Magic Mushroom", "Champignon magique", "Champiñón mágico"}, - Text{"Endura Shroom", "Champi Vigueur", "Champiñón del bosque"}, - Text{"Sleepy Toadstool", "Crapaud Fatigué", "Seta durmiente"}, - Text{"Mushroom", "Champignon", "Seta"} + Text{ "Magic Mushroom", "Champignon magique", "Champiñón mágico" }, + Text{ "Endura Shroom", "Champi Vigueur", "Champiñón del bosque" }, + Text{ "Sleepy Toadstool", "Crapaud Fatigué", "Seta durmiente" }, + Text{ "Mushroom", "Champignon", "Seta" }, }; trickNameTable[RG_ODD_POTION] = { - Text{"Odd Medicine", "Élixir suspect", "Poción rara"}, - Text{"Granny's Poultice", "Mixture de Granny", "Medicina de la abuela"}, - Text{"Mushroom Poultice", "Mixture de champignon", "Medicina de champiñones"}, - Text{"Secret Medicine", "Médicament", "Pócima secreta"}, - Text{"Mushroom Spores", "Spores de Champignons", "Esporas de hongos"}, - Text{"Hanyu Spore", "Hanyu Spore", "Espora Hanyu"} + Text{ "Odd Medicine", "Élixir suspect", "Poción rara" }, + Text{ "Granny's Poultice", "Mixture de Granny", "Medicina de la abuela" }, + Text{ "Mushroom Poultice", "Mixture de champignon", "Medicina de champiñones" }, + Text{ "Secret Medicine", "Médicament", "Pócima secreta" }, + Text{ "Mushroom Spores", "Spores de Champignons", "Esporas de hongos" }, + Text{ "Hanyu Spore", "Hanyu Spore", "Espora Hanyu" }, }; trickNameTable[RG_POACHERS_SAW] = { - Text{"Carpenter's Saw", "Scie du charpentier", "Sierra del carpintero"}, - Text{"Poacher's Sword", "Hache du chasseur", "Espada del capataz"}, - Text{"Ancient Bladesaw", "Longue Épée Archéonique", "Mandoble ancestral"}, - Text{"Woodcutter's Axe", "Hache du Bûcheron", "Hacha de leñador"}, - Text{"Grog's Saw", "Scie de Grog", "Sierra del Cazador Furtivo"} + Text{ "Carpenter's Saw", "Scie du charpentier", "Sierra del carpintero" }, + Text{ "Poacher's Sword", "Hache du chasseur", "Espada del capataz" }, + Text{ "Ancient Bladesaw", "Longue Épée Archéonique", "Mandoble ancestral" }, + Text{ "Woodcutter's Axe", "Hache du Bûcheron", "Hacha de leñador" }, + Text{ "Grog's Saw", "Scie de Grog", "Sierra del Cazador Furtivo" }, }; trickNameTable[RG_BROKEN_SWORD] = { - Text{"Broken Biggoron's Sword", "Épée brisée de Grogoron", "Espada de Biggoron rota"}, - Text{"Broken Giant's Knife", "Lame des Géants brisée", "Daga gigante rota"}, - Text{"Broken Noble Sword", "Épée noble brisée", "Espada noble rota"}, - Text{"Broken Picori Blade", "Épée Minish brisée", "Espada minish rota"}, - Text{"Decayed Master Sword", "Épée de légende pourrie", "Espada decadente de leyenda"} + Text{ "Broken Biggoron's Sword", "Épée brisée de Grogoron", "Espada de Biggoron rota" }, + Text{ "Broken Giant's Knife", "Lame des Géants brisée", "Daga gigante rota" }, + Text{ "Broken Noble Sword", "Épée noble brisée", "Espada noble rota" }, + Text{ "Broken Picori Blade", "Épée Minish brisée", "Espada minish rota" }, + Text{ "Decayed Master Sword", "Épée de légende pourrie", "Espada decadente de leyenda" }, }; trickNameTable[RG_PRESCRIPTION] = { - Text{"Biggoron's Prescription", "Ordonnance de Grogoron", "Receta de Biggoron"}, - Text{"Eyedrop Prescription", "Ordonnance de gouttes", "Receta ocular"}, - Text{"Urgent Prescription", "Ordonnance urgente", "Prescripción"}, - Text{"Swordsman's Scroll", "Précis d'escrime", "Esgrimidorium"}, - Text{"Portrait of Oren", "Portrait d'Orlène", "Retrato de Oren"}, - Text{"Letter to King Zora", "Lettre au roi Zora", "Carta al Rey Zora"} + Text{ "Biggoron's Prescription", "Ordonnance de Grogoron", "Receta de Biggoron" }, + Text{ "Eyedrop Prescription", "Ordonnance de gouttes", "Receta ocular" }, + Text{ "Urgent Prescription", "Ordonnance urgente", "Prescripción" }, + Text{ "Swordsman's Scroll", "Précis d'escrime", "Esgrimidorium" }, + Text{ "Portrait of Oren", "Portrait d'Orlène", "Retrato de Oren" }, + Text{ "Letter to King Zora", "Lettre au roi Zora", "Carta al Rey Zora" }, }; trickNameTable[RG_EYEBALL_FROG] = { - Text{"Don Gero", "Don Gero", "Don Gero"}, - Text{"Hot-Footed Frog", "Grenouille à pieds chauds", "Rana de patas calientes"}, - Text{"Lost Swordsmith", "Forgeron perdu", "Espadachín perdido"}, - Text{"Eyedrop Frog", "Grenouille-qui-louche", "Globo Ocular de Rana"} + Text{ "Don Gero", "Don Gero", "Don Gero" }, + Text{ "Hot-Footed Frog", "Grenouille à pieds chauds", "Rana de patas calientes" }, + Text{ "Lost Swordsmith", "Forgeron perdu", "Espadachín perdido" }, + Text{ "Eyedrop Frog", "Grenouille-qui-louche", "Globo Ocular de Rana" }, }; trickNameTable[RG_EYEDROPS] = { - Text{"Biggoron's Eyedrops", "Gouttes de Grogoron", "Gotas de Biggoron"}, - Text{"Hyrule's Finest Eyedrops", "Eau du Lac Hylia", "Gotas oculares"}, - Text{"Moon's Tear", "Larme de Lune", "Lágrima de Luna"}, - Text{"Engine Grease", "Graisse moteur", "Grasa del motor"}, - Text{"Zora Perfume", "Parfum Zora", "Perfume Zora"} + Text{ "Biggoron's Eyedrops", "Gouttes de Grogoron", "Gotas de Biggoron" }, + Text{ "Hyrule's Finest Eyedrops", "Eau du Lac Hylia", "Gotas oculares" }, + Text{ "Moon's Tear", "Larme de Lune", "Lágrima de Luna" }, + Text{ "Engine Grease", "Graisse moteur", "Grasa del motor" }, + Text{ "Zora Perfume", "Parfum Zora", "Perfume Zora" }, }; trickNameTable[RG_CLAIM_CHECK] = { - Text{"Clay Check", "Certificat Grogoron", "Comprobante de Reclamación"}, - Text{"Ancient Tablet", "Stèle ancienne", "Litografía arcana"}, - Text{"Sheikah Slate", "Tablette Sheikah", "Piedra Sheikah"}, - Text{"Cyclone Slate", "Ardoise des tornades", "Pizarra de los Torbellinos"} + Text{ "Clay Check", "Certificat Grogoron", "Comprobante de Reclamación" }, + Text{ "Ancient Tablet", "Stèle ancienne", "Litografía arcana" }, + Text{ "Sheikah Slate", "Tablette Sheikah", "Piedra Sheikah" }, + Text{ "Cyclone Slate", "Ardoise des tornades", "Pizarra de los Torbellinos" }, }; trickNameTable[RG_GOLD_SKULLTULA_TOKEN] = { - Text{"Skulltula Token", "Bon de Skulltula dorée", "Símbolo de Skulltula"}, - Text{"Golden Skulltula Spirit", "Pièce de Skulltula dorée", "Tóken de Skulltula Dorada"}, - Text{"Gold Walltula Token", "Jeton de Walltula dorée", "Skulltula dorada"}, - Text{"Maiamai", "Ti'gorneau", "Maimai"}, - Text{"Gratitude Crystal", "Cristal de gratitude", "Gema de gratitud"}, - Text{"Korok Seed", "Noix korogu", "Semilla de kolog"} + Text{ "Skulltula Token", "Bon de Skulltula dorée", "Símbolo de Skulltula" }, + Text{ "Golden Skulltula Spirit", "Pièce de Skulltula dorée", "Tóken de Skulltula Dorada" }, + Text{ "Gold Walltula Token", "Jeton de Walltula dorée", "Skulltula dorada" }, + Text{ "Maiamai", "Ti'gorneau", "Maimai" }, + Text{ "Gratitude Crystal", "Cristal de gratitude", "Gema de gratitud" }, + Text{ "Korok Seed", "Noix korogu", "Semilla de kolog" }, }; trickNameTable[RG_PROGRESSIVE_HOOKSHOT] = { - Text{"Progressive Grappling Hook", "Lance-chaîne (prog.)", "Garra progresiva"}, - Text{"Progressive Clawshot", "Grappin-griffe (prog.)", "Zarpa progresiva"}, - Text{"Progressive Gripshot", "Grappince (prog.)", "Enganchador progresivo"}, - Text{"Progressive Rope", "Corde (prog.)", "Cuerda progresivo"} + Text{ "Progressive Grappling Hook", "Lance-chaîne (prog.)", "Garra progresiva" }, + Text{ "Progressive Clawshot", "Grappin-griffe (prog.)", "Zarpa progresiva" }, + Text{ "Progressive Gripshot", "Grappince (prog.)", "Enganchador progresivo" }, + Text{ "Progressive Rope", "Corde (prog.)", "Cuerda progresivo" }, }; trickNameTable[RG_PROGRESSIVE_STRENGTH] = { - Text{"Power Glove", "Gant de Puissance (prog.)", "Guanteletes progresivos"}, - Text{"Power Bracelet", "Bracelet de Force (prog.)", "Brasaletes progresivos"}, - Text{"Magic Bracelet", "Bracelet Magique (prog.)", "Manoplas progresivas"} + Text{ "Power Glove", "Gant de Puissance (prog.)", "Guanteletes progresivos" }, + Text{ "Power Bracelet", "Bracelet de Force (prog.)", "Brasaletes progresivos" }, + Text{ "Magic Bracelet", "Bracelet Magique (prog.)", "Manoplas progresivas" }, }; trickNameTable[RG_PROGRESSIVE_BOMB_BAG] = { - Text{"Progressive Bomb Capacity", "Capacité de bombes (prog.)", "Mayor capacidad de bombas"}, - Text{"Progressive Bomb Pack", "Paquet de bombes (prog.)", "Zurrón de bombas progresivo"}, - Text{"Progressive Bomb Box", "Boîte à bombes (prog.)", "Bolsa de bombas progresiva"}, - Text{"Progressive Blast Mask", "Masque d'Explosion (prog.)", "Máscara explosiva progresiva"}, - Text{"Progressive Powder Kegs", "Baril de Poudre (prog.)", "Barril de polvo progresivo"}, - Text{"Progressive Remote Bombs", "Bombes à distance (prog.)", "Bombas remotas progresivas"} + Text{ "Progressive Bomb Capacity", "Capacité de bombes (prog.)", "Mayor capacidad de bombas" }, + Text{ "Progressive Bomb Pack", "Paquet de bombes (prog.)", "Zurrón de bombas progresivo" }, + Text{ "Progressive Bomb Box", "Boîte à bombes (prog.)", "Bolsa de bombas progresiva" }, + Text{ "Progressive Blast Mask", "Masque d'Explosion (prog.)", "Máscara explosiva progresiva" }, + Text{ "Progressive Powder Kegs", "Baril de Poudre (prog.)", "Barril de polvo progresivo" }, + Text{ "Progressive Remote Bombs", "Bombes à distance (prog.)", "Bombas remotas progresivas" }, }; trickNameTable[RG_PROGRESSIVE_BOW] = { - Text{"Progressive Arrow Capacity", "Capacité de flèches (prog.)", "Mayor capacidad de flechas"}, - Text{"Progressive Hero's Bow", "Arc du héros (prog.)", "Arco del héroe progresivo"}, - Text{"Progressive Arrow Holder", "Arbalète (prog.)", "Ballesta progresiva"}, - Text{"Progressive Crossbow", "Arbalète (prog.)", "Ballesta progresiva"}, - Text{"Progressive Sacred Bow", "Arc sacré (prog)", "Arco Sagrado Progresivo"}, - Text{"Progressive Lynel Bow", "Arc de Lynel (prog.)", "Arco de centaleón Progresivo"} + Text{ "Progressive Arrow Capacity", "Capacité de flèches (prog.)", "Mayor capacidad de flechas" }, + Text{ "Progressive Hero's Bow", "Arc du héros (prog.)", "Arco del héroe progresivo" }, + Text{ "Progressive Arrow Holder", "Arbalète (prog.)", "Ballesta progresiva" }, + Text{ "Progressive Crossbow", "Arbalète (prog.)", "Ballesta progresiva" }, + Text{ "Progressive Sacred Bow", "Arc sacré (prog)", "Arco Sagrado Progresivo" }, + Text{ "Progressive Lynel Bow", "Arc de Lynel (prog.)", "Arco de centaleón Progresivo" }, }; trickNameTable[RG_PROGRESSIVE_SLINGSHOT] = { - Text{"Progressive Seed Capacity", "Capacité de graines (prog.)", "Mayor capacidad de semillas"}, - Text{"Progressive Catapult", "Catapulte (prog.)", "Catapulta progresiva"}, - Text{"Progressive Scattershot", "Lance-Pierre rafale (prog.)", "Resortera múltiple progresiva"}, - Text{"Progressive Seed Launcher", "Lanceur de semences (prog.)", "Lanzador de semillas progresivo"}, - Text{"Progressive Seed Satchel", "Sac de graines (prog.)", "Bolsa de semillas progresiva"} + Text{ "Progressive Seed Capacity", "Capacité de graines (prog.)", "Mayor capacidad de semillas" }, + Text{ "Progressive Catapult", "Catapulte (prog.)", "Catapulta progresiva" }, + Text{ "Progressive Scattershot", "Lance-Pierre rafale (prog.)", "Resortera múltiple progresiva" }, + Text{ "Progressive Seed Launcher", "Lanceur de semences (prog.)", "Lanzador de semillas progresivo" }, + Text{ "Progressive Seed Satchel", "Sac de graines (prog.)", "Bolsa de semillas progresiva" }, }; trickNameTable[RG_PROGRESSIVE_WALLET] = { - Text{"Progressive Rupee Capacity", "Capacité de rubis (prog.)", "Mayor capacidad de rupias"}, - Text{"Progressive Purse", "Sacoche (prog.)", "Cartera de rupias progresiva"}, - Text{"Progressive Rupee Bag", "Sac à rubis (prog.)", "Zurrón de rupias progresivo"}, - Text{"Progressive Rupoor Capacity", "Capacité de Roupir (prog.)", "Capacidad progresiva Rupobre"}, - Text{"Progressive Spoils Bag", "Sac à Butin (prog.)", "Bolsa de trofeos progresiva"}, - Text{"Progressive Ruby Bag", "Capacité du sac Ruby (prog.)", "Bolso Ruby progresivo"} + Text{ "Progressive Rupee Capacity", "Capacité de rubis (prog.)", "Mayor capacidad de rupias" }, + Text{ "Progressive Purse", "Sacoche (prog.)", "Cartera de rupias progresiva" }, + Text{ "Progressive Rupee Bag", "Sac à rubis (prog.)", "Zurrón de rupias progresivo" }, + Text{ "Progressive Rupoor Capacity", "Capacité de Roupir (prog.)", "Capacidad progresiva Rupobre" }, + Text{ "Progressive Spoils Bag", "Sac à Butin (prog.)", "Bolsa de trofeos progresiva" }, + Text{ "Progressive Ruby Bag", "Capacité du sac Ruby (prog.)", "Bolso Ruby progresivo" }, }; trickNameTable[RG_PROGRESSIVE_SCALE] = { - Text{"Progressive Flippers", "Palmes de Zora (prog.)", "Aletas de zora progresiva"}, - Text{"Progressive Dragon's Scale", "Écaille du dragon d'eau (prog.)", "Escama dragón acuático progresiva"}, - Text{"Progressive Diving Ability", "Plongée (prog.)", "Buceo progresivo"}, - Text{"Progressive Pearl", "Perle (prog.)", "Perla progresiva"}, - Text{"Progressive Scute", "Bulle (prog.)", "Fragmento Zora progresivo"} + Text{ "Progressive Flippers", "Palmes de Zora (prog.)", "Aletas de zora progresiva" }, + Text{ "Progressive Dragon's Scale", "Écaille du dragon d'eau (prog.)", "Escama dragón acuático progresiva" }, + Text{ "Progressive Diving Ability", "Plongée (prog.)", "Buceo progresivo" }, + Text{ "Progressive Pearl", "Perle (prog.)", "Perla progresiva" }, + Text{ "Progressive Scute", "Bulle (prog.)", "Fragmento Zora progresivo" }, }; trickNameTable[RG_PROGRESSIVE_NUT_UPGRADE] = { - Text{"Progressive Nut Pack", "Paquet de noix (prog.)", "Mayor capacidad de semillas"}, - Text{"Progressive Bait Bag", "Sac à Appâts (prog.)", "Bolsa de cebo progresiva"}, - Text{"Progressive Pear Capacity", "Capacité de poire (prog.)", "Capacidad progresiva de pera"}, - Text{"Progressive Nut Bag", "Sac de noix (prog.)", "Bolsa de nueces progresiva"}, - Text{"Progressive Husk Capacity", "Capacité de noisettes (prog.)", "Mayor capacidad de castañas"} + Text{ "Progressive Nut Pack", "Paquet de noix (prog.)", "Mayor capacidad de semillas" }, + Text{ "Progressive Bait Bag", "Sac à Appâts (prog.)", "Bolsa de cebo progresiva" }, + Text{ "Progressive Pear Capacity", "Capacité de poire (prog.)", "Capacidad progresiva de pera" }, + Text{ "Progressive Nut Bag", "Sac de noix (prog.)", "Bolsa de nueces progresiva" }, + Text{ "Progressive Husk Capacity", "Capacité de noisettes (prog.)", "Mayor capacidad de castañas" }, }; trickNameTable[RG_PROGRESSIVE_STICK_UPGRADE] = { - Text{"Progressive Stick Bag", "Sac de bâtons (prog.)", "Mayor capacidad de ramas deku"}, - Text{"Progressive Stick Pack", "Paquet de bâtons Mojo (prog.)", "Mayor capacidad de bastones"}, - Text{"Progressive Branch Capacity", "Capacité de la succursale (prog.)", "Capacidad progresiva de la sucursal"}, - Text{"Progressive Rod Capacity", "Capacité de tiges (prog.)", "Mayor capacidad de cetros deku"} + Text{ "Progressive Stick Bag", "Sac de bâtons (prog.)", "Mayor capacidad de ramas deku" }, + Text{ "Progressive Stick Pack", "Paquet de bâtons Mojo (prog.)", "Mayor capacidad de bastones" }, + Text{ "Progressive Branch Capacity", "Capacité de la succursale (prog.)", + "Capacidad progresiva de la sucursal" }, + Text{ "Progressive Rod Capacity", "Capacité de tiges (prog.)", "Mayor capacidad de cetros deku" }, }; trickNameTable[RG_PROGRESSIVE_BOMBCHUS] = { - Text{"Progressive Bomblings", "Bombinsectes (prog.)", "Bombinsectos progresivos"}, - Text{"Progressive Sentrobe Bombs", "Bombe de Sphérodrone (prog.)", "Bomba de helicobot progresivo"}, - Text{"Progressive Bomb-ombs", "Bombe Soldat (prog.)", "Soldado bomba progresivo"}, - Text{"Progressive Missiles", "Missiles (prog.)", "Misiles progresivos"}, - Text{"Progressive Bombchu Bag", "Sac à Bombchu (prog.)", "Bombachus progresivos"} + Text{ "Progressive Bomblings", "Bombinsectes (prog.)", "Bombinsectos progresivos" }, + Text{ "Progressive Sentrobe Bombs", "Bombe de Sphérodrone (prog.)", "Bomba de helicobot progresivo" }, + Text{ "Progressive Bomb-ombs", "Bombe Soldat (prog.)", "Soldado bomba progresivo" }, + Text{ "Progressive Missiles", "Missiles (prog.)", "Misiles progresivos" }, + Text{ "Progressive Bombchu Bag", "Sac à Bombchu (prog.)", "Bombachus progresivos" }, }; trickNameTable[RG_PROGRESSIVE_MAGIC_METER] = { - Text{"Progressive Stamina Meter", "Jauge d'endurance (prog.)", "Medidor de vigor progresivo"}, - Text{"Progressive Energy Gauge", "Jauge d'énergie (prog.)", "Medidor de energía progresivo"}, - Text{"Progressive Magic Powder", "Poudre magique (prog.)", "Medidor de carga progresivo"} + Text{ "Progressive Stamina Meter", "Jauge d'endurance (prog.)", "Medidor de vigor progresivo" }, + Text{ "Progressive Energy Gauge", "Jauge d'énergie (prog.)", "Medidor de energía progresivo" }, + Text{ "Progressive Magic Powder", "Poudre magique (prog.)", "Medidor de carga progresivo" }, }; trickNameTable[RG_PROGRESSIVE_OCARINA] = { - Text{"Progressive Memento", "Souvenir (prog.)", "Silbato progresivo"}, - Text{"Progressive Whistle", "Siffler (prog.)", "Silbido progresivo"}, - Text{"Progressive Flute", "Flûte (prog.)", "Flauta progresiva"}, - Text{"Progressive Recorder", "Harmonica (prog.)", "Armónica progresiva"} + Text{ "Progressive Memento", "Souvenir (prog.)", "Silbato progresivo" }, + Text{ "Progressive Whistle", "Siffler (prog.)", "Silbido progresivo" }, + Text{ "Progressive Flute", "Flûte (prog.)", "Flauta progresiva" }, + Text{ "Progressive Recorder", "Harmonica (prog.)", "Armónica progresiva" }, }; trickNameTable[RG_PROGRESSIVE_GORONSWORD] = { - Text{"Progressive Titan Blade", "Lame des Titans (prog.)", "Hoja del Titán progresiva"}, - Text{"Progressive Goron Knife", "Lame Goron (prog.)", "Daga Goron progresiva"}, - Text{"Progressive Giant Sword", "Épée géante (prog.)", "Espada gigante progresiva"}, - Text{"Progressive Darknut Sword", "Épée de Darknut (prog.)", "Espada Darknut progresiva"}, - Text{"Progressive Power Sword", "Épée de Puissance (prog.)", "Espada de poder progresiva"}, - Text{"Progressive Big Stabby", "Gros coup de poignard (prog.)", "Gran puñalada progresiva"} + Text{ "Progressive Titan Blade", "Lame des Titans (prog.)", "Hoja del Titán progresiva" }, + Text{ "Progressive Goron Knife", "Lame Goron (prog.)", "Daga Goron progresiva" }, + Text{ "Progressive Giant Sword", "Épée géante (prog.)", "Espada gigante progresiva" }, + Text{ "Progressive Darknut Sword", "Épée de Darknut (prog.)", "Espada Darknut progresiva" }, + Text{ "Progressive Power Sword", "Épée de Puissance (prog.)", "Espada de poder progresiva" }, + Text{ "Progressive Big Stabby", "Gros coup de poignard (prog.)", "Gran puñalada progresiva" }, }; trickNameTable[RG_EMPTY_BOTTLE] = { - Text{"Empty Canteen", "Cantine vide", "cantimplora vacía"}, - Text{"Vial of Winds", "Fiole de vents", "Vial de Vientos"}, - Text{"Tingle Bottle", "Flacon de Tingle", "Botella de Tingle"}, - Text{"Magic Bottle", "Flacon magique", "Frasco feérico"}, - Text{"Glass Bottle", "Flacon de verre", "Botella de cristal"}, - Text{"Bottle with Water", "Flacon d'eau", "Botella Tingle"} + Text{ "Empty Canteen", "Cantine vide", "cantimplora vacía" }, + Text{ "Vial of Winds", "Fiole de vents", "Vial de Vientos" }, + Text{ "Tingle Bottle", "Flacon de Tingle", "Botella de Tingle" }, + Text{ "Magic Bottle", "Flacon magique", "Frasco feérico" }, + Text{ "Glass Bottle", "Flacon de verre", "Botella de cristal" }, + Text{ "Bottle with Water", "Flacon d'eau", "Botella Tingle" }, }; trickNameTable[RG_BOTTLE_WITH_MILK] = { - Text{"Bottle with Chateau Romani", "Flacon de cuvée Romani", "Botella de Reserva Romani"}, - Text{"Bottle with Premium Milk", "Flacon avec lait de qualité supérieure", "Biberón con leche Premium"}, - Text{"Bottle with Mystery Milk", "Flacon de lait grand cru", "Botella de leche extra"}, - Text{"Bottle with Fresh Milk", "Flacon de lait frais", "Botella de leche fresca"},}; + Text{ "Bottle with Chateau Romani", "Flacon de cuvée Romani", "Botella de Reserva Romani" }, + Text{ "Bottle with Premium Milk", "Flacon avec lait de qualité supérieure", "Biberón con leche Premium" }, + Text{ "Bottle with Mystery Milk", "Flacon de lait grand cru", "Botella de leche extra" }, + Text{ "Bottle with Fresh Milk", "Flacon de lait frais", "Botella de leche fresca" }, + }; trickNameTable[RG_BOTTLE_WITH_RED_POTION] = { - Text{"Bottle with Red Chu Jelly", "Flacon de gelée Chuchu rouge", "Jugo de Chuchu Rojo"}, - Text{"Bottle with Hibiscus Potion", "Flacon de potion de Hibiscus", "Botella de poción de Hibisco"}, - Text{"Bottle with Medicine of Life", "Flacon d'élixir rouge", "Botella de medicina de la vida"}, - Text{"Bottle with Heart Potion", "Flacon de potion de soin", "Botella de poción de salud"} + Text{ "Bottle with Red Chu Jelly", "Flacon de gelée Chuchu rouge", "Jugo de Chuchu Rojo" }, + Text{ "Bottle with Hibiscus Potion", "Flacon de potion de Hibiscus", "Botella de poción de Hibisco" }, + Text{ "Bottle with Medicine of Life", "Flacon d'élixir rouge", "Botella de medicina de la vida" }, + Text{ "Bottle with Heart Potion", "Flacon de potion de soin", "Botella de poción de salud" }, }; trickNameTable[RG_BOTTLE_WITH_GREEN_POTION] = { - Text{"Bottle with Green Chu Jelly", "Flacon de gelée Chuchu verte", "Jugo de Chuchu Verde"}, - Text{"Bottle with Lamp Oil", "Flacon de Huile à lanterne", "Botella de Aceite de candil "}, - Text{"Bottle with Medicine of Magic", "Flacon d'élixir vert", "Botella de medicina mágica"}, - Text{"Bottle with Stamina Potion", "Flacon d'Endurol", "Botella de elixir vigorizante"} + Text{ "Bottle with Green Chu Jelly", "Flacon de gelée Chuchu verte", "Jugo de Chuchu Verde" }, + Text{ "Bottle with Lamp Oil", "Flacon de Huile à lanterne", "Botella de Aceite de candil " }, + Text{ "Bottle with Medicine of Magic", "Flacon d'élixir vert", "Botella de medicina mágica" }, + Text{ "Bottle with Stamina Potion", "Flacon d'Endurol", "Botella de elixir vigorizante" }, }; trickNameTable[RG_BOTTLE_WITH_BLUE_POTION] = { - Text{"Bottle with Blue Chu Jelly", "Flacon de gelée Chuchu bleue", "Jugo de Chuchu Azul"}, - Text{"Bottle with Water of Life", "Flacon d'élixir bleu", "Botella de agua de la vida"}, - Text{"Bottle with Air Potion", "Flacon de potion d'oxygène", "Botella de oxígeno"} + Text{ "Bottle with Blue Chu Jelly", "Flacon de gelée Chuchu bleue", "Jugo de Chuchu Azul" }, + Text{ "Bottle with Water of Life", "Flacon d'élixir bleu", "Botella de agua de la vida" }, + Text{ "Bottle with Air Potion", "Flacon de potion d'oxygène", "Botella de oxígeno" }, }; trickNameTable[RG_BOTTLE_WITH_FAIRY] = { - Text{"Bottle with Forest Firefly", "Flacon avec une luciole", "Luciérnaga del bosque"}, - Text{"Bottle with Deku Princess", "Flacon avec Deku Princess", "Botella con Deku Princess"}, - Text{"Bottle with Stray Fairy", "Flacon avec une fée perdue", "Hada perdida en una botella"} + Text{ "Bottle with Forest Firefly", "Flacon avec une luciole", "Luciérnaga del bosque" }, + Text{ "Bottle with Deku Princess", "Flacon avec Deku Princess", "Botella con Deku Princess" }, + Text{ "Bottle with Stray Fairy", "Flacon avec une fée perdue", "Hada perdida en una botella" }, }; trickNameTable[RG_BOTTLE_WITH_FISH] = { - Text{"Bottle with Small Jabu-Jabu", "Flacon avec mini Jabu-Jabu", "Lord Chapu-Chapu embotellado"}, - Text{"Bottle with Reekfish", "Flacon avec Reekfish", "Reekfish embotellada"}, - Text{"Bottle with Hyrule Bass", "Flacon avec perche d'Hyrule", "Locha de Hyrule embotellada"}, - Text{"Bottle with Hyrule Loach", "Flacon avec loche d'Hyrule", "Perca de Términa embotellada"} + Text{ "Bottle with Small Jabu-Jabu", "Flacon avec mini Jabu-Jabu", "Lord Chapu-Chapu embotellado" }, + Text{ "Bottle with Reekfish", "Flacon avec Reekfish", "Reekfish embotellada" }, + Text{ "Bottle with Hyrule Bass", "Flacon avec perche d'Hyrule", "Locha de Hyrule embotellada" }, + Text{ "Bottle with Hyrule Loach", "Flacon avec loche d'Hyrule", "Perca de Términa embotellada" }, }; trickNameTable[RG_BOTTLE_WITH_BLUE_FIRE] = { - Text{"Bottle with Will-O-Wisp", "Flacon avec feu follet", "Botella de llama azul"}, - Text{"Bottle with Ancient Flame", "Flacon de flamme ancienne", "Botella de fuego ancestral"}, - Text{"Bottle with a Blue Candle", "Flacon avec une bougie bleue", "Botella con una vela azul"}, - Text{"Bottle with Red Ice", "Flacon de Glace Rouge", "Botella de Hielo rojo"}, - Text{"Bottle with Nayru's Flame", "Flacon de flamme de Nayru", "Botella de llamas de Nayru"} + Text{ "Bottle with Will-O-Wisp", "Flacon avec feu follet", "Botella de llama azul" }, + Text{ "Bottle with Ancient Flame", "Flacon de flamme ancienne", "Botella de fuego ancestral" }, + Text{ "Bottle with a Blue Candle", "Flacon avec une bougie bleue", "Botella con una vela azul" }, + Text{ "Bottle with Red Ice", "Flacon de Glace Rouge", "Botella de Hielo rojo" }, + Text{ "Bottle with Nayru's Flame", "Flacon de flamme de Nayru", "Botella de llamas de Nayru" }, }; trickNameTable[RG_BOTTLE_WITH_BUGS] = { - Text{"Bottle with Baby Tektites", "Flacon de bébé Araknon", "Tektites en una botella"}, - Text{"Bottle with A Beetle", "Flacon avec un scarabée", "Botella con un escarabajo"}, - Text{"Bottle with Lanayru Ants", "Flacon de fourmis de Lanelle", "Celestarabajo embotellado"}, - Text{"Bottle with Insects", "Flacon de bibittes", "Saltabosques embotellados"}, - Text{"Bottle with a Golden Bee", "Flacon avec une abeille dorée", "Botella con una abeja dorada"} + Text{ "Bottle with Baby Tektites", "Flacon de bébé Araknon", "Tektites en una botella" }, + Text{ "Bottle with A Beetle", "Flacon avec un scarabée", "Botella con un escarabajo" }, + Text{ "Bottle with Lanayru Ants", "Flacon de fourmis de Lanelle", "Celestarabajo embotellado" }, + Text{ "Bottle with Insects", "Flacon de bibittes", "Saltabosques embotellados" }, + Text{ "Bottle with a Golden Bee", "Flacon avec une abeille dorée", "Botella con una abeja dorada" }, }; trickNameTable[RG_BOTTLE_WITH_POE] = { - Text{"Bottle with Ghini", "Flacon avec Ghini", "Ghini en una botella"}, - Text{"Bottle with Reapling", "Flacon avec Âme Damnée", "Reapling en una botella"}, - Text{"Bottle with Imp Poe", "Flacon avec Spectre", "Espectro en una botella"}, - Text{"Bottle with Anti-Fairy", "Flacon avec Tetdoss", "Whisp en una botella"} + Text{ "Bottle with Ghini", "Flacon avec Ghini", "Ghini en una botella" }, + Text{ "Bottle with Reapling", "Flacon avec Âme Damnée", "Reapling en una botella" }, + Text{ "Bottle with Imp Poe", "Flacon avec Spectre", "Espectro en una botella" }, + Text{ "Bottle with Anti-Fairy", "Flacon avec Tetdoss", "Whisp en una botella" }, }; trickNameTable[RG_RUTOS_LETTER] = { - Text{"Bottle with Maggie's Letter", "Flacon avec lettre de Maggy", "Carta de Dolores"}, - Text{"Bottle with Letter to Kafei", "Flacon avec lettre pour Kafei", "Carta para Kafei"}, - Text{"Bottle with Zelda's Letter", "Flacon avec Lettre de Zelda", "Carta náutica"} + Text{ "Bottle with Maggie's Letter", "Flacon avec lettre de Maggy", "Carta de Dolores" }, + Text{ "Bottle with Letter to Kafei", "Flacon avec lettre pour Kafei", "Carta para Kafei" }, + Text{ "Bottle with Zelda's Letter", "Flacon avec Lettre de Zelda", "Carta náutica" }, }; trickNameTable[RG_BOTTLE_WITH_BIG_POE] = { - Text{"Bottle with Composer Brother", "Flacon avec un compositeur", "Hermana Poe embotellada"}, - Text{"Bottle with Jalhalla", "Flacon avec Jalhalla", "Yaihalla embotellado"}, - Text{"Bottle with Grim Repoe", "Flacon avec le Faucheur", "Bubble en una botella"} + Text{ "Bottle with Composer Brother", "Flacon avec un compositeur", "Hermana Poe embotellada" }, + Text{ "Bottle with Jalhalla", "Flacon avec Jalhalla", "Yaihalla embotellado" }, + Text{ "Bottle with Grim Repoe", "Flacon avec le Faucheur", "Bubble en una botella" }, }; trickNameTable[RG_ZELDAS_LULLABY] = { - Text{"Ballad of the Goddess", "Chant de la déesse", "Cántico de la Diosa"}, - Text{"Song of Healing", "Chant de l'apaisement", "Canción de curación"}, - Text{"Song of the Hero", "Chant du héros", "Canción del héroe"} + Text{ "Ballad of the Goddess", "Chant de la déesse", "Cántico de la Diosa" }, + Text{ "Song of Healing", "Chant de l'apaisement", "Canción de curación" }, + Text{ "Song of the Hero", "Chant du héros", "Canción del héroe" }, }; trickNameTable[RG_EPONAS_SONG] = { - Text{"Song of Birds","Chant des oiseaux","Cantar del ave"}, - Text{"Song of Soaring", "Chant de l'envol", "Canción del viento"}, - Text{"Song of Horse", "Chant du cheval", "Chant du cheval"} + Text{ "Song of Birds", "Chant des oiseaux", "Cantar del ave" }, + Text{ "Song of Soaring", "Chant de l'envol", "Canción del viento" }, + Text{ "Song of Horse", "Chant du cheval", "Chant du cheval" }, }; trickNameTable[RG_SARIAS_SONG] = { - Text{"Mido's Song", "La chanson de Mido", "La canción de Mido"}, - Text{"Kass' Theme", "Le thème de Kass", "El tema de Kass"}, - Text{"Tune of Echoes", "Chant des Échos ", "Melodía del Eco "} + Text{ "Mido's Song", "La chanson de Mido", "La canción de Mido" }, + Text{ "Kass' Theme", "Le thème de Kass", "El tema de Kass" }, + Text{ "Tune of Echoes", "Chant des Échos ", "Melodía del Eco " }, }; trickNameTable[RG_SUNS_SONG] = { - Text{"Song of Passing", "Mambo de Manbo", "Melodía del transcurrir"}, - Text{"Command Melody", "Air du marionnettiste", "Cara al Sol"}, - Text{"Moon's Song", "La chanson de Moon", "La canción de la luna"} + Text{ "Song of Passing", "Mambo de Manbo", "Melodía del transcurrir" }, + Text{ "Command Melody", "Air du marionnettiste", "Cara al Sol" }, + Text{ "Moon's Song", "La chanson de Moon", "La canción de la luna" }, }; trickNameTable[RG_SONG_OF_TIME] = { - Text{"Song of Double Time", "Chant accéléré", "Canción del doble tiempo"}, - Text{"Inverted Song of Time", "Chant du temps inversé", "Canción del tiempo invertida"}, - Text{"Tune of Ages", "Chant du Temps", "Melodía del Tiempo"} + Text{ "Song of Double Time", "Chant accéléré", "Canción del doble tiempo" }, + Text{ "Inverted Song of Time", "Chant du temps inversé", "Canción del tiempo invertida" }, + Text{ "Tune of Ages", "Chant du Temps", "Melodía del Tiempo" }, }; trickNameTable[RG_SONG_OF_STORMS] = { - Text{"Ballad of Gales", "Requiem de la tornade", "Melodía del Tornado"}, - Text{"Frog's Song of Soul", "Rap des grenouilles", "Canción del alma de la rana"}, - Text{"Wind's Requiem", "Mélodie du vent", "Melodía del Viento"} + Text{ "Ballad of Gales", "Requiem de la tornade", "Melodía del Tornado" }, + Text{ "Frog's Song of Soul", "Rap des grenouilles", "Canción del alma de la rana" }, + Text{ "Wind's Requiem", "Mélodie du vent", "Melodía del Viento" }, }; trickNameTable[RG_MINUET_OF_FOREST] = { - Text{"Saria's Karaoke", "Karaoké de Saria", "Dueto del bosque"}, - Text{"Sonata of Awakening", "Sonate de l'éveil", "Sonata del despertar"}, - Text{"Wind God's Aria", "Hymne du dieu du vent", "Melodía del Espíritu del Viento"} + Text{ "Saria's Karaoke", "Karaoké de Saria", "Dueto del bosque" }, + Text{ "Sonata of Awakening", "Sonate de l'éveil", "Sonata del despertar" }, + Text{ "Wind God's Aria", "Hymne du dieu du vent", "Melodía del Espíritu del Viento" }, }; trickNameTable[RG_BOLERO_OF_FIRE] = { - Text{"Darunia's Tango", "Tango de Darunia", "Coro del fuego"}, - Text{"Tune of Currents", "Chants des Flux", "Melodía de las Corrientes"}, - Text{"Goron Lullaby", "Berceuse des Gorons", "Nana goron"} + Text{ "Darunia's Tango", "Tango de Darunia", "Coro del fuego" }, + Text{ "Tune of Currents", "Chants des Flux", "Melodía de las Corrientes" }, + Text{ "Goron Lullaby", "Berceuse des Gorons", "Nana goron" }, }; trickNameTable[RG_SERENADE_OF_WATER] = { - Text{"Ruto's Blues", "Blues de Ruto", "Sonata del agua"}, - Text{"New Wave Bossa Nova", "Bossa-nova des flots", "Bossanova de las olas"}, - Text{"Manbo's Mambo", "Mambo de Manbo", "Mambo de Manbo"} + Text{ "Ruto's Blues", "Blues de Ruto", "Sonata del agua" }, + Text{ "New Wave Bossa Nova", "Bossa-nova des flots", "Bossanova de las olas" }, + Text{ "Manbo's Mambo", "Mambo de Manbo", "Mambo de Manbo" }, }; trickNameTable[RG_REQUIEM_OF_SPIRIT] = { - Text{"Nabooru's Reggae", "Reggae de Nabooru", "Reggae del espíritu"}, - Text{"Elegy of Emptiness", "Hymne du vide", "Elegía al vacío"}, - Text{"Earth God's Lyric", "Hymne du dieu de la terre", "Melodía del Espíritu de la Tierra"} + Text{ "Nabooru's Reggae", "Reggae de Nabooru", "Reggae del espíritu" }, + Text{ "Elegy of Emptiness", "Hymne du vide", "Elegía al vacío" }, + Text{ "Earth God's Lyric", "Hymne du dieu de la terre", "Melodía del Espíritu de la Tierra" }, }; trickNameTable[RG_NOCTURNE_OF_SHADOW] = { - Text{"Impa's Death Metal", "Death métal d'Impa", "Diurno de la sombra"}, - Text{"Oath to Order", "Ode de l'appel", "Oda al orden"}, - Text{"Song of Discovery", "Chant des secrets", "Canto revelador"} + Text{ "Impa's Death Metal", "Death métal d'Impa", "Diurno de la sombra" }, + Text{ "Oath to Order", "Ode de l'appel", "Oda al orden" }, + Text{ "Song of Discovery", "Chant des secrets", "Canto revelador" }, }; trickNameTable[RG_PRELUDE_OF_LIGHT] = { - Text{"Rauru's Sing-Along", "Chansonnette de Rauru", "Predulio de luz"}, - Text{"Ballad of the Wind Fish", "Ballade sur Poisson-Rêve", "Balada del Piez Viento"}, - Text{"Song of Light", "Chant de la lumière", "Sonidos de la luz"} + Text{ "Rauru's Sing-Along", "Chansonnette de Rauru", "Predulio de luz" }, + Text{ "Ballad of the Wind Fish", "Ballade sur Poisson-Rêve", "Balada del Piez Viento" }, + Text{ "Song of Light", "Chant de la lumière", "Sonidos de la luz" }, }; trickNameTable[RG_KOKIRI_EMERALD] = { - Text{"Pendant of Courage", "Pendentif du courage", "Colgante del valor"}, - Text{"Farore's Pearl", "Perle de Farore", "Orbe de Farore"}, - Text{"Aquanine", "Smaragdine", "Yerbánida"}, - Text{"Farore's Emerald", "Émeraude de Farore", "Esmeralda de Farore"}, - Text{"Kokiri's Peridot", "Péridot Kokiri", "Ágata de los Kokiri"} + Text{ "Pendant of Courage", "Pendentif du courage", "Colgante del valor" }, + Text{ "Farore's Pearl", "Perle de Farore", "Orbe de Farore" }, + Text{ "Aquanine", "Smaragdine", "Yerbánida" }, + Text{ "Farore's Emerald", "Émeraude de Farore", "Esmeralda de Farore" }, + Text{ "Kokiri's Peridot", "Péridot Kokiri", "Ágata de los Kokiri" }, }; trickNameTable[RG_GORON_RUBY] = { - Text{"Pendant of Power", "Pendentif de la force", "Colgante del poder"}, - Text{"Din's Pearl", "Perle de Din", "Orbe de Din"}, - Text{"Crimsonine", "Alzanine", "Bermellina"}, - Text{"Din's Ruby", "Rubis de Din", "Rubí de Din"}, - Text{"Goron's Garnet", "Grenat Goron", "Topacio de los Goron"} + Text{ "Pendant of Power", "Pendentif de la force", "Colgante del poder" }, + Text{ "Din's Pearl", "Perle de Din", "Orbe de Din" }, + Text{ "Crimsonine", "Alzanine", "Bermellina" }, + Text{ "Din's Ruby", "Rubis de Din", "Rubí de Din" }, + Text{ "Goron's Garnet", "Grenat Goron", "Topacio de los Goron" }, }; trickNameTable[RG_ZORA_SAPPHIRE] = { - Text{"Pendant of Wisdom", "Pendentif de la sagesse", "Colgante de la sabiduría"}, - Text{"Nayru's Pearl", "Perle de Nayru", "Orbe de Nayru"}, - Text{"Azurine", "Aquanine", "Azurina"}, - Text{"Nayru's Sapphire", "Saphir de Nayru", "Zafiro de Nayru"}, - Text{"Zora's Aquamarine", "Aquamarine Zora", "Lapislázuli de los Zora"} + Text{ "Pendant of Wisdom", "Pendentif de la sagesse", "Colgante de la sabiduría" }, + Text{ "Nayru's Pearl", "Perle de Nayru", "Orbe de Nayru" }, + Text{ "Azurine", "Aquanine", "Azurina" }, + Text{ "Nayru's Sapphire", "Saphir de Nayru", "Zafiro de Nayru" }, + Text{ "Zora's Aquamarine", "Aquamarine Zora", "Lapislázuli de los Zora" }, }; trickNameTable[RG_FOREST_MEDALLION] = { - Text{"Wind Medallion", "Médaillon du vent", "Medallón del Viento"}, - Text{"Wind Element", "Elément Vent", "Elemento de aire"}, - Text{"Saria's Medallion", "Médaillon de Saria", "Medallón de Saria"}, - Text{"Sign of Air", "Glyphe de l'air", "Glifo de aire"}, - Text{"Medallion of Forest", "Médaillon du Temple de la Forêt", "Medalla del Bosque"} + Text{ "Wind Medallion", "Médaillon du vent", "Medallón del Viento" }, + Text{ "Wind Element", "Elément Vent", "Elemento de aire" }, + Text{ "Saria's Medallion", "Médaillon de Saria", "Medallón de Saria" }, + Text{ "Sign of Air", "Glyphe de l'air", "Glifo de aire" }, + Text{ "Medallion of Forest", "Médaillon du Temple de la Forêt", "Medalla del Bosque" }, }; trickNameTable[RG_FIRE_MEDALLION] = { - Text{"Fire Element", "Elément Feu", "Elemento de fuego"}, - Text{"Darunia's Medallion", "Médaillon de Darunia", "Medallón de Darunia"}, - Text{"Sign of Fire", "Glyphe de feu", "Glifo de fuego"}, - Text{"Medallion of Fire", "Médaillon du Temple du Feu", "Medalla del Fuego"} + Text{ "Fire Element", "Elément Feu", "Elemento de fuego" }, + Text{ "Darunia's Medallion", "Médaillon de Darunia", "Medallón de Darunia" }, + Text{ "Sign of Fire", "Glyphe de feu", "Glifo de fuego" }, + Text{ "Medallion of Fire", "Médaillon du Temple du Feu", "Medalla del Fuego" }, }; trickNameTable[RG_WATER_MEDALLION] = { - Text{"Water Element", "Elément Eau", "Elemento de agua"}, - Text{"Ice Medallion", "Médaillon de glace", "Medallón Helado"}, - Text{"Ruto's Medallion", "Médaillon de Ruto", "Medallón de Ruto"}, - Text{"Sign of Water", "Glyphe de l'eau", "Glifo de agua"}, - Text{"Medallion of Water", "Médaillon du Temple de l'Eau", "Medalla del Agua"} + Text{ "Water Element", "Elément Eau", "Elemento de agua" }, + Text{ "Ice Medallion", "Médaillon de glace", "Medallón Helado" }, + Text{ "Ruto's Medallion", "Médaillon de Ruto", "Medallón de Ruto" }, + Text{ "Sign of Water", "Glyphe de l'eau", "Glifo de agua" }, + Text{ "Medallion of Water", "Médaillon du Temple de l'Eau", "Medalla del Agua" }, }; trickNameTable[RG_SPIRIT_MEDALLION] = { - Text{"Earth Element", "Elément Terre", "Elemento de tierra"}, - Text{"Nabooru's Medallion", "Médaillon de Nabooru", "Medallón de Nabooru"}, - Text{"Sign of Earth", "Glyphe de la Terre", "Glifo de la tierra"}, - Text{"Medallion of Spirit", "Médaillon du Temple de l'Esprit", "Medalla del Espíritu"} + Text{ "Earth Element", "Elément Terre", "Elemento de tierra" }, + Text{ "Nabooru's Medallion", "Médaillon de Nabooru", "Medallón de Nabooru" }, + Text{ "Sign of Earth", "Glyphe de la Terre", "Glifo de la tierra" }, + Text{ "Medallion of Spirit", "Médaillon du Temple de l'Esprit", "Medalla del Espíritu" }, }; trickNameTable[RG_SHADOW_MEDALLION] = { - Text{"Fused Shadow", "Cristal d'ombre", "Sombra Fundida"}, - Text{"Impa's Medallion", "Médaillon d'Impa", "Medallón de Impa"}, - Text{"Sign of Illusion", "Glyphe de l'illusion", "Glifo de ilusión"}, - Text{"Medallion of Shadow", "Médaillon du Temple de l'Ombre", "Medalla de la Sombra"} + Text{ "Fused Shadow", "Cristal d'ombre", "Sombra Fundida" }, + Text{ "Impa's Medallion", "Médaillon d'Impa", "Medallón de Impa" }, + Text{ "Sign of Illusion", "Glyphe de l'illusion", "Glifo de ilusión" }, + Text{ "Medallion of Shadow", "Médaillon du Temple de l'Ombre", "Medalla de la Sombra" }, }; trickNameTable[RG_LIGHT_MEDALLION] = { - Text{"Compass of Light", "Boussole de lumière", "Brújula de Luz"}, - Text{"Rauru's Medallion", "Médaillon de Rauru", "Medallón de Rauru"}, - Text{"Sign of Destiny", "Glyphe du destin", "Glifo del destino"}, - Text{"Medallion of Light", "Médaillon du temple de lumière", "Medalla de la Luz"} + Text{ "Compass of Light", "Boussole de lumière", "Brújula de Luz" }, + Text{ "Rauru's Medallion", "Médaillon de Rauru", "Medallón de Rauru" }, + Text{ "Sign of Destiny", "Glyphe du destin", "Glifo del destino" }, + Text{ "Medallion of Light", "Médaillon du temple de lumière", "Medalla de la Luz" }, }; trickNameTable[RG_RECOVERY_HEART] = { - Text{"Love", "Bisou", "Te amo"}, - Text{"Life", "Vie", "vida"}, - Text{"HP", "VP", "VP"} + Text{ "Love", "Bisou", "Te amo" }, + Text{ "Life", "Vie", "vida" }, + Text{ "HP", "VP", "VP" }, }; trickNameTable[RG_GREEN_RUPEE] = { - Text{"False Greg", "Faux Greg", "Falso Greg"}, - Text{"One Ruby", "Un rubis", "Un rubí"}, - Text{"Rupoor (1)", "Roupir (1)", "Rupobre (1)"}, - Text{"One Rupee", "Un rubis", "Guaraní hyliano"}, - Text{"Rupee (1)", "Rubis (1)", "Peso hyliano"} + Text{ "False Greg", "Faux Greg", "Falso Greg" }, Text{ "One Ruby", "Un rubis", "Un rubí" }, + Text{ "Rupoor (1)", "Roupir (1)", "Rupobre (1)" }, Text{ "One Rupee", "Un rubis", "Guaraní hyliano" }, + Text{ "Rupee (1)", "Rubis (1)", "Peso hyliano" }, }; trickNameTable[RG_BLUE_RUPEE] = { - Text{"Blupee", "Bleubi", "Azupia"}, - Text{"Five Rubies", "Cinq Rubys", "Cinco rubíes"}, - Text{"Five Rupees", "Cinq rubis", "Bolívar hyliano"}, - Text{"Rupee (5)", "Rubis (5)", "Peso hyliano"}, - Text{"Rupoor (5)", "Roupir (5)", "Rupobre (5)"} + Text{ "Blupee", "Bleubi", "Azupia" }, + Text{ "Five Rubies", "Cinq Rubys", "Cinco rubíes" }, + Text{ "Five Rupees", "Cinq rubis", "Bolívar hyliano" }, + Text{ "Rupee (5)", "Rubis (5)", "Peso hyliano" }, + Text{ "Rupoor (5)", "Roupir (5)", "Rupobre (5)" }, }; trickNameTable[RG_RED_RUPEE] = { - Text{"Big 20", "Grand 20", "Los 20 grandes"}, - Text{"Twenty Rubies", "vingt rubis", "Veinte rubíes"}, - Text{"Rupoor (20)", "Roupir (20)", "Rupobre (20)"}, - Text{"Twenty Rupees", "Vingt rubis", "Colon hyliano"}, - Text{"Rupee (20)", "Rubis (20)", "Peso hyliano"} + Text{ "Big 20", "Grand 20", "Los 20 grandes" }, Text{ "Twenty Rubies", "vingt rubis", "Veinte rubíes" }, + Text{ "Rupoor (20)", "Roupir (20)", "Rupobre (20)" }, Text{ "Twenty Rupees", "Vingt rubis", "Colon hyliano" }, + Text{ "Rupee (20)", "Rubis (20)", "Peso hyliano" }, }; trickNameTable[RG_PURPLE_RUPEE] = { - Text{"Purpee", "pourbi", "morupiua"}, - Text{"Fifty Rubies", "cinquante rubis", "Cincuenta rubíes"}, - Text{"Rupoor (50)", "Roupir (50)", "Rupobre (50)"}, - Text{"Fifty Rupees", "Cinquante rubis", "Balboa hyliano"}, - Text{"Rupee (50)", "Rubis (50)", "Peso hyliano"} + Text{ "Purpee", "pourbi", "morupiua" }, + Text{ "Fifty Rubies", "cinquante rubis", "Cincuenta rubíes" }, + Text{ "Rupoor (50)", "Roupir (50)", "Rupobre (50)" }, + Text{ "Fifty Rupees", "Cinquante rubis", "Balboa hyliano" }, + Text{ "Rupee (50)", "Rubis (50)", "Peso hyliano" }, }; trickNameTable[RG_HUGE_RUPEE] = { - Text{"Hugo", "Or Rubi", "Oro Rubi"}, - Text{"Two Hundred Rubies", "deux cents rubis", "Doscientos rubíes"}, - Text{"Diamond", "Diamant", "Diamante"}, - Text{"Huge Ruby", "Énorme rubis", "Rubi gigante"}, - Text{"Two Hundred Rupees", "Deux cent rubis", "Euro hyliano"}, - Text{"Rupee (200)", "Rubis (200)", "Dólar hyliano"} + Text{ "Hugo", "Or Rubi", "Oro Rubi" }, + Text{ "Two Hundred Rubies", "deux cents rubis", "Doscientos rubíes" }, + Text{ "Diamond", "Diamant", "Diamante" }, + Text{ "Huge Ruby", "Énorme rubis", "Rubi gigante" }, + Text{ "Two Hundred Rupees", "Deux cent rubis", "Euro hyliano" }, + Text{ "Rupee (200)", "Rubis (200)", "Dólar hyliano" }, }; trickNameTable[RG_PIECE_OF_HEART] = { - Text{"Pizza Heart", "Fromage de cœur", "Pieza de Chorizo"}, - Text{"Little Bit Of Love", "Un peu d'amour", "Un poco de amor"}, - Text{"Rare Peach Stone", "Pierre de pêche rare", "Pierre de pêche rare"} + Text{ "Pizza Heart", "Fromage de cœur", "Pieza de Chorizo" }, + Text{ "Little Bit Of Love", "Un peu d'amour", "Un poco de amor" }, + Text{ "Rare Peach Stone", "Pierre de pêche rare", "Pierre de pêche rare" }, }; trickNameTable[RG_HEART_CONTAINER] = { - Text{"Crystal Heart", "Cœur de cristal", "Corazón de cristal"}, - Text{"Life Heart", "Cœur de vie", "Vida Corazón"}, - Text{"Lots of Love", "Beaucoup d'amour", "Mucho amor"} + Text{ "Crystal Heart", "Cœur de cristal", "Corazón de cristal" }, + Text{ "Life Heart", "Cœur de vie", "Vida Corazón" }, + Text{ "Lots of Love", "Beaucoup d'amour", "Mucho amor" }, }; trickNameTable[RG_TRIFORCE_PIECE] = { - Text{"Piece of Cheese", "Morceau de Fromage", "Piece of Cheese"}, - Text{"Triforce Shard", "Éclat de Triforce", "Triforce Shard"}, - Text{"Shiny Rock", "Caiiloux Brillant", "Shiny Rock"} + Text{ "Piece of Cheese", "Morceau de Fromage", "Piece of Cheese" }, + Text{ "Triforce Shard", "Éclat de Triforce", "Triforce Shard" }, + Text{ "Shiny Rock", "Caiiloux Brillant", "Shiny Rock" }, }; trickNameTable[RG_GOHMA_SOUL] = { - Text{"Spider Sense", "", ""}, - Text{"Deku Spirit", "", ""}, - Text{"Ghost of Ghoma", "", ""} + Text{ "Spider Sense", "", "" }, + Text{ "Deku Spirit", "", "" }, + Text{ "Ghost of Ghoma", "", "" }, }; trickNameTable[RG_KING_DODONGO_SOUL] = { - Text{"Lizard Soul", "", ""}, - Text{"Regal Remains", "", ""}, - Text{"Dodongo's Core", "", ""} + Text{ "Lizard Soul", "", "" }, + Text{ "Regal Remains", "", "" }, + Text{ "Dodongo's Core", "", "" }, }; trickNameTable[RG_BARINADE_SOUL] = { - Text{"Parasitic Poltergeist", "", ""}, - Text{"Jabu Insides", "", ""}, - Text{"Barinade Bacteria", "", ""} + Text{ "Parasitic Poltergeist", "", "" }, + Text{ "Jabu Insides", "", "" }, + Text{ "Barinade Bacteria", "", "" }, }; trickNameTable[RG_PHANTOM_GANON_SOUL] = { - Text{"Bigger Poe", "", ""}, - Text{"Sacred Forest Pine Tree", "", ""}, - Text{"Ganon's Phantom", "", ""} + Text{ "Bigger Poe", "", "" }, + Text{ "Sacred Forest Pine Tree", "", "" }, + Text{ "Ganon's Phantom", "", "" }, }; trickNameTable[RG_VOLVAGIA_SOUL] = { - Text{"Dragon Roast", "", ""}, - Text{"Hot n' Ready", "", ""}, - Text{"Volvagia's Vitality", "", ""} + Text{ "Dragon Roast", "", "" }, + Text{ "Hot n' Ready", "", "" }, + Text{ "Volvagia's Vitality", "", "" }, }; trickNameTable[RG_MORPHA_SOUL] = { - Text{"Dihydrogen Monoxide", "", ""}, - Text{"Morpha Molecules", "", ""}, - Text{"Wet Stuff", "", ""} + Text{ "Dihydrogen Monoxide", "", "" }, + Text{ "Morpha Molecules", "", "" }, + Text{ "Wet Stuff", "", "" }, }; trickNameTable[RG_BONGO_BONGO_SOUL] = { - Text{"Shadow Soul", "", ""}, - Text{"Dark Essence", "", ""}, - Text{"Bongo Bongo's Bongo", "", ""} + Text{ "Shadow Soul", "", "" }, + Text{ "Dark Essence", "", "" }, + Text{ "Bongo Bongo's Bongo", "", "" }, }; trickNameTable[RG_TWINROVA_SOUL] = { - Text{"Sandy Ashes", "", ""}, - Text{"Spiritual Spirit", "", ""}, - Text{"Twin Rovers", "", ""} + Text{ "Sandy Ashes", "", "" }, + Text{ "Spiritual Spirit", "", "" }, + Text{ "Twin Rovers", "", "" }, }; trickNameTable[RG_GANON_SOUL] = { - Text{"Pure Evil", "", ""}, - Text{"Ganon's Ghost", "", ""}, - Text{"Pork", "", ""} + Text{ "Pure Evil", "", "" }, + Text{ "Ganon's Ghost", "", "" }, + Text{ "Pork", "", "" }, }; trickNameTable[RG_FISHING_POLE] = { - Text{"Fish Tickler", "Fish Tickler", "Fish Tickler"}, - Text{"Floating Lure", "Floating Lure", "Floating Lure"}, - Text{"Fishing Reel", "Fishing Reel", "Fishing Reel"} + Text{ "Fish Tickler", "Fish Tickler", "Fish Tickler" }, + Text{ "Floating Lure", "Floating Lure", "Floating Lure" }, + Text{ "Fishing Reel", "Fishing Reel", "Fishing Reel" }, }; trickNameTable[RG_OCARINA_A_BUTTON] = { - Text{"Ocarina J Button", "", ""}, - Text{"Ocarina Ayy Button", "", ""}, - Text{"Ocarina A Trigger", "", ""} + Text{ "Ocarina J Button", "", "" }, + Text{ "Ocarina Ayy Button", "", "" }, + Text{ "Ocarina A Trigger", "", "" }, }; trickNameTable[RG_OCARINA_C_UP_BUTTON] = { - Text{"Ocarina C North Button", "", ""}, - Text{"Ocarina C App Button", "", ""}, - Text{"Ocarina Sup Button", "", ""} + Text{ "Ocarina C North Button", "", "" }, + Text{ "Ocarina C App Button", "", "" }, + Text{ "Ocarina Sup Button", "", "" }, }; trickNameTable[RG_OCARINA_C_DOWN_BUTTON] = { - Text{"Ocarina C South Button", "", ""}, - Text{"Ocarina Z Down Button", "", ""}, - Text{"Ocarina See Down Button", "", ""}, - Text{"Ocarina C Dawn Button", "", ""} + Text{ "Ocarina C South Button", "", "" }, + Text{ "Ocarina Z Down Button", "", "" }, + Text{ "Ocarina See Down Button", "", "" }, + Text{ "Ocarina C Dawn Button", "", "" }, }; trickNameTable[RG_OCARINA_C_LEFT_BUTTON] = { - Text{"Ocarina C West Button", "", ""}, - Text{"Ocarina Sea Left Button", "", ""}, - Text{"Ocarina C Lift Button", "", ""}, - Text{"Ocarina Rewind Button", "", ""} + Text{ "Ocarina C West Button", "", "" }, + Text{ "Ocarina Sea Left Button", "", "" }, + Text{ "Ocarina C Lift Button", "", "" }, + Text{ "Ocarina Rewind Button", "", "" }, }; trickNameTable[RG_OCARINA_C_RIGHT_BUTTON] = { - Text{"Ocarina C East Button", "", ""}, - Text{"Ocarina C Wright Button", "", ""}, - Text{"Overworld C Right Button", "", ""} + Text{ "Ocarina C East Button", "", "" }, + Text{ "Ocarina C Wright Button", "", "" }, + Text{ "Overworld C Right Button", "", "" }, }; /* @@ -945,193 +894,193 @@ void InitTrickNames() { trickNameTable[GI_HOOKSHOT] = { Text{"Grappling Hook", "Grappin-griffe", "Gancho lanzable"}, Text{"Clawshot", "Lance-chaîne", "Zarpa"}, - Text{"Gripshot", "Grappince", "Enganchador"} + Text{"Gripshot", "Grappince", "Enganchador"}, }; trickNameTable[GI_LONGSHOT] = { Text{"Longshot, no strings attached", "Grappin sans attrape", "Gancho lanzable más largo"}, Text{"Double Clawshot", "Double-grappin", "Superzarpa"}, - Text{"Switch Hook", "Great grappin", "Gancho chulo"} + Text{"Switch Hook", "Great grappin", "Gancho chulo"}, }; trickNameTable[GI_BOMB_BAG_1] = { Text{"Bomb Capacity (20)", "Capacité de bombes (20)", "Bolsa de bombas (contiene 20)"}, Text{"Bronze Bomb Bag", "Sac de Bombes de bronze", "Saco de bronce de bombas"}, - Text{"Small Bomb Bag", "Petit Sac de Bombes", "Zurrón de bombas pequeño"} + Text{"Small Bomb Bag", "Petit Sac de Bombes", "Zurrón de bombas pequeño"}, }; trickNameTable[GI_BOMB_BAG_2] = { Text{"Bomb Capacity (30)", "Capacité de bombes (30)", "Bolsa de bombas (contiene 30)"}, Text{"Silver Bomb Bag", "Sac de Bombes d'argent", "Saco plateado de bombas"}, - Text{"Medium Bomb Bag", "Sac de Bombes moyen", "Zurrón de bombas mediano"} + Text{"Medium Bomb Bag", "Sac de Bombes moyen", "Zurrón de bombas mediano"}, }; trickNameTable[GI_BOMB_BAG_3] = { Text{"Bomb Capacity (40)", "Capacité de bombes (40)", "Bolsa de bombas (contiene 40)"}, Text{"Golden Bomb Bag", "Sac de Bombes d'or", "Saco dorado de bombas"}, - Text{"Large Bomb Bag", "Gros Sac de Bombes", "Zurrón de bombas grande"} + Text{"Large Bomb Bag", "Gros Sac de Bombes", "Zurrón de bombas grande"}, }; trickNameTable[GI_BOW_1] = { Text{"Bow", "Arc", "Arco del Hada"}, Text{"Hero's Bow", "Arc du héros", "Arco del héroe"}, - Text{"Small Quiver", "Petit carquois", "Saco de flechas pequeño"} + Text{"Small Quiver", "Petit carquois", "Saco de flechas pequeño"}, }; trickNameTable[GI_BOW_2] = { Text{"Arrow Capacity (40)", "Capacité de flèches (40)", "Capacidad de flechas (40)"}, Text{"Silver Quiver", "Carquois d'argent", "Carcaj plateado"}, - Text{"Medium Quiver", "Carquois moyen", "Saco de flechas mediano"} + Text{"Medium Quiver", "Carquois moyen", "Saco de flechas mediano"}, }; trickNameTable[GI_BOW_3] = { Text{"Arrow Capacity (50)", "Capacité de flèches (50)", "Capacidad de flechas (50)"}, Text{"Golden Quiver", "Carquois d'or", "Carcaj dorado"}, - Text{"Large Quiver", "Gros carquois", "Saco de flechas grande"} + Text{"Large Quiver", "Gros carquois", "Saco de flechas grande"}, }; trickNameTable[GI_SLINGSHOT_1] = { Text{"Slingshot", "Lance-Pierre", "Tirachinas del Hada"}, Text{"Scattershot", "Lance-Pierre rafale", "Tirachinas múltiple"}, - Text{"Small Seed Satchel", "Petit sac de graines", "Bolsa de semillas pequeña"} + Text{"Small Seed Satchel", "Petit sac de graines", "Bolsa de semillas pequeña"}, }; trickNameTable[GI_SLINGSHOT_2] = { Text{"Deku Seed Capacity (40)", "Capacité de graines (40)", "Capacidad de semillas (40)"}, Text{"Silver Deku Seed Bullet Bag", "Sac de graines d'argent", "Bolsa de balas (contiene 40)"}, - Text{"Medium Seed Satchel", "Sac de graines moyen", "Bolsa de semillas mediana"} + Text{"Medium Seed Satchel", "Sac de graines moyen", "Bolsa de semillas mediana"}, }; trickNameTable[GI_SLINGSHOT_3] = { Text{"Deku Seed Capacity (50)", "Capacité de graines (50)", "Capacidad de semillas (50)"}, Text{"Golden Deku Seed Bullet Bag", "Sac de graines d'or", "Bolsa de balas (contiene 50)"}, - Text{"Large Seed Satchel", "Gros sac de graines", "Bolsa de semillas grande"} + Text{"Large Seed Satchel", "Gros sac de graines", "Bolsa de semillas grande"}, }; trickNameTable[GI_STRENGTH_1] = { Text{"Goron's Gauntlet", "Gantelet Goron", "Brazalete amarillo"}, Text{"Power Bracelet", "Bracelet de force", "Brazalete de fuerza"}, - Text{"Magic Bracelet", "Bracelet de Lavio", "Brazalete de Ravio"} + Text{"Magic Bracelet", "Bracelet de Lavio", "Brazalete de Ravio"}, }; trickNameTable[GI_STRENGTH_2] = { Text{"Silver Bracelets", "Bracelets d'argent", "Guantes Moguma"}, Text{"Power Gloves", "Gant de puissance", "Guante del Poder"}, - Text{"Magic Gauntlets", "Gantelet magique", "Guante mágico"} + Text{"Magic Gauntlets", "Gantelet magique", "Guante mágico"}, }; trickNameTable[GI_STRENGTH_3] = { Text{"Golden Bracelets", "Bracelets d'or", "Guantelete de Thanos"}, Text{"Titan's Mitts", "Moufle de titan", "Guantes de Titán"}, - Text{"Magnetic Gloves", "Magnéto-gants", "Guantes de fuego"} + Text{"Magnetic Gloves", "Magnéto-gants", "Guantes de fuego"}, }; trickNameTable[GI_SCALE_1] = { Text{"Silver Pearl", "Perle d'argent", "Perla de Plata progresiva"}, Text{"Adult Scale", "Écaille d'adulte", "Bola de bolos zora"}, - Text{"Zora Scale", "Écaille Zora", "Escama de Zora"} + Text{"Zora Scale", "Écaille Zora", "Escama de Zora"}, }; trickNameTable[GI_SCALE_2] = { Text{"Golden Pearl", "Perle d'or", "Perla de Oro progresiva"}, Text{"Giant Scale", "Écaille de géant", "Escama de Faren"}, - Text{"Water Dragon Scale", "Écaille du dragon de l'eau", "Escama de dragón acuático"} + Text{"Water Dragon Scale", "Écaille du dragon de l'eau", "Escama de dragón acuático"}, }; trickNameTable[GI_WALLET_1] = { Text{"Rupee Capacity (200)", "Capacité de rubis (200)", "Capacidad de rupias (200)"}, Text{"Silver Wallet", "Bourse d'argent", "Cartera de rupias de adulto"}, - Text{"Medium Wallet", "Bourse moyenne", "Zurrón de rupias mediano"} + Text{"Medium Wallet", "Bourse moyenne", "Zurrón de rupias mediano"}, }; trickNameTable[GI_WALLET_2] = { Text{"Rupee Capacity (500)", "Capacité de rubis (500)", "Capacidad de rupias (500)"}, Text{"Golden Wallet", "Bourse d'or", "Cartera de rupias gigante"}, - Text{"Large Wallet", "Grosse Bourse", "Zurrón de rupias grande"} + Text{"Large Wallet", "Grosse Bourse", "Zurrón de rupias grande"}, }; trickNameTable[GI_WALLET_3] = { Text{"Rupee Capacity (999)", "Capacité de rubis (999)", "Capacidad de rupias (999)"}, Text{"Golden Wallet", "Bourse d'or", "Cartera de ricachón"}, - Text{"Large Wallet", "Grosse Bourse", "Zurrón de rupias gigante"} + Text{"Large Wallet", "Grosse Bourse", "Zurrón de rupias gigante"}, }; trickNameTable[GI_DEKU_NUT_UPGRADE_1] = { Text{"Deku Bomb Capacity (30)", "Capacité de bombes Mojo (30)", "Capacidad de semillas deku (40)"}, Text{"Baba Nut Capacity (30)", "Capacité de noix Baba (30)", "Capacidad de nueces baba (40)"}, - Text{"Deku Nut Pack (30)", "Paquet de noix Mojo (30)", "Capacidad de nueces mojo (40)"} + Text{"Deku Nut Pack (30)", "Paquet de noix Mojo (30)", "Capacidad de nueces mojo (40)"}, }; trickNameTable[GI_DEKU_NUT_UPGRADE_2] = { Text{"Deku Bomb Capacity (40)", "Capacité de bombes Mojo (40)", "Capacidad de semillas deku (50)"}, Text{"Baba Nut Capacity (40)", "Capacité de noix Baba (40)", "Capacidad de nueces baba (50)"}, - Text{"Deku Nut Pack (40)", "Paquet de noix Mojo (40)", "Capacidad de nueces mojo (50)"} + Text{"Deku Nut Pack (40)", "Paquet de noix Mojo (40)", "Capacidad de nueces mojo (50)"}, }; trickNameTable[GI_DEKU_STICK_UPGRADE_1] = { Text{"Deku Rod Capacity (20)", "Capacité de tiges Mojo (20)", "Capacidad de palos mojo (20)"}, Text{"Boko Stick Capacity (20)", "Capacité de Bâtons Boko (20)", "Capacidad de palos boko (20)"}, - Text{"Deku Stick Pack (20)", "Paquet de bâtons Mojo (20)", "Capacidad de bastones deku (20)"} + Text{"Deku Stick Pack (20)", "Paquet de bâtons Mojo (20)", "Capacidad de bastones deku (20)"}, }; trickNameTable[GI_DEKU_STICK_UPGRADE_2] = { Text{"Deku Rod Capacity (30)", "Capacité de tiges Mojo (30)", "Capacidad de palos mojo (30)"}, Text{"Boko Stick Capacity (30)", "Capacité de Bâtons Boko (30)", "Capacidad de palos boko (30)"}, - Text{"Deku Stick Pack (30)", "Paquet de bâtons Mojo (30)", "Capacidad de bastones deku (30)"} + Text{"Deku Stick Pack (30)", "Paquet de bâtons Mojo (30)", "Capacidad de bastones deku (30)"}, }; trickNameTable[GI_MAGIC_1] = { Text{"Stamina Meter", "Jauge d'endurance", "Medidor de vigor"}, Text{"Energy Meter", "Jauge d'énergie", "Medidor de energía"}, - Text{"Magic Powder", "Poudre magique", "Medidor de carga"} + Text{"Magic Powder", "Poudre magique", "Medidor de carga"}, }; trickNameTable[GI_MAGIC_2] = { Text{"Enhanced Stamina Meter", "Jauge d'endurance améliorée", "Medidor de vigor mejorado"}, Text{"Enhanced Energy Meter", "Jauge d'énergie améliorée", "Medidor de energía mejorado"}, - Text{"Enhanced Magic Powder", "Poudre magique améliorée", "Medidor de carga mejorado"} + Text{"Enhanced Magic Powder", "Poudre magique améliorée", "Medidor de carga mejorado"}, }; trickNameTable[GI_OCARINA_1] = { Text{"Ocarina", "Ocarina", "Ocarina"}, Text{"Saria's Ocarina", "Ocarina de Saria", "Ocarina de Saria"}, - Text{"Wood Ocarina", "Ocarina de bois", "Ocarina del Hada"} + Text{"Wood Ocarina", "Ocarina de bois", "Ocarina del Hada"}, }; trickNameTable[GI_OCARINA_2] = { Text{"Flute", "Flûte", "Flauta"}, Text{"Zelda's Ocarina", "Ocarina de Zelda", "Ocarina de Zelda"}, - Text{"Ocarina of Winds", "Ocarina des vents", "Ocarina del Viento"} + Text{"Ocarina of Winds", "Ocarina des vents", "Ocarina del Viento"}, }; trickNameTable[GI_CUCCO] = { Text{"D.I.Y. Alarm Clock", "Réveille-matin improvisé", "Alarma emplumada"}, Text{"Kakariko Cucco", "Cocotte Cocorico", "Cuco de Kakariko"}, - Text{"Hatched Cucco", "Cocotte éclose", "Pollo"} + Text{"Hatched Cucco", "Cocotte éclose", "Pollo"}, }; trickNameTable[GI_MASK_KEATON] = { Text{"Kee... Something Mask", "Masque de Quiche", "Máscara Kealgo"}, Text{"Kitsune Mask", "Masque de Kitsune", "Máscara Kitsune"}, - Text{"Kafei's Mask", "Masque de Kafei", "Máscara de Kafei"} + Text{"Kafei's Mask", "Masque de Kafei", "Máscara de Kafei"}, }; trickNameTable[GI_MASK_SKULL] = { Text{"Skull Kid's Mask", "Masque de Skull Kid", "Máscara de Skull Kid"}, Text{"Stalfos Mask", "Masque de squelette", "Máscara de Stalfos"}, - Text{"Captain's Hat", "Heaume du capitaine", "Casco del capitán"} + Text{"Captain's Hat", "Heaume du capitaine", "Casco del capitán"}, }; trickNameTable[GI_MASK_SPOOKY] = { Text{"Skrik Mask", "Masque Skrik", "Máscara Escalofriante"}, Text{"ReDead Mask", "Masque de Remort", "Máscara de ReDead"}, - Text{"Gibdo Mask", "Masque de Gibdo", "Careta de Gibdo"} + Text{"Gibdo Mask", "Masque de Gibdo", "Careta de Gibdo"}, }; trickNameTable[GI_MASK_BUNNY] = { Text{"Peppy Mask", "Masque de Peppy", "Capucha de Pascua"}, Text{"Bunny Ears", "Oreilles de lapin", "Orejas de conejo"}, - Text{"Postman's Hat", "Casquette du facteur", "Gorra de cartero"} + Text{"Postman's Hat", "Casquette du facteur", "Gorra de cartero"}, }; trickNameTable[GI_MASK_GORON] = { Text{"Goro Mask", "Masque Goro", "Máscara Goro"}, Text{"Mask of Goron", "Masque des Gorons", "Máscara de los Goron"}, - Text{"Darunia Mask", "Masque de Darunia", "Máscara de Darmani"} + Text{"Darunia Mask", "Masque de Darunia", "Máscara de Darmani"}, }; trickNameTable[GI_MASK_ZORA] = { Text{"Zola Mask", "Masque Zola", "Máscara Zola"}, Text{"Mask of Zora", "Masque des Zoras", "Máscara de los Zora"}, - Text{"Ruto Mask", "Masque de Ruto", "Máscara de Mikau"} + Text{"Ruto Mask", "Masque de Ruto", "Máscara de Mikau"}, }; trickNameTable[GI_MASK_GERUDO] = { Text{"Ganguro Mask", "Masque de Ganguro", "Máscara Canguro"}, Text{"Mask of Gerudo", "Masque des Gerudos", "Máscara de las Gerudo"}, - Text{"Nabooru Mask", "Masque de Nabooru", "Máscara de Nabooru"} + Text{"Nabooru Mask", "Masque de Nabooru", "Máscara de Nabooru"}, }; trickNameTable[GI_MASK_TRUTH] = { Text{"Sheikah Mask", "Masque Sheikah", "Máscara Sheikah"}, Text{"Mask of Gossip", "Masque de potins", "Máscara chismosa"}, - Text{"Eye of Truth", "oeil de vérité", "Ojo de la Verdad"} + Text{"Eye of Truth", "oeil de vérité", "Ojo de la Verdad"}, }; */ } -//Generate a fake name for the ice trap based on the item it's displayed as +// Generate a fake name for the ice trap based on the item it's displayed as Text GetIceTrapName(uint8_t id) { - //If the trick names table has not been initialized, do so + // If the trick names table has not been initialized, do so if (!initTrickNames) { InitTrickNames(); initTrickNames = true; } - //Randomly get the easy, medium, or hard name for the given item id + // Randomly get the easy, medium, or hard name for the given item id return RandomElement(trickNameTable[id]); } \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp index da4c3eb43..7938d8665 100644 --- a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp @@ -66,16 +66,15 @@ static auto GetSpoilerLogPath() { } static auto GetPlacementLogPath() { - return GetGeneralPath(); + return GetGeneralPath(); } // Writes the location to the specified node. -static void WriteLocation( - std::string sphere, const RandomizerCheck locationKey, const bool withPadding = false) { - Rando::Location* location = Rando::StaticData::GetLocation(locationKey); - Rando::ItemLocation* itemLocation = Rando::Context::GetInstance()->GetItemLocation(locationKey); +static void WriteLocation(std::string sphere, const RandomizerCheck locationKey, const bool withPadding = false) { + Rando::Location* location = Rando::StaticData::GetLocation(locationKey); + Rando::ItemLocation* itemLocation = Rando::Context::GetInstance()->GetItemLocation(locationKey); - switch (gSaveContext.language) { + switch (gSaveContext.language) { case LANGUAGE_ENG: default: jsonData["playthrough"][sphere][location->GetName()] = itemLocation->GetPlacedItemName().GetEnglish(); @@ -86,48 +85,48 @@ static void WriteLocation( } } -//Writes a shuffled entrance to the specified node +// Writes a shuffled entrance to the specified node static void WriteShuffledEntrance(std::string sphereString, Entrance* entrance) { - int16_t originalIndex = entrance->GetIndex(); - int16_t destinationIndex = -1; - int16_t replacementIndex = entrance->GetReplacement()->GetIndex(); - int16_t replacementDestinationIndex = -1; - std::string name = GetEntranceData(originalIndex)->source; - std::string text = GetEntranceData(replacementIndex)->destination; + int16_t originalIndex = entrance->GetIndex(); + int16_t destinationIndex = -1; + int16_t replacementIndex = entrance->GetReplacement()->GetIndex(); + int16_t replacementDestinationIndex = -1; + std::string name = GetEntranceData(originalIndex)->source; + std::string text = GetEntranceData(replacementIndex)->destination; - // Track the reverse destination, useful for savewarp handling - if (entrance->GetReverse() != nullptr) { - destinationIndex = entrance->GetReverse()->GetIndex(); - // When decouple is off we track the replacement's reverse destination, useful for recording visited entrances - if (!entrance->IsDecoupled()) { - replacementDestinationIndex = entrance->GetReplacement()->GetReverse()->GetIndex(); + // Track the reverse destination, useful for savewarp handling + if (entrance->GetReverse() != nullptr) { + destinationIndex = entrance->GetReverse()->GetIndex(); + // When decouple is off we track the replacement's reverse destination, useful for recording visited entrances + if (!entrance->IsDecoupled()) { + replacementDestinationIndex = entrance->GetReplacement()->GetReverse()->GetIndex(); + } } - } - json entranceJson = json::object({ - {"type", entrance->GetType()}, - {"index", originalIndex}, - {"destination", destinationIndex}, - {"override", replacementIndex}, - {"overrideDestination", replacementDestinationIndex}, - }); - - jsonData["entrances"].push_back(entranceJson); - - // When decoupled entrances is off, handle saving reverse entrances - if (entrance->GetReverse() != nullptr && !entrance->IsDecoupled()) { - json reverseEntranceJson = json::object({ - {"type", entrance->GetReverse()->GetType()}, - {"index", replacementDestinationIndex}, - {"destination", replacementIndex}, - {"override", destinationIndex}, - {"overrideDestination", originalIndex}, + json entranceJson = json::object({ + { "type", entrance->GetType() }, + { "index", originalIndex }, + { "destination", destinationIndex }, + { "override", replacementIndex }, + { "overrideDestination", replacementDestinationIndex }, }); - jsonData["entrances"].push_back(reverseEntranceJson); - } + jsonData["entrances"].push_back(entranceJson); - switch (gSaveContext.language) { + // When decoupled entrances is off, handle saving reverse entrances + if (entrance->GetReverse() != nullptr && !entrance->IsDecoupled()) { + json reverseEntranceJson = json::object({ + { "type", entrance->GetReverse()->GetType() }, + { "index", replacementDestinationIndex }, + { "destination", replacementIndex }, + { "override", destinationIndex }, + { "overrideDestination", originalIndex }, + }); + + jsonData["entrances"].push_back(reverseEntranceJson); + } + + switch (gSaveContext.language) { case LANGUAGE_ENG: case LANGUAGE_FRA: default: @@ -141,32 +140,31 @@ static void WriteSettings() { auto ctx = Rando::Context::GetInstance(); std::array options = Rando::Settings::GetInstance()->GetAllOptions(); for (const Rando::Option& option : options) { - if (option.GetName() != ""){ - jsonData["settings"][option.GetName()] = option.GetOptionText(ctx->GetOption(option.GetKey()).Get()); - } + if (option.GetName() != "") { + jsonData["settings"][option.GetName()] = option.GetOptionText(ctx->GetOption(option.GetKey()).Get()); + } } } // Removes any line breaks from s. std::string RemoveLineBreaks(std::string s) { - s.erase(std::remove(s.begin(), s.end(), '\n'), s.end()); - return s; + s.erase(std::remove(s.begin(), s.end(), '\n'), s.end()); + return s; } // Writes the excluded locations to the spoiler log, if there are any. static void WriteExcludedLocations() { - auto ctx = Rando::Context::GetInstance(); + auto ctx = Rando::Context::GetInstance(); - for (size_t i = 1; i < Rando::Settings::GetInstance()->GetExcludeLocationsOptions().size(); i++) { - for (const auto& location : Rando::Settings::GetInstance()->GetExcludeLocationsOptions()[i]) { - if (ctx->GetLocationOption(static_cast(location->GetKey())).Get() == RO_LOCATION_INCLUDE) { - continue; - } - - jsonData["excludedLocations"].push_back(RemoveLineBreaks(location->GetName())); + for (size_t i = 1; i < Rando::Settings::GetInstance()->GetExcludeLocationsOptions().size(); i++) { + for (const auto& location : Rando::Settings::GetInstance()->GetExcludeLocationsOptions()[i]) { + if (ctx->GetLocationOption(static_cast(location->GetKey())).Get() == RO_LOCATION_INCLUDE) { + continue; + } + jsonData["excludedLocations"].push_back(RemoveLineBreaks(location->GetName())); + } } - } } // Writes the starting inventory to the spoiler log, if there is any. @@ -182,16 +180,16 @@ static void WriteStartingInventory() { } } -//Writes the enabled tricks to the spoiler log, if there are any. +// Writes the enabled tricks to the spoiler log, if there are any. static void WriteEnabledTricks() { - auto ctx = Rando::Context::GetInstance(); + auto ctx = Rando::Context::GetInstance(); - for (const auto& setting : Rando::Settings::GetInstance()->GetOptionGroup(RSG_TRICKS).GetOptions()) { - if (ctx->GetTrickOption(static_cast(setting->GetKey())).IsNot(RO_GENERIC_ON)) { - continue; + for (const auto& setting : Rando::Settings::GetInstance()->GetOptionGroup(RSG_TRICKS).GetOptions()) { + if (ctx->GetTrickOption(static_cast(setting->GetKey())).IsNot(RO_GENERIC_ON)) { + continue; + } + jsonData["enabledTricks"].push_back(RemoveLineBreaks(setting->GetName()).c_str()); } - jsonData["enabledTricks"].push_back(RemoveLineBreaks(setting->GetName()).c_str()); - } } // Writes the Master Quest dungeons to the spoiler log, if there are any. @@ -208,47 +206,49 @@ static void WriteMasterQuestDungeons() { // Writes the required trials to the spoiler log, if there are any. static void WriteChosenOptions() { - auto ctx = Rando::Context::GetInstance(); - for (const auto& trial : ctx->GetTrials()->GetTrialList()) { - if (trial->IsRequired()) { - std::string trialName = trial->GetName().GetForCurrentLanguage(MF_CLEAN); - jsonData["requiredTrials"].push_back(RemoveLineBreaks(trialName)); + auto ctx = Rando::Context::GetInstance(); + for (const auto& trial : ctx->GetTrials()->GetTrialList()) { + if (trial->IsRequired()) { + std::string trialName = trial->GetName().GetForCurrentLanguage(MF_CLEAN); + jsonData["requiredTrials"].push_back(RemoveLineBreaks(trialName)); + } + } + if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_ADULT)) { + jsonData["SelectedStartingAge"] = "Adult"; + } else { + jsonData["SelectedStartingAge"] = "Child"; } - } - if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_ADULT)){ - jsonData["SelectedStartingAge"] = "Adult"; - } else { - jsonData["SelectedStartingAge"] = "Child"; - } } // Writes the intended playthrough to the spoiler log, separated into spheres. static void WritePlaythrough() { - auto ctx = Rando::Context::GetInstance(); + auto ctx = Rando::Context::GetInstance(); - for (uint32_t i = 0; i < ctx->playthroughLocations.size(); ++i) { - auto sphereNum = std::to_string(i); - std::string sphereString = "sphere "; - if (i < 10) sphereString += "0"; - sphereString += sphereNum; - for (const RandomizerCheck key : ctx->playthroughLocations[i]) { - WriteLocation(sphereString, key, true); + for (uint32_t i = 0; i < ctx->playthroughLocations.size(); ++i) { + auto sphereNum = std::to_string(i); + std::string sphereString = "sphere "; + if (i < 10) + sphereString += "0"; + sphereString += sphereNum; + for (const RandomizerCheck key : ctx->playthroughLocations[i]) { + WriteLocation(sphereString, key, true); + } } - } } -//Write the randomized entrance playthrough to the spoiler log, if applicable +// Write the randomized entrance playthrough to the spoiler log, if applicable static void WriteShuffledEntrances() { - auto ctx = Rando::Context::GetInstance(); - for (uint32_t i = 0; i < ctx->GetEntranceShuffler()->playthroughEntrances.size(); ++i) { - auto sphereNum = std::to_string(i); - std::string sphereString = "sphere "; - if (i < 10) sphereString += "0"; - sphereString += sphereNum; - for (Entrance* entrance : ctx->GetEntranceShuffler()->playthroughEntrances[i]) { - WriteShuffledEntrance(sphereString, entrance); + auto ctx = Rando::Context::GetInstance(); + for (uint32_t i = 0; i < ctx->GetEntranceShuffler()->playthroughEntrances.size(); ++i) { + auto sphereNum = std::to_string(i); + std::string sphereString = "sphere "; + if (i < 10) + sphereString += "0"; + sphereString += sphereNum; + for (Entrance* entrance : ctx->GetEntranceShuffler()->playthroughEntrances[i]) { + WriteShuffledEntrance(sphereString, entrance); + } } - } } Rando::ItemLocation* GetItemLocation(RandomizerGet item) { @@ -265,52 +265,59 @@ static void WriteAllLocations() { std::string placedItemName; switch (gSaveContext.language) { - case 0: - default: - placedItemName = location->GetPlacedItemName().english; - break; - case 2: - placedItemName = location->GetPlacedItemName().french; - break; + case 0: + default: + placedItemName = location->GetPlacedItemName().english; + break; + case 2: + placedItemName = location->GetPlacedItemName().french; + break; } // If it's a simple item (not an ice trap, doesn't have a price) // just add the name of the item and move on - if (!location->HasCustomPrice() && - location->GetPlacedRandomizerGet() != RG_ICE_TRAP) { - - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] = placedItemName; + if (!location->HasCustomPrice() && location->GetPlacedRandomizerGet() != RG_ICE_TRAP) { + + jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] = + placedItemName; continue; } // We're dealing with a complex item, build out the json object for it - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()]["item"] = placedItemName; + jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()]["item"] = + placedItemName; if (location->HasCustomPrice()) { jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()]["price"] = location->GetPrice(); } if (location->IsAHintAccessible()) { - hintedLocations.emplace(Rando::StaticData::GetLocation(key)->GetHintKey(), location); + hintedLocations.emplace(Rando::StaticData::GetLocation(key)->GetHintKey(), location); } if (location->GetPlacedRandomizerGet() == RG_ICE_TRAP) { - switch (gSaveContext.language) { - case 0: - default: - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()]["model"] = - Rando::StaticData::RetrieveItem(ctx->overrides[location->GetRandomizerCheck()].LooksLike()).GetName().english; - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()]["trickName"] = - ctx->overrides[location->GetRandomizerCheck()].GetTrickName().english; - break; - case 2: - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()]["model"] = - Rando::StaticData::RetrieveItem(ctx->overrides[location->GetRandomizerCheck()].LooksLike()).GetName().french; - jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()]["trickName"] = - ctx->overrides[location->GetRandomizerCheck()].GetTrickName().french; - break; - } - } + switch (gSaveContext.language) { + case 0: + default: + jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] + ["model"] = Rando::StaticData::RetrieveItem( + ctx->overrides[location->GetRandomizerCheck()].LooksLike()) + .GetName() + .english; + jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] + ["trickName"] = ctx->overrides[location->GetRandomizerCheck()].GetTrickName().english; + break; + case 2: + jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] + ["model"] = Rando::StaticData::RetrieveItem( + ctx->overrides[location->GetRandomizerCheck()].LooksLike()) + .GetName() + .french; + jsonData["locations"][Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName()] + ["trickName"] = ctx->overrides[location->GetRandomizerCheck()].GetTrickName().french; + break; + } + } } } @@ -319,9 +326,9 @@ const char* SpoilerLog_Write() { jsonData.clear(); - jsonData["version"] = (char*) gBuildVersion; - jsonData["git_branch"] = (char*) gGitBranch; - jsonData["git_commit"] = (char*) gGitCommitHash; + jsonData["version"] = (char*)gBuildVersion; + jsonData["git_branch"] = (char*)gGitBranch; + jsonData["git_commit"] = (char*)gGitCommitHash; jsonData["seed"] = ctx->GetSeedString(); jsonData["finalSeed"] = ctx->GetSeed(); @@ -335,7 +342,7 @@ const char* SpoilerLog_Write() { WriteSettings(); WriteExcludedLocations(); WriteStartingInventory(); - WriteEnabledTricks(); + WriteEnabledTricks(); WriteMasterQuestDungeons(); WriteChosenOptions(); WritePlaythrough(); @@ -353,7 +360,7 @@ const char* SpoilerLog_Write() { std::string jsonString = jsonData.dump(4); std::ostringstream fileNameStream; - for (uint8_t i = 0; i < ctx->hashIconIndexes.size(); i ++) { + for (uint8_t i = 0; i < ctx->hashIconIndexes.size(); i++) { if (i) { fileNameStream << '-'; } @@ -384,4 +391,3 @@ void PlacementLog_Msg(std::string_view msg) { void PlacementLog_Clear() { placementtxt = ""; } - diff --git a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp index 04a7e3040..dda37b18a 100644 --- a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp @@ -10,188 +10,188 @@ std::vector StartingInventory; uint8_t AdditionalHeartContainers; static void AddItemToInventory(RandomizerGet item, size_t count = 1) { - StartingInventory.insert(StartingInventory.end(), count, item); + StartingInventory.insert(StartingInventory.end(), count, item); } void GenerateStartingInventory() { - auto ctx = Rando::Context::GetInstance(); - StartingInventory.clear(); + auto ctx = Rando::Context::GetInstance(); + StartingInventory.clear(); - if (ctx->GetOption(RSK_SHUFFLE_MAPANDCOMPASS).Is(RO_DUNGEON_ITEM_LOC_STARTWITH)) { - for (auto* dungeon : ctx->GetDungeons()->GetDungeonList()) { - if (dungeon->GetMap() != RG_NONE) { - AddItemToInventory(dungeon->GetMap()); - } + if (ctx->GetOption(RSK_SHUFFLE_MAPANDCOMPASS).Is(RO_DUNGEON_ITEM_LOC_STARTWITH)) { + for (auto* dungeon : ctx->GetDungeons()->GetDungeonList()) { + if (dungeon->GetMap() != RG_NONE) { + AddItemToInventory(dungeon->GetMap()); + } - if (dungeon->GetCompass() != RG_NONE) { - AddItemToInventory(dungeon->GetCompass()); - } - } - } - - if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_STARTWITH)) { - for (auto* dungeon : ctx->GetDungeons()->GetDungeonList()) { - if (dungeon->GetSmallKeyCount() > 0) { - AddItemToInventory(dungeon->GetSmallKey(), dungeon->GetSmallKeyCount()); - } - } - } else if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA)) { - // Logic cannot handle vanilla key layout in some dungeons - // this is because vanilla expects the dungeon major item to be - // locked behind the keys, which is not always true in rando. - // We can resolve this by starting with some extra keys - // - OoT Randomizer - if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsMQ()) { - AddItemToInventory(RG_SPIRIT_TEMPLE_SMALL_KEY, 3); - } - } - - if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_STARTWITH)) { - AddItemToInventory(RG_FOREST_TEMPLE_BOSS_KEY); - AddItemToInventory(RG_FIRE_TEMPLE_BOSS_KEY); - AddItemToInventory(RG_WATER_TEMPLE_BOSS_KEY); - AddItemToInventory(RG_SPIRIT_TEMPLE_BOSS_KEY); - AddItemToInventory(RG_SHADOW_TEMPLE_BOSS_KEY); - } - - // Add Ganon's Boss key with Triforce Hunt so the game thinks it's obtainable from the start. - // During save init, the boss key isn't actually given and it's instead given when completing the triforce. - if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_STARTWITH) || - ctx->GetOption(RSK_TRIFORCE_HUNT)) { - AddItemToInventory(RG_GANONS_CASTLE_BOSS_KEY); - } - - if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) && !ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { - AddItemToInventory(RG_GERUDO_MEMBERSHIP_CARD); - } - - //Starting Inventory Menu - //Values are associated so that the count of items matches the index of - //the option selected. If None is selected, the value will be zero and - //zero of the item will be added to the starting inventory. - // TODO: Uncomment when these options are implemented. - // AddItemToInventory(RG_PROGRESSIVE_STICK_UPGRADE, StartingStickCapacity.Value()); - // AddItemToInventory(RG_PROGRESSIVE_NUT_UPGRADE, StartingNutCapacity.Value()); - // AddItemToInventory(RG_PROGRESSIVE_BOMB_BAG, StartingBombBag.Value()); - // AddItemToInventory((BombchuBag ? RG_PROGRESSIVE_BOMBCHUS : RG_BOMBCHU_20), StartingBombchus.Value()); - // AddItemToInventory(RG_PROGRESSIVE_BOW, StartingBow.Value()); - // AddItemToInventory(RG_FIRE_ARROWS, StartingFireArrows.Value()); - // AddItemToInventory(RG_ICE_ARROWS, StartingIceArrows.Value()); - // AddItemToInventory(RG_LIGHT_ARROWS, StartingLightArrows.Value()); - // AddItemToInventory(RG_DINS_FIRE, StartingDinsFire.Value()); - // AddItemToInventory(RG_FARORES_WIND, StartingFaroresWind.Value()); - // AddItemToInventory(RG_NAYRUS_LOVE, StartingNayrusLove.Value()); - // AddItemToInventory(RG_PROGRESSIVE_SLINGSHOT, StartingSlingshot.Value()); - // AddItemToInventory(RG_BOOMERANG, StartingBoomerang.Value()); - // AddItemToInventory(RG_LENS_OF_TRUTH, StartingLensOfTruth.Value()); - // AddItemToInventory(RG_MAGIC_BEAN_PACK, StartingMagicBean.Value()); - // AddItemToInventory(RG_MEGATON_HAMMER, StartingMegatonHammer.Value()); - // AddItemToInventory(RG_PROGRESSIVE_HOOKSHOT, StartingHookshot.Value()); - // AddItemToInventory(RG_IRON_BOOTS, StartingIronBoots.Value()); - // AddItemToInventory(RG_HOVER_BOOTS, StartingHoverBoots.Value()); - //For starting bottles, we need to check if they are a big poe and add that if so - // since a big poe bottle is not logically equivalent to an empty bottle. - // if (StartingBottle1.Value() == STARTINGBOTTLE_BIG_POE) { - // AddItemToInventory(RG_BOTTLE_WITH_BIG_POE, 1); - // } else if (StartingBottle1.Value()) { - // AddItemToInventory(RG_EMPTY_BOTTLE, 1); - // } - // if (StartingBottle2.Value() == STARTINGBOTTLE_BIG_POE) { - // AddItemToInventory(RG_BOTTLE_WITH_BIG_POE, 1); - // } else if (StartingBottle2.Value()) { - // AddItemToInventory(RG_EMPTY_BOTTLE, 1); - // } - // if (StartingBottle3.Value() == STARTINGBOTTLE_BIG_POE) { - // AddItemToInventory(RG_BOTTLE_WITH_BIG_POE, 1); - // } else if (StartingBottle3.Value()) { - // AddItemToInventory(RG_EMPTY_BOTTLE, 1); - // } - // if (StartingBottle4.Value() == STARTINGBOTTLE_BIG_POE) { - // AddItemToInventory(RG_BOTTLE_WITH_BIG_POE, 1); - // } else if (StartingBottle4.Value()) { - // AddItemToInventory(RG_EMPTY_BOTTLE, 1); - // } - // AddItemToInventory(RG_RUTOS_LETTER, StartingRutoBottle.Value()); - AddItemToInventory(RG_PROGRESSIVE_OCARINA, ctx->GetOption(RSK_STARTING_OCARINA).Get()); - AddItemToInventory(RG_ZELDAS_LULLABY, ctx->GetOption(RSK_STARTING_ZELDAS_LULLABY) ? 1 : 0); - AddItemToInventory(RG_EPONAS_SONG, ctx->GetOption(RSK_STARTING_EPONAS_SONG) ? 1 : 0); - AddItemToInventory(RG_SARIAS_SONG, ctx->GetOption(RSK_STARTING_SARIAS_SONG) ? 1 : 0); - AddItemToInventory(RG_SUNS_SONG, ctx->GetOption(RSK_STARTING_SUNS_SONG) ? 1 : 0); - AddItemToInventory(RG_SONG_OF_TIME, ctx->GetOption(RSK_STARTING_SONG_OF_TIME) ? 1 : 0); - AddItemToInventory(RG_SONG_OF_STORMS, ctx->GetOption(RSK_STARTING_SONG_OF_STORMS) ? 1 : 0); - AddItemToInventory(RG_MINUET_OF_FOREST, ctx->GetOption(RSK_STARTING_MINUET_OF_FOREST) ? 1 : 0); - AddItemToInventory(RG_BOLERO_OF_FIRE, ctx->GetOption(RSK_STARTING_BOLERO_OF_FIRE) ? 1 : 0); - AddItemToInventory(RG_SERENADE_OF_WATER, ctx->GetOption(RSK_STARTING_SERENADE_OF_WATER) ? 1 : 0); - AddItemToInventory(RG_REQUIEM_OF_SPIRIT, ctx->GetOption(RSK_STARTING_REQUIEM_OF_SPIRIT) ? 1 : 0); - AddItemToInventory(RG_NOCTURNE_OF_SHADOW, ctx->GetOption(RSK_STARTING_NOCTURNE_OF_SHADOW) ? 1 : 0); - AddItemToInventory(RG_PRELUDE_OF_LIGHT, ctx->GetOption(RSK_STARTING_PRELUDE_OF_LIGHT) ? 1 : 0); - AddItemToInventory(RG_KOKIRI_SWORD, ctx->GetOption(RSK_STARTING_KOKIRI_SWORD) ? 1 : 0); - // if (ProgressiveGoronSword) { - // AddItemToInventory(RG_PROGRESSIVE_GORONSWORD, StartingBiggoronSword.Value()); - // } else { - // AddItemToInventory(RG_GIANTS_KNIFE, (StartingBiggoronSword.Is(STARTINGBGS_GIANTS_KNIFE)) ? 1 : 0); - // AddItemToInventory(RG_BIGGORON_SWORD, (StartingBiggoronSword.Is(STARTINGBGS_BIGGORON_SWORD)) ? 1 : 0); - // } - AddItemToInventory(RG_MASTER_SWORD, ctx->GetOption(RSK_STARTING_MASTER_SWORD) ? 1 : 0); - AddItemToInventory(RG_DEKU_SHIELD, ctx->GetOption(RSK_STARTING_DEKU_SHIELD) ? 1 : 0); - // AddItemToInventory(RG_HYLIAN_SHIELD, StartingHylianShield.Value()); - // AddItemToInventory(RG_MIRROR_SHIELD, StartingMirrorShield.Value()); - // AddItemToInventory(RG_GORON_TUNIC, StartingGoronTunic.Value()); - // AddItemToInventory(RG_ZORA_TUNIC, StartingZoraTunic.Value()); - // AddItemToInventory(RG_PROGRESSIVE_MAGIC_METER, StartingMagicMeter.Value()); - // AddItemToInventory(RG_PROGRESSIVE_STRENGTH, StartingStrength.Value()); - // AddItemToInventory(RG_PROGRESSIVE_SCALE, StartingScale.Value()); - // AddItemToInventory(RG_PROGRESSIVE_WALLET, StartingWallet.Value()); - // AddItemToInventory(RG_STONE_OF_AGONY, StartingShardOfAgony.Value()); - // AddItemToInventory(RG_DOUBLE_DEFENSE, StartingDoubleDefense.Value()); - // AddItemToInventory(RG_KOKIRI_EMERALD, StartingKokiriEmerald.Value()); - // AddItemToInventory(RG_GORON_RUBY, StartingGoronRuby.Value()); - // AddItemToInventory(RG_ZORA_SAPPHIRE, StartingZoraSapphire.Value()); - // AddItemToInventory(RG_FOREST_MEDALLION, StartingForestMedallion.Value()); - // AddItemToInventory(RG_FIRE_MEDALLION, StartingFireMedallion.Value()); - // AddItemToInventory(RG_WATER_MEDALLION, StartingWaterMedallion.Value()); - // AddItemToInventory(RG_SPIRIT_MEDALLION, StartingSpiritMedallion.Value()); - // AddItemToInventory(RG_SHADOW_MEDALLION, StartingShadowMedallion.Value()); - // AddItemToInventory(RG_LIGHT_MEDALLION, StartingLightMedallion.Value()); - AddItemToInventory(RG_GOLD_SKULLTULA_TOKEN, ctx->GetOption(RSK_STARTING_SKULLTULA_TOKEN).Get()); - - int8_t hearts = ctx->GetOption(RSK_STARTING_HEARTS).Get() - 2; - AdditionalHeartContainers = 0; - if (hearts < 0) { - AddItemToInventory(RG_PIECE_OF_HEART, 4); - // Plentiful and minimal have less than 4 standard pieces of heart so also replace the winner heart - if (ctx->GetOption(RSK_ITEM_POOL).Get() == 0 || ctx->GetOption(RSK_ITEM_POOL).Get() == 3) { - AddItemToInventory(RG_TREASURE_GAME_HEART); + if (dungeon->GetCompass() != RG_NONE) { + AddItemToInventory(dungeon->GetCompass()); + } + } } - AdditionalHeartContainers = 1 - hearts; - } else if (hearts > 0) { - // 16 containers in plentiful, 8 in balanced and 0 in the others - uint8_t maxContainers = 8 * std::max(0, 2 - ctx->GetOption(RSK_ITEM_POOL).Get()); - - if (hearts <= maxContainers) { - AddItemToInventory(RG_HEART_CONTAINER, hearts); - } else { - AddItemToInventory(RG_HEART_CONTAINER, maxContainers); - AddItemToInventory(RG_PIECE_OF_HEART, (hearts - maxContainers) * 4); + if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_STARTWITH)) { + for (auto* dungeon : ctx->GetDungeons()->GetDungeonList()) { + if (dungeon->GetSmallKeyCount() > 0) { + AddItemToInventory(dungeon->GetSmallKey(), dungeon->GetSmallKeyCount()); + } + } + } else if (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA)) { + // Logic cannot handle vanilla key layout in some dungeons + // this is because vanilla expects the dungeon major item to be + // locked behind the keys, which is not always true in rando. + // We can resolve this by starting with some extra keys + // - OoT Randomizer + if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsMQ()) { + AddItemToInventory(RG_SPIRIT_TEMPLE_SMALL_KEY, 3); + } } - if (hearts == 17) { - AddItemToInventory(RG_TREASURE_GAME_HEART); + if (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_STARTWITH)) { + AddItemToInventory(RG_FOREST_TEMPLE_BOSS_KEY); + AddItemToInventory(RG_FIRE_TEMPLE_BOSS_KEY); + AddItemToInventory(RG_WATER_TEMPLE_BOSS_KEY); + AddItemToInventory(RG_SPIRIT_TEMPLE_BOSS_KEY); + AddItemToInventory(RG_SHADOW_TEMPLE_BOSS_KEY); + } + + // Add Ganon's Boss key with Triforce Hunt so the game thinks it's obtainable from the start. + // During save init, the boss key isn't actually given and it's instead given when completing the triforce. + if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_STARTWITH) || ctx->GetOption(RSK_TRIFORCE_HUNT)) { + AddItemToInventory(RG_GANONS_CASTLE_BOSS_KEY); + } + + if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) && + !ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { + AddItemToInventory(RG_GERUDO_MEMBERSHIP_CARD); + } + + // Starting Inventory Menu + // Values are associated so that the count of items matches the index of + // the option selected. If None is selected, the value will be zero and + // zero of the item will be added to the starting inventory. + // TODO: Uncomment when these options are implemented. + // AddItemToInventory(RG_PROGRESSIVE_STICK_UPGRADE, StartingStickCapacity.Value()); + // AddItemToInventory(RG_PROGRESSIVE_NUT_UPGRADE, StartingNutCapacity.Value()); + // AddItemToInventory(RG_PROGRESSIVE_BOMB_BAG, StartingBombBag.Value()); + // AddItemToInventory((BombchuBag ? RG_PROGRESSIVE_BOMBCHUS : RG_BOMBCHU_20), StartingBombchus.Value()); + // AddItemToInventory(RG_PROGRESSIVE_BOW, StartingBow.Value()); + // AddItemToInventory(RG_FIRE_ARROWS, StartingFireArrows.Value()); + // AddItemToInventory(RG_ICE_ARROWS, StartingIceArrows.Value()); + // AddItemToInventory(RG_LIGHT_ARROWS, StartingLightArrows.Value()); + // AddItemToInventory(RG_DINS_FIRE, StartingDinsFire.Value()); + // AddItemToInventory(RG_FARORES_WIND, StartingFaroresWind.Value()); + // AddItemToInventory(RG_NAYRUS_LOVE, StartingNayrusLove.Value()); + // AddItemToInventory(RG_PROGRESSIVE_SLINGSHOT, StartingSlingshot.Value()); + // AddItemToInventory(RG_BOOMERANG, StartingBoomerang.Value()); + // AddItemToInventory(RG_LENS_OF_TRUTH, StartingLensOfTruth.Value()); + // AddItemToInventory(RG_MAGIC_BEAN_PACK, StartingMagicBean.Value()); + // AddItemToInventory(RG_MEGATON_HAMMER, StartingMegatonHammer.Value()); + // AddItemToInventory(RG_PROGRESSIVE_HOOKSHOT, StartingHookshot.Value()); + // AddItemToInventory(RG_IRON_BOOTS, StartingIronBoots.Value()); + // AddItemToInventory(RG_HOVER_BOOTS, StartingHoverBoots.Value()); + // For starting bottles, we need to check if they are a big poe and add that if so + // since a big poe bottle is not logically equivalent to an empty bottle. + // if (StartingBottle1.Value() == STARTINGBOTTLE_BIG_POE) { + // AddItemToInventory(RG_BOTTLE_WITH_BIG_POE, 1); + // } else if (StartingBottle1.Value()) { + // AddItemToInventory(RG_EMPTY_BOTTLE, 1); + // } + // if (StartingBottle2.Value() == STARTINGBOTTLE_BIG_POE) { + // AddItemToInventory(RG_BOTTLE_WITH_BIG_POE, 1); + // } else if (StartingBottle2.Value()) { + // AddItemToInventory(RG_EMPTY_BOTTLE, 1); + // } + // if (StartingBottle3.Value() == STARTINGBOTTLE_BIG_POE) { + // AddItemToInventory(RG_BOTTLE_WITH_BIG_POE, 1); + // } else if (StartingBottle3.Value()) { + // AddItemToInventory(RG_EMPTY_BOTTLE, 1); + // } + // if (StartingBottle4.Value() == STARTINGBOTTLE_BIG_POE) { + // AddItemToInventory(RG_BOTTLE_WITH_BIG_POE, 1); + // } else if (StartingBottle4.Value()) { + // AddItemToInventory(RG_EMPTY_BOTTLE, 1); + // } + // AddItemToInventory(RG_RUTOS_LETTER, StartingRutoBottle.Value()); + AddItemToInventory(RG_PROGRESSIVE_OCARINA, ctx->GetOption(RSK_STARTING_OCARINA).Get()); + AddItemToInventory(RG_ZELDAS_LULLABY, ctx->GetOption(RSK_STARTING_ZELDAS_LULLABY) ? 1 : 0); + AddItemToInventory(RG_EPONAS_SONG, ctx->GetOption(RSK_STARTING_EPONAS_SONG) ? 1 : 0); + AddItemToInventory(RG_SARIAS_SONG, ctx->GetOption(RSK_STARTING_SARIAS_SONG) ? 1 : 0); + AddItemToInventory(RG_SUNS_SONG, ctx->GetOption(RSK_STARTING_SUNS_SONG) ? 1 : 0); + AddItemToInventory(RG_SONG_OF_TIME, ctx->GetOption(RSK_STARTING_SONG_OF_TIME) ? 1 : 0); + AddItemToInventory(RG_SONG_OF_STORMS, ctx->GetOption(RSK_STARTING_SONG_OF_STORMS) ? 1 : 0); + AddItemToInventory(RG_MINUET_OF_FOREST, ctx->GetOption(RSK_STARTING_MINUET_OF_FOREST) ? 1 : 0); + AddItemToInventory(RG_BOLERO_OF_FIRE, ctx->GetOption(RSK_STARTING_BOLERO_OF_FIRE) ? 1 : 0); + AddItemToInventory(RG_SERENADE_OF_WATER, ctx->GetOption(RSK_STARTING_SERENADE_OF_WATER) ? 1 : 0); + AddItemToInventory(RG_REQUIEM_OF_SPIRIT, ctx->GetOption(RSK_STARTING_REQUIEM_OF_SPIRIT) ? 1 : 0); + AddItemToInventory(RG_NOCTURNE_OF_SHADOW, ctx->GetOption(RSK_STARTING_NOCTURNE_OF_SHADOW) ? 1 : 0); + AddItemToInventory(RG_PRELUDE_OF_LIGHT, ctx->GetOption(RSK_STARTING_PRELUDE_OF_LIGHT) ? 1 : 0); + AddItemToInventory(RG_KOKIRI_SWORD, ctx->GetOption(RSK_STARTING_KOKIRI_SWORD) ? 1 : 0); + // if (ProgressiveGoronSword) { + // AddItemToInventory(RG_PROGRESSIVE_GORONSWORD, StartingBiggoronSword.Value()); + // } else { + // AddItemToInventory(RG_GIANTS_KNIFE, (StartingBiggoronSword.Is(STARTINGBGS_GIANTS_KNIFE)) ? 1 : 0); + // AddItemToInventory(RG_BIGGORON_SWORD, (StartingBiggoronSword.Is(STARTINGBGS_BIGGORON_SWORD)) ? 1 : 0); + // } + AddItemToInventory(RG_MASTER_SWORD, ctx->GetOption(RSK_STARTING_MASTER_SWORD) ? 1 : 0); + AddItemToInventory(RG_DEKU_SHIELD, ctx->GetOption(RSK_STARTING_DEKU_SHIELD) ? 1 : 0); + // AddItemToInventory(RG_HYLIAN_SHIELD, StartingHylianShield.Value()); + // AddItemToInventory(RG_MIRROR_SHIELD, StartingMirrorShield.Value()); + // AddItemToInventory(RG_GORON_TUNIC, StartingGoronTunic.Value()); + // AddItemToInventory(RG_ZORA_TUNIC, StartingZoraTunic.Value()); + // AddItemToInventory(RG_PROGRESSIVE_MAGIC_METER, StartingMagicMeter.Value()); + // AddItemToInventory(RG_PROGRESSIVE_STRENGTH, StartingStrength.Value()); + // AddItemToInventory(RG_PROGRESSIVE_SCALE, StartingScale.Value()); + // AddItemToInventory(RG_PROGRESSIVE_WALLET, StartingWallet.Value()); + // AddItemToInventory(RG_STONE_OF_AGONY, StartingShardOfAgony.Value()); + // AddItemToInventory(RG_DOUBLE_DEFENSE, StartingDoubleDefense.Value()); + // AddItemToInventory(RG_KOKIRI_EMERALD, StartingKokiriEmerald.Value()); + // AddItemToInventory(RG_GORON_RUBY, StartingGoronRuby.Value()); + // AddItemToInventory(RG_ZORA_SAPPHIRE, StartingZoraSapphire.Value()); + // AddItemToInventory(RG_FOREST_MEDALLION, StartingForestMedallion.Value()); + // AddItemToInventory(RG_FIRE_MEDALLION, StartingFireMedallion.Value()); + // AddItemToInventory(RG_WATER_MEDALLION, StartingWaterMedallion.Value()); + // AddItemToInventory(RG_SPIRIT_MEDALLION, StartingSpiritMedallion.Value()); + // AddItemToInventory(RG_SHADOW_MEDALLION, StartingShadowMedallion.Value()); + // AddItemToInventory(RG_LIGHT_MEDALLION, StartingLightMedallion.Value()); + AddItemToInventory(RG_GOLD_SKULLTULA_TOKEN, ctx->GetOption(RSK_STARTING_SKULLTULA_TOKEN).Get()); + + int8_t hearts = ctx->GetOption(RSK_STARTING_HEARTS).Get() - 2; + AdditionalHeartContainers = 0; + if (hearts < 0) { + AddItemToInventory(RG_PIECE_OF_HEART, 4); + // Plentiful and minimal have less than 4 standard pieces of heart so also replace the winner heart + if (ctx->GetOption(RSK_ITEM_POOL).Get() == 0 || ctx->GetOption(RSK_ITEM_POOL).Get() == 3) { + AddItemToInventory(RG_TREASURE_GAME_HEART); + } + + AdditionalHeartContainers = 1 - hearts; + } else if (hearts > 0) { + // 16 containers in plentiful, 8 in balanced and 0 in the others + uint8_t maxContainers = 8 * std::max(0, 2 - ctx->GetOption(RSK_ITEM_POOL).Get()); + + if (hearts <= maxContainers) { + AddItemToInventory(RG_HEART_CONTAINER, hearts); + } else { + AddItemToInventory(RG_HEART_CONTAINER, maxContainers); + AddItemToInventory(RG_PIECE_OF_HEART, (hearts - maxContainers) * 4); + } + + if (hearts == 17) { + AddItemToInventory(RG_TREASURE_GAME_HEART); + } } - } } bool StartingInventoryHasBottle() { - RandomizerGet bottle = RG_EMPTY_BOTTLE; - return ElementInContainer(bottle, StartingInventory); + RandomizerGet bottle = RG_EMPTY_BOTTLE; + return ElementInContainer(bottle, StartingInventory); } void ApplyStartingInventory() { for (RandomizerGet item : StartingInventory) { - if (item == RG_PIECE_OF_HEART || item == RG_HEART_CONTAINER || item == RG_TREASURE_GAME_HEART) - continue; + if (item == RG_PIECE_OF_HEART || item == RG_HEART_CONTAINER || item == RG_TREASURE_GAME_HEART) + continue; - Rando::StaticData::RetrieveItem(item).ApplyEffect(); - } + Rando::StaticData::RetrieveItem(item).ApplyEffect(); + } } diff --git a/soh/soh/Enhancements/randomizer/ColoredMapsAndCompasses.cpp b/soh/soh/Enhancements/randomizer/ColoredMapsAndCompasses.cpp index fcfa13d97..6c1db52f7 100644 --- a/soh/soh/Enhancements/randomizer/ColoredMapsAndCompasses.cpp +++ b/soh/soh/Enhancements/randomizer/ColoredMapsAndCompasses.cpp @@ -7,18 +7,20 @@ #include "objects/object_gi_map/object_gi_map.h" extern "C" { - extern SaveContext gSaveContext; - #include "variables.h" - #include "macros.h" - u8 Randomizer_GetSettingValue(RandomizerSettingKey randoSettingKey); +extern SaveContext gSaveContext; +#include "variables.h" +#include "macros.h" +u8 Randomizer_GetSettingValue(RandomizerSettingKey randoSettingKey); } #define CVAR_COLORED_MAPS_AND_COMPASSES_NAME CVAR_RANDOMIZER_ENHANCEMENT("ColoredMapsAndCompasses") #define CVAR_COLORED_MAPS_AND_COMPASSES_DEFAULT 1 -#define CVAR_COLORED_MAPS_AND_COMPASSES_VALUE CVarGetInteger(CVAR_COLORED_MAPS_AND_COMPASSES_NAME, CVAR_COLORED_MAPS_AND_COMPASSES_DEFAULT) +#define CVAR_COLORED_MAPS_AND_COMPASSES_VALUE \ + CVarGetInteger(CVAR_COLORED_MAPS_AND_COMPASSES_NAME, CVAR_COLORED_MAPS_AND_COMPASSES_DEFAULT) void OnLoadFileColoredMapsAndCompasses(int32_t _) { - s8 mapsAndCompassesCanBeOutsideDungeon = IS_RANDO && DUNGEON_ITEMS_CAN_BE_OUTSIDE_DUNGEON(RSK_SHUFFLE_MAPANDCOMPASS); + s8 mapsAndCompassesCanBeOutsideDungeon = + IS_RANDO && DUNGEON_ITEMS_CAN_BE_OUTSIDE_DUNGEON(RSK_SHUFFLE_MAPANDCOMPASS); s8 isColoredMapsAndCompassesEnabled = mapsAndCompassesCanBeOutsideDungeon && CVAR_COLORED_MAPS_AND_COMPASSES_VALUE; if (isColoredMapsAndCompassesEnabled) { ResourceMgr_PatchGfxByName(gGiDungeonMapDL, "Map_PrimColor", 5, gsDPNoOp()); @@ -36,7 +38,7 @@ void OnLoadFileColoredMapsAndCompasses(int32_t _) { void RegisterColoredMapsAndCompasses() { COND_HOOK(OnLoadFile, CVAR_COLORED_MAPS_AND_COMPASSES_VALUE, OnLoadFileColoredMapsAndCompasses) - //Also need to call it directly to patch/unpatch on cvar change + // Also need to call it directly to patch/unpatch on cvar change OnLoadFileColoredMapsAndCompasses(0); } diff --git a/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp b/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp index 33e264bd4..642fa7f42 100644 --- a/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp +++ b/soh/soh/Enhancements/randomizer/LockOverworldDoors.cpp @@ -13,6 +13,7 @@ extern PlayState* gPlayState; using SceneDoorParamsPair = std::pair; std::map lookupTable = { + // clang-format off {{ 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 }, @@ -61,13 +62,15 @@ std::map lookupTable = { {{ SCENE_LON_LON_RANCH, 447 }, RAND_INF_BACK_TOWER_UNLOCKED }, {{ SCENE_LAKE_HYLIA, 447 }, RAND_INF_HYLIA_LAB_UNLOCKED }, {{ SCENE_LAKE_HYLIA, 1471 }, RAND_INF_FISHING_HOLE_UNLOCKED }, + + // clang-format on }; static void OnDoorInit(void* actorRef) { EnDoor* enDoor = static_cast(actorRef); enDoor->randomizerInf = RAND_INF_MAX; - auto it = lookupTable.find({gPlayState->sceneNum, enDoor->actor.params}); + auto it = lookupTable.find({ gPlayState->sceneNum, enDoor->actor.params }); if (it != lookupTable.end()) { enDoor->randomizerInf = it->second; if (!Flags_GetRandomizerInf(enDoor->randomizerInf)) { @@ -90,7 +93,8 @@ void RegisterLockOverworldDoors() { COND_VB_SHOULD(VB_CONSUME_SMALL_KEY, shouldRegister, { EnDoor* enDoor = va_arg(args, EnDoor*); - if (enDoor->randomizerInf >= RAND_INF_GUARD_HOUSE_UNLOCKED && enDoor->randomizerInf <= RAND_INF_FISHING_HOLE_KEY_OBTAINED) { + if (enDoor->randomizerInf >= RAND_INF_GUARD_HOUSE_UNLOCKED && + enDoor->randomizerInf <= RAND_INF_FISHING_HOLE_KEY_OBTAINED) { Flags_SetRandomizerInf(enDoor->randomizerInf); *should = false; } @@ -99,7 +103,8 @@ void RegisterLockOverworldDoors() { COND_VB_SHOULD(VB_NOT_HAVE_SMALL_KEY, shouldRegister, { EnDoor* enDoor = va_arg(args, EnDoor*); - if (enDoor->randomizerInf >= RAND_INF_GUARD_HOUSE_UNLOCKED && enDoor->randomizerInf <= RAND_INF_FISHING_HOLE_KEY_OBTAINED) { + if (enDoor->randomizerInf >= RAND_INF_GUARD_HOUSE_UNLOCKED && + enDoor->randomizerInf <= RAND_INF_FISHING_HOLE_KEY_OBTAINED) { *should = !Flags_GetRandomizerInf((RandomizerInf)(enDoor->randomizerInf + 1)); } }); @@ -107,21 +112,20 @@ void RegisterLockOverworldDoors() { COND_VB_SHOULD(VB_DOOR_BE_LOCKED, shouldRegister, { EnDoor* enDoor = va_arg(args, EnDoor*); - if (enDoor->randomizerInf >= RAND_INF_GUARD_HOUSE_UNLOCKED && enDoor->randomizerInf <= RAND_INF_FISHING_HOLE_KEY_OBTAINED) { + if (enDoor->randomizerInf >= RAND_INF_GUARD_HOUSE_UNLOCKED && + enDoor->randomizerInf <= RAND_INF_FISHING_HOLE_KEY_OBTAINED) { *should = !Flags_GetRandomizerInf(enDoor->randomizerInf); } }); - // The door actor uses the same param to indicate if a door should be locked or be a scene transition, so it cannot be both. Here we're - // overriding the check for scene transition to also check if the door is being unlocked and should be a scene transition. + // The door actor uses the same param to indicate if a door should be locked or be a scene transition, so it cannot + // be both. Here we're overriding the check for scene transition to also check if the door is being unlocked and + // should be a scene transition. COND_VB_SHOULD(VB_DOOR_PLAY_SCENE_TRANSITION, shouldRegister, { EnDoor* enDoor = va_arg(args, EnDoor*); - if (!*should && ( - enDoor->actor.id == ACTOR_EN_DOOR && - ((enDoor->actor.params >> 7) & 7) == 1 && - enDoor->randomizerInf != RAND_INF_MAX - )) { + if (!*should && (enDoor->actor.id == ACTOR_EN_DOOR && ((enDoor->actor.params >> 7) & 7) == 1 && + enDoor->randomizerInf != RAND_INF_MAX)) { *should = true; } }); diff --git a/soh/soh/Enhancements/randomizer/Plandomizer.cpp b/soh/soh/Enhancements/randomizer/Plandomizer.cpp index 39b20d876..dc32dc999 100644 --- a/soh/soh/Enhancements/randomizer/Plandomizer.cpp +++ b/soh/soh/Enhancements/randomizer/Plandomizer.cpp @@ -18,10 +18,10 @@ #include "soh/Enhancements/randomizer/3drando/shops.hpp" extern "C" { - #include "include/z64item.h" - #include "objects/gameplay_keep/gameplay_keep.h" - extern SaveContext gSaveContext; - extern PlayState* gPlayState; +#include "include/z64item.h" +#include "objects/gameplay_keep/gameplay_keep.h" +extern SaveContext gSaveContext; +extern PlayState* gPlayState; } const std::string randomizeButton = ICON_FA_RANDOM; @@ -34,14 +34,14 @@ std::string shortName = ""; std::string logTemp = ""; std::string lastLoadedSpoiler = ""; int32_t temporaryItemIndex = -1; -RandomizerCheckArea selectedArea = RCAREA_INVALID; +RandomizerCheckArea selectedArea = RCAREA_INVALID; -ImVec4 itemColor = ImVec4( 1.0f, 1.0f, 1.0f, 1.0f ); +ImVec4 itemColor = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); ImTextureID textureID; ImVec2 imageSize = ImVec2(32.0f, 32.0f); float imagePadding = 2.0f; -ImVec2 textureUV0 = ImVec2( 0, 0 ); -ImVec2 textureUV1 = ImVec2( 1, 1 ); +ImVec2 textureUV0 = ImVec2(0, 0); +ImVec2 textureUV1 = ImVec2(1, 1); bool shouldPopup = false; bool shouldTrapPopup = false; @@ -62,208 +62,196 @@ std::vector plandoHintData; extern std::map rcAreaNames; std::unordered_map bossKeyShortNames = { - { RG_FOREST_TEMPLE_BOSS_KEY, "Frst" }, - { RG_FIRE_TEMPLE_BOSS_KEY, "Fire" }, - { RG_WATER_TEMPLE_BOSS_KEY, "Watr" }, - { RG_SPIRIT_TEMPLE_BOSS_KEY, "Sprt" }, - { RG_SHADOW_TEMPLE_BOSS_KEY, "Shdw" }, - { RG_GANONS_CASTLE_BOSS_KEY, "Ganon" }, + { RG_FOREST_TEMPLE_BOSS_KEY, "Frst" }, { RG_FIRE_TEMPLE_BOSS_KEY, "Fire" }, + { RG_WATER_TEMPLE_BOSS_KEY, "Watr" }, { RG_SPIRIT_TEMPLE_BOSS_KEY, "Sprt" }, + { RG_SHADOW_TEMPLE_BOSS_KEY, "Shdw" }, { RG_GANONS_CASTLE_BOSS_KEY, "Ganon" }, }; std::unordered_map ocarinaButtonNames = { - { RG_OCARINA_A_BUTTON, "A" }, - { RG_OCARINA_C_UP_BUTTON, "C-UP" }, - { RG_OCARINA_C_DOWN_BUTTON, "C-DWN" }, - { RG_OCARINA_C_LEFT_BUTTON, "C-LFT" }, - { RG_OCARINA_C_RIGHT_BUTTON, "C-RHT" }, + { RG_OCARINA_A_BUTTON, "A" }, { RG_OCARINA_C_UP_BUTTON, "C-UP" }, + { RG_OCARINA_C_DOWN_BUTTON, "C-DWN" }, { RG_OCARINA_C_LEFT_BUTTON, "C-LFT" }, + { RG_OCARINA_C_RIGHT_BUTTON, "C-RHT" }, }; std::map bossSoulColorMapping = { - { RG_GOHMA_SOUL, { 0.00f, 1.00f, 0.00f, 1.0f } }, - { RG_KING_DODONGO_SOUL, { 1.00f, 0.00f, 0.39f, 1.0f } }, - { RG_BARINADE_SOUL, { 0.20f, 1.00f, 1.00f, 1.0f } }, - { RG_PHANTOM_GANON_SOUL, { 0.02f, 0.76f, 0.18f, 1.0f } }, - { RG_VOLVAGIA_SOUL, { 0.93f, 0.37f, 0.37f, 1.0f } }, - { RG_MORPHA_SOUL, { 0.33f, 0.71f, 0.87f, 1.0f } }, - { RG_BONGO_BONGO_SOUL, { 0.49f, 0.06f, 0.69f, 1.0f } }, - { RG_TWINROVA_SOUL, { 0.87f, 0.62f, 0.18f, 1.0f } }, - { RG_GANON_SOUL, { 0.31f, 0.31f, 0.31f, 1.0f } } + { RG_GOHMA_SOUL, { 0.00f, 1.00f, 0.00f, 1.0f } }, { RG_KING_DODONGO_SOUL, { 1.00f, 0.00f, 0.39f, 1.0f } }, + { RG_BARINADE_SOUL, { 0.20f, 1.00f, 1.00f, 1.0f } }, { RG_PHANTOM_GANON_SOUL, { 0.02f, 0.76f, 0.18f, 1.0f } }, + { RG_VOLVAGIA_SOUL, { 0.93f, 0.37f, 0.37f, 1.0f } }, { RG_MORPHA_SOUL, { 0.33f, 0.71f, 0.87f, 1.0f } }, + { RG_BONGO_BONGO_SOUL, { 0.49f, 0.06f, 0.69f, 1.0f } }, { RG_TWINROVA_SOUL, { 0.87f, 0.62f, 0.18f, 1.0f } }, + { RG_GANON_SOUL, { 0.31f, 0.31f, 0.31f, 1.0f } } }; - std::vector infiniteItemList = { - RG_GREEN_RUPEE, RG_BLUE_RUPEE, RG_RED_RUPEE, RG_PURPLE_RUPEE, RG_HUGE_RUPEE, - RG_ARROWS_5, RG_ARROWS_10, RG_ARROWS_30, - RG_DEKU_STICK_1, RG_DEKU_SEEDS_30, RG_DEKU_NUTS_5, RG_DEKU_NUTS_10, - RG_BOMBS_5, RG_BOMBS_10, RG_BOMBS_20, RG_BOMBCHU_5, RG_BOMBCHU_10, RG_BOMBCHU_20, - RG_RECOVERY_HEART, RG_ICE_TRAP, RG_SOLD_OUT + RG_GREEN_RUPEE, RG_BLUE_RUPEE, RG_RED_RUPEE, RG_PURPLE_RUPEE, RG_HUGE_RUPEE, RG_ARROWS_5, RG_ARROWS_10, + RG_ARROWS_30, RG_DEKU_STICK_1, RG_DEKU_SEEDS_30, RG_DEKU_NUTS_5, RG_DEKU_NUTS_10, RG_BOMBS_5, RG_BOMBS_10, + RG_BOMBS_20, RG_BOMBCHU_5, RG_BOMBCHU_10, RG_BOMBCHU_20, RG_RECOVERY_HEART, RG_ICE_TRAP, RG_SOLD_OUT }; std::unordered_map itemImageMap = { - { RG_NONE, "ITEM_SOLD_OUT" }, - { RG_KOKIRI_SWORD, "ITEM_SWORD_KOKIRI" }, - { RG_GIANTS_KNIFE, "ITEM_SWORD_KNIFE" }, - { RG_BIGGORON_SWORD, "ITEM_SWORD_BGS" }, - { RG_DEKU_SHIELD, "ITEM_SHIELD_DEKU" }, - { RG_HYLIAN_SHIELD, "ITEM_SHIELD_HYLIAN" }, - { RG_MIRROR_SHIELD, "ITEM_SHIELD_MIRROR" }, - { RG_GORON_TUNIC, "ITEM_TUNIC_GORON" }, - { RG_ZORA_TUNIC, "ITEM_TUNIC_ZORA" }, - { RG_IRON_BOOTS, "ITEM_BOOTS_IRON" }, - { RG_HOVER_BOOTS, "ITEM_BOOTS_HOVER" }, - { RG_BOOMERANG, "ITEM_BOOMERANG" }, - { RG_LENS_OF_TRUTH, "ITEM_LENS" }, - { RG_MEGATON_HAMMER, "ITEM_HAMMER" }, - { RG_STONE_OF_AGONY, "ITEM_STONE_OF_AGONY" }, - { RG_DINS_FIRE, "ITEM_DINS_FIRE" }, - { RG_FARORES_WIND, "ITEM_FARORES_WIND" }, - { RG_NAYRUS_LOVE, "ITEM_NAYRUS_LOVE" }, - { RG_FIRE_ARROWS, "ITEM_ARROW_FIRE" }, - { RG_ICE_ARROWS, "ITEM_ARROW_ICE" }, - { RG_LIGHT_ARROWS, "ITEM_ARROW_LIGHT" }, - { RG_GERUDO_MEMBERSHIP_CARD, "ITEM_GERUDO_CARD" }, - { RG_MAGIC_BEAN, "ITEM_BEAN" }, - { RG_MAGIC_BEAN_PACK, "ITEM_BEAN" }, - { RG_DOUBLE_DEFENSE, "ITEM_HEART_CONTAINER" }, - { RG_WEIRD_EGG, "ITEM_WEIRD_EGG" }, - { RG_ZELDAS_LETTER, "ITEM_LETTER_ZELDA" }, - { RG_POCKET_EGG, "ITEM_POCKET_EGG" }, - { RG_COJIRO, "ITEM_COJIRO" }, - { RG_ODD_MUSHROOM, "ITEM_ODD_MUSHROOM" }, - { RG_ODD_POTION, "ITEM_ODD_POTION" }, - { RG_POACHERS_SAW, "ITEM_SAW" }, - { RG_BROKEN_SWORD, "ITEM_SWORD_BROKEN" }, - { RG_PRESCRIPTION, "ITEM_PRESCRIPTION" }, - { RG_EYEBALL_FROG, "ITEM_FROG" }, - { RG_EYEDROPS, "ITEM_EYEDROPS" }, - { RG_CLAIM_CHECK, "ITEM_CLAIM_CHECK" }, - { RG_GOLD_SKULLTULA_TOKEN, "ITEM_SKULL_TOKEN" }, - { RG_PROGRESSIVE_HOOKSHOT, "ITEM_HOOKSHOT" }, - { RG_PROGRESSIVE_STRENGTH, "ITEM_BRACELET" }, - { RG_PROGRESSIVE_BOMB_BAG, "ITEM_BOMB_BAG_30" }, - { RG_PROGRESSIVE_BOW, "ITEM_QUIVER_30" }, - { RG_PROGRESSIVE_SLINGSHOT, "ITEM_SLINGSHOT" }, - { RG_PROGRESSIVE_WALLET, "ITEM_WALLET_ADULT" }, - { RG_PROGRESSIVE_SCALE, "ITEM_SCALE_SILVER" }, - { RG_PROGRESSIVE_NUT_UPGRADE, "ITEM_NUT" }, - { RG_PROGRESSIVE_STICK_UPGRADE, "ITEM_STICK" }, - { RG_PROGRESSIVE_BOMBCHUS, "ITEM_BOMBCHU" }, - { RG_PROGRESSIVE_MAGIC_METER, "ITEM_MAGIC_SMALL" }, - { RG_MAGIC_SINGLE, "ITEM_MAGIC_SMALL" }, - { RG_MAGIC_DOUBLE, "ITEM_MAGIC_LARGE" }, - { RG_PROGRESSIVE_OCARINA, "ITEM_OCARINA_FAIRY" }, - { RG_PROGRESSIVE_GORONSWORD, "ITEM_SWORD_BGS" }, - { RG_EMPTY_BOTTLE, "ITEM_BOTTLE" }, - { RG_BOTTLE_WITH_MILK, "ITEM_MILK_BOTTLE" }, - { RG_BOTTLE_WITH_RED_POTION, "ITEM_POTION_RED" }, - { RG_BOTTLE_WITH_GREEN_POTION, "ITEM_POTION_GREEN" }, - { RG_BOTTLE_WITH_BLUE_POTION, "ITEM_POTION_BLUE" }, - { RG_BOTTLE_WITH_FAIRY, "ITEM_FAIRY" }, - { RG_BOTTLE_WITH_FISH, "ITEM_FISH" }, - { RG_BOTTLE_WITH_BLUE_FIRE, "ITEM_BLUE_FIRE" }, - { RG_BOTTLE_WITH_BUGS, "ITEM_BUG" }, - { RG_BOTTLE_WITH_POE, "ITEM_POE" }, - { RG_RUTOS_LETTER, "ITEM_LETTER_RUTO" }, - { RG_BOTTLE_WITH_BIG_POE, "ITEM_BIG_POE" }, - { RG_ZELDAS_LULLABY, "ITEM_SONG_LULLABY" }, - { RG_EPONAS_SONG, "ITEM_SONG_EPONA" }, - { RG_SARIAS_SONG, "ITEM_SONG_SARIA" }, - { RG_SUNS_SONG, "ITEM_SONG_SUN" }, - { RG_SONG_OF_TIME, "ITEM_SONG_TIME" }, - { RG_SONG_OF_STORMS, "ITEM_SONG_STORMS" }, - { RG_MINUET_OF_FOREST, "ITEM_SONG_MINUET" }, - { RG_BOLERO_OF_FIRE, "ITEM_SONG_BOLERO" }, - { RG_SERENADE_OF_WATER, "ITEM_SONG_SERENADE" }, - { RG_REQUIEM_OF_SPIRIT, "ITEM_SONG_REQUIEM" }, - { RG_NOCTURNE_OF_SHADOW, "ITEM_SONG_NOCTURNE" }, - { RG_PRELUDE_OF_LIGHT, "ITEM_SONG_PRELUDE" }, - { RG_DEKU_TREE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_DODONGOS_CAVERN_MAP, "ITEM_DUNGEON_MAP" }, - { RG_JABU_JABUS_BELLY_MAP, "ITEM_DUNGEON_MAP" }, - { RG_FOREST_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_FIRE_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_WATER_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_SPIRIT_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_SHADOW_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, - { RG_BOTTOM_OF_THE_WELL_MAP, "ITEM_DUNGEON_MAP" }, - { RG_ICE_CAVERN_MAP, "ITEM_DUNGEON_MAP" }, - { RG_DEKU_TREE_COMPASS, "ITEM_COMPASS" }, - { RG_DODONGOS_CAVERN_COMPASS, "ITEM_COMPASS" }, - { RG_JABU_JABUS_BELLY_COMPASS, "ITEM_COMPASS" }, - { RG_FOREST_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_FIRE_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_WATER_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_SPIRIT_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_SHADOW_TEMPLE_COMPASS, "ITEM_COMPASS" }, - { RG_BOTTOM_OF_THE_WELL_COMPASS, "ITEM_COMPASS" }, - { RG_ICE_CAVERN_COMPASS, "ITEM_COMPASS" }, - { RG_FOREST_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_FIRE_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_WATER_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_SPIRIT_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_SHADOW_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_GANONS_CASTLE_BOSS_KEY, "ITEM_KEY_BOSS" }, - { RG_FOREST_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_FIRE_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_WATER_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_SPIRIT_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_SHADOW_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_BOTTOM_OF_THE_WELL_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_NONE, "ITEM_SOLD_OUT" }, + { RG_KOKIRI_SWORD, "ITEM_SWORD_KOKIRI" }, + { RG_GIANTS_KNIFE, "ITEM_SWORD_KNIFE" }, + { RG_BIGGORON_SWORD, "ITEM_SWORD_BGS" }, + { RG_DEKU_SHIELD, "ITEM_SHIELD_DEKU" }, + { RG_HYLIAN_SHIELD, "ITEM_SHIELD_HYLIAN" }, + { RG_MIRROR_SHIELD, "ITEM_SHIELD_MIRROR" }, + { RG_GORON_TUNIC, "ITEM_TUNIC_GORON" }, + { RG_ZORA_TUNIC, "ITEM_TUNIC_ZORA" }, + { RG_IRON_BOOTS, "ITEM_BOOTS_IRON" }, + { RG_HOVER_BOOTS, "ITEM_BOOTS_HOVER" }, + { RG_BOOMERANG, "ITEM_BOOMERANG" }, + { RG_LENS_OF_TRUTH, "ITEM_LENS" }, + { RG_MEGATON_HAMMER, "ITEM_HAMMER" }, + { RG_STONE_OF_AGONY, "ITEM_STONE_OF_AGONY" }, + { RG_DINS_FIRE, "ITEM_DINS_FIRE" }, + { RG_FARORES_WIND, "ITEM_FARORES_WIND" }, + { RG_NAYRUS_LOVE, "ITEM_NAYRUS_LOVE" }, + { RG_FIRE_ARROWS, "ITEM_ARROW_FIRE" }, + { RG_ICE_ARROWS, "ITEM_ARROW_ICE" }, + { RG_LIGHT_ARROWS, "ITEM_ARROW_LIGHT" }, + { RG_GERUDO_MEMBERSHIP_CARD, "ITEM_GERUDO_CARD" }, + { RG_MAGIC_BEAN, "ITEM_BEAN" }, + { RG_MAGIC_BEAN_PACK, "ITEM_BEAN" }, + { RG_DOUBLE_DEFENSE, "ITEM_HEART_CONTAINER" }, + { RG_WEIRD_EGG, "ITEM_WEIRD_EGG" }, + { RG_ZELDAS_LETTER, "ITEM_LETTER_ZELDA" }, + { RG_POCKET_EGG, "ITEM_POCKET_EGG" }, + { RG_COJIRO, "ITEM_COJIRO" }, + { RG_ODD_MUSHROOM, "ITEM_ODD_MUSHROOM" }, + { RG_ODD_POTION, "ITEM_ODD_POTION" }, + { RG_POACHERS_SAW, "ITEM_SAW" }, + { RG_BROKEN_SWORD, "ITEM_SWORD_BROKEN" }, + { RG_PRESCRIPTION, "ITEM_PRESCRIPTION" }, + { RG_EYEBALL_FROG, "ITEM_FROG" }, + { RG_EYEDROPS, "ITEM_EYEDROPS" }, + { RG_CLAIM_CHECK, "ITEM_CLAIM_CHECK" }, + { RG_GOLD_SKULLTULA_TOKEN, "ITEM_SKULL_TOKEN" }, + { RG_PROGRESSIVE_HOOKSHOT, "ITEM_HOOKSHOT" }, + { RG_PROGRESSIVE_STRENGTH, "ITEM_BRACELET" }, + { RG_PROGRESSIVE_BOMB_BAG, "ITEM_BOMB_BAG_30" }, + { RG_PROGRESSIVE_BOW, "ITEM_QUIVER_30" }, + { RG_PROGRESSIVE_SLINGSHOT, "ITEM_SLINGSHOT" }, + { RG_PROGRESSIVE_WALLET, "ITEM_WALLET_ADULT" }, + { RG_PROGRESSIVE_SCALE, "ITEM_SCALE_SILVER" }, + { RG_PROGRESSIVE_NUT_UPGRADE, "ITEM_NUT" }, + { RG_PROGRESSIVE_STICK_UPGRADE, "ITEM_STICK" }, + { RG_PROGRESSIVE_BOMBCHUS, "ITEM_BOMBCHU" }, + { RG_PROGRESSIVE_MAGIC_METER, "ITEM_MAGIC_SMALL" }, + { RG_MAGIC_SINGLE, "ITEM_MAGIC_SMALL" }, + { RG_MAGIC_DOUBLE, "ITEM_MAGIC_LARGE" }, + { RG_PROGRESSIVE_OCARINA, "ITEM_OCARINA_FAIRY" }, + { RG_PROGRESSIVE_GORONSWORD, "ITEM_SWORD_BGS" }, + { RG_EMPTY_BOTTLE, "ITEM_BOTTLE" }, + { RG_BOTTLE_WITH_MILK, "ITEM_MILK_BOTTLE" }, + { RG_BOTTLE_WITH_RED_POTION, "ITEM_POTION_RED" }, + { RG_BOTTLE_WITH_GREEN_POTION, "ITEM_POTION_GREEN" }, + { RG_BOTTLE_WITH_BLUE_POTION, "ITEM_POTION_BLUE" }, + { RG_BOTTLE_WITH_FAIRY, "ITEM_FAIRY" }, + { RG_BOTTLE_WITH_FISH, "ITEM_FISH" }, + { RG_BOTTLE_WITH_BLUE_FIRE, "ITEM_BLUE_FIRE" }, + { RG_BOTTLE_WITH_BUGS, "ITEM_BUG" }, + { RG_BOTTLE_WITH_POE, "ITEM_POE" }, + { RG_RUTOS_LETTER, "ITEM_LETTER_RUTO" }, + { RG_BOTTLE_WITH_BIG_POE, "ITEM_BIG_POE" }, + { RG_ZELDAS_LULLABY, "ITEM_SONG_LULLABY" }, + { RG_EPONAS_SONG, "ITEM_SONG_EPONA" }, + { RG_SARIAS_SONG, "ITEM_SONG_SARIA" }, + { RG_SUNS_SONG, "ITEM_SONG_SUN" }, + { RG_SONG_OF_TIME, "ITEM_SONG_TIME" }, + { RG_SONG_OF_STORMS, "ITEM_SONG_STORMS" }, + { RG_MINUET_OF_FOREST, "ITEM_SONG_MINUET" }, + { RG_BOLERO_OF_FIRE, "ITEM_SONG_BOLERO" }, + { RG_SERENADE_OF_WATER, "ITEM_SONG_SERENADE" }, + { RG_REQUIEM_OF_SPIRIT, "ITEM_SONG_REQUIEM" }, + { RG_NOCTURNE_OF_SHADOW, "ITEM_SONG_NOCTURNE" }, + { RG_PRELUDE_OF_LIGHT, "ITEM_SONG_PRELUDE" }, + { RG_DEKU_TREE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_DODONGOS_CAVERN_MAP, "ITEM_DUNGEON_MAP" }, + { RG_JABU_JABUS_BELLY_MAP, "ITEM_DUNGEON_MAP" }, + { RG_FOREST_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_FIRE_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_WATER_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_SPIRIT_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_SHADOW_TEMPLE_MAP, "ITEM_DUNGEON_MAP" }, + { RG_BOTTOM_OF_THE_WELL_MAP, "ITEM_DUNGEON_MAP" }, + { RG_ICE_CAVERN_MAP, "ITEM_DUNGEON_MAP" }, + { RG_DEKU_TREE_COMPASS, "ITEM_COMPASS" }, + { RG_DODONGOS_CAVERN_COMPASS, "ITEM_COMPASS" }, + { RG_JABU_JABUS_BELLY_COMPASS, "ITEM_COMPASS" }, + { RG_FOREST_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_FIRE_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_WATER_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_SPIRIT_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_SHADOW_TEMPLE_COMPASS, "ITEM_COMPASS" }, + { RG_BOTTOM_OF_THE_WELL_COMPASS, "ITEM_COMPASS" }, + { RG_ICE_CAVERN_COMPASS, "ITEM_COMPASS" }, + { RG_FOREST_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_FIRE_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_WATER_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_SPIRIT_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_SHADOW_TEMPLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_GANONS_CASTLE_BOSS_KEY, "ITEM_KEY_BOSS" }, + { RG_FOREST_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_FIRE_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_WATER_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_SPIRIT_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_SHADOW_TEMPLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_BOTTOM_OF_THE_WELL_SMALL_KEY, "ITEM_KEY_SMALL" }, { RG_GERUDO_TRAINING_GROUND_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_GERUDO_FORTRESS_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_GANONS_CASTLE_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_TREASURE_GAME_SMALL_KEY, "ITEM_KEY_SMALL" }, - { RG_KOKIRI_EMERALD, "ITEM_KOKIRI_EMERALD" }, - { RG_GORON_RUBY, "ITEM_GORON_RUBY" }, - { RG_ZORA_SAPPHIRE, "ITEM_ZORA_SAPPHIRE" }, - { RG_FOREST_MEDALLION, "ITEM_MEDALLION_FOREST" }, - { RG_FIRE_MEDALLION, "ITEM_MEDALLION_FIRE" }, - { RG_WATER_MEDALLION, "ITEM_MEDALLION_WATER" }, - { RG_SPIRIT_MEDALLION, "ITEM_MEDALLION_SPIRIT" }, - { RG_SHADOW_MEDALLION, "ITEM_MEDALLION_SHADOW" }, - { RG_LIGHT_MEDALLION, "ITEM_MEDALLION_LIGHT" }, - { RG_RECOVERY_HEART, "ITEM_HEART_GRAYSCALE" }, - { RG_GREEN_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_GREG_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_BLUE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_RED_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_PURPLE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_HUGE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_TREASURE_GAME_GREEN_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, - { RG_PIECE_OF_HEART, "ITEM_HEART_PIECE" }, - { RG_HEART_CONTAINER, "ITEM_HEART_CONTAINER" }, - { RG_ICE_TRAP, "ITEM_ICE_TRAP" }, - { RG_MILK, "ITEM_MILK_BOTTLE"}, - { RG_BOMBS_5, "ITEM_BOMB" }, - { RG_BOMBS_10, "ITEM_BOMB" }, - { RG_BOMBS_20, "ITEM_BOMB" }, - { RG_BUY_BOMBS_525, "ITEM_BOMB" }, - { RG_BUY_BOMBS_535, "ITEM_BOMB" }, - { RG_BUY_BOMBS_10, "ITEM_BOMB" }, - { RG_BUY_BOMBS_20, "ITEM_BOMB" }, - { RG_BUY_BOMBS_30, "ITEM_BOMB" }, - { RG_DEKU_NUTS_5, "ITEM_NUT" }, - { RG_DEKU_NUTS_10, "ITEM_NUT" }, - { RG_BUY_DEKU_NUTS_5, "ITEM_NUT" }, - { RG_BUY_DEKU_NUTS_10, "ITEM_NUT" }, - { RG_BOMBCHU_5, "ITEM_BOMBCHU" }, - { RG_BOMBCHU_10, "ITEM_BOMBCHU" }, - { RG_BOMBCHU_20, "ITEM_BOMBCHU" }, - { RG_BUY_BOMBCHUS_20, "ITEM_BOMBCHU" }, - { RG_ARROWS_5, "ITEM_ARROWS_SMALL" }, - { RG_BUY_ARROWS_10, "ITEM_ARROWS_SMALL" }, - { RG_ARROWS_10, "ITEM_ARROWS_MEDIUM" }, - { RG_BUY_ARROWS_30, "ITEM_ARROWS_MEDIUM" }, - { RG_ARROWS_30, "ITEM_ARROWS_LARGE" }, - { RG_BUY_ARROWS_50, "ITEM_ARROWS_LARGE" }, - { RG_TREASURE_GAME_HEART, "ITEM_HEART_PIECE" }, - { RG_DEKU_SEEDS_30, "ITEM_SEEDS" }, - { RG_BUY_DEKU_SEEDS_30, "ITEM_SEEDS" }, - { RG_BUY_HEART, "ITEM_HEART_GRAYSCALE" }, - { RG_FISHING_POLE, "ITEM_FISHING_POLE" }, - { RG_SOLD_OUT, "ITEM_SOLD_OUT" }, - { RG_TRIFORCE_PIECE, "TRIFORCE_PIECE" }, - { RG_SKELETON_KEY, "ITEM_KEY_SMALL" } + { RG_GERUDO_FORTRESS_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_GANONS_CASTLE_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_TREASURE_GAME_SMALL_KEY, "ITEM_KEY_SMALL" }, + { RG_KOKIRI_EMERALD, "ITEM_KOKIRI_EMERALD" }, + { RG_GORON_RUBY, "ITEM_GORON_RUBY" }, + { RG_ZORA_SAPPHIRE, "ITEM_ZORA_SAPPHIRE" }, + { RG_FOREST_MEDALLION, "ITEM_MEDALLION_FOREST" }, + { RG_FIRE_MEDALLION, "ITEM_MEDALLION_FIRE" }, + { RG_WATER_MEDALLION, "ITEM_MEDALLION_WATER" }, + { RG_SPIRIT_MEDALLION, "ITEM_MEDALLION_SPIRIT" }, + { RG_SHADOW_MEDALLION, "ITEM_MEDALLION_SHADOW" }, + { RG_LIGHT_MEDALLION, "ITEM_MEDALLION_LIGHT" }, + { RG_RECOVERY_HEART, "ITEM_HEART_GRAYSCALE" }, + { RG_GREEN_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_GREG_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_BLUE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_RED_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_PURPLE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_HUGE_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_TREASURE_GAME_GREEN_RUPEE, "ITEM_RUPEE_GRAYSCALE" }, + { RG_PIECE_OF_HEART, "ITEM_HEART_PIECE" }, + { RG_HEART_CONTAINER, "ITEM_HEART_CONTAINER" }, + { RG_ICE_TRAP, "ITEM_ICE_TRAP" }, + { RG_MILK, "ITEM_MILK_BOTTLE" }, + { RG_BOMBS_5, "ITEM_BOMB" }, + { RG_BOMBS_10, "ITEM_BOMB" }, + { RG_BOMBS_20, "ITEM_BOMB" }, + { RG_BUY_BOMBS_525, "ITEM_BOMB" }, + { RG_BUY_BOMBS_535, "ITEM_BOMB" }, + { RG_BUY_BOMBS_10, "ITEM_BOMB" }, + { RG_BUY_BOMBS_20, "ITEM_BOMB" }, + { RG_BUY_BOMBS_30, "ITEM_BOMB" }, + { RG_DEKU_NUTS_5, "ITEM_NUT" }, + { RG_DEKU_NUTS_10, "ITEM_NUT" }, + { RG_BUY_DEKU_NUTS_5, "ITEM_NUT" }, + { RG_BUY_DEKU_NUTS_10, "ITEM_NUT" }, + { RG_BOMBCHU_5, "ITEM_BOMBCHU" }, + { RG_BOMBCHU_10, "ITEM_BOMBCHU" }, + { RG_BOMBCHU_20, "ITEM_BOMBCHU" }, + { RG_BUY_BOMBCHUS_20, "ITEM_BOMBCHU" }, + { RG_ARROWS_5, "ITEM_ARROWS_SMALL" }, + { RG_BUY_ARROWS_10, "ITEM_ARROWS_SMALL" }, + { RG_ARROWS_10, "ITEM_ARROWS_MEDIUM" }, + { RG_BUY_ARROWS_30, "ITEM_ARROWS_MEDIUM" }, + { RG_ARROWS_30, "ITEM_ARROWS_LARGE" }, + { RG_BUY_ARROWS_50, "ITEM_ARROWS_LARGE" }, + { RG_TREASURE_GAME_HEART, "ITEM_HEART_PIECE" }, + { RG_DEKU_SEEDS_30, "ITEM_SEEDS" }, + { RG_BUY_DEKU_SEEDS_30, "ITEM_SEEDS" }, + { RG_BUY_HEART, "ITEM_HEART_GRAYSCALE" }, + { RG_FISHING_POLE, "ITEM_FISHING_POLE" }, + { RG_SOLD_OUT, "ITEM_SOLD_OUT" }, + { RG_TRIFORCE_PIECE, "TRIFORCE_PIECE" }, + { RG_SKELETON_KEY, "ITEM_KEY_SMALL" } }; Rando::Item plandomizerRandoRetrieveItem(RandomizerGet randoGetItem) { @@ -271,70 +259,71 @@ Rando::Item plandomizerRandoRetrieveItem(RandomizerGet randoGetItem) { return randoGetItemEntry; } -void PlandoPushImageButtonStyle(){ +void PlandoPushImageButtonStyle() { ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.0f, 1.0f, 1.0f, 0.0f)); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(1.0f, 1.0f, 1.0f, 0.2f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(1.0f, 1.0f, 1.0f, 0.1f)); } -void PlandoPopImageButtonStyle(){ +void PlandoPopImageButtonStyle() { ImGui::PopStyleColor(3); } ImVec4 plandomizerGetItemColor(Rando::Item randoItem) { - itemColor = ImVec4( 1.0f, 1.0f, 1.0f, 1.0f ); - if (randoItem.GetItemType() == ITEMTYPE_SMALLKEY || randoItem.GetItemType() == ITEMTYPE_FORTRESS_SMALLKEY - || randoItem.GetItemType() == ITEMTYPE_BOSSKEY) { - if (randoItem.GetRandomizerGet() == RG_FOREST_TEMPLE_SMALL_KEY || + itemColor = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); + if (randoItem.GetItemType() == ITEMTYPE_SMALLKEY || randoItem.GetItemType() == ITEMTYPE_FORTRESS_SMALLKEY || + randoItem.GetItemType() == ITEMTYPE_BOSSKEY) { + if (randoItem.GetRandomizerGet() == RG_FOREST_TEMPLE_SMALL_KEY || randoItem.GetRandomizerGet() == RG_FOREST_TEMPLE_KEY_RING) { - itemColor = ImVec4( 0.02f, 0.76f, 0.18f, 1.0f ); - } else if (randoItem.GetRandomizerGet() == RG_FIRE_TEMPLE_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_FIRE_TEMPLE_KEY_RING) { - itemColor = ImVec4( 0.93f, 0.37f, 0.37f, 1.0f ); - } else if (randoItem.GetRandomizerGet() == RG_WATER_TEMPLE_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_WATER_TEMPLE_KEY_RING) { - itemColor = ImVec4( 0.33f, 0.71f, 0.87f, 1.0f ); - } else if (randoItem.GetRandomizerGet() == RG_SPIRIT_TEMPLE_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_SPIRIT_TEMPLE_KEY_RING) { - itemColor = ImVec4( 0.87f, 0.62f, 0.18f, 1.0f ); - } else if (randoItem.GetRandomizerGet() == RG_SHADOW_TEMPLE_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_SHADOW_TEMPLE_KEY_RING) { - itemColor = ImVec4( 0.49f, 0.06f, 0.69f, 1.0f ); - } else if (randoItem.GetRandomizerGet() == RG_BOTTOM_OF_THE_WELL_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_BOTTOM_OF_THE_WELL_KEY_RING) { - itemColor = ImVec4( 0.89f, 0.43f, 1.0f, 1.0f ); - } else if (randoItem.GetRandomizerGet() == RG_GERUDO_TRAINING_GROUND_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_GERUDO_TRAINING_GROUND_KEY_RING) { - itemColor = ImVec4( 1.0f, 1.0f, 0, 1.0f ); - } else if (randoItem.GetRandomizerGet() == RG_GERUDO_FORTRESS_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_GERUDO_FORTRESS_KEY_RING) { - itemColor = ImVec4( 1.0f, 1.0f, 1.0f, 1.0f ); - } else if (randoItem.GetRandomizerGet() == RG_GANONS_CASTLE_SMALL_KEY || - randoItem.GetRandomizerGet() == RG_GANONS_CASTLE_KEY_RING) { - itemColor = ImVec4( 0.5f, 0.5f, 0.5f, 1.0f ); + itemColor = ImVec4(0.02f, 0.76f, 0.18f, 1.0f); + } else if (randoItem.GetRandomizerGet() == RG_FIRE_TEMPLE_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_FIRE_TEMPLE_KEY_RING) { + itemColor = ImVec4(0.93f, 0.37f, 0.37f, 1.0f); + } else if (randoItem.GetRandomizerGet() == RG_WATER_TEMPLE_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_WATER_TEMPLE_KEY_RING) { + itemColor = ImVec4(0.33f, 0.71f, 0.87f, 1.0f); + } else if (randoItem.GetRandomizerGet() == RG_SPIRIT_TEMPLE_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_SPIRIT_TEMPLE_KEY_RING) { + itemColor = ImVec4(0.87f, 0.62f, 0.18f, 1.0f); + } else if (randoItem.GetRandomizerGet() == RG_SHADOW_TEMPLE_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_SHADOW_TEMPLE_KEY_RING) { + itemColor = ImVec4(0.49f, 0.06f, 0.69f, 1.0f); + } else if (randoItem.GetRandomizerGet() == RG_BOTTOM_OF_THE_WELL_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_BOTTOM_OF_THE_WELL_KEY_RING) { + itemColor = ImVec4(0.89f, 0.43f, 1.0f, 1.0f); + } else if (randoItem.GetRandomizerGet() == RG_GERUDO_TRAINING_GROUND_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_GERUDO_TRAINING_GROUND_KEY_RING) { + itemColor = ImVec4(1.0f, 1.0f, 0, 1.0f); + } else if (randoItem.GetRandomizerGet() == RG_GERUDO_FORTRESS_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_GERUDO_FORTRESS_KEY_RING) { + itemColor = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); + } else if (randoItem.GetRandomizerGet() == RG_GANONS_CASTLE_SMALL_KEY || + randoItem.GetRandomizerGet() == RG_GANONS_CASTLE_KEY_RING) { + itemColor = ImVec4(0.5f, 0.5f, 0.5f, 1.0f); } return itemColor; } if (randoItem.GetItemType() == ITEMTYPE_SONG) { uint32_t questID = Rando::Logic::RandoGetToQuestItem[randoItem.GetRandomizerGet()]; - textureID = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(songMapping.at((QuestItem)questID).name); + textureID = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + songMapping.at((QuestItem)questID).name); itemColor = songMapping.at((QuestItem)questID).color; imageSize = ImVec2(24.0f, 32.0f); imagePadding = 6.0f; return itemColor; } if (randoItem.GetRandomizerGet() >= RG_GREEN_RUPEE && randoItem.GetRandomizerGet() <= RG_HUGE_RUPEE) { - if (randoItem.GetRandomizerGet() == RG_GREG_RUPEE || randoItem.GetRandomizerGet() == RG_GREEN_RUPEE - || randoItem.GetRandomizerGet() == RG_TREASURE_GAME_GREEN_RUPEE) { - itemColor = ImVec4( 0.02f, 0.76f, 0.18f, 1.0f ); + if (randoItem.GetRandomizerGet() == RG_GREG_RUPEE || randoItem.GetRandomizerGet() == RG_GREEN_RUPEE || + randoItem.GetRandomizerGet() == RG_TREASURE_GAME_GREEN_RUPEE) { + itemColor = ImVec4(0.02f, 0.76f, 0.18f, 1.0f); } else if (randoItem.GetRandomizerGet() == RG_BLUE_RUPEE) { - itemColor = ImVec4( 0.33f, 0.71f, 0.87f, 1.0f ); + itemColor = ImVec4(0.33f, 0.71f, 0.87f, 1.0f); } else if (randoItem.GetRandomizerGet() == RG_RED_RUPEE) { - itemColor = ImVec4( 0.93f, 0.37f, 0.37f, 1.0f ); + itemColor = ImVec4(0.93f, 0.37f, 0.37f, 1.0f); } else if (randoItem.GetRandomizerGet() == RG_PURPLE_RUPEE) { - itemColor = ImVec4( 0.89f, 0.43f, 1.0f, 1.0f ); + itemColor = ImVec4(0.89f, 0.43f, 1.0f, 1.0f); } else if (randoItem.GetRandomizerGet() == RG_HUGE_RUPEE) { - itemColor = ImVec4( 1.0f, 1.0f, 0, 1.0f ); + itemColor = ImVec4(1.0f, 1.0f, 0, 1.0f); } return itemColor; } @@ -342,18 +331,17 @@ ImVec4 plandomizerGetItemColor(Rando::Item randoItem) { if (randoItem.GetRandomizerGet() >= RG_GOHMA_SOUL && randoItem.GetRandomizerGet() <= RG_GANON_SOUL) { itemColor = bossSoulColorMapping.at(randoItem.GetRandomizerGet()); } - + return itemColor; } std::string plandomizerHintsTooltip() { std::string hintTootip; - hintTootip = - "The following options are available:\n" - "- Use \\n to create New Lines.\n" - "- Use %g to change the text color to Green,\n" - " - %r for Red, %y for Yellow, and %w for White\n" - " can also be used as color examples."; + hintTootip = "The following options are available:\n" + "- Use \\n to create New Lines.\n" + "- Use %g to change the text color to Green,\n" + " - %r for Red, %y for Yellow, and %w for White\n" + " can also be used as color examples."; return hintTootip; } @@ -383,11 +371,10 @@ void PlandomizerPopulateSeedList() { void PlandomizerItemImageCorrection(Rando::Item randoItem) { textureID = 0; - imageSize = ImVec2( 32.0f, 32.0f ); + imageSize = ImVec2(32.0f, 32.0f); imagePadding = 2.0f; - textureUV0 = ImVec2( 0, 0 ); - textureUV1 = ImVec2( 1, 1 ); - + textureUV0 = ImVec2(0, 0); + textureUV1 = ImVec2(1, 1); itemColor = plandomizerGetItemColor(randoItem); @@ -404,12 +391,12 @@ void PlandomizerItemImageCorrection(Rando::Item randoItem) { if (map.first == randoItem.GetRandomizerGet()) { textureID = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(map.second.c_str()); if (map.second.find("ITEM_ARROWS") != std::string::npos) { - textureUV0 = ImVec2( 0, 1 ); - textureUV1 = ImVec2( 1, 0 ); + textureUV0 = ImVec2(0, 1); + textureUV1 = ImVec2(1, 0); } if (map.second == "ITEM_TRIFORCE" || map.first == RG_SKELETON_KEY) { - textureUV0 = ImVec2( 1, 1 ); - textureUV1 = ImVec2( 0, 0 ); + textureUV0 = ImVec2(1, 1); + textureUV1 = ImVec2(0, 0); } break; } @@ -419,21 +406,25 @@ void PlandomizerItemImageCorrection(Rando::Item randoItem) { textureID = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("BOSS_SOUL"); } - if (randoItem.GetRandomizerGet() >= RG_OCARINA_A_BUTTON && randoItem.GetRandomizerGet() <= RG_OCARINA_C_RIGHT_BUTTON) { + if (randoItem.GetRandomizerGet() >= RG_OCARINA_A_BUTTON && + randoItem.GetRandomizerGet() <= RG_OCARINA_C_RIGHT_BUTTON) { textureID = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("ITEM_OCARINA_TIME"); } if (textureID == 0) { - textureID = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(itemMapping[randoItem.GetGIEntry()->itemId].name); + textureID = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + itemMapping[randoItem.GetGIEntry()->itemId].name); } } void PlandomizerRandomizeHint(int32_t status, int32_t index) { if (status == HINT_SINGLE) { - plandoHintData[index].hintText = Rando::StaticData::hintTextTable[GetRandomJunkHint()].GetHintMessage().GetForCurrentLanguage(MF_ENCODE); + plandoHintData[index].hintText = + Rando::StaticData::hintTextTable[GetRandomJunkHint()].GetHintMessage().GetForCurrentLanguage(MF_ENCODE); } else { for (auto& hint : plandoHintData) { - hint.hintText = Rando::StaticData::hintTextTable[GetRandomJunkHint()].GetHintMessage().GetForCurrentLanguage(MF_ENCODE); + hint.hintText = + Rando::StaticData::hintTextTable[GetRandomJunkHint()].GetHintMessage().GetForCurrentLanguage(MF_ENCODE); } } } @@ -447,15 +438,14 @@ void PlandomizerRemoveAllHints() { } void PlandomizerSortDrawnItems() { - std::sort(drawnItemsList.begin(), drawnItemsList.end(), - [](const auto& a, const auto& b) { + std::sort(drawnItemsList.begin(), drawnItemsList.end(), [](const auto& a, const auto& b) { auto typeA = a.first.GetItemType(); auto typeB = b.first.GetItemType(); - if (typeA != typeB){ - return typeA < typeB; + if (typeA != typeB) { + return typeA < typeB; } return a.first.GetRandomizerGet() < b.first.GetRandomizerGet(); - }); + }); } void PlandomizerRemoveAllItems() { @@ -463,7 +453,8 @@ void PlandomizerRemoveAllItems() { drawnItemsList.clear(); } for (auto& remove : plandoLogData) { - if (std::find(infiniteItemList.begin(), infiniteItemList.end(), remove.checkRewardItem.GetRandomizerGet()) == infiniteItemList.end()) { + if (std::find(infiniteItemList.begin(), infiniteItemList.end(), remove.checkRewardItem.GetRandomizerGet()) == + infiniteItemList.end()) { bool itemExists = false; for (auto& itemToCheck : drawnItemsList) { if (itemToCheck.first.GetRandomizerGet() == remove.checkRewardItem.GetRandomizerGet()) { @@ -482,7 +473,8 @@ void PlandomizerRemoveAllItems() { } void PlandomizerRemoveFromItemList(Rando::Item randoItem) { - if (std::find(infiniteItemList.begin(), infiniteItemList.end(), randoItem.GetRandomizerGet()) == infiniteItemList.end()) { + if (std::find(infiniteItemList.begin(), infiniteItemList.end(), randoItem.GetRandomizerGet()) == + infiniteItemList.end()) { uint32_t index = 0; for (auto& itemToCheck : drawnItemsList) { if (itemToCheck.first.GetRandomizerGet() == randoItem.GetRandomizerGet()) { @@ -501,7 +493,8 @@ void PlandomizerRemoveFromItemList(Rando::Item randoItem) { } void PlandomizerAddToItemList(Rando::Item randoItem) { - if (std::find(infiniteItemList.begin(), infiniteItemList.end(), randoItem.GetRandomizerGet()) == infiniteItemList.end()) { + if (std::find(infiniteItemList.begin(), infiniteItemList.end(), randoItem.GetRandomizerGet()) == + infiniteItemList.end()) { bool itemExists = false; for (auto& itemToCheck : drawnItemsList) { if (itemToCheck.first.GetRandomizerGet() == randoItem.GetRandomizerGet()) { @@ -510,7 +503,7 @@ void PlandomizerAddToItemList(Rando::Item randoItem) { break; } } - + if (!itemExists) { drawnItemsList.push_back(std::make_pair(randoItem, 1)); } @@ -528,32 +521,24 @@ void PlandomizerSaveSpoilerLog() { inputFile.close(); } - spoilerSave["file_hash"] = { - plandoHash[0], plandoHash[1], plandoHash[2], plandoHash[3], plandoHash[4] - }; + spoilerSave["file_hash"] = { plandoHash[0], plandoHash[1], plandoHash[2], plandoHash[3], plandoHash[4] }; for (auto& import : plandoHintData) { - spoilerSave["Gossip Stone Hints"][import.hintName] = { - { "type", import.hintType.c_str() }, - { "message", import.hintText.c_str() } - }; + spoilerSave["Gossip Stone Hints"][import.hintName] = { { "type", import.hintType.c_str() }, + { "message", import.hintText.c_str() } }; } - + for (auto& import : plandoLogData) { if (import.checkRewardItem.GetRandomizerGet() == RG_ICE_TRAP) { - spoilerSave["locations"][import.checkName] = { - { "item", import.checkRewardItem.GetName().english }, - { "model", import.iceTrapModel.GetName().english }, - { "trickName", import.iceTrapName.c_str() } - }; + spoilerSave["locations"][import.checkName] = { { "item", import.checkRewardItem.GetName().english }, + { "model", import.iceTrapModel.GetName().english }, + { "trickName", import.iceTrapName.c_str() } }; if (import.shopPrice > -1) { spoilerSave["locations"][import.checkName]["price"] = import.shopPrice; } } else if (import.shopPrice > -1) { - spoilerSave["locations"][import.checkName] = { - { "item", import.checkRewardItem.GetName().english }, - { "price", import.shopPrice } - }; + spoilerSave["locations"][import.checkName] = { { "item", import.checkRewardItem.GetName().english }, + { "price", import.shopPrice } }; } else { spoilerSave["locations"][import.checkName] = import.checkRewardItem.GetName().english; } @@ -563,7 +548,7 @@ void PlandomizerSaveSpoilerLog() { if (outputFile.is_open()) { outputFile << spoilerSave.dump(4); outputFile.close(); - } + } } void PlandomizerLoadSpoilerLog(std::string logFile) { @@ -621,21 +606,24 @@ void PlandomizerLoadSpoilerLog(std::string logFile) { checkObject.checkName = key; auto type = value; if (value.is_object()) { - checkObject.checkRewardItem = plandomizerRandoRetrieveItem(Rando::StaticData::itemNameToEnum[value["item"]]); + checkObject.checkRewardItem = + plandomizerRandoRetrieveItem(Rando::StaticData::itemNameToEnum[value["item"]]); if (value["price"].is_number()) { checkObject.shopPrice = value["price"]; } else { checkObject.shopPrice = -1; } if (checkObject.checkRewardItem.GetRandomizerGet() == RG_ICE_TRAP) { - checkObject.iceTrapModel = plandomizerRandoRetrieveItem(Rando::StaticData::itemNameToEnum[value["model"]]); + checkObject.iceTrapModel = + plandomizerRandoRetrieveItem(Rando::StaticData::itemNameToEnum[value["model"]]); checkObject.iceTrapName = value["trickName"]; } } else { - checkObject.checkRewardItem = plandomizerRandoRetrieveItem(Rando::StaticData::itemNameToEnum[value.get()]); + checkObject.checkRewardItem = + plandomizerRandoRetrieveItem(Rando::StaticData::itemNameToEnum[value.get()]); checkObject.shopPrice = -1; - if (checkObject.shopPrice == -1 - && checkObject.checkRewardItem.GetName().english.find("Buy") != std::string::npos) { + if (checkObject.shopPrice == -1 && + checkObject.checkRewardItem.GetName().english.find("Buy") != std::string::npos) { checkObject.shopPrice = checkObject.checkRewardItem.GetPrice(); } } @@ -651,7 +639,7 @@ void PlandomizerLoadSpoilerLog(std::string logFile) { lastLoadedSpoiler = spoilerStr; } -void PlandomizerOverlayText(std::pair drawObject ) { +void PlandomizerOverlayText(std::pair drawObject) { // Overlay the item count text on the existing button ImVec2 imageMin = ImGui::GetItemRectMin(); ImVec2 imageMax = ImGui::GetItemRectMax(); @@ -662,15 +650,15 @@ void PlandomizerOverlayText(std::pair drawObject ) { ImGui::Text(std::to_string(drawObject.second).c_str()); // Overlay item info - if (drawObject.first.GetRandomizerGet() >= RG_PROGRESSIVE_HOOKSHOT && + if (drawObject.first.GetRandomizerGet() >= RG_PROGRESSIVE_HOOKSHOT && drawObject.first.GetRandomizerGet() <= RG_PROGRESSIVE_GORONSWORD) { textPos = ImVec2(imageMin.x + 2, imageMin.y + 2); ImGui::SetCursorScreenPos(textPos); ImGui::Text("+"); } - if (extractNumberInParentheses(drawObject.first.GetName().english.c_str()) != "" && - extractNumberInParentheses(drawObject.first.GetName().english.c_str()) != "WINNER" && + if (extractNumberInParentheses(drawObject.first.GetName().english.c_str()) != "" && + extractNumberInParentheses(drawObject.first.GetName().english.c_str()) != "WINNER" && extractNumberInParentheses(drawObject.first.GetName().english.c_str()) != "LOSER") { textPos = ImVec2(imageMin.x + 2, imageMin.y + 2); @@ -679,7 +667,7 @@ void PlandomizerOverlayText(std::pair drawObject ) { overlayText += extractNumberInParentheses(drawObject.first.GetName().english.c_str()); ImGui::Text(overlayText.c_str()); } - if (drawObject.first.GetRandomizerGet() >= RG_FOREST_TEMPLE_BOSS_KEY && + if (drawObject.first.GetRandomizerGet() >= RG_FOREST_TEMPLE_BOSS_KEY && drawObject.first.GetRandomizerGet() <= RG_GANONS_CASTLE_BOSS_KEY) { textPos = ImVec2(imageMin.x + 1, imageMin.y + 1); ImGui::SetCursorScreenPos(textPos); @@ -718,10 +706,12 @@ void PlandomizerDrawItemPopup(uint32_t index) { PlandomizerItemImageCorrection(plandomizerRandoRetrieveItem(item)); auto name = plandomizerRandoRetrieveItem(item).GetName().english; ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); - auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); + auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, + ImVec4(0, 0, 0, 0), itemColor); ImGui::PopStyleVar(); if (ret) { - if (std::find(infiniteItemList.begin(), infiniteItemList.end(), plandoLogData[index].checkRewardItem.GetRandomizerGet()) == infiniteItemList.end()) { + if (std::find(infiniteItemList.begin(), infiniteItemList.end(), + plandoLogData[index].checkRewardItem.GetRandomizerGet()) == infiniteItemList.end()) { PlandomizerAddToItemList(plandoLogData[index].checkRewardItem); } plandoLogData[index].checkRewardItem = plandomizerRandoRetrieveItem(item); @@ -731,8 +721,7 @@ void PlandomizerDrawItemPopup(uint32_t index) { PlandomizerOverlayText(std::make_pair(plandomizerRandoRetrieveItem(item), 1)); ImGui::PopID(); } - - + ImGui::EndTable(); ImGui::SeparatorText("Spoiler Log Rewards"); ImGui::BeginTable("Item Button Table", 8); @@ -747,10 +736,11 @@ void PlandomizerDrawItemPopup(uint32_t index) { PlandomizerItemImageCorrection(drawSlots.first); auto name = drawSlots.first.GetName().english; ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); - auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); + auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, + ImVec4(0, 0, 0, 0), itemColor); ImGui::PopStyleVar(); if (ret) { - if (itemToDraw.GetRandomizerGet() >= RG_PROGRESSIVE_HOOKSHOT && + if (itemToDraw.GetRandomizerGet() >= RG_PROGRESSIVE_HOOKSHOT && itemToDraw.GetRandomizerGet() <= RG_PROGRESSIVE_GORONSWORD) { plandoLogData[index].checkRewardItem = drawSlots.first; } else { @@ -796,7 +786,8 @@ void PlandomizerDrawIceTrapPopUp(uint32_t index) { auto name = Rando::StaticData::RetrieveItem(items.first).GetName().english; PlandomizerItemImageCorrection(Rando::StaticData::RetrieveItem(items.first)); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); - auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); + auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, + ImVec4(0, 0, 0, 0), itemColor); ImGui::PopStyleVar(); if (ret) { plandoLogData[index].iceTrapModel = Rando::StaticData::RetrieveItem(items.first); @@ -821,7 +812,8 @@ void PlandomizerDrawItemSlots(uint32_t index) { PlandomizerItemImageCorrection(plandoLogData[index].checkRewardItem); auto name = plandoLogData[index].checkRewardItem.GetName().english; ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); - auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); + auto ret = + ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); ImGui::PopStyleVar(); if (ret) { shouldPopup = true; @@ -837,9 +829,15 @@ void PlandomizerDrawItemSlots(uint32_t index) { void PlandomizerDrawShopSlider(uint32_t index) { ImGui::PushID(index); - UIWidgets::SliderInt("Price:", &plandoLogData[index].shopPrice, UIWidgets::IntSliderOptions() - .Color(THEME_COLOR).Format("%d Rupees").Min(0).Max(999).LabelPosition(UIWidgets::LabelPositions::Near) - .ComponentAlignment(UIWidgets::ComponentAlignments::Right).Size(UIWidgets::Sizes::Inline)); + UIWidgets::SliderInt("Price:", &plandoLogData[index].shopPrice, + UIWidgets::IntSliderOptions() + .Color(THEME_COLOR) + .Format("%d Rupees") + .Min(0) + .Max(999) + .LabelPosition(UIWidgets::LabelPositions::Near) + .ComponentAlignment(UIWidgets::ComponentAlignments::Right) + .Size(UIWidgets::Sizes::Inline)); ImGui::PopID(); } @@ -857,7 +855,8 @@ void PlandomizerDrawIceTrapSetup(uint32_t index) { PlandoPushImageButtonStyle(); auto name = plandoLogData[index].iceTrapModel.GetName().english; ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(imagePadding, imagePadding)); - auto ret = ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); + auto ret = + ImGui::ImageButton(name.c_str(), textureID, imageSize, textureUV0, textureUV1, ImVec4(0, 0, 0, 0), itemColor); ImGui::PopStyleVar(); if (ret) { shouldTrapPopup = true; @@ -870,23 +869,29 @@ void PlandomizerDrawIceTrapSetup(uint32_t index) { ImGui::TableNextColumn(); ImGui::Text("Name: "); ImGui::SameLine(); - if (plandoLogData[index].iceTrapModel.GetRandomizerGet() != RG_NONE && + if (plandoLogData[index].iceTrapModel.GetRandomizerGet() != RG_NONE && plandoLogData[index].iceTrapModel.GetRandomizerGet() != RG_SOLD_OUT) { - if (UIWidgets::Button(randomizeButton.c_str(), UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline).Padding(ImVec2(10.f, 6.f)))) { - plandoLogData[index].iceTrapName = - GetIceTrapName(plandoLogData[index].iceTrapModel.GetRandomizerGet()).GetForLanguage(CVarGetInteger(CVAR_SETTING("Languages"), 0)).c_str(); + if (UIWidgets::Button(randomizeButton.c_str(), UIWidgets::ButtonOptions() + .Color(THEME_COLOR) + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(10.f, 6.f)))) { + plandoLogData[index].iceTrapName = GetIceTrapName(plandoLogData[index].iceTrapModel.GetRandomizerGet()) + .GetForLanguage(CVarGetInteger(CVAR_SETTING("Languages"), 0)) + .c_str(); } ImGui::SameLine(); } - if (UIWidgets::InputString("##TrapName", &trapTextInput, UIWidgets::InputOptions().Color(THEME_COLOR).LabelPosition(UIWidgets::LabelPositions::None))) { - plandoLogData[index].iceTrapName = trapTextInput.c_str(); - } - + if (UIWidgets::InputString( + "##TrapName", &trapTextInput, + UIWidgets::InputOptions().Color(THEME_COLOR).LabelPosition(UIWidgets::LabelPositions::None))) { + plandoLogData[index].iceTrapName = trapTextInput.c_str(); + } + if (plandoLogData[index].shopPrice >= 0) { PlandomizerDrawShopSlider(index); } ImGui::EndTable(); - + ImGui::PopID(); } static std::unordered_map rcAreaNameMap = { @@ -933,9 +938,10 @@ void PlandomizerDrawOptions() { PlandomizerPopulateSeedList(); static size_t selectedList = 0; if (existingSeedList.size() != 0) { - UIWidgets::Combobox("##JsonFiles", &selectedList, existingSeedList, UIWidgets::ComboboxOptions().Color(THEME_COLOR).LabelPosition(UIWidgets::LabelPositions::None)); - } - else { + UIWidgets::Combobox( + "##JsonFiles", &selectedList, existingSeedList, + UIWidgets::ComboboxOptions().Color(THEME_COLOR).LabelPosition(UIWidgets::LabelPositions::None)); + } else { ImGui::Text("No Spoiler Logs found."); } ImGui::BeginDisabled(existingSeedList.empty()); @@ -965,29 +971,32 @@ void PlandomizerDrawOptions() { PlandoPushImageButtonStyle(); for (auto& hash : plandoHash) { ImGui::PushID(index); - textureID = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(gSeedTextures[hash].tex); + textureID = + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(gSeedTextures[hash].tex); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2.0f, 2.0f)); - auto upRet = ImGui::ImageButton("HASH_ARROW_UP", Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("HASH_ARROW_UP"), - ImVec2(35.0f, 18.0f), ImVec2(1, 1), ImVec2(0, 0), ImVec4(0, 0, 0, 0), ImVec4(1, 1, 1, 1)); + auto upRet = ImGui::ImageButton( + "HASH_ARROW_UP", + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("HASH_ARROW_UP"), + ImVec2(35.0f, 18.0f), ImVec2(1, 1), ImVec2(0, 0), ImVec4(0, 0, 0, 0), ImVec4(1, 1, 1, 1)); ImGui::PopStyleVar(); if (upRet) { if (hash + 1 >= gSeedTextures.size()) { hash = 0; - } - else { + } else { hash++; } } ImGui::Image(textureID, ImVec2(35.0f, 35.0f)); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2.0f, 2.0f)); - auto downRet = ImGui::ImageButton("HASH_ARROW_DWN", Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("HASH_ARROW_DWN"), - ImVec2(35.0f, 18.0f), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), ImVec4(1, 1, 1, 1)); + auto downRet = ImGui::ImageButton( + "HASH_ARROW_DWN", + Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("HASH_ARROW_DWN"), + ImVec2(35.0f, 18.0f), ImVec2(0, 0), ImVec2(1, 1), ImVec4(0, 0, 0, 0), ImVec4(1, 1, 1, 1)); ImGui::PopStyleVar(); if (downRet) { if (hash == 0) { hash = gSeedTextures.size() - 1; - } - else { + } else { hash--; } } @@ -1000,13 +1009,12 @@ void PlandomizerDrawOptions() { PlandoPopImageButtonStyle(); ImGui::EndTable(); } - } - else { + } else { ImGui::Text("No Spoiler Log Loaded"); } ImGui::EndTable(); } - + ImGui::SeparatorText("Options"); if (plandoLogData.size() == 0) { ImGui::Text("Please Load Spoiler Data..."); @@ -1014,19 +1022,28 @@ void PlandomizerDrawOptions() { } if (getTabID == TAB_HINTS) { - if (UIWidgets::Button("Clear All Hints", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { + if (UIWidgets::Button("Clear All Hints", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { PlandomizerRemoveAllHints(); } ImGui::SameLine(); - if (UIWidgets::Button("Randomize All Hints", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { + if (UIWidgets::Button("Randomize All Hints", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { PlandomizerRandomizeHint(HINT_ALL, 0); } } if (getTabID == TAB_LOCATIONS) { if (plandoLogData.size() > 0) { - UIWidgets::Combobox("Filter by Area:##AreaFilter", &selectedArea, rcAreaNameMap, UIWidgets::ComboboxOptions().Color(THEME_COLOR).LabelPosition(UIWidgets::LabelPositions::Near).ComponentAlignment(UIWidgets::ComponentAlignments::Right)); + UIWidgets::Combobox("Filter by Area:##AreaFilter", &selectedArea, rcAreaNameMap, + UIWidgets::ComboboxOptions() + .Color(THEME_COLOR) + .LabelPosition(UIWidgets::LabelPositions::Near) + .ComponentAlignment(UIWidgets::ComponentAlignments::Right)); ImGui::SameLine(); - if (UIWidgets::Button("Empty All Rewards", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline).Padding(ImVec2(10.f, 6.f)))) { + if (UIWidgets::Button("Empty All Rewards", UIWidgets::ButtonOptions() + .Color(THEME_COLOR) + .Size(UIWidgets::Sizes::Inline) + .Padding(ImVec2(10.f, 6.f)))) { PlandomizerRemoveAllItems(); } } @@ -1056,12 +1073,20 @@ void PlandomizerDrawHintsWindow() { } ImGui::Text("New Hint: "); ImGui::SameLine(); - if (UIWidgets::Button(randomizeButton.c_str(), UIWidgets::ButtonOptions().Color(THEME_COLOR).Padding(ImVec2(10.f, 6.f)).Size(UIWidgets::Sizes::Inline).Tooltip("Randomize Hint"))) { + if (UIWidgets::Button(randomizeButton.c_str(), UIWidgets::ButtonOptions() + .Color(THEME_COLOR) + .Padding(ImVec2(10.f, 6.f)) + .Size(UIWidgets::Sizes::Inline) + .Tooltip("Randomize Hint"))) { PlandomizerRandomizeHint(HINT_SINGLE, index); } ImGui::SameLine(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x - 10); - if (UIWidgets::InputString("##HintMessage", &hintInputText, UIWidgets::InputOptions().Color(THEME_COLOR).LabelPosition(UIWidgets::LabelPositions::None).Tooltip(plandomizerHintsTooltip().c_str()))) { + if (UIWidgets::InputString("##HintMessage", &hintInputText, + UIWidgets::InputOptions() + .Color(THEME_COLOR) + .LabelPosition(UIWidgets::LabelPositions::None) + .Tooltip(plandomizerHintsTooltip().c_str()))) { plandoHintData[index].hintText = hintInputText.c_str(); } index++; @@ -1079,7 +1104,8 @@ void PlandomizerDrawLocationsWindow(RandomizerCheckArea rcArea) { if (ImGui::BeginTable("Locations Window", 4, ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_ScrollY)) { ImGui::TableSetupColumn("Spoiler Log Check Name", ImGuiTableColumnFlags_WidthFixed, 250.0f); ImGui::TableSetupColumn("Spoiler Log Reward", ImGuiTableColumnFlags_WidthFixed, 190.0f); - ImGui::TableSetupColumn("New Reward", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHeaderLabel, 34.0f); + ImGui::TableSetupColumn("New Reward", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHeaderLabel, + 34.0f); ImGui::TableSetupColumn("Additional Options"); ImGui::TableSetupScrollFreeze(0, 1); ImGui::TableHeadersRow(); @@ -1097,8 +1123,7 @@ void PlandomizerDrawLocationsWindow(RandomizerCheckArea rcArea) { if (plandoLogData[index].checkRewardItem.GetRandomizerGet() == RG_ICE_TRAP) { ImGui::TableNextColumn(); PlandomizerDrawIceTrapSetup(index); - } - else if (spoilerData.shopPrice != -1) { + } else if (spoilerData.shopPrice != -1) { ImGui::TableNextColumn(); ImGui::BeginTable("Shops", 1, ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersInner); ImGui::TableSetupColumn("Shop Price"); @@ -1106,8 +1131,7 @@ void PlandomizerDrawLocationsWindow(RandomizerCheckArea rcArea) { ImGui::TableNextColumn(); PlandomizerDrawShopSlider(index); ImGui::EndTable(); - } - else { + } else { ImGui::TableNextColumn(); } } @@ -1145,15 +1169,25 @@ void PlandomizerWindow::DrawElement() { } void PlandomizerWindow::InitElement() { - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_RUPEE_GRAYSCALE", gRupeeCounterIconTex, ImVec4(1, 1, 1, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_HEART_GRAYSCALE", gHeartFullTex, ImVec4(0.87f, 0.10f, 0.10f, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_SEEDS", gItemIconDekuSeedsTex, ImVec4( 1, 1, 1, 1 )); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_ARROWS_SMALL", gDropArrows1Tex, ImVec4( 1, 1, 1, 1 )); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_ARROWS_MEDIUM", gDropArrows2Tex, ImVec4( 1, 1, 1, 1 )); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_ARROWS_LARGE", gDropArrows3Tex, ImVec4( 1, 1, 1, 1 )); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_ICE_TRAP", gMagicArrowEquipEffectTex, ImVec4( 1, 1, 1, 1 )); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("HASH_ARROW_UP", gEmptyCDownArrowTex, ImVec4( 1, 1, 1, 1 )); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("HASH_ARROW_DWN", gEmptyCDownArrowTex, ImVec4( 1, 1, 1, 1 )); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_RUPEE_GRAYSCALE", gRupeeCounterIconTex, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_HEART_GRAYSCALE", gHeartFullTex, + ImVec4(0.87f, 0.10f, 0.10f, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_SEEDS", gItemIconDekuSeedsTex, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_ARROWS_SMALL", gDropArrows1Tex, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_ARROWS_MEDIUM", gDropArrows2Tex, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_ARROWS_LARGE", gDropArrows3Tex, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("ITEM_ICE_TRAP", gMagicArrowEquipEffectTex, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("HASH_ARROW_UP", gEmptyCDownArrowTex, + ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("HASH_ARROW_DWN", gEmptyCDownArrowTex, + ImVec4(1, 1, 1, 1)); Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("BOSS_SOUL", gBossSoulTex, ImVec4(1, 1, 1, 1)); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("TRIFORCE_PIECE", gTriforcePieceTex, ImVec4(1, 1, 1, 1)); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture("TRIFORCE_PIECE", gTriforcePieceTex, + ImVec4(1, 1, 1, 1)); } diff --git a/soh/soh/Enhancements/randomizer/Plandomizer.h b/soh/soh/Enhancements/randomizer/Plandomizer.h index 1b7996ce4..0305beb0e 100644 --- a/soh/soh/Enhancements/randomizer/Plandomizer.h +++ b/soh/soh/Enhancements/randomizer/Plandomizer.h @@ -41,7 +41,7 @@ typedef struct { typedef enum PlandoTabs { TAB_HINTS, - TAB_LOCATIONS + TAB_LOCATIONS, } PlandoTabs; typedef enum PlandoHints { @@ -49,4 +49,4 @@ typedef enum PlandoHints { HINT_ALL, } PlandoHints; -#endif \ No newline at end of file +#endif diff --git a/soh/soh/Enhancements/randomizer/ShuffleCows.cpp b/soh/soh/Enhancements/randomizer/ShuffleCows.cpp index 5fc86f76d..203981133 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCows.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCows.cpp @@ -38,7 +38,8 @@ void RegisterShuffleCows() { 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); + 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); @@ -59,6 +60,11 @@ void RegisterShuffleCows() { static RegisterShipInitFunc initFunc(RegisterShuffleCows, { "IS_RANDO" }); void Rando::StaticData::RegisterCowLocations() { + static bool registered = false; + if (registered) + return; + registered = true; + // clang-format off 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)); @@ -69,6 +75,8 @@ void Rando::StaticData::RegisterCowLocations() { 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)); + + // clang-format-on } -static RegisterShipInitFunc registerFunc(Rando::StaticData::RegisterCowLocations); \ No newline at end of file +static RegisterShipInitFunc registerFunc(Rando::StaticData::RegisterCowLocations); diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp new file mode 100644 index 000000000..3cb341980 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -0,0 +1,568 @@ +#include "ShuffleCrates.h" +#include "soh_assets.h" +#include "static_data.h" +#include +#include "global.h" + +extern "C" { +#include "variables.h" +#include "overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h" +#include "objects/object_kibako2/object_kibako2.h" +#include "overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h" +#include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" +#include "soh/Enhancements/enhancementTypes.h" +#include "soh/ResourceManagerHelpers.h" +extern PlayState* gPlayState; +} + +#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).Get() + +extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); + +extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { + GetItemCategory getItemCategory; + auto crateActor = ((ObjKibako2*)thisx); + int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); + + int isVanilla = + csmc == CSMC_DISABLED || csmc == CSMC_SIZE || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); + + if (isVanilla) { + Gfx_DrawDListOpa(play, (Gfx*)gLargeRandoCrateDL); + return; + } + + GetItemEntry crateItem = + Rando::Context::GetInstance()->GetFinalGIEntry(crateActor->crateIdentity.randomizerCheck, true, GI_NONE); + getItemCategory = crateItem.getItemCategory; + + // If they have bombchus, don't consider the bombchu item major + if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU && + ((crateItem.modIndex == MOD_RANDOMIZER && crateItem.getItemId == RG_PROGRESSIVE_BOMBCHUS) || + (crateItem.modIndex == MOD_NONE && + (crateItem.getItemId == GI_BOMBCHUS_5 || crateItem.getItemId == GI_BOMBCHUS_10 || + crateItem.getItemId == GI_BOMBCHUS_20)))) { + getItemCategory = ITEM_CATEGORY_JUNK; + // If it's a bottle and they already have one, consider the item lesser + } else if ((crateItem.modIndex == MOD_RANDOMIZER && crateItem.getItemId >= RG_BOTTLE_WITH_RED_POTION && + crateItem.getItemId <= RG_BOTTLE_WITH_POE) || + (crateItem.modIndex == MOD_NONE && + (crateItem.getItemId == GI_BOTTLE || crateItem.getItemId == GI_MILK_BOTTLE))) { + if (gSaveContext.inventory.items[SLOT_BOTTLE_1] != ITEM_NONE) { + getItemCategory = ITEM_CATEGORY_LESSER; + } + } + + // Change texture + switch (getItemCategory) { + case ITEM_CATEGORY_MAJOR: + Gfx_DrawDListOpa(play, (Gfx*)gLargeMajorCrateDL); + break; + case ITEM_CATEGORY_SKULLTULA_TOKEN: + Gfx_DrawDListOpa(play, (Gfx*)gLargeTokenCrateDL); + break; + case ITEM_CATEGORY_SMALL_KEY: + Gfx_DrawDListOpa(play, (Gfx*)gLargeSmallKeyCrateDL); + break; + case ITEM_CATEGORY_BOSS_KEY: + Gfx_DrawDListOpa(play, (Gfx*)gLargeBossKeyCrateDL); + break; + case ITEM_CATEGORY_LESSER: + switch (crateItem.itemId) { + case ITEM_HEART_PIECE: + case ITEM_HEART_PIECE_2: + case ITEM_HEART_CONTAINER: + Gfx_DrawDListOpa(play, (Gfx*)gLargeHeartCrateDL); + break; + default: + Gfx_DrawDListOpa(play, (Gfx*)gLargeMinorCrateDL); + break; + } + break; + case ITEM_CATEGORY_JUNK: + default: + Gfx_DrawDListOpa(play, (Gfx*)gLargeJunkCrateDL); + break; + } +} + +extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { + GetItemCategory getItemCategory; + auto smallCrateActor = ((ObjKibako*)thisx); + int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); + + int isVanilla = + csmc == CSMC_DISABLED || csmc == CSMC_SIZE || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); + + if (isVanilla) { + Gfx_DrawDListOpa(play, (Gfx*)gSmallRandoCrateDL); + return; + } + + GetItemEntry smallCrateItem = Rando::Context::GetInstance()->GetFinalGIEntry( + smallCrateActor->smallCrateIdentity.randomizerCheck, true, GI_NONE); + getItemCategory = smallCrateItem.getItemCategory; + + // If they have bombchus, don't consider the bombchu item major + if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU && + ((smallCrateItem.modIndex == MOD_RANDOMIZER && smallCrateItem.getItemId == RG_PROGRESSIVE_BOMBCHUS) || + (smallCrateItem.modIndex == MOD_NONE && + (smallCrateItem.getItemId == GI_BOMBCHUS_5 || smallCrateItem.getItemId == GI_BOMBCHUS_10 || + smallCrateItem.getItemId == GI_BOMBCHUS_20)))) { + getItemCategory = ITEM_CATEGORY_JUNK; + // If it's a bottle and they already have one, consider the item lesser + } else if ((smallCrateItem.modIndex == MOD_RANDOMIZER && smallCrateItem.getItemId >= RG_BOTTLE_WITH_RED_POTION && + smallCrateItem.getItemId <= RG_BOTTLE_WITH_POE) || + (smallCrateItem.modIndex == MOD_NONE && + (smallCrateItem.getItemId == GI_BOTTLE || smallCrateItem.getItemId == GI_MILK_BOTTLE))) { + if (gSaveContext.inventory.items[SLOT_BOTTLE_1] != ITEM_NONE) { + getItemCategory = ITEM_CATEGORY_LESSER; + } + } + + // Change texture + switch (getItemCategory) { + case ITEM_CATEGORY_MAJOR: + Gfx_DrawDListOpa(play, (Gfx*)gSmallMajorCrateDL); + break; + case ITEM_CATEGORY_SKULLTULA_TOKEN: + Gfx_DrawDListOpa(play, (Gfx*)gSmallTokenCrateDL); + break; + case ITEM_CATEGORY_SMALL_KEY: + Gfx_DrawDListOpa(play, (Gfx*)gSmallSmallKeyCrateDL); + break; + case ITEM_CATEGORY_BOSS_KEY: + Gfx_DrawDListOpa(play, (Gfx*)gSmallBossKeyCrateDL); + break; + case ITEM_CATEGORY_LESSER: + switch (smallCrateItem.itemId) { + case ITEM_HEART_PIECE: + case ITEM_HEART_PIECE_2: + case ITEM_HEART_CONTAINER: + Gfx_DrawDListOpa(play, (Gfx*)gSmallHeartCrateDL); + break; + default: + Gfx_DrawDListOpa(play, (Gfx*)gSmallMinorCrateDL); + break; + } + break; + case ITEM_CATEGORY_JUNK: + default: + Gfx_DrawDListOpa(play, (Gfx*)gSmallJunkCrateDL); + break; + } +} + +uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) { + RandomizerCheck rc = crateActor->crateIdentity.randomizerCheck; + uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); + uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).Get(); + + // Don't pull randomized item if crate isn't randomized or is already checked + if (!IS_RANDO || (crateSetting == RO_SHUFFLE_CRATES_OVERWORLD && isDungeon) || + (crateSetting == RO_SHUFFLE_CRATES_DUNGEONS && !isDungeon) || + Flags_GetRandomizerInf(crateActor->crateIdentity.randomizerInf) || + crateActor->crateIdentity.randomizerCheck == RC_UNKNOWN_CHECK) { + return false; + } else { + return true; + } +} + +uint8_t ObjKibako_RandomizerHoldsItem(ObjKibako* smallCrateActor, PlayState* play) { + RandomizerCheck rc = smallCrateActor->smallCrateIdentity.randomizerCheck; + uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); + uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).Get(); + + // Don't pull randomized item if crate isn't randomized or is already checked + if (!IS_RANDO || (crateSetting == RO_SHUFFLE_CRATES_OVERWORLD && isDungeon) || + (crateSetting == RO_SHUFFLE_CRATES_DUNGEONS && !isDungeon) || + Flags_GetRandomizerInf(smallCrateActor->smallCrateIdentity.randomizerInf) || + smallCrateActor->smallCrateIdentity.randomizerCheck == RC_UNKNOWN_CHECK) { + return false; + } else { + return true; + } +} + +void ObjKibako2_RandomizerSpawnCollectible(ObjKibako2* crateActor, PlayState* play) { + EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &crateActor->dyna.actor.world.pos, ITEM00_SOH_DUMMY); + item00->randoInf = crateActor->crateIdentity.randomizerInf; + item00->itemEntry = + Rando::Context::GetInstance()->GetFinalGIEntry(crateActor->crateIdentity.randomizerCheck, true, GI_NONE); + item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; + item00->actor.velocity.y = 8.0f; + item00->actor.speedXZ = 2.0f; + item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); +} + +void ObjKibako_RandomizerSpawnCollectible(ObjKibako* smallCrateActor, PlayState* play) { + EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &smallCrateActor->actor.world.pos, ITEM00_SOH_DUMMY); + item00->randoInf = smallCrateActor->smallCrateIdentity.randomizerInf; + item00->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry( + smallCrateActor->smallCrateIdentity.randomizerCheck, true, GI_NONE); + item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; + item00->actor.velocity.y = 8.0f; + item00->actor.speedXZ = 2.0f; + item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); +} + +void ObjKibako2_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).Get(); + + // don't shuffle two OOB crates in GF and don't shuffle child GV/GF crates when not in no logic + if (actor->id != ACTOR_OBJ_KIBAKO2 || + (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4051 && + (s16)actor->world.pos.z == -3429) || + (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4571 && + (s16)actor->world.pos.z == -3429) || + (logicSetting != RO_LOGIC_NO_LOGIC && ((gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && + (s16)actor->world.pos.x == 3443 && (s16)actor->world.pos.z == -4876) || + (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && + (s16)actor->world.pos.x == -764 && (s16)actor->world.pos.z == 148) || + (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && + (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -125) || + (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && + (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -150) || + (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && + (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -90)))) + return; + + ObjKibako2* crateActor = static_cast(actorRef); + + crateActor->crateIdentity = OTRGlobals::Instance->gRandomizer->IdentifyCrate( + gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); +} + +void ObjKibako_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + + if (actor->id != ACTOR_OBJ_KIBAKO) + return; + + ObjKibako* smallCrateActor = static_cast(actorRef); + + smallCrateActor->smallCrateIdentity = OTRGlobals::Instance->gRandomizer->IdentifySmallCrate( + gPlayState->sceneNum, (s16)actor->home.pos.x, (s16)actor->home.pos.z); +} + +void RegisterShuffleCrates() { + bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_CRATES); + + COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO2, shouldRegister, ObjKibako2_RandomizerInit); + + COND_VB_SHOULD(VB_CRATE_SETUP_DRAW, shouldRegister, { + ObjKibako2* crateActor = va_arg(args, ObjKibako2*); + if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { + crateActor->dyna.actor.draw = (ActorFunc)ObjKibako2_RandomizerDraw; + *should = false; + } + }); + + COND_VB_SHOULD(VB_CRATE_DROP_ITEM, shouldRegister, { + ObjKibako2* crateActor = va_arg(args, ObjKibako2*); + if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { + ObjKibako2_RandomizerSpawnCollectible(crateActor, gPlayState); + *should = false; + } else { + *should = true; + } + }); + + COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO, shouldRegister, ObjKibako_RandomizerInit); + + COND_VB_SHOULD(VB_SMALL_CRATE_SETUP_DRAW, shouldRegister, { + ObjKibako* smallCrateActor = va_arg(args, ObjKibako*); + if (ObjKibako_RandomizerHoldsItem(smallCrateActor, gPlayState)) { + smallCrateActor->actor.draw = (ActorFunc)ObjKibako_RandomizerDraw; + *should = false; + } + }); + + COND_VB_SHOULD(VB_SMALL_CRATE_DROP_ITEM, shouldRegister, { + ObjKibako* smallCrateActor = va_arg(args, ObjKibako*); + if (ObjKibako_RandomizerHoldsItem(smallCrateActor, gPlayState)) { + ObjKibako_RandomizerSpawnCollectible(smallCrateActor, gPlayState); + *should = false; + } else { + *should = true; + } + }); +} + +void Rando::StaticData::RegisterCrateLocations() { + static bool registered = false; + if (registered) + return; + registered = true; + // clang-format off + // Overworld Crates + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check + locationTable[RC_GV_FREESTANDING_POH_CRATE] = Location::Crate(RC_GV_FREESTANDING_POH_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-350, 1480), "Freestanding PoH Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_FREESTANDING_POH_CRATE)); + locationTable[RC_GV_NEAR_COW_CRATE] = Location::Crate(RC_GV_NEAR_COW_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-449, 123), "Near Cow Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_NEAR_COW_CRATE)); + locationTable[RC_GF_ABOVE_JAIL_CRATE] = Location::Crate(RC_GF_ABOVE_JAIL_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(51, -2997), "Above Jail Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ABOVE_JAIL_CRATE)); + locationTable[RC_GF_OUTSIDE_CENTER_CRATE_1] = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(315, -1534), "Outside Center Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_1)); + locationTable[RC_GF_OUTSIDE_CENTER_CRATE_2] = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(315, -1594), "Outside Center Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_2)); + locationTable[RC_GF_OUTSIDE_CENTER_CRATE_3] = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(310, -1782), "Outside Center Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_3)); + locationTable[RC_GF_OUTSIDE_CENTER_CRATE_4] = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(310, -1842), "Outside Center Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_4)); + locationTable[RC_GF_OUTSIDE_LEFT_CRATE_1] = Location::Crate(RC_GF_OUTSIDE_LEFT_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-60, -2210), "Outside Left Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_LEFT_CRATE_1)); + locationTable[RC_GF_OUTSIDE_LEFT_CRATE_2] = Location::Crate(RC_GF_OUTSIDE_LEFT_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-120, -2210), "Outside Left Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_LEFT_CRATE_2)); + locationTable[RC_GF_ARCHERY_RANGE_CRATE_2] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -1780), "Archery Range Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_2)); + locationTable[RC_GF_ARCHERY_RANGE_CRATE_3] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2020), "Archery Range Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_3)); + locationTable[RC_GF_ARCHERY_RANGE_CRATE_4] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2260), "Archery Range Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_4)); + locationTable[RC_GF_ARCHERY_RANGE_CRATE_1] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -1540), "Archery Range Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_1)); + locationTable[RC_GF_ARCHERY_RANGE_CRATE_5] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_5, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2500), "Archery Range Crate 5", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_5)); + locationTable[RC_GF_ARCHERY_RANGE_CRATE_6] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_6, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2740), "Archery Range Crate 6", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_6)); + locationTable[RC_GF_ARCHERY_RANGE_CRATE_7] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_7, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2980), "Archery Range Crate 7", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_7)); + locationTable[RC_GF_ARCHERY_START_CRATE_1] = Location::Crate(RC_GF_ARCHERY_START_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3727, -243), "Near Archery Start Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_START_CRATE_1)); + locationTable[RC_GF_ARCHERY_START_CRATE_2] = Location::Crate(RC_GF_ARCHERY_START_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3667, -243), "Near Archery Start Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_START_CRATE_2)); + locationTable[RC_GF_ARCHERY_LEFT_END_CRATE_1] = Location::Crate(RC_GF_ARCHERY_LEFT_END_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3446, -4875), "Archery Left End Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CRATE_1)); + locationTable[RC_GF_ARCHERY_LEFT_END_CRATE_2] = Location::Crate(RC_GF_ARCHERY_LEFT_END_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3303, -5018), "Archery Left End Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CRATE_2)); + locationTable[RC_GF_ARCHERY_RIGHT_END_CRATE_1] = Location::Crate(RC_GF_ARCHERY_RIGHT_END_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3406, 414), "Archery Right End Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_1)); + locationTable[RC_GF_ARCHERY_RIGHT_END_CRATE_2] = Location::Crate(RC_GF_ARCHERY_RIGHT_END_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3330, 406), "Archery Right End Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2)); + locationTable[RC_GF_KITCHEN_CRATE_1] = Location::Crate(RC_GF_KITCHEN_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1144, -1251), "Kitchen Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_1)); + locationTable[RC_GF_KITCHEN_CRATE_2] = Location::Crate(RC_GF_KITCHEN_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1144, -1191), "Kitchen Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_2)); + locationTable[RC_GF_KITCHEN_CRATE_3] = Location::Crate(RC_GF_KITCHEN_CRATE_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1256, -847), "Kitchen Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_3)); + locationTable[RC_GF_KITCHEN_CRATE_4] = Location::Crate(RC_GF_KITCHEN_CRATE_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1256, -787), "Kitchen Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_4)); + locationTable[RC_GF_KITCHEN_CRATE_5] = Location::Crate(RC_GF_KITCHEN_CRATE_5, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1610, -624), "Kitchen Crate 5", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_5)); + locationTable[RC_GF_BREAK_ROOM_CRATE_1] = Location::Crate(RC_GF_BREAK_ROOM_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1260, -3155), "Break Room Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_1)); + locationTable[RC_GF_BREAK_ROOM_CRATE_4] = Location::Crate(RC_GF_BREAK_ROOM_CRATE_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1600, -3550), "Break Room Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_4)); + locationTable[RC_GF_BREAK_ROOM_CRATE_2] = Location::Crate(RC_GF_BREAK_ROOM_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1360, -3325), "Break Room Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_2)); + locationTable[RC_GF_BREAK_ROOM_CRATE_3] = Location::Crate(RC_GF_BREAK_ROOM_CRATE_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1600, -3502), "Break Room Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_3)); + locationTable[RC_GF_NORTH_F1_CARPENTER_CRATE] = Location::Crate(RC_GF_NORTH_F1_CARPENTER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-510, -2213), "North F1 Carpenter Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_CRATE)); + locationTable[RC_GF_NORTH_F3_CARPENTER_CRATE] = Location::Crate(RC_GF_NORTH_F3_CARPENTER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1090, -2210), "North F3 Carpenter Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F3_CARPENTER_CRATE)); + locationTable[RC_GF_SOUTH_F2_CARPENTER_CRATE_1] = Location::Crate(RC_GF_SOUTH_F2_CARPENTER_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-49, 11), "South F2 Carpenter Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_1)); + locationTable[RC_GF_SOUTH_F2_CARPENTER_CRATE_2] = Location::Crate(RC_GF_SOUTH_F2_CARPENTER_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(11, 11), "South F2 Carpenter Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2)); + locationTable[RC_HW_BEFORE_QUICKSAND_CRATE] = Location::Crate(RC_HW_BEFORE_QUICKSAND_CRATE, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3832, 2840), "Before Quicksand Crate", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_BEFORE_QUICKSAND_CRATE)); + locationTable[RC_HW_AFTER_QUICKSAND_CRATE_1] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_1, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3235, 2313), "After Quicksand Crate 1", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_1)); + locationTable[RC_HW_AFTER_QUICKSAND_CRATE_2] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_2, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3125, 2459), "After Quicksand Crate 2", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_2)); + locationTable[RC_HW_AFTER_QUICKSAND_CRATE_3] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_3, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3026, 2631), "After Quicksand Crate 3", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_3)); + locationTable[RC_HW_NEAR_COLOSSUS_CRATE] = Location::Crate(RC_HW_NEAR_COLOSSUS_CRATE, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(-1531, -976), "Near Colossus Crate", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_NEAR_COLOSSUS_CRATE)); + locationTable[RC_MK_NEAR_BAZAAR_CRATE_1] = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(490, 338), "Near Bazaar Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_1)); + locationTable[RC_MK_NEAR_BAZAAR_CRATE_2] = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(490, 132), "Near Bazaar Crate 2", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_2)); + locationTable[RC_MK_SHOOTING_GALLERY_CRATE_1] = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-150, -576), "Shooting Gallery Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_1)); + locationTable[RC_MK_SHOOTING_GALLERY_CRATE_2] = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-90, -576), "Shooting Gallery Crate 2", RHT_CRATE_MARKET, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_2)); + locationTable[RC_MK_LOST_DOG_HOUSE_CRATE] = Location::Crate(RC_MK_LOST_DOG_HOUSE_CRATE, RCQUEST_BOTH, RCAREA_MARKET, SCENE_DOG_LADY_HOUSE, TWO_ACTOR_PARAMS(176, 170), "Lost Dog House Crate", RHT_CRATE_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_LOST_DOG_HOUSE_CRATE)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_1] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(76, -210), "Guard House Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_1)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_2] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(28, -210), "Guard House Crate 2", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_2)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_3] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 120), "Guard House Crate 3", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_3)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_4] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 168), "Guard House Crate 4", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_4)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_5] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 216), "Guard House Crate 5", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_5)); + locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1039, 10), "Near Open Grotto Adult Crate 1", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1)); + locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1099, 10), "Near Open Grotto Adult Crate 2", RHT_CRATE_KAKARIKO_VILLAGE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2)); + locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(506, -358), "Near Open Grotto Adult Crate 3", RHT_CRATE_KAKARIKO_VILLAGE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3)); + locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(483, -302), "Near Open Grotto Adult Crate 4", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4)); + locationTable[RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE] = Location::Crate(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(186, -758), "Near Potion Shop Adult Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_POTION_SHOP_ADULT_CRATE)); + locationTable[RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE] = Location::Crate(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(185, 776), "Near Shooting Gallery Adult Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE)); + locationTable[RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1] = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(92, 348), "Near Boarding House Adult Crate 1", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1)); + locationTable[RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(32, 348), "Near Boarding House Adult Crate 2", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2)); + locationTable[RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1] = Location::Crate(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-389, 1518), "Near Impas House Adult Crate 1", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1)); + locationTable[RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-389, 1470), "Near Impas House Adult Crate 2", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2)); + locationTable[RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1] = Location::Crate(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-433, -401), "Near Bazaar Adult Crate 1", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_1)); + locationTable[RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-489, -424), "Near Bazaar Adult Crate 2`", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_2)); + locationTable[RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE] = Location::Crate(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-724, 871), "Behind GS House Adult Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_BEHIND_GS_HOUSE_ADULT_CRATE)); + locationTable[RC_KAK_NEAR_GY_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_GY_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1732, 1366), "Near Graveyard Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GY_CHILD_CRATE)); + locationTable[RC_KAK_NEAR_WINDMILL_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1170, 601), "Near Windmill Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_WINDMILL_CHILD_CRATE)); + locationTable[RC_KAK_NEAR_FENCE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_FENCE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1170, 111), "Near Fence Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE)); + locationTable[RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-60, -46), "Near Boarding House Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE)); + locationTable[RC_KAK_NEAR_BAZAAR_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-636, -478), "Near Bazaar Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE)); + locationTable[RC_GRAVEYARD_CRATE] = Location::Crate(RC_GRAVEYARD_CRATE, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1050, -350), "Freestanding PoH Crate", RHT_CRATE_GRAVEYARD, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_CRATE)); + locationTable[RC_GC_MAZE_CRATE] = Location::Crate(RC_GC_MAZE_CRATE, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1124, -1339), "Maze Crate", RHT_CRATE_GORON_CITY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_CRATE)); + locationTable[RC_DMC_CRATE] = Location::Crate(RC_DMC_CRATE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-950, 1892), "Crate", RHT_CRATE_DEATH_MOUNTAIN_CRATER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CRATE)); + locationTable[RC_LLR_NEAR_TREE_CRATE] = Location::Crate(RC_LLR_NEAR_TREE_CRATE, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(1160, -2376), "Near Tree Crate", RHT_CRATE_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_NEAR_TREE_CRATE)); + locationTable[RC_LH_LAB_CRATE] = Location::Crate(RC_LH_LAB_CRATE, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(90, -119), "Lab Crate", RHT_CRATE_LAKESIDE_LABORATORY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_CRATE)); + + // No Logic Crates + locationTable[RC_GV_CRATE_BRIDGE_1] = Location::NLCrate(RC_GV_CRATE_BRIDGE_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-764, 148), "Near Bridge Crate 1", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_1)); + locationTable[RC_GV_CRATE_BRIDGE_2] = Location::NLCrate(RC_GV_CRATE_BRIDGE_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -125), "Near Bridge Crate 2", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_2)); + locationTable[RC_GV_CRATE_BRIDGE_3] = Location::NLCrate(RC_GV_CRATE_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -150), "Near Bridge Crate 3", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_3)); + locationTable[RC_GV_CRATE_BRIDGE_4] = Location::NLCrate(RC_GV_CRATE_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -90), "Near Bridge Crate 4", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_4)); + locationTable[RC_GF_ARCHERY_LEFT_END_CHILD_CRATE] = Location::NLCrate(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3443, -4876), "Archery Left End Child Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE)); + + // MQ Crates + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check + locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -62), "MQ Slingshot Room Crate 1", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -2), "MQ Slingshot Room Crate 2", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1886, -744), "MQ Poe Room Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1826, -744), "MQ Poe Room Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1391), "MQ Poe Room Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1451), "MQ Poe Room Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1824), "MQ Poe Room Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1884), "MQ Poe Room Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1161), "MQ Poe Room Crate 7", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1221), "MQ Poe Room Crate 8", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1730, -1836), "MQ Staircase Lower Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2190, -1835), "MQ Staircase Lower Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1510, -1837), "MQ Staircase Upper Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1511, -1084), "MQ Staircase Upper Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2410, -1084), "MQ Staircase Upper Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "MQ Staircase Upper Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3191, -897), "MQ Two Flames Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2776, -810), "MQ Two Flames Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1714), "MQ Larvae Room Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1774), "MQ Larvae Room Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1871, -1976), "MQ Larvae Room Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1811, -1976), "MQ Larvae Room Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1721), "MQ Larvae Room Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1781), "MQ Larvae Room Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 769), "MQ Outside Boss Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 709), "MQ Outside Boss Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1130, -654), "MQ Outside Boss Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1211, -775), "MQ Outside Boss Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -417), "MQ Outside Boss Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -534), "MQ Outside Boss Crate 6", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2249, -56), "MQ Shortcut Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2189, -56), "MQ Shortcut Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2150, 55), "MQ Shortcut Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2135, -62), "MQ Shortcut Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2090, 55), "MQ Shortcut Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2030, 55), "MQ Shortcut Crate 6", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2230, 1147), "MQ Lizalfos Maze Lower Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2230, 1195), "MQ Lizalfos Maze Lower Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2124, 1154), "MQ Lizalfos Maze Lower Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1817, 1330), "MQ Lizalfos Maze Upper Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1710, 1288), "MQ Lizalfos Maze Upper Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1710, 1336), "MQ Lizalfos Maze Upper Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1407, -756), "MQ Lava Torch Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(384, 351), "MQ Lava Torch Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1409, -1176), "MQ Lava Torch Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(999, -402), "MQ Lava Torch Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-150, -336), "MQ Central Pillar Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-210, -336), "MQ Central Pillar Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(299, 485), "MQ Central Pillar Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 486), "MQ Central Pillar Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(222, 204), "MQ Central Pillar Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(455, 425), "MQ Central Pillar Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(455, 365), "MQ Central Pillar Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 426), "MQ Central Pillar Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 366), "MQ Central Pillar Lower Crate 7", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(162, 204), "MQ Central Pillar Lower Crate 8", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(31, 636), "MQ Central Pillar Lower Crate 9", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(151, 636), "MQ Central Pillar Lower Crate 10", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(102, 204), "MQ Central Pillar Lower Crate 11", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(91, 636), "MQ Central Pillar Lower Crate 12", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(25, 522), "MQ Central Pillar Lower Crate 13", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(25, 582), "MQ Central Pillar Lower Crate 14", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(698, 399), "MQ Lizalfos Hallway Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(437, 576), "MQ Lizalfos Hallway Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(270, 504), "MQ Lizalfos Hallway Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(686, 1016), "MQ Lizalfos Hallway Room Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(795, 870), "MQ Lizalfos Hallway Room Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(795, 810), "MQ Lizalfos Hallway Room Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(524, 839), "MQ Lizalfos Hallway Room Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(525, 954), "MQ Lizalfos Hallway Room Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(816, 570), "MQ Lizalfos Hallway Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(816, 510), "MQ Lizalfos Hallway Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -712), "MQ Storage Room A Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -821), "MQ Storage Room A Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -922), "MQ Storage Room A Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1434, -1036), "MQ Storage Room A Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1374, -1036), "MQ Storage Room A Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1265, -1036), "MQ Storage Room A Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1205, -1036), "MQ Storage Room A Crate 7", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-892, -91), "MQ GS Storage Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1149, 173), "MQ GS Storage Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1157, -221), "MQ GS Storage Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-945, -315), "MQ GS Storage Room Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -141), "MQ GS Storage Room Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1103, -315), "MQ GS Storage Room Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-884, 65), "MQ GS Storage Room Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, 56), "MQ GS Storage Room Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1918), "MQ Dragon Room Torches Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1978), "MQ Dragon Room Torches Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1718, -2006), "MQ Dragon Room Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1778, -2006), "MQ Dragon Room Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1912), "MQ Dragon Room Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1972), "MQ Dragon Room Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1092, -1926), "MQ Dragon Room Door Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1153, -1926), "MQ Dragon Room Door Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1257, -1567), "MQ BK Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1289, -1205), "MQ BK Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-985, -1333), "MQ BK Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1297, -1300), "MQ BK Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1069, -1402), "MQ BK Room Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-11, -2075), "MQ Whirlpool Front Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-371, -2077), "MQ Whirlpool Front Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-455, -2394), "MQ Whirlpool Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-498, -2661), "MQ Whirlpool Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(11, -2737), "MQ Whirlpool Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-251, -2731), "MQ Whirlpool Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-119, -2481), "MQ Whirlpool Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(126, -2485), "MQ Whirlpool Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-7, -3126), "MQ Whirlpool Behind Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-87, -3126), "MQ Whirlpool Behind Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-303, -3126), "MQ Whirlpool Behind Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-390, -3126), "MQ Whirlpool Behind Gate Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-397, -3818), "MQ Dodongo Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(30, -3215), "MQ Dodongo Room Hall Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-85, -3460), "MQ Dodongo Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-271, -3826), "MQ Dodongo Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(36, -3700), "MQ Dodongo Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1436, -2766), "MQ Storage Room B Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1125, -2866), "MQ Storage Room B Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1125, -2926), "MQ Storage Room B Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1435, -2935), "MQ Storage Room B Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1436, -2875), "MQ Storage Room B Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-994, 744), "MQ Triple Torch Room Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-991, 976), "MQ Triple Torch Room Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1511, 975), "MQ Triple Torch Room Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 792), "MQ Triple Torch Room Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 975), "MQ Triple Torch Room Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 744), "MQ Triple Torch Room Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2183, 977), "MQ Triple Torch Room Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2260, 744), "MQ Triple Torch Room Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, 743), "MQ Triple Torch Room Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(510, -1558), "MQ Statue Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(570, -1558), "MQ Statue Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1138), "MQ Big Mirror Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1138), "MQ Big Mirror Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1186), "MQ Big Mirror Crate 3", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1186), "MQ Big Mirror Crate 4", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4)); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE)); + + // Small Crates + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check + locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-141, -1945), "Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1)); + locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-189, -1925), "Platform Room Small Crate 2", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2030, -1172), "After Hammer Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2072, -1135), "After Hammer Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-971, -940), "Before Child Climb Small Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1151, -939), "Before Child Climb Small Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-512, -4592), "MQ Triple Hallway Small Crate 1", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-666, -4671), "MQ Triple Hallway Small Crate 2", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1599, -1322), "MQ Frozen Eye Switch Small Crate 1", RHT_CRATE_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2364, -873), "MQ Frozen Eye Switch Small Crate 2", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2312, -874), "MQ Frozen Eye Switch Small Crate 3", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1290), "MQ Lizalfos Maze Upper Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1332), "MQ Lizalfos Maze Upper Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(460, 370), "MQ Lava Torch Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1405, -975), "MQ Lava Torch Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(685, 183), "MQ Lava Torch Small Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Small Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1267, 200), "MQ Lava Torch Small Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1952), "MQ Dragon Room Torches Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1911), "MQ Dragon Room Torches Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1991), "MQ Dragon Room Torches Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1470, -622), "MQ Storage Room A Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1341, -621), "MQ Storage Room A Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1393, -621), "MQ Storage Room A Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1284, -621), "MQ Storage Room A Small Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1166, 97), "MQ GS Storage Room Lower Small Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-992, 382), "MQ GS Storage Room Upper Small Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(365, 52), "MQ Truth Spinner Small Crate 1", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -62), "MQ Truth Spinner Small Crate 2", RHT_CRATE_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -7), "MQ Truth Spinner Small Crate 3", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(366, 114), "MQ Truth Spinner Small Crate 4", RHT_CRATE_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-271, -983), "MQ Statue Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1382, 190), "MQ Beamos Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)); + + // clang-format on +} + +static RegisterShipInitFunc initFunc(RegisterShuffleCrates, { "IS_RANDO" }); +static RegisterShipInitFunc locFunc(Rando::StaticData::RegisterCrateLocations); diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.h b/soh/soh/Enhancements/randomizer/ShuffleCrates.h new file mode 100644 index 000000000..eb0325f89 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.h @@ -0,0 +1,16 @@ +#ifndef ShuffleCrates_H +#define ShuffleCrates_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +void ObjKibako2_RandomizerInit(void* actorRef); +void ObjKibako_RandomizerInit(void* actorRef); +#ifdef __cplusplus +}; +#endif + +#endif // ShuffleCrates_H diff --git a/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp b/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp index 441591aa0..ea34d1414 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleFairies.cpp @@ -52,14 +52,16 @@ FairyIdentity ShuffleFairies_GetFairyIdentity(int32_t params) { sceneNum = SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY; } - Rando::Location* location = OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(ACTOR_EN_ELF, sceneNum, params); + Rando::Location* location = + OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(ACTOR_EN_ELF, sceneNum, params); if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { LUSLOG_WARN("FairyGetIdentity did not receive a valid RC value (%d).", location->GetRandomizerCheck()); assert(false); } else { fairyIdentity.randomizerInf = static_cast(location->GetCollectionCheck().flag); - fairyIdentity.itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(location->GetRandomizerCheck(), true, GI_FAIRY); + fairyIdentity.itemEntry = + Rando::Context::GetInstance()->GetFinalGIEntry(location->GetRandomizerCheck(), true, GI_FAIRY); } return fairyIdentity; @@ -91,44 +93,42 @@ void ShuffleFairies_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, if (enElf->sohFairyIdentity.randomizerInf && enElf->sohFairyIdentity.randomizerInf != RAND_INF_MAX) { Flags_SetRandomizerInf(enElf->sohFairyIdentity.randomizerInf); } - // Spawn fairies in fairy fountains + // Spawn fairies in fairy fountains } else if (id == VB_SPAWN_FOUNTAIN_FAIRIES) { bool fairySpawned = false; s16 grottoId = (gPlayState->sceneNum == SCENE_FAIRYS_FOUNTAIN) ? Grotto_CurrentGrotto() : 0; for (s16 index = 0; index < 8; index++) { int32_t params = (grottoId << 8) | index; - if (ShuffleFairies_SpawnFairy(actor->world.pos.x, actor->world.pos.y, actor->world.pos.z, - params)) { + if (ShuffleFairies_SpawnFairy(actor->world.pos.x, actor->world.pos.y, actor->world.pos.z, params)) { fairySpawned = true; } } if (fairySpawned) { *should = false; } - // Spawn 3 fairies when playing Song of Storms next to a planted bean + // Spawn 3 fairies when playing Song of Storms next to a planted bean } else if (id == VB_SPAWN_BEAN_STALK_FAIRIES) { ObjBean* objBean = (ObjBean*)(actor); bool fairySpawned = false; for (s16 index = 0; index < 3; index++) { int32_t params = ((objBean->dyna.actor.params & 0x3F) << 8) | index; if (ShuffleFairies_SpawnFairy(objBean->dyna.actor.world.pos.x, objBean->dyna.actor.world.pos.y, - objBean->dyna.actor.world.pos.z, - params)) { + objBean->dyna.actor.world.pos.z, params)) { fairySpawned = true; } } if (fairySpawned) { *should = false; } - // Spawn a fairy from a ShotSun when playing the right song near it + // Spawn a fairy from a ShotSun when playing the right song near it } else if (id == VB_SPAWN_SONG_FAIRY) { ShotSun* shotSun = (ShotSun*)(actor); if (ShuffleFairies_SpawnFairy(shotSun->actor.world.pos.x, shotSun->actor.world.pos.y, - shotSun->actor.world.pos.z, - TWO_ACTOR_PARAMS(0x1000, (int32_t)shotSun->actor.world.pos.z))) { + shotSun->actor.world.pos.z, + TWO_ACTOR_PARAMS(0x1000, (int32_t)shotSun->actor.world.pos.z))) { *should = false; } - // Handle playing both misc songs and song of storms in front of a gossip stone. + // Handle playing both misc songs and song of storms in front of a gossip stone. } else if (id == VB_SPAWN_GOSSIP_STONE_FAIRY) { EnGs* gossipStone = (EnGs*)(actor); @@ -136,11 +136,9 @@ void ShuffleFairies_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, // Otherwise fall back to vanilla behaviour. if (gPlayState->msgCtx.ocarinaMode == OCARINA_MODE_04 && (gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_LULLABY || - gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_SARIAS || - gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_EPONAS || - gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_SUNS || - gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_TIME || - gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_STORMS)) { + gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_SARIAS || gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_EPONAS || + gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_SUNS || gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_TIME || + gPlayState->msgCtx.unk_E3F2 == OCARINA_SONG_STORMS)) { int32_t params = (gPlayState->sceneNum == SCENE_GROTTOS) ? Grotto_CurrentGrotto() : 0; // Distinguish storms fairies from the normal song fairies @@ -159,7 +157,7 @@ void ShuffleFairies_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, FairyIdentity fairyIdentity = ShuffleFairies_GetFairyIdentity(params); if (!ShuffleFairies_FairyExists(fairyIdentity)) { if (ShuffleFairies_SpawnFairy(gossipStone->actor.world.pos.x, gossipStone->actor.world.pos.y, - gossipStone->actor.world.pos.z, params)) { + gossipStone->actor.world.pos.z, params)) { Audio_PlayActorSound2(&gossipStone->actor, NA_SE_EV_BUTTERFRY_TO_FAIRY); // Set vanilla check for fairy spawned so it doesn't spawn the vanilla fairy afterwards as well. gossipStone->unk_19D = 0; @@ -175,7 +173,8 @@ void ShuffleFairies_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, uint32_t onVanillaBehaviorHook = 0; void ShuffleFairies_RegisterHooks() { - onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleFairies_OnVanillaBehaviorHandler); + onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook( + ShuffleFairies_OnVanillaBehaviorHandler); } void ShuffleFairies_UnregisterHooks() { @@ -185,46 +184,51 @@ void ShuffleFairies_UnregisterHooks() { } 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", 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", RHT_GF_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAIRY_GROTTO_FAIRY_8)); + static bool registered = false; + if (registered) + return; + registered = true; + // clang-format off + 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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, "Fairy 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", 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", RHT_GRAVEYARD_SHIELD_GRAVE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_SHIELD_GRAVE_FAIRY_2)); @@ -366,8 +370,8 @@ void Rando::StaticData::RegisterFairyLocations() { 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", 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", 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", 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", 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", RHT_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_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), "Tunnel Grotto 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), "Tunnel Grotto 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", 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", 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", RHT_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY)); @@ -375,13 +379,13 @@ void Rando::StaticData::RegisterFairyLocations() { 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", 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", 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", RHT_HF_FENCE_GROTTO_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_FENCE_GROTTO_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), "Deku Scrub Grotto 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", 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", 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", 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", 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", 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", RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_ROYAL_FAMILYS_TOMB_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), "Royal Family's Tomb 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", 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", RHT_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY)); @@ -404,6 +408,8 @@ void Rando::StaticData::RegisterFairyLocations() { 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", 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", 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", RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY)); + + // clang-format on } static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFairyLocations); diff --git a/soh/soh/Enhancements/randomizer/ShuffleFreestanding.cpp b/soh/soh/Enhancements/randomizer/ShuffleFreestanding.cpp index c35cab107..03fd33981 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleFreestanding.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleFreestanding.cpp @@ -20,17 +20,17 @@ void ShuffleFreestanding_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* sh } uint32_t params = TWO_ACTOR_PARAMS((int32_t)item00->actor.world.pos.x, (int32_t)item00->actor.world.pos.z); - Rando::Location* loc = OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(item00->actor.id, gPlayState->sceneNum, params); + Rando::Location* loc = + OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(item00->actor.id, gPlayState->sceneNum, params); uint8_t isDungeon = loc->IsDungeon(); - uint8_t freestandingSetting = - Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_FREESTANDING).Get(); + uint8_t freestandingSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_FREESTANDING).Get(); RandomizerCheck randomizerCheck = loc->GetRandomizerCheck(); bool checkObtained = Rando::Context::GetInstance()->GetItemLocation(randomizerCheck)->HasObtained(); - + // Don't change to randomized item if current freestanding item isn't shuffled or already obtained. if ((freestandingSetting == RO_SHUFFLE_FREESTANDING_OVERWORLD && isDungeon) || - (freestandingSetting == RO_SHUFFLE_FREESTANDING_DUNGEONS && !isDungeon) || - checkObtained || randomizerCheck == RC_UNKNOWN_CHECK) { + (freestandingSetting == RO_SHUFFLE_FREESTANDING_DUNGEONS && !isDungeon) || checkObtained || + randomizerCheck == RC_UNKNOWN_CHECK) { return; } @@ -45,6 +45,11 @@ void ShuffleFreestanding_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* sh } void Rando::StaticData::RegisterFreestandingLocations() { + static bool registered = false; + if (registered) + return; + registered = true; + // clang-format off 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)); @@ -275,6 +280,8 @@ void Rando::StaticData::RegisterFreestandingLocations() { 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)); + + // clang-format on } -static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFreestandingLocations); \ No newline at end of file +static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFreestandingLocations); diff --git a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp new file mode 100644 index 000000000..f318ad948 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp @@ -0,0 +1,523 @@ +#include "ShuffleGrass.h" +#include "soh_assets.h" +#include "static_data.h" +#include "soh/Enhancements/enhancementTypes.h" + +extern "C" { +#include "variables.h" +#include "overlays/actors/ovl_En_Kusa/z_en_kusa.h" +#include "objects/gameplay_field_keep/gameplay_field_keep.h" +#include "objects/object_kusa/object_kusa.h" +extern PlayState* gPlayState; +} + +#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).Get() + +extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); + +void DrawTypeOfGrass(EnKusa* grassActor, Gfx* bushDList, Gfx* grassDList, PlayState* play) { + // Actor params is -255 for regrowable grass. + if (grassActor->actor.params == -255) { + Gfx_DrawDListOpa(play, grassDList); + } else { + Gfx_DrawDListOpa(play, bushDList); + } +} + +extern "C" void EnKusa_RandomizerDraw(Actor* thisx, PlayState* play) { + // static Gfx* dLists[] = { (Gfx*)gRandoBushDL, (Gfx*)object_kusa_DL_000140, (Gfx*)object_kusa_DL_000140 }; + static Gfx* dLists[] = { (Gfx*)gRandoBushJunkDL, (Gfx*)gRandoCuttableGrassJunkDL, (Gfx*)gRandoCuttableGrassJunkDL }; + auto grassActor = ((EnKusa*)thisx); + + OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL_25Opa(play->state.gfxCtx); + + if (grassActor->grassIdentity.randomizerCheck != RC_MAX && + Flags_GetRandomizerInf(grassActor->grassIdentity.randomizerInf) == 0) { + int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + + if (csmc == CSMC_BOTH || csmc == CSMC_TEXTURE) { + auto itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(grassActor->grassIdentity.randomizerCheck, + true, GI_NONE); + GetItemCategory getItemCategory = itemEntry.getItemCategory; + + switch (getItemCategory) { + case ITEM_CATEGORY_JUNK: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushJunkDL, (Gfx*)gRandoCuttableGrassJunkDL, play); + break; + case ITEM_CATEGORY_LESSER: + switch (itemEntry.itemId) { + case ITEM_HEART_PIECE: + case ITEM_HEART_PIECE_2: + case ITEM_HEART_CONTAINER: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushHeartDL, (Gfx*)gRandoCuttableGrassHeartDL, + play); + break; + default: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushMinorDL, (Gfx*)gRandoCuttableGrassMinorDL, + play); + break; + } + break; + case ITEM_CATEGORY_BOSS_KEY: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushBossKeyDL, (Gfx*)gRandoCuttableGrassBossKeyDL, play); + break; + case ITEM_CATEGORY_SMALL_KEY: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushSmallKeyDL, (Gfx*)gRandoCuttableGrassSmallKeyDL, play); + break; + case ITEM_CATEGORY_SKULLTULA_TOKEN: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushTokenDL, (Gfx*)gRandoCuttableGrassTokenDL, play); + break; + case ITEM_CATEGORY_MAJOR: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushMajorDL, (Gfx*)gRandoCuttableGrassMajorDL, play); + break; + default: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushDL, (Gfx*)gRandoCuttableGrassDL, play); + break; + } + } else { + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushDL, (Gfx*)gRandoCuttableGrassDL, play); + } + } else if (grassActor->actor.flags & ACTOR_FLAG_GRASS_DESTROYED) { + Gfx_DrawDListOpa(play, (Gfx*)object_kusa_DL_0002E0); + } else { + Gfx_DrawDListOpa(play, dLists[thisx->params & 3]); + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +uint8_t EnKusa_RandomizerHoldsItem(EnKusa* grassActor, PlayState* play) { + if (grassActor->grassIdentity.randomizerCheck == RC_MAX) + return false; + + RandomizerCheck rc = grassActor->grassIdentity.randomizerCheck; + + uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); + uint8_t grassSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_GRASS).Get(); + + // Don't pull randomized item if grass isn't randomized or is already checked + if (!IS_RANDO || (grassSetting == RO_SHUFFLE_GRASS_OVERWORLD && isDungeon) || + (grassSetting == RO_SHUFFLE_GRASS_DUNGEONS && !isDungeon) || + Flags_GetRandomizerInf(grassActor->grassIdentity.randomizerInf) || + grassActor->grassIdentity.randomizerCheck == RC_UNKNOWN_CHECK) { + return false; + } else { + return true; + } +} + +void EnKusa_RandomizerSpawnCollectible(EnKusa* grassActor, PlayState* play) { + EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &grassActor->actor.world.pos, ITEM00_SOH_DUMMY); + item00->randoInf = grassActor->grassIdentity.randomizerInf; + item00->itemEntry = + Rando::Context::GetInstance()->GetFinalGIEntry(grassActor->grassIdentity.randomizerCheck, true, GI_NONE); + item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; + item00->actor.velocity.y = 8.0f; + item00->actor.speedXZ = 2.0f; + item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); +} + +void EnKusa_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + + if (actor->id != ACTOR_EN_KUSA) + return; + + EnKusa* grassActor = static_cast(actorRef); + s16 respawnData = gSaveContext.respawn[RESPAWN_MODE_RETURN].data & ((1 << 8) - 1); + + grassActor->grassIdentity = OTRGlobals::Instance->gRandomizer->IdentifyGrass( + gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z, respawnData, gPlayState->linkAgeOnLoad); +} + +void RegisterShuffleGrass() { + bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_GRASS); + + COND_ID_HOOK(OnActorInit, ACTOR_EN_KUSA, shouldRegister, EnKusa_RandomizerInit); + + COND_VB_SHOULD(VB_GRASS_SETUP_DRAW, shouldRegister, { + EnKusa* grassActor = va_arg(args, EnKusa*); + if (EnKusa_RandomizerHoldsItem(grassActor, gPlayState)) { + grassActor->actor.draw = (ActorFunc)EnKusa_RandomizerDraw; + *should = false; + } else { + *should = true; + } + }); + + COND_VB_SHOULD(VB_GRASS_DROP_ITEM, shouldRegister, { + EnKusa* grassActor = va_arg(args, EnKusa*); + if (EnKusa_RandomizerHoldsItem(grassActor, gPlayState)) { + EnKusa_RandomizerSpawnCollectible(grassActor, gPlayState); + grassActor->grassIdentity.randomizerCheck = RC_MAX; + grassActor->grassIdentity.randomizerInf = RAND_INF_MAX; + *should = false; + } else { + *should = true; + } + }); +} + +void Rando::StaticData::RegisterGrassLocations() { + static bool registered = false; + if (registered) + return; + registered = true; + // clang-format off + // Overworld Grass + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check + locationTable[RC_KF_CHILD_GRASS_1] = Location::Grass(RC_KF_CHILD_GRASS_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(678, 596), "Child Grass 1", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_1)); + locationTable[RC_KF_CHILD_GRASS_2] = Location::Grass(RC_KF_CHILD_GRASS_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(594, 542), "Child Grass 2", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_2)); + locationTable[RC_KF_CHILD_GRASS_3] = Location::Grass(RC_KF_CHILD_GRASS_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(572, 603), "Child Grass 3", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_3)); + locationTable[RC_KF_CHILD_GRASS_4] = Location::Grass(RC_KF_CHILD_GRASS_4, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(385, 643), "Child Grass 4", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_4)); + locationTable[RC_KF_CHILD_GRASS_5] = Location::Grass(RC_KF_CHILD_GRASS_5, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-498, 696), "Child Grass 5", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_5)); + locationTable[RC_KF_CHILD_GRASS_6] = Location::Grass(RC_KF_CHILD_GRASS_6, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-523, 771), "Child Grass 6", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_6)); + locationTable[RC_KF_CHILD_GRASS_7] = Location::Grass(RC_KF_CHILD_GRASS_7, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-612, 737), "Child Grass 7", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_7)); + locationTable[RC_KF_CHILD_GRASS_8] = Location::Grass(RC_KF_CHILD_GRASS_8, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-671, 671), "Child Grass 8", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_8)); + locationTable[RC_KF_CHILD_GRASS_9] = Location::Grass(RC_KF_CHILD_GRASS_9, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-748, 632), "Child Grass 9", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_9)); + locationTable[RC_KF_CHILD_GRASS_10] = Location::Grass(RC_KF_CHILD_GRASS_10, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-757, 708), "Child Grass 10", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_10)); + locationTable[RC_KF_CHILD_GRASS_11] = Location::Grass(RC_KF_CHILD_GRASS_11, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-823, 666), "Child Grass 11", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_11)); + locationTable[RC_KF_CHILD_GRASS_12] = Location::Grass(RC_KF_CHILD_GRASS_12, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-835, 605), "Child Grass 12", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_12)); + locationTable[RC_KF_CHILD_GRASS_MAZE_1] = Location::Grass(RC_KF_CHILD_GRASS_MAZE_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-995, 1531), "Child Grass Maze 1", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_MAZE_1)); + locationTable[RC_KF_CHILD_GRASS_MAZE_2] = Location::Grass(RC_KF_CHILD_GRASS_MAZE_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-701, 1882), "Child Grass Maze 2", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_MAZE_2)); + locationTable[RC_KF_CHILD_GRASS_MAZE_3] = Location::Grass(RC_KF_CHILD_GRASS_MAZE_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-295, 2297), "Child Grass Maze 3", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_MAZE_3)); + locationTable[RC_KF_ADULT_GRASS_1] = Location::Grass(RC_KF_ADULT_GRASS_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(839, 685), "Adult Grass 1", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_1)); + locationTable[RC_KF_ADULT_GRASS_2] = Location::Grass(RC_KF_ADULT_GRASS_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(809, 722), "Adult Grass 2", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_2)); + locationTable[RC_KF_ADULT_GRASS_3] = Location::Grass(RC_KF_ADULT_GRASS_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(760, 714), "Adult Grass 3", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_3)); + locationTable[RC_KF_ADULT_GRASS_4] = Location::Grass(RC_KF_ADULT_GRASS_4, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(725, 679), "Adult Grass 4", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_4)); + locationTable[RC_KF_ADULT_GRASS_5] = Location::Grass(RC_KF_ADULT_GRASS_5, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(725, 606), "Adult Grass 5", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_5)); + locationTable[RC_KF_ADULT_GRASS_6] = Location::Grass(RC_KF_ADULT_GRASS_6, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(797, 563), "Adult Grass 6", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_6)); + locationTable[RC_KF_ADULT_GRASS_7] = Location::Grass(RC_KF_ADULT_GRASS_7, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(868, 606), "Adult Grass 7", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_7)); + locationTable[RC_KF_ADULT_GRASS_8] = Location::Grass(RC_KF_ADULT_GRASS_8, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(797, 663), "Adult Grass 8", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_8)); + locationTable[RC_KF_ADULT_GRASS_9] = Location::Grass(RC_KF_ADULT_GRASS_9, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(757, 649), "Adult Grass 9", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_9)); + locationTable[RC_KF_ADULT_GRASS_10] = Location::Grass(RC_KF_ADULT_GRASS_10, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(773, 610), "Adult Grass 10", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_10)); + locationTable[RC_KF_ADULT_GRASS_11] = Location::Grass(RC_KF_ADULT_GRASS_11, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(815, 607), "Adult Grass 11", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_11)); + locationTable[RC_KF_ADULT_GRASS_12] = Location::Grass(RC_KF_ADULT_GRASS_12, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(836, 636), "Adult Grass 12", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_12)); + locationTable[RC_KF_ADULT_GRASS_13] = Location::Grass(RC_KF_ADULT_GRASS_13, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-772, 654), "Adult Grass 13", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_13)); + locationTable[RC_KF_ADULT_GRASS_14] = Location::Grass(RC_KF_ADULT_GRASS_14, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-785, 611), "Adult Grass 14", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_14)); + locationTable[RC_KF_ADULT_GRASS_15] = Location::Grass(RC_KF_ADULT_GRASS_15, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-805, 691), "Adult Grass 15", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_15)); + locationTable[RC_KF_ADULT_GRASS_16] = Location::Grass(RC_KF_ADULT_GRASS_16, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-822, 644), "Adult Grass 16", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_16)); + locationTable[RC_KF_ADULT_GRASS_17] = Location::Grass(RC_KF_ADULT_GRASS_17, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-842, 601), "Adult Grass 17", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_17)); + locationTable[RC_KF_ADULT_GRASS_18] = Location::Grass(RC_KF_ADULT_GRASS_18, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-867, 674), "Adult Grass 18", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_18)); + locationTable[RC_KF_ADULT_GRASS_19] = Location::Grass(RC_KF_ADULT_GRASS_19, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-498, 0xFF), "Adult Grass 19", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_19)); + locationTable[RC_KF_ADULT_GRASS_20] = Location::Grass(RC_KF_ADULT_GRASS_20, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-523, 0xFF), "Adult Grass 20", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_20)); + locationTable[RC_LW_GRASS_1] = Location::Grass(RC_LW_GRASS_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(676, -651), "Near Shortcuts Grass 1", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_1)); + locationTable[RC_LW_GRASS_2] = Location::Grass(RC_LW_GRASS_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(633, -676), "Near Shortcuts Grass 2", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_2)); + locationTable[RC_LW_GRASS_3] = Location::Grass(RC_LW_GRASS_3, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(645, -638), "Near Shortcuts Grass 3", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_3)); + locationTable[RC_LW_GRASS_4] = Location::Grass(RC_LW_GRASS_4, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1476, -2251), "After Mido Grass 1", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_4)); + locationTable[RC_LW_GRASS_5] = Location::Grass(RC_LW_GRASS_5, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1433, -2276), "After Mido Grass 2", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_5)); + locationTable[RC_LW_GRASS_6] = Location::Grass(RC_LW_GRASS_6, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1445, -2238), "After Mido Grass 3", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_6)); + locationTable[RC_LW_GRASS_7] = Location::Grass(RC_LW_GRASS_7, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(926, -2232), "Near SFM Grass 1", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_7)); + locationTable[RC_LW_GRASS_8] = Location::Grass(RC_LW_GRASS_8, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(965, -2241), "Near SFM Grass 2", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_8)); + locationTable[RC_LW_GRASS_9] = Location::Grass(RC_LW_GRASS_9, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(952, -2275), "Near SFM Grass 3", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_9)); + locationTable[RC_MARKET_GRASS_1] = Location::Grass(RC_MARKET_GRASS_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-106, 277), "Market Grass 1", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_1)); + locationTable[RC_MARKET_GRASS_2] = Location::Grass(RC_MARKET_GRASS_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-131, 225), "Market Grass 2", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_2)); + locationTable[RC_MARKET_GRASS_3] = Location::Grass(RC_MARKET_GRASS_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(504, -546), "Market Grass 3", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_3)); + locationTable[RC_MARKET_GRASS_4] = Location::Grass(RC_MARKET_GRASS_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(465, -548), "Market Grass 4", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_4)); + locationTable[RC_MARKET_GRASS_5] = Location::Grass(RC_MARKET_GRASS_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(432, -548), "Market Grass 5", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_5)); + locationTable[RC_MARKET_GRASS_6] = Location::Grass(RC_MARKET_GRASS_6, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(73, -428), "Market Grass 6", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_6)); + locationTable[RC_MARKET_GRASS_7] = Location::Grass(RC_MARKET_GRASS_7, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(75, -310), "Market Grass 7", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_7)); + locationTable[RC_MARKET_GRASS_8] = Location::Grass(RC_MARKET_GRASS_8, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(76, -190), "Market Grass 8", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_8)); + locationTable[RC_HC_GRASS_1] = Location::Grass(RC_HC_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(1035, 882), "Near Storms Grotto Grass 1", RHT_HC_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_GRASS_1)); + locationTable[RC_HC_GRASS_2] = Location::Grass(RC_HC_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(975, 919), "Near Storms Grotto Grass 2", RHT_HC_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_GRASS_2)); + locationTable[RC_KAK_GRASS_1] = Location::Grass(RC_KAK_GRASS_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1116, 1581), "Near Graveyard Grass 1", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_1)); + locationTable[RC_KAK_GRASS_2] = Location::Grass(RC_KAK_GRASS_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1103, 1532), "Near Graveyard Grass 2", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_2)); + locationTable[RC_KAK_GRASS_3] = Location::Grass(RC_KAK_GRASS_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1072, 1592), "Near Graveyard Grass 3", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_3)); + locationTable[RC_KAK_GRASS_4] = Location::Grass(RC_KAK_GRASS_4, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-800, 521), "Tree Grass 1", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_4)); + locationTable[RC_KAK_GRASS_5] = Location::Grass(RC_KAK_GRASS_5, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-826, 585), "Tree Grass 2", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_5)); + locationTable[RC_KAK_GRASS_6] = Location::Grass(RC_KAK_GRASS_6, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-827, 465), "Tree Grass 3", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_6)); + locationTable[RC_KAK_GRASS_7] = Location::Grass(RC_KAK_GRASS_7, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-883, 582), "Tree Grass 4", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_7)); + locationTable[RC_KAK_GRASS_8] = Location::Grass(RC_KAK_GRASS_8, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-887, 467), "Tree Grass 5", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_8)); + locationTable[RC_GY_GRASS_1] = Location::Grass(RC_GY_GRASS_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1059, 732), "Graveyard Grass 1", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_1)); + locationTable[RC_GY_GRASS_2] = Location::Grass(RC_GY_GRASS_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1089, 769), "Graveyard Grass 2", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_2)); + locationTable[RC_GY_GRASS_3] = Location::Grass(RC_GY_GRASS_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1138, 761), "Graveyard Grass 3", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_3)); + locationTable[RC_GY_GRASS_4] = Location::Grass(RC_GY_GRASS_4, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1173, 726), "Graveyard Grass 4", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_4)); + locationTable[RC_GY_GRASS_5] = Location::Grass(RC_GY_GRASS_5, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1173, 653), "Graveyard Grass 5", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_5)); + locationTable[RC_GY_GRASS_6] = Location::Grass(RC_GY_GRASS_6, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1102, 610), "Graveyard Grass 6", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_6)); + locationTable[RC_GY_GRASS_7] = Location::Grass(RC_GY_GRASS_7, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1030, 653), "Graveyard Grass 7", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_7)); + locationTable[RC_GY_GRASS_8] = Location::Grass(RC_GY_GRASS_8, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1102, 710), "Graveyard Grass 8", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_8)); + locationTable[RC_GY_GRASS_9] = Location::Grass(RC_GY_GRASS_9, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1141, 696), "Graveyard Grass 9", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_9)); + locationTable[RC_GY_GRASS_10] = Location::Grass(RC_GY_GRASS_10, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1125, 657), "Graveyard Grass 10", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_10)); + locationTable[RC_GY_GRASS_11] = Location::Grass(RC_GY_GRASS_11, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1083, 654), "Graveyard Grass 11", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_11)); + locationTable[RC_GY_GRASS_12] = Location::Grass(RC_GY_GRASS_12, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1062, 683), "Graveyard Grass 12", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_12)); + locationTable[RC_LH_GRASS_1] = Location::Grass(RC_LH_GRASS_1, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1637, 2796), "LH Grass 1", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_1)); + locationTable[RC_LH_GRASS_2] = Location::Grass(RC_LH_GRASS_2, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1667, 2833), "LH Grass 2", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_2)); + locationTable[RC_LH_GRASS_3] = Location::Grass(RC_LH_GRASS_3, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1716, 2825), "LH Grass 3", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_3)); + locationTable[RC_LH_GRASS_4] = Location::Grass(RC_LH_GRASS_4, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1751, 2790), "LH Grass 4", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_4)); + locationTable[RC_LH_GRASS_5] = Location::Grass(RC_LH_GRASS_5, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1751, 2717), "LH Grass 5", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_5)); + locationTable[RC_LH_GRASS_6] = Location::Grass(RC_LH_GRASS_6, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1680, 2674), "LH Grass 6", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_6)); + locationTable[RC_LH_GRASS_7] = Location::Grass(RC_LH_GRASS_7, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1608, 2717), "LH Grass 7", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_7)); + locationTable[RC_LH_GRASS_8] = Location::Grass(RC_LH_GRASS_8, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1680, 2774), "LH Grass 8", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_8)); + locationTable[RC_LH_GRASS_9] = Location::Grass(RC_LH_GRASS_9, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1719, 2760), "LH Grass 9", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_9)); + locationTable[RC_LH_GRASS_10] = Location::Grass(RC_LH_GRASS_10, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1703, 2721), "LH Grass 10", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_10)); + locationTable[RC_LH_GRASS_11] = Location::Grass(RC_LH_GRASS_11, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1661, 2718), "LH Grass 11", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_11)); + locationTable[RC_LH_GRASS_12] = Location::Grass(RC_LH_GRASS_12, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1640, 2747), "LH Grass 12", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_12)); + locationTable[RC_LH_GRASS_13] = Location::Grass(RC_LH_GRASS_13, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2028, 2542), "LH Grass 13", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_13)); + locationTable[RC_LH_GRASS_14] = Location::Grass(RC_LH_GRASS_14, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2058, 2579), "LH Grass 14", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_14)); + locationTable[RC_LH_GRASS_15] = Location::Grass(RC_LH_GRASS_15, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2107, 2571), "LH Grass 15", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_15)); + locationTable[RC_LH_GRASS_16] = Location::Grass(RC_LH_GRASS_16, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2142, 2536), "LH Grass 16", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_16)); + locationTable[RC_LH_GRASS_17] = Location::Grass(RC_LH_GRASS_17, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2142, 2463), "LH Grass 17", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_17)); + locationTable[RC_LH_GRASS_18] = Location::Grass(RC_LH_GRASS_18, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2071, 2420), "LH Grass 18", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_18)); + locationTable[RC_LH_GRASS_19] = Location::Grass(RC_LH_GRASS_19, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1999, 2463), "LH Grass 19", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_19)); + locationTable[RC_LH_GRASS_20] = Location::Grass(RC_LH_GRASS_20, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2071, 2520), "LH Grass 20", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_20)); + locationTable[RC_LH_GRASS_21] = Location::Grass(RC_LH_GRASS_21, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2110, 2506), "LH Grass 21", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_21)); + locationTable[RC_LH_GRASS_22] = Location::Grass(RC_LH_GRASS_22, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2094, 2467), "LH Grass 22", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_22)); + locationTable[RC_LH_GRASS_23] = Location::Grass(RC_LH_GRASS_23, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2052, 2464), "LH Grass 23", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_23)); + locationTable[RC_LH_GRASS_24] = Location::Grass(RC_LH_GRASS_24, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2031, 2493), "LH Grass 24", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_24)); + locationTable[RC_LH_GRASS_25] = Location::Grass(RC_LH_GRASS_25, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2204, 3050), "LH Grass 25", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_25)); + locationTable[RC_LH_GRASS_26] = Location::Grass(RC_LH_GRASS_26, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2234, 3087), "LH Grass 26", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_26)); + locationTable[RC_LH_GRASS_27] = Location::Grass(RC_LH_GRASS_27, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2283, 3079), "LH Grass 27", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_27)); + locationTable[RC_LH_GRASS_28] = Location::Grass(RC_LH_GRASS_28, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2318, 3044), "LH Grass 28", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_28)); + locationTable[RC_LH_GRASS_29] = Location::Grass(RC_LH_GRASS_29, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2318, 2971), "LH Grass 29", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_29)); + locationTable[RC_LH_GRASS_30] = Location::Grass(RC_LH_GRASS_30, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2247, 2928), "LH Grass 30", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_30)); + locationTable[RC_LH_GRASS_31] = Location::Grass(RC_LH_GRASS_31, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2175, 2971), "LH Grass 31", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_31)); + locationTable[RC_LH_GRASS_32] = Location::Grass(RC_LH_GRASS_32, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2247, 3028), "LH Grass 32", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_32)); + locationTable[RC_LH_GRASS_33] = Location::Grass(RC_LH_GRASS_33, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2286, 3014), "LH Grass 33", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_33)); + locationTable[RC_LH_GRASS_34] = Location::Grass(RC_LH_GRASS_34, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2270, 2975), "LH Grass 34", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_34)); + locationTable[RC_LH_GRASS_35] = Location::Grass(RC_LH_GRASS_35, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2228, 2972), "LH Grass 35", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_35)); + locationTable[RC_LH_GRASS_36] = Location::Grass(RC_LH_GRASS_36, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2207, 3001), "LH Grass 36", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_36)); + locationTable[RC_LH_CHILD_GRASS_1] = Location::Grass(RC_LH_CHILD_GRASS_1, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(13, 2735), "LH Child Grass 1", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_CHILD_GRASS_1)); + locationTable[RC_LH_CHILD_GRASS_2] = Location::Grass(RC_LH_CHILD_GRASS_2, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-77, 2891), "LH Child Grass 2", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_CHILD_GRASS_2)); + locationTable[RC_LH_CHILD_GRASS_3] = Location::Grass(RC_LH_CHILD_GRASS_3, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-222, 2888), "LH Child Grass 3", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_CHILD_GRASS_3)); + locationTable[RC_LH_CHILD_GRASS_4] = Location::Grass(RC_LH_CHILD_GRASS_4, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-295, 2973), "LH Child Grass 4", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_CHILD_GRASS_4)); + locationTable[RC_LH_WARP_PAD_GRASS_1] = Location::Grass(RC_LH_WARP_PAD_GRASS_1, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-613, 7369), "LH Warp Pad Grass 1", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_WARP_PAD_GRASS_1)); + locationTable[RC_LH_WARP_PAD_GRASS_2] = Location::Grass(RC_LH_WARP_PAD_GRASS_2, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-662, 7352), "LH Warp Pad Grass 2", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_WARP_PAD_GRASS_2)); + locationTable[RC_HF_NEAR_KF_GRASS_1] = Location::Grass(RC_HF_NEAR_KF_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3186, 7571), "Near KF Grass 1", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_1)); + locationTable[RC_HF_NEAR_KF_GRASS_2] = Location::Grass(RC_HF_NEAR_KF_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3156, 7608), "Near KF Grass 2", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_2)); + locationTable[RC_HF_NEAR_KF_GRASS_3] = Location::Grass(RC_HF_NEAR_KF_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3107, 7600), "Near KF Grass 3", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_3)); + locationTable[RC_HF_NEAR_KF_GRASS_4] = Location::Grass(RC_HF_NEAR_KF_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3072, 7565), "Near KF Grass 4", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_4)); + locationTable[RC_HF_NEAR_KF_GRASS_5] = Location::Grass(RC_HF_NEAR_KF_GRASS_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3072, 7492), "Near KF Grass 5", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_5)); + locationTable[RC_HF_NEAR_KF_GRASS_6] = Location::Grass(RC_HF_NEAR_KF_GRASS_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3144, 7449), "Near KF Grass 6", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_6)); + locationTable[RC_HF_NEAR_KF_GRASS_7] = Location::Grass(RC_HF_NEAR_KF_GRASS_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3215, 7492), "Near KF Grass 7", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_7)); + locationTable[RC_HF_NEAR_KF_GRASS_8] = Location::Grass(RC_HF_NEAR_KF_GRASS_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3144, 7549), "Near KF Grass 8", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_8)); + locationTable[RC_HF_NEAR_KF_GRASS_9] = Location::Grass(RC_HF_NEAR_KF_GRASS_9, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3104, 7535), "Near KF Grass 9", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_9)); + locationTable[RC_HF_NEAR_KF_GRASS_10] = Location::Grass(RC_HF_NEAR_KF_GRASS_10, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3120, 7496), "Near KF Grass 10", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_10)); + locationTable[RC_HF_NEAR_KF_GRASS_11] = Location::Grass(RC_HF_NEAR_KF_GRASS_11, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3162, 7493), "Near KF Grass 11", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_11)); + locationTable[RC_HF_NEAR_KF_GRASS_12] = Location::Grass(RC_HF_NEAR_KF_GRASS_12, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3183, 7522), "Near KF Grass 12", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_12)); + locationTable[RC_HF_NEAR_MARKET_GRASS_1] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(950, 3613), "Near Market Grass 1", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_1)); + locationTable[RC_HF_NEAR_MARKET_GRASS_2] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(920, 3650), "Near Market Grass 2", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_2)); + locationTable[RC_HF_NEAR_MARKET_GRASS_3] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(871, 3642), "Near Market Grass 3", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_3)); + locationTable[RC_HF_NEAR_MARKET_GRASS_4] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(836, 3607), "Near Market Grass 4", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_4)); + locationTable[RC_HF_NEAR_MARKET_GRASS_5] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(836, 3534), "Near Market Grass 5", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_5)); + locationTable[RC_HF_NEAR_MARKET_GRASS_6] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(908, 3491), "Near Market Grass 6", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_6)); + locationTable[RC_HF_NEAR_MARKET_GRASS_7] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(979, 3534), "Near Market Grass 7", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_7)); + locationTable[RC_HF_NEAR_MARKET_GRASS_8] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(908, 3591), "Near Market Grass 8", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_8)); + locationTable[RC_HF_NEAR_MARKET_GRASS_9] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_9, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(868, 3577), "Near Market Grass 9", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_9)); + locationTable[RC_HF_NEAR_MARKET_GRASS_10] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_10, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(884, 3538), "Near Market Grass 10", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_10)); + locationTable[RC_HF_NEAR_MARKET_GRASS_11] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_11, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(926, 3535), "Near Market Grass 11", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_11)); + locationTable[RC_HF_NEAR_MARKET_GRASS_12] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_12, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(947, 3564), "Near Market Grass 12", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_12)); + locationTable[RC_HF_SOUTH_GRASS_1] = Location::Grass(RC_HF_SOUTH_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-483, 11329), "South Grass 1", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_1)); + locationTable[RC_HF_SOUTH_GRASS_2] = Location::Grass(RC_HF_SOUTH_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-518, 11294), "South Grass 2", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_2)); + locationTable[RC_HF_SOUTH_GRASS_3] = Location::Grass(RC_HF_SOUTH_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-518, 11221), "South Grass 3", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_3)); + locationTable[RC_HF_SOUTH_GRASS_4] = Location::Grass(RC_HF_SOUTH_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-447, 11178), "South Grass 4", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_4)); + locationTable[RC_HF_SOUTH_GRASS_5] = Location::Grass(RC_HF_SOUTH_GRASS_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-375, 11221), "South Grass 5", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_5)); + locationTable[RC_HF_SOUTH_GRASS_6] = Location::Grass(RC_HF_SOUTH_GRASS_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-447, 11278), "South Grass 6", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_6)); + locationTable[RC_HF_SOUTH_GRASS_7] = Location::Grass(RC_HF_SOUTH_GRASS_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-486, 11264), "South Grass 7", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_7)); + locationTable[RC_HF_SOUTH_GRASS_8] = Location::Grass(RC_HF_SOUTH_GRASS_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-470, 11225), "South Grass 8", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_8)); + locationTable[RC_HF_SOUTH_GRASS_9] = Location::Grass(RC_HF_SOUTH_GRASS_9, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-428, 11222), "South Grass 9", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_9)); + locationTable[RC_HF_SOUTH_GRASS_10] = Location::Grass(RC_HF_SOUTH_GRASS_10, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-407, 11251), "South Grass 10", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_10)); + locationTable[RC_HF_SOUTH_GRASS_11] = Location::Grass(RC_HF_SOUTH_GRASS_11, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-404, 11300), "South Grass 11", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_11)); + locationTable[RC_HF_SOUTH_GRASS_12] = Location::Grass(RC_HF_SOUTH_GRASS_12, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-434, 11337), "South Grass 12", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_12)); + locationTable[RC_HF_CENTRAL_GRASS_1] = Location::Grass(RC_HF_CENTRAL_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-948, 9981), "Central Grass 1", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_1)); + locationTable[RC_HF_CENTRAL_GRASS_2] = Location::Grass(RC_HF_CENTRAL_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-978, 10018), "Central Grass 2", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_2)); + locationTable[RC_HF_CENTRAL_GRASS_3] = Location::Grass(RC_HF_CENTRAL_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1027, 10010), "Central Grass 3", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_3)); + locationTable[RC_HF_CENTRAL_GRASS_4] = Location::Grass(RC_HF_CENTRAL_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1062, 9975), "Central Grass 4", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_4)); + locationTable[RC_HF_CENTRAL_GRASS_5] = Location::Grass(RC_HF_CENTRAL_GRASS_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1062, 9902), "Central Grass 5", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_5)); + locationTable[RC_HF_CENTRAL_GRASS_6] = Location::Grass(RC_HF_CENTRAL_GRASS_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-991, 9859), "Central Grass 6", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_6)); + locationTable[RC_HF_CENTRAL_GRASS_7] = Location::Grass(RC_HF_CENTRAL_GRASS_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-919, 9902), "Central Grass 7", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_7)); + locationTable[RC_HF_CENTRAL_GRASS_8] = Location::Grass(RC_HF_CENTRAL_GRASS_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-991, 9959), "Central Grass 8", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_8)); + locationTable[RC_HF_CENTRAL_GRASS_9] = Location::Grass(RC_HF_CENTRAL_GRASS_9, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1030, 9945), "Central Grass 9", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_9)); + locationTable[RC_HF_CENTRAL_GRASS_10] = Location::Grass(RC_HF_CENTRAL_GRASS_10, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1014, 9906), "Central Grass 10", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_10)); + locationTable[RC_HF_CENTRAL_GRASS_11] = Location::Grass(RC_HF_CENTRAL_GRASS_11, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-972, 9903), "Central Grass 11", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_11)); + locationTable[RC_HF_CENTRAL_GRASS_12] = Location::Grass(RC_HF_CENTRAL_GRASS_12, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-951, 9932), "Central Grass 12", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_12)); + locationTable[RC_ZR_GRASS_1] = Location::Grass(RC_ZR_GRASS_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1495, 1022), "Near Tree Grass 1", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_1)); + locationTable[RC_ZR_GRASS_2] = Location::Grass(RC_ZR_GRASS_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1465, 985), "Near Tree Grass 2", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_2)); + locationTable[RC_ZR_GRASS_3] = Location::Grass(RC_ZR_GRASS_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1544, 1014), "Near Tree Grass 3", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_3)); + locationTable[RC_ZR_GRASS_4] = Location::Grass(RC_ZR_GRASS_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1579, 979), "Near Tree Grass 4", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_4)); + locationTable[RC_ZR_GRASS_5] = Location::Grass(RC_ZR_GRASS_5, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1579, 906), "Near Tree Grass 5", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_5)); + locationTable[RC_ZR_GRASS_6] = Location::Grass(RC_ZR_GRASS_6, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1508, 863), "Near Tree Grass 6", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_6)); + locationTable[RC_ZR_GRASS_7] = Location::Grass(RC_ZR_GRASS_7, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1508, 963), "Near Tree Grass 7", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_7)); + locationTable[RC_ZR_GRASS_8] = Location::Grass(RC_ZR_GRASS_8, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1547, 949), "Near Tree Grass 8", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_8)); + locationTable[RC_ZR_GRASS_9] = Location::Grass(RC_ZR_GRASS_9, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1531, 910), "Near Tree Grass 9", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_9)); + locationTable[RC_ZR_GRASS_10] = Location::Grass(RC_ZR_GRASS_10, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1489, 907), "Near Tree Grass 10", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_10)); + locationTable[RC_ZR_GRASS_11] = Location::Grass(RC_ZR_GRASS_11, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1468, 936), "Near Tree Grass 11", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_11)); + locationTable[RC_ZR_GRASS_12] = Location::Grass(RC_ZR_GRASS_12, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1436, 906), "Near Tree Grass 12", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_12)); + locationTable[RC_ZR_NEAR_FREESTANDING_POH_GRASS] = Location::Grass(RC_ZR_NEAR_FREESTANDING_POH_GRASS, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(231, -1478), "Near Freestanding PoH Grass", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_FREESTANDING_POH_GRASS)); + // Grotto Grass + locationTable[RC_KF_STORMS_GROTTO_GRASS_1] = Location::Grass(RC_KF_STORMS_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x2C), "Storms Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GRASS_1)); + locationTable[RC_KF_STORMS_GROTTO_GRASS_2] = Location::Grass(RC_KF_STORMS_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x2C), "Storms Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GRASS_2)); + locationTable[RC_KF_STORMS_GROTTO_GRASS_3] = Location::Grass(RC_KF_STORMS_GROTTO_GRASS_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x2C), "Storms Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GRASS_3)); + locationTable[RC_KF_STORMS_GROTTO_GRASS_4] = Location::Grass(RC_KF_STORMS_GROTTO_GRASS_4, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x2C), "Storms Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GRASS_4)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1] = Location::Grass(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x14), "Near Shortcuts Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2] = Location::Grass(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x14), "Near Shortcuts Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3] = Location::Grass(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x14), "Near Shortcuts Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4] = Location::Grass(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x14), "Near Shortcuts Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GRASS_1] = Location::Grass(RC_HF_NEAR_MARKET_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x00), "Near Market Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_1)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GRASS_2] = Location::Grass(RC_HF_NEAR_MARKET_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x00), "Near Market Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_2)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GRASS_3] = Location::Grass(RC_HF_NEAR_MARKET_GROTTO_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x00), "Near Market Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_3)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GRASS_4] = Location::Grass(RC_HF_NEAR_MARKET_GROTTO_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x00), "Near Market Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_4)); + locationTable[RC_HF_OPEN_GROTTO_GRASS_1] = Location::Grass(RC_HF_OPEN_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x03), "Open Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GRASS_1)); + locationTable[RC_HF_OPEN_GROTTO_GRASS_2] = Location::Grass(RC_HF_OPEN_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x03), "Open Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GRASS_2)); + locationTable[RC_HF_OPEN_GROTTO_GRASS_3] = Location::Grass(RC_HF_OPEN_GROTTO_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x03), "Open Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GRASS_3)); + locationTable[RC_HF_OPEN_GROTTO_GRASS_4] = Location::Grass(RC_HF_OPEN_GROTTO_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x03), "Open Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GRASS_4)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GRASS_1] = Location::Grass(RC_HF_SOUTHEAST_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x22), "Southeast Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_1)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GRASS_2] = Location::Grass(RC_HF_SOUTHEAST_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x22), "Southeast Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_2)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GRASS_3] = Location::Grass(RC_HF_SOUTHEAST_GROTTO_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x22), "Southeast Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_3)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GRASS_4] = Location::Grass(RC_HF_SOUTHEAST_GROTTO_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x22), "Southeast Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_4)); + locationTable[RC_HF_COW_GROTTO_GRASS_1] = Location::Grass(RC_HF_COW_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3419, 0xE4), "Cow Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_GRASS_1)); + locationTable[RC_HF_COW_GROTTO_GRASS_2] = Location::Grass(RC_HF_COW_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3518, 0xE4), "Cow Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_GRASS_2)); + locationTable[RC_KAK_OPEN_GROTTO_GRASS_1] = Location::Grass(RC_KAK_OPEN_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x28), "Open Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GRASS_1)); + locationTable[RC_KAK_OPEN_GROTTO_GRASS_2] = Location::Grass(RC_KAK_OPEN_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x28), "Open Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GRASS_2)); + locationTable[RC_KAK_OPEN_GROTTO_GRASS_3] = Location::Grass(RC_KAK_OPEN_GROTTO_GRASS_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x28), "Open Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GRASS_3)); + locationTable[RC_KAK_OPEN_GROTTO_GRASS_4] = Location::Grass(RC_KAK_OPEN_GROTTO_GRASS_4, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x28), "Open Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GRASS_4)); + locationTable[RC_DMT_STORMS_GROTTO_GRASS_1] = Location::Grass(RC_DMT_STORMS_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x57), "Storms Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GRASS_1)); + locationTable[RC_DMT_STORMS_GROTTO_GRASS_2] = Location::Grass(RC_DMT_STORMS_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x57), "Storms Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GRASS_2)); + locationTable[RC_DMT_STORMS_GROTTO_GRASS_3] = Location::Grass(RC_DMT_STORMS_GROTTO_GRASS_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x57), "Storms Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GRASS_3)); + locationTable[RC_DMT_STORMS_GROTTO_GRASS_4] = Location::Grass(RC_DMT_STORMS_GROTTO_GRASS_4, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x57), "Storms Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GRASS_4)); + locationTable[RC_DMT_COW_GROTTO_GRASS_1] = Location::Grass(RC_DMT_COW_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2443, 0xF8), "Cow Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_GRASS_1)); + locationTable[RC_DMT_COW_GROTTO_GRASS_2] = Location::Grass(RC_DMT_COW_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2494, 0xF8), "Cow Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_GRASS_2)); + locationTable[RC_DMC_UPPER_GROTTO_GRASS_1] = Location::Grass(RC_DMC_UPPER_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x7A), "Upper Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GRASS_1)); + locationTable[RC_DMC_UPPER_GROTTO_GRASS_2] = Location::Grass(RC_DMC_UPPER_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x7A), "Upper Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GRASS_2)); + locationTable[RC_DMC_UPPER_GROTTO_GRASS_3] = Location::Grass(RC_DMC_UPPER_GROTTO_GRASS_3, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x7A), "Upper Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GRASS_3)); + locationTable[RC_DMC_UPPER_GROTTO_GRASS_4] = Location::Grass(RC_DMC_UPPER_GROTTO_GRASS_4, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x7A), "Upper Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GRASS_4)); + locationTable[RC_ZR_OPEN_GROTTO_GRASS_1] = Location::Grass(RC_ZR_OPEN_GROTTO_GRASS_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x29), "Open Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GRASS_1)); + locationTable[RC_ZR_OPEN_GROTTO_GRASS_2] = Location::Grass(RC_ZR_OPEN_GROTTO_GRASS_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x29), "Open Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GRASS_2)); + locationTable[RC_ZR_OPEN_GROTTO_GRASS_3] = Location::Grass(RC_ZR_OPEN_GROTTO_GRASS_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x29), "Open Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GRASS_3)); + locationTable[RC_ZR_OPEN_GROTTO_GRASS_4] = Location::Grass(RC_ZR_OPEN_GROTTO_GRASS_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x29), "Open Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GRASS_4)); + // Dungeon Grass + locationTable[RC_DEKU_TREE_LOBBY_GRASS_1] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(391, -156), "Lobby Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_1)); + locationTable[RC_DEKU_TREE_LOBBY_GRASS_2] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(355, -233), "Lobby Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_2)); + locationTable[RC_DEKU_TREE_LOBBY_GRASS_3] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(307, -289), "Lobby Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_3)); + locationTable[RC_DEKU_TREE_LOBBY_GRASS_4] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_4, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(80, -414), "Lobby Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_4)); + locationTable[RC_DEKU_TREE_LOBBY_GRASS_5] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_5, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(142, -399), "Lobby Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_5)); + locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_1] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1018, 1263), "Slingshot Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_1)); + locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_2] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1005, 1216), "Slingshot Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_2)); + locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_3] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1280, 1026), "Slingshot Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_3)); + locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_4] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_4, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1229, 1006), "Slingshot Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_4)); + locationTable[RC_DEKU_TREE_COMPASS_GRASS_1] = Location::Grass(RC_DEKU_TREE_COMPASS_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1444, 169), "Compass Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_COMPASS_GRASS_1)); + locationTable[RC_DEKU_TREE_COMPASS_GRASS_2] = Location::Grass(RC_DEKU_TREE_COMPASS_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1516, 142), "Compass Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_COMPASS_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(48, 130), "Basement Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(48, 187), "Basement Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-228, 792), "Eye Switch Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-202, 751), "Eye Switch Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3] = Location::Grass(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(79, 794), "Eye Switch Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3)); + locationTable[RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4] = Location::Grass(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(49, 752), "Eye Switch Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4)); + locationTable[RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1310, 840), "Spike Roller Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1361, 840), "Spike Roller Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1796, 821), "Torches Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1919, 820), "Torches Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1955, -296), "Larvae Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2025, -301), "Larvae Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_2)); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_GRASS_1] = Location::Grass(RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-273, -515), "Before Boss Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_1)); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_GRASS_2] = Location::Grass(RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-273, -577), "Before Boss Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_2)); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_GRASS_3] = Location::Grass(RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-269, -643), "Before Boss Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_3)); + locationTable[RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-760, -465), "First Bridge Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS)); + locationTable[RC_DODONGOS_CAVERN_BLADE_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_BLADE_GRASS, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1713, -1246), "Blade Room Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_GRASS)); + locationTable[RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3189, -485), "Single Eye Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_GRASS)); + locationTable[RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-249, -2519), "Before Boss Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BEFORE_BOSS_GRASS)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-858, -1330), "Basement Behind Rocks Grass 1", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-870, -1021), "Basement Behind Rocks Grass 2", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-872, -1383), "Basement Behind Rocks Grass 3", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-874, -1447), "Basement Behind Rocks Grass 4", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-886, -1263), "Basement Behind Rocks Grass 5", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-918, -1131), "Basement Behind Rocks Grass 6", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-943, -1316), "Basement Behind Rocks Grass 7", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-956, -1377), "Basement Behind Rocks Grass 8", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-956, -1463), "Basement Behind Rocks Grass 9", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-619, -627), "Basement Grass 1", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-565, -654), "Basement Grass 2", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-552, -711), "Basement Grass 3", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3)); + // MQ Dungeon Grass + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(392, -158), "MQ Lobby Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(356, -235), "MQ Lobby Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(308, -291), "MQ Lobby Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(81, -416), "MQ Lobby Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_5] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_5, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(143, -401), "MQ Lobby Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_5)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_6] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_6, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-11, -344), "MQ Lobby Grass 6", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_6)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_7] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_7, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-159, -302), "MQ Lobby Grass 7", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_7)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-636, 161), "MQ Slingshot Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-693, 182), "MQ Slingshot Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1443, 167), "MQ Slingshot Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1515, 140), "MQ Slingshot Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-753, 614), "MQ Before Compass Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-736, 795), "MQ Before Compass Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-575, 627), "MQ Before Compass Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-572, 727), "MQ Before Compass Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-788, 702), "MQ Before Compass Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-654, 582), "MQ Before Compass Grass 6", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-643, 798), "MQ Before Compass Grass 7", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7)); + locationTable[RC_DEKU_TREE_MQ_COMPASS_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_COMPASS_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1279, 1024), "MQ Compass Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_COMPASS_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_COMPASS_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1228, 1004), "MQ Compass Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_COMPASS_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_COMPASS_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1017, 1261), "MQ Compass Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_COMPASS_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_COMPASS_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1004, 1214), "MQ Compass Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-15, -261), "MQ Basement Lower Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-7, -328), "MQ Basement Lower Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(5, 119), "MQ Basement Lower Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-39, 118), "MQ Basement Lower Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-807, -228), "MQ Basement Upper Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-764, 280), "MQ Basement Upper Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, 237), "MQ Basement Upper Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-466, 865), "MQ Spike Roller Front Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-495, 906), "MQ Spike Roller Front Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-538, 907), "MQ Spike Roller Front Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1360, 838), "MQ Spike Roller Back Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1309, 838), "MQ Spike Roller Back Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-227, 790), "MQ Torches Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-201, 749), "MQ Torches Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(50, 750), "MQ Torches Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(80, 792), "MQ Torches Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1795, 819), "MQ Larvae Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1918, 818), "MQ Larvae Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1678, -120), "MQ Graves Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1700, 196), "MQ Graves Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2165, 350), "MQ Graves Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2215, 56), "MQ Graves Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1901, 604), "MQ Graves Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2708, -522), "MQ Back Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2395, -587), "MQ Back Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2553, -433), "MQ Back Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-272, -517), "MQ Before Boss Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-272, -579), "MQ Before Boss Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-268, -645), "MQ Before Boss Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1] = Location::Grass(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1721, -579), "MQ Compass Grass 1", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2] = Location::Grass(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1731, -45), "MQ Compass Grass 2", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3] = Location::Grass(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2218, -56), "MQ Compass Grass 3", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4] = Location::Grass(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2230, -556), "MQ Compass Grass 4", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1765, -3940), "MQ Armos Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_GRASS)); + locationTable[RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1285, -4693), "MQ Back Poe Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BACK_POE_GRASS)); + locationTable[RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1] = Location::Grass(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2644, -3368), "MQ Scrub Grass 1", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2] = Location::Grass(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2614, -3387), "MQ Scrub Grass 2", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-219, -61), "MQ First Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(213, -398), "MQ First Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-192, -3209), "MQ Pit Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(350, -3534), "MQ Pit Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-91, -2815), "MQ Basement Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(231, -3575), "MQ Basement Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(305, -3481), "MQ Basement Grass 3", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3)); + locationTable[RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1089, -1489), "MQ Wigglers Grass", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS)); + locationTable[RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(652, -5687), "MQ Like Like Grass", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(1228, -2647), "MQ Basement Boomerang Grass", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS)); + locationTable[RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1360, -3606), "MQ After Big Octo Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1086, -3346), "MQ After Big Octo Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(1477, -1366), "MQ Before Boss Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(1691, -1576), "MQ Before Boss Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1] = Location::Grass(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1604, 3), "MQ Dead Hand Grass 1", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2] = Location::Grass(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1529, 2), "MQ Dead Hand Grass 2", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3] = Location::Grass(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1492, -49), "MQ Dead Hand Grass 3", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4] = Location::Grass(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1458, -130), "MQ Dead Hand Grass 4", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4)); + // Shared Dungeon Grass + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(545, -75), "Queen Gohma Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_1)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(525, -375), "Queen Gohma Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_2)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(-646, 108), "Queen Gohma Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_3)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(-444, 323), "Queen Gohma Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_4)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(-848, -166), "Queen Gohma Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_5)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(-855, -596), "Queen Gohma Grass 6", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_6)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(480, -681), "Queen Gohma Grass 7", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_7)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(194, -974), "Queen Gohma Grass 8", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_8)); + // End Grass + // clang-format on +} + +static RegisterShipInitFunc registerShuffleGrass(RegisterShuffleGrass, { "IS_RANDO" }); +static RegisterShipInitFunc registerShuffleGrassLocations(Rando::StaticData::RegisterGrassLocations); diff --git a/soh/soh/Enhancements/randomizer/ShuffleGrass.h b/soh/soh/Enhancements/randomizer/ShuffleGrass.h new file mode 100644 index 000000000..bc9a130d4 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleGrass.h @@ -0,0 +1,15 @@ +#ifndef SHUFFLEGRASS_H +#define SHUFFLEGRASS_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +void EnKusa_RandomizerInit(void* actorRef); +#ifdef __cplusplus +}; +#endif + +#endif // SHUFFLEGRASS_H diff --git a/soh/soh/Enhancements/randomizer/ShufflePots.cpp b/soh/soh/Enhancements/randomizer/ShufflePots.cpp index cbc96cd1d..9e6f50f42 100644 --- a/soh/soh/Enhancements/randomizer/ShufflePots.cpp +++ b/soh/soh/Enhancements/randomizer/ShufflePots.cpp @@ -11,7 +11,6 @@ extern PlayState* gPlayState; extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); - extern "C" void ObjTsubo_RandomizerDraw(Actor* thisx, PlayState* play) { float potSize = 1.0f; @@ -19,7 +18,7 @@ extern "C" void ObjTsubo_RandomizerDraw(Actor* thisx, PlayState* play) { Gfx_SetupDL_25Opa(play->state.gfxCtx); Matrix_Scale(potSize, potSize, potSize, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), - G_MTX_MODELVIEW | G_MTX_LOAD); + G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gRandoPotDL); CLOSE_DISPS(play->state.gfxCtx); @@ -44,7 +43,8 @@ uint8_t ObjTsubo_RandomizerHoldsItem(ObjTsubo* potActor, PlayState* play) { void ObjTsubo_RandomizerSpawnCollectible(ObjTsubo* potActor, PlayState* play) { EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &potActor->actor.world.pos, ITEM00_SOH_DUMMY); item00->randoInf = potActor->potIdentity.randomizerInf; - item00->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(potActor->potIdentity.randomizerCheck, true, GI_NONE); + item00->itemEntry = + Rando::Context::GetInstance()->GetFinalGIEntry(potActor->potIdentity.randomizerCheck, true, GI_NONE); item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; item00->actor.velocity.y = 8.0f; item00->actor.speedXZ = 2.0f; @@ -56,7 +56,8 @@ void ObjTsubo_RandomizerInit(void* actorRef) { ObjTsubo* potActor = static_cast(actorRef); - potActor->potIdentity = OTRGlobals::Instance->gRandomizer->IdentifyPot(gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); + potActor->potIdentity = OTRGlobals::Instance->gRandomizer->IdentifyPot( + gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); } void ShufflePots_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { @@ -95,6 +96,11 @@ void ShufflePots_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va } void Rando::StaticData::RegisterPotLocations() { + static bool registered = false; + if (registered) + return; + registered = true; + // clang-format off // Overworld Pots // Randomizer Check Randomizer Check Quest Area Scene ID Params Short 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", RHT_POT_KOKIRI_FOREST, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_LINKS_HOUSE_POT)); @@ -643,6 +649,8 @@ void Rando::StaticData::RegisterPotLocations() { 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", 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", 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", RHT_POT_GERUDO_TRAINING_GROUND, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2)); + + // clang-format on } -static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterPotLocations); \ No newline at end of file +static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterPotLocations); diff --git a/soh/soh/Enhancements/randomizer/ShufflePots.h b/soh/soh/Enhancements/randomizer/ShufflePots.h index 28c4e2f4a..cbe6ddaf5 100644 --- a/soh/soh/Enhancements/randomizer/ShufflePots.h +++ b/soh/soh/Enhancements/randomizer/ShufflePots.h @@ -14,4 +14,4 @@ void ObjTsubo_RandomizerInit(void* actorRef); void ShufflePots_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); -#endif //SHUFFLEPOTS_H +#endif // SHUFFLEPOTS_H diff --git a/soh/soh/Enhancements/randomizer/ShuffleTradeItems.c b/soh/soh/Enhancements/randomizer/ShuffleTradeItems.c index 62e0bc9f0..8b43884e4 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleTradeItems.c +++ b/soh/soh/Enhancements/randomizer/ShuffleTradeItems.c @@ -8,7 +8,7 @@ u8 Randomizer_GetNextChildTradeItem() { 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_WEIRD_EGG + tradeIndex; } } return ITEM_NONE; @@ -20,7 +20,7 @@ u8 Randomizer_GetPrevChildTradeItem() { 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_WEIRD_EGG + tradeIndex; } } return ITEM_NONE; @@ -32,7 +32,7 @@ u8 Randomizer_GetNextAdultTradeItem() { 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_POCKET_EGG + tradeIndex; } } return ITEM_NONE; @@ -44,7 +44,7 @@ u8 Randomizer_GetPrevAdultTradeItem() { 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_POCKET_EGG + tradeIndex; } } return ITEM_NONE; diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 221e2176c..fa755325e 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -45,6 +45,7 @@ Context::Context() { &mOptions[RSK_SHUFFLE_BEEHIVES], &mOptions[RSK_SHUFFLE_COWS], &mOptions[RSK_SHUFFLE_POTS], + &mOptions[RSK_SHUFFLE_CRATES], &mOptions[RSK_SHUFFLE_FREESTANDING], &mOptions[RSK_SHUFFLE_MERCHANTS], &mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES], @@ -87,7 +88,7 @@ Hint* Context::GetHint(const RandomizerHint hintKey) { } void Context::AddHint(const RandomizerHint hintId, const Hint hint) { - hintTable[hintId] = hint; //RANDOTODO this should probably be an rvalue + hintTable[hintId] = hint; // RANDOTODO this should probably be an rvalue } ItemLocation* Context::GetItemLocation(const RandomizerCheck locKey) { @@ -116,12 +117,14 @@ ItemOverride& Context::GetItemOverride(size_t locKey) { return overrides.at(static_cast(locKey)); } -void Context::PlaceItemInLocation(const RandomizerCheck locKey, const RandomizerGet item, const bool applyEffectImmediately, - const bool setHidden) { +void Context::PlaceItemInLocation(const RandomizerCheck locKey, const RandomizerGet item, + const bool applyEffectImmediately, const bool setHidden) { const auto loc = GetItemLocation(locKey); - SPDLOG_DEBUG(StaticData::RetrieveItem(item).GetName().GetEnglish() + " placed at " + StaticData::GetLocation(locKey)->GetName() + "\n"); - - if (applyEffectImmediately || mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_GLITCHLESS) || mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_VANILLA)) { + SPDLOG_DEBUG(StaticData::RetrieveItem(item).GetName().GetEnglish() + " placed at " + + StaticData::GetLocation(locKey)->GetName() + "\n"); + + if (applyEffectImmediately || mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_GLITCHLESS) || + mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_VANILLA)) { StaticData::RetrieveItem(item).ApplyEffect(); } @@ -151,8 +154,8 @@ void Context::AddLocations(const Container& locations, std::vectorGetQuest() == RCQUEST_BOTH || - loc->GetQuest() == RCQUEST_MQ && mDungeons->GetDungeonFromScene(loc->GetScene())->IsMQ() || - loc->GetQuest() == RCQUEST_VANILLA && mDungeons->GetDungeonFromScene(loc->GetScene())->IsVanilla(); + loc->GetQuest() == RCQUEST_MQ && mDungeons->GetDungeonFromScene(loc->GetScene())->IsMQ() || + loc->GetQuest() == RCQUEST_VANILLA && mDungeons->GetDungeonFromScene(loc->GetScene())->IsVanilla(); } void Context::GenerateLocationPool() { @@ -162,23 +165,30 @@ void Context::GenerateLocationPool() { // 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.GetRandomizerCheck() == RC_MASTER_SWORD_PEDESTAL && mOptions[RSK_SHUFFLE_MASTER_SWORD].Is(RO_GENERIC_OFF)) || - (location.GetRandomizerCheck() == RC_KAK_100_GOLD_SKULLTULA_REWARD && mOptions[RSK_SHUFFLE_100_GS_REWARD].Is(RO_GENERIC_OFF)) || - 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.GetRandomizerCheck() == RC_MASTER_SWORD_PEDESTAL && + mOptions[RSK_SHUFFLE_MASTER_SWORD].Is(RO_GENERIC_OFF)) || + (location.GetRandomizerCheck() == RC_KAK_100_GOLD_SKULLTULA_REWARD && + mOptions[RSK_SHUFFLE_100_GS_REWARD].Is(RO_GENERIC_OFF)) || + 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_FROG_SONG && mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES].Is(RO_GENERIC_OFF)) || (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_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_ADULT_TRADE && mOptions[RSK_SHUFFLE_ADULT_TRADE].Is(RO_GENERIC_OFF)) || (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.GetRandomizerCheck() == RC_LH_HYRULE_LOACH && + mOptions[RSK_FISHSANITY].IsNot(RO_FISHSANITY_HYRULE_LOACH)) || (location.GetRCType() == RCTYPE_FISH && !mFishsanity->GetFishLocationIncluded(&location)) || (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OFF)) || + (location.GetRCType() == RCTYPE_GRASS && mOptions[RSK_SHUFFLE_GRASS].Is(RO_SHUFFLE_GRASS_OFF)) || + (location.GetRCType() == RCTYPE_CRATE && mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OFF)) || + (location.GetRCType() == RCTYPE_NLCRATE && (mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OFF) || + !mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_NO_LOGIC))) || + (location.GetRCType() == RCTYPE_SMALL_CRATE && mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OFF)) || (location.GetRCType() == RCTYPE_FAIRY && !mOptions[RSK_SHUFFLE_FAIRIES]) || (location.GetRCType() == RCTYPE_FREESTANDING && mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OFF)) || @@ -188,8 +198,17 @@ void Context::GenerateLocationPool() { 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))) { + 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)) || + (location.GetRCType() == RCTYPE_GRASS && mOptions[RSK_SHUFFLE_GRASS].Is(RO_SHUFFLE_GRASS_DUNGEONS)) || + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_DUNGEONS)) || + (location.GetRCType() == RCTYPE_CRATE && mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_DUNGEONS)) || + (location.GetRCType() == RCTYPE_NLCRATE && + mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_DUNGEONS) && + mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_NO_LOGIC)) || + (location.GetRCType() == RCTYPE_SMALL_CRATE && + mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_DUNGEONS))) { continue; } // If we've gotten past all the conditions where an overworld location should not be @@ -201,7 +220,16 @@ void Context::GenerateLocationPool() { 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))) { + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OVERWORLD)) || + (location.GetRCType() == RCTYPE_GRASS && + mOptions[RSK_SHUFFLE_GRASS].Is(RO_SHUFFLE_GRASS_OVERWORLD)) || + (location.GetRCType() == RCTYPE_CRATE && + mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OVERWORLD)) || + (location.GetRCType() == RCTYPE_NLCRATE && + mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OVERWORLD) && + mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_NO_LOGIC)) || + (location.GetRCType() == RCTYPE_SMALL_CRATE && + mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OVERWORLD))) { continue; } // also add to that dungeon's location list. @@ -215,15 +243,14 @@ void Context::GenerateLocationPool() { void Context::AddExcludedOptions() { 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) { + 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; - for (Option* location : Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc.GetArea())) - { + for (Option* location : Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc.GetArea())) { if (location->GetName() == loc.GetExcludedOption()->GetName()) { alreadyAdded = true; } @@ -234,7 +261,8 @@ void Context::AddExcludedOptions() { } } -std::vector Context::GetLocations(const std::vector& locationPool, const RandomizerCheckType checkType) { +std::vector Context::GetLocations(const std::vector& locationPool, + const RandomizerCheckType checkType) { std::vector locationsOfType; for (RandomizerCheck locKey : locationPool) { if (StaticData::GetLocation(locKey)->GetRCType() == checkType) { @@ -273,7 +301,7 @@ void Context::HintReset() { for (const RandomizerCheck il : StaticData::GetGossipStoneLocations()) { GetItemLocation(il)->ResetVariables(); } - for (Hint& hint : hintTable){ + for (Hint& hint : hintTable) { hint.ResetVariables(); } } @@ -316,7 +344,8 @@ void Context::SetSpoilerLoaded(const bool spoilerLoaded) { mSpoilerLoaded = spoilerLoaded; } -GetItemEntry Context::GetFinalGIEntry(const RandomizerCheck rc, const bool checkObtainability, const GetItemID ogItemId) { +GetItemEntry Context::GetFinalGIEntry(const RandomizerCheck rc, const bool checkObtainability, + const GetItemID ogItemId) { const auto itemLoc = GetItemLocation(rc); if (itemLoc->GetPlacedRandomizerGet() == RG_NONE) { if (ogItemId != GI_NONE) { @@ -377,9 +406,7 @@ void Context::ParseSpoiler(const char* spoilerFileName) { mTrials->ParseJson(spoilerFileJson); mSpoilerLoaded = true; mSeedGenerated = false; - } catch (...) { - LUSLOG_ERROR("Failed to load Spoiler File: %s", spoilerFileName); - } + } catch (...) { LUSLOG_ERROR("Failed to load Spoiler File: %s", spoilerFileName); } } void Context::ParseHashIconIndexesJson(nlohmann::json spoilerFileJson) { @@ -414,16 +441,16 @@ void Context::ParseItemLocationsJson(nlohmann::json spoilerFileJson) { } } -void Context::WriteHintJson(nlohmann::ordered_json& spoilerFileJson){ - for (Hint hint: hintTable){ +void Context::WriteHintJson(nlohmann::ordered_json& spoilerFileJson) { + for (Hint hint : hintTable) { hint.logHint(spoilerFileJson); } } -nlohmann::json getValueForMessage(std::unordered_map map, CustomMessage message){ +nlohmann::json getValueForMessage(std::unordered_map map, CustomMessage message) { std::vector strings = message.GetAllMessages(); - for (uint8_t language = 0; language < LANGUAGE_MAX; language++){ - if (map.contains(strings[language])){ + for (uint8_t language = 0; language < LANGUAGE_MAX; language++) { + if (map.contains(strings[language])) { return strings[language]; } } @@ -431,11 +458,11 @@ nlohmann::json getValueForMessage(std::unordered_map* destination = nullptr); bool IsQuestOfLocationActive(RandomizerCheck rc); void GenerateLocationPool(); - static std::vector GetLocations(const std::vector& locationPool, const RandomizerCheckType checkType); + static std::vector GetLocations(const std::vector& locationPool, + const RandomizerCheckType checkType); void AddExcludedOptions(); void LocationReset(); void ClearItemLocations(); diff --git a/soh/soh/Enhancements/randomizer/draw.cpp b/soh/soh/Enhancements/randomizer/draw.cpp index 9c9cfd829..0403966b7 100644 --- a/soh/soh/Enhancements/randomizer/draw.cpp +++ b/soh/soh/Enhancements/randomizer/draw.cpp @@ -40,29 +40,19 @@ extern SaveContext gSaveContext; } const char* SmallBodyCvarValue[10] = { - CVAR_COSMETIC("Key.ForestSmallBody.Value"), - CVAR_COSMETIC("Key.FireSmallBody.Value"), - CVAR_COSMETIC("Key.WaterSmallBody.Value"), - CVAR_COSMETIC("Key.SpiritSmallBody.Value"), - CVAR_COSMETIC("Key.ShadowSmallBody.Value"), - CVAR_COSMETIC("Key.WellSmallBody.Value"), - CVAR_COSMETIC("Key.GTGSmallBody.Value"), - CVAR_COSMETIC("Key.FortSmallBody.Value"), - CVAR_COSMETIC("Key.GanonsSmallBody.Value"), - CVAR_COSMETIC("Key.ChestGameSmallBody.Value"), + CVAR_COSMETIC("Key.ForestSmallBody.Value"), CVAR_COSMETIC("Key.FireSmallBody.Value"), + CVAR_COSMETIC("Key.WaterSmallBody.Value"), CVAR_COSMETIC("Key.SpiritSmallBody.Value"), + CVAR_COSMETIC("Key.ShadowSmallBody.Value"), CVAR_COSMETIC("Key.WellSmallBody.Value"), + CVAR_COSMETIC("Key.GTGSmallBody.Value"), CVAR_COSMETIC("Key.FortSmallBody.Value"), + CVAR_COSMETIC("Key.GanonsSmallBody.Value"), CVAR_COSMETIC("Key.ChestGameSmallBody.Value"), }; const char* SmallEmblemCvarValue[10] = { - CVAR_COSMETIC("Key.ForestSmallEmblem.Value"), - CVAR_COSMETIC("Key.FireSmallEmblem.Value"), - CVAR_COSMETIC("Key.WaterSmallEmblem.Value"), - CVAR_COSMETIC("Key.SpiritSmallEmblem.Value"), - CVAR_COSMETIC("Key.ShadowSmallEmblem.Value"), - CVAR_COSMETIC("Key.WellSmallEmblem.Value"), - CVAR_COSMETIC("Key.GTGSmallEmblem.Value"), - CVAR_COSMETIC("Key.FortSmallEmblem.Value"), - CVAR_COSMETIC("Key.GanonsSmallEmblem.Value"), - CVAR_COSMETIC("Key.ChestGameEmblem.Value"), + CVAR_COSMETIC("Key.ForestSmallEmblem.Value"), CVAR_COSMETIC("Key.FireSmallEmblem.Value"), + CVAR_COSMETIC("Key.WaterSmallEmblem.Value"), CVAR_COSMETIC("Key.SpiritSmallEmblem.Value"), + CVAR_COSMETIC("Key.ShadowSmallEmblem.Value"), CVAR_COSMETIC("Key.WellSmallEmblem.Value"), + CVAR_COSMETIC("Key.GTGSmallEmblem.Value"), CVAR_COSMETIC("Key.FortSmallEmblem.Value"), + CVAR_COSMETIC("Key.GanonsSmallEmblem.Value"), CVAR_COSMETIC("Key.ChestGameEmblem.Value"), }; Color_RGB8 SmallEmblemDefaultValue[10] = { @@ -85,16 +75,11 @@ extern "C" void Randomizer_DrawSmallKey(PlayState* play, GetItemEntry* getItemEn int slot = getItemEntry->drawItemId - RG_FOREST_TEMPLE_SMALL_KEY; Gfx* customIconDLs[] = { - (Gfx*)gSmallKeyIconForestTempleDL, - (Gfx*)gSmallKeyIconFireTempleDL, - (Gfx*)gSmallKeyIconWaterTempleDL, - (Gfx*)gSmallKeyIconSpiritTempleDL, - (Gfx*)gSmallKeyIconShadowTempleDL, - (Gfx*)gSmallKeyIconBottomoftheWellDL, - (Gfx*)gSmallKeyIconGerudoTrainingGroundDL, - (Gfx*)gSmallKeyIconGerudoFortressDL, - (Gfx*)gSmallKeyIconGanonsCastleDL, - (Gfx*)gSmallKeyIconTreasureChestGameDL, + (Gfx*)gSmallKeyIconForestTempleDL, (Gfx*)gSmallKeyIconFireTempleDL, + (Gfx*)gSmallKeyIconWaterTempleDL, (Gfx*)gSmallKeyIconSpiritTempleDL, + (Gfx*)gSmallKeyIconShadowTempleDL, (Gfx*)gSmallKeyIconBottomoftheWellDL, + (Gfx*)gSmallKeyIconGerudoTrainingGroundDL, (Gfx*)gSmallKeyIconGerudoFortressDL, + (Gfx*)gSmallKeyIconGanonsCastleDL, (Gfx*)gSmallKeyIconTreasureChestGameDL, }; OPEN_DISPS(play->state.gfxCtx); @@ -117,7 +102,7 @@ extern "C" void Randomizer_DrawSmallKey(PlayState* play, GetItemEntry* getItemEn emblemColor = CVarGetColor24(SmallEmblemCvarValue[slot], emblemColor); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), - G_MTX_MODELVIEW | G_MTX_LOAD); + G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetEnvColor(POLY_XLU_DISP++, emblemColor.r, emblemColor.g, emblemColor.b, 255); gSPDisplayList(POLY_XLU_DISP++, customIconDLs[slot]); @@ -144,13 +129,14 @@ extern "C" void Randomizer_DrawMap(PlayState* play, GetItemEntry* getItemEntry) { 222, 158, 47 }, // Spirit Temple { 126, 16, 177 }, // Shadow Temple { 227, 110, 255 }, // Bottom of the Well - { 0, 255, 255 }, // Ice Cavern + { 0, 255, 255 }, // Ice Cavern }; OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx); - gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, colors[color_slot][0], colors[color_slot][1], colors[color_slot][2], 255); @@ -179,15 +165,18 @@ extern "C" void Randomizer_DrawCompass(PlayState* play, GetItemEntry* getItemEnt OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx); - gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, colors[color_slot][0], colors[color_slot][1], colors[color_slot][2], 255); - gDPSetEnvColor(POLY_OPA_DISP++, colors[color_slot][0] / 2, colors[color_slot][1] / 2, colors[color_slot][2] / 2, 255); + gDPSetEnvColor(POLY_OPA_DISP++, colors[color_slot][0] / 2, colors[color_slot][1] / 2, colors[color_slot][2] / 2, + 255); gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiCompassDL); POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, 5); - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiCompassGlassDL); CLOSE_DISPS(play->state.gfxCtx); @@ -198,21 +187,13 @@ extern "C" void Randomizer_DrawBossKey(PlayState* play, GetItemEntry* getItemEnt s16 slot = getItemEntry->getItemId - RG_FOREST_TEMPLE_BOSS_KEY; std::string CvarValue[6] = { - "gCosmetics.Key.ForestBoss", - "gCosmetics.Key.FireBoss", - "gCosmetics.Key.WaterBoss", - "gCosmetics.Key.SpiritBoss", - "gCosmetics.Key.ShadowBoss", - "gCosmetics.Key.GanonsBoss", + "gCosmetics.Key.ForestBoss", "gCosmetics.Key.FireBoss", "gCosmetics.Key.WaterBoss", + "gCosmetics.Key.SpiritBoss", "gCosmetics.Key.ShadowBoss", "gCosmetics.Key.GanonsBoss", }; Gfx* CustomdLists[] = { - (Gfx*)gBossKeyIconForestTempleDL, - (Gfx*)gBossKeyIconFireTempleDL, - (Gfx*)gBossKeyIconWaterTempleDL, - (Gfx*)gBossKeyIconSpiritTempleDL, - (Gfx*)gBossKeyIconShadowTempleDL, - (Gfx*)gBossKeyIconGanonsCastleDL, + (Gfx*)gBossKeyIconForestTempleDL, (Gfx*)gBossKeyIconFireTempleDL, (Gfx*)gBossKeyIconWaterTempleDL, + (Gfx*)gBossKeyIconSpiritTempleDL, (Gfx*)gBossKeyIconShadowTempleDL, (Gfx*)gBossKeyIconGanonsCastleDL, }; OPEN_DISPS(play->state.gfxCtx); @@ -223,14 +204,14 @@ extern "C" void Randomizer_DrawBossKey(PlayState* play, GetItemEntry* getItemEnt G_MTX_MODELVIEW | G_MTX_LOAD); Color_RGB8 keyColor = { 255, 255, 0 }; - //Supposed to use CVAR_COSMETIC but I can't figure out the syntax + // Supposed to use CVAR_COSMETIC but I can't figure out the syntax keyColor = CVarGetColor24((CvarValue[slot] + "Body.Value").c_str(), keyColor); - - if (isCustomKeysEnabled){ + + if (isCustomKeysEnabled) { gDPSetEnvColor(POLY_OPA_DISP++, keyColor.r, keyColor.g, keyColor.b, 255); gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gBossKeyCustomDL); } else { - if (CVarGetInteger((CvarValue[slot] + "Body.Changed").c_str(), false)){ + if (CVarGetInteger((CvarValue[slot] + "Body.Changed").c_str(), false)) { gDPSetGrayscaleColor(POLY_OPA_DISP++, keyColor.r, keyColor.g, keyColor.b, 255); gSPGrayscale(POLY_OPA_DISP++, true); gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiBossKeyDL); @@ -247,12 +228,12 @@ extern "C" void Randomizer_DrawBossKey(PlayState* play, GetItemEntry* getItemEnt Color_RGB8 gemColor = { 255, 0, 0 }; gemColor = CVarGetColor24((CvarValue[slot] + "Gem.Value").c_str(), gemColor); - - if (isCustomKeysEnabled){ + + if (isCustomKeysEnabled) { gDPSetEnvColor(POLY_XLU_DISP++, gemColor.r, gemColor.g, gemColor.b, 255); gSPDisplayList(POLY_XLU_DISP++, CustomdLists[slot]); } else { - if (CVarGetInteger((CvarValue[slot] + "Gem.Changed").c_str(), false)){ + if (CVarGetInteger((CvarValue[slot] + "Gem.Changed").c_str(), false)) { gDPSetGrayscaleColor(POLY_XLU_DISP++, gemColor.r, gemColor.g, gemColor.b, 255); gSPGrayscale(POLY_XLU_DISP++, true); gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiBossKeyGemDL); @@ -270,57 +251,38 @@ extern "C" void Randomizer_DrawKeyRing(PlayState* play, GetItemEntry* getItemEnt int slot = getItemEntry->drawItemId - RG_FOREST_TEMPLE_KEY_RING; Gfx* CustomIconDLs[] = { - (Gfx*)gKeyringIconForestTempleDL, - (Gfx*)gKeyringIconFireTempleDL, - (Gfx*)gKeyringIconWaterTempleDL, - (Gfx*)gKeyringIconSpiritTempleDL, - (Gfx*)gKeyringIconShadowTempleDL, - (Gfx*)gKeyringIconBottomoftheWellDL, - (Gfx*)gKeyringIconGerudoTrainingGroundDL, - (Gfx*)gKeyringIconGerudoFortressDL, - (Gfx*)gKeyringIconGanonsCastleDL, - (Gfx*)gKeyringIconTreasureChestGameDL, + (Gfx*)gKeyringIconForestTempleDL, (Gfx*)gKeyringIconFireTempleDL, + (Gfx*)gKeyringIconWaterTempleDL, (Gfx*)gKeyringIconSpiritTempleDL, + (Gfx*)gKeyringIconShadowTempleDL, (Gfx*)gKeyringIconBottomoftheWellDL, + (Gfx*)gKeyringIconGerudoTrainingGroundDL, (Gfx*)gKeyringIconGerudoFortressDL, + (Gfx*)gKeyringIconGanonsCastleDL, (Gfx*)gKeyringIconTreasureChestGameDL, }; Gfx* CustomKeysDLs[] = { - (Gfx*)gKeyringKeysForestTempleDL, - (Gfx*)gKeyringKeysFireTempleDL, - (Gfx*)gKeyringKeysWaterTempleDL, - (Gfx*)gKeyringKeysSpiritTempleDL, - (Gfx*)gKeyringKeysShadowTempleDL, - (Gfx*)gKeyringKeysBottomoftheWellDL, - (Gfx*)gKeyringKeysGerudoTrainingGroundDL, - (Gfx*)gKeyringKeysGerudoFortressDL, - (Gfx*)gKeyringKeysGanonsCastleDL, - (Gfx*)gKeyringKeysTreasureChestGameDL, + (Gfx*)gKeyringKeysForestTempleDL, (Gfx*)gKeyringKeysFireTempleDL, + (Gfx*)gKeyringKeysWaterTempleDL, (Gfx*)gKeyringKeysSpiritTempleDL, + (Gfx*)gKeyringKeysShadowTempleDL, (Gfx*)gKeyringKeysBottomoftheWellDL, + (Gfx*)gKeyringKeysGerudoTrainingGroundDL, (Gfx*)gKeyringKeysGerudoFortressDL, + (Gfx*)gKeyringKeysGanonsCastleDL, (Gfx*)gKeyringKeysTreasureChestGameDL, }; Gfx* CustomKeysMQDLs[] = { - (Gfx*)gKeyringKeysForestTempleMQDL, - (Gfx*)gKeyringKeysFireTempleMQDL, - (Gfx*)gKeyringKeysWaterTempleMQDL, - (Gfx*)gKeyringKeysSpiritTempleMQDL, - (Gfx*)gKeyringKeysShadowTempleMQDL, - (Gfx*)gKeyringKeysBottomoftheWellMQDL, - (Gfx*)gKeyringKeysGerudoTrainingGroundMQDL, - (Gfx*)gKeyringKeysGerudoFortressDL, - (Gfx*)gKeyringKeysGanonsCastleMQDL, - (Gfx*)gKeyringKeysTreasureChestGameDL, + (Gfx*)gKeyringKeysForestTempleMQDL, (Gfx*)gKeyringKeysFireTempleMQDL, + (Gfx*)gKeyringKeysWaterTempleMQDL, (Gfx*)gKeyringKeysSpiritTempleMQDL, + (Gfx*)gKeyringKeysShadowTempleMQDL, (Gfx*)gKeyringKeysBottomoftheWellMQDL, + (Gfx*)gKeyringKeysGerudoTrainingGroundMQDL, (Gfx*)gKeyringKeysGerudoFortressDL, + (Gfx*)gKeyringKeysGanonsCastleMQDL, (Gfx*)gKeyringKeysTreasureChestGameDL, }; - //RANDOTODO make DungeonInfo static and vanilla accessible to allow all these key model data vars to be stored there. - //(Rando::DungeonKey)0 means the keyring is not tied to a dungeon and should not be checked for an MQ variant + // RANDOTODO make DungeonInfo static and vanilla accessible to allow all these key model data vars to be stored + // there. (Rando::DungeonKey)0 means the keyring is not tied to a dungeon and should not be checked for an MQ + // variant Rando::DungeonKey SlotToDungeon[10] = { - Rando::FOREST_TEMPLE, - Rando::FIRE_TEMPLE, - Rando::WATER_TEMPLE, - Rando::SPIRIT_TEMPLE, - Rando::SHADOW_TEMPLE, - Rando::BOTTOM_OF_THE_WELL, - Rando::GERUDO_TRAINING_GROUND, - (Rando::DungeonKey)0, //Gerudo Fortress + Rando::FOREST_TEMPLE, Rando::FIRE_TEMPLE, Rando::WATER_TEMPLE, Rando::SPIRIT_TEMPLE, + Rando::SHADOW_TEMPLE, Rando::BOTTOM_OF_THE_WELL, Rando::GERUDO_TRAINING_GROUND, + (Rando::DungeonKey)0, // Gerudo Fortress Rando::GANONS_CASTLE, - (Rando::DungeonKey)0, //Treasure Chest Game + (Rando::DungeonKey)0, // Treasure Chest Game }; OPEN_DISPS(play->state.gfxCtx); @@ -332,12 +294,12 @@ extern "C" void Randomizer_DrawKeyRing(PlayState* play, GetItemEntry* getItemEnt if (isCustomKeysEnabled) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), - G_MTX_MODELVIEW | G_MTX_LOAD); + G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetEnvColor(POLY_OPA_DISP++, keyColor.r, keyColor.g, keyColor.b, 255); - if (SlotToDungeon[slot] != 0 && Rando::Context::GetInstance()->GetDungeon(SlotToDungeon[slot])->IsMQ()){ + if (SlotToDungeon[slot] != 0 && Rando::Context::GetInstance()->GetDungeon(SlotToDungeon[slot])->IsMQ()) { gSPDisplayList(POLY_OPA_DISP++, (Gfx*)CustomKeysMQDLs[slot]); - } else { + } else { gSPDisplayList(POLY_OPA_DISP++, (Gfx*)CustomKeysDLs[slot]); } @@ -351,7 +313,7 @@ extern "C" void Randomizer_DrawKeyRing(PlayState* play, GetItemEntry* getItemEnt Gfx_SetupDL_25Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), - G_MTX_MODELVIEW | G_MTX_LOAD); + G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetEnvColor(POLY_OPA_DISP++, emblemColor.r, emblemColor.g, emblemColor.b, 255); gSPDisplayList(POLY_OPA_DISP++, CustomIconDLs[slot]); @@ -370,7 +332,7 @@ extern "C" void Randomizer_DrawKeyRing(PlayState* play, GetItemEntry* getItemEnt Matrix_RotateZ(-(0.20f * 2), MTXMODE_APPLY); for (int i = 0; i < 5; i++) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), - G_MTX_MODELVIEW | G_MTX_LOAD); + G_MTX_MODELVIEW | G_MTX_LOAD); Matrix_Translate(3.12f, -0.34f, 17.53f, MTXMODE_APPLY); Matrix_RotateX(-0.31f, MTXMODE_APPLY); Matrix_RotateY(0.19f, MTXMODE_APPLY); @@ -387,8 +349,9 @@ extern "C" void Randomizer_DrawDoubleDefense(PlayState* play, GetItemEntry* getI OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_25Xlu(play->state.gfxCtx); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetGrayscaleColor(POLY_XLU_DISP++, 255, 255, 255, 255); gSPGrayscale(POLY_XLU_DISP++, true); @@ -409,8 +372,8 @@ extern "C" void Randomizer_DrawMasterSword(PlayState* play, GetItemEntry* getIte gSPSegment(POLY_OPA_DISP++, 0x08, (uintptr_t)Gfx_TwoTexScroll(play->state.gfxCtx, 0, 1 * (play->state.frames * 1), - 0 * (play->state.frames * 1), 32, 32, 1, 0 * (play->state.frames * 1), - 0 * (play->state.frames * 1), 32, 32)); + 0 * (play->state.frames * 1), 32, 32, 1, 0 * (play->state.frames * 1), + 0 * (play->state.frames * 1), 32, 32)); Matrix_Scale(0.05f, 0.05f, 0.05f, MTXMODE_APPLY); Matrix_RotateZ(2.1f, MTXMODE_APPLY); @@ -419,7 +382,7 @@ extern "C" void Randomizer_DrawMasterSword(PlayState* play, GetItemEntry* getIte G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, (Gfx*)object_toki_objects_DL_001BD0); - + CLOSE_DISPS(play->state.gfxCtx); } @@ -482,7 +445,7 @@ extern "C" void Randomizer_DrawTriforcePieceGI(PlayState* play, GetItemEntry get } else if (triforcePieceScale < 0.035f) { triforcePieceScale += 0.0005f; } - } else if (triforcePieceScale > 0.00008f && triforcePieceScale < 0.035f) { + } else if (triforcePieceScale > 0.00008f && triforcePieceScale < 0.035f) { triforcePieceScale += 0.0005f; } @@ -514,7 +477,8 @@ extern "C" void Randomizer_DrawMysteryItem(PlayState* play, GetItemEntry* getIte Gfx_SetupDL_25Xlu(play->state.gfxCtx); - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetGrayscaleColor(POLY_XLU_DISP++, color.r, color.g, color.b, 255); gSPGrayscale(POLY_XLU_DISP++, true); @@ -619,7 +583,8 @@ extern "C" void DrawKingDodongo(PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -extern "C" s32 OverrideLimbDrawBarinade(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) { +extern "C" s32 OverrideLimbDrawBarinade(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + void* thisx) { OPEN_DISPS(play->state.gfxCtx); s16 unk_1AC = play->gameplayFrames * 0xC31; @@ -860,7 +825,8 @@ extern "C" void DrawBongoBongo(PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -extern "C" s32 OverrideLimbDrawKotake(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx) { +extern "C" s32 OverrideLimbDrawKotake(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + void* thisx) { if (limbIndex == 21) { // Head *dList = (Gfx*)gTwinrovaKotakeHeadDL; } @@ -971,18 +937,18 @@ extern "C" void Randomizer_DrawBossSoul(PlayState* play, GetItemEntry* getItemEn } else { slot = getItemEntry->drawItemId - RG_GOHMA_SOUL; } - + s16 flameColors[9][3] = { { 0, 255, 0 }, // Gohma { 255, 0, 100 }, // King Dodongo - { 50, 255, 255}, // Barinade + { 50, 255, 255 }, // Barinade { 4, 195, 46 }, // Phantom Ganon { 237, 95, 95 }, // Volvagia { 85, 180, 223 }, // Morpha { 126, 16, 177 }, // Bongo Bongo { 222, 158, 47 }, // Twinrova { 150, 150, 150 }, // Ganon/Dorf - }; + }; // Draw the blue fire DL but coloured to the boss soul. OPEN_DISPS(play->state.gfxCtx); @@ -1016,7 +982,7 @@ extern "C" void Randomizer_DrawBossSoul(PlayState* play, GetItemEntry* getItemEn } gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gBossSoulSkullDL); CLOSE_DISPS(play->state.gfxCtx); - // Draw the boss' skeleton + // Draw the boss' skeleton } else { switch (slot) { case 0: // Gohma @@ -1084,26 +1050,20 @@ extern "C" void Randomizer_DrawOcarinaButton(PlayState* play, GetItemEntry* getI s16 slot = getItemEntry->drawItemId - RG_OCARINA_A_BUTTON; Gfx* dLists[] = { - (Gfx*)gOcarinaAButtonDL, - (Gfx*)gOcarinaCUpButtonDL, - (Gfx*)gOcarinaCDownButtonDL, - (Gfx*)gOcarinaCLeftButtonDL, - (Gfx*)gOcarinaCRightButtonDL, + (Gfx*)gOcarinaAButtonDL, (Gfx*)gOcarinaCUpButtonDL, (Gfx*)gOcarinaCDownButtonDL, + (Gfx*)gOcarinaCLeftButtonDL, (Gfx*)gOcarinaCRightButtonDL, }; Color_RGB8 colors[] = { - aButtonColor, - cUpButtonColor, - cDownButtonColor, - cLeftButtonColor, - cRightButtonColor, + aButtonColor, cUpButtonColor, cDownButtonColor, cLeftButtonColor, cRightButtonColor, }; OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_25Xlu(play->state.gfxCtx); - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); gDPSetGrayscaleColor(POLY_XLU_DISP++, colors[slot].r, colors[slot].g, colors[slot].b, 255); gSPGrayscale(POLY_XLU_DISP++, true); @@ -1135,11 +1095,12 @@ extern "C" void Randomizer_DrawBronzeScale(PlayState* play, GetItemEntry* getIte Gfx_SetupDL_25Xlu(play->state.gfxCtx); gSPSegment(POLY_XLU_DISP++, 0x08, - (uintptr_t)Gfx_TwoTexScroll(play->state.gfxCtx, 0, 1 * (play->state.frames * 2), - -1 * (play->state.frames * 2), 64, 64, 1, 1 * (play->state.frames * 4), - 1 * -(play->state.frames * 4), 32, 32)); + (uintptr_t)Gfx_TwoTexScroll(play->state.gfxCtx, 0, 1 * (play->state.frames * 2), + -1 * (play->state.frames * 2), 64, 64, 1, 1 * (play->state.frames * 4), + 1 * -(play->state.frames * 4), 32, 32)); - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiBronzeScaleColorDL); gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiScaleDL); @@ -1198,7 +1159,6 @@ extern "C" void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getI CLOSE_DISPS(play->state.gfxCtx); } - extern "C" void Randomizer_DrawSkeletonKey(PlayState* play, GetItemEntry* getItemEntry) { OPEN_DISPS(play->state.gfxCtx); @@ -1215,7 +1175,7 @@ extern "C" void Randomizer_DrawSkeletonKey(PlayState* play, GetItemEntry* getIte CLOSE_DISPS(play->state.gfxCtx); } -extern "C" void Randomizer_DrawBombchuBag(PlayState* play, GetItemEntry* getItemEntry){ +extern "C" void Randomizer_DrawBombchuBag(PlayState* play, GetItemEntry* getItemEntry) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_26Opa(play->state.gfxCtx); @@ -1237,13 +1197,13 @@ extern "C" void Randomizer_DrawBombchuBag(PlayState* play, GetItemEntry* getItem } extern "C" void Randomizer_DrawBombchuBagInLogic(PlayState* play, GetItemEntry* getItemEntry) { - if(IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_BOMBCHU_BAG)){ + if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_BOMBCHU_BAG)) { Randomizer_DrawBombchuBag(play, getItemEntry); } else { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_26Opa(play->state.gfxCtx); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), - G_MTX_MODELVIEW | G_MTX_LOAD); + G_MTX_MODELVIEW | G_MTX_LOAD); gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiBombchuDL); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/soh/soh/Enhancements/randomizer/draw.h b/soh/soh/Enhancements/randomizer/draw.h index 22d8466c6..8483a7bf9 100644 --- a/soh/soh/Enhancements/randomizer/draw.h +++ b/soh/soh/Enhancements/randomizer/draw.h @@ -28,8 +28,11 @@ void Randomizer_DrawBombchuBagInLogic(PlayState* play, GetItemEntry* getItemEntr void Randomizer_DrawBombchuBag(PlayState* play, GetItemEntry* getItemEntry); void Randomizer_DrawOverworldKey(PlayState* play, GetItemEntry* getItemEntry); -#define GET_ITEM_MYSTERY \ - { ITEM_NONE_FE, 0, 0, 0, 0, MOD_RANDOMIZER, MOD_RANDOMIZER, ITEM_NONE_FE, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_JUNK, ITEM_NONE_FE, MOD_RANDOMIZER, (CustomDrawFunc)Randomizer_DrawMysteryItem } +#define GET_ITEM_MYSTERY \ + { \ + ITEM_NONE_FE, 0, 0, 0, 0, MOD_RANDOMIZER, MOD_RANDOMIZER, ITEM_NONE_FE, 0, false, ITEM_FROM_NPC, \ + ITEM_CATEGORY_JUNK, ITEM_NONE_FE, MOD_RANDOMIZER, (CustomDrawFunc)Randomizer_DrawMysteryItem \ + } #ifdef __cplusplus }; #endif diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 8b749faf8..1eb88ed73 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -6,15 +6,16 @@ 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_) + 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_) : name(std::move(name_)), hintKey(hintKey_), map(map_), compass(compass_), smallKey(smallKey_), keyRing(keyRing_), bossKey(bossKey_), area(area_), vanillaKeyCount(vanillaKeyCount_), mqKeyCount(mqKeyCount_), mqSetting(mqSetting_) { } -DungeonInfo::DungeonInfo() : hintKey(RHT_NONE), map(RG_NONE), compass(RG_NONE), smallKey(RG_NONE), keyRing(RG_NONE), - bossKey(RG_NONE) {} +DungeonInfo::DungeonInfo() + : hintKey(RHT_NONE), map(RG_NONE), compass(RG_NONE), smallKey(RG_NONE), keyRing(RG_NONE), bossKey(RG_NONE) { +} DungeonInfo::~DungeonInfo() = default; const std::string& DungeonInfo::GetName() const { @@ -145,35 +146,38 @@ std::vector DungeonInfo::GetDungeonLocations() const { } 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); - 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); - 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); - 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); - 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); - 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); - 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); - 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); - 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); + 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); + 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); + 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); + 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); + 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); + 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); + 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); + 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); + 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); 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); - 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); + 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); 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); diff --git a/soh/soh/Enhancements/randomizer/dungeon.h b/soh/soh/Enhancements/randomizer/dungeon.h index 5d26036eb..ba81d289d 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.h +++ b/soh/soh/Enhancements/randomizer/dungeon.h @@ -11,7 +11,7 @@ namespace Rando { class DungeonInfo { public: DungeonInfo(std::string name_, RandomizerHintTextKey hintKey_, RandomizerGet map_, RandomizerGet compass_, - RandomizerGet smallKey_, RandomizerGet keyRing_, RandomizerGet bossKey_, RandomizerArea area_, + RandomizerGet smallKey_, RandomizerGet keyRing_, RandomizerGet bossKey_, RandomizerArea area_, uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, RandomizerSettingKey mqSetting_); DungeonInfo(); ~DungeonInfo(); @@ -86,11 +86,12 @@ class Dungeons { /// this new array can be shuffled for the purposes of randomizing MQ dungeons. /// If you want an individual DungeonInfo entry you should use the GetDungeon /// function from either here or the Context class. - /// @return + /// @return std::array GetDungeonList(); size_t GetDungeonListSize() const; void ParseJson(nlohmann::json spoilerFileJson); + private: std::array dungeonList; }; -} \ No newline at end of file +} // namespace Rando \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/entrance.cpp b/soh/soh/Enhancements/randomizer/entrance.cpp index 81afbf33c..05638a2b3 100644 --- a/soh/soh/Enhancements/randomizer/entrance.cpp +++ b/soh/soh/Enhancements/randomizer/entrance.cpp @@ -11,7 +11,8 @@ namespace Rando { EntranceLinkInfo NO_RETURN_ENTRANCE = { EntranceType::None, RR_NONE, RR_NONE, -1 }; Entrance::Entrance(RandomizerRegion connectedRegion_, ConditionFn condition_function_, bool spreadsAreasWithPriority_) - : connectedRegion(connectedRegion_), condition_function(condition_function_), spreadsAreasWithPriority(spreadsAreasWithPriority_){ + : connectedRegion(connectedRegion_), condition_function(condition_function_), + spreadsAreasWithPriority(spreadsAreasWithPriority_) { originalConnectedRegion = connectedRegion_; } @@ -20,11 +21,11 @@ void Entrance::SetCondition(ConditionFn newCondition) { } bool Entrance::GetConditionsMet() const { - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_GLITCHLESS)) { - return condition_function(); - } - return true; + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_GLITCHLESS)) { + return condition_function(); + } + return true; } std::string Entrance::to_string() const { @@ -60,24 +61,24 @@ void Entrance::printAgeTimeAccess() { } bool Entrance::ConditionsMet(bool allAgeTimes) const { - auto ctx = Rando::Context::GetInstance(); - StartPerformanceTimer(PT_ENTRANCE_LOGIC); - Region* parent = RegionTable(parentRegion); - int conditionsMet = 0; + auto ctx = Rando::Context::GetInstance(); + StartPerformanceTimer(PT_ENTRANCE_LOGIC); + Region* parent = RegionTable(parentRegion); + int conditionsMet = 0; - if (allAgeTimes && !parent->AllAccess()) { - StopPerformanceTimer(PT_ENTRANCE_LOGIC); - return false; - } + if (allAgeTimes && !parent->AllAccess()) { + StopPerformanceTimer(PT_ENTRANCE_LOGIC); + return false; + } - // check all possible day/night condition combinations - conditionsMet = (parent->childDay && CheckConditionAtAgeTime(logic->IsChild, logic->AtDay, allAgeTimes)) + - (parent->childNight && CheckConditionAtAgeTime(logic->IsChild, logic->AtNight, allAgeTimes)) + - (parent->adultDay && CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay, allAgeTimes)) + - (parent->adultNight && CheckConditionAtAgeTime(logic->IsAdult, logic->AtNight, allAgeTimes)); + // check all possible day/night condition combinations + conditionsMet = (parent->childDay && CheckConditionAtAgeTime(logic->IsChild, logic->AtDay, allAgeTimes)) + + (parent->childNight && CheckConditionAtAgeTime(logic->IsChild, logic->AtNight, allAgeTimes)) + + (parent->adultDay && CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay, allAgeTimes)) + + (parent->adultNight && CheckConditionAtAgeTime(logic->IsAdult, logic->AtNight, allAgeTimes)); - StopPerformanceTimer(PT_ENTRANCE_LOGIC); - return conditionsMet && (!allAgeTimes || conditionsMet == 4); + StopPerformanceTimer(PT_ENTRANCE_LOGIC); + return conditionsMet && (!allAgeTimes || conditionsMet == 4); } uint32_t Entrance::Getuint32_t() const { @@ -227,13 +228,13 @@ Entrance* Entrance::AssumeReachable() { return assumed; } -bool Entrance::DoesSpreadAreas(){ - return spreadsAreasWithPriority; +bool Entrance::DoesSpreadAreas() { + return spreadsAreasWithPriority; } EntranceShuffler::EntranceShuffler() { - playthroughEntrances = {}; - entranceOverrides = {}; + playthroughEntrances = {}; + entranceOverrides = {}; } bool EntranceShuffler::HasNoRandomEntrances() { @@ -532,7 +533,8 @@ static bool ValidateWorld(Entrance* entrancePlaced) { // The player should be able to get back to ToT after going through time, without having collected any items // This is important to ensure that the player never loses access to the pedestal after going through time - if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD) && !RegionTable(RR_TEMPLE_OF_TIME)->Adult()) { + if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD) && + !RegionTable(RR_TEMPLE_OF_TIME)->Adult()) { SPDLOG_DEBUG("Path to Temple of Time as adult is not guaranteed\n"); return false; } else if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_ADULT) && @@ -856,6 +858,7 @@ int EntranceShuffler::ShuffleAllEntrances() { mCurNumRandomizedEntrances = 0; std::vector entranceShuffleTable = { + // clang-format off // Type Parent Region Connected Region Index { { EntranceType::Dungeon, RR_KF_OUTSIDE_DEKU_TREE, RR_DEKU_TREE_ENTRYWAY, ENTR_DEKU_TREE_ENTRANCE }, { EntranceType::Dungeon, RR_DEKU_TREE_ENTRYWAY, RR_KF_OUTSIDE_DEKU_TREE, ENTR_KOKIRI_FOREST_OUTSIDE_DEKU_TREE } }, @@ -1161,6 +1164,7 @@ int EntranceShuffler::ShuffleAllEntrances() { NO_RETURN_ENTRANCE }, { { EntranceType::BlueWarp, RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION, ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP }, NO_RETURN_ENTRANCE }, + // clang-format on }; std::map priorityEntranceTable = { @@ -1572,7 +1576,7 @@ int EntranceShuffler::ShuffleAllEntrances() { void EntranceShuffler::CreateEntranceOverrides() { auto ctx = Rando::Context::GetInstance(); - entranceOverrides.fill({0, 0, 0, 0, 0}); + entranceOverrides.fill({ 0, 0, 0, 0, 0 }); if (mNoRandomEntrances) { return; } diff --git a/soh/soh/Enhancements/randomizer/entrance.h b/soh/soh/Enhancements/randomizer/entrance.h index 48a80c550..026da7426 100644 --- a/soh/soh/Enhancements/randomizer/entrance.h +++ b/soh/soh/Enhancements/randomizer/entrance.h @@ -96,8 +96,8 @@ class Entrance { bool addedToPool = false; bool decoupled = false; std::string name = ""; - //If this is false, areas only spread to interiors through this entrance if there is no other choice - //Set to false for owl drops, the windmill path between dampe's grave and windmill and blue warps + // If this is false, areas only spread to interiors through this entrance if there is no other choice + // Set to false for owl drops, the windmill path between dampe's grave and windmill and blue warps bool spreadsAreasWithPriority = true; }; @@ -128,6 +128,7 @@ class EntranceShuffler { void CreateEntranceOverrides(); void UnshuffleAllEntrances(); void ParseJson(nlohmann::json spoilerFileJson); + private: std::vector AssumeEntrancePool(std::vector& entrancePool); bool ShuffleOneWayPriorityEntrances(std::map& oneWayPriorities, @@ -150,7 +151,7 @@ class EntranceShuffler { extern "C" { #endif - EntranceOverride* Randomizer_GetEntranceOverrides(); +EntranceOverride* Randomizer_GetEntranceOverrides(); #ifdef __cplusplus } #endif diff --git a/soh/soh/Enhancements/randomizer/fishsanity.cpp b/soh/soh/Enhancements/randomizer/fishsanity.cpp index 9da52ddc2..fe9b4c0f1 100644 --- a/soh/soh/Enhancements/randomizer/fishsanity.cpp +++ b/soh/soh/Enhancements/randomizer/fishsanity.cpp @@ -21,18 +21,18 @@ extern PlayState* gPlayState; /** * @brief Parallel list of pond fish checks for both ages -*/ + */ std::array, 17> Rando::StaticData::randomizerFishingPondFish = { { /* Child Check Adult Check */ - { RC_LH_CHILD_FISH_1, RC_LH_ADULT_FISH_1 }, - { RC_LH_CHILD_FISH_2, RC_LH_ADULT_FISH_2 }, - { RC_LH_CHILD_FISH_3, RC_LH_ADULT_FISH_3 }, - { RC_LH_CHILD_FISH_4, RC_LH_ADULT_FISH_4 }, - { RC_LH_CHILD_FISH_5, RC_LH_ADULT_FISH_5 }, - { RC_LH_CHILD_FISH_6, RC_LH_ADULT_FISH_6 }, - { RC_LH_CHILD_FISH_7, RC_LH_ADULT_FISH_7 }, - { RC_LH_CHILD_FISH_8, RC_LH_ADULT_FISH_8 }, - { RC_LH_CHILD_FISH_9, RC_LH_ADULT_FISH_9 }, + { RC_LH_CHILD_FISH_1, RC_LH_ADULT_FISH_1 }, + { RC_LH_CHILD_FISH_2, RC_LH_ADULT_FISH_2 }, + { RC_LH_CHILD_FISH_3, RC_LH_ADULT_FISH_3 }, + { RC_LH_CHILD_FISH_4, RC_LH_ADULT_FISH_4 }, + { RC_LH_CHILD_FISH_5, RC_LH_ADULT_FISH_5 }, + { RC_LH_CHILD_FISH_6, RC_LH_ADULT_FISH_6 }, + { RC_LH_CHILD_FISH_7, RC_LH_ADULT_FISH_7 }, + { RC_LH_CHILD_FISH_8, RC_LH_ADULT_FISH_8 }, + { RC_LH_CHILD_FISH_9, RC_LH_ADULT_FISH_9 }, { RC_LH_CHILD_FISH_10, RC_LH_ADULT_FISH_10 }, { RC_LH_CHILD_FISH_11, RC_LH_ADULT_FISH_11 }, { RC_LH_CHILD_FISH_12, RC_LH_ADULT_FISH_12 }, @@ -53,282 +53,287 @@ std::unordered_map Rando::StaticData::randomizerGrottoF ActorFunc drawFishing = NULL; ActorFunc drawEnFish = NULL; -Color_RGBA16 fsPulseColor = { 30, 240, 200 }; +Color_RGB8 fsPulseColor = { 30, 240, 200 }; namespace Rando { - const FishIdentity Fishsanity::defaultIdentity = { RAND_INF_MAX, RC_UNKNOWN_CHECK }; - bool Fishsanity::fishsanityHelpersInit = false; - s16 Fishsanity::fishGroupCounter = 0; - bool Fishsanity::enableAdvance = false; - std::unordered_map Fishsanity::pondFishAgeMap; - std::vector Fishsanity::childPondFish; - std::vector Fishsanity::adultPondFish; +const FishIdentity Fishsanity::defaultIdentity = { RAND_INF_MAX, RC_UNKNOWN_CHECK }; +bool Fishsanity::fishsanityHelpersInit = false; +s16 Fishsanity::fishGroupCounter = 0; +bool Fishsanity::enableAdvance = false; +std::unordered_map Fishsanity::pondFishAgeMap; +std::vector Fishsanity::childPondFish; +std::vector Fishsanity::adultPondFish; - Fishsanity::Fishsanity() { - InitializeHelpers(); - } +Fishsanity::Fishsanity() { + InitializeHelpers(); +} - Fishsanity::~Fishsanity() { - - } +Fishsanity::~Fishsanity() { +} - bool Fishsanity::GetFishLocationIncluded(Rando::Location* loc, - FishsanityOptionsSource optionsSource) { - auto [mode, numFish, ageSplit] = GetOptions(optionsSource); +bool Fishsanity::GetFishLocationIncluded(Rando::Location* loc, FishsanityOptionsSource optionsSource) { + auto [mode, numFish, ageSplit] = GetOptions(optionsSource); - if (loc->GetRCType() != RCTYPE_FISH || mode == RO_FISHSANITY_OFF) { - return false; - } - RandomizerCheck rc = loc->GetRandomizerCheck(); - // Are pond fish enabled, and is this a pond fish location? - if (mode != RO_FISHSANITY_OVERWORLD && numFish > 0 && loc->GetScene() == SCENE_FISHING_POND && - loc->GetActorID() == ACTOR_FISHING) { - // Is this a child fish location? If so, is it within the defined number of pond fish checks? - if (rc >= RC_LH_CHILD_FISH_1 && rc <= RC_LH_CHILD_LOACH_2 && numFish > (loc->GetActorParams() - 100)) { - return true; - } - // Are adult fish available, and is this an adult fish location? If so, is it within the defined number of pond - // fish checks? - if (ageSplit && rc >= RC_LH_ADULT_FISH_1 && rc <= RC_LH_ADULT_LOACH && numFish > (loc->GetActorParams() - 100)) { - return true; - } - } - // Are overworld fish enabled, and is this an overworld fish location? - if (mode != RO_FISHSANITY_POND && (loc->GetScene() == SCENE_GROTTOS || loc->GetScene() == SCENE_ZORAS_DOMAIN) - && loc->GetActorID() == ACTOR_EN_FISH && (loc->GetActorParams() >> 8)) { - return true; - } - // Must not be an included fish location! + if (loc->GetRCType() != RCTYPE_FISH || mode == RO_FISHSANITY_OFF) { return false; } - - std::pair, std::vector> - Fishsanity::GetFishingPondLocations(FishsanityOptionsSource optionsSource) { - auto [mode, numFish, ageSplit] = GetOptions(optionsSource); - std::vector activeFish; - std::vector remainingFish; - std::vector pondFish = Rando::StaticData::GetPondFishLocations(); - - // Fishsanity_InitializeHelpers(); - remainingFish.insert(remainingFish.end(), pondFish.begin(), pondFish.end()); - - // No pond fish shuffled - if (numFish == 0) { - return std::make_pair(activeFish, remainingFish); + RandomizerCheck rc = loc->GetRandomizerCheck(); + // Are pond fish enabled, and is this a pond fish location? + if (mode != RO_FISHSANITY_OVERWORLD && numFish > 0 && loc->GetScene() == SCENE_FISHING_POND && + loc->GetActorID() == ACTOR_FISHING) { + // Is this a child fish location? If so, is it within the defined number of pond fish checks? + if (rc >= RC_LH_CHILD_FISH_1 && rc <= RC_LH_CHILD_LOACH_2 && numFish > (loc->GetActorParams() - 100)) { + return true; } - // Every pond fish is shuffled, so we can save some time - if (numFish > 16) { - // Child and adult pond fish are both shuffled, set activeFish to remainingFish and return an empty vector for - // inactive fish. - if (ageSplit) { - return std::make_pair(remainingFish, activeFish); - } - // Activate all child fish only - activeFish = FilterAndEraseFromPool( - remainingFish, [](const RandomizerCheck loc) { return pondFishAgeMap[loc] == LINK_AGE_CHILD; }); - return std::make_pair(activeFish, remainingFish); + // Are adult fish available, and is this an adult fish location? If so, is it within the defined number of pond + // fish checks? + if (ageSplit && rc >= RC_LH_ADULT_FISH_1 && rc <= RC_LH_ADULT_LOACH && + numFish > (loc->GetActorParams() - 100)) { + return true; } - // Only some pond fish are shuffled, so we have to only activate the requested number. - activeFish.insert(activeFish.end(), childPondFish.begin(), childPondFish.begin() + numFish); - // If pond is split, also add the requested number of adult fish. + } + // Are overworld fish enabled, and is this an overworld fish location? + if (mode != RO_FISHSANITY_POND && (loc->GetScene() == SCENE_GROTTOS || loc->GetScene() == SCENE_ZORAS_DOMAIN) && + loc->GetActorID() == ACTOR_EN_FISH && (loc->GetActorParams() >> 8)) { + return true; + } + // Must not be an included fish location! + return false; +} + +std::pair, std::vector> +Fishsanity::GetFishingPondLocations(FishsanityOptionsSource optionsSource) { + auto [mode, numFish, ageSplit] = GetOptions(optionsSource); + std::vector activeFish; + std::vector remainingFish; + std::vector pondFish = Rando::StaticData::GetPondFishLocations(); + + // Fishsanity_InitializeHelpers(); + remainingFish.insert(remainingFish.end(), pondFish.begin(), pondFish.end()); + + // No pond fish shuffled + if (numFish == 0) { + return std::make_pair(activeFish, remainingFish); + } + // Every pond fish is shuffled, so we can save some time + if (numFish > 16) { + // Child and adult pond fish are both shuffled, set activeFish to remainingFish and return an empty vector for + // inactive fish. if (ageSplit) { - activeFish.insert(activeFish.end(), adultPondFish.begin(), - adultPondFish.begin() + std::min(numFish, 16)); + return std::make_pair(remainingFish, activeFish); } - // NOTE: This only works because we can assume activeFish is already sorted; changes that break this assumption will - // also break this - FilterAndEraseFromPool(remainingFish, - [&](uint32_t loc) { return std::binary_search(activeFish.begin(), activeFish.end(), loc); }); - + // Activate all child fish only + activeFish = FilterAndEraseFromPool( + remainingFish, [](const RandomizerCheck loc) { return pondFishAgeMap[loc] == LINK_AGE_CHILD; }); return std::make_pair(activeFish, remainingFish); } + // Only some pond fish are shuffled, so we have to only activate the requested number. + activeFish.insert(activeFish.end(), childPondFish.begin(), childPondFish.begin() + numFish); + // If pond is split, also add the requested number of adult fish. + if (ageSplit) { + activeFish.insert(activeFish.end(), adultPondFish.begin(), + adultPondFish.begin() + std::min(numFish, 16)); + } + // NOTE: This only works because we can assume activeFish is already sorted; changes that break this assumption will + // also break this + FilterAndEraseFromPool(remainingFish, + [&](uint32_t loc) { return std::binary_search(activeFish.begin(), activeFish.end(), loc); }); - std::pair, std::vector> - Fishsanity::GetFishsanityLocations(FishsanityOptionsSource optionsSource) { - auto [mode, numFish, ageSplit] = GetOptions(optionsSource); - std::vector activeFish; - std::vector remainingFish; + return std::make_pair(activeFish, remainingFish); +} - // Add pond fish - if (mode == RO_FISHSANITY_POND || mode == RO_FISHSANITY_BOTH) { - auto pondLocations = GetFishingPondLocations(optionsSource); - activeFish.insert(activeFish.end(), pondLocations.first.begin(), pondLocations.first.end()); - remainingFish.insert(remainingFish.end(), pondLocations.second.begin(), pondLocations.second.end()); - } +std::pair, std::vector> +Fishsanity::GetFishsanityLocations(FishsanityOptionsSource optionsSource) { + auto [mode, numFish, ageSplit] = GetOptions(optionsSource); + std::vector activeFish; + std::vector remainingFish; - // Add overworld fish - if (mode == RO_FISHSANITY_OVERWORLD || mode == RO_FISHSANITY_BOTH) { - std::vector overworldFish = Rando::StaticData::GetOverworldFishLocations(); - activeFish.insert(activeFish.end(), overworldFish.begin(), overworldFish.end()); - } - - return std::make_pair(activeFish, remainingFish); + // Add pond fish + if (mode == RO_FISHSANITY_POND || mode == RO_FISHSANITY_BOTH) { + auto pondLocations = GetFishingPondLocations(optionsSource); + activeFish.insert(activeFish.end(), pondLocations.first.begin(), pondLocations.first.end()); + remainingFish.insert(remainingFish.end(), pondLocations.second.begin(), pondLocations.second.end()); } - FishIdentity Fishsanity::IdentifyPondFish(u8 fishParams) { - auto [mode, pondCount, ageSplit] = GetOptions(); - FishIdentity identity = defaultIdentity; + // Add overworld fish + if (mode == RO_FISHSANITY_OVERWORLD || mode == RO_FISHSANITY_BOTH) { + std::vector overworldFish = Rando::StaticData::GetOverworldFishLocations(); + activeFish.insert(activeFish.end(), overworldFish.begin(), overworldFish.end()); + } - if (!GetPondFishShuffled()) { - return identity; - } + return std::make_pair(activeFish, remainingFish); +} - if (pondCount > 16) { - identity = GetPondFish(fishParams, IsAdultPond()); - } else { - identity = LINK_IS_ADULT ? mCurrPondFish.second : mCurrPondFish.first; - } +FishIdentity Fishsanity::IdentifyPondFish(u8 fishParams) { + auto [mode, pondCount, ageSplit] = GetOptions(); + FishIdentity identity = defaultIdentity; + if (!GetPondFishShuffled()) { return identity; } - FishsanityPondOptions Fishsanity::GetOptions(FishsanityOptionsSource optionsSource) { - FishsanityPondOptions options{}; - switch (optionsSource) { - // Used in check tracker - case FSO_SOURCE_CVARS: - options.mode = CVarGetInteger(CVAR_RANDOMIZER_SETTING("Fishsanity"), RO_FISHSANITY_OFF); - options.numFish = CVarGetInteger(CVAR_RANDOMIZER_SETTING("FishsanityPondCount"), 0); - options.ageSplit = CVarGetInteger(CVAR_RANDOMIZER_SETTING("FishsanityAgeSplit"), 0) == 1; - break; - case FSO_SOURCE_RANDO: - default: - options.mode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY); - options.numFish = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_POND_COUNT); - options.ageSplit = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_AGE_SPLIT); - break; - } - return options; + if (pondCount > 16) { + identity = GetPondFish(fishParams, IsAdultPond()); + } else { + identity = LINK_IS_ADULT ? mCurrPondFish.second : mCurrPondFish.first; } - void Fishsanity::UpdateCurrentPondFish() { - auto [mode, pondCount, ageSplit] = GetOptions(); - mCurrPondFish = std::pair(); - mCurrPondFish.first = defaultIdentity; - mCurrPondFish.second = defaultIdentity; + return identity; +} - // Initialize mCurrPondFish if we're shuffling pond fish, but if all fish are shuffled, we don't need to use this. - if ((mode == RO_FISHSANITY_BOTH || mode == RO_FISHSANITY_POND) && pondCount < 17) { - // find the first inf that isn't set yet for each age - // but don't go past the max number - std::pair tableEntry; - for (s16 i = 0, params = 100; i < pondCount; i++, params++) { - tableEntry = Rando::StaticData::randomizerFishingPondFish[i]; - if (!Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(tableEntry.first)) || i == pondCount - 1) { - // Found first child check - if (!IsFish(&mCurrPondFish.first)) { - mCurrPondFish.first = GetPondFish(params, false); - } +FishsanityPondOptions Fishsanity::GetOptions(FishsanityOptionsSource optionsSource) { + FishsanityPondOptions options{}; + switch (optionsSource) { + // Used in check tracker + case FSO_SOURCE_CVARS: + options.mode = CVarGetInteger(CVAR_RANDOMIZER_SETTING("Fishsanity"), RO_FISHSANITY_OFF); + options.numFish = CVarGetInteger(CVAR_RANDOMIZER_SETTING("FishsanityPondCount"), 0); + options.ageSplit = CVarGetInteger(CVAR_RANDOMIZER_SETTING("FishsanityAgeSplit"), 0) == 1; + break; + case FSO_SOURCE_RANDO: + default: + options.mode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY); + options.numFish = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_POND_COUNT); + options.ageSplit = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_AGE_SPLIT); + break; + } + return options; +} - if (!ageSplit && !IsFish(&mCurrPondFish.second)) { - mCurrPondFish.second = GetPondFish(params, false); - // both ages are resolved! we can quit here - break; - } +void Fishsanity::UpdateCurrentPondFish() { + auto [mode, pondCount, ageSplit] = GetOptions(); + mCurrPondFish = std::pair(); + mCurrPondFish.first = defaultIdentity; + mCurrPondFish.second = defaultIdentity; + + // Initialize mCurrPondFish if we're shuffling pond fish, but if all fish are shuffled, we don't need to use this. + if ((mode == RO_FISHSANITY_BOTH || mode == RO_FISHSANITY_POND) && pondCount < 17) { + // find the first inf that isn't set yet for each age + // but don't go past the max number + std::pair tableEntry; + for (s16 i = 0, params = 100; i < pondCount; i++, params++) { + tableEntry = Rando::StaticData::randomizerFishingPondFish[i]; + if (!Flags_GetRandomizerInf( + OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(tableEntry.first)) || + i == pondCount - 1) { + // Found first child check + if (!IsFish(&mCurrPondFish.first)) { + mCurrPondFish.first = GetPondFish(params, false); } - if (ageSplit && !IsFish(&mCurrPondFish.second) && tableEntry.second != RC_UNKNOWN_CHECK && - (!Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(tableEntry.second)) || i == pondCount - 1)) { - mCurrPondFish.second = GetPondFish(params, true); + if (!ageSplit && !IsFish(&mCurrPondFish.second)) { + mCurrPondFish.second = GetPondFish(params, false); + // both ages are resolved! we can quit here + break; } } + + if (ageSplit && !IsFish(&mCurrPondFish.second) && tableEntry.second != RC_UNKNOWN_CHECK && + (!Flags_GetRandomizerInf( + OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(tableEntry.second)) || + i == pondCount - 1)) { + mCurrPondFish.second = GetPondFish(params, true); + } } } +} - void Fishsanity::InitializeFromSave() { - UpdateCurrentPondFish(); - } +void Fishsanity::InitializeFromSave() { + UpdateCurrentPondFish(); +} - bool Fishsanity::GetPondFishShuffled() { - u8 fsMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY); - return OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_POND_COUNT) > 0 && - (fsMode == RO_FISHSANITY_POND || fsMode == RO_FISHSANITY_BOTH); - } +bool Fishsanity::GetPondFishShuffled() { + u8 fsMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY); + return OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_POND_COUNT) > 0 && + (fsMode == RO_FISHSANITY_POND || fsMode == RO_FISHSANITY_BOTH); +} - bool Fishsanity::GetOverworldFishShuffled() { - u8 fsMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY); - return fsMode == RO_FISHSANITY_OVERWORLD || fsMode == RO_FISHSANITY_BOTH; - } +bool Fishsanity::GetOverworldFishShuffled() { + u8 fsMode = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY); + return fsMode == RO_FISHSANITY_OVERWORLD || fsMode == RO_FISHSANITY_BOTH; +} - bool Fishsanity::IsAdultPond() { - return LINK_IS_ADULT && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_AGE_SPLIT); - } +bool Fishsanity::IsAdultPond() { + return LINK_IS_ADULT && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY_AGE_SPLIT); +} - bool Fishsanity::GetPondCleared() { - auto [mode, pondCount, ageSplit] = GetOptions(); - // no fish shuffled, so pond is always cleared :thumbsup: - if (pondCount == 0) { - return true; - } - - bool adultPond = LINK_IS_ADULT && ageSplit; - // if we've collected the final shuffled fish, pond is complete - if (pondCount <= 16) { - auto tableEntry = Rando::StaticData::randomizerFishingPondFish[pondCount - 1]; - return Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(adultPond ? tableEntry.second : tableEntry.first)); - } - - // the last two checks actually don't matter because logically they will never be true, but maybe one day they will - // if every fish is shuffled, check if we've collected every fish - for (auto tableEntry : Rando::StaticData::randomizerFishingPondFish) { - RandomizerCheck rc = adultPond ? tableEntry.second : tableEntry.first; - // if we haven't collected this fish, then we're not done yet! get back in there, soldier - if (rc != RC_UNKNOWN_CHECK && !Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(rc))) { - return false; - } - } +bool Fishsanity::GetPondCleared() { + auto [mode, pondCount, ageSplit] = GetOptions(); + // no fish shuffled, so pond is always cleared :thumbsup: + if (pondCount == 0) { return true; } - bool Fishsanity::GetDomainCleared() { - for (RandomizerInf i = RAND_INF_ZD_FISH_1; i <= RAND_INF_ZD_FISH_5; i = (RandomizerInf)(i + 1)) { - if (!Flags_GetRandomizerInf(i)) { - return false; - } - } - return true; + bool adultPond = LINK_IS_ADULT && ageSplit; + // if we've collected the final shuffled fish, pond is complete + if (pondCount <= 16) { + auto tableEntry = Rando::StaticData::randomizerFishingPondFish[pondCount - 1]; + return Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck( + adultPond ? tableEntry.second : tableEntry.first)); } - void Fishsanity::InitializeHelpers() { - if (fishsanityHelpersInit) { - return; - } - - for (auto pair : Rando::StaticData::randomizerFishingPondFish) { - pondFishAgeMap[pair.first] = LINK_AGE_CHILD; - pondFishAgeMap[pair.second] = LINK_AGE_ADULT; - childPondFish.push_back(pair.first); - adultPondFish.push_back(pair.second); + // the last two checks actually don't matter because logically they will never be true, but maybe one day they will + // if every fish is shuffled, check if we've collected every fish + for (auto tableEntry : Rando::StaticData::randomizerFishingPondFish) { + RandomizerCheck rc = adultPond ? tableEntry.second : tableEntry.first; + // if we haven't collected this fish, then we're not done yet! get back in there, soldier + if (rc != RC_UNKNOWN_CHECK && + !Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(rc))) { + return false; } } + return true; +} - FishIdentity Fishsanity::GetPondFish(s16 params, bool adultPond) { - auto pair = Rando::StaticData::randomizerFishingPondFish[params - 100]; - RandomizerCheck rc = adultPond ? pair.second : pair.first; - return { OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(rc), rc }; +bool Fishsanity::GetDomainCleared() { + for (RandomizerInf i = RAND_INF_ZD_FISH_1; i <= RAND_INF_ZD_FISH_5; i = (RandomizerInf)(i + 1)) { + if (!Flags_GetRandomizerInf(i)) { + return false; + } + } + return true; +} + +void Fishsanity::InitializeHelpers() { + if (fishsanityHelpersInit) { + return; } - FishIdentity Fishsanity::AdvancePond() { - auto [mode, pondCount, ageSplit] = GetOptions(); + for (auto pair : Rando::StaticData::randomizerFishingPondFish) { + pondFishAgeMap[pair.first] = LINK_AGE_CHILD; + pondFishAgeMap[pair.second] = LINK_AGE_ADULT; + childPondFish.push_back(pair.first); + adultPondFish.push_back(pair.second); + } +} - // No need to update state with full pond shuffle - if (pondCount > 16) { - return defaultIdentity; - } +FishIdentity Fishsanity::GetPondFish(s16 params, bool adultPond) { + auto pair = Rando::StaticData::randomizerFishingPondFish[params - 100]; + RandomizerCheck rc = adultPond ? pair.second : pair.first; + return { OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(rc), rc }; +} - UpdateCurrentPondFish(); +FishIdentity Fishsanity::AdvancePond() { + auto [mode, pondCount, ageSplit] = GetOptions(); - return IsAdultPond() ? mCurrPondFish.second : mCurrPondFish.first; + // No need to update state with full pond shuffle + if (pondCount > 16) { + return defaultIdentity; } - FishsanityCheckType Fishsanity::GetCheckType(RandomizerCheck rc) { - // if it's not RCTYPE_FISH, obviously it's not a fish - if (Rando::StaticData::GetLocation(rc)->GetRCType() != RCTYPE_FISH) { - return FSC_NONE; - } + UpdateCurrentPondFish(); - auto loc = Rando::StaticData::GetLocation(rc); - switch (loc->GetScene()) { + return IsAdultPond() ? mCurrPondFish.second : mCurrPondFish.first; +} + +FishsanityCheckType Fishsanity::GetCheckType(RandomizerCheck rc) { + // if it's not RCTYPE_FISH, obviously it's not a fish + if (Rando::StaticData::GetLocation(rc)->GetRCType() != RCTYPE_FISH) { + return FSC_NONE; + } + + auto loc = Rando::StaticData::GetLocation(rc); + switch (loc->GetScene()) { case SCENE_FISHING_POND: return FSC_POND; case SCENE_ZORAS_DOMAIN: @@ -337,249 +342,248 @@ namespace Rando { return FSC_GROTTO; default: return FSC_NONE; - } + } +} + +bool Fishsanity::IsFish(FishIdentity* fish) { + if (fish->randomizerCheck == RC_UNKNOWN_CHECK || fish->randomizerInf == RAND_INF_MAX) { + return false; } - bool Fishsanity::IsFish(FishIdentity* fish) { - if (fish->randomizerCheck == RC_UNKNOWN_CHECK || fish->randomizerInf == RAND_INF_MAX) { - return false; + return GetCheckType(fish->randomizerCheck) != FSC_NONE; +} + +void Fishsanity::OnActorInitHandler(void* refActor) { + Actor* actor = static_cast(refActor); + + auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity(); + FishIdentity fish; + + if (actor->id == ACTOR_EN_FISH && fs->GetOverworldFishShuffled()) { + // Set fish ID for ZD fish + if (gPlayState->sceneNum == SCENE_ZORAS_DOMAIN && actor->params == -1) { + actor->params ^= fishGroupCounter++; + } else if (gPlayState->sceneNum == SCENE_GROTTOS && actor->params == 1) { + actor->params = 0x100 | gSaveContext.respawn[RESPAWN_MODE_RETURN].data; } - return GetCheckType(fish->randomizerCheck) != FSC_NONE; - } - - void Fishsanity::OnActorInitHandler(void* refActor) { - Actor* actor = static_cast(refActor); - - auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity(); - FishIdentity fish; - - if (actor->id == ACTOR_EN_FISH && fs->GetOverworldFishShuffled()) { - // Set fish ID for ZD fish - if (gPlayState->sceneNum == SCENE_ZORAS_DOMAIN && actor->params == -1) { - actor->params ^= fishGroupCounter++; - } else if (gPlayState->sceneNum == SCENE_GROTTOS && actor->params == 1) { - actor->params = 0x100 | gSaveContext.respawn[RESPAWN_MODE_RETURN].data; + fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); + // Render fish as randomized item + if (Rando::Fishsanity::IsFish(&fish) && !Flags_GetRandomizerInf(fish.randomizerInf)) { + if (!drawEnFish) { + drawEnFish = actor->draw; } + actor->draw = Fishsanity_DrawEnFish; + } + return; + } - fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); - // Render fish as randomized item - if (Rando::Fishsanity::IsFish(&fish) && !Flags_GetRandomizerInf(fish.randomizerInf)) { - if (!drawEnFish) { - drawEnFish = actor->draw; + if (actor->id == ACTOR_FISHING && gPlayState->sceneNum == SCENE_FISHING_POND && actor->params >= 100 && + actor->params <= 117 && fs->GetPondFishShuffled()) { + // Initialize pond fish for fishsanity + // Initialize fishsanity metadata on this actor + Fishing* fishActor = static_cast(refActor); + // fishActor->fishsanityParams = actor->params; + fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); + + // With every pond fish shuffled, caught fish will not spawn unless all fish have been caught. + if (RAND_GET_OPTION(RSK_FISHSANITY_POND_COUNT) > 16 && !fs->GetPondCleared()) { + // Create effect for uncaught fish + if (!Flags_GetRandomizerInf(fish.randomizerInf)) { + actor->shape.shadowDraw = Fishsanity_DrawEffShadow; + if (!drawFishing) { + drawFishing = actor->draw; } - actor->draw = Fishsanity_DrawEnFish; + actor->draw = Fishsanity_DrawFishing; } - return; } + } +} - if (actor->id == ACTOR_FISHING && gPlayState->sceneNum == SCENE_FISHING_POND && actor->params >= 100 && - actor->params <= 117 && fs->GetPondFishShuffled()) { - // Initialize pond fish for fishsanity - // Initialize fishsanity metadata on this actor - Fishing* fishActor = static_cast(refActor); - //fishActor->fishsanityParams = actor->params; - fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); +void Fishsanity::OnActorUpdateHandler(void* refActor) { + if (gPlayState->sceneNum != SCENE_GROTTOS && gPlayState->sceneNum != SCENE_ZORAS_DOMAIN && + gPlayState->sceneNum != SCENE_FISHING_POND) { + return; + } - // With every pond fish shuffled, caught fish will not spawn unless all fish have been caught. - if (RAND_GET_OPTION(RSK_FISHSANITY_POND_COUNT) > 16 && - !fs->GetPondCleared()) { - // Create effect for uncaught fish - if (!Flags_GetRandomizerInf(fish.randomizerInf)) { - actor->shape.shadowDraw = Fishsanity_DrawEffShadow; - if (!drawFishing) { - drawFishing = actor->draw; - } - actor->draw = Fishsanity_DrawFishing; + Actor* actor = static_cast(refActor); + auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity(); + + // Detect fish catch + if (actor->id == ACTOR_FISHING && fs->GetPondFishShuffled()) { + Fishing* fish = static_cast(refActor); + + // State 6 -> Fish caught and hoisted + if (fish->fishState == 6) { + FishIdentity identity = + OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); + if (identity.randomizerCheck != RC_UNKNOWN_CHECK) { + Flags_SetRandomizerInf(identity.randomizerInf); + enableAdvance = true; + // Remove uncaught effect + if (actor->shape.shadowDraw != NULL) { + actor->shape.shadowDraw = NULL; + actor->draw = drawFishing; } } } } - void Fishsanity::OnActorUpdateHandler(void* refActor) { - if (gPlayState->sceneNum != SCENE_GROTTOS && gPlayState->sceneNum != SCENE_ZORAS_DOMAIN && gPlayState->sceneNum != SCENE_FISHING_POND) { - return; - } - - Actor* actor = static_cast(refActor); - auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity(); - - // Detect fish catch - if (actor->id == ACTOR_FISHING && fs->GetPondFishShuffled()) { - Fishing* fish = static_cast(refActor); - - // State 6 -> Fish caught and hoisted - if (fish->fishState == 6) { - FishIdentity identity = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); - if (identity.randomizerCheck != RC_UNKNOWN_CHECK) { - Flags_SetRandomizerInf(identity.randomizerInf); - enableAdvance = true; - // Remove uncaught effect - if (actor->shape.shadowDraw != NULL) { - actor->shape.shadowDraw = NULL; - actor->draw = drawFishing; - } - } + if (actor->id == ACTOR_EN_FISH && fs->GetOverworldFishShuffled()) { + FishIdentity fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); + EnFish* fishActor = static_cast(refActor); + if (Rando::Fishsanity::IsFish(&fish) && Flags_GetRandomizerInf(fish.randomizerInf)) { + // Reset draw method + if (actor->draw == Fishsanity_DrawEnFish) { + actor->draw = drawEnFish; } } - if (actor->id == ACTOR_EN_FISH && fs->GetOverworldFishShuffled()) { - FishIdentity fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); - EnFish* fishActor = static_cast(refActor); - if (Rando::Fishsanity::IsFish(&fish) && Flags_GetRandomizerInf(fish.randomizerInf)) { - // Reset draw method - if (actor->draw == Fishsanity_DrawEnFish) { - actor->draw = drawEnFish; - } - } - - if (((actor->params >> 8) > 0) && fishActor->respawnTimer > 0) { - Actor_Kill(actor); - } - } - - // Reset fish group counter when the group gets culled - if (actor->id == ACTOR_OBJ_MURE && gPlayState->sceneNum == SCENE_ZORAS_DOMAIN && fishGroupCounter > 0 && - !(actor->flags & ACTOR_FLAG_UPDATE_CULLING_DISABLED) && fs->GetOverworldFishShuffled()) { - fishGroupCounter = 0; + if (((actor->params >> 8) > 0) && fishActor->respawnTimer > 0) { + Actor_Kill(actor); } } - void Fishsanity::OnSceneInitHandler(int16_t sceneNum) { - if (sceneNum == SCENE_ZORAS_DOMAIN) { - fishGroupCounter = 0; + // Reset fish group counter when the group gets culled + if (actor->id == ACTOR_OBJ_MURE && gPlayState->sceneNum == SCENE_ZORAS_DOMAIN && fishGroupCounter > 0 && + !(actor->flags & ACTOR_FLAG_UPDATE_CULLING_DISABLED) && fs->GetOverworldFishShuffled()) { + fishGroupCounter = 0; + } +} + +void Fishsanity::OnSceneInitHandler(int16_t sceneNum) { + if (sceneNum == SCENE_ZORAS_DOMAIN) { + fishGroupCounter = 0; + } +} + +void Fishsanity::OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { + va_list args; + va_copy(args, originalArgs); + + Actor* actor = va_arg(args, Actor*); + auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity(); + + va_end(args); + + if (id == VB_BOTTLE_ACTOR && actor->id == ACTOR_EN_FISH && fs->GetOverworldFishShuffled()) { + FishIdentity fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); + if (fish.randomizerCheck != RC_UNKNOWN_CHECK && !Flags_GetRandomizerInf(fish.randomizerInf)) { + Flags_SetRandomizerInf(fish.randomizerInf); + actor->parent = &GET_PLAYER(gPlayState)->actor; + *should = false; } } +} - void Fishsanity::OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { - va_list args; - va_copy(args, originalArgs); - - Actor* actor = va_arg(args, Actor*); - auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity(); - - va_end(args); - - if (id == VB_BOTTLE_ACTOR && actor->id == ACTOR_EN_FISH && fs->GetOverworldFishShuffled()) { - FishIdentity fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(gPlayState->sceneNum, actor->params); - if (fish.randomizerCheck != RC_UNKNOWN_CHECK && !Flags_GetRandomizerInf(fish.randomizerInf)) { - Flags_SetRandomizerInf(fish.randomizerInf); - actor->parent = &GET_PLAYER(gPlayState)->actor; - *should = false; - } - } - } - - void Fishsanity::OnItemReceiveHandler(GetItemEntry itemEntry) { - if (enableAdvance) { - enableAdvance = false; - OTRGlobals::Instance->gRandoContext->GetFishsanity()->AdvancePond(); - } +void Fishsanity::OnItemReceiveHandler(GetItemEntry itemEntry) { + if (enableAdvance) { + enableAdvance = false; + OTRGlobals::Instance->gRandoContext->GetFishsanity()->AdvancePond(); } +} } // namespace Rando // C interface extern "C" { - bool Randomizer_GetPondFishShuffled() { - return FSi->GetPondFishShuffled(); +bool Randomizer_GetPondFishShuffled() { + return FSi->GetPondFishShuffled(); +} + +bool Randomizer_GetOverworldFishShuffled() { + return FSi->GetOverworldFishShuffled(); +} + +bool Randomizer_IsAdultPond() { + return FSi->IsAdultPond(); +} + +void Fishsanity_DrawEffShadow(Actor* actor, Lights* lights, PlayState* play) { + Vec3f pos, ripplePos; + static Vec3f velocity = { 0.0f, 0.0f, 0.0f }; + static Vec3f accel = { 0.0f, 0.0f, 0.0f }; + Color_RGBA8 primColor; + Color_RGBA8 envColor; + + // Color of the circle for the particles + static Color_RGBA8 mainColors[5][4] = { { 240, 154, 137, 200 }, + { 240, 190, 137, 200 }, + { 240, 171, 137, 200 }, + { 240, 141, 146, 200 }, + { 240, 204, 137, 200 } }; + + // Color of the faded flares stretching off the particles + static Color_RGBA8 flareColors[5][3] = { + { 128, 85, 82, 200 }, { 128, 101, 82, 200 }, { 128, 93, 82, 200 }, { 128, 82, 98, 200 }, { 128, 108, 82, 200 } + }; + + Color_RGBA8_Copy(&primColor, mainColors[ABS(actor->params) % 5]); + Color_RGBA8_Copy(&envColor, flareColors[ABS(actor->params) % 5]); + + // Spawn sparkles + pos.x = Rand_CenteredFloat(23.0f) + actor->world.pos.x; + pos.y = (Rand_Centered() * 12.0f) + actor->world.pos.y; + pos.z = Rand_CenteredFloat(23.0f) + actor->world.pos.z; + velocity.y = 0.05f; + accel.y = 0.025f; + Math_Vec3f_Copy(&ripplePos, &pos); + ripplePos.y += actor->yDistToWater; + + if (Rand_ZeroOne() < 0.3f) { + EffectSsKiraKira_SpawnDispersed(play, &pos, &velocity, &accel, &primColor, &envColor, 1800, 10); } - bool Randomizer_GetOverworldFishShuffled() { - return FSi->GetOverworldFishShuffled(); - } - - bool Randomizer_IsAdultPond() { - return FSi->IsAdultPond(); - } - - void Fishsanity_DrawEffShadow(Actor* actor, Lights* lights, PlayState* play) { - Vec3f pos, ripplePos; - static Vec3f velocity = { 0.0f, 0.0f, 0.0f }; - static Vec3f accel = { 0.0f, 0.0f, 0.0f }; - Color_RGBA8 primColor; - Color_RGBA8 envColor; - - // Color of the circle for the particles - static Color_RGBA8 mainColors[5][4] = { - { 240, 154, 137, 200 }, - { 240, 190, 137, 200 }, - { 240, 171, 137, 200 }, - { 240, 141, 146, 200 }, - { 240, 204, 137, 200 } - }; - - // Color of the faded flares stretching off the particles - static Color_RGBA8 flareColors[5][3] = { - { 128, 85, 82, 200 }, - { 128, 101, 82, 200 }, - { 128, 93, 82, 200 }, - { 128, 82, 98, 200 }, - { 128, 108, 82, 200 } - }; - - Color_RGBA8_Copy(&primColor, mainColors[ABS(actor->params) % 5]); - Color_RGBA8_Copy(&envColor, flareColors[ABS(actor->params) % 5]); - - // Spawn sparkles - pos.x = Rand_CenteredFloat(23.0f) + actor->world.pos.x; - pos.y = (Rand_Centered() * 12.0f) + actor->world.pos.y; - pos.z = Rand_CenteredFloat(23.0f) + actor->world.pos.z; - velocity.y = 0.05f; - accel.y = 0.025f; - Math_Vec3f_Copy(&ripplePos, &pos); - ripplePos.y += actor->yDistToWater; - - if (Rand_ZeroOne() < 0.3f) { - EffectSsKiraKira_SpawnDispersed(play, &pos, &velocity, &accel, &primColor, &envColor, 1800, 10); - } - - if (actor->bgCheckFlags & 0x20 && Rand_ZeroOne() < 0.15f) { - EffectSsGRipple_Spawn(play, &ripplePos, 100, 200, 2); - } - } - - void Fishsanity_DrawEnFish(struct Actor* actor, struct PlayState* play) { - FishIdentity fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(play->sceneNum, actor->params); - GetItemEntry randoItem = Rando::Context::GetInstance()->GetFinalGIEntry(fish.randomizerCheck, true, GI_FISH); - if (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0)) { - randoItem = GET_ITEM_MYSTERY; - } - - 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); - - Matrix_Pop(); - } - - void Fishsanity_DrawFishing(struct Actor* actor, struct PlayState* play) { - Fishsanity_OpenGreyscaleColor(play, &fsPulseColor, (actor->params - 100) * 20); - drawFishing(actor, play); - Fishsanity_CloseGreyscaleColor(play); - } - - void Fishsanity_OpenGreyscaleColor(PlayState* play, Color_RGBA16* color, int16_t frameOffset) { - OPEN_DISPS(play->state.gfxCtx); - gDPSetGrayscaleColor( - POLY_OPA_DISP++, color->r, color->g, color->b, - // Make color pulse, offset a bit by the actor params - ABS(255.0f * Math_CosS((play->gameplayFrames + frameOffset) * 1000))); - gSPGrayscale(POLY_OPA_DISP++, true); - CLOSE_DISPS(play->state.gfxCtx); - } - - void Fishsanity_CloseGreyscaleColor(PlayState* play) { - OPEN_DISPS(play->state.gfxCtx); - gSPGrayscale(POLY_OPA_DISP++, false); - CLOSE_DISPS(play->state.gfxCtx); + if (actor->bgCheckFlags & 0x20 && Rand_ZeroOne() < 0.15f) { + EffectSsGRipple_Spawn(play, &ripplePos, 100, 200, 2); } } +void Fishsanity_DrawEnFish(struct Actor* actor, struct PlayState* play) { + FishIdentity fish = OTRGlobals::Instance->gRandomizer->IdentifyFish(play->sceneNum, actor->params); + GetItemEntry randoItem = Rando::Context::GetInstance()->GetFinalGIEntry(fish.randomizerCheck, true, GI_FISH); + if (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0)) { + randoItem = GET_ITEM_MYSTERY; + } + + 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); + + Matrix_Pop(); +} + +void Fishsanity_DrawFishing(struct Actor* actor, struct PlayState* play) { + Fishsanity_OpenGreyscaleColor(play, &fsPulseColor, (actor->params - 100) * 20); + drawFishing(actor, play); + Fishsanity_CloseGreyscaleColor(play); +} + +void Fishsanity_OpenGreyscaleColor(PlayState* play, Color_RGB8* color, int16_t frameOffset) { + OPEN_DISPS(play->state.gfxCtx); + gDPSetGrayscaleColor(POLY_OPA_DISP++, color->r, color->g, color->b, + // Make color pulse, offset a bit by the actor params + ABS(255.0f * Math_CosS((play->gameplayFrames + frameOffset) * 1000))); + gSPGrayscale(POLY_OPA_DISP++, true); + CLOSE_DISPS(play->state.gfxCtx); +} + +void Fishsanity_CloseGreyscaleColor(PlayState* play) { + OPEN_DISPS(play->state.gfxCtx); + gSPGrayscale(POLY_OPA_DISP++, false); + CLOSE_DISPS(play->state.gfxCtx); +} +} + void Rando::StaticData::RegisterFishLocations() { + static bool registered = false; + if (registered) + return; + registered = true; + // clang-format off // 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); @@ -630,6 +634,7 @@ void Rando::StaticData::RegisterFishLocations() { 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); + // clang-format on } static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFishLocations); diff --git a/soh/soh/Enhancements/randomizer/fishsanity.h b/soh/soh/Enhancements/randomizer/fishsanity.h index 91d021157..16271f28f 100644 --- a/soh/soh/Enhancements/randomizer/fishsanity.h +++ b/soh/soh/Enhancements/randomizer/fishsanity.h @@ -14,7 +14,7 @@ typedef struct { typedef enum { FSO_SOURCE_RANDO, - FSO_SOURCE_CVARS + FSO_SOURCE_CVARS, } FishsanityOptionsSource; typedef enum { @@ -29,7 +29,7 @@ namespace Rando { /** * @brief Class to provide an interface for and direct Fishsanity features -*/ + */ class Fishsanity { public: Fishsanity(); @@ -47,110 +47,114 @@ class Fishsanity { /** * @brief Returns true if the given FishIdentity represents an actual fish * @param fish The fish to check - */ + */ static bool IsFish(FishIdentity* fish); /** * @brief Returns true if the given fish location is active - * + * * @param loc The Location to check * @param optionsSource Optionally declare from which source to pull settings - */ + */ bool GetFishLocationIncluded(Rando::Location* loc, FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO); /** * @brief Get the active and inactive locations in the fishing pond. - * + * * @param optionsSource Optionally declare from which source to pull settings - * @return A pair of vectors, where the fist is all active pond fish checks, and the second is all inactive pond fish checks. - */ - std::pair, std::vector> GetFishingPondLocations(FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO); + * @return A pair of vectors, where the fist is all active pond fish checks, and the second is all inactive pond + * fish checks. + */ + std::pair, std::vector> + GetFishingPondLocations(FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO); /** * @brief Get all active fishsanity locations, and all inactive fishing pond locations. - * - * @param optionsSource Optionally declare from which source to pull settings - * @return A pair of vectors, where the first is all active fishsanity checks, and the second is all inactive fishsanity checks. - */ - std::pair, std::vector> GetFishsanityLocations(FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO); + * + * @param optionsSource Optionally declare from which source to pull settings + * @return A pair of vectors, where the first is all active fishsanity checks, and the second is all inactive + * fishsanity checks. + */ + std::pair, std::vector> + GetFishsanityLocations(FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO); /** * @brief Returns the identity for a caught pond fish given its params. * Not for use externally from rando, use Randomizer::IdentifyFish or Randomizer_IdentifyFish for that - * + * * @param fishParams Actor parameters for the fish to identify - */ + */ FishIdentity IdentifyPondFish(u8 fishParams); /** * @brief Get fishsanity fishing pond options from the requested source - */ + */ FishsanityPondOptions GetOptions(FishsanityOptionsSource optionsSource = FSO_SOURCE_RANDO); - + /** * @brief Updates current pond fish according to save data - */ + */ void UpdateCurrentPondFish(); - + /** * @brief Initializes internal state from save - */ + */ void InitializeFromSave(); /** * @brief Returns true if the fishing pond is shuffled - */ + */ bool GetPondFishShuffled(); /** - * @brief Returns true if overworld fish are shuffled - */ + * @brief Returns true if overworld fish are shuffled + */ bool GetOverworldFishShuffled(); /** * @brief Returns true if the fishing pond is currently adult (i.e., age split is enabled and Link is adult) - */ + */ bool IsAdultPond(); /** * @brief Returns true if all available pond fish checks have been collected for the current age - */ + */ bool GetPondCleared(); /** * @brief Returns true if all available Zora's Domain fish checks have been collected - */ + */ bool GetDomainCleared(); /** * @brief Advances current fishing pond check; no effect if every fish is shuffled * @return The new FishIdentity for the current pond, or default identity if every fish is shuffled - */ + */ FishIdentity AdvancePond(); /** * @brief ActorInit hook handler for fishsanity - */ + */ static void OnActorInitHandler(void* refActor); /** * @brief PlayerUpdate hook handler for fishsanity - */ + */ static void OnPlayerUpdateHandler(); /** * @brief ActorUpdate hook handler for fishsanity - */ + */ static void OnActorUpdateHandler(void* refActor); /** * @brief SceneInit hook handler for fishsanity - */ + */ static void OnSceneInitHandler(int16_t sceneNum); /** * @brief VB hook handler for fishsanity - */ + */ static void OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); static void OnItemReceiveHandler(GetItemEntry itemEntry); @@ -158,26 +162,26 @@ class Fishsanity { private: /** * @brief Initialize helper statics if they have not been initialized yet - */ + */ void InitializeHelpers(); - + /** * @brief Resolves a pond fish's FishIdentity directly from params & pond age - * + * * @param params Params for Fishing actor * @param adultPond Whether to resolve this fish as an adult check * @return The FishIdentity for the described fish - */ + */ static FishIdentity GetPondFish(s16 params, bool adultPond); /** * @brief Current pond fish when all pond fish are not randomized - */ + */ std::pair mCurrPondFish; - + /** * @brief True if fishsanity helpers have been initialized - */ + */ static bool fishsanityHelpersInit; static s16 fishGroupCounter; @@ -189,20 +193,20 @@ class Fishsanity { /** * @brief Mapping from pond fish check to the age where that check can be collected - */ + */ static std::unordered_map pondFishAgeMap; /** * @brief List of child pond fish checks - */ + */ static std::vector childPondFish; /** * @brief List of adult pond fish checks - */ + */ static std::vector adultPondFish; }; -} +} // namespace Rando extern "C" { #endif @@ -218,7 +222,7 @@ void Fishsanity_DrawEffShadow(Actor* actor, Lights* lights, PlayState* play); void Fishsanity_DrawEnFish(struct Actor* actor, struct PlayState* play); /// Overriden actor draw function for the fishing pond void Fishsanity_DrawFishing(struct Actor* actor, struct PlayState* play); -void Fishsanity_OpenGreyscaleColor(PlayState* play, Color_RGBA16* color, int16_t frameOffset); +void Fishsanity_OpenGreyscaleColor(PlayState* play, Color_RGB8* color, int16_t frameOffset); void Fishsanity_CloseGreyscaleColor(PlayState* play); #ifdef __cplusplus } diff --git a/soh/soh/Enhancements/randomizer/hint.cpp b/soh/soh/Enhancements/randomizer/hint.cpp index 2648c4623..d81e94f2f 100644 --- a/soh/soh/Enhancements/randomizer/hint.cpp +++ b/soh/soh/Enhancements/randomizer/hint.cpp @@ -6,639 +6,624 @@ #include "static_data.h" namespace Rando { -Hint::Hint(){} - -Hint::Hint(RandomizerHint ownKey_, - HintType hintType_, - std::string distribution_, - std::vector hintKeys_, - std::vector locations_, - std::vector areas_, - std::vector trials_) - : ownKey(ownKey_), hintType(hintType_), distribution(std::move(distribution_)), hintKeys(hintKeys_), locations(locations_), areas(areas_), trials(trials_) { - FillGapsInData(); - SetLocationsAsHinted(); - NamesChosen(); - enabled = true; +Hint::Hint() { } -Hint::Hint(RandomizerHint ownKey_, - HintType hintType_, - std::vector hintKeys_, - std::vector locations_, - std::vector areas_, - std::vector trials_, - bool yourPocket_, - int num_) - : ownKey(ownKey_), hintType(hintType_), hintKeys(hintKeys_), locations(locations_), areas(areas_), trials(trials_), yourPocket(yourPocket_), num(num_) { - FillGapsInData(); - SetLocationsAsHinted(); - NamesChosen(); - enabled = true; +Hint::Hint(RandomizerHint ownKey_, HintType hintType_, std::string distribution_, + std::vector hintKeys_, std::vector locations_, + std::vector areas_, std::vector trials_) + : ownKey(ownKey_), hintType(hintType_), distribution(std::move(distribution_)), hintKeys(hintKeys_), + locations(locations_), areas(areas_), trials(trials_) { + FillGapsInData(); + SetLocationsAsHinted(); + NamesChosen(); + enabled = true; } -Hint::Hint(RandomizerHint ownKey_, std::vector messages_) -: ownKey(ownKey_), messages(messages_){ - hintType = HINT_TYPE_MESSAGE; - enabled = true; +Hint::Hint(RandomizerHint ownKey_, HintType hintType_, std::vector hintKeys_, + std::vector locations_, std::vector areas_, std::vector trials_, + bool yourPocket_, int num_) + : ownKey(ownKey_), hintType(hintType_), hintKeys(hintKeys_), locations(locations_), areas(areas_), trials(trials_), + yourPocket(yourPocket_), num(num_) { + FillGapsInData(); + SetLocationsAsHinted(); + NamesChosen(); + enabled = true; } -Hint::Hint(RandomizerHint ownKey_, nlohmann::json json_){ - ownKey = ownKey_; - if (json_.contains("enabled") && !json_["enabled"].get()){ - return; - } - enabled = true; - - if (json_.contains("type")){ - hintType = (HintType)StaticData::hintTypeNameToEnum[json_["type"].get()]; - } - - if (hintType == HINT_TYPE_MESSAGE){ - if (json_.contains("messages")){ - for (auto message: json_["messages"]){ - messages.push_back(CustomMessage(message.get())); - } - } else if (json_.contains("message")){ - messages.push_back(CustomMessage(json_["message"].get())); - } - } - - if (json_.contains("distribution")){ - distribution = json_["distribution"].get(); - } - - if (json_.contains("locations")){ - for (auto loc: json_["locations"]){ - locations.push_back(StaticData::locationNameToEnum[loc.get()]); - } - } else if (json_.contains("location")){ - locations.push_back(StaticData::locationNameToEnum[json_["location"].get()]); - } - - if (json_.contains("itemNamesChosen")){ - for (auto name: json_["itemNamesChosen"]){ - itemNamesChosen.push_back(name.get()); - } - } else if (json_.contains("itemNameChosen")){ - itemNamesChosen.push_back(json_["itemNameChosen"].get()); - } - - if (json_.contains("areas")){ - for (auto area: json_["areas"]){ - areas.push_back((RandomizerArea)Rando::StaticData::areaNameToEnum[area]); - } - } else if (json_.contains("area")){ - areas.push_back((RandomizerArea)Rando::StaticData::areaNameToEnum[json_["area"]]); - } - - if (json_.contains("areaNamesChosen")){ - for (auto name: json_["areaNamesChosen"]){ - areaNamesChosen.push_back(name.get()); - } - } else if (json_.contains("areaNameChosen")){ - areaNamesChosen.push_back(json_["areaNameChosen"].get()); - } - - if (json_.contains("trials")){ - for (auto trial: json_["trials"]){ - trials.push_back((TrialKey)Rando::StaticData::trialNameToEnum[trial]); - } - } else if (json_.contains("trial")){ - trials.push_back((TrialKey)Rando::StaticData::trialNameToEnum[json_["trial"]]); - } - - if (json_.contains("hintKeys")){ - for (auto hintKey: json_["hintKeys"]){ - hintKeys.push_back((RandomizerHintTextKey)hintKey.get()); - } - } else if (json_.contains("hintKey")){ - hintKeys.push_back((RandomizerHintTextKey)json_["hintKey"].get()); - } - - if (json_.contains("hintTextsChosen")){ - for (auto name: json_["hintTextsChosen"]){ - hintTextsChosen.push_back(name.get()); - } - } else if (json_.contains("hintTextChosen")){ - hintTextsChosen.push_back(json_["hintTextChosen"].get()); - } - - if (json_.contains("num")){ - num = json_["num"].get(); - } - - FillGapsInData(); - SetLocationsAsHinted(); +Hint::Hint(RandomizerHint ownKey_, std::vector messages_) : ownKey(ownKey_), messages(messages_) { + hintType = HINT_TYPE_MESSAGE; + enabled = true; } -void Hint::FillGapsInData(){ - auto ctx = Rando::Context::GetInstance(); - if (locations.size() == 0 && StaticData::staticHintInfoMap.contains(ownKey)){ - locations = StaticData::staticHintInfoMap[ownKey].targetChecks; - } - bool fillAreas = true; - bool fillItems = true; - if (areas.size() > 0){ - fillAreas = false; - } - if (items.size() > 0){ - fillItems = false; - } - for(uint8_t c = 0; c < locations.size(); c++){ - //if area matters for the hint, it should be specified and not left to this - if (fillAreas){ - areas.push_back(ctx->GetItemLocation(locations[c])->GetFirstArea()); +Hint::Hint(RandomizerHint ownKey_, nlohmann::json json_) { + ownKey = ownKey_; + if (json_.contains("enabled") && !json_["enabled"].get()) { + return; } - if (fillItems){ - items.push_back(ctx->GetItemLocation(locations[c])->GetPlacedRandomizerGet()); + enabled = true; + + if (json_.contains("type")) { + hintType = (HintType)StaticData::hintTypeNameToEnum[json_["type"].get()]; + } + + if (hintType == HINT_TYPE_MESSAGE) { + if (json_.contains("messages")) { + for (auto message : json_["messages"]) { + messages.push_back(CustomMessage(message.get())); + } + } else if (json_.contains("message")) { + messages.push_back(CustomMessage(json_["message"].get())); + } + } + + if (json_.contains("distribution")) { + distribution = json_["distribution"].get(); + } + + if (json_.contains("locations")) { + for (auto loc : json_["locations"]) { + locations.push_back(StaticData::locationNameToEnum[loc.get()]); + } + } else if (json_.contains("location")) { + locations.push_back(StaticData::locationNameToEnum[json_["location"].get()]); + } + + if (json_.contains("itemNamesChosen")) { + for (auto name : json_["itemNamesChosen"]) { + itemNamesChosen.push_back(name.get()); + } + } else if (json_.contains("itemNameChosen")) { + itemNamesChosen.push_back(json_["itemNameChosen"].get()); + } + + if (json_.contains("areas")) { + for (auto area : json_["areas"]) { + areas.push_back((RandomizerArea)Rando::StaticData::areaNameToEnum[area]); + } + } else if (json_.contains("area")) { + areas.push_back((RandomizerArea)Rando::StaticData::areaNameToEnum[json_["area"]]); + } + + if (json_.contains("areaNamesChosen")) { + for (auto name : json_["areaNamesChosen"]) { + areaNamesChosen.push_back(name.get()); + } + } else if (json_.contains("areaNameChosen")) { + areaNamesChosen.push_back(json_["areaNameChosen"].get()); + } + + if (json_.contains("trials")) { + for (auto trial : json_["trials"]) { + trials.push_back((TrialKey)Rando::StaticData::trialNameToEnum[trial]); + } + } else if (json_.contains("trial")) { + trials.push_back((TrialKey)Rando::StaticData::trialNameToEnum[json_["trial"]]); + } + + if (json_.contains("hintKeys")) { + for (auto hintKey : json_["hintKeys"]) { + hintKeys.push_back((RandomizerHintTextKey)hintKey.get()); + } + } else if (json_.contains("hintKey")) { + hintKeys.push_back((RandomizerHintTextKey)json_["hintKey"].get()); + } + + if (json_.contains("hintTextsChosen")) { + for (auto name : json_["hintTextsChosen"]) { + hintTextsChosen.push_back(name.get()); + } + } else if (json_.contains("hintTextChosen")) { + hintTextsChosen.push_back(json_["hintTextChosen"].get()); + } + + if (json_.contains("num")) { + num = json_["num"].get(); + } + + FillGapsInData(); + SetLocationsAsHinted(); +} + +void Hint::FillGapsInData() { + auto ctx = Rando::Context::GetInstance(); + if (locations.size() == 0 && StaticData::staticHintInfoMap.contains(ownKey)) { + locations = StaticData::staticHintInfoMap[ownKey].targetChecks; + } + bool fillAreas = true; + bool fillItems = true; + if (areas.size() > 0) { + fillAreas = false; + } + if (items.size() > 0) { + fillItems = false; + } + for (uint8_t c = 0; c < locations.size(); c++) { + // if area matters for the hint, it should be specified and not left to this + if (fillAreas) { + areas.push_back(ctx->GetItemLocation(locations[c])->GetFirstArea()); + } + if (fillItems) { + items.push_back(ctx->GetItemLocation(locations[c])->GetPlacedRandomizerGet()); + } } - } } void Hint::SetLocationsAsHinted() const { - auto ctx = Rando::Context::GetInstance(); - for (uint8_t count = 0; count < locations.size(); count++){ - ctx->GetItemLocation(locations[count])->AddHintedBy(ownKey); - } + auto ctx = Rando::Context::GetInstance(); + for (uint8_t count = 0; count < locations.size(); count++) { + ctx->GetItemLocation(locations[count])->AddHintedBy(ownKey); + } } -uint8_t GetRandomHintTextEntry(const HintText hintText){ - auto ctx = Rando::Context::GetInstance(); - uint8_t size = 0; - if (ctx->GetOption(RSK_HINT_CLARITY).Is(RO_HINT_CLARITY_AMBIGUOUS)){ - size = hintText.GetAmbiguousSize(); - } else if (ctx->GetOption(RSK_HINT_CLARITY).Is(RO_HINT_CLARITY_OBSCURE)){ - size = hintText.GetObscureSize(); - } - if (size > 0){ - return Random(0, size); - } - return 0; +uint8_t GetRandomHintTextEntry(const HintText hintText) { + auto ctx = Rando::Context::GetInstance(); + uint8_t size = 0; + if (ctx->GetOption(RSK_HINT_CLARITY).Is(RO_HINT_CLARITY_AMBIGUOUS)) { + size = hintText.GetAmbiguousSize(); + } else if (ctx->GetOption(RSK_HINT_CLARITY).Is(RO_HINT_CLARITY_OBSCURE)) { + size = hintText.GetObscureSize(); + } + if (size > 0) { + return Random(0, size); + } + return 0; } -void Hint::NamesChosen(){ - auto ctx = Rando::Context::GetInstance(); - std::vector namesTemp = {}; - bool saveNames = false; - uint8_t numMessages = GetNumberOfMessages(); - for (uint8_t c = 0; c < numMessages; c++){ - uint8_t selection = GetRandomHintTextEntry(GetHintText(c)); - if (selection > 0){ - saveNames = true; - } - namesTemp.push_back(selection); - } - if (saveNames) { - hintTextsChosen = namesTemp; - } - - if (hintType == HINT_TYPE_ITEM || hintType == HINT_TYPE_ITEM_AREA){ - for(uint8_t c = 0; c < locations.size(); c++){ - namesTemp = {}; - saveNames = false; - uint8_t selection = GetRandomHintTextEntry(GetItemHintText(c)); - if (selection > 0){ - saveNames = true; - } - namesTemp.push_back(selection); +void Hint::NamesChosen() { + auto ctx = Rando::Context::GetInstance(); + std::vector namesTemp = {}; + bool saveNames = false; + uint8_t numMessages = GetNumberOfMessages(); + for (uint8_t c = 0; c < numMessages; c++) { + uint8_t selection = GetRandomHintTextEntry(GetHintText(c)); + if (selection > 0) { + saveNames = true; + } + namesTemp.push_back(selection); } if (saveNames) { - itemNamesChosen = namesTemp; + hintTextsChosen = namesTemp; } - } - if (hintType == HINT_TYPE_FOOLISH || hintType == HINT_TYPE_ITEM_AREA || hintType == HINT_TYPE_WOTH || - hintType == HINT_TYPE_ALTAR_CHILD || hintType == HINT_TYPE_ALTAR_ADULT){ - namesTemp = {}; - saveNames = false; - for(uint8_t c = 0; c < areas.size(); c++){ - uint8_t selection = GetRandomHintTextEntry(GetAreaHintText(c)); - if (selection > 0){ - saveNames = true; - } - namesTemp.push_back(selection); + if (hintType == HINT_TYPE_ITEM || hintType == HINT_TYPE_ITEM_AREA) { + for (uint8_t c = 0; c < locations.size(); c++) { + namesTemp = {}; + saveNames = false; + uint8_t selection = GetRandomHintTextEntry(GetItemHintText(c)); + if (selection > 0) { + saveNames = true; + } + namesTemp.push_back(selection); + } + if (saveNames) { + itemNamesChosen = namesTemp; + } } - if (saveNames) { - areaNamesChosen = namesTemp; + + if (hintType == HINT_TYPE_FOOLISH || hintType == HINT_TYPE_ITEM_AREA || hintType == HINT_TYPE_WOTH || + hintType == HINT_TYPE_ALTAR_CHILD || hintType == HINT_TYPE_ALTAR_ADULT) { + namesTemp = {}; + saveNames = false; + for (uint8_t c = 0; c < areas.size(); c++) { + uint8_t selection = GetRandomHintTextEntry(GetAreaHintText(c)); + if (selection > 0) { + saveNames = true; + } + namesTemp.push_back(selection); + } + if (saveNames) { + areaNamesChosen = namesTemp; + } } - } } uint8_t Hint::GetNumberOfMessages() const { - size_t numMessages = std::max(messages.size(), hintKeys.size()); - if (StaticData::staticHintInfoMap.contains(ownKey)){ - numMessages = std::max(StaticData::staticHintInfoMap[ownKey].hintKeys.size(), numMessages); - } - if (numMessages == 0){ - numMessages = 1; //RANDOTODO make std::max actually fucking work for 3 arguments - } - return numMessages; + size_t numMessages = std::max(messages.size(), hintKeys.size()); + if (StaticData::staticHintInfoMap.contains(ownKey)) { + numMessages = std::max(StaticData::staticHintInfoMap[ownKey].hintKeys.size(), numMessages); + } + if (numMessages == 0) { + numMessages = 1; // RANDOTODO make std::max actually fucking work for 3 arguments + } + return numMessages; } const std::vector Hint::GetAllMessageStrings(MessageFormat format) const { - std::vector hintMessages = {}; - uint8_t numMessages = GetNumberOfMessages(); - for (int c = 0; c < numMessages; c++){ - hintMessages.push_back(GetHintMessage(format, c).GetForCurrentLanguage(format)); - } - return hintMessages; + std::vector hintMessages = {}; + uint8_t numMessages = GetNumberOfMessages(); + for (int c = 0; c < numMessages; c++) { + hintMessages.push_back(GetHintMessage(format, c).GetForCurrentLanguage(format)); + } + return hintMessages; } const HintText Hint::GetHintText(uint8_t id) const { - auto ctx = Rando::Context::GetInstance(); - if (hintKeys.size() > id){ - return StaticData::hintTextTable[hintKeys[id]]; - } -// If a static hint, load default from staticHintInfoMap - if (StaticData::staticHintInfoMap.contains(ownKey) && StaticData::staticHintInfoMap[ownKey].hintKeys.size() > id){ - return StaticData::hintTextTable[StaticData::staticHintInfoMap[ownKey].hintKeys[id]]; - } + auto ctx = Rando::Context::GetInstance(); + if (hintKeys.size() > id) { + return StaticData::hintTextTable[hintKeys[id]]; + } + // If a static hint, load default from staticHintInfoMap + if (StaticData::staticHintInfoMap.contains(ownKey) && StaticData::staticHintInfoMap[ownKey].hintKeys.size() > id) { + return StaticData::hintTextTable[StaticData::staticHintInfoMap[ownKey].hintKeys[id]]; + } - switch (hintType){ - case HINT_TYPE_HINT_KEY: - return StaticData::hintTextTable[0]; - break; - case HINT_TYPE_TRIAL: - if (ctx->GetTrial(trials[0])->IsRequired()) { - return StaticData::hintTextTable[RHT_TRIAL_ON]; - } else { - return StaticData::hintTextTable[RHT_TRIAL_OFF]; - } - case HINT_TYPE_WOTH: - return StaticData::hintTextTable[RHT_WAY_OF_THE_HERO]; - case HINT_TYPE_FOOLISH: - return StaticData::hintTextTable[RHT_FOOLISH]; - case HINT_TYPE_ITEM: - if (locations.size() > 0) { - return *StaticData::GetLocation(locations[0])->GetHint(); - } else { - return CustomMessage("ERROR: ITEM HINT WITH NO LOCATIONS OR HINT KEY"); - } - case HINT_TYPE_ITEM_AREA: - if (locations.size() > 0) { - if (StaticData::GetLocation(locations[0])->IsDungeon()) { - return StaticData::hintTextTable[RHT_HOARDS]; - } else { - return StaticData::hintTextTable[RHT_CAN_BE_FOUND_AT]; - } - } else { - return CustomMessage("ERROR: ITEM AREA HINT WITH NO LOCATION"); //RANDOTODO get isDungeon from area? - } - default: - return CustomMessage("ERROR: NO HINTKEY PROVIDED AND HINT TYPE HAS NO DEFAULT"); - } + switch (hintType) { + case HINT_TYPE_HINT_KEY: + return StaticData::hintTextTable[0]; + break; + case HINT_TYPE_TRIAL: + if (ctx->GetTrial(trials[0])->IsRequired()) { + return StaticData::hintTextTable[RHT_TRIAL_ON]; + } else { + return StaticData::hintTextTable[RHT_TRIAL_OFF]; + } + case HINT_TYPE_WOTH: + return StaticData::hintTextTable[RHT_WAY_OF_THE_HERO]; + case HINT_TYPE_FOOLISH: + return StaticData::hintTextTable[RHT_FOOLISH]; + case HINT_TYPE_ITEM: + if (locations.size() > 0) { + return *StaticData::GetLocation(locations[0])->GetHint(); + } else { + return CustomMessage("ERROR: ITEM HINT WITH NO LOCATIONS OR HINT KEY"); + } + case HINT_TYPE_ITEM_AREA: + if (locations.size() > 0) { + if (StaticData::GetLocation(locations[0])->IsDungeon()) { + return StaticData::hintTextTable[RHT_HOARDS]; + } else { + return StaticData::hintTextTable[RHT_CAN_BE_FOUND_AT]; + } + } else { + return CustomMessage("ERROR: ITEM AREA HINT WITH NO LOCATION"); // RANDOTODO get isDungeon from area? + } + default: + return CustomMessage("ERROR: NO HINTKEY PROVIDED AND HINT TYPE HAS NO DEFAULT"); + } } const CustomMessage Hint::GetHintMessage(MessageFormat format, uint8_t id) const { - auto ctx = Rando::Context::GetInstance(); - CustomMessage hintText = CustomMessage(""); + auto ctx = Rando::Context::GetInstance(); + CustomMessage hintText = CustomMessage(""); - uint8_t chosenMessage = 0; - if (hintTextsChosen.size() > id){ - chosenMessage = id; - } + uint8_t chosenMessage = 0; + if (hintTextsChosen.size() > id) { + chosenMessage = id; + } - if (hintType == HINT_TYPE_MESSAGE){ - if (id < messages.size()){ - hintText = messages[id]; - } - } else if (hintType == HINT_TYPE_ALTAR_CHILD){ - if (ctx->GetOption(RSK_TOT_ALTAR_HINT)){ - hintText = StaticData::hintTextTable[RHT_CHILD_ALTAR_STONES].GetHintMessage(); - } - if (ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_OPEN)) { - hintText += CustomMessage(StaticData::hintTextTable[RHT_CHILD_ALTAR_TEXT_END_DOTOPEN].GetHintMessage()); - } else if (ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_SONGONLY)) { - hintText += CustomMessage(StaticData::hintTextTable[RHT_CHILD_ALTAR_TEXT_END_DOTSONGONLY].GetHintMessage()); + if (hintType == HINT_TYPE_MESSAGE) { + if (id < messages.size()) { + hintText = messages[id]; + } + } else if (hintType == HINT_TYPE_ALTAR_CHILD) { + if (ctx->GetOption(RSK_TOT_ALTAR_HINT)) { + hintText = StaticData::hintTextTable[RHT_CHILD_ALTAR_STONES].GetHintMessage(); + } + if (ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_OPEN)) { + hintText += CustomMessage(StaticData::hintTextTable[RHT_CHILD_ALTAR_TEXT_END_DOTOPEN].GetHintMessage()); + } else if (ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_SONGONLY)) { + hintText += CustomMessage(StaticData::hintTextTable[RHT_CHILD_ALTAR_TEXT_END_DOTSONGONLY].GetHintMessage()); + } else { + hintText += CustomMessage(StaticData::hintTextTable[RHT_CHILD_ALTAR_TEXT_END_DOTCLOSED].GetHintMessage()); + } + } else if (hintType == HINT_TYPE_ALTAR_ADULT) { + if (ctx->GetOption(RSK_TOT_ALTAR_HINT)) { + hintText = StaticData::hintTextTable[RHT_ADULT_ALTAR_MEDALLIONS].GetHintMessage(); + } + hintText += GetBridgeReqsText() + GetGanonBossKeyText() + + StaticData::hintTextTable[RHT_ADULT_ALTAR_TEXT_END].GetHintMessage(); } else { - hintText += CustomMessage(StaticData::hintTextTable[RHT_CHILD_ALTAR_TEXT_END_DOTCLOSED].GetHintMessage()); + hintText = GetHintText(id).GetHintMessage(chosenMessage); } - } else if (hintType == HINT_TYPE_ALTAR_ADULT){ - if (ctx->GetOption(RSK_TOT_ALTAR_HINT)){ - hintText = StaticData::hintTextTable[RHT_ADULT_ALTAR_MEDALLIONS].GetHintMessage(); + + std::vector toInsert = {}; + + switch (hintType) { + case HINT_TYPE_ITEM: { + // if we write items + for (uint8_t b = 0; b < locations.size(); b++) { + toInsert.push_back(GetItemName(b)); + } + break; + } + case HINT_TYPE_TRIAL: { + // If we write trials + for (uint8_t b = 0; b < trials.size(); b++) { + toInsert.push_back(ctx->GetTrial(trials[b])->GetName()); + } + break; + } + case HINT_TYPE_ITEM_AREA: { + // If we write items and areas + for (uint8_t b = 0; b < items.size(); b++) { + toInsert.push_back(GetItemName(b)); + toInsert.push_back(GetAreaName(b)); + } + break; + } + case HINT_TYPE_ALTAR_CHILD: + case HINT_TYPE_ALTAR_ADULT: + case HINT_TYPE_AREA: + case HINT_TYPE_WOTH: + case HINT_TYPE_FOOLISH: { + // If we write areas + for (uint8_t b = 0; b < areas.size(); b++) { + toInsert.push_back(GetAreaName(b)); + } + break; + } + default: + break; } - hintText += GetBridgeReqsText() + GetGanonBossKeyText() + StaticData::hintTextTable[RHT_ADULT_ALTAR_TEXT_END].GetHintMessage(); - } else { - hintText = GetHintText(id).GetHintMessage(chosenMessage); - } - std::vector toInsert = {}; + hintText.InsertNames(toInsert); - switch (hintType){ - case HINT_TYPE_ITEM:{ - //if we write items - for(uint8_t b = 0; b < locations.size(); b++){ - toInsert.push_back(GetItemName(b)); - } - break;} - case HINT_TYPE_TRIAL:{ - //If we write trials - for(uint8_t b = 0; b < trials.size(); b++){ - toInsert.push_back(ctx->GetTrial(trials[b])->GetName()); - } - break;} - case HINT_TYPE_ITEM_AREA:{ - //If we write items and areas - for(uint8_t b = 0; b < items.size(); b++){ - toInsert.push_back(GetItemName(b)); - toInsert.push_back(GetAreaName(b)); - } - break;} - case HINT_TYPE_ALTAR_CHILD: - case HINT_TYPE_ALTAR_ADULT: - case HINT_TYPE_AREA: - case HINT_TYPE_WOTH: - case HINT_TYPE_FOOLISH:{ - //If we write areas - for(uint8_t b = 0; b < areas.size(); b++){ - toInsert.push_back(GetAreaName(b)); - } - break;} - default: - break; - } + if (num != 0) { + hintText.InsertNumber(num); + } - hintText.InsertNames(toInsert); + if (format == MF_FORMATTED) { + hintText.Format(); + } else if (format == MF_AUTO_FORMAT) { + hintText.AutoFormat(); + } else if (format == MF_CLEAN) { + hintText.Clean(); + } - if (num != 0){ - hintText.InsertNumber(num); - } - - if (format == MF_FORMATTED){ - hintText.Format(); - } else if (format == MF_AUTO_FORMAT){ - hintText.AutoFormat(); - } else if (format == MF_CLEAN){ - hintText.Clean(); - } - - return hintText; + return hintText; } oJson Hint::toJSON() { - auto ctx = Rando::Context::GetInstance(); - nlohmann::ordered_json log = {}; - if (enabled){ - log["type"] = StaticData::hintTypeNames[hintType].GetForCurrentLanguage(MF_CLEAN); - - std::vector hintMessages = GetAllMessageStrings(MF_CLEAN); - if (hintMessages.size() == 1){ - log["message"] = hintMessages[0]; - } else if (hintMessages.size() > 1){ - log["messages"] = hintMessages; - } + auto ctx = Rando::Context::GetInstance(); + nlohmann::ordered_json log = {}; + if (enabled) { + log["type"] = StaticData::hintTypeNames[hintType].GetForCurrentLanguage(MF_CLEAN); - if (distribution != ""){ - log["distribution"] = distribution; - } - - if (hintType != HINT_TYPE_FOOLISH){ - if (!(StaticData::staticHintInfoMap.contains(ownKey) && - StaticData::staticHintInfoMap[ownKey].targetChecks.size() > 0)){ - if (locations.size() == 1){ - log["location"] = StaticData::GetLocation(locations[0])->GetName();//RANDOTODO change to CustomMessage when VB is done; - } else if (locations.size() > 1){ - //If we have defaults, no need to write more - std::vector locStrings = {}; - for (size_t c = 0; c < locations.size(); c++){ - locStrings.push_back(StaticData::GetLocation(locations[c])->GetName());//RANDOTODO change to CustomMessage when VB is done - } - log["locations"] = locStrings; + std::vector hintMessages = GetAllMessageStrings(MF_CLEAN); + if (hintMessages.size() == 1) { + log["message"] = hintMessages[0]; + } else if (hintMessages.size() > 1) { + log["messages"] = hintMessages; } - } - - if (!(StaticData::staticHintInfoMap.contains(ownKey) && - StaticData::staticHintInfoMap[ownKey].targetItems.size() > 0)){ - if (items.size() == 1){ - log["item"] = StaticData::GetItemTable()[items[0]].GetName().GetEnglish();//RANDOTODO change to CustomMessage; - } else if (items.size() > 1){ - std::vector itemStrings = {}; - for (size_t c = 0; c < items.size(); c++){ - itemStrings.push_back(StaticData::GetItemTable()[items[c]].GetName().GetEnglish());//RANDOTODO change to CustomMessage - } - log["items"] = itemStrings; + + if (distribution != "") { + log["distribution"] = distribution; } - } - if (itemNamesChosen.size() == 1){ - log["itemNameChosen"] = itemNamesChosen[0]; - } else if (itemNamesChosen.size() > 1){ - std::vector nameNums = {}; - for (size_t c = 0; c < itemNamesChosen.size(); c++){ - nameNums.push_back(itemNamesChosen[c]); + if (hintType != HINT_TYPE_FOOLISH) { + if (!(StaticData::staticHintInfoMap.contains(ownKey) && + StaticData::staticHintInfoMap[ownKey].targetChecks.size() > 0)) { + if (locations.size() == 1) { + log["location"] = StaticData::GetLocation(locations[0]) + ->GetName(); // RANDOTODO change to CustomMessage when VB is done; + } else if (locations.size() > 1) { + // If we have defaults, no need to write more + std::vector locStrings = {}; + for (size_t c = 0; c < locations.size(); c++) { + locStrings.push_back(StaticData::GetLocation(locations[c]) + ->GetName()); // RANDOTODO change to CustomMessage when VB is done + } + log["locations"] = locStrings; + } + } + + if (!(StaticData::staticHintInfoMap.contains(ownKey) && + StaticData::staticHintInfoMap[ownKey].targetItems.size() > 0)) { + if (items.size() == 1) { + log["item"] = StaticData::GetItemTable()[items[0]] + .GetName() + .GetEnglish(); // RANDOTODO change to CustomMessage; + } else if (items.size() > 1) { + std::vector itemStrings = {}; + for (size_t c = 0; c < items.size(); c++) { + itemStrings.push_back(StaticData::GetItemTable()[items[c]] + .GetName() + .GetEnglish()); // RANDOTODO change to CustomMessage + } + log["items"] = itemStrings; + } + } + + if (itemNamesChosen.size() == 1) { + log["itemNameChosen"] = itemNamesChosen[0]; + } else if (itemNamesChosen.size() > 1) { + std::vector nameNums = {}; + for (size_t c = 0; c < itemNamesChosen.size(); c++) { + nameNums.push_back(itemNamesChosen[c]); + } + log["itemNamesChosen"] = nameNums; + } + } + if (areas.size() == 1) { + log["area"] = + StaticData::hintTextTable[StaticData::areaNames[areas[0]]].GetClear().GetForCurrentLanguage(MF_CLEAN); + } else if (areas.size() > 0 && !(StaticData::staticHintInfoMap.contains(ownKey) && + StaticData::staticHintInfoMap[ownKey].targetChecks.size() > 0)) { + // If we got locations from defaults, areas are derived from them and don't need logging + std::vector areaStrings = {}; + for (size_t c = 0; c < areas.size(); c++) { + areaStrings.push_back( + StaticData::hintTextTable[StaticData::areaNames[areas[c]]].GetClear().GetForCurrentLanguage( + MF_CLEAN)); + } + log["areas"] = areaStrings; } - log["itemNamesChosen"] = nameNums; - } - } - if (areas.size() == 1){ - log["area"] = StaticData::hintTextTable[StaticData::areaNames[areas[0]]].GetClear().GetForCurrentLanguage(MF_CLEAN); - } else if (areas.size() > 0 && - !(StaticData::staticHintInfoMap.contains(ownKey) && StaticData::staticHintInfoMap[ownKey].targetChecks.size() > 0)){ - // If we got locations from defaults, areas are derived from them and don't need logging - std::vector areaStrings = {}; - for (size_t c = 0; c < areas.size(); c++){ - areaStrings.push_back(StaticData::hintTextTable[StaticData::areaNames[areas[c]]].GetClear().GetForCurrentLanguage(MF_CLEAN)); - } - log["areas"] = areaStrings; - } - if (areaNamesChosen.size() == 1){ - log["areaNameChosen"] = areaNamesChosen[0]; - } else if (areaNamesChosen.size() > 1){ - std::vector nameNums = {}; - for (size_t c = 0; c < areaNamesChosen.size(); c++){ - nameNums.push_back(areaNamesChosen[c]); - } - log["areaNamesChosen"] = nameNums; - } + if (areaNamesChosen.size() == 1) { + log["areaNameChosen"] = areaNamesChosen[0]; + } else if (areaNamesChosen.size() > 1) { + std::vector nameNums = {}; + for (size_t c = 0; c < areaNamesChosen.size(); c++) { + nameNums.push_back(areaNamesChosen[c]); + } + log["areaNamesChosen"] = nameNums; + } - if (trials.size() == 1){ - log["trial"] = ctx->GetTrial(trials[0])->GetName().GetForCurrentLanguage(MF_CLEAN); - } else if (trials.size() > 0){ - std::vector trialStrings = {}; - for (size_t c = 0; c < trials.size(); c++){ - trialStrings.push_back(ctx->GetTrial(trials[c])->GetName().GetForCurrentLanguage(MF_CLEAN)); - } - log["trials"] = trialStrings; - } + if (trials.size() == 1) { + log["trial"] = ctx->GetTrial(trials[0])->GetName().GetForCurrentLanguage(MF_CLEAN); + } else if (trials.size() > 0) { + std::vector trialStrings = {}; + for (size_t c = 0; c < trials.size(); c++) { + trialStrings.push_back(ctx->GetTrial(trials[c])->GetName().GetForCurrentLanguage(MF_CLEAN)); + } + log["trials"] = trialStrings; + } - if (hintKeys.size() == 1){ - log["hintKey"] = hintKeys[0]; - } else if (hintKeys.size() > 1){ - std::vector hintKeyNums = {}; - for (size_t c = 0; c < hintKeys.size(); c++){ - hintKeyNums.push_back(hintKeys[c]); - } - log["hintKeys"] = hintKeyNums; - } + if (hintKeys.size() == 1) { + log["hintKey"] = hintKeys[0]; + } else if (hintKeys.size() > 1) { + std::vector hintKeyNums = {}; + for (size_t c = 0; c < hintKeys.size(); c++) { + hintKeyNums.push_back(hintKeys[c]); + } + log["hintKeys"] = hintKeyNums; + } - if (hintTextsChosen.size() == 1){ - log["hintTextChosen"] = hintTextsChosen[0]; - } else if (hintTextsChosen.size() > 1){ - std::vector nameNums = {}; - for (size_t c = 0; c < hintTextsChosen.size(); c++){ - nameNums.push_back(hintTextsChosen[c]); - } - log["hintTextsChosen"] = nameNums; - } + if (hintTextsChosen.size() == 1) { + log["hintTextChosen"] = hintTextsChosen[0]; + } else if (hintTextsChosen.size() > 1) { + std::vector nameNums = {}; + for (size_t c = 0; c < hintTextsChosen.size(); c++) { + nameNums.push_back(hintTextsChosen[c]); + } + log["hintTextsChosen"] = nameNums; + } - if (num != 0){ - log["num"] = num; + if (num != 0) { + log["num"] = num; + } } - - } - return log; + return log; } -void Hint::logHint(oJson& jsonData){ - auto ctx = Rando::Context::GetInstance(); - std::string logMap = "Static Hints"; - bool staticHint = true; - if (ownKey < RH_GANONDORF_HINT){ - logMap = "Gossip Stone Hints"; - staticHint = false; - } - if (enabled && - (!(staticHint && (hintType == HINT_TYPE_ITEM) && ctx->GetOption(RSK_HINT_CLARITY).Is(RO_HINT_CLARITY_CLEAR)))){ - //skip if not enabled or if a static hint with no possible variance - jsonData[logMap][Rando::StaticData::hintNames[ownKey].GetForCurrentLanguage(MF_CLEAN)] = toJSON(); - } +void Hint::logHint(oJson& jsonData) { + auto ctx = Rando::Context::GetInstance(); + std::string logMap = "Static Hints"; + bool staticHint = true; + if (ownKey < RH_GANONDORF_HINT) { + logMap = "Gossip Stone Hints"; + staticHint = false; + } + if (enabled && + (!(staticHint && (hintType == HINT_TYPE_ITEM) && ctx->GetOption(RSK_HINT_CLARITY).Is(RO_HINT_CLARITY_CLEAR)))) { + // skip if not enabled or if a static hint with no possible variance + jsonData[logMap][Rando::StaticData::hintNames[ownKey].GetForCurrentLanguage(MF_CLEAN)] = toJSON(); + } } const HintText Hint::GetItemHintText(uint8_t slot, bool mysterious) const { - //RANDOTODO make unreliant on locations, or make Hint accept ItemLocation - auto ctx = Rando::Context::GetInstance(); - RandomizerCheck hintedCheck = locations[slot]; - RandomizerGet targetRG = ctx->GetItemLocation(hintedCheck)->GetPlacedRandomizerGet(); - if (mysterious){ - return StaticData::hintTextTable[RHT_MYSTERIOUS_ITEM]; - } else if (!ctx->GetOption(RSK_HINT_CLARITY).Is(RO_HINT_CLARITY_AMBIGUOUS) && targetRG == RG_ICE_TRAP) { //RANDOTODO store in item hint instead of item - return HintText(CustomMessage({ctx->overrides[hintedCheck].GetTrickName()})); - } else { - return ctx->GetItemLocation(hintedCheck)->GetPlacedItem().GetHint(); - } + // RANDOTODO make unreliant on locations, or make Hint accept ItemLocation + auto ctx = Rando::Context::GetInstance(); + RandomizerCheck hintedCheck = locations[slot]; + RandomizerGet targetRG = ctx->GetItemLocation(hintedCheck)->GetPlacedRandomizerGet(); + if (mysterious) { + return StaticData::hintTextTable[RHT_MYSTERIOUS_ITEM]; + } else if (!ctx->GetOption(RSK_HINT_CLARITY).Is(RO_HINT_CLARITY_AMBIGUOUS) && + targetRG == RG_ICE_TRAP) { // RANDOTODO store in item hint instead of item + return HintText(CustomMessage({ ctx->overrides[hintedCheck].GetTrickName() })); + } else { + return ctx->GetItemLocation(hintedCheck)->GetPlacedItem().GetHint(); + } } -const HintText Hint::GetAreaHintText(uint8_t slot) const { - CustomMessage areaText; - if (yourPocket && areas[slot] == RA_LINKS_POCKET){ - return StaticData::hintTextTable[RHT_YOUR_POCKET]; - } else { - return StaticData::hintTextTable[Rando::StaticData::areaNames[areas[slot]]]; - } +const HintText Hint::GetAreaHintText(uint8_t slot) const { + CustomMessage areaText; + if (yourPocket && areas[slot] == RA_LINKS_POCKET) { + return StaticData::hintTextTable[RHT_YOUR_POCKET]; + } else { + return StaticData::hintTextTable[Rando::StaticData::areaNames[areas[slot]]]; + } } - -const CustomMessage Hint::GetItemName(uint8_t slot, bool mysterious) const { - uint8_t nameNum = 0; - if (itemNamesChosen.size() > slot){ - nameNum = itemNamesChosen[slot]; - } - return GetItemHintText(slot, mysterious).GetHintMessage(nameNum); +const CustomMessage Hint::GetItemName(uint8_t slot, bool mysterious) const { + uint8_t nameNum = 0; + if (itemNamesChosen.size() > slot) { + nameNum = itemNamesChosen[slot]; + } + return GetItemHintText(slot, mysterious).GetHintMessage(nameNum); } -const CustomMessage Hint::GetAreaName(uint8_t slot) const { - uint8_t nameNum = 0; - if (areaNamesChosen.size() > slot){ - nameNum = areaNamesChosen[slot]; - } - return GetAreaHintText(slot).GetHintMessage(nameNum); +const CustomMessage Hint::GetAreaName(uint8_t slot) const { + uint8_t nameNum = 0; + if (areaNamesChosen.size() > slot) { + nameNum = areaNamesChosen[slot]; + } + return GetAreaHintText(slot).GetHintMessage(nameNum); } - CustomMessage Hint::GetBridgeReqsText() { - auto ctx = Rando::Context::GetInstance(); - CustomMessage bridgeMessage; + auto ctx = Rando::Context::GetInstance(); + CustomMessage bridgeMessage; - if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_ALWAYS_OPEN)) { - return StaticData::hintTextTable[RHT_BRIDGE_OPEN_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_VANILLA)) { - return StaticData::hintTextTable[RHT_BRIDGE_VANILLA_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_STONES)) { - bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_STONES_HINT].GetHintMessage(); - bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_STONE_COUNT).Get()); - } - else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_MEDALLIONS)) { - bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_MEDALLIONS_HINT].GetHintMessage(); - bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_MEDALLION_COUNT).Get()); - } - else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEON_REWARDS)) { - bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_REWARDS_HINT].GetHintMessage(); - bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_REWARD_COUNT).Get()); - } - else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEONS)) { - bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_DUNGEONS_HINT].GetHintMessage(); - bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_DUNGEON_COUNT).Get()); - } - else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_TOKENS)) { - bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_TOKENS_HINT].GetHintMessage(); - bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_TOKEN_COUNT).Get()); - } - else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_GREG)) { - return StaticData::hintTextTable[RHT_BRIDGE_GREG_HINT].GetHintMessage(); - } - return bridgeMessage; + if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_ALWAYS_OPEN)) { + return StaticData::hintTextTable[RHT_BRIDGE_OPEN_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_VANILLA)) { + return StaticData::hintTextTable[RHT_BRIDGE_VANILLA_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_STONES)) { + bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_STONES_HINT].GetHintMessage(); + bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_STONE_COUNT).Get()); + } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_MEDALLIONS)) { + bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_MEDALLIONS_HINT].GetHintMessage(); + bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_MEDALLION_COUNT).Get()); + } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEON_REWARDS)) { + bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_REWARDS_HINT].GetHintMessage(); + bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_REWARD_COUNT).Get()); + } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEONS)) { + bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_DUNGEONS_HINT].GetHintMessage(); + bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_DUNGEON_COUNT).Get()); + } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_TOKENS)) { + bridgeMessage = StaticData::hintTextTable[RHT_BRIDGE_TOKENS_HINT].GetHintMessage(); + bridgeMessage.InsertNumber(ctx->GetOption(RSK_RAINBOW_BRIDGE_TOKEN_COUNT).Get()); + } else if (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_GREG)) { + return StaticData::hintTextTable[RHT_BRIDGE_GREG_HINT].GetHintMessage(); + } + return bridgeMessage; } CustomMessage Hint::GetGanonBossKeyText() { - auto ctx = Rando::Context::GetInstance(); - CustomMessage ganonBossKeyMessage; + auto ctx = Rando::Context::GetInstance(); + CustomMessage ganonBossKeyMessage; - if (ctx->GetOption(RSK_TRIFORCE_HUNT)) { - return StaticData::hintTextTable[RHT_GANON_BK_TRIFORCE_HINT].GetHintMessage(); - } + if (ctx->GetOption(RSK_TRIFORCE_HUNT)) { + return StaticData::hintTextTable[RHT_GANON_BK_TRIFORCE_HINT].GetHintMessage(); + } - if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_STARTWITH)) { - return StaticData::hintTextTable[RHT_GANON_BK_START_WITH_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_VANILLA)) { - return StaticData::hintTextTable[RHT_GANON_BK_VANILLA_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OWN_DUNGEON)) { - return StaticData::hintTextTable[RHT_GANON_BK_OWN_DUNGEON_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANY_DUNGEON)) { - return StaticData::hintTextTable[RHT_GANON_BK_ANY_DUNGEON_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OVERWORLD)) { - return StaticData::hintTextTable[RHT_GANON_BK_OVERWORLD_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANYWHERE)) { - return StaticData::hintTextTable[RHT_GANON_BK_ANYWHERE_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_KAK_TOKENS)) { - return StaticData::hintTextTable[RHT_GANON_BK_SKULLTULA_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_VANILLA)) { - return StaticData::hintTextTable[RHT_LACS_VANILLA_HINT].GetHintMessage(); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_STONES)) { - ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_STONES_HINT].GetHintMessage(); - ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_STONE_COUNT).Get()); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_MEDALLIONS)) { - ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_MEDALLIONS_HINT].GetHintMessage(); - ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_MEDALLION_COUNT).Get()); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_REWARDS)) { - ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_REWARDS_HINT].GetHintMessage(); - ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_REWARD_COUNT).Get()); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_DUNGEONS)) { - ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_DUNGEONS_HINT].GetHintMessage(); - ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_DUNGEON_COUNT).Get()); - } - else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_TOKENS)) { - ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_TOKENS_HINT].GetHintMessage(); - ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_TOKEN_COUNT).Get()); - } - return ganonBossKeyMessage; + if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_STARTWITH)) { + return StaticData::hintTextTable[RHT_GANON_BK_START_WITH_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_VANILLA)) { + return StaticData::hintTextTable[RHT_GANON_BK_VANILLA_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OWN_DUNGEON)) { + return StaticData::hintTextTable[RHT_GANON_BK_OWN_DUNGEON_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANY_DUNGEON)) { + return StaticData::hintTextTable[RHT_GANON_BK_ANY_DUNGEON_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OVERWORLD)) { + return StaticData::hintTextTable[RHT_GANON_BK_OVERWORLD_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_ANYWHERE)) { + return StaticData::hintTextTable[RHT_GANON_BK_ANYWHERE_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_KAK_TOKENS)) { + return StaticData::hintTextTable[RHT_GANON_BK_SKULLTULA_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_VANILLA)) { + return StaticData::hintTextTable[RHT_LACS_VANILLA_HINT].GetHintMessage(); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_STONES)) { + ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_STONES_HINT].GetHintMessage(); + ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_STONE_COUNT).Get()); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_MEDALLIONS)) { + ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_MEDALLIONS_HINT].GetHintMessage(); + ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_MEDALLION_COUNT).Get()); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_REWARDS)) { + ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_REWARDS_HINT].GetHintMessage(); + ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_REWARD_COUNT).Get()); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_DUNGEONS)) { + ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_DUNGEONS_HINT].GetHintMessage(); + ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_DUNGEON_COUNT).Get()); + } else if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_LACS_TOKENS)) { + ganonBossKeyMessage = StaticData::hintTextTable[RHT_LACS_TOKENS_HINT].GetHintMessage(); + ganonBossKeyMessage.InsertNumber(ctx->GetOption(RSK_LACS_TOKEN_COUNT).Get()); + } + return ganonBossKeyMessage; } - void Hint::AddHintedLocation(RandomizerCheck location) { locations.push_back(location); } @@ -671,53 +656,53 @@ const std::string& Hint::GetDistribution() const { return distribution; } -bool Hint::IsEnabled() const{ - return enabled; +bool Hint::IsEnabled() const { + return enabled; } -std::vector Hint::GetHintTextKeys() const{ - return hintKeys; +std::vector Hint::GetHintTextKeys() const { + return hintKeys; } -std::vector Hint::GetHintedItems() const{ - return items; +std::vector Hint::GetHintedItems() const { + return items; } -std::vector Hint::GetItemNamesChosen() const{ - return itemNamesChosen; +std::vector Hint::GetItemNamesChosen() const { + return itemNamesChosen; } -std::vector Hint::GetHintTextsChosen() const{ - return hintTextsChosen; +std::vector Hint::GetHintTextsChosen() const { + return hintTextsChosen; } -std::vector Hint::GetAreaTextsChosen() const{ - return areaNamesChosen; +std::vector Hint::GetAreaTextsChosen() const { + return areaNamesChosen; } -std::vector Hint::GetHintedTrials() const{ - return trials; +std::vector Hint::GetHintedTrials() const { + return trials; } -int Hint::GetNum(){ - return num; +int Hint::GetNum() { + return num; } void Hint::ResetVariables() { - ownKey = RH_NONE; - num = 0; - yourPocket = false; - messages = {}; - hintKeys = {}; - locations = {}; - items = {}; - trials = {}; - hintType = HINT_TYPE_HINT_KEY; - areas = {}; - distribution = ""; - enabled = false; - itemNamesChosen = {}; - hintTextsChosen = {}; - areaNamesChosen = {}; + ownKey = RH_NONE; + num = 0; + yourPocket = false; + messages = {}; + hintKeys = {}; + locations = {}; + items = {}; + trials = {}; + hintType = HINT_TYPE_HINT_KEY; + areas = {}; + distribution = ""; + enabled = false; + itemNamesChosen = {}; + hintTextsChosen = {}; + areaNamesChosen = {}; } -} \ No newline at end of file +} // namespace Rando \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/hint.h b/soh/soh/Enhancements/randomizer/hint.h index 03e1af850..e0e595395 100644 --- a/soh/soh/Enhancements/randomizer/hint.h +++ b/soh/soh/Enhancements/randomizer/hint.h @@ -10,73 +10,64 @@ using oJson = nlohmann::ordered_json; namespace Rando { class Hint { - public: - Hint(); - Hint(RandomizerHint ownKey_, - HintType hintType_, - std::string distributionName_, - std::vector hintKeys_, - std::vector locations_, - std::vector areas_ = {}, - std::vector trials_ = {}); - Hint(RandomizerHint ownKey_, - HintType hintType_, - std::vector hintKeys_, - std::vector locations_ = {}, - std::vector areas_ = {}, - std::vector trials_ = {}, - bool yourPocket_ = false, - int num_ = 0); - Hint(RandomizerHint ownKey_, std::vector messages_); - Hint(RandomizerHint ownKey_, nlohmann::json json_); - void FillGapsInData(); - void SetLocationsAsHinted() const; - void NamesChosen(); - uint8_t GetNumberOfMessages() const; - const std::vector GetAllMessageStrings(MessageFormat format = MF_AUTO_FORMAT) const ; - const CustomMessage GetHintMessage(MessageFormat format = MF_AUTO_FORMAT, uint8_t id = 0) const ; - const HintText GetHintText(uint8_t id = 0) const; - oJson toJSON(); - void logHint(oJson& jsonData); - const HintText GetItemHintText(uint8_t slot, bool mysterious = false) const; - const HintText GetAreaHintText(uint8_t slot) const; - const CustomMessage GetItemName(uint8_t slot, bool mysterious = false) const; - const CustomMessage GetAreaName(uint8_t slot) const; - static CustomMessage GetBridgeReqsText(); - static CustomMessage GetGanonBossKeyText(); - void AddHintedLocation (RandomizerCheck location); - std::vector GetHintedLocations() const; - void SetHintType (HintType type); - HintType GetHintType() const; - void AddHintedArea (RandomizerArea area); - std::vector GetHintedAreas() const; - void SetDistribution (std::string distribution); - const std::string& GetDistribution() const; - bool IsEnabled() const; - std::vector GetHintTextKeys() const; - std::vector GetHintedItems() const; - std::vector GetItemNamesChosen() const; - std::vector GetHintTextsChosen() const; - std::vector GetAreaTextsChosen() const; - std::vector GetHintedTrials() const; - int GetNum(); - void ResetVariables(); + public: + Hint(); + Hint(RandomizerHint ownKey_, HintType hintType_, std::string distributionName_, + std::vector hintKeys_, std::vector locations_, + std::vector areas_ = {}, std::vector trials_ = {}); + Hint(RandomizerHint ownKey_, HintType hintType_, std::vector hintKeys_, + std::vector locations_ = {}, std::vector areas_ = {}, + std::vector trials_ = {}, bool yourPocket_ = false, int num_ = 0); + Hint(RandomizerHint ownKey_, std::vector messages_); + Hint(RandomizerHint ownKey_, nlohmann::json json_); + void FillGapsInData(); + void SetLocationsAsHinted() const; + void NamesChosen(); + uint8_t GetNumberOfMessages() const; + const std::vector GetAllMessageStrings(MessageFormat format = MF_AUTO_FORMAT) const; + const CustomMessage GetHintMessage(MessageFormat format = MF_AUTO_FORMAT, uint8_t id = 0) const; + const HintText GetHintText(uint8_t id = 0) const; + oJson toJSON(); + void logHint(oJson& jsonData); + const HintText GetItemHintText(uint8_t slot, bool mysterious = false) const; + const HintText GetAreaHintText(uint8_t slot) const; + const CustomMessage GetItemName(uint8_t slot, bool mysterious = false) const; + const CustomMessage GetAreaName(uint8_t slot) const; + static CustomMessage GetBridgeReqsText(); + static CustomMessage GetGanonBossKeyText(); + void AddHintedLocation(RandomizerCheck location); + std::vector GetHintedLocations() const; + void SetHintType(HintType type); + HintType GetHintType() const; + void AddHintedArea(RandomizerArea area); + std::vector GetHintedAreas() const; + void SetDistribution(std::string distribution); + const std::string& GetDistribution() const; + bool IsEnabled() const; + std::vector GetHintTextKeys() const; + std::vector GetHintedItems() const; + std::vector GetItemNamesChosen() const; + std::vector GetHintTextsChosen() const; + std::vector GetAreaTextsChosen() const; + std::vector GetHintedTrials() const; + int GetNum(); + void ResetVariables(); - private: - RandomizerHint ownKey = RH_NONE; - HintType hintType = HINT_TYPE_HINT_KEY; - std::string distribution = ""; - std::vector hintKeys = {}; - std::vector locations = {}; - std::vector areas = {}; - std::vector trials = {}; - bool yourPocket = false; - int num = 0; - std::vector messages = {}; - std::vector items = {}; - bool enabled = false; - std::vector itemNamesChosen = {}; - std::vector hintTextsChosen = {}; - std::vector areaNamesChosen = {}; + private: + RandomizerHint ownKey = RH_NONE; + HintType hintType = HINT_TYPE_HINT_KEY; + std::string distribution = ""; + std::vector hintKeys = {}; + std::vector locations = {}; + std::vector areas = {}; + std::vector trials = {}; + bool yourPocket = false; + int num = 0; + std::vector messages = {}; + std::vector items = {}; + bool enabled = false; + std::vector itemNamesChosen = {}; + std::vector hintTextsChosen = {}; + std::vector areaNamesChosen = {}; }; -} \ No newline at end of file +} // namespace Rando \ 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 f0baa4c35..5a803f39b 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -55,16 +55,20 @@ 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 "src/overlays/actors/ovl_En_Ge1/z_en_ge1.h" #include "draw.h" extern SaveContext gSaveContext; extern PlayState* gPlayState; extern void func_8084DFAC(PlayState* play, Player* player); -extern void Player_SetupActionPreserveAnimMovement(PlayState* play, Player* player, PlayerActionFunc actionFunc, s32 flags); +extern void Player_SetupActionPreserveAnimMovement(PlayState* play, Player* player, PlayerActionFunc actionFunc, + s32 flags); extern s32 Player_SetupWaitForPutAway(PlayState* play, Player* player, AfterPutAwayFunc func); -extern void Play_InitEnvironment(PlayState * play, s16 skyboxId); +extern void Play_InitEnvironment(PlayState* play, s16 skyboxId); extern void EnMk_Wait(EnMk* enMk, PlayState* play); extern void func_80ABA778(EnNiwLady* enNiwLady, PlayState* play); +extern void EnGe1_Wait_Archery(EnGe1* enGe1, PlayState* play); +extern void EnGe1_SetAnimationIdle(EnGe1* enGe1); } #define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).Get() @@ -74,20 +78,21 @@ bool LocMatchesQuest(Rando::Location loc) { return true; } else { auto dungeon = OTRGlobals::Instance->gRandoContext->GetDungeons()->GetDungeonFromScene(loc.GetScene()); - return (dungeon->IsMQ() && loc.GetQuest() == RCQUEST_MQ) || (dungeon->IsVanilla() && loc.GetQuest() == RCQUEST_VANILLA); + return (dungeon->IsMQ() && loc.GetQuest() == RCQUEST_MQ) || + (dungeon->IsVanilla() && loc.GetQuest() == RCQUEST_VANILLA); } } RandomizerCheck GetRandomizerCheckFromFlag(int16_t flagType, int16_t flag) { for (auto& loc : Rando::StaticData::GetLocationTable()) { - if ((loc.GetCollectionCheck().flag == flag && ( - (flagType == FLAG_INF_TABLE && loc.GetCollectionCheck().type == SPOILER_CHK_INF_TABLE) || - (flagType == FLAG_EVENT_CHECK_INF && loc.GetCollectionCheck().type == SPOILER_CHK_EVENT_CHK_INF) || - (flagType == FLAG_ITEM_GET_INF && loc.GetCollectionCheck().type == SPOILER_CHK_ITEM_GET_INF) || - (flagType == FLAG_RANDOMIZER_INF && loc.GetCollectionCheck().type == SPOILER_CHK_RANDOMIZER_INF) - ) || - (loc.GetActorParams() == flag && flagType == FLAG_GS_TOKEN && loc.GetCollectionCheck().type == SPOILER_CHK_GOLD_SKULLTULA) - ) && LocMatchesQuest(loc)) { + if ((loc.GetCollectionCheck().flag == flag && + ((flagType == FLAG_INF_TABLE && loc.GetCollectionCheck().type == SPOILER_CHK_INF_TABLE) || + (flagType == FLAG_EVENT_CHECK_INF && loc.GetCollectionCheck().type == SPOILER_CHK_EVENT_CHK_INF) || + (flagType == FLAG_ITEM_GET_INF && loc.GetCollectionCheck().type == SPOILER_CHK_ITEM_GET_INF) || + (flagType == FLAG_RANDOMIZER_INF && loc.GetCollectionCheck().type == SPOILER_CHK_RANDOMIZER_INF)) || + (loc.GetActorParams() == flag && flagType == FLAG_GS_TOKEN && + loc.GetCollectionCheck().type == SPOILER_CHK_GOLD_SKULLTULA)) && + LocMatchesQuest(loc)) { return loc.GetRandomizerCheck(); } } @@ -97,11 +102,11 @@ RandomizerCheck GetRandomizerCheckFromFlag(int16_t flagType, int16_t flag) { RandomizerCheck GetRandomizerCheckFromSceneFlag(int16_t sceneNum, int16_t flagType, int16_t flag) { for (auto& loc : Rando::StaticData::GetLocationTable()) { - if (loc.GetCollectionCheck().scene == sceneNum && loc.GetCollectionCheck().flag == flag && ( - (flagType == FLAG_SCENE_TREASURE && loc.GetCollectionCheck().type == SPOILER_CHK_CHEST) || - (flagType == FLAG_SCENE_COLLECTIBLE && loc.GetCollectionCheck().type == SPOILER_CHK_COLLECTABLE) || - (flagType == FLAG_GS_TOKEN && loc.GetCollectionCheck().type == SPOILER_CHK_GOLD_SKULLTULA) - ) && LocMatchesQuest(loc)) { + if (loc.GetCollectionCheck().scene == sceneNum && loc.GetCollectionCheck().flag == flag && + ((flagType == FLAG_SCENE_TREASURE && loc.GetCollectionCheck().type == SPOILER_CHK_CHEST) || + (flagType == FLAG_SCENE_COLLECTIBLE && loc.GetCollectionCheck().type == SPOILER_CHK_COLLECTABLE) || + (flagType == FLAG_GS_TOKEN && loc.GetCollectionCheck().type == SPOILER_CHK_GOLD_SKULLTULA)) && + LocMatchesQuest(loc)) { return loc.GetRandomizerCheck(); } } @@ -122,7 +127,8 @@ bool MeetsLACSRequirements() { } break; case RO_GANON_BOSS_KEY_LACS_REWARDS: - if ((CheckMedallionCount() + CheckStoneCount() + CheckLACSRewardCount()) >= RAND_GET_OPTION(RSK_LACS_REWARD_COUNT)) { + if ((CheckMedallionCount() + CheckStoneCount() + CheckLACSRewardCount()) >= + RAND_GET_OPTION(RSK_LACS_REWARD_COUNT)) { return true; } break; @@ -171,13 +177,15 @@ bool MeetsRainbowBridgeRequirements() { break; } case RO_BRIDGE_MEDALLIONS: { - if ((CheckMedallionCount() + CheckBridgeRewardCount()) >= RAND_GET_OPTION(RSK_RAINBOW_BRIDGE_MEDALLION_COUNT)) { + if ((CheckMedallionCount() + CheckBridgeRewardCount()) >= + RAND_GET_OPTION(RSK_RAINBOW_BRIDGE_MEDALLION_COUNT)) { return true; } break; } case RO_BRIDGE_DUNGEON_REWARDS: { - if ((CheckMedallionCount() + CheckStoneCount() + CheckBridgeRewardCount()) >= RAND_GET_OPTION(RSK_RAINBOW_BRIDGE_REWARD_COUNT)) { + if ((CheckMedallionCount() + CheckStoneCount() + CheckBridgeRewardCount()) >= + RAND_GET_OPTION(RSK_RAINBOW_BRIDGE_REWARD_COUNT)) { return true; } break; @@ -229,15 +237,28 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) { } if (flagType == FLAG_EVENT_CHECK_INF && flag == EVENTCHKINF_TALON_WOKEN_IN_CASTLE) { - //remove chicken as this is the only use for it + // 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; + if (flagType == FLAG_EVENT_CHECK_INF && flag == EVENTCHKINF_OBTAINED_ZELDAS_LETTER) { + Flags_SetRandomizerInf(RAND_INF_ZELDAS_LETTER); + } + if (flagType == FLAG_EVENT_CHECK_INF && flag == EVENTCHKINF_OBTAINED_POCKET_EGG) { + Flags_SetRandomizerInf(RAND_INF_WEIRD_EGG); + } + + RandomizerCheck rc = GetRandomizerCheckFromFlag(flagType, flag); + if (rc == RC_UNKNOWN_CHECK) + return; + + if (flagType == FLAG_GS_TOKEN && + Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OFF)) + return; auto loc = Rando::Context::GetInstance()->GetItemLocation(rc); - if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) return; + if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) + return; SPDLOG_INFO("Queuing RC: {}", static_cast(rc)); randomizerQueuedChecks.push(rc); @@ -245,17 +266,17 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) { void RandomizerOnSceneFlagSetHandler(int16_t sceneNum, int16_t flagType, int16_t flag) { if (RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF && - sceneNum == SCENE_GERUDOS_FORTRESS && - flagType == FLAG_SCENE_SWITCH && - flag == 0x3A) { + sceneNum == SCENE_GERUDOS_FORTRESS && flagType == FLAG_SCENE_SWITCH && flag == 0x3A) { Flags_SetRandomizerInf(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN); } RandomizerCheck rc = GetRandomizerCheckFromSceneFlag(sceneNum, flagType, flag); - if (rc == RC_UNKNOWN_CHECK) return; + if (rc == RC_UNKNOWN_CHECK) + return; auto loc = Rando::Context::GetInstance()->GetItemLocation(rc); - if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) return; + if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) + return; SPDLOG_INFO("Queuing RC: {}", static_cast(rc)); randomizerQueuedChecks.push(rc); @@ -265,14 +286,17 @@ static Vec3f spawnPos = { 0.0f, -999.0f, 0.0f }; void RandomizerOnPlayerUpdateForRCQueueHandler() { // If we're already queued, don't queue again - if (randomizerQueuedCheck != RC_UNKNOWN_CHECK) return; + if (randomizerQueuedCheck != RC_UNKNOWN_CHECK) + return; // If there's nothing to queue, don't queue - if (randomizerQueuedChecks.size() < 1) return; + if (randomizerQueuedChecks.size() < 1) + return; // If we're in a cutscene, don't queue Player* player = GET_PLAYER(gPlayState); - if (Player_InBlockingCsMode(gPlayState, player) || player->stateFlags1 & PLAYER_STATE1_IN_ITEM_CS || player->stateFlags1 & PLAYER_STATE1_GETTING_ITEM || player->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { + if (Player_InBlockingCsMode(gPlayState, player) || player->stateFlags1 & PLAYER_STATE1_IN_ITEM_CS || + player->stateFlags1 & PLAYER_STATE1_GETTING_ITEM || player->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { return; } @@ -280,7 +304,8 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() { auto loc = Rando::Context::GetInstance()->GetItemLocation(rc); RandomizerGet vanillaRandomizerGet = Rando::StaticData::GetLocation(rc)->GetVanillaItem(); GetItemID vanillaItem = (GetItemID)Rando::StaticData::RetrieveItem(vanillaRandomizerGet).GetItemID(); - GetItemEntry getItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(rc, true, (GetItemID)vanillaRandomizerGet); + GetItemEntry getItemEntry = + Rando::Context::GetInstance()->GetFinalGIEntry(rc, true, (GetItemID)vanillaRandomizerGet); if (loc->HasObtained()) { SPDLOG_INFO("RC {} already obtained, skipping", static_cast(rc)); @@ -288,32 +313,25 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() { iceTrapScale = 0.0f; randomizerQueuedCheck = rc; randomizerQueuedItemEntry = getItemEntry; - SPDLOG_INFO("Queueing Item mod {} item {} from RC {}", getItemEntry.modIndex, getItemEntry.itemId, static_cast(rc)); + SPDLOG_INFO("Queueing Item mod {} item {} from RC {}", getItemEntry.modIndex, getItemEntry.itemId, + static_cast(rc)); if ( // Skipping ItemGet animation incompatible with checks that require closing a text box to finish - rc != RC_HF_OCARINA_OF_TIME_ITEM && - rc != RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST && - rc != RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE && - rc != RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE && + rc != RC_HF_OCARINA_OF_TIME_ITEM && rc != RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST && + rc != RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE && rc != RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE && // Always show ItemGet animation for ice traps !(getItemEntry.modIndex == MOD_RANDOMIZER && getItemEntry.getItemId == RG_ICE_TRAP) && // Always show ItemGet animation outside of randomizer to keep behaviour consistent in vanilla IS_RANDO && - ( - CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("TimeSavers.SkipGetItemAnimation"), SGIA_DISABLED) == SGIA_ALL || - ( - CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("TimeSavers.SkipGetItemAnimation"), SGIA_DISABLED) == SGIA_JUNK && - ( - //crude fix to ensure map hints are readable. Ideally replace with better hint tracking. - !(getItemEntry.getItemId >= RG_DEKU_TREE_MAP && getItemEntry.getItemId <= RG_ICE_CAVERN_MAP) && ( - getItemEntry.getItemCategory == ITEM_CATEGORY_JUNK || - getItemEntry.getItemCategory == ITEM_CATEGORY_SKULLTULA_TOKEN || - getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER - ) - ) - ) - ) - ) { + (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("TimeSavers.SkipGetItemAnimation"), SGIA_JUNK) == SGIA_ALL || + (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("TimeSavers.SkipGetItemAnimation"), SGIA_JUNK) == SGIA_JUNK && + ( + // crude fix to ensure map hints are readable. Ideally replace with better hint tracking. + !(getItemEntry.getItemId >= RG_DEKU_TREE_MAP && getItemEntry.getItemId <= RG_ICE_CAVERN_MAP && + getItemEntry.modIndex == MOD_RANDOMIZER) && + (getItemEntry.getItemCategory == ITEM_CATEGORY_JUNK || + getItemEntry.getItemCategory == ITEM_CATEGORY_SKULLTULA_TOKEN || + getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER))))) { Item_DropCollectible(gPlayState, &spawnPos, ITEM00_SOH_GIVE_ITEM_ENTRY | 0x8000); } } @@ -322,14 +340,18 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() { } void RandomizerOnPlayerUpdateForItemQueueHandler() { - if (randomizerQueuedCheck == RC_UNKNOWN_CHECK) return; + if (randomizerQueuedCheck == RC_UNKNOWN_CHECK) + return; Player* player = GET_PLAYER(gPlayState); - if (player == NULL || Player_InBlockingCsMode(gPlayState, player) || player->stateFlags1 & PLAYER_STATE1_IN_ITEM_CS || player->stateFlags1 & PLAYER_STATE1_GETTING_ITEM || player->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { + if (player == NULL || Player_InBlockingCsMode(gPlayState, player) || + player->stateFlags1 & PLAYER_STATE1_IN_ITEM_CS || player->stateFlags1 & PLAYER_STATE1_GETTING_ITEM || + player->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { return; } - SPDLOG_INFO("Attempting to give Item mod {} item {} from RC {}", randomizerQueuedItemEntry.modIndex, randomizerQueuedItemEntry.itemId, static_cast(randomizerQueuedCheck)); + SPDLOG_INFO("Attempting to give Item mod {} item {} from RC {}", randomizerQueuedItemEntry.modIndex, + randomizerQueuedItemEntry.itemId, static_cast(randomizerQueuedCheck)); GiveItemEntryWithoutActor(gPlayState, randomizerQueuedItemEntry); if (player->stateFlags1 & PLAYER_STATE1_IN_WATER) { // Allow the player to receive the item while swimming @@ -339,26 +361,26 @@ void RandomizerOnPlayerUpdateForItemQueueHandler() { } void RandomizerOnItemReceiveHandler(GetItemEntry receivedItemEntry) { - if (randomizerQueuedCheck == RC_UNKNOWN_CHECK) return; + if (randomizerQueuedCheck == RC_UNKNOWN_CHECK) + return; auto loc = Rando::Context::GetInstance()->GetItemLocation(randomizerQueuedCheck); - if (randomizerQueuedItemEntry.modIndex == receivedItemEntry.modIndex && randomizerQueuedItemEntry.itemId == receivedItemEntry.itemId) { - SPDLOG_INFO("Item received mod {} item {} from RC {}", receivedItemEntry.modIndex, receivedItemEntry.itemId, static_cast(randomizerQueuedCheck)); + if (randomizerQueuedItemEntry.modIndex == receivedItemEntry.modIndex && + randomizerQueuedItemEntry.itemId == receivedItemEntry.itemId) { + SPDLOG_INFO("Item received mod {} item {} from RC {}", receivedItemEntry.modIndex, receivedItemEntry.itemId, + static_cast(randomizerQueuedCheck)); loc->SetCheckStatus(RCSHOW_COLLECTED); CheckTracker::SpoilAreaFromCheck(randomizerQueuedCheck); CheckTracker::RecalculateAllAreaTotals(); + CheckTracker::RecalculateAvailableChecks(); SaveManager::Instance->SaveSection(gSaveContext.fileNum, SECTION_ID_TRACKER_DATA, true); randomizerQueuedCheck = RC_UNKNOWN_CHECK; randomizerQueuedItemEntry = GET_ITEM_NONE; } - if ( - receivedItemEntry.modIndex == MOD_NONE && ( - receivedItemEntry.itemId == ITEM_HEART_PIECE || - receivedItemEntry.itemId == ITEM_HEART_PIECE_2 || - receivedItemEntry.itemId == ITEM_HEART_CONTAINER - ) - ) { + if (receivedItemEntry.modIndex == MOD_NONE && + (receivedItemEntry.itemId == ITEM_HEART_PIECE || receivedItemEntry.itemId == ITEM_HEART_PIECE_2 || + receivedItemEntry.itemId == ITEM_HEART_CONTAINER)) { gSaveContext.healthAccumulator = 0x140; // Refill 20 hearts if ((s32)(gSaveContext.inventory.questItems & 0xF0000000) == 0x40000000) { gSaveContext.inventory.questItems ^= 0x40000000; @@ -367,11 +389,14 @@ void RandomizerOnItemReceiveHandler(GetItemEntry receivedItemEntry) { } } - if (loc->GetRandomizerCheck() == RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST && !CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { + if (loc->GetRandomizerCheck() == RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST && + !CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { static uint32_t updateHook; updateHook = GameInteractor::Instance->RegisterGameHook([]() { Player* player = GET_PLAYER(gPlayState); - if (player == NULL || Player_InBlockingCsMode(gPlayState, player) || player->stateFlags1 & PLAYER_STATE1_IN_ITEM_CS || player->stateFlags1 & PLAYER_STATE1_GETTING_ITEM || player->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { + if (player == NULL || Player_InBlockingCsMode(gPlayState, player) || + player->stateFlags1 & PLAYER_STATE1_IN_ITEM_CS || player->stateFlags1 & PLAYER_STATE1_GETTING_ITEM || + player->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) { return; } @@ -402,7 +427,7 @@ void EnExItem_WaitForObjectRandomized(EnExItem* enExItem, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, enExItem->objectIdx)) { enExItem->actor.draw = (ActorFunc)EnExItem_DrawRandomizedItem; Actor_SetScale(&enExItem->actor, enExItem->scale); - + // for now we're just using this to not have items float // below the bowling counter, but it would be nice to use // this to not draw gigantic skull tokens etc. @@ -469,8 +494,7 @@ void ItemEtcetera_DrawRandomizedItemThroughLens(ItemEtcetera* itemEtcetera, Play } void ItemEtcetera_func_80B858B4_Randomized(ItemEtcetera* itemEtcetera, PlayState* play) { - if (itemEtcetera->actor.xzDistToPlayer < 30.0f && - fabsf(itemEtcetera->actor.yDistToPlayer) < 50.0f) { + if (itemEtcetera->actor.xzDistToPlayer < 30.0f && fabsf(itemEtcetera->actor.yDistToPlayer) < 50.0f) { if ((itemEtcetera->actor.params & 0xFF) == 1) { Flags_SetEventChkInf(EVENTCHKINF_OBTAINED_RUTOS_LETTER); Flags_SetSwitch(play, 0xB); @@ -489,8 +513,7 @@ void ItemEtcetera_func_80B85824_Randomized(ItemEtcetera* itemEtcetera, PlayState return; } - if (itemEtcetera->actor.xzDistToPlayer < 30.0f && - fabsf(itemEtcetera->actor.yDistToPlayer) < 50.0f) { + if (itemEtcetera->actor.xzDistToPlayer < 30.0f && fabsf(itemEtcetera->actor.yDistToPlayer) < 50.0f) { Flags_SetTreasure(play, 0x1F); Actor_Kill(&itemEtcetera->actor); @@ -529,43 +552,21 @@ u8 EnDs_RandoCanGetGrannyItem() { // Traded odd mushroom when adult trade is on ((RAND_GET_OPTION(RSK_SHUFFLE_ADULT_TRADE) && Flags_GetItemGetInf(ITEMGETINF_30)) || // Found claim check when adult trade is off - (!RAND_GET_OPTION(RSK_SHUFFLE_ADULT_TRADE) && - INV_CONTENT(ITEM_CLAIM_CHECK) == ITEM_CLAIM_CHECK)); + (!RAND_GET_OPTION(RSK_SHUFFLE_ADULT_TRADE) && INV_CONTENT(ITEM_CLAIM_CHECK) == ITEM_CLAIM_CHECK)); } u8 EnJs_RandoCanGetCarpetMerchantItem() { - return (RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL || - RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) && - // If the rando check has already been awarded, use vanilla behavior. - !Flags_GetRandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN); + return (RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL || + RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) && + // If the rando check has already been awarded, use vanilla behavior. + !Flags_GetRandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN); } u8 EnGm_RandoCanGetMedigoronItem() { - return (RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL || - RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) && - // If the rando check has already been awarded, use vanilla behavior. - !Flags_GetRandomizerInf(RAND_INF_MERCHANTS_MEDIGORON); -} - -RandomizerCheck EnFr_RandomizerCheckFromSongIndex(u16 songIndex) { - switch (songIndex) { - case FROG_ZL: - return RC_ZR_FROGS_ZELDAS_LULLABY; - case FROG_EPONA: - return RC_ZR_FROGS_EPONAS_SONG; - case FROG_SARIA: - return RC_ZR_FROGS_SARIAS_SONG; - case FROG_SUNS: - return RC_ZR_FROGS_SUNS_SONG; - case FROG_SOT: - return RC_ZR_FROGS_SONG_OF_TIME; - case FROG_STORMS: - return RC_ZR_FROGS_IN_THE_RAIN; - case FROG_CHOIR_SONG: - return RC_ZR_FROGS_OCARINA_GAME; - default: - return RC_UNKNOWN_CHECK; - } + return (RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL || + RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) && + // If the rando check has already been awarded, use vanilla behavior. + !Flags_GetRandomizerInf(RAND_INF_MERCHANTS_MEDIGORON); } void RandomizerSetChestGameRandomizerInf(RandomizerCheck rc) { @@ -616,44 +617,50 @@ void func_8083A434_override(PlayState* play, Player* player) { player->stateFlags1 |= PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_IN_CUTSCENE; } -bool ShouldGiveFishingPrize(f32 sFishOnHandLength){ +bool ShouldGiveFishingPrize(f32 sFishOnHandLength) { // RANDOTODO: update the enhancement sliders to not allow // values above rando fish weight values when rando'd - if(LINK_IS_CHILD) { - int32_t weight = CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFishing"), 0) ? CVarGetInteger(CVAR_ENHANCEMENT("MinimumFishWeightChild"), 10) : 10; + if (LINK_IS_CHILD) { + int32_t weight = CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFishing"), 0) + ? CVarGetInteger(CVAR_ENHANCEMENT("MinimumFishWeightChild"), 10) + : 10; f32 score = sqrt(((f32)weight - 0.5f) / 0.0036f); - return sFishOnHandLength >= score && (IS_RANDO ? !Flags_GetRandomizerInf(RAND_INF_CHILD_FISHING) : !(HIGH_SCORE(HS_FISHING) & HS_FISH_PRIZE_CHILD)); - } else - { - int32_t weight = CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFishing"), 0) ? CVarGetInteger(CVAR_ENHANCEMENT("MinimumFishWeightAdult"), 13) : 13; + return sFishOnHandLength >= score && (IS_RANDO ? !Flags_GetRandomizerInf(RAND_INF_CHILD_FISHING) + : !(HIGH_SCORE(HS_FISHING) & HS_FISH_PRIZE_CHILD)); + } else { + int32_t weight = CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFishing"), 0) + ? CVarGetInteger(CVAR_ENHANCEMENT("MinimumFishWeightAdult"), 13) + : 13; f32 score = sqrt(((f32)weight - 0.5f) / 0.0036f); - return sFishOnHandLength >= score && (IS_RANDO ? !Flags_GetRandomizerInf(RAND_INF_ADULT_FISHING) : !(HIGH_SCORE(HS_FISHING) & HS_FISH_PRIZE_ADULT)); + return sFishOnHandLength >= score && (IS_RANDO ? !Flags_GetRandomizerInf(RAND_INF_ADULT_FISHING) + : !(HIGH_SCORE(HS_FISHING) & HS_FISH_PRIZE_ADULT)); } } void RandomizerOnDialogMessageHandler() { - MessageContext *msgCtx = &gPlayState->msgCtx; - Actor *actor = msgCtx->talkActor; + MessageContext* msgCtx = &gPlayState->msgCtx; + Actor* actor = msgCtx->talkActor; auto ctx = Rando::Context::GetInstance(); bool revealMerchant = ctx->GetOption(RSK_MERCHANT_TEXT_HINT).Get() != RO_GENERIC_OFF; bool nonBeanMerchants = ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS) || - ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL); + ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL); RandomizerCheck reveal = RC_UNKNOWN_CHECK; - if (ctx->GetOption(RSK_CHICKENS_HINT) && (msgCtx->textId >= TEXT_ANJU_PLEASE_BRING_MY_CUCCOS_BACK && msgCtx->textId <= TEXT_ANJU_PLEASE_BRING_1_CUCCO)) { + if (ctx->GetOption(RSK_CHICKENS_HINT) && + (msgCtx->textId >= TEXT_ANJU_PLEASE_BRING_MY_CUCCOS_BACK && msgCtx->textId <= TEXT_ANJU_PLEASE_BRING_1_CUCCO)) { reveal = RC_KAK_ANJU_AS_CHILD; } else { switch (msgCtx->textId) { case TEXT_SKULLTULA_PEOPLE_IM_CURSED: - if (actor->params == 1 && ctx->GetOption(RSK_KAK_10_SKULLS_HINT)){ + if (actor->params == 1 && ctx->GetOption(RSK_KAK_10_SKULLS_HINT)) { reveal = RC_KAK_10_GOLD_SKULLTULA_REWARD; - } else if (actor->params == 2 && ctx->GetOption(RSK_KAK_20_SKULLS_HINT)){ + } else if (actor->params == 2 && ctx->GetOption(RSK_KAK_20_SKULLS_HINT)) { reveal = RC_KAK_20_GOLD_SKULLTULA_REWARD; - } else if (actor->params == 3 && ctx->GetOption(RSK_KAK_30_SKULLS_HINT)){ + } else if (actor->params == 3 && ctx->GetOption(RSK_KAK_30_SKULLS_HINT)) { reveal = RC_KAK_30_GOLD_SKULLTULA_REWARD; - } else if (actor->params == 4 && ctx->GetOption(RSK_KAK_40_SKULLS_HINT)){ + } else if (actor->params == 4 && ctx->GetOption(RSK_KAK_40_SKULLS_HINT)) { reveal = RC_KAK_40_GOLD_SKULLTULA_REWARD; - } else if (ctx->GetOption(RSK_KAK_50_SKULLS_HINT)){ + } else if (ctx->GetOption(RSK_KAK_50_SKULLS_HINT)) { reveal = RC_KAK_50_GOLD_SKULLTULA_REWARD; } break; @@ -706,20 +713,21 @@ void RandomizerOnDialogMessageHandler() { case TEXT_SCRUB_RANDOM: if (ctx->GetOption(RSK_SCRUB_TEXT_HINT).Get() != RO_GENERIC_OFF) { EnDns* enDns = (EnDns*)actor; - reveal = OTRGlobals::Instance->gRandomizer->GetCheckFromRandomizerInf((RandomizerInf)enDns->sohScrubIdentity.randomizerInf); + reveal = OTRGlobals::Instance->gRandomizer->GetCheckFromRandomizerInf( + (RandomizerInf)enDns->sohScrubIdentity.randomizerInf); } break; case TEXT_BEAN_SALESMAN_BUY_FOR_10: if (revealMerchant && (ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_BEANS_ONLY) || - ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL))) { + ctx->GetOption(RSK_SHUFFLE_MERCHANTS).Is(RO_SHUFFLE_MERCHANTS_ALL))) { reveal = RC_ZR_MAGIC_BEAN_SALESMAN; } break; case TEXT_GRANNYS_SHOP: if (revealMerchant && nonBeanMerchants && - (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE) || INV_CONTENT(ITEM_CLAIM_CHECK) == ITEM_CLAIM_CHECK)) { - reveal = RC_KAK_GRANNYS_SHOP; - } + (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE) || INV_CONTENT(ITEM_CLAIM_CHECK) == ITEM_CLAIM_CHECK)) { + reveal = RC_KAK_GRANNYS_SHOP; + } break; case TEXT_MEDIGORON: if (revealMerchant && nonBeanMerchants) { @@ -742,7 +750,7 @@ void RandomizerOnDialogMessageHandler() { case TEXT_SHEIK_NEED_HOOK: case TEXT_SHEIK_HAVE_HOOK: if (ctx->GetOption(RSK_OOT_HINT) && gPlayState->sceneNum == SCENE_TEMPLE_OF_TIME && - !ctx->GetItemLocation(RC_SONG_FROM_OCARINA_OF_TIME)->HasObtained()) { + !ctx->GetItemLocation(RC_SONG_FROM_OCARINA_OF_TIME)->HasObtained()) { auto itemoot_loc = ctx->GetItemLocation(RC_HF_OCARINA_OF_TIME_ITEM); if (itemoot_loc->GetCheckStatus() == RCSHOW_UNCHECKED) { itemoot_loc->SetCheckStatus(RCSHOW_IDENTIFIED); @@ -787,15 +795,17 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l break; } case VB_PLAY_SLOW_CHEST_CS: { - // We force fast chests if SkipGetItemAnimation is enabled because the camera in the CS looks pretty wonky otherwise - if (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("TimeSavers.SkipGetItemAnimation"), SGIA_DISABLED)) { + // We force fast chests if SkipGetItemAnimation is enabled because the camera in the CS looks pretty wonky + // otherwise + if (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("TimeSavers.SkipGetItemAnimation"), SGIA_JUNK)) { *should = false; } break; } 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); + RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor( + chest->dyna.actor.id, gPlayState->sceneNum, chest->dyna.actor.params); if (!OTRGlobals::Instance->gRandoContext->IsLocationShuffled(rc)) { break; } @@ -817,17 +827,21 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l *should = false; break; case VB_SHIEK_PREPARE_TO_GIVE_SERENADE_OF_WATER: { - *should = !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER) && !Flags_GetTreasure(gPlayState, 0x2); + *should = + !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER) && !Flags_GetTreasure(gPlayState, 0x2); break; } case VB_BE_ELIGIBLE_FOR_SERENADE_OF_WATER: - *should = !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER) && Flags_GetTreasure(gPlayState, 0x2); + *should = + !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_SERENADE_OF_WATER) && Flags_GetTreasure(gPlayState, 0x2); break; case VB_BE_ELIGIBLE_FOR_PRELUDE_OF_LIGHT: - *should = !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST); + *should = + !Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST); break; case VB_MIDO_SPAWN: - if (RAND_GET_OPTION(RSK_FOREST) != RO_CLOSED_FOREST_OFF && !Flags_GetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD)) { + if (RAND_GET_OPTION(RSK_FOREST) != RO_CLOSED_FOREST_OFF && + !Flags_GetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD)) { *should = true; } break; @@ -840,26 +854,22 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l *should = Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_KOKIRI_EMERALD_DEKU_TREE_DEAD); break; case VB_OPEN_KOKIRI_FOREST: - *should = Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_KOKIRI_EMERALD_DEKU_TREE_DEAD) || RAND_GET_OPTION(RSK_FOREST) != RO_CLOSED_FOREST_ON; + *should = Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_KOKIRI_EMERALD_DEKU_TREE_DEAD) || + RAND_GET_OPTION(RSK_FOREST) != RO_CLOSED_FOREST_ON; break; case VB_BE_ELIGIBLE_FOR_DARUNIAS_JOY_REWARD: *should = !Flags_GetRandomizerInf(RAND_INF_DARUNIAS_JOY); break; case VB_BE_ELIGIBLE_FOR_LIGHT_ARROWS: - *should = - LINK_IS_ADULT && - (gEntranceTable[gSaveContext.entranceIndex].scene == SCENE_TEMPLE_OF_TIME) && - !Flags_GetEventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS) && - MeetsLACSRequirements(); + *should = LINK_IS_ADULT && (gEntranceTable[gSaveContext.entranceIndex].scene == SCENE_TEMPLE_OF_TIME) && + !Flags_GetEventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS) && + MeetsLACSRequirements(); break; case VB_BE_ELIGIBLE_FOR_NOCTURNE_OF_SHADOW: - *should = - !Flags_GetEventChkInf(EVENTCHKINF_BONGO_BONGO_ESCAPED_FROM_WELL) && - LINK_IS_ADULT && - gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_KAKARIKO_VILLAGE && - CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST) && - CHECK_QUEST_ITEM(QUEST_MEDALLION_FIRE) && - CHECK_QUEST_ITEM(QUEST_MEDALLION_WATER); + *should = !Flags_GetEventChkInf(EVENTCHKINF_BONGO_BONGO_ESCAPED_FROM_WELL) && LINK_IS_ADULT && + gEntranceTable[((void)0, gSaveContext.entranceIndex)].scene == SCENE_KAKARIKO_VILLAGE && + CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST) && CHECK_QUEST_ITEM(QUEST_MEDALLION_FIRE) && + CHECK_QUEST_ITEM(QUEST_MEDALLION_WATER); break; case VB_BE_ELIGIBLE_FOR_CHILD_ROLLING_GORON_REWARD: { // Don't require a bomb bag to get prize in rando @@ -869,7 +879,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_BE_ELIGIBLE_FOR_MAGIC_BEANS_PURCHASE: { if (RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_BEANS_ONLY || RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL) { - *should = gSaveContext.rupees >= OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_ZR_MAGIC_BEAN_SALESMAN)->GetPrice(); + *should = gSaveContext.rupees >= + OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_ZR_MAGIC_BEAN_SALESMAN)->GetPrice(); } break; } @@ -905,9 +916,11 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } case VB_ITEM_B_HEART_DESPAWN: { ItemBHeart* itemBHeart = va_arg(args, ItemBHeart*); - RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor(itemBHeart->actor.id, gPlayState->sceneNum, itemBHeart->actor.params); + RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor( + itemBHeart->actor.id, gPlayState->sceneNum, itemBHeart->actor.params); if (rc != RC_UNKNOWN_CHECK) { - itemBHeart->sohItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(rc, true, (GetItemID)Rando::StaticData::GetLocation(rc)->GetVanillaItem()); + itemBHeart->sohItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry( + rc, true, (GetItemID)Rando::StaticData::GetLocation(rc)->GetVanillaItem()); itemBHeart->actor.draw = (ActorFunc)ItemBHeart_DrawRandomizedItem; itemBHeart->actor.update = (ActorFunc)ItemBHeart_UpdateRandomizedItem; *should = Rando::Context::GetInstance()->GetItemLocation(rc)->HasObtained(); @@ -970,7 +983,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } case VB_BIGGORON_CONSIDER_TRADE_COMPLETE: { // This being true will prevent other biggoron trades, there are already safegaurds in place to prevent - // claim check from being traded multiple times, so we don't really need the quest to ever be considered "complete" + // claim check from being traded multiple times, so we don't really need the quest to ever be considered + // "complete" *should = false; break; } @@ -997,7 +1011,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l Actor_Kill(&item00->actor); *should = false; } else if (item00->actor.params == ITEM00_SOH_GIVE_ITEM_ENTRY) { - Audio_PlaySoundGeneral(NA_SE_SY_GET_ITEM, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); + Audio_PlaySoundGeneral(NA_SE_SY_GET_ITEM, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, + &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); if (item00->itemEntry.modIndex == MOD_NONE) { if (item00->itemEntry.getItemId == GI_SWORD_BGS) { gSaveContext.bgsFlag = true; @@ -1020,7 +1035,9 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } else if (item00->itemEntry.modIndex == MOD_RANDOMIZER) { Notification::Emit({ .message = "You found ", - .suffix = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId).GetName().english, + .suffix = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId) + .GetName() + .english, }); } @@ -1078,15 +1095,19 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l break; } case VB_CHECK_RANDO_PRICE_OF_CARPET_SALESMAN: { - if (EnJs_RandoCanGetCarpetMerchantItem()){ - *should = gSaveContext.rupees < OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_WASTELAND_BOMBCHU_SALESMAN)->GetPrice(); + if (EnJs_RandoCanGetCarpetMerchantItem()) { + *should = + gSaveContext.rupees < + OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_WASTELAND_BOMBCHU_SALESMAN)->GetPrice(); } break; } case VB_GIVE_ITEM_FROM_CARPET_SALESMAN: { EnJs* enJs = va_arg(args, EnJs*); - if (EnJs_RandoCanGetCarpetMerchantItem()){ - Rupees_ChangeBy(OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_WASTELAND_BOMBCHU_SALESMAN)->GetPrice() * -1); + if (EnJs_RandoCanGetCarpetMerchantItem()) { + Rupees_ChangeBy( + OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_WASTELAND_BOMBCHU_SALESMAN)->GetPrice() * + -1); enJs->actor.parent = NULL; enJs->actor.textId = TEXT_CARPET_SALESMAN_ARMS_DEALER; enJs->actionFunc = (EnJsActionFunc)func_80A890C0; @@ -1101,15 +1122,15 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l break; } case VB_CHECK_RANDO_PRICE_OF_MEDIGORON: { - if (EnGm_RandoCanGetMedigoronItem()){ - *should = gSaveContext.rupees < OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_GC_MEDIGORON)->GetPrice(); + if (EnGm_RandoCanGetMedigoronItem()) { + *should = gSaveContext.rupees < + OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_GC_MEDIGORON)->GetPrice(); } break; } - case VB_GIVE_ITEM_FROM_MEDIGORON: { - // fallthrough - case VB_BE_ELIGIBLE_FOR_GIANTS_KNIFE_PURCHASE: + case VB_GIVE_ITEM_FROM_MEDIGORON: + case VB_BE_ELIGIBLE_FOR_GIANTS_KNIFE_PURCHASE: { if (EnGm_RandoCanGetMedigoronItem()) { if (id == VB_GIVE_ITEM_FROM_MEDIGORON) { EnGm* enGm = va_arg(args, EnGm*); @@ -1117,7 +1138,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l Flags_SetRandomizerInf(RAND_INF_MERCHANTS_MEDIGORON); enGm->actor.parent = NULL; enGm->actionFunc = (EnGmActionFunc)func_80A3DC44; - Rupees_ChangeBy(OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_GC_MEDIGORON)->GetPrice() * -1); + Rupees_ChangeBy(OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_GC_MEDIGORON)->GetPrice() * + -1); *should = false; } else { // Resets "Talked to Medigoron" flag in infTable to restore initial conversation state @@ -1131,7 +1153,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l EnMs* enMs = va_arg(args, EnMs*); if (RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_BEANS_ONLY || RAND_GET_OPTION(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL) { - Rupees_ChangeBy(OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_ZR_MAGIC_BEAN_SALESMAN)->GetPrice() * -1); + Rupees_ChangeBy( + OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_ZR_MAGIC_BEAN_SALESMAN)->GetPrice() * -1); BEANS_BOUGHT = 10; // Only set inf for buying rando check Flags_SetRandomizerInf(RAND_INF_MERCHANTS_MAGIC_BEAN_SALESMAN); @@ -1143,10 +1166,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_FROGS_GO_TO_IDLE: { EnFr* enFr = va_arg(args, EnFr*); - if ( - (enFr->songIndex >= FROG_STORMS && enFr->reward == GI_HEART_PIECE) || - (enFr->songIndex < FROG_STORMS && enFr->reward == GI_RUPEE_PURPLE) - ) { + if ((enFr->songIndex >= FROG_STORMS && enFr->reward == GI_HEART_PIECE) || + (enFr->songIndex < FROG_STORMS && enFr->reward == GI_RUPEE_PURPLE)) { *should = true; } break; @@ -1234,7 +1255,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_BUSINESS_SCRUB_DESPAWN: { EnShopnuts* enShopnuts = va_arg(args, EnShopnuts*); s16 respawnData = gSaveContext.respawn[RESPAWN_MODE_RETURN].data & ((1 << 8) - 1); - ScrubIdentity scrubIdentity = OTRGlobals::Instance->gRandomizer->IdentifyScrub(gPlayState->sceneNum, enShopnuts->actor.params, respawnData); + ScrubIdentity scrubIdentity = OTRGlobals::Instance->gRandomizer->IdentifyScrub( + gPlayState->sceneNum, enShopnuts->actor.params, respawnData); if (scrubIdentity.isShuffled) { *should = Flags_GetRandomizerInf(scrubIdentity.randomizerInf); @@ -1289,16 +1311,18 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l break; } case VB_GRANNY_SAY_INSUFFICIENT_RUPEES: { - if (EnDs_RandoCanGetGrannyItem()){ - *should = gSaveContext.rupees < OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_KAK_GRANNYS_SHOP)->GetPrice(); + if (EnDs_RandoCanGetGrannyItem()) { + *should = gSaveContext.rupees < + OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_KAK_GRANNYS_SHOP)->GetPrice(); } break; } case VB_GRANNY_TAKE_MONEY: { - if (EnDs_RandoCanGetGrannyItem()){ - *should = false; - Rupees_ChangeBy(OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_KAK_GRANNYS_SHOP)->GetPrice() * -1); - } + if (EnDs_RandoCanGetGrannyItem()) { + *should = false; + Rupees_ChangeBy(OTRGlobals::Instance->gRandoContext->GetItemLocation(RC_KAK_GRANNYS_SHOP)->GetPrice() * + -1); + } break; } case VB_NEED_BOTTLE_FOR_GRANNYS_ITEM: { @@ -1327,20 +1351,26 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l break; } case VB_BE_ELIGIBLE_TO_OPEN_DOT: { - bool eligible = RAND_GET_OPTION(RSK_DOOR_OF_TIME) != RO_DOOROFTIME_CLOSED || ( - INV_CONTENT(ITEM_OCARINA_FAIRY) == ITEM_OCARINA_TIME && - CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && - CHECK_QUEST_ITEM(QUEST_GORON_RUBY) && - CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE) - ); + bool eligible = + RAND_GET_OPTION(RSK_DOOR_OF_TIME) != RO_DOOROFTIME_CLOSED || + (INV_CONTENT(ITEM_OCARINA_FAIRY) == ITEM_OCARINA_TIME && CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && + CHECK_QUEST_ITEM(QUEST_GORON_RUBY) && CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)); *should = eligible; break; } case VB_GIVE_ITEM_FROM_HORSEBACK_ARCHERY: { + EnGe1* enGe1 = va_arg(args, EnGe1*); // give both rewards at the same time + if (gSaveContext.minigameScore >= 1000) { + Flags_SetInfTable(INFTABLE_190); + } if (gSaveContext.minigameScore >= 1500) { Flags_SetItemGetInf(ITEMGETINF_0F); } + // move gerudo actor onto her wait loop + enGe1->actionFunc = EnGe1_Wait_Archery; + EnGe1_SetAnimationIdle(enGe1); + // skip the vanilla gives. *should = false; break; } @@ -1362,7 +1392,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l // we're giving the 100 GS rando reward! set the rando inf Flags_SetRandomizerInf(RAND_INF_KAK_100_GOLD_SKULLTULA_REWARD); - + // also set the actionfunc so this doesn't immediately get // called again (and lead to a vanilla+rando item give // because the flag check will pass next time) @@ -1389,7 +1419,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } case VB_GIVE_ITEM_FROM_BOMBCHU_BOWLING: { EnBomBowlPit* enBomBowlPit = va_arg(args, EnBomBowlPit*); - if (enBomBowlPit->prizeIndex == EXITEM_BOMB_BAG_BOWLING || enBomBowlPit->prizeIndex == EXITEM_HEART_PIECE_BOWLING) { + if (enBomBowlPit->prizeIndex == EXITEM_BOMB_BAG_BOWLING || + enBomBowlPit->prizeIndex == EXITEM_HEART_PIECE_BOWLING) { *should = false; } break; @@ -1425,17 +1456,17 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_DRAW_AMMO_COUNT: { s16 item = *va_arg(args, s16*); // don't draw ammo count if you have the infinite upgrade - if ( - (item == ITEM_NUT && Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE)) || + if ((item == ITEM_NUT && Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE)) || (item == ITEM_STICK && Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_STICK_UPGRADE)) || (item == ITEM_BOMB && Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BOMB_BAG)) || - ( - (item == ITEM_BOW || item == ITEM_BOW_ARROW_FIRE || item == ITEM_BOW_ARROW_ICE || item == ITEM_BOW_ARROW_LIGHT) && - Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_QUIVER) && gPlayState->shootingGalleryStatus < 2 && gSaveContext.minigameState != 1 - ) || - (item == ITEM_SLINGSHOT && Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BULLET_BAG) && gPlayState->shootingGalleryStatus < 2) || - (item == ITEM_BOMBCHU && Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BOMBCHUS) && gPlayState->bombchuBowlingStatus < 1) - ) { + ((item == ITEM_BOW || item == ITEM_BOW_ARROW_FIRE || item == ITEM_BOW_ARROW_ICE || + item == ITEM_BOW_ARROW_LIGHT) && + Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_QUIVER) && gPlayState->shootingGalleryStatus < 2 && + gSaveContext.minigameState != 1) || + (item == ITEM_SLINGSHOT && Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BULLET_BAG) && + gPlayState->shootingGalleryStatus < 2) || + (item == ITEM_BOMBCHU && Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BOMBCHUS) && + gPlayState->bombchuBowlingStatus < 1)) { *should = false; } break; @@ -1521,7 +1552,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_SHOULD_SET_FISHING_RECORD: { VBFishingData* fishData = va_arg(args, VBFishingData*); *should = (s16)fishData->sFishingRecordLength < (s16)fishData->fishWeight; - if (!*should){ + if (!*should) { *fishData->sFishOnHandLength = 0.0f; } break; @@ -1532,19 +1563,20 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l break; } case VB_GIVE_RANDO_FISHING_PRIZE: { - if (IS_RANDO){ + if (IS_RANDO) { VBFishingData* fishData = va_arg(args, VBFishingData*); if (*fishData->sFishOnHandIsLoach) { if (!Flags_GetRandomizerInf(RAND_INF_CAUGHT_LOACH) && - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY) == RO_FISHSANITY_HYRULE_LOACH){ + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY) == + RO_FISHSANITY_HYRULE_LOACH) { Flags_SetRandomizerInf(RAND_INF_CAUGHT_LOACH); Message_StartTextbox(gPlayState, TEXT_FISHING_RELEASE_THIS_ONE, NULL); *should = true; fishData->actor->stateAndTimer = 20; } } else { - if (ShouldGiveFishingPrize(fishData->fishWeight)){ - if (LINK_IS_CHILD){ + if (ShouldGiveFishingPrize(fishData->fishWeight)) { + if (LINK_IS_CHILD) { Flags_SetRandomizerInf(RAND_INF_CHILD_FISHING); HIGH_SCORE(HS_FISHING) |= HS_FISH_PRIZE_CHILD; } else { @@ -1559,7 +1591,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } break; } - case VB_TRADE_TIMER_EYEDROPS:{ + case VB_TRADE_TIMER_EYEDROPS: { EnMk* enMk = va_arg(args, EnMk*); Flags_SetRandomizerInf(RAND_INF_ADULT_TRADES_LH_TRADE_FROG); enMk->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED; @@ -1568,8 +1600,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l *should = false; break; } - // We need to override the vanilla behavior here because the player might sequence break and get Ruto kidnapped before accessing other - // checks that require Ruto. So if she's kidnapped we allow her to spawn again + // We need to override the vanilla behavior here because the player might sequence break and get Ruto kidnapped + // before accessing other checks that require Ruto. So if she's kidnapped we allow her to spawn again case VB_RUTO_BE_CONSIDERED_NOT_KIDNAPPED: { *should = !Flags_GetInfTable(INFTABLE_145) || Flags_GetInfTable(INFTABLE_146); break; @@ -1591,7 +1623,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l if (*should == true && RAND_GET_OPTION(RSK_SHUFFLE_ENTRANCES)) { // Check for dungeon special entrances that are randomized to a new location if (std::find(entrPersistTempFlags.begin(), entrPersistTempFlags.end(), originalEntrance) != - entrPersistTempFlags.end() && originalEntrance != gPlayState->nextEntranceIndex) { + entrPersistTempFlags.end() && + originalEntrance != gPlayState->nextEntranceIndex) { // Normally dungeons use a special voidout between scenes so that entering/exiting a boss room, // or leaving via Spirit Hands and going back in persist temp flags across scenes. // For ER, the temp flags should be wiped out so that they aren't transferred to the new location. @@ -1616,7 +1649,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l } case VB_HEISHI2_ACCEPT_ITEM_AS_ZELDAS_LETTER: { if (*should) { - //remove zelda's letter as this is the only use for it + // remove zelda's letter as this is the only use for it Flags_UnsetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA); } break; @@ -1631,7 +1664,6 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_GIVE_ITEM_FROM_LAB_DIVE: case VB_GIVE_ITEM_FROM_SKULL_KID_SARIAS_SONG: case VB_GIVE_ITEM_FROM_MAN_ON_ROOF: - case VB_GIVE_ITEM_SKULL_TOKEN: case VB_GIVE_ITEM_FROM_BLUE_WARP: case VB_GIVE_ITEM_FAIRY_OCARINA: case VB_GIVE_ITEM_WEIRD_EGG: @@ -1647,6 +1679,9 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_GIVE_ITEM_SHADOW_MEDALLION: *should = false; break; + case VB_GIVE_ITEM_SKULL_TOKEN: + *should = (Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OFF)); + break; default: break; } @@ -1660,25 +1695,45 @@ void RandomizerOnSceneInitHandler(int16_t sceneNum) { // probably need to do something different when we implement shuffle if (sceneNum == SCENE_TREASURE_BOX_SHOP) { Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_1); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1) + ->SetCheckStatus(RCSHOW_UNCHECKED); Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_2); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2) + ->SetCheckStatus(RCSHOW_UNCHECKED); Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_3); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3) + ->SetCheckStatus(RCSHOW_UNCHECKED); Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_4); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4) + ->SetCheckStatus(RCSHOW_UNCHECKED); Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_ITEM_5); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5) + ->SetCheckStatus(RCSHOW_UNCHECKED); Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_1); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_1)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_1) + ->SetCheckStatus(RCSHOW_UNCHECKED); Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_2); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_2)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_2) + ->SetCheckStatus(RCSHOW_UNCHECKED); Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_3); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_3)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_3) + ->SetCheckStatus(RCSHOW_UNCHECKED); Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_4)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_4) + ->SetCheckStatus(RCSHOW_UNCHECKED); Flags_UnsetRandomizerInf(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5); - Rando::Context::GetInstance()->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_5)->SetCheckStatus(RCSHOW_UNCHECKED); + Rando::Context::GetInstance() + ->GetItemLocation(RC_MARKET_TREASURE_CHEST_GAME_KEY_5) + ->SetCheckStatus(RCSHOW_UNCHECKED); CheckTracker::RecalculateAllAreaTotals(); } @@ -1713,17 +1768,16 @@ void RandomizerOnSceneInitHandler(int16_t sceneNum) { updateHook = 0; } - // If we're not in the Temple of Time or we've already learned the Prelude of Light and received LACs, we don't need to do anything - if ( - sceneNum != SCENE_TEMPLE_OF_TIME || - ( - Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && - Flags_GetEventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS) - ) - ) return; + // If we're not in the Temple of Time or we've already learned the Prelude of Light and received LACs, we don't need + // to do anything + if (sceneNum != SCENE_TEMPLE_OF_TIME || + (Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && + Flags_GetEventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS))) + return; updateHook = GameInteractor::Instance->RegisterGameHook([]() { - if (!Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && LINK_IS_ADULT && CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST) && gPlayState->roomCtx.curRoom.num == 0) { + if (!Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && LINK_IS_ADULT && + CHECK_QUEST_ITEM(QUEST_MEDALLION_FOREST) && gPlayState->roomCtx.curRoom.num == 0) { Flags_SetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT); } @@ -1732,11 +1786,10 @@ void RandomizerOnSceneInitHandler(int16_t sceneNum) { Flags_SetEventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS); } - // If both awards have been given, we can unregister the hook, otherwise it will get unregistered when the player leaves the area - if ( - Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && - Flags_GetEventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS) - ) { + // If both awards have been given, we can unregister the hook, otherwise it will get unregistered when the + // player leaves the area + if (Flags_GetEventChkInf(EVENTCHKINF_LEARNED_PRELUDE_OF_LIGHT) && + Flags_GetEventChkInf(EVENTCHKINF_RETURNED_TO_TEMPLE_OF_TIME_WITH_ALL_MEDALLIONS)) { GameInteractor::Instance->UnregisterGameHook(updateHook); updateHook = 0; } @@ -1772,13 +1825,11 @@ void EnDns_RandomizerPurchase(EnDns* enDns) { void ObjComb_RandomizerChooseItemDrop(ObjComb* objComb, PlayState* play) { s16 params = objComb->actor.params & 0x1F; - if ( - RAND_GET_OPTION(RSK_SHUFFLE_BEEHIVES) && - !Flags_GetRandomizerInf(objComb->beehiveIdentity.randomizerInf) - ) { + if (RAND_GET_OPTION(RSK_SHUFFLE_BEEHIVES) && !Flags_GetRandomizerInf(objComb->beehiveIdentity.randomizerInf)) { EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &objComb->actor.world.pos, ITEM00_SOH_DUMMY); item00->randoInf = objComb->beehiveIdentity.randomizerInf; - item00->itemEntry = OTRGlobals::Instance->gRandomizer->GetItemFromKnownCheck(objComb->beehiveIdentity.randomizerCheck, GI_NONE); + item00->itemEntry = + OTRGlobals::Instance->gRandomizer->GetItemFromKnownCheck(objComb->beehiveIdentity.randomizerCheck, GI_NONE); item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; return; } @@ -1803,10 +1854,7 @@ void ObjComb_RandomizerWait(ObjComb* objComb, PlayState* play) { s32 dmgFlags; objComb->unk_1B0 -= 50; - if ( - RAND_GET_OPTION(RSK_SHUFFLE_BEEHIVES) && - !Flags_GetRandomizerInf(objComb->beehiveIdentity.randomizerInf) - ) { + if (RAND_GET_OPTION(RSK_SHUFFLE_BEEHIVES) && !Flags_GetRandomizerInf(objComb->beehiveIdentity.randomizerInf)) { if (objComb->unk_1B0 <= -5000) { objComb->unk_1B0 = 1500; } @@ -1830,17 +1878,19 @@ void ObjComb_RandomizerWait(ObjComb* objComb, PlayState* play) { if (objComb->actor.update != NULL) { CollisionCheck_SetOC(play, &play->colChkCtx, &objComb->collider.base); - } + } } void RandomizerOnActorInitHandler(void* actorRef) { Actor* actor = static_cast(actorRef); if (actor->id == ACTOR_EN_SI) { - RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor(actor->id, gPlayState->sceneNum, actor->params); + RandomizerCheck rc = + OTRGlobals::Instance->gRandomizer->GetCheckFromActor(actor->id, gPlayState->sceneNum, actor->params); if (rc != RC_UNKNOWN_CHECK) { EnSi* enSi = static_cast(actorRef); - enSi->sohGetItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(rc, true, (GetItemID)Rando::StaticData::GetLocation(rc)->GetVanillaItem()); + enSi->sohGetItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry( + rc, true, (GetItemID)Rando::StaticData::GetLocation(rc)->GetVanillaItem()); actor->draw = (ActorFunc)EnSi_DrawRandomizedItem; } } @@ -1848,15 +1898,13 @@ void RandomizerOnActorInitHandler(void* actorRef) { if (actor->id == ACTOR_EN_DNS) { EnDns* enDns = static_cast(actorRef); s16 respawnData = gSaveContext.respawn[RESPAWN_MODE_RETURN].data & ((1 << 8) - 1); - enDns->sohScrubIdentity = OTRGlobals::Instance->gRandomizer->IdentifyScrub(gPlayState->sceneNum, enDns->actor.params, respawnData); + enDns->sohScrubIdentity = + OTRGlobals::Instance->gRandomizer->IdentifyScrub(gPlayState->sceneNum, enDns->actor.params, respawnData); if (enDns->sohScrubIdentity.isShuffled) { // DNS uses pointers so we're creating our own entry instead of modifying the original enDns->sohDnsItemEntry = { - enDns->dnsItemEntry->itemPrice, - 1, - enDns->sohScrubIdentity.getItemId, - EnDns_RandomizerPurchaseableCheck, + enDns->dnsItemEntry->itemPrice, 1, enDns->sohScrubIdentity.getItemId, EnDns_RandomizerPurchaseableCheck, EnDns_RandomizerPurchase, }; enDns->dnsItemEntry = &enDns->sohDnsItemEntry; @@ -1870,30 +1918,34 @@ void RandomizerOnActorInitHandler(void* actorRef) { static uint32_t enDnsUpdateHook = 0; static uint32_t enDnsKillHook = 0; if (!enDnsUpdateHook) { - enDnsUpdateHook = GameInteractor::Instance->RegisterGameHook([](void* innerActorRef) { - Actor* innerActor = static_cast(innerActorRef); - if (innerActor->id == ACTOR_EN_DNS) { - EnDns* innerEnDns = static_cast(innerActorRef); - if (innerEnDns->sohScrubIdentity.isShuffled) { - innerActor->textId = TEXT_SCRUB_RANDOM; + enDnsUpdateHook = + GameInteractor::Instance->RegisterGameHook([](void* innerActorRef) { + Actor* innerActor = static_cast(innerActorRef); + if (innerActor->id == ACTOR_EN_DNS) { + EnDns* innerEnDns = static_cast(innerActorRef); + if (innerEnDns->sohScrubIdentity.isShuffled) { + innerActor->textId = TEXT_SCRUB_RANDOM; + } } - } - }); - enDnsKillHook = GameInteractor::Instance->RegisterGameHook([](int16_t sceneNum) { - GameInteractor::Instance->UnregisterGameHook(enDnsUpdateHook); - GameInteractor::Instance->UnregisterGameHook(enDnsKillHook); - enDnsUpdateHook = 0; - enDnsKillHook = 0; - }); + }); + enDnsKillHook = + GameInteractor::Instance->RegisterGameHook([](int16_t sceneNum) { + GameInteractor::Instance->UnregisterGameHook(enDnsUpdateHook); + GameInteractor::Instance->UnregisterGameHook(enDnsKillHook); + enDnsUpdateHook = 0; + enDnsKillHook = 0; + }); } } } if (actor->id == ACTOR_ITEM_ETCETERA) { ItemEtcetera* itemEtcetera = static_cast(actorRef); - RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor(itemEtcetera->actor.id, gPlayState->sceneNum, itemEtcetera->actor.params); + RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor( + itemEtcetera->actor.id, gPlayState->sceneNum, itemEtcetera->actor.params); if (rc != RC_UNKNOWN_CHECK) { - itemEtcetera->sohItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(rc, true, (GetItemID)Rando::StaticData::GetLocation(rc)->GetVanillaItem()); + itemEtcetera->sohItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry( + rc, true, (GetItemID)Rando::StaticData::GetLocation(rc)->GetVanillaItem()); itemEtcetera->drawFunc = (ActorFunc)ItemEtcetera_DrawRandomizedItem; } @@ -1924,13 +1976,14 @@ void RandomizerOnActorInitHandler(void* actorRef) { if (actor->id == ACTOR_OBJ_COMB) { ObjComb* objComb = static_cast(actorRef); s16 respawnData = gSaveContext.respawn[RESPAWN_MODE_RETURN].data & ((1 << 8) - 1); - objComb->beehiveIdentity = OTRGlobals::Instance->gRandomizer->IdentifyBeehive(gPlayState->sceneNum, (s16)actor->world.pos.x, respawnData); + objComb->beehiveIdentity = OTRGlobals::Instance->gRandomizer->IdentifyBeehive( + gPlayState->sceneNum, (s16)actor->world.pos.x, respawnData); objComb->actionFunc = (ObjCombActionFunc)ObjComb_RandomizerWait; } if (actor->id == ACTOR_EN_EX_ITEM) { EnExItem* enExItem = static_cast(actorRef); - + RandomizerCheck rc = RC_UNKNOWN_CHECK; switch (enExItem->type) { case EXITEM_BOMB_BAG_COUNTER: @@ -1943,14 +1996,16 @@ void RandomizerOnActorInitHandler(void* actorRef) { break; case EXITEM_BOMBCHUS_COUNTER: case EXITEM_BOMBCHUS_BOWLING: - //RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS was removed as a 3DS holdover not in anyones near term plans due to being pretty useless. + // RC_MARKET_BOMBCHU_BOWLING_BOMBCHUS was removed as a 3DS holdover not in anyones near term plans due + // to being pretty useless. break; case EXITEM_BULLET_BAG: rc = RC_LW_TARGET_IN_WOODS; break; } if (rc != RC_UNKNOWN_CHECK) { - enExItem->sohItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(rc, true, (GetItemID)Rando::StaticData::GetLocation(rc)->GetVanillaItem()); + enExItem->sohItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry( + rc, true, (GetItemID)Rando::StaticData::GetLocation(rc)->GetVanillaItem()); enExItem->actionFunc = (EnExItemActionFunc)EnExItem_WaitForObjectRandomized; } } @@ -1973,34 +2028,23 @@ void RandomizerOnActorInitHandler(void* actorRef) { if (actor->id == ACTOR_BG_TREEMOUTH && LINK_IS_ADULT && RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF && (RAND_GET_OPTION(RSK_FOREST) == RO_CLOSED_FOREST_OFF || - Flags_GetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD))) { + Flags_GetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD))) { BgTreemouth* bgTreemouth = static_cast(actorRef); bgTreemouth->unk_168 = 1.0f; } - //consumable bags - if ( - actor->id == ACTOR_EN_ITEM00 && - ( - ( - RAND_GET_OPTION(RSK_SHUFFLE_DEKU_STICK_BAG) && - CUR_UPG_VALUE(UPG_STICKS) == 0 && - actor->params == ITEM00_STICK - ) || - ( - RAND_GET_OPTION(RSK_SHUFFLE_DEKU_NUT_BAG) && - CUR_UPG_VALUE(UPG_NUTS) == 0 && - actor->params == ITEM00_NUTS - ) - ) - ) { + // consumable bags + if (actor->id == ACTOR_EN_ITEM00 && + ((RAND_GET_OPTION(RSK_SHUFFLE_DEKU_STICK_BAG) && CUR_UPG_VALUE(UPG_STICKS) == 0 && + actor->params == ITEM00_STICK) || + (RAND_GET_OPTION(RSK_SHUFFLE_DEKU_NUT_BAG) && CUR_UPG_VALUE(UPG_NUTS) == 0 && actor->params == ITEM00_NUTS))) { Actor_Kill(actor); } if (RAND_GET_OPTION(RSK_SHUFFLE_BOSS_SOULS)) { - //Boss souls require an additional item (represented by a RAND_INF) to spawn a boss in a particular lair + // Boss souls require an additional item (represented by a RAND_INF) to spawn a boss in a particular lair RandomizerInf currentBossSoulRandInf = RAND_INF_MAX; - switch (gPlayState->sceneNum){ + switch (gPlayState->sceneNum) { case SCENE_DEKU_TREE_BOSS: currentBossSoulRandInf = RAND_INF_GOHMA_SOUL; break; @@ -2036,16 +2080,16 @@ void RandomizerOnActorInitHandler(void* actorRef) { } // Deletes all actors in the boss category if the soul isn't found. - // Some actors, like Dark Link, Arwings, and Zora's Sapphire...?, are in this category despite not being actual bosses, - // so ignore any "boss" if `currentBossSoulRandInf` doesn't change from RAND_INF_MAX. - // Iron Knuckle (Nabooru) in Twinrova's room is a special exception, so exclude knuckles too. + // Some actors, like Dark Link, Arwings, and Zora's Sapphire...?, are in this category despite not being actual + // bosses, so ignore any "boss" if `currentBossSoulRandInf` doesn't change from RAND_INF_MAX. Iron Knuckle + // (Nabooru) in Twinrova's room is a special exception, so exclude knuckles too. if (currentBossSoulRandInf != RAND_INF_MAX) { if (!Flags_GetRandomizerInf(currentBossSoulRandInf) && actor->category == ACTORCAT_BOSS && actor->id != ACTOR_EN_IK) { Actor_Delete(&gPlayState->actorCtx, actor, gPlayState); } - //Special case for Phantom Ganon's horse (and fake), as they're considered "background actors", - //but still control the boss fight flow. + // Special case for Phantom Ganon's horse (and fake), as they're considered "background actors", + // but still control the boss fight flow. if (!Flags_GetRandomizerInf(RAND_INF_PHANTOM_GANON_SOUL) && actor->id == ACTOR_EN_FHG) { Actor_Delete(&gPlayState->actorCtx, actor, gPlayState); } @@ -2054,26 +2098,23 @@ void RandomizerOnActorInitHandler(void* actorRef) { // In MQ Spirit, remove the large silver block in the hole as child so the chest in the silver block hallway // can be guaranteed accessible - if ( - actor->id == ACTOR_OBJ_OSHIHIKI && - LINK_IS_CHILD && - ResourceMgr_IsGameMasterQuest() && + if (actor->id == ACTOR_OBJ_OSHIHIKI && LINK_IS_CHILD && ResourceMgr_IsGameMasterQuest() && gPlayState->sceneNum == SCENE_SPIRIT_TEMPLE && actor->room == 6 && // Spirit Temple silver block hallway - actor->params == 0x9C7 // Silver block that is marked as in the hole + actor->params == 0x9C7 // Silver block that is marked as in the hole ) { Actor_Kill(actor); return; } - if ( - // If child is in the adult shooting gallery or adult in the child shooting gallery, then despawn the shooting gallery man - actor->id == ACTOR_EN_SYATEKI_MAN && - RAND_GET_OPTION(RSK_SHUFFLE_INTERIOR_ENTRANCES) && - ( - (LINK_IS_CHILD && Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x00)) || //Kakariko Village -> Adult Shooting Gallery, index 003B in the entrance table - (LINK_IS_ADULT && Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x01)) //Market -> Child Shooting Gallery, index 016D in the entrance table - ) - ) { + // If child is in the adult shooting gallery or adult in the child shooting gallery, then despawn the shooting + // gallery man + if (actor->id == ACTOR_EN_SYATEKI_MAN && RAND_GET_OPTION(RSK_SHUFFLE_INTERIOR_ENTRANCES) && + ((LINK_IS_CHILD && + // Kakariko Village -> Adult Shooting Gallery, index 003B in the entrance table + Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x00)) || + (LINK_IS_ADULT && + // Market -> Child Shooting Gallery, index 016D in the entrance table + Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x01)))) { Actor_Kill(actor); return; } @@ -2144,85 +2185,61 @@ void RandomizerOnActorUpdateHandler(void* refActor) { } // In ER, override the warp song locations. Also removes the warp song cutscene - if (RAND_GET_OPTION(RSK_SHUFFLE_ENTRANCES) && actor->id == ACTOR_DEMO_KANKYO && actor->params == 0x000F) { // Warp Song particles + if (RAND_GET_OPTION(RSK_SHUFFLE_ENTRANCES) && actor->id == ACTOR_DEMO_KANKYO && + actor->params == 0x000F) { // Warp Song particles Entrance_SetWarpSongEntrance(); } if (actor->id == ACTOR_OBJ_COMB) { ObjComb* combActor = reinterpret_cast(actor); - combActor->actor.shape.rot.x = Math_SinS(combActor->unk_1B2) * CLAMP_MIN(combActor->unk_1B0, 0) + combActor->actor.home.rot.x; + combActor->actor.shape.rot.x = + Math_SinS(combActor->unk_1B2) * CLAMP_MIN(combActor->unk_1B0, 0) + combActor->actor.home.rot.x; } } -//from z_player.c +// from z_player.c typedef struct { /* 0x00 */ Vec3f pos; /* 0x0C */ s16 yaw; } SpecialRespawnInfo; // size = 0x10 -//special respawns used when voided out without swim to prevent infinite loops +// special respawns used when voided out without swim to prevent infinite loops std::map swimSpecialRespawnInfo = { - { - ENTR_ZORAS_RIVER_3,//hf to zr in water - { { -1455.443, -20, 1384.826 }, 28761 } - }, - { - ENTR_HYRULE_FIELD_14,//zr to hf in water - { { 5730.209, -20, 3725.911 }, -20025 } - }, - { - ENTR_LOST_WOODS_UNDERWATER_SHORTCUT,//zr to lw - { { 1978.718, -36.908, -855 }, -16384 } - }, - { - ENTR_ZORAS_RIVER_UNDERWATER_SHORTCUT,//lw to zr - { { 4082.366, 860.442, -1018.949 }, -32768 } - }, - { - ENTR_LAKE_HYLIA_RIVER_EXIT,//gv to lh - { { -3276.416, -1033, 2908.421 }, 11228 } - }, - { - ENTR_WATER_TEMPLE_ENTRANCE,//lh to water temple - { { -182, 780, 759.5 }, -32768 } - }, - { - ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE,//water temple to lh - { { -955.028, -1306.9, 6768.954 }, -32768 } - }, - { - ENTR_ZORAS_DOMAIN_UNDERWATER_SHORTCUT,//lh to zd - { { -109.86, 11.396, -9.933 }, -29131 } - }, - { - ENTR_LAKE_HYLIA_UNDERWATER_SHORTCUT,//zd to lh - { { -912, -1326.967, 3391 }, 0 } - }, - { - ENTR_GERUDO_VALLEY_1,//caught by gerudos as child - { { -424, -2051, -74 }, 16384 } - }, - { - ENTR_HYRULE_FIELD_ON_BRIDGE_SPAWN,//mk to hf (can be a problem when it then turns night) - { { 0, 0, 1100 }, 0 } - }, - { - ENTR_ZORAS_FOUNTAIN_JABU_JABU_BLUE_WARP,//jabu blue warp to zf - { { -1580, 150, 1670 }, 8000 } - }, + { ENTR_ZORAS_RIVER_3, // hf to zr in water + { { -1455.443, -20, 1384.826 }, 28761 } }, + { ENTR_HYRULE_FIELD_14, // zr to hf in water + { { 5730.209, -20, 3725.911 }, -20025 } }, + { ENTR_LOST_WOODS_UNDERWATER_SHORTCUT, // zr to lw + { { 1978.718, -36.908, -855 }, -16384 } }, + { ENTR_ZORAS_RIVER_UNDERWATER_SHORTCUT, // lw to zr + { { 4082.366, 860.442, -1018.949 }, -32768 } }, + { ENTR_LAKE_HYLIA_RIVER_EXIT, // gv to lh + { { -3276.416, -1033, 2908.421 }, 11228 } }, + { ENTR_WATER_TEMPLE_ENTRANCE, // lh to water temple + { { -182, 780, 759.5 }, -32768 } }, + { ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE, // water temple to lh + { { -955.028, -1306.9, 6768.954 }, -32768 } }, + { ENTR_ZORAS_DOMAIN_UNDERWATER_SHORTCUT, // lh to zd + { { -109.86, 11.396, -9.933 }, -29131 } }, + { ENTR_LAKE_HYLIA_UNDERWATER_SHORTCUT, // zd to lh + { { -912, -1326.967, 3391 }, 0 } }, + { ENTR_GERUDO_VALLEY_1, // caught by gerudos as child + { { -424, -2051, -74 }, 16384 } }, + { ENTR_HYRULE_FIELD_ON_BRIDGE_SPAWN, // mk to hf (can be a problem when it then turns night) + { { 0, 0, 1100 }, 0 } }, + { ENTR_ZORAS_FOUNTAIN_JABU_JABU_BLUE_WARP, // jabu blue warp to zf + { { -1580, 150, 1670 }, 8000 } }, }; f32 triforcePieceScale; void RandomizerOnPlayerUpdateHandler() { - if ( - (GET_PLAYER(gPlayState)->stateFlags1 & PLAYER_STATE1_IN_WATER) && - !Flags_GetRandomizerInf(RAND_INF_CAN_SWIM) && - CUR_EQUIP_VALUE(EQUIP_TYPE_BOOTS) != EQUIP_VALUE_BOOTS_IRON - ) { - //if you void out in water temple without swim you get instantly kicked out to prevent softlocks + if ((GET_PLAYER(gPlayState)->stateFlags1 & PLAYER_STATE1_IN_WATER) && !Flags_GetRandomizerInf(RAND_INF_CAN_SWIM) && + CUR_EQUIP_VALUE(EQUIP_TYPE_BOOTS) != EQUIP_VALUE_BOOTS_IRON) { + // if you void out in water temple without swim you get instantly kicked out to prevent softlocks if (gPlayState->sceneNum == SCENE_WATER_TEMPLE) { - GameInteractor::RawAction::TeleportPlayer(Entrance_OverrideNextIndex(ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE));//lake hylia from water temple + GameInteractor::RawAction::TeleportPlayer( + Entrance_OverrideNextIndex(ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE)); // lake hylia from water temple } else { if (swimSpecialRespawnInfo.find(gSaveContext.entranceIndex) != swimSpecialRespawnInfo.end()) { SpecialRespawnInfo* respawnInfo = &swimSpecialRespawnInfo.at(gSaveContext.entranceIndex); @@ -2237,19 +2254,14 @@ void RandomizerOnPlayerUpdateHandler() { } // Triforce Hunt needs the check if the player isn't being teleported to the credits scene. - if ( - !GameInteractor::IsGameplayPaused() && - Flags_GetRandomizerInf(RAND_INF_GRANT_GANONS_BOSSKEY) && + if (!GameInteractor::IsGameplayPaused() && Flags_GetRandomizerInf(RAND_INF_GRANT_GANONS_BOSSKEY) && gPlayState->transitionTrigger != TRANS_TRIGGER_START && - (1 << 0 & gSaveContext.inventory.dungeonItems[SCENE_GANONS_TOWER]) == 0 - ) { - GiveItemEntryWithoutActor(gPlayState, *Rando::StaticData::GetItemTable().at(RG_GANONS_CASTLE_BOSS_KEY).GetGIEntry()); + (1 << 0 & gSaveContext.inventory.dungeonItems[SCENE_GANONS_TOWER]) == 0) { + GiveItemEntryWithoutActor(gPlayState, + *Rando::StaticData::GetItemTable().at(RG_GANONS_CASTLE_BOSS_KEY).GetGIEntry()); } - if ( - !GameInteractor::IsGameplayPaused() && - RAND_GET_OPTION(RSK_TRIFORCE_HUNT) - ) { + if (!GameInteractor::IsGameplayPaused() && RAND_GET_OPTION(RSK_TRIFORCE_HUNT)) { // Warp to credits if (GameInteractor::State::TriforceHuntCreditsWarpActive) { gPlayState->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0; @@ -2276,12 +2288,14 @@ void RandomizerOnSceneSpawnActorsHandler() { switch (gPlayState->sceneNum) { case SCENE_TEMPLE_OF_TIME: if (gPlayState->roomCtx.curRoom.num == 1) { - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_XC, -104, -40, 2382, 0, 0x8000, 0, SHEIK_TYPE_RANDO, false); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_XC, -104, -40, 2382, 0, 0x8000, 0, + SHEIK_TYPE_RANDO, false); } break; case SCENE_INSIDE_GANONS_CASTLE: if (gPlayState->roomCtx.curRoom.num == 1) { - Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_XC, 101, 150, 137, 0, 0, 0, SHEIK_TYPE_RANDO, false); + Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_XC, 101, 150, 137, 0, 0, 0, + SHEIK_TYPE_RANDO, false); } break; default: @@ -2386,13 +2400,16 @@ void RandomizerRegisterHooks() { GameInteractor::Instance->UnregisterGameHook(fishsanityOnActorInitHook); GameInteractor::Instance->UnregisterGameHook(fishsanityOnActorUpdateHook); GameInteractor::Instance->UnregisterGameHook(fishsanityOnSceneInitHook); - GameInteractor::Instance->UnregisterGameHook(fishsanityOnVanillaBehaviorHook); + GameInteractor::Instance->UnregisterGameHook( + fishsanityOnVanillaBehaviorHook); GameInteractor::Instance->UnregisterGameHook(fishsanityOnItemReceiveHook); GameInteractor::Instance->UnregisterGameHookForID(shufflePotsOnActorInitHook); - GameInteractor::Instance->UnregisterGameHook(shufflePotsOnVanillaBehaviorHook); + GameInteractor::Instance->UnregisterGameHook( + shufflePotsOnVanillaBehaviorHook); - GameInteractor::Instance->UnregisterGameHook(shuffleFreestandingOnVanillaBehaviorHook); + GameInteractor::Instance->UnregisterGameHook( + shuffleFreestandingOnVanillaBehaviorHook); onFlagSetHook = 0; onSceneFlagSetHook = 0; @@ -2425,7 +2442,8 @@ void RandomizerRegisterHooks() { ShuffleFairies_UnregisterHooks(); - if (!IS_RANDO) return; + if (!IS_RANDO) + return; // ENTRTODO: Move all entrance rando handling to a dedicated file // Setup the modified entrance table and entrance shuffle table for rando @@ -2436,43 +2454,71 @@ void RandomizerRegisterHooks() { Entrance_SetSavewarpEntrance(); } - onFlagSetHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnFlagSetHandler); - onSceneFlagSetHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnSceneFlagSetHandler); - onPlayerUpdateForRCQueueHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnPlayerUpdateForRCQueueHandler); - onPlayerUpdateForItemQueueHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnPlayerUpdateForItemQueueHandler); - onItemReceiveHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnItemReceiveHandler); - onDialogMessageHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnDialogMessageHandler); - onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnVanillaBehaviorHandler); - onSceneInitHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnSceneInitHandler); - onActorInitHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnActorInitHandler); - onActorUpdateHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnActorUpdateHandler); - onPlayerUpdateHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnPlayerUpdateHandler); - onGameFrameUpdateHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnGameFrameUpdateHandler); - onSceneSpawnActorsHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnSceneSpawnActorsHandler); - onPlayDestroyHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnPlayDestroyHandler); - onExitGameHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnExitGameHandler); - onKaleidoUpdateHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnKaleidoscopeUpdateHandler); - onCuccoOrChickenHatchHook = GameInteractor::Instance->RegisterGameHook(RandomizerOnCuccoOrChickenHatch); + onFlagSetHook = + GameInteractor::Instance->RegisterGameHook(RandomizerOnFlagSetHandler); + onSceneFlagSetHook = + GameInteractor::Instance->RegisterGameHook(RandomizerOnSceneFlagSetHandler); + onPlayerUpdateForRCQueueHook = GameInteractor::Instance->RegisterGameHook( + RandomizerOnPlayerUpdateForRCQueueHandler); + onPlayerUpdateForItemQueueHook = GameInteractor::Instance->RegisterGameHook( + RandomizerOnPlayerUpdateForItemQueueHandler); + onItemReceiveHook = + GameInteractor::Instance->RegisterGameHook(RandomizerOnItemReceiveHandler); + onDialogMessageHook = GameInteractor::Instance->RegisterGameHook( + RandomizerOnDialogMessageHandler); + onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook( + RandomizerOnVanillaBehaviorHandler); + onSceneInitHook = + GameInteractor::Instance->RegisterGameHook(RandomizerOnSceneInitHandler); + onActorInitHook = + GameInteractor::Instance->RegisterGameHook(RandomizerOnActorInitHandler); + onActorUpdateHook = + GameInteractor::Instance->RegisterGameHook(RandomizerOnActorUpdateHandler); + onPlayerUpdateHook = + GameInteractor::Instance->RegisterGameHook(RandomizerOnPlayerUpdateHandler); + onGameFrameUpdateHook = GameInteractor::Instance->RegisterGameHook( + RandomizerOnGameFrameUpdateHandler); + onSceneSpawnActorsHook = GameInteractor::Instance->RegisterGameHook( + RandomizerOnSceneSpawnActorsHandler); + 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(); - fishsanityOnActorInitHook = GameInteractor::Instance->RegisterGameHook(Rando::Fishsanity::OnActorInitHandler); - fishsanityOnActorUpdateHook = GameInteractor::Instance->RegisterGameHook(Rando::Fishsanity::OnActorUpdateHandler); - fishsanityOnSceneInitHook = GameInteractor::Instance->RegisterGameHook(Rando::Fishsanity::OnSceneInitHandler); - fishsanityOnVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(Rando::Fishsanity::OnVanillaBehaviorHandler); - fishsanityOnItemReceiveHook = GameInteractor::Instance->RegisterGameHook(Rando::Fishsanity::OnItemReceiveHandler); + fishsanityOnActorInitHook = GameInteractor::Instance->RegisterGameHook( + Rando::Fishsanity::OnActorInitHandler); + fishsanityOnActorUpdateHook = GameInteractor::Instance->RegisterGameHook( + Rando::Fishsanity::OnActorUpdateHandler); + fishsanityOnSceneInitHook = GameInteractor::Instance->RegisterGameHook( + Rando::Fishsanity::OnSceneInitHandler); + fishsanityOnVanillaBehaviorHook = + GameInteractor::Instance->RegisterGameHook( + Rando::Fishsanity::OnVanillaBehaviorHandler); + fishsanityOnItemReceiveHook = GameInteractor::Instance->RegisterGameHook( + Rando::Fishsanity::OnItemReceiveHandler); } if (RAND_GET_OPTION(RSK_SHUFFLE_POTS) != RO_SHUFFLE_POTS_OFF) { - shufflePotsOnActorInitHook = GameInteractor::Instance->RegisterGameHookForID(ACTOR_OBJ_TSUBO, ObjTsubo_RandomizerInit); - shufflePotsOnVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShufflePots_OnVanillaBehaviorHandler); + shufflePotsOnActorInitHook = GameInteractor::Instance->RegisterGameHookForID( + ACTOR_OBJ_TSUBO, ObjTsubo_RandomizerInit); + shufflePotsOnVanillaBehaviorHook = + GameInteractor::Instance->RegisterGameHook( + ShufflePots_OnVanillaBehaviorHandler); } if (RAND_GET_OPTION(RSK_SHUFFLE_FREESTANDING) != RO_SHUFFLE_FREESTANDING_OFF) { - shuffleFreestandingOnVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleFreestanding_OnVanillaBehaviorHandler); + shuffleFreestandingOnVanillaBehaviorHook = + GameInteractor::Instance->RegisterGameHook( + ShuffleFreestanding_OnVanillaBehaviorHandler); } - + if (RAND_GET_OPTION(RSK_SHUFFLE_FAIRIES)) { ShuffleFairies_RegisterHooks(); } diff --git a/soh/soh/Enhancements/randomizer/item.cpp b/soh/soh/Enhancements/randomizer/item.cpp index 1c315b47f..ee0dc9403 100644 --- a/soh/soh/Enhancements/randomizer/item.cpp +++ b/soh/soh/Enhancements/randomizer/item.cpp @@ -11,31 +11,38 @@ #include "../../OTRGlobals.h" namespace Rando { -Item::Item() : randomizerGet(RG_NONE), type(ITEMTYPE_ITEM), getItemId(GI_NONE), advancement(false), hintKey(RHT_NONE), - progressive(false), price(0) {} +Item::Item() + : randomizerGet(RG_NONE), type(ITEMTYPE_ITEM), getItemId(GI_NONE), advancement(false), hintKey(RHT_NONE), + progressive(false), price(0) { +} Item::Item(const RandomizerGet randomizerGet_, Text name_, const ItemType type_, const int16_t getItemId_, - const bool advancement_, LogicVal logicVal_, const RandomizerHintTextKey hintKey_, const uint16_t itemId_, - const uint16_t objectId_, const uint16_t gid_, const uint16_t textId_, const uint16_t field_, - const int16_t chestAnimation_, const GetItemCategory category_, const uint16_t modIndex_, - const bool progressive_, const uint16_t price_) + const bool advancement_, LogicVal logicVal_, const RandomizerHintTextKey hintKey_, const uint16_t itemId_, + const uint16_t objectId_, const uint16_t gid_, const uint16_t textId_, const uint16_t field_, + const int16_t chestAnimation_, const GetItemCategory category_, const uint16_t modIndex_, + const bool progressive_, const uint16_t price_) : randomizerGet(randomizerGet_), name(std::move(name_)), type(type_), getItemId(getItemId_), - advancement(advancement_), logicVal(logicVal_), hintKey(hintKey_), progressive(progressive_), price(price_) { + advancement(advancement_), logicVal(logicVal_), hintKey(hintKey_), progressive(progressive_), price(price_) { if (modIndex_ == MOD_RANDOMIZER || getItemId > 0x7D) { - giEntry = std::make_shared(GetItemEntry{ itemId_, field_, static_cast((chestAnimation_ != CHEST_ANIM_SHORT ? 1 : -1) * (gid_ + 1)), textId_, objectId_, modIndex_, TABLE_RANDOMIZER, static_cast(randomizerGet_), gid_, true, ITEM_FROM_NPC, category_, static_cast(randomizerGet_), MOD_RANDOMIZER, NULL }); - } - else { - giEntry = std::make_shared(GetItemEntry{ itemId_, field_, static_cast((chestAnimation_ != CHEST_ANIM_SHORT ? 1 : -1) * (gid_ + 1)), textId_, objectId_, modIndex_, TABLE_VANILLA, getItemId_, gid_, true, ITEM_FROM_NPC, category_, itemId_, modIndex_, NULL }); + giEntry = std::make_shared(GetItemEntry{ + itemId_, field_, static_cast((chestAnimation_ != CHEST_ANIM_SHORT ? 1 : -1) * (gid_ + 1)), textId_, + objectId_, modIndex_, TABLE_RANDOMIZER, static_cast(randomizerGet_), gid_, true, ITEM_FROM_NPC, + category_, static_cast(randomizerGet_), MOD_RANDOMIZER, NULL }); + } else { + giEntry = std::make_shared(GetItemEntry{ + itemId_, field_, static_cast((chestAnimation_ != CHEST_ANIM_SHORT ? 1 : -1) * (gid_ + 1)), textId_, + objectId_, modIndex_, TABLE_VANILLA, getItemId_, gid_, true, ITEM_FROM_NPC, category_, itemId_, modIndex_, + NULL }); } } Item::Item(const RandomizerGet randomizerGet_, Text name_, const ItemType type_, const int16_t getItemId_, - const bool advancement_, LogicVal logicVal_, const RandomizerHintTextKey hintKey_, const bool progressive_, - const uint16_t price_) + const bool advancement_, LogicVal logicVal_, const RandomizerHintTextKey hintKey_, const bool progressive_, + const uint16_t price_) : randomizerGet(randomizerGet_), name(std::move(name_)), type(type_), getItemId(getItemId_), - advancement(advancement_), logicVal(logicVal_), hintKey(hintKey_), progressive(progressive_), price(price_) { + advancement(advancement_), logicVal(logicVal_), hintKey(hintKey_), progressive(progressive_), price(price_) { } - Item::~Item() = default; +Item::~Item() = default; void Item::ApplyEffect() const { auto ctx = Rando::Context::GetInstance(); @@ -283,11 +290,11 @@ std::shared_ptr Item::GetGIEntry() const { // NOLINT(*-no-recursio actual = RG_GIANT_WALLET; break; case 2: - if(tycoonWallet){ + if (tycoonWallet) { actual = RG_TYCOON_WALLET; break; } - //fallthrough + // fallthrough case 3: case 4: if (infiniteUpgrades != RO_INF_UPGRADES_OFF) { @@ -338,8 +345,8 @@ std::shared_ptr Item::GetGIEntry() const { // NOLINT(*-no-recursio } break; case RG_PROGRESSIVE_GORONSWORD: // todo progressive? - actual = RG_BIGGORON_SWORD; - break; + actual = RG_BIGGORON_SWORD; + break; case RG_PROGRESSIVE_BOMBCHUS: if (logic->CurrentInventory(ITEM_BOMBCHU) == ITEM_NONE) { actual = RG_BOMBCHU_BAG; @@ -393,7 +400,8 @@ bool Item::IsMajorItem() const { return false; } - if (type == ITEMTYPE_DUNGEONREWARD && ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) { + if (type == ITEMTYPE_DUNGEONREWARD && + ctx->GetOption(RSK_SHUFFLE_DUNGEON_REWARDS).Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) { return false; } @@ -407,7 +415,8 @@ bool Item::IsMajorItem() const { return false; } - if (type == ITEMTYPE_SMALLKEY && (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA) || ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON))) { + if (type == ITEMTYPE_SMALLKEY && (ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA) || + ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON))) { return false; } @@ -416,11 +425,13 @@ bool Item::IsMajorItem() const { } if (type == ITEMTYPE_BOSSKEY && getItemId != 0xAD && - (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA) || ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON))) { + (ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_VANILLA) || + ctx->GetOption(RSK_BOSS_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON))) { return false; } // Ganons Castle Boss Key - if (getItemId == 0xAD && (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_VANILLA) || ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OWN_DUNGEON))) { + if (getItemId == 0xAD && (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_VANILLA) || + ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_OWN_DUNGEON))) { return false; } @@ -446,4 +457,4 @@ bool Item::operator==(const Item& right) const { bool Item::operator!=(const Item& right) const { return !operator==(right); } -} +} // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/item.h b/soh/soh/Enhancements/randomizer/item.h index f0df0f1bf..da8632151 100644 --- a/soh/soh/Enhancements/randomizer/item.h +++ b/soh/soh/Enhancements/randomizer/item.h @@ -31,17 +31,16 @@ class Item { public: Item(); Item(RandomizerGet randomizerGet_, Text name_, ItemType type_, int16_t getItemId_, bool advancement_, - LogicVal logicVal_, RandomizerHintTextKey hintKey_, uint16_t itemId_, uint16_t objectId_, uint16_t gid_, - uint16_t textId_, uint16_t field_, int16_t chestAnimation_, GetItemCategory category_, uint16_t modIndex_, - bool progressive_ = false, uint16_t price_ = 0); + LogicVal logicVal_, RandomizerHintTextKey hintKey_, uint16_t itemId_, uint16_t objectId_, uint16_t gid_, + uint16_t textId_, uint16_t field_, int16_t chestAnimation_, GetItemCategory category_, uint16_t modIndex_, + bool progressive_ = false, uint16_t price_ = 0); Item(RandomizerGet randomizerGet_, Text name_, ItemType type_, int16_t getItemId_, bool advancement_, - LogicVal logicVal_, RandomizerHintTextKey hintKey_, bool progressive_ = false, uint16_t price_ = 0); + LogicVal logicVal_, RandomizerHintTextKey hintKey_, bool progressive_ = false, uint16_t price_ = 0); ~Item(); void ApplyEffect() const; void UndoEffect() const; - const Text& GetName() const; bool IsAdvancement() const; int GetItemID() const; @@ -75,4 +74,4 @@ class Item { bool playthrough = false; std::shared_ptr giEntry; }; -} +} // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index 45516ef18..d8113edd3 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -12,10 +12,12 @@ std::unordered_map Rando::StaticData::itemNameToEnum void Rando::StaticData::InitItemTable() { auto logic = Context::GetInstance()->GetLogic(); + + // clang-format off itemTable[RG_NONE] = Item(RG_NONE, Text{ "No Item", "Rien", "Kein Artikel" }, ITEMTYPE_EVENT, GI_RUPEE_GREEN, false, LOGIC_NONE, RHT_NONE, ITEM_NONE, 0, 0, 0, 0, 0, ITEM_CATEGORY_JUNK, MOD_NONE); // Randomizer Get Randomizer Get Name Text Type Get Item ID Adv. Logic Value Hint Text Key Item ID Object ID Draw ID Text ID field Chest Animation Item Category Mod Index itemTable[RG_KOKIRI_SWORD] = Item(RG_KOKIRI_SWORD, Text{ "Kokiri Sword", "Épée Kokiri", "Kokiri-Schwert" }, ITEMTYPE_EQUIP, GI_SWORD_KOKIRI, true, LOGIC_KOKIRI_SWORD, RHT_KOKIRI_SWORD, ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0xA4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_MASTER_SWORD] = Item(RG_MASTER_SWORD, Text{ "Master Sword", "Épée de Legende", "Master-Schwert"}, ITEMTYPE_EQUIP, 0xE0, true, LOGIC_MASTER_SWORD, RHT_MASTER_SWORD, ITEM_SWORD_MASTER, OBJECT_TOKI_OBJECTS, GID_SWORD_BGS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_MASTER_SWORD] = Item(RG_MASTER_SWORD, Text{ "Master Sword", "Épée de Legende", "Master-Schwert" }, ITEMTYPE_EQUIP, 0xE0, true, LOGIC_MASTER_SWORD, RHT_MASTER_SWORD, ITEM_SWORD_MASTER, OBJECT_TOKI_OBJECTS, GID_SWORD_BGS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_MASTER_SWORD].SetCustomDrawFunc(Randomizer_DrawMasterSword); itemTable[RG_GIANTS_KNIFE] = Item(RG_GIANTS_KNIFE, Text{ "Giant's Knife", "Lame des Géants", "Langschwert" }, ITEMTYPE_EQUIP, GI_SWORD_KNIFE, true, LOGIC_NONE, RHT_GIANTS_KNIFE, ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x4B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_BIGGORON_SWORD] = Item(RG_BIGGORON_SWORD, Text{ "Biggoron's Sword", "Épée de Biggoron", "Biggoron-Schwert" }, ITEMTYPE_EQUIP, GI_SWORD_BGS, true, LOGIC_BIGGORON_SWORD, RHT_BIGGORON_SWORD, ITEM_SWORD_BGS, OBJECT_GI_LONGSWORD, GID_SWORD_BGS, 0x0C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); @@ -169,6 +171,7 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_GANONS_CASTLE_SMALL_KEY] = Item(RG_GANONS_CASTLE_SMALL_KEY, Text{ "Ganon's Castle Small Key", "Petite Clé du Château de Ganon", "Kleiner Schlüssel für Ganons Schloß" }, ITEMTYPE_SMALLKEY, 0xB7, true, LOGIC_GANONS_CASTLE_KEYS, RHT_GANONS_CASTLE_SMALL_KEY, RG_GANONS_CASTLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); itemTable[RG_TREASURE_GAME_SMALL_KEY] = Item(RG_TREASURE_GAME_SMALL_KEY, Text{ "Chest Game Small Key", "Petite Clé du jeu la Chasse-aux-Trésors", "Kleiner Schlüssel für das Truhenspiel" }, ITEMTYPE_SMALLKEY, GI_DOOR_KEY, true, LOGIC_TREASURE_GAME_KEYS, RHT_TREASURE_GAME_SMALL_KEY, ITEM_KEY_SMALL, OBJECT_GI_KEY, GID_KEY_SMALL, 0xF3, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_NONE); + itemTable[RG_TREASURE_GAME_SMALL_KEY].SetCustomDrawFunc(Randomizer_DrawSmallKey); itemTable[RG_GUARD_HOUSE_KEY] = Item(RG_GUARD_HOUSE_KEY, Text{ "Guard House Key", "", "Schlüssel für das Haus der Wachen" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_GUARD_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_GUARD_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GUARD_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); itemTable[RG_MARKET_BAZAAR_KEY] = Item(RG_MARKET_BAZAAR_KEY, Text{ "Market Bazaar Key", "", "Schlüssel für den Basar des Marktes" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_MARKET_BAZAAR_KEY, RHT_OVERWORLD_KEY, RG_MARKET_BAZAAR_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); @@ -187,7 +190,7 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_BOMBCHU_SHOP_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); itemTable[RG_RICHARDS_HOUSE_KEY] = Item(RG_RICHARDS_HOUSE_KEY, Text{ "Richard's House Key", "", "Schlüssel für das Haus von Richard" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_RICHARDS_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_RICHARDS_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_RICHARDS_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); - itemTable[RG_ALLEY_HOUSE_KEY] = Item(RG_ALLEY_HOUSE_KEY, Text{ "Alley House Key", "", "Schlüssel für das Gäßchenhaus" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_ALLEY_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_ALLEY_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_ALLEY_HOUSE_KEY] = Item(RG_ALLEY_HOUSE_KEY, Text{ "Alley House Key", "", "Schlüssel für das Gassenhaus" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_ALLEY_HOUSE_KEY, RHT_OVERWORLD_KEY, RG_ALLEY_HOUSE_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_ALLEY_HOUSE_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); itemTable[RG_KAK_BAZAAR_KEY] = Item(RG_KAK_BAZAAR_KEY, Text{ "Kakariko Bazaar Key", "", "Schlüssel für den Basar von Kakariko" }, ITEMTYPE_ITEM, GI_DOOR_KEY, true, LOGIC_KAK_BAZAAR_KEY, RHT_OVERWORLD_KEY, RG_KAK_BAZAAR_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_KAK_BAZAAR_KEY].SetCustomDrawFunc(Randomizer_DrawOverworldKey); @@ -230,7 +233,7 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_SHADOW_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); itemTable[RG_BOTTOM_OF_THE_WELL_KEY_RING] = Item(RG_BOTTOM_OF_THE_WELL_KEY_RING, Text{ "Bottom of the Well Key Ring", "Trousseau du Puits", "Schlüsselbund für den Grund des Brunnens" }, ITEMTYPE_SMALLKEY, 0xDA, true, LOGIC_BOTTOM_OF_THE_WELL_KEYS, RHT_BOTTOM_OF_THE_WELL_KEY_RING, RG_BOTTOM_OF_THE_WELL_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_BOTTOM_OF_THE_WELL_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING] = Item(RG_GERUDO_TRAINING_GROUND_KEY_RING, Text{ "Training Ground Key Ring", "Trousseau du Gymnase Gerudo", "Schlüsselbund für das Gerudo-Trainingsgelände" }, ITEMTYPE_SMALLKEY, 0xDB, true, LOGIC_GERUDO_TRAINING_GROUND_KEYS, RHT_GERUDO_TRAINING_GROUND_KEY_RING, RG_GERUDO_TRAINING_GROUND_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING] = Item(RG_GERUDO_TRAINING_GROUND_KEY_RING, Text{ "Training Ground Key Ring", "Trousseau du Gymnase Gerudo", "Schlüsselbund für das Gerudo-Trainingsgelände" }, ITEMTYPE_SMALLKEY, 0xDB, true, LOGIC_GERUDO_TRAINING_GROUND_KEYS, RHT_GERUDO_TRAINING_GROUND_KEY_RING, RG_GERUDO_TRAINING_GROUND_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); itemTable[RG_GERUDO_FORTRESS_KEY_RING] = Item(RG_GERUDO_FORTRESS_KEY_RING, Text{ "Gerudo Fortress Key Ring", "Trousseau du Repaire des Voleurs", "Schlüsselbund für die Gerudo-Festung" }, ITEMTYPE_FORTRESS_SMALLKEY, 0xDC, true, LOGIC_GERUDO_FORTRESS_KEYS, RHT_GERUDO_FORTRESS_KEY_RING, RG_GERUDO_FORTRESS_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GERUDO_FORTRESS_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); @@ -314,23 +317,23 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_BUY_RED_POTION_40] = Item(RG_BUY_RED_POTION_40, Text{ "Buy Red Potion [40]", "Acheter: Potion Rouge [40]", "Rotes Elixier kaufen [40]" }, ITEMTYPE_SHOP, GI_POTION_RED, false, LOGIC_NONE, RHT_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 40); itemTable[RG_BUY_RED_POTION_50] = Item(RG_BUY_RED_POTION_50, Text{ "Buy Red Potion [50]", "Acheter: Potion Rouge [50]", "Rotes Elixier kaufen [50]" }, ITEMTYPE_SHOP, GI_POTION_RED, false, LOGIC_NONE, RHT_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED, OBJECT_GI_LIQUID, GID_POTION_RED, 0x43, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_JUNK, MOD_NONE, false, 50); // Misc. - itemTable[RG_GOHMA_SOUL] = Item(RG_GOHMA_SOUL, Text{ "Gohma's Soul", "Âme de Gohma", "Gohmas Seele" }, ITEMTYPE_ITEM, 0xE0, true, LOGIC_CAN_SUMMON_GOHMA, RHT_GOHMA_SOUL, RG_GOHMA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_GOHMA_SOUL] = Item(RG_GOHMA_SOUL, Text{ "Gohma's Soul", "Âme de Gohma", "Gohmas Seele" }, ITEMTYPE_ITEM, 0xE0, true, LOGIC_CAN_SUMMON_GOHMA, RHT_GOHMA_SOUL, RG_GOHMA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_GOHMA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_KING_DODONGO_SOUL] = Item(RG_KING_DODONGO_SOUL, Text{ "King Dodongo's Soul", "Âme du Roi Dodongo", "König Dodongos Seele" }, ITEMTYPE_ITEM, 0xE1, true, LOGIC_CAN_SUMMON_KINGDODONGO, RHT_KING_DODONGO_SOUL, RG_KING_DODONGO_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_KING_DODONGO_SOUL] = Item(RG_KING_DODONGO_SOUL, Text{ "King Dodongo's Soul", "Âme du Roi Dodongo", "König Dodongos Seele" }, ITEMTYPE_ITEM, 0xE1, true, LOGIC_CAN_SUMMON_KINGDODONGO, RHT_KING_DODONGO_SOUL, RG_KING_DODONGO_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_KING_DODONGO_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_BARINADE_SOUL] = Item(RG_BARINADE_SOUL, Text{ "Barinade's Soul", "Âme de Barinade", "Barinades Seele" }, ITEMTYPE_ITEM, 0xE2, true, LOGIC_CAN_SUMMON_BARINADE, RHT_BARINADE_SOUL, RG_BARINADE_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_BARINADE_SOUL] = Item(RG_BARINADE_SOUL, Text{ "Barinade's Soul", "Âme de Barinade", "Barinades Seele" }, ITEMTYPE_ITEM, 0xE2, true, LOGIC_CAN_SUMMON_BARINADE, RHT_BARINADE_SOUL, RG_BARINADE_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_BARINADE_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_PHANTOM_GANON_SOUL] = Item(RG_PHANTOM_GANON_SOUL, Text{ "Phantom Ganon's Soul", "Âme de Ganon Spectral", "Phantom-Ganons Seele" }, ITEMTYPE_ITEM, 0xE3, true, LOGIC_CAN_SUMMON_PHANTOMGANON, RHT_PHANTOM_GANON_SOUL, RG_PHANTOM_GANON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_PHANTOM_GANON_SOUL] = Item(RG_PHANTOM_GANON_SOUL, Text{ "Phantom Ganon's Soul", "Âme de Ganon Spectral", "Phantom-Ganons Seele" }, ITEMTYPE_ITEM, 0xE3, true, LOGIC_CAN_SUMMON_PHANTOMGANON, RHT_PHANTOM_GANON_SOUL, RG_PHANTOM_GANON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_PHANTOM_GANON_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_VOLVAGIA_SOUL] = Item(RG_VOLVAGIA_SOUL, Text{ "Volvagia's Soul", "Âme de Vulcania", "Volvagias Seele" }, ITEMTYPE_ITEM, 0xE4, true, LOGIC_CAN_SUMMON_VOLVAGIA, RHT_VOLVAGIA_SOUL, RG_VOLVAGIA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_VOLVAGIA_SOUL] = Item(RG_VOLVAGIA_SOUL, Text{ "Volvagia's Soul", "Âme de Volcania", "Volvagias Seele" }, ITEMTYPE_ITEM, 0xE4, true, LOGIC_CAN_SUMMON_VOLVAGIA, RHT_VOLVAGIA_SOUL, RG_VOLVAGIA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_VOLVAGIA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_MORPHA_SOUL] = Item(RG_MORPHA_SOUL, Text{ "Morpha's Soul", "Âme de Morpha", "Morphas Seele" }, ITEMTYPE_ITEM, 0xE5, true, LOGIC_CAN_SUMMON_MORPHA, RHT_MORPHA_SOUL, RG_MORPHA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_MORPHA_SOUL] = Item(RG_MORPHA_SOUL, Text{ "Morpha's Soul", "Âme de Morpha", "Morphas Seele" }, ITEMTYPE_ITEM, 0xE5, true, LOGIC_CAN_SUMMON_MORPHA, RHT_MORPHA_SOUL, RG_MORPHA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_MORPHA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_BONGO_BONGO_SOUL] = Item(RG_BONGO_BONGO_SOUL, Text{ "Bongo Bongo's Soul", "Âme de Bongo Bongo", "Bongo Bongos Seele" }, ITEMTYPE_ITEM, 0xE6, true, LOGIC_CAN_SUMMON_BONGOBONGO, RHT_BONGO_BONGO_SOUL, RG_BONGO_BONGO_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_BONGO_BONGO_SOUL] = Item(RG_BONGO_BONGO_SOUL, Text{ "Bongo Bongo's Soul", "Âme de Bongo Bongo", "Bongo Bongos Seele" }, ITEMTYPE_ITEM, 0xE6, true, LOGIC_CAN_SUMMON_BONGOBONGO, RHT_BONGO_BONGO_SOUL, RG_BONGO_BONGO_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_BONGO_BONGO_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_TWINROVA_SOUL] = Item(RG_TWINROVA_SOUL, Text{ "Twinrova's Soul", "Âme du Duo Maléfique", "Twinrovas Seele" }, ITEMTYPE_ITEM, 0xE7, true, LOGIC_CAN_SUMMON_TWINROVA, RHT_TWINROVA_SOUL, RG_TWINROVA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_TWINROVA_SOUL] = Item(RG_TWINROVA_SOUL, Text{ "Twinrova's Soul", "Âme du Duo Maléfique", "Twinrovas Seele" }, ITEMTYPE_ITEM, 0xE7, true, LOGIC_CAN_SUMMON_TWINROVA, RHT_TWINROVA_SOUL, RG_TWINROVA_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_TWINROVA_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); - itemTable[RG_GANON_SOUL] = Item(RG_GANON_SOUL, Text{ "Ganon's Soul", "Âme de Ganon", "Ganons Seele" }, ITEMTYPE_ITEM, 0xE8, true, LOGIC_CAN_SUMMON_GANON, RHT_GANON_SOUL, RG_GANON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_GANON_SOUL] = Item(RG_GANON_SOUL, Text{ "Ganon's Soul", "Âme de Ganon", "Ganons Seele" }, ITEMTYPE_ITEM, 0xE8, true, LOGIC_CAN_SUMMON_GANON, RHT_GANON_SOUL, RG_GANON_SOUL, OBJECT_GI_SUTARU, GID_SKULL_TOKEN, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_GANON_SOUL].SetCustomDrawFunc(Randomizer_DrawBossSoul); itemTable[RG_FISHING_POLE] = Item(RG_FISHING_POLE, Text{ "Fishing Pole", "Canne à Pêche", "Angelrute" }, ITEMTYPE_ITEM, RG_FISHING_POLE, true, LOGIC_FISHING_POLE, RHT_FISHING_POLE, RG_FISHING_POLE, OBJECT_GI_FISH, GID_FISHING_POLE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_FISHING_POLE].SetCustomDrawFunc(Randomizer_DrawFishingPoleGI); @@ -346,28 +349,28 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_OCARINA_C_RIGHT_BUTTON] = Item(RG_OCARINA_C_RIGHT_BUTTON, Text{ "Ocarina C Right Button", "Touche C-Droit de l'Ocarina", "Taste C-Rechts der Okarina" }, ITEMTYPE_ITEM, GI_MAP, true, LOGIC_OCARINA_C_RIGHT_BUTTON, RHT_OCARINA_C_RIGHT_BUTTON, RG_OCARINA_C_RIGHT_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_OCARINA_C_RIGHT_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton); - itemTable[RG_BRONZE_SCALE] = Item(RG_BRONZE_SCALE, Text{ "Bronze Scale", "Écaille de Bronze", "Bronzene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_PROGRESSIVE_WALLET, RHT_BRONZE_SCALE, RG_BRONZE_SCALE, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_BRONZE_SCALE] = Item(RG_BRONZE_SCALE, Text{ "Bronze Scale", "Écaille de Bronze", "Bronzene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_PROGRESSIVE_WALLET, RHT_BRONZE_SCALE, RG_BRONZE_SCALE, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_BRONZE_SCALE].SetCustomDrawFunc(Randomizer_DrawBronzeScale); - itemTable[RG_BOMBCHU_BAG] = Item(RG_BOMBCHU_BAG, Text{ "Bombchu Bag", "!!!", "Sac de Missiles Teigneux" }, ITEMTYPE_ITEM, RG_BOMBCHU_BAG, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, RG_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_BOMBCHU_BAG] = Item(RG_BOMBCHU_BAG, Text{ "Bombchu Bag", "Sac de Missiles Teigneux", "Krabbelminentasche" }, ITEMTYPE_ITEM, RG_BOMBCHU_BAG, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, RG_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_BOMBCHU_BAG].SetCustomDrawFunc(Randomizer_DrawBombchuBag); - itemTable[RG_QUIVER_INF] = Item(RG_QUIVER_INF, Text{ "Infinite Quiver", "Carquois Infini", "Unendlicher Köcher" }, ITEMTYPE_ITEM, RG_QUIVER_INF, true, LOGIC_PROGRESSIVE_BOW, RHT_QUIVER_INF, RG_QUIVER_INF, OBJECT_GI_ARROWCASE, GID_QUIVER_50, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_BOMB_BAG_INF] = Item(RG_BOMB_BAG_INF, Text{ "Infinite Bomb Bag", "Sac de Bombes Infini", "Unendliche Bombentasche" }, ITEMTYPE_ITEM, RG_BOMB_BAG_INF, true, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BOMB_BAG_INF, RG_BOMB_BAG_INF, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_BULLET_BAG_INF] = Item(RG_BULLET_BAG_INF, Text{ "Infinite Bullet Bag", "Sac de Graines Infinis", "Unendliche Samentasche" }, ITEMTYPE_ITEM, RG_BULLET_BAG_INF, true, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BULLET_BAG_INF, RG_BULLET_BAG_INF, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_STICK_UPGRADE_INF] = Item(RG_STICK_UPGRADE_INF, Text{ "Infinite Stick Capacity", "Bâtons Mojo Infinis", "Unendliche Stab-Kapazität" }, ITEMTYPE_ITEM, RG_STICK_UPGRADE_INF, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_STICK_UPGRADE_INF, RG_STICK_UPGRADE_INF, OBJECT_GI_STICK, GID_STICK, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_NUT_UPGRADE_INF] = Item(RG_NUT_UPGRADE_INF, Text{ "Infinite Nut Capacity", "Noix Mojo Infinies", "Unendliche Nuß-Kapazität" }, ITEMTYPE_ITEM, RG_NUT_UPGRADE_INF, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_NUT_UPGRADE_INF, RG_NUT_UPGRADE_INF, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_MAGIC_INF] = Item(RG_MAGIC_INF, Text{ "Infinite Magic Meter", "Magie Infinie", "Unendliches Magisches Maß" }, ITEMTYPE_ITEM, RG_MAGIC_INF, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_INF, RG_MAGIC_INF, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_BOMBCHU_INF] = Item(RG_BOMBCHU_INF, Text{ "Infinite Bombchus", "Missiles Teigneux Infinis", "Unendliche Krabbelminen" }, ITEMTYPE_ITEM, RG_BOMBCHU_INF, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_INF, RG_BOMBCHU_INF, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + itemTable[RG_QUIVER_INF] = Item(RG_QUIVER_INF, Text{ "Infinite Quiver", "Carquois Infini", "Unendlicher Köcher" }, ITEMTYPE_ITEM, RG_QUIVER_INF, true, LOGIC_PROGRESSIVE_BOW, RHT_QUIVER_INF, RG_QUIVER_INF, OBJECT_GI_ARROWCASE, GID_QUIVER_50, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + itemTable[RG_BOMB_BAG_INF] = Item(RG_BOMB_BAG_INF, Text{ "Infinite Bomb Bag", "Sac de Bombes Infini", "Unendliche Bombentasche" }, ITEMTYPE_ITEM, RG_BOMB_BAG_INF, true, LOGIC_PROGRESSIVE_BOMB_BAG, RHT_BOMB_BAG_INF, RG_BOMB_BAG_INF, OBJECT_GI_BOMBPOUCH, GID_BOMB_BAG_40, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + itemTable[RG_BULLET_BAG_INF] = Item(RG_BULLET_BAG_INF, Text{ "Infinite Bullet Bag", "Sac de Graines Infinis", "Unendliche Samentasche" }, ITEMTYPE_ITEM, RG_BULLET_BAG_INF, true, LOGIC_PROGRESSIVE_BULLET_BAG, RHT_BULLET_BAG_INF, RG_BULLET_BAG_INF, OBJECT_GI_DEKUPOUCH, GID_BULLET_BAG, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + itemTable[RG_STICK_UPGRADE_INF] = Item(RG_STICK_UPGRADE_INF, Text{ "Infinite Stick Capacity", "Bâtons Mojo Infinis", "Unendliche Stab-Kapazität" }, ITEMTYPE_ITEM, RG_STICK_UPGRADE_INF, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_STICK_UPGRADE_INF, RG_STICK_UPGRADE_INF, OBJECT_GI_STICK, GID_STICK, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + itemTable[RG_NUT_UPGRADE_INF] = Item(RG_NUT_UPGRADE_INF, Text{ "Infinite Nut Capacity", "Noix Mojo Infinies", "Unendliche Nuß-Kapazität" }, ITEMTYPE_ITEM, RG_NUT_UPGRADE_INF, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_NUT_UPGRADE_INF, RG_NUT_UPGRADE_INF, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + itemTable[RG_MAGIC_INF] = Item(RG_MAGIC_INF, Text{ "Infinite Magic Meter", "Magie Infinie", "Unendliches Magisches Maß" }, ITEMTYPE_ITEM, RG_MAGIC_INF, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_INF, RG_MAGIC_INF, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + itemTable[RG_BOMBCHU_INF] = Item(RG_BOMBCHU_INF, Text{ "Infinite Bombchus", "Missiles Teigneux Infinis", "Unendliche Krabbelminen" }, ITEMTYPE_ITEM, RG_BOMBCHU_INF, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_INF, RG_BOMBCHU_INF, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); itemTable[RG_BOMBCHU_INF].SetCustomDrawFunc(Randomizer_DrawBombchuBag); - itemTable[RG_WALLET_INF] = Item(RG_WALLET_INF, Text{ "Infinite Wallet", "Bourse Infinie", "Unendliche Geldbörse" }, ITEMTYPE_ITEM, RG_WALLET_INF, true, LOGIC_PROGRESSIVE_WALLET, RHT_WALLET_INF, RG_WALLET_INF, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); + itemTable[RG_WALLET_INF] = Item(RG_WALLET_INF, Text{ "Infinite Wallet", "Bourse Infinie", "Unendliche Geldbörse" }, ITEMTYPE_ITEM, RG_WALLET_INF, true, LOGIC_PROGRESSIVE_WALLET, RHT_WALLET_INF, RG_WALLET_INF, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_SKELETON_KEY] = Item(RG_SKELETON_KEY, Text{ "Skeleton Key", "Clé Squelette", "Skelettschlüssel" }, ITEMTYPE_ITEM, GI_STONE_OF_AGONY, true, LOGIC_SKELETON_KEY, RHT_SKELETON_KEY, RG_SKELETON_KEY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_SKELETON_KEY] = Item(RG_SKELETON_KEY, Text{ "Skeleton Key", "Clé Squelette", "Skelettschlüssel" }, ITEMTYPE_ITEM, GI_STONE_OF_AGONY, true, LOGIC_SKELETON_KEY, RHT_SKELETON_KEY, RG_SKELETON_KEY, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_SKELETON_KEY].SetCustomDrawFunc(Randomizer_DrawSkeletonKey); - itemTable[RG_DEKU_STICK_BAG] = Item(RG_DEKU_STICK_BAG, Text{ "Deku Stick Bag", "Sac de Bâton Mojo", "Deku-Stab-Tasche" }, ITEMTYPE_ITEM, GI_STICK_UPGRADE_30, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_NONE, RG_DEKU_STICK_BAG, OBJECT_GI_STICK, GID_STICK, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_DEKU_STICK_BAG] = Item(RG_DEKU_STICK_BAG, Text{ "Deku Stick Bag", "Sac de Bâton Mojo", "Deku-Stab-Tasche" }, ITEMTYPE_ITEM, GI_STICK_UPGRADE_30, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_NONE, RG_DEKU_STICK_BAG, OBJECT_GI_STICK, GID_STICK, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); - itemTable[RG_DEKU_NUT_BAG] = Item(RG_DEKU_NUT_BAG, Text{ "Deku Nut Bag", "Sac de Noix Mojo", "Deku-Nuß-Tasche" }, ITEMTYPE_ITEM, GI_NUT_UPGRADE_30, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_NONE, RG_DEKU_NUT_BAG, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_DEKU_NUT_BAG] = Item(RG_DEKU_NUT_BAG, Text{ "Deku Nut Bag", "Sac de Noix Mojo", "Deku-Nuß-Tasche" }, ITEMTYPE_ITEM, GI_NUT_UPGRADE_30, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_NONE, RG_DEKU_NUT_BAG, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_TRIFORCE] = Item(RG_TRIFORCE, Text{ "Triforce", "Triforce", "Triforce" }, ITEMTYPE_EVENT, RG_TRIFORCE, false, LOGIC_NONE, RHT_NONE); itemTable[RG_HINT] = Item(RG_HINT, Text{ "Hint", "Indice", "Hinweis" }, ITEMTYPE_EVENT, RG_HINT, false, LOGIC_NONE, RHT_NONE); @@ -389,11 +392,11 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_SILVER_GAUNTLETS] = Item(RG_SILVER_GAUNTLETS, Text{ "Silver Gauntlets", "Gantelets d'argent", "Silberhandschuhe" }, ITEMTYPE_ITEM, GI_GAUNTLETS_SILVER, true, LOGIC_PROGRESSIVE_STRENGTH, RHT_SILVER_GAUNTLETS, ITEM_GAUNTLETS_SILVER, OBJECT_GI_GLOVES, GID_GAUNTLETS_SILVER, 0x5B, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_GOLDEN_GAUNTLETS] = Item(RG_GOLDEN_GAUNTLETS, Text{ "Golden Gauntlets", "Gantelets d'or", "Goldhandschuhe" }, ITEMTYPE_ITEM, GI_GAUNTLETS_GOLD, true, LOGIC_PROGRESSIVE_STRENGTH, RHT_GOLDEN_GAUNTLETS, ITEM_GAUNTLETS_GOLD, OBJECT_GI_GLOVES, GID_GAUNTLETS_GOLD, 0x5C, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_SILVER_SCALE] = Item(RG_SILVER_SCALE, Text{ "Silver Scale", "Écaille d'argent", "Silberne Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_PROGRESSIVE_SCALE, RHT_SILVER_SCALE, ITEM_SCALE_SILVER, OBJECT_GI_SCALE, GID_SCALE_SILVER, 0xCD, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); - itemTable[RG_GOLDEN_SCALE] = Item(RG_GOLDEN_SCALE, Text{ "Golden Scale", "Écaille d'or", "Goldene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_GOLDEN, true, LOGIC_PROGRESSIVE_SCALE, RHT_GOLDEN_SCALE, ITEM_SCALE_GOLDEN, OBJECT_GI_SCALE, GID_SCALE_GOLDEN, 0xCE, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); + itemTable[RG_GOLDEN_SCALE] = Item(RG_GOLDEN_SCALE, Text{ "Golden Scale", "Écaille d'or", "Goldene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_GOLDEN, true, LOGIC_PROGRESSIVE_SCALE, RHT_GOLDEN_SCALE, ITEM_SCALE_GOLDEN, OBJECT_GI_SCALE, GID_SCALE_GOLDEN, 0xCE, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_ADULT_WALLET] = Item(RG_ADULT_WALLET, Text{ "Adult Wallet", "Grande Bourse", "Erwachsenengeldbörse" }, ITEMTYPE_ITEM, GI_WALLET_ADULT, true, LOGIC_PROGRESSIVE_WALLET, RHT_ADULT_WALLET, ITEM_WALLET_ADULT, OBJECT_GI_PURSE, GID_WALLET_ADULT, 0x5E, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_GIANT_WALLET] = Item(RG_GIANT_WALLET, Text{ "Giant Wallet", "Bourse de Géant", "Riesige Geldbörse" }, ITEMTYPE_ITEM, GI_WALLET_GIANT, true, LOGIC_PROGRESSIVE_WALLET, RHT_GIANT_WALLET, ITEM_WALLET_GIANT, OBJECT_GI_PURSE, GID_WALLET_GIANT, 0x5F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_TYCOON_WALLET] = Item(RG_TYCOON_WALLET, Text{ "Tycoon Wallet", "Bourse de Magnat", "Goldene Geldbörse" }, ITEMTYPE_ITEM, RG_TYCOON_WALLET, true, LOGIC_PROGRESSIVE_WALLET, RHT_TYCOON_WALLET, RG_TYCOON_WALLET, OBJECT_GI_PURSE, GID_WALLET_GIANT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); - itemTable[RG_CHILD_WALLET] = Item(RG_CHILD_WALLET, Text{ "Child Wallet", "Petite Bourse", "Kindergeldbörse" }, ITEMTYPE_ITEM, RG_CHILD_WALLET, true, LOGIC_PROGRESSIVE_WALLET, RHT_CHILD_WALLET, RG_CHILD_WALLET, OBJECT_GI_PURSE, GID_WALLET_ADULT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_CHILD_WALLET] = Item(RG_CHILD_WALLET, Text{ "Child Wallet", "Petite Bourse", "Kindergeldbörse" }, ITEMTYPE_ITEM, RG_CHILD_WALLET, true, LOGIC_PROGRESSIVE_WALLET, RHT_CHILD_WALLET, RG_CHILD_WALLET, OBJECT_GI_PURSE, GID_WALLET_ADULT, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_DEKU_NUT_CAPACITY_30] = Item(RG_DEKU_NUT_CAPACITY_30, Text{ "Deku Nut Capacity (30)", "Capacité de noix Mojo (30)", "Deku-Nuß-Kapazität (30)" }, ITEMTYPE_ITEM, GI_NUT_UPGRADE_30, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_DEKU_NUT_CAPACITY_30, ITEM_NUT_UPGRADE_30, OBJECT_GI_NUTS, GID_NUTS, 0xA7, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); itemTable[RG_DEKU_NUT_CAPACITY_40] = Item(RG_DEKU_NUT_CAPACITY_40, Text{ "Deku Nut Capacity (40)", "Capacité de noix Mojo (40)", "Deku-Nuß-Kapazität (40)" }, ITEMTYPE_ITEM, GI_NUT_UPGRADE_40, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_DEKU_NUT_CAPACITY_40, ITEM_NUT_UPGRADE_40, OBJECT_GI_NUTS, GID_NUTS, 0xA8, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); itemTable[RG_DEKU_STICK_CAPACITY_20] = Item(RG_DEKU_STICK_CAPACITY_20, Text{ "Deku Stick Capacity (20)", "Capacité de Bâtons Mojo (20)", "Deku-Stab-Kapazität (20)" }, ITEMTYPE_ITEM, GI_STICK_UPGRADE_20, true, LOGIC_PROGRESSIVE_STICK_BAG, RHT_DEKU_STICK_CAPACITY_20, ITEM_STICK_UPGRADE_20, OBJECT_GI_STICK, GID_STICK, 0x90, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_LESSER, MOD_NONE); @@ -402,6 +405,8 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_MAGIC_DOUBLE] = Item(RG_MAGIC_DOUBLE, Text{ "Enhanced Magic Meter", "Jauge de Magie améliorée", "Verbessertes Magisches Maß" }, ITEMTYPE_ITEM, 0x8A, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_DOUBLE, RG_MAGIC_DOUBLE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xE8, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER); itemTable[RG_TRIFORCE_PIECE] = Item(RG_TRIFORCE_PIECE, Text{ "Triforce Piece", "Triforce Piece", "Triforce-Fragment" }, ITEMTYPE_ITEM, 0xDF, true, LOGIC_TRIFORCE_PIECES, RHT_TRIFORCE_PIECE, RG_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + // clang-format on + // Init itemNameToEnum for (auto& item : itemTable) { // Easiest way to filter out all the empty values from the array, since we still technically want the 0/RG_NONE diff --git a/soh/soh/Enhancements/randomizer/item_location.cpp b/soh/soh/Enhancements/randomizer/item_location.cpp index 00e0366ab..f7587ec5e 100644 --- a/soh/soh/Enhancements/randomizer/item_location.cpp +++ b/soh/soh/Enhancements/randomizer/item_location.cpp @@ -3,8 +3,10 @@ #include "logic.h" namespace Rando { -ItemLocation::ItemLocation() : rc(RC_UNKNOWN_CHECK) {} -ItemLocation::ItemLocation(const RandomizerCheck rc_) : rc(rc_) {} +ItemLocation::ItemLocation() : rc(RC_UNKNOWN_CHECK) { +} +ItemLocation::ItemLocation(const RandomizerCheck rc_) : rc(rc_) { +} RandomizerCheck ItemLocation::GetRandomizerCheck() const { return rc; @@ -40,14 +42,14 @@ RandomizerGet ItemLocation::GetPlacedRandomizerGet() const { void ItemLocation::SetPlacedItem(const RandomizerGet item) { placedItem = item; - SetPrice (StaticData::RetrieveItem(placedItem).GetPrice()); + SetPrice(StaticData::RetrieveItem(placedItem).GetPrice()); } void ItemLocation::SetDelayedItem(const RandomizerGet item) { delayedItem = item; } -void ItemLocation::SaveDelayedItem () { +void ItemLocation::SaveDelayedItem() { placedItem = delayedItem; delayedItem = RG_NONE; } @@ -56,15 +58,16 @@ void ItemLocation::SetParentRegion(const RandomizerRegion region) { parentRegion = region; } -//RANDOTODO only used in tracker now, could possibly be removed +// RANDOTODO only used in tracker now, could possibly be removed RandomizerRegion ItemLocation::GetParentRegionKey() const { return parentRegion; } void ItemLocation::MergeAreas(std::set newAreas) { areas.merge(newAreas); - if (areas.size() >= 2){ - //if we have more than 1 area, remove any RA_NONE as that's not a real area. can happen if an entrance is in 2 regions and 1 is disconnected + if (areas.size() >= 2) { + // if we have more than 1 area, remove any RA_NONE as that's not a real area. can happen if an entrance is in 2 + // regions and 1 is disconnected areas.erase(RA_NONE); } } @@ -74,7 +77,7 @@ std::set ItemLocation::GetAreas() const { } RandomizerArea ItemLocation::GetFirstArea() const { - if (areas.empty()){ + if (areas.empty()) { assert(false); return RA_NONE; } else { @@ -83,7 +86,7 @@ RandomizerArea ItemLocation::GetFirstArea() const { } RandomizerArea ItemLocation::GetRandomArea() const { - if (areas.empty()){ + if (areas.empty()) { SPDLOG_DEBUG("Attempted to get random area of location with no areas: "); SPDLOG_DEBUG(Rando::StaticData::GetLocation(rc)->GetName()); assert(false); @@ -102,7 +105,7 @@ void ItemLocation::ApplyPlacedItemEffect() const { } uint16_t ItemLocation::GetPrice() const { - //RANDOTODO if we ever change price of shop items, this needs replacing with proper price assignment in Fill + // RANDOTODO if we ever change price of shop items, this needs replacing with proper price assignment in Fill if (StaticData::RetrieveItem(placedItem).GetItemType() == ITEMTYPE_SHOP) { return StaticData::RetrieveItem(placedItem).GetPrice(); } @@ -167,7 +170,7 @@ const std::vector& ItemLocation::GetHintedBy() const { void ItemLocation::AddHintedBy(const RandomizerHint hintKey) { hintedBy.push_back(hintKey); -} +} bool ItemLocation::IsHidden() const { return hidden; @@ -194,7 +197,6 @@ bool ItemLocation::IsVisible() const { } void ItemLocation::SetVisible(const bool visibleInImGui_) { visibleInImGui = visibleInImGui_; - } bool ItemLocation::IsWothCandidate() const { @@ -228,5 +230,14 @@ void ItemLocation::ResetVariables() { areas = {}; status = RCSHOW_UNCHECKED; isSkipped = false; + isAvailable = false; } -} \ No newline at end of file + +bool ItemLocation::IsAvailable() const { + return isAvailable; +} + +void ItemLocation::SetAvailable(bool isAvailable_) { + isAvailable = isAvailable_; +} +} // namespace Rando \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/item_location.h b/soh/soh/Enhancements/randomizer/item_location.h index 142ac1c0b..a04f5c2cf 100644 --- a/soh/soh/Enhancements/randomizer/item_location.h +++ b/soh/soh/Enhancements/randomizer/item_location.h @@ -21,11 +21,11 @@ class ItemLocation { RandomizerGet& RefPlacedItem(); void SetDelayedItem(RandomizerGet item); RandomizerRegion GetParentRegionKey() const; - void SetParentRegion (RandomizerRegion region); + void SetParentRegion(RandomizerRegion region); std::set GetAreas() const; RandomizerArea GetFirstArea() const; RandomizerArea GetRandomArea() const; - void MergeAreas (std::set newAreas); + void MergeAreas(std::set newAreas); void PlaceVanillaItem(); void ApplyPlacedItemEffect() const; void SaveDelayedItem(); @@ -56,6 +56,8 @@ class ItemLocation { bool IsFoolishCandidate() const; void SetBarrenCandidate(); void ResetVariables(); + bool IsAvailable() const; + void SetAvailable(bool isAvailable_); private: RandomizerCheck rc; @@ -76,5 +78,6 @@ class ItemLocation { bool barrenCandidate = false; RandomizerCheckStatus status = RCSHOW_UNCHECKED; bool isSkipped = false; + bool isAvailable = false; }; } // namespace Rando \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/item_override.cpp b/soh/soh/Enhancements/randomizer/item_override.cpp index 58789c579..cc25c8836 100644 --- a/soh/soh/Enhancements/randomizer/item_override.cpp +++ b/soh/soh/Enhancements/randomizer/item_override.cpp @@ -3,9 +3,11 @@ #include namespace Rando { -ItemOverride::ItemOverride() : mLocation(RC_UNKNOWN_CHECK), mLooksLike(RG_NONE) {} +ItemOverride::ItemOverride() : mLocation(RC_UNKNOWN_CHECK), mLooksLike(RG_NONE) { +} ItemOverride::ItemOverride(const RandomizerCheck location, const RandomizerGet looksLike) - : mLocation(location), mLooksLike(looksLike) {} + : mLocation(location), mLooksLike(looksLike) { +} RandomizerCheck ItemOverride::GetLocation() const { return mLocation; diff --git a/soh/soh/Enhancements/randomizer/item_override.h b/soh/soh/Enhancements/randomizer/item_override.h index 98a1f3d42..355d1e51e 100644 --- a/soh/soh/Enhancements/randomizer/item_override.h +++ b/soh/soh/Enhancements/randomizer/item_override.h @@ -14,7 +14,8 @@ class ItemOverride { RandomizerGet LooksLike() const; RandomizerGet& RefLooksLike(); Text& GetTrickName(); - void SetTrickName (Text trickName); + void SetTrickName(Text trickName); + private: RandomizerCheck mLocation; RandomizerGet mLooksLike; diff --git a/soh/soh/Enhancements/randomizer/location.cpp b/soh/soh/Enhancements/randomizer/location.cpp index b6f332927..f474397aa 100644 --- a/soh/soh/Enhancements/randomizer/location.cpp +++ b/soh/soh/Enhancements/randomizer/location.cpp @@ -252,143 +252,339 @@ RandomizerCheckArea GetAreaFromScene(uint8_t scene) { } } - -Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, - SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_, uint16_t vanillaPrice_) { - return { rc, quest_, checkType_, GetAreaFromScene(scene_), actorId_, scene_, actorParams_, std::move(shortName_), std::move(spoilerName_), hintKey, vanillaItem, - isVanillaCompletion_, collectionCheck, vanillaPrice_ }; -} - -Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, std::string&& shortName_, std::string&& spoilerName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, - SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_, uint16_t vanillaPrice_) { - return { rc, quest_, checkType_, area_, actorId_, scene_, actorParams_, std::move(shortName_), std::move(spoilerName_), hintKey, vanillaItem, isVanillaCompletion_, collectionCheck, vanillaPrice_ }; -} - -Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, +Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, std::string&& shortName_, + std::string&& spoilerName_, const RandomizerHintTextKey hintKey, + const RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_, uint16_t vanillaPrice_) { - return { rc, quest_, checkType_, GetAreaFromScene(scene_), actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, collectionCheck , vanillaPrice_ }; + return { rc, + quest_, + checkType_, + GetAreaFromScene(scene_), + actorId_, + scene_, + actorParams_, + std::move(shortName_), + std::move(spoilerName_), + hintKey, + vanillaItem, + isVanillaCompletion_, + collectionCheck, + vanillaPrice_ }; } -Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, - SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_, uint16_t vanillaPrice_) { - return { rc, quest_, checkType_, area_, actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, collectionCheck, vanillaPrice_ }; +Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, int32_t actorParams_, + std::string&& shortName_, std::string&& spoilerName_, + const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_, + uint16_t vanillaPrice_) { + return { rc, + quest_, + checkType_, + area_, + actorId_, + scene_, + actorParams_, + std::move(shortName_), + std::move(spoilerName_), + hintKey, + vanillaItem, + isVanillaCompletion_, + collectionCheck, + vanillaPrice_ }; } -Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - uint8_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, bool isVanillaCompletion_) { - return { rc, quest_, checkType_, GetAreaFromScene(scene_), actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, - SpoilerCollectionCheck(SPOILER_CHK_CHEST, scene_, flag_) }; +Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, std::string&& shortName_, + const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_, + uint16_t vanillaPrice_) { + return { rc, quest_, checkType_, GetAreaFromScene(scene_), + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, collectionCheck, + vanillaPrice_ }; } -Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, +Rando::Location Rando::Location::Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, int32_t actorParams_, + std::string&& shortName_, const RandomizerHintTextKey hintKey, + const RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, + bool isVanillaCompletion_, uint16_t vanillaPrice_) { + return { rc, quest_, checkType_, area_, + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, collectionCheck, + vanillaPrice_ }; +} + +Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, uint8_t flag_, + std::string&& shortName_, const RandomizerHintTextKey hintKey, + const RandomizerGet vanillaItem, bool isVanillaCompletion_) { + return { rc, quest_, checkType_, GetAreaFromScene(scene_), + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, SpoilerCollectionCheck(SPOILER_CHK_CHEST, scene_, flag_) }; +} + +Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, + int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, bool isVanillaCompletion_) { - return { rc, quest_, checkType_, area_, actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, - SpoilerCollectionCheck(SPOILER_CHK_CHEST, scene_, flag_) }; + return { rc, quest_, checkType_, area_, + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, SpoilerCollectionCheck(SPOILER_CHK_CHEST, scene_, flag_) }; } -Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, - bool isVanillaCompletion_) { - return { rc, quest_, checkType_, GetAreaFromScene(scene_), actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, collectionCheck }; -} - -Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, +Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, std::string&& shortName_, + const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_) { - return { rc, quest_, checkType_, area_, actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, collectionCheck }; + return { rc, quest_, checkType_, GetAreaFromScene(scene_), + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, collectionCheck }; } -Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - uint8_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, bool isVanillaCompletion_) { - return { rc, quest_, checkType_, GetAreaFromScene(scene_), actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, - SpoilerCollectionCheck(SPOILER_CHK_COLLECTABLE, scene_, flag_) }; +Rando::Location Rando::Location::Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_, + const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_) { + return { rc, quest_, checkType_, area_, + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, collectionCheck }; } -Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, +Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, + RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, + int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, bool isVanillaCompletion_) { - return { rc, quest_, checkType_, area_, actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, - SpoilerCollectionCheck(SPOILER_CHK_COLLECTABLE, scene_, flag_) }; + return { + rc, quest_, checkType_, GetAreaFromScene(scene_), + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, SpoilerCollectionCheck(SPOILER_CHK_COLLECTABLE, scene_, flag_) + }; } -Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, - bool isVanillaCompletion_) { - return { rc, quest_, checkType_, GetAreaFromScene(scene_), actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, collectionCheck }; +Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, + RandomizerCheckType checkType_, RandomizerCheckArea area_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, uint8_t flag_, + std::string&& shortName_, const RandomizerHintTextKey hintKey, + const RandomizerGet vanillaItem, bool isVanillaCompletion_) { + return { + rc, quest_, checkType_, area_, + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, SpoilerCollectionCheck(SPOILER_CHK_COLLECTABLE, scene_, flag_) + }; } -Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, +Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, + RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_, + const RandomizerHintTextKey hintKey, const RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_) { - return { rc, quest_, checkType_, area_, actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, isVanillaCompletion_, collectionCheck }; + return { rc, quest_, checkType_, GetAreaFromScene(scene_), + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, collectionCheck }; } -Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, +Rando::Location Rando::Location::Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, + RandomizerCheckType checkType_, RandomizerCheckArea area_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, + std::string&& shortName_, const RandomizerHintTextKey hintKey, + const RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, + bool isVanillaCompletion_) { + return { rc, quest_, checkType_, area_, + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, isVanillaCompletion_, collectionCheck }; +} + +Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, + int32_t actorParams_, uint8_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey) { - return { rc, quest_, RCTYPE_SKULL_TOKEN, GetAreaFromScene(scene_), ACTOR_EN_SI, scene_, actorParams_, std::move(shortName_), hintKey, RG_GOLD_SKULLTULA_TOKEN, true, - SpoilerCollectionCheck(SPOILER_CHK_GOLD_SKULLTULA, scene_, flag_) }; + return { rc, + quest_, + RCTYPE_SKULL_TOKEN, + GetAreaFromScene(scene_), + ACTOR_EN_SI, + scene_, + actorParams_, + std::move(shortName_), + hintKey, + RG_GOLD_SKULLTULA_TOKEN, + true, + SpoilerCollectionCheck(SPOILER_CHK_GOLD_SKULLTULA, scene_, flag_) }; } -Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, +Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, + int32_t actorParams_, uint8_t flag_, std::string&& shortName_, const RandomizerHintTextKey hintKey, const uint8_t skullScene_) { - return { rc, quest_, RCTYPE_SKULL_TOKEN, GetAreaFromScene(scene_), ACTOR_EN_SI, scene_, actorParams_, std::move(shortName_), hintKey, RG_GOLD_SKULLTULA_TOKEN, true, - SpoilerCollectionCheck(SPOILER_CHK_GOLD_SKULLTULA, skullScene_, flag_) }; + return { rc, + quest_, + RCTYPE_SKULL_TOKEN, + GetAreaFromScene(scene_), + ACTOR_EN_SI, + scene_, + actorParams_, + std::move(shortName_), + hintKey, + RG_GOLD_SKULLTULA_TOKEN, + true, + SpoilerCollectionCheck(SPOILER_CHK_GOLD_SKULLTULA, skullScene_, flag_) }; } -Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, int32_t actorParams_, uint8_t flag_, - std::string&& shortName_, const RandomizerHintTextKey hintKey, const uint8_t skullScene_) { - return { rc, quest_, RCTYPE_SKULL_TOKEN, area_, ACTOR_EN_SI, scene_, actorParams_, std::move(shortName_), hintKey, RG_GOLD_SKULLTULA_TOKEN, true, - SpoilerCollectionCheck(SPOILER_CHK_GOLD_SKULLTULA, skullScene_, flag_) }; +Rando::Location Rando::Location::GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + const RandomizerHintTextKey hintKey, const uint8_t skullScene_) { + return { rc, + quest_, + RCTYPE_SKULL_TOKEN, + area_, + ACTOR_EN_SI, + scene_, + actorParams_, + std::move(shortName_), + hintKey, + RG_GOLD_SKULLTULA_TOKEN, + true, + SpoilerCollectionCheck(SPOILER_CHK_GOLD_SKULLTULA, skullScene_, flag_) }; } -Rando::Location Rando::Location::OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, std::string&& shortName_, +Rando::Location Rando::Location::OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + ActorID actorId_, SceneID scene_, std::string&& shortName_, std::string&& spoilerName_) { - return { rc, quest_, RCTYPE_STATIC_HINT, area_, actorId_, scene_, 0x00, std::move(shortName_), std::move(spoilerName_), RHT_NONE, RG_NONE, false }; + return { rc, + quest_, + RCTYPE_STATIC_HINT, + area_, + actorId_, + scene_, + 0x00, + std::move(shortName_), + std::move(spoilerName_), + RHT_NONE, + RG_NONE, + false }; } -Rando::Location Rando::Location::OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, ActorID actorId_, SceneID scene_, std::string&& shortName_) { - return { rc, quest_, RCTYPE_STATIC_HINT, GetAreaFromScene(scene_), actorId_, scene_, 0x00, std::move(shortName_), RHT_NONE, RG_NONE, false }; +Rando::Location Rando::Location::OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, ActorID actorId_, + SceneID scene_, std::string&& shortName_) { + return { rc, + quest_, + RCTYPE_STATIC_HINT, + GetAreaFromScene(scene_), + actorId_, + scene_, + 0x00, + std::move(shortName_), + RHT_NONE, + RG_NONE, + false }; } -Rando::Location Rando::Location::OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, std::string&& shortName_) { - return { rc, quest_, RCTYPE_STATIC_HINT, area_, actorId_, scene_, 0x00, std::move(shortName_), RHT_NONE, RG_NONE, false }; +Rando::Location Rando::Location::OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + ActorID actorId_, SceneID scene_, std::string&& shortName_) { + return { rc, quest_, RCTYPE_STATIC_HINT, area_, actorId_, scene_, 0x00, std::move(shortName_), RHT_NONE, + RG_NONE, false }; } -Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, int32_t actorParams_, std::string&& shortName_) { - return { rc, quest_, RCTYPE_GOSSIP_STONE, GetAreaFromScene(scene_), ACTOR_EN_GS, scene_, actorParams_, std::move(shortName_), RHT_NONE, RG_NONE, false }; +Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_) { + return { rc, + quest_, + RCTYPE_GOSSIP_STONE, + GetAreaFromScene(scene_), + ACTOR_EN_GS, + scene_, + actorParams_, + std::move(shortName_), + RHT_NONE, + RG_NONE, + false }; } -Rando::Location Rando::Location::Fish(RandomizerCheck rc, RandomizerCheckQuest quest_, ActorID actorId_, SceneID scene_, int32_t actorParams_, RandomizerInf flag_, - std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem) { - return {rc, quest_, RCTYPE_FISH, GetAreaFromScene(scene_), actorId_, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, false, - SpoilerCollectionCheck(SPOILER_CHK_RANDOMIZER_INF, scene_, flag_)}; +Rando::Location Rando::Location::Fish(RandomizerCheck rc, RandomizerCheckQuest quest_, ActorID actorId_, SceneID scene_, + int32_t actorParams_, RandomizerInf flag_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem) { + return { rc, quest_, RCTYPE_FISH, GetAreaFromScene(scene_), + actorId_, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, false, SpoilerCollectionCheck(SPOILER_CHK_RANDOMIZER_INF, scene_, flag_) }; } -Rando::Location Rando::Location::GrottoFish(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, int32_t actorParams_, RandomizerInf flag_, - std::string&& shortName_, RandomizerHintTextKey hintKey) { - return {rc, quest_, RCTYPE_FISH, area_, ACTOR_EN_FISH, SCENE_GROTTOS, actorParams_, std::move(shortName_), hintKey, RG_FISH, false, - SpoilerCollectionCheck(SPOILER_CHK_RANDOMIZER_INF, SCENE_GROTTOS, flag_)}; +Rando::Location Rando::Location::GrottoFish(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + int32_t actorParams_, RandomizerInf flag_, std::string&& shortName_, + RandomizerHintTextKey hintKey) { + return { rc, + quest_, + RCTYPE_FISH, + area_, + ACTOR_EN_FISH, + SCENE_GROTTOS, + actorParams_, + std::move(shortName_), + hintKey, + RG_FISH, + false, + SpoilerCollectionCheck(SPOILER_CHK_RANDOMIZER_INF, SCENE_GROTTOS, flag_) }; } Rando::Location Rando::Location::Pot(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, - SceneID scene_, int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, - RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck) { - return {rc, quest_, RCTYPE_POT, area_, ACTOR_OBJ_TSUBO, scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, false, - collectionCheck }; + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck) { + return { + rc, quest_, RCTYPE_POT, area_, ACTOR_OBJ_TSUBO, scene_, actorParams_, std::move(shortName_), + hintKey, vanillaItem, false, collectionCheck + }; } -Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, int32_t actorParams_, std::string&& shortName_) { - return { rc, quest_, RCTYPE_GOSSIP_STONE, area_, ACTOR_EN_GS, scene_, actorParams_, std::move(shortName_), RHT_NONE, RG_NONE, false }; +Rando::Location Rando::Location::Crate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck) { + return { rc, quest_, RCTYPE_CRATE, area_, ACTOR_OBJ_KIBAKO2, + scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, + false, collectionCheck }; } -Rando::Location Rando::Location::Fairy(RandomizerCheck rc, RandomizerCheckQuest quest_, - RandomizerCheckArea area_, SceneID scene_, - int32_t actorParams_, std::string&& shortName_, - RandomizerHintTextKey hintKey, SpoilerCollectionCheck collectionCheck) { - return {rc, quest_, RCTYPE_FAIRY, area_, ACTOR_EN_ELF, scene_, actorParams_, std::move(shortName_), hintKey, RG_NONE, false, collectionCheck}; +Rando::Location Rando::Location::NLCrate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck) { + return { rc, quest_, RCTYPE_NLCRATE, area_, ACTOR_OBJ_KIBAKO2, + scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, + false, collectionCheck }; +} + +Rando::Location Rando::Location::SmallCrate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck) { + return { rc, quest_, RCTYPE_SMALL_CRATE, area_, ACTOR_OBJ_KIBAKO, + scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, + false, collectionCheck }; +} + +Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_) { + return { rc, quest_, RCTYPE_GOSSIP_STONE, area_, ACTOR_EN_GS, + scene_, actorParams_, std::move(shortName_), RHT_NONE, RG_NONE, + false }; +} + +Rando::Location Rando::Location::Fairy(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, SpoilerCollectionCheck collectionCheck) { + return { rc, quest_, RCTYPE_FAIRY, area_, ACTOR_EN_ELF, scene_, actorParams_, std::move(shortName_), + hintKey, RG_NONE, false, collectionCheck }; +} + +Rando::Location Rando::Location::Grass(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck) { + return { rc, quest_, RCTYPE_GRASS, area_, ACTOR_EN_KUSA, + scene_, actorParams_, std::move(shortName_), hintKey, vanillaItem, + false, collectionCheck }; } diff --git a/soh/soh/Enhancements/randomizer/location.h b/soh/soh/Enhancements/randomizer/location.h index b4fb6482a..f99499652 100644 --- a/soh/soh/Enhancements/randomizer/location.h +++ b/soh/soh/Enhancements/randomizer/location.h @@ -20,7 +20,9 @@ class SpoilerCollectionCheck { uint16_t flag = 0; SpoilerCollectionCheck() = default; - SpoilerCollectionCheck(const SpoilerCollectionCheckType type_, const uint8_t scene_, const uint16_t flag_) : type(type_), scene(scene_), flag(flag_) {} + SpoilerCollectionCheck(const SpoilerCollectionCheckType type_, const uint8_t scene_, const uint16_t flag_) + : type(type_), scene(scene_), flag(flag_) { + } static auto ItemGetInf(const uint8_t slot) { return SpoilerCollectionCheck(SPOILER_CHK_ITEM_GET_INF, 0x00, slot); @@ -49,46 +51,52 @@ class SpoilerCollectionCheck { class Location { public: - //RANDOTODO fix wacky ordering - Location() : rc(RC_UNKNOWN_CHECK), quest(RCQUEST_BOTH), checkType(RCTYPE_STANDARD), area(RCAREA_INVALID), actorId(ACTOR_ID_MAX), scene(SCENE_ID_MAX), actorParams(0), - hintKey(RHT_NONE), vanillaItem(RG_NONE), isVanillaCompletion(false), collectionCheck(SpoilerCollectionCheck()) {} + // RANDOTODO fix wacky ordering + Location() + : rc(RC_UNKNOWN_CHECK), quest(RCQUEST_BOTH), checkType(RCTYPE_STANDARD), area(RCAREA_INVALID), + actorId(ACTOR_ID_MAX), scene(SCENE_ID_MAX), actorParams(0), hintKey(RHT_NONE), vanillaItem(RG_NONE), + isVanillaCompletion(false), collectionCheck(SpoilerCollectionCheck()) { + } - Location(const RandomizerCheck rc_, const RandomizerCheckQuest quest_, const RandomizerCheckType checkType_, const RandomizerCheckArea area_, const ActorID actorId_, - const SceneID scene_, const int32_t actorParams_, std::string shortName_, std::string spoilerName_, const RandomizerHintTextKey hintKey_, - const RandomizerGet vanillaItem_, const bool isVanillaCompletion_ = false, const SpoilerCollectionCheck collectionCheck_ = SpoilerCollectionCheck(), - const int vanillaPrice_ = 0) - : rc(rc_), quest(quest_), checkType(checkType_), area(area_), actorId(actorId_), - scene(scene_), actorParams(actorParams_), shortName(std::move(shortName_)), - spoilerName(std::move(spoilerName_)), hintKey(hintKey_), vanillaItem(vanillaItem_), - isVanillaCompletion(isVanillaCompletion_), collectionCheck(collectionCheck_), vanillaPrice(vanillaPrice_) { - if (spoilerName.length() < 23) { - excludedOption = LocationOption(rc, spoilerName); - } else { - const size_t lastSpace = spoilerName.rfind(' ', 23); - std::string settingText = spoilerName; - settingText.replace(lastSpace, 1, "\n "); - - excludedOption = LocationOption(rc, spoilerName); - } - } - - Location(const RandomizerCheck rc_, const RandomizerCheckQuest quest_, const RandomizerCheckType checkType_, const RandomizerCheckArea area_, const ActorID actorId_, - const SceneID scene_, const int32_t actorParams_, std::string shortName_, const RandomizerHintTextKey hintKey_, const RandomizerGet vanillaItem_, - const bool isVanillaCompletion_ = false, const SpoilerCollectionCheck collectionCheck_ = SpoilerCollectionCheck(), - const int vanillaPrice_ = 0) - : rc(rc_), quest(quest_), checkType(checkType_), area(area_), actorId(actorId_), scene(scene_), actorParams(actorParams_), shortName(shortName_), - spoilerName(SpoilerNameFromShortName(shortName_, area_)), hintKey(hintKey_), vanillaItem(vanillaItem_), isVanillaCompletion(isVanillaCompletion_), + Location(const RandomizerCheck rc_, const RandomizerCheckQuest quest_, const RandomizerCheckType checkType_, + const RandomizerCheckArea area_, const ActorID actorId_, const SceneID scene_, const int32_t actorParams_, + std::string shortName_, std::string spoilerName_, const RandomizerHintTextKey hintKey_, + const RandomizerGet vanillaItem_, const bool isVanillaCompletion_ = false, + const SpoilerCollectionCheck collectionCheck_ = SpoilerCollectionCheck(), const int vanillaPrice_ = 0) + : rc(rc_), quest(quest_), checkType(checkType_), area(area_), actorId(actorId_), scene(scene_), + actorParams(actorParams_), shortName(std::move(shortName_)), spoilerName(std::move(spoilerName_)), + hintKey(hintKey_), vanillaItem(vanillaItem_), isVanillaCompletion(isVanillaCompletion_), collectionCheck(collectionCheck_), vanillaPrice(vanillaPrice_) { - if (spoilerName.length() < 23) { - excludedOption = LocationOption(rc, spoilerName); - } else { - const size_t lastSpace = spoilerName.rfind(' ', 23); - std::string settingText = spoilerName; - settingText.replace(lastSpace, 1, "\n "); + if (spoilerName.length() < 23) { + excludedOption = LocationOption(rc, spoilerName); + } else { + const size_t lastSpace = spoilerName.rfind(' ', 23); + std::string settingText = spoilerName; + settingText.replace(lastSpace, 1, "\n "); - excludedOption = LocationOption(rc, spoilerName); - } + excludedOption = LocationOption(rc, spoilerName); } + } + + Location(const RandomizerCheck rc_, const RandomizerCheckQuest quest_, const RandomizerCheckType checkType_, + const RandomizerCheckArea area_, const ActorID actorId_, const SceneID scene_, const int32_t actorParams_, + std::string shortName_, const RandomizerHintTextKey hintKey_, const RandomizerGet vanillaItem_, + const bool isVanillaCompletion_ = false, + const SpoilerCollectionCheck collectionCheck_ = SpoilerCollectionCheck(), const int vanillaPrice_ = 0) + : rc(rc_), quest(quest_), checkType(checkType_), area(area_), actorId(actorId_), scene(scene_), + actorParams(actorParams_), shortName(shortName_), spoilerName(SpoilerNameFromShortName(shortName_, area_)), + hintKey(hintKey_), vanillaItem(vanillaItem_), isVanillaCompletion(isVanillaCompletion_), + collectionCheck(collectionCheck_), vanillaPrice(vanillaPrice_) { + if (spoilerName.length() < 23) { + excludedOption = LocationOption(rc, spoilerName); + } else { + const size_t lastSpace = spoilerName.rfind(' ', 23); + std::string settingText = spoilerName; + settingText.replace(lastSpace, 1, "\n "); + + excludedOption = LocationOption(rc, spoilerName); + } + } static std::string SpoilerNameFromShortName(std::string shortName, RandomizerCheckArea area) { if (area < 0 || area >= RCAREA_INVALID) { @@ -119,98 +127,143 @@ class Location { int16_t GetVanillaPrice() const; Option* GetExcludedOption(); - static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, - ActorID actorId_, SceneID scene_, int32_t actorParams_, std::string&& shortName_, - std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, - SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), - bool isVanillaCompletion_ = false, uint16_t vanillaPrice_ = 0); - - static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), + static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, std::string&& shortName_, + std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), bool isVanillaCompletion_ = false, uint16_t vanillaPrice_ = 0); - static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, - SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), bool isVanillaCompletion_ = false, uint16_t vanillaPrice_ = 0); + static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), + bool isVanillaCompletion_ = false, uint16_t vanillaPrice_ = 0); - static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, - SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), bool isVanillaCompletion_ = false, uint16_t vanillaPrice_ = 0); + static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, int32_t actorParams_, + std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), + bool isVanillaCompletion_ = false, uint16_t vanillaPrice_ = 0); - static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, bool isVanillaCompletion_ = false); + static Location Base(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, int32_t actorParams_, + std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), + bool isVanillaCompletion_ = false, uint16_t vanillaPrice_ = 0); - static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, + static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, int32_t actorParams_, + uint8_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, bool isVanillaCompletion_ = false); + + static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, int32_t actorParams_, + std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_ = false); + + static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, uint8_t flag_, + std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, bool isVanillaCompletion_ = false); - static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, uint8_t flag_, - std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, bool isVanillaCompletion_ = false); + static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck, bool isVanillaCompletion_ = false); - static Location Chest(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck, - bool isVanillaCompletion_ = false); - - static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, uint8_t flag_, - std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, bool isVanillaCompletion_ = false); - - static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, - int32_t actorParams_, uint8_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, uint8_t flag_, + std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, bool isVanillaCompletion_ = false); - static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), + static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, int32_t actorParams_, + uint8_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, bool isVanillaCompletion_ = false); + + static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + ActorID actorId_, SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), bool isVanillaCompletion_ = false); - static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, RandomizerCheckArea area_, ActorID actorId_, - SceneID scene_, int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, - SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), bool isVanillaCompletion_ = false); + static Location Collectable(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckType checkType_, + RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, int32_t actorParams_, + std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck = SpoilerCollectionCheck(), + bool isVanillaCompletion_ = false); - static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, - RandomizerHintTextKey hintKey); + static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, int32_t actorParams_, + uint8_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey); /// @brief For certain scenes, the sceneId and the "Scene" in spoiler collection check later used to check the - /// GS flags don't necessarily match. Use this constructor (or the next one) for those. scene_ should be the actual scene where - /// the GS is located, skullScene_ is the value passed to GET_GS_FLAGS to get the correct skulltula. It is normal - /// and expected that these don't always match, and the naming is a holdover from 3drando. - /// @param rc - /// @param quest_ - /// @param scene_ - /// @param actorParams_ - /// @param flag_ - /// @param shortName_ - /// @param hintKey - /// @param skullScene_ + /// GS flags don't necessarily match. Use this constructor (or the next one) for those. scene_ should be the actual + /// scene where the GS is located, skullScene_ is the value passed to GET_GS_FLAGS to get the correct skulltula. It + /// is normal and expected that these don't always match, and the naming is a holdover from 3drando. + /// @param rc + /// @param quest_ + /// @param scene_ + /// @param actorParams_ + /// @param flag_ + /// @param shortName_ + /// @param hintKey + /// @param skullScene_ /// @return - static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, int32_t actorParams_, uint8_t flag_, std::string&& shortName_, + static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, int32_t actorParams_, + uint8_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, + uint8_t skullScene_); + + static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, + int32_t actorParams_, uint8_t flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, uint8_t skullScene_); - static Location GSToken(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, int32_t actorParams_, uint8_t flag_, - std::string&& shortName_, RandomizerHintTextKey hintKey, uint8_t skullScene_); + static Location Fish(RandomizerCheck rc, RandomizerCheckQuest quest_, ActorID actorId_, SceneID scene_, + int32_t actorParams_, RandomizerInf flag_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem); - static Location Fish(RandomizerCheck rc, RandomizerCheckQuest quest_, ActorID actorId_, SceneID scene_, int32_t actorParams_, - RandomizerInf flag_, std::string&& shortName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem); - - static Location GrottoFish(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, int32_t actorParams_, - RandomizerInf flag_, std::string&& shortName_, RandomizerHintTextKey hintKey); + static Location GrottoFish(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + int32_t actorParams_, RandomizerInf flag_, std::string&& shortName_, + RandomizerHintTextKey hintKey); static Location Pot(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, - int32_t actorParams_, std::string&& shortName_, - RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, - SpoilerCollectionCheck collectionCheck); + int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck); - static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, std::string&& shortName_, - std::string&& spoilerName_); + static Location Grass(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck); - static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, ActorID actorId_, SceneID scene_, std::string&& shortName_); + static Location Crate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck); - static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, std::string&& shortName_); + static Location NLCrate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck); - static Location Fairy(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, SpoilerCollectionCheck collectionCheck); + static Location SmallCrate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck); - static Location HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, int32_t actorParams_, std::string&& shortName_); + static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + ActorID actorId_, SceneID scene_, std::string&& shortName_, std::string&& spoilerName_); - static Location HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, int32_t actorParams_, std::string&& shortName_); + static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, ActorID actorId_, SceneID scene_, + std::string&& shortName_); + + static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + ActorID actorId_, SceneID scene_, std::string&& shortName_); + + static Location Fairy(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_, RandomizerHintTextKey hintKey, + SpoilerCollectionCheck collectionCheck); + + static Location HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, SceneID scene_, int32_t actorParams_, + std::string&& shortName_); + + static Location HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_); private: RandomizerCheck rc; diff --git a/soh/soh/Enhancements/randomizer/location_access.cpp b/soh/soh/Enhancements/randomizer/location_access.cpp index a45e27cd0..c06ca5d70 100644 --- a/soh/soh/Enhancements/randomizer/location_access.cpp +++ b/soh/soh/Enhancements/randomizer/location_access.cpp @@ -11,14 +11,19 @@ #include -//generic grotto event list +extern "C" { +extern SaveContext gSaveContext; +extern PlayState* gPlayState; +} + +// generic grotto event list std::vector grottoEvents; -//set the logic to be a specific age and time of day and see if the condition still holds +// set the logic to be a specific age and time of day and see if the condition still holds bool LocationAccess::CheckConditionAtAgeTime(bool& age, bool& time) const { logic->IsChild = false; logic->IsAdult = false; - logic->AtDay = false; + logic->AtDay = false; logic->AtNight = false; time = true; @@ -27,22 +32,21 @@ bool LocationAccess::CheckConditionAtAgeTime(bool& age, bool& time) const { return GetConditionsMet(); } -bool LocationAccess::ConditionsMet(Region* parentRegion) const { - //WARNING enterance validation can run this after resetting the access for sphere 0 validation - //When refactoring ToD access, either fix the above or do not assume that we - //have any access at all just because this is being run +bool LocationAccess::ConditionsMet(Region* parentRegion, bool calculatingAvailableChecks) const { + // WARNING enterance validation can run this after resetting the access for sphere 0 validation + // When refactoring ToD access, either fix the above or do not assume that we + // have any access at all just because this is being run bool conditionsMet = false; - if ( - (parentRegion->childDay && CheckConditionAtAgeTime(logic->IsChild, logic->AtDay)) || + if ((parentRegion->childDay && CheckConditionAtAgeTime(logic->IsChild, logic->AtDay)) || (parentRegion->childNight && CheckConditionAtAgeTime(logic->IsChild, logic->AtNight)) || - (parentRegion->adultDay && CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay)) || - (parentRegion->adultNight && CheckConditionAtAgeTime(logic->IsAdult, logic->AtNight)) - ) { + (parentRegion->adultDay && CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay)) || + (parentRegion->adultNight && CheckConditionAtAgeTime(logic->IsAdult, logic->AtNight))) { conditionsMet = true; } - return conditionsMet && CanBuy(); + return conditionsMet && + (calculatingAvailableChecks || CanBuy()); // TODO: run CanBuy when price is known due to settings } bool LocationAccess::CanBuy() const { @@ -65,25 +69,16 @@ bool CanBuyAnother(RandomizerCheck rc) { } Region::Region() = default; -Region::Region( - std::string regionName_, - std::string scene_, - std::set areas, - bool timePass_, - std::vector events_, - std::vector locations_, - std::list exits_ -) : regionName(std::move(regionName_)), - scene(std::move(scene_)), - areas(areas), - timePass(timePass_), - events(std::move(events_)), - locations(std::move(locations_)), - exits(std::move(exits_)) {} +Region::Region(std::string regionName_, std::string scene_, std::set areas, bool timePass_, + std::vector events_, std::vector locations_, + std::list exits_) + : regionName(std::move(regionName_)), scene(std::move(scene_)), areas(areas), timePass(timePass_), + events(std::move(events_)), locations(std::move(locations_)), exits(std::move(exits_)) { +} Region::~Region() = default; -void Region::ApplyTimePass(){ +void Region::ApplyTimePass() { if (timePass) { StartPerformanceTimer(PT_TOD_ACCESS); if (Child()) { @@ -103,20 +98,18 @@ void Region::ApplyTimePass(){ } bool Region::UpdateEvents() { - bool eventsUpdated = false; + bool eventsUpdated = false; StartPerformanceTimer(PT_EVENT_ACCESS); for (EventAccess& event : events) { - //If the event has already happened, there's no reason to check it + // If the event has already happened, there's no reason to check it if (event.GetEvent()) { continue; } - if ( - (childDay && event.CheckConditionAtAgeTime(logic->IsChild, logic->AtDay)) || - (childNight && event.CheckConditionAtAgeTime(logic->IsChild, logic->AtNight)) || - (adultDay && event.CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay)) || - (adultNight && event.CheckConditionAtAgeTime(logic->IsAdult, logic->AtNight)) - ) { + if ((childDay && event.CheckConditionAtAgeTime(logic->IsChild, logic->AtDay)) || + (childNight && event.CheckConditionAtAgeTime(logic->IsChild, logic->AtNight)) || + (adultDay && event.CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay)) || + (adultNight && event.CheckConditionAtAgeTime(logic->IsAdult, logic->AtNight))) { event.EventOccurred(); eventsUpdated = true; } @@ -126,14 +119,14 @@ bool Region::UpdateEvents() { } void Region::AddExit(RandomizerRegion parentKey, RandomizerRegion newExitKey, ConditionFn condition) { - Rando::Entrance newExit = Rando::Entrance(newExitKey, {condition}); + Rando::Entrance newExit = Rando::Entrance(newExitKey, { condition }); newExit.SetParentRegion(parentKey); exits.push_front(newExit); } -//The exit will be completely removed from this region +// The exit will be completely removed from this region void Region::RemoveExit(Rando::Entrance* exitToRemove) { - exits.remove_if([exitToRemove](const auto exit){return &exit == exitToRemove;}); + exits.remove_if([exitToRemove](const auto exit) { return &exit == exitToRemove; }); } void Region::SetAsPrimary(RandomizerRegion exitToBePrimary) { @@ -152,7 +145,8 @@ Rando::Entrance* Region::GetExit(RandomizerRegion exitToReturn) { } } - LUSLOG_ERROR("ERROR: EXIT \"%s\" DOES NOT EXIST IN \"%s\"", RegionTable(exitToReturn)->regionName.c_str(), this->regionName.c_str()); + LUSLOG_ERROR("ERROR: EXIT \"%s\" DOES NOT EXIST IN \"%s\"", RegionTable(exitToReturn)->regionName.c_str(), + this->regionName.c_str()); assert(false); return nullptr; } @@ -190,9 +184,9 @@ bool Region::CheckAllAccess(const RandomizerRegion exitKey) { for (Rando::Entrance& exit : exits) { if (exit.GetConnectedRegionKey() == exitKey) { - return exit.CheckConditionAtAgeTime(logic->IsChild, logic->AtDay) && + return exit.CheckConditionAtAgeTime(logic->IsChild, logic->AtDay) && exit.CheckConditionAtAgeTime(logic->IsChild, logic->AtNight) && - exit.CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay) && + exit.CheckConditionAtAgeTime(logic->IsAdult, logic->AtDay) && exit.CheckConditionAtAgeTime(logic->IsAdult, logic->AtNight); } } @@ -224,8 +218,73 @@ bool MQSpiritSharedBrokenWallRoom(const RandomizerRegion region, ConditionFn con return areaTable[region].MQSpiritShared(condition, true, anyAge); } +bool BeanPlanted(const RandomizerRegion region) { + // swchFlag found using the Actor Viewer to get the Obj_Bean parameters & 0x3F + // not tested with multiple OTRs, but can be automated similarly to GetDungeonSmallKeyDoors + SceneID sceneID; + uint8_t swchFlag; + switch (region) { + case RR_ZORAS_RIVER: + sceneID = SceneID::SCENE_ZORAS_RIVER; + swchFlag = 3; + break; + case RR_THE_GRAVEYARD: + sceneID = SceneID::SCENE_GRAVEYARD; + swchFlag = 3; + break; + case RR_KOKIRI_FOREST: + sceneID = SceneID::SCENE_KOKIRI_FOREST; + swchFlag = 9; + break; + case RR_THE_LOST_WOODS: + sceneID = SceneID::SCENE_LOST_WOODS; + swchFlag = 4; + break; + case RR_LW_BEYOND_MIDO: + sceneID = SceneID::SCENE_LOST_WOODS; + swchFlag = 18; + break; + case RR_DEATH_MOUNTAIN_TRAIL: + sceneID = SceneID::SCENE_DEATH_MOUNTAIN_TRAIL; + swchFlag = 6; + break; + case RR_LAKE_HYLIA: + sceneID = SceneID::SCENE_LAKE_HYLIA; + swchFlag = 1; + break; + case RR_GERUDO_VALLEY: + sceneID = SceneID::SCENE_GERUDO_VALLEY; + swchFlag = 3; + break; + case RR_DMC_CENTRAL_LOCAL: + sceneID = SceneID::SCENE_DEATH_MOUNTAIN_CRATER; + swchFlag = 3; + break; + case RR_DESERT_COLOSSUS: + sceneID = SceneID::SCENE_DESERT_COLOSSUS; + swchFlag = 24; + break; + default: + sceneID = SCENE_ID_MAX; + swchFlag = 0; + break; + } + + // Get the swch value for the scene + uint32_t swch; + if (gPlayState != nullptr && gPlayState->sceneNum == sceneID) { + swch = gPlayState->actorCtx.flags.swch; + } else if (sceneID != SCENE_ID_MAX) { + swch = gSaveContext.sceneFlags[sceneID].swch; + } else { + swch = 0; + } + + return swch >> swchFlag & 1; +} + bool CanPlantBean(const RandomizerRegion region) { - return areaTable[region].CanPlantBeanCheck(); + return areaTable[region].CanPlantBeanCheck() || BeanPlanted(region); } bool BothAges(const RandomizerRegion region) { @@ -250,20 +309,24 @@ std::shared_ptr logic; void RegionTable_Init() { using namespace Rando; ctx = Context::GetInstance().get(); - logic = ctx->GetLogic(); //RANDOTODO do not hardcode, instead allow accepting a Logic class somehow + logic = ctx->GetLogic(); // RANDOTODO do not hardcode, instead allow accepting a Logic class somehow grottoEvents = { - EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), - EventAccess(&logic->ButterflyFairy, []{return logic->ButterflyFairy || (logic->CanUse(RG_STICKS));}), - EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}), - EventAccess(&logic->LoneFish, []{return true;}), + EventAccess(&logic->GossipStoneFairy, [] { return logic->CallGossipFairy(); }), + EventAccess(&logic->ButterflyFairy, [] { return logic->ButterflyFairy || (logic->CanUse(RG_STICKS)); }), + EventAccess(&logic->BugShrub, [] { return logic->CanCutShrubs(); }), + EventAccess(&logic->LoneFish, [] { return true; }), }; - //Clear the array from any previous playthrough attempts. This is important so that - //locations which appear in both MQ and Vanilla dungeons don't get set in both areas. + // Clear the array from any previous playthrough attempts. This is important so that + // locations which appear in both MQ and Vanilla dungeons don't get set in both areas. areaTable.fill(Region("Invalid Region", "Invalid Region", {}, NO_DAY_NIGHT_CYCLE, {}, {}, {})); + // clang-format off areaTable[RR_ROOT] = Region("Root", "", {RA_LINKS_POCKET}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->KakarikoVillageGateOpen, []{return ctx->GetOption(RSK_KAK_GATE).Is(RO_KAK_GATE_OPEN);}), + //The big poes bottle softlock safety check does not account for the guard house lock if the guard house is not shuffled, so the key is needed before we can safely allow bottle use in logic + //RANDOTODO a setting that lets you drink/dump big poes so we don't need this logic + EventAccess(&logic->CouldEmptyBigPoes, []{return ctx->GetOption(RSK_SHUFFLE_INTERIOR_ENTRANCES).Is(RO_INTERIOR_ENTRANCE_SHUFFLE_ALL) || logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}), }, { //Locations LOCATION(RC_LINKS_POCKET, true), @@ -326,6 +389,8 @@ void RegionTable_Init() { Entrance(RR_TEMPLE_OF_TIME, []{return true;}), }); + // clang-format on + // Overworld RegionTable_Init_KokiriForest(); RegionTable_Init_LostWoods(); @@ -362,7 +427,7 @@ void RegionTable_Init() { RegionTable_Init_GerudoTrainingGround(); RegionTable_Init_GanonsCastle(); - //Set parent regions + // Set parent regions for (uint32_t i = RR_ROOT; i <= RR_GANONS_CASTLE; i++) { for (LocationAccess& locPair : areaTable[i].locations) { RandomizerCheck location = locPair.GetLocation(); @@ -415,130 +480,131 @@ std::string CleanCheckConditionString(std::string condition) { } namespace Regions { - const auto GetAllRegions() { - static const size_t regionCount = RR_MAX - (RR_NONE + 1); +const auto GetAllRegions() { + static const size_t regionCount = RR_MAX - (RR_NONE + 1); - static std::array allRegions = {}; + static std::array allRegions = {}; - static bool intialized = false; - if (!intialized) { - for (size_t i = 0; i < regionCount; i++) { - allRegions[i] = (RandomizerRegion)((RR_NONE + 1) + i); - } - intialized = true; + static bool intialized = false; + if (!intialized) { + for (size_t i = 0; i < regionCount; i++) { + allRegions[i] = (RandomizerRegion)((RR_NONE + 1) + i); } - - return allRegions; + intialized = true; } - void AccessReset() { - auto ctx = Rando::Context::GetInstance(); - for (const RandomizerRegion region : GetAllRegions()) { - RegionTable(region)->ResetVariables(); - } + return allRegions; +} - if (/*Settings::HasNightStart TODO:: Randomize Starting Time*/ false) { - if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { - RegionTable(RR_ROOT)->childNight = true; - } else { - RegionTable(RR_ROOT)->adultNight = true; - } +void AccessReset() { + auto ctx = Rando::Context::GetInstance(); + for (const RandomizerRegion region : GetAllRegions()) { + RegionTable(region)->ResetVariables(); + } + + if (/*Settings::HasNightStart TODO:: Randomize Starting Time*/ false) { + if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { + RegionTable(RR_ROOT)->childNight = true; } else { - if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { - RegionTable(RR_ROOT)->childDay = true; - } else { - RegionTable(RR_ROOT)->adultDay = true; - } + RegionTable(RR_ROOT)->adultNight = true; } - } - - //Reset exits and clear items from locations - void ResetAllLocations() { - auto ctx = Rando::Context::GetInstance(); - for (const RandomizerRegion region : GetAllRegions()) { - RegionTable(region)->ResetVariables(); - //Erase item from every location in this exit - for (LocationAccess& locPair : RegionTable(region)->locations) { - RandomizerCheck location = locPair.GetLocation(); - Rando::Context::GetInstance()->GetItemLocation(location)->ResetVariables(); - } - } - - if (/*Settings::HasNightStart TODO:: Randomize Starting Time*/ false) { - if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { - RegionTable(RR_ROOT)->childNight = true; - } else { - RegionTable(RR_ROOT)->adultNight = true; - } + } else { + if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { + RegionTable(RR_ROOT)->childDay = true; } else { - if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { - RegionTable(RR_ROOT)->childDay = true; - } else { - RegionTable(RR_ROOT)->adultDay = true; - } + RegionTable(RR_ROOT)->adultDay = true; + } + } +} + +// Reset exits and clear items from locations +void ResetAllLocations() { + auto ctx = Rando::Context::GetInstance(); + for (const RandomizerRegion region : GetAllRegions()) { + RegionTable(region)->ResetVariables(); + // Erase item from every location in this exit + for (LocationAccess& locPair : RegionTable(region)->locations) { + RandomizerCheck location = locPair.GetLocation(); + Rando::Context::GetInstance()->GetItemLocation(location)->ResetVariables(); } } - bool HasTimePassAccess(uint8_t age) { - for (const RandomizerRegion regionKey : GetAllRegions()) { - auto region = RegionTable(regionKey); - if (region->timePass && ((age == RO_AGE_CHILD && region->Child()) || (age == RO_AGE_ADULT && region->Adult()))) { - return true; - } + if (/*Settings::HasNightStart TODO:: Randomize Starting Time*/ false) { + if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { + RegionTable(RR_ROOT)->childNight = true; + } else { + RegionTable(RR_ROOT)->adultNight = true; + } + } else { + if (ctx->GetOption(RSK_SELECTED_STARTING_AGE).Is(RO_AGE_CHILD)) { + RegionTable(RR_ROOT)->childDay = true; + } else { + RegionTable(RR_ROOT)->adultDay = true; } - return false; } +} - // Will dump a file which can be turned into a visual graph using graphviz - // https://graphviz.org/download/ - // Use command: dot -Tsvg -o world.svg - // Then open in a browser and CTRL + F to find the area of interest - void DumpWorldGraph(std::string str) { - std::ofstream worldGraph; - worldGraph.open (str + ".dot"); - worldGraph << "digraph {\n\tcenter=true;\n"; +bool HasTimePassAccess(uint8_t age) { + for (const RandomizerRegion regionKey : GetAllRegions()) { + auto region = RegionTable(regionKey); + if (region->timePass && + ((age == RO_AGE_CHILD && region->Child()) || (age == RO_AGE_ADULT && region->Adult()))) { + return true; + } + } + return false; +} - for (const RandomizerRegion regionKey : GetAllRegions()) { - auto region = RegionTable(regionKey); - for (auto exit : region->exits) { - if (exit.GetConnectedRegion()->regionName != "Invalid Region") { - std::string parent = exit.GetParentRegion()->regionName; - if (region->childDay) { - parent += " CD"; - } - if (region->childNight) { - parent += " CN"; - } - if (region->adultDay) { - parent += " AD"; - } - if (region->adultNight) { - parent += " AN"; - } - Region* connected = exit.GetConnectedRegion(); - auto connectedStr = connected->regionName; - if (connected->childDay) { - connectedStr += " CD"; - } - if (connected->childNight) { - connectedStr += " CN"; - } - if (connected->adultDay) { - connectedStr += " AD"; - } - if (connected->adultNight) { - connectedStr += " AN"; - } - worldGraph << "\t\"" + parent + "\"[shape=\"plain\"];\n"; - worldGraph << "\t\"" + connectedStr + "\"[shape=\"plain\"];\n"; - worldGraph << "\t\"" + parent + "\" -> \"" + connectedStr + "\"\n"; +// Will dump a file which can be turned into a visual graph using graphviz +// https://graphviz.org/download/ +// Use command: dot -Tsvg -o world.svg +// Then open in a browser and CTRL + F to find the area of interest +void DumpWorldGraph(std::string str) { + std::ofstream worldGraph; + worldGraph.open(str + ".dot"); + worldGraph << "digraph {\n\tcenter=true;\n"; + + for (const RandomizerRegion regionKey : GetAllRegions()) { + auto region = RegionTable(regionKey); + for (auto exit : region->exits) { + if (exit.GetConnectedRegion()->regionName != "Invalid Region") { + std::string parent = exit.GetParentRegion()->regionName; + if (region->childDay) { + parent += " CD"; } + if (region->childNight) { + parent += " CN"; + } + if (region->adultDay) { + parent += " AD"; + } + if (region->adultNight) { + parent += " AN"; + } + Region* connected = exit.GetConnectedRegion(); + auto connectedStr = connected->regionName; + if (connected->childDay) { + connectedStr += " CD"; + } + if (connected->childNight) { + connectedStr += " CN"; + } + if (connected->adultDay) { + connectedStr += " AD"; + } + if (connected->adultNight) { + connectedStr += " AN"; + } + worldGraph << "\t\"" + parent + "\"[shape=\"plain\"];\n"; + worldGraph << "\t\"" + connectedStr + "\"[shape=\"plain\"];\n"; + worldGraph << "\t\"" + parent + "\" -> \"" + connectedStr + "\"\n"; } } - worldGraph << "}"; - worldGraph.close(); } -} //namespace Regions + worldGraph << "}"; + worldGraph.close(); +} +} // namespace Regions Region* RegionTable(const RandomizerRegion regionKey) { if (regionKey > RR_MAX) { @@ -547,12 +613,13 @@ Region* RegionTable(const RandomizerRegion regionKey) { return &(areaTable[regionKey]); } -//Retrieve all the shuffable entrances of a specific type +// Retrieve all the shuffable entrances of a specific type std::vector GetShuffleableEntrances(Rando::EntranceType type, bool onlyPrimary /*= true*/) { std::vector entrancesToShuffle = {}; for (RandomizerRegion region : Regions::GetAllRegions()) { for (auto& exit : RegionTable(region)->exits) { - if ((exit.GetType() == type || type == Rando::EntranceType::All) && (exit.IsPrimary() || !onlyPrimary) && exit.GetType() != Rando::EntranceType::None) { + if ((exit.GetType() == type || type == Rando::EntranceType::All) && (exit.IsPrimary() || !onlyPrimary) && + exit.GetType() != Rando::EntranceType::None) { entrancesToShuffle.push_back(&exit); } } @@ -571,4 +638,4 @@ Rando::Entrance* GetEntrance(const std::string name) { } return nullptr; -} \ No newline at end of file +} diff --git a/soh/soh/Enhancements/randomizer/location_access.h b/soh/soh/Enhancements/randomizer/location_access.h index 986d08d6a..828c31a08 100644 --- a/soh/soh/Enhancements/randomizer/location_access.h +++ b/soh/soh/Enhancements/randomizer/location_access.h @@ -18,287 +18,317 @@ extern std::shared_ptr logic; class Region; class EventAccess { - public: - explicit EventAccess(bool* event_, ConditionFn condition_function_) : event(event_), condition_function(condition_function_) {} + public: + explicit EventAccess(bool* event_, ConditionFn condition_function_) + : event(event_), condition_function(condition_function_) { + } - bool ConditionsMet() const { - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_GLITCHLESS)) { - return condition_function(); - } - return true; + bool ConditionsMet() const { + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_GLITCHLESS)) { + return condition_function(); } + return true; + } - bool CheckConditionAtAgeTime(bool& age, bool& time) { - logic->IsChild = false; - logic->IsAdult = false; - logic->AtDay = false; - logic->AtNight = false; + bool CheckConditionAtAgeTime(bool& age, bool& time) { + logic->IsChild = false; + logic->IsAdult = false; + logic->AtDay = false; + logic->AtNight = false; - time = true; - age = true; + time = true; + age = true; - return ConditionsMet(); - } + return ConditionsMet(); + } - void EventOccurred() { - *event = true; - } + void EventOccurred() { + *event = true; + } - bool GetEvent() const { - return *event; - } + bool GetEvent() const { + return *event; + } - private: - bool* event; - ConditionFn condition_function; + private: + bool* event; + ConditionFn condition_function; }; std::string CleanCheckConditionString(std::string condition); -#define LOCATION(check, condition) LocationAccess(check, []{return condition;}, CleanCheckConditionString(#condition)) +#define LOCATION(check, condition) \ + LocationAccess( \ + check, [] { return condition; }, CleanCheckConditionString(#condition)) -//this class is meant to hold an item location with a boolean function to determine its accessibility from a specific area +// this class is meant to hold an item location with a boolean function to determine its accessibility from a specific +// area class LocationAccess { - public: - explicit LocationAccess(RandomizerCheck location_, ConditionFn condition_function_) : location(location_), condition_function(condition_function_), condition_str("") {} + public: + explicit LocationAccess(RandomizerCheck location_, ConditionFn condition_function_) + : location(location_), condition_function(condition_function_), condition_str("") { + } - explicit LocationAccess(RandomizerCheck location_, ConditionFn condition_function_, std::string condition_str_) : location(location_), condition_function(condition_function_), condition_str(condition_str_) {} + explicit LocationAccess(RandomizerCheck location_, ConditionFn condition_function_, std::string condition_str_) + : location(location_), condition_function(condition_function_), condition_str(condition_str_) { + } - bool GetConditionsMet() const { - auto ctx = Rando::Context::GetInstance(); - if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_GLITCHLESS)) { - return condition_function(); - } - return true; + bool GetConditionsMet() const { + auto ctx = Rando::Context::GetInstance(); + if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_GLITCHLESS)) { + return condition_function(); } + return true; + } - bool CheckConditionAtAgeTime(bool& age, bool& time) const; + bool CheckConditionAtAgeTime(bool& age, bool& time) const; - bool ConditionsMet(Region* parentRegion) const; + bool ConditionsMet(Region* parentRegion, bool calculatingAvailableChecks) const; - RandomizerCheck GetLocation() const { - return location; - } + RandomizerCheck GetLocation() const { + return location; + } - std::string GetConditionStr() const { - return condition_str; - } + std::string GetConditionStr() const { + return condition_str; + } - protected: - RandomizerCheck location; - ConditionFn condition_function; - std::string condition_str; + protected: + RandomizerCheck location; + ConditionFn condition_function; + std::string condition_str; - //Makes sure shop locations are buyable - bool CanBuy() const; + // Makes sure shop locations are buyable + bool CanBuy() const; }; bool CanBuyAnother(RandomizerCheck rc); namespace Rando { - class Entrance; - enum class EntranceType; -} +class Entrance; +enum class EntranceType; +} // namespace Rando class Region { - public: - Region(); - Region( - std::string regionName_, - std::string scene_, - std::set areas, - bool timePass_, - std::vector events_, - std::vector locations_, - std::list exits_ - ); - ~Region(); + public: + Region(); + Region(std::string regionName_, std::string scene_, std::set areas, bool timePass_, + std::vector events_, std::vector locations_, std::list exits_); + ~Region(); - std::string regionName; - std::string scene; - std::set areas; - bool timePass; - std::vector events; - std::vector locations; - std::list exits; - std::list entrances; - //^ The above exits are now stored in a list instead of a vector because - //the entrance randomization algorithm plays around with pointers to these - //entrances a lot. By putting the entrances in a list, we don't have to - //worry about a vector potentially reallocating itself and invalidating all our - //entrance pointers. + std::string regionName; + std::string scene; + std::set areas; + bool timePass; + std::vector events; + std::vector locations; + std::list exits; + std::list entrances; + //^ The above exits are now stored in a list instead of a vector because + // the entrance randomization algorithm plays around with pointers to these + // entrances a lot. By putting the entrances in a list, we don't have to + // worry about a vector potentially reallocating itself and invalidating all our + // entrance pointers. - bool childDay = false; - bool childNight = false; - bool adultDay = false; - bool adultNight = false; - bool addedToPool = false;; + bool childDay = false; + bool childNight = false; + bool adultDay = false; + bool adultNight = false; + bool addedToPool = false; + ; - void ApplyTimePass(); + void ApplyTimePass(); - bool UpdateEvents(); + bool UpdateEvents(); - void AddExit(RandomizerRegion parentKey, RandomizerRegion newExitKey, ConditionFn condition); + void AddExit(RandomizerRegion parentKey, RandomizerRegion newExitKey, ConditionFn condition); - void RemoveExit(Rando::Entrance* exitToRemove); + void RemoveExit(Rando::Entrance* exitToRemove); - void SetAsPrimary(RandomizerRegion exitToBePrimary); + void SetAsPrimary(RandomizerRegion exitToBePrimary); - Rando::Entrance* GetExit(RandomizerRegion exit); + Rando::Entrance* GetExit(RandomizerRegion exit); - bool Child() const { - return childDay || childNight; + bool Child() const { + return childDay || childNight; + } + + bool Adult() const { + return adultDay || adultNight; + } + + bool BothAgesCheck() const { + return Child() && Adult(); + } + + bool HasAccess() const { + return Child() || Adult(); + } + + bool AllAccess() const { + return childDay && childNight && adultDay && adultNight; + } + + // Check to see if an exit can be access as both ages at both times of day + bool CheckAllAccess(RandomizerRegion exitKey); + + std::set GetAllAreas() const { + return areas; + } + + RandomizerArea GetFirstArea() const { + if (areas.empty()) { + assert(false); + return RA_NONE; + } else { + return *areas.begin(); } + } - bool Adult() const { - return adultDay || adultNight; - } + void ReplaceAreas(std::set newAreas) { + areas = newAreas; + } - bool BothAgesCheck() const { - return Child() && Adult(); - } + // Here checks conditional access based on whether or not both ages have + // access to this area. For example: if there are rocks that block a path + // which both child and adult can access, adult having hammer can give + // both child and adult access to the path. + bool Here(ConditionFn condition) { + // store current age variables + bool pastAdult = logic->IsAdult; + bool pastChild = logic->IsChild; - bool HasAccess() const { - return Child() || Adult(); - } + // set age access as this areas ages + logic->IsChild = Child(); + logic->IsAdult = Adult(); - bool AllAccess() const { - return childDay && childNight && adultDay && adultNight; - } + // heck condition as well as having at least child or adult access + bool hereVal = condition() && (logic->IsAdult || logic->IsChild); - //Check to see if an exit can be access as both ages at both times of day - bool CheckAllAccess(RandomizerRegion exitKey); + // set back age variables + logic->IsChild = pastChild; + logic->IsAdult = pastAdult; - std::set GetAllAreas() const{ - return areas; - } + return hereVal; + } - RandomizerArea GetFirstArea() const{ - if (areas.empty()){ - assert(false); - return RA_NONE; - } else { - return *areas.begin(); + bool CanPlantBeanCheck() const; + bool AllAccountedFor() const; + + void ResetVariables(); + + void printAgeTimeAccess() const { + auto message = "Child Day: " + std::to_string(childDay) + + "\t" + "Child Night: " + + std::to_string(childNight) + + "\t" + "Adult Day: " + + std::to_string(adultDay) + + "\t" + "Adult Night: " + + std::to_string(adultNight); + } + + /* + * This logic covers checks that exist in the shared areas of MQ spirit from a glitchless standpoint. + * This room has Quantum logic that I am currently handling with this function, however this is NOT suitable for + glitch logic as it relies on specific ages + * In this chunk there are 3 possibilities for passing a check, but first I have to talk about parallel universes. + + * In MQ Spirit key logic, we mostly care about 2 possibilities for how the player can spend keys, creating 2 + Parralel universes + * In the first universe, the player did not enter spirit as adult until after climbing as child, thus child spends + keys linearly, only needing 2 to reach statue room. + * In the second universe, the player went in as adult, possibly out of logic, and started wasting the keys to lock + child out. + * These Universes converge when the player has 7 keys (meaning adult can no longer lock child out) and adult is + known to be able to reach Statue room. This creates "Certain Access", which is tracked seperatly for each age. + * Child Certain Access is simple, if we have 7 keys and child access, it's Certain Access. + * Adult Certain Access is also simple, adult is not key locked, so if they make it to a location, it's Certain + Access. + * Things get complicated when we handle the overlap of the 2 universes, + * though an important detail is that if we have Certain Access as either age, we don't need to checked the overlap + because overlap logic is strictly stricter than either Certain Access. + + * In order to track the first universe, the logic allows technical child access with the minimum number of keys, + and then checks in this function for if we have 7 keys to determine if that is Certain or not. + * This is for technical reasons, as areas with no access at all will simply not be checked. + * Normally we would need to do similar shenanigans to track the second universe, however adult must have go through + statue room to waste keys, + * so can go back there and get new keys for Child to use if they do, and the navigation logic for shared MQ spirit + from Statue Room is very simple for Adult. + * Additionally, we don't need to know if adult can actually reach spirit temple or climb to statue room, because if + the player can't do that, then universe 2 can't happen anyway, + * and if the player does so out of logic, they can do it again, as the only consumable used sets a permanent flag. + + * The Adult Navigation logic is as such: + * - Broken Wall room is 6 key locked, because if the player tries to spend 6 keys in a way that would block adults + access, they would have to give child access instead. + * - The child side hammer switch for the time travelling chest is 7 key locked for adult + * - Reaching gauntlets hand is 7 key locked + * - Going back into big block room is complex, but the only check there is child only so not a concern + * - Everything else is possible with basic adult movement, or is impossible for child to reach glitchlessly + * Anything 7 key locked does not need to be checked as shared, as all child access is Certain and because of this + workaround we don't need to fake Adult access, meaning that is also Certain. + * All of this combined means that when checking if adult can reach a location in universe 2, we only have to ask if + it is a 6 key locked location or not. + + * Knowing all of this this, we can confirm things are logical in 3 different ways: + * - If we have Adult Access, we know it is Certain Access, so they can get checks alone. + * - If we have 7 keys, child has Certain Access as we know they cannot be locked out, so can get checks alone, + otherwise we check the logical overlap + * - If Child and Adult can get the check (ignoring actual adult access to the location), and the location is either + not 6 key locked or we have 6 keys, we can get the check with the overlap + */ + bool MQSpiritShared(ConditionFn condition, bool IsBrokenWall, bool anyAge = false) { + // if we have Certain Access as child, we can check anyAge and if true, resolve a condition with Here as if + // adult is here it's also Certain Access + if (logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)) { + if (anyAge) { + return Here(condition); } - } - - void ReplaceAreas(std::set newAreas) { - areas = newAreas; - } - - //Here checks conditional access based on whether or not both ages have - //access to this area. For example: if there are rocks that block a path - //which both child and adult can access, adult having hammer can give - //both child and adult access to the path. - bool Here(ConditionFn condition) { - //store current age variables + return condition(); + // else, if we are here as adult, we have Certain Access from that and don't need special handling for + // checking adult + } else if (Adult() && logic->IsAdult) { + return condition(); + // if we do not have Certain Access, we need to check the overlap by seeing if we are both here as child and + // meet the adult universe's access condition We only need to do it as child, as only child access matters + // for this check, as adult access is assumed based on keys + } else if (Child() && logic->IsChild && (!IsBrokenWall || logic->SmallKeys(RR_SPIRIT_TEMPLE, 6))) { + bool result = false; + // store current age variables bool pastAdult = logic->IsAdult; bool pastChild = logic->IsChild; - //set age access as this areas ages - logic->IsChild = Child(); - logic->IsAdult = Adult(); + // First check if the check is possible as child + logic->IsChild = true; + logic->IsAdult = false; + result = condition(); + // If so, check again as adult. both have to be true for result to be true + if (result) { + logic->IsChild = false; + logic->IsAdult = true; + result = condition(); + } - //heck condition as well as having at least child or adult access - bool hereVal = condition() && (logic->IsAdult || logic->IsChild); - - //set back age variables + // set back age variables logic->IsChild = pastChild; logic->IsAdult = pastAdult; - - return hereVal; - } - - bool CanPlantBeanCheck() const; - bool AllAccountedFor() const; - - void ResetVariables(); - - void printAgeTimeAccess() const { - auto message = "Child Day: " + std::to_string(childDay) + "\t" - "Child Night: " + std::to_string(childNight) + "\t" - "Adult Day: " + std::to_string(adultDay) + "\t" - "Adult Night: " + std::to_string(adultNight); - } - - /* - * This logic covers checks that exist in the shared areas of MQ spirit from a glitchless standpoint. - * This room has Quantum logic that I am currently handling with this function, however this is NOT suitable for glitch logic as it relies on specific ages - * In this chunk there are 3 possibilities for passing a check, but first I have to talk about parallel universes. - - * In MQ Spirit key logic, we mostly care about 2 possibilities for how the player can spend keys, creating 2 Parralel universes - * In the first universe, the player did not enter spirit as adult until after climbing as child, thus child spends keys linearly, only needing 2 to reach statue room. - * In the second universe, the player went in as adult, possibly out of logic, and started wasting the keys to lock child out. - * These Universes converge when the player has 7 keys (meaning adult can no longer lock child out) and adult is known to be able to reach Statue room. This creates "Certain Access", which is tracked seperatly for each age. - * Child Certain Access is simple, if we have 7 keys and child access, it's Certain Access. - * Adult Certain Access is also simple, adult is not key locked, so if they make it to a location, it's Certain Access. - * Things get complicated when we handle the overlap of the 2 universes, - * though an important detail is that if we have Certain Access as either age, we don't need to checked the overlap because overlap logic is strictly stricter than either Certain Access. - - * In order to track the first universe, the logic allows technical child access with the minimum number of keys, and then checks in this function for if we have 7 keys to determine if that is Certain or not. - * This is for technical reasons, as areas with no access at all will simply not be checked. - * Normally we would need to do similar shenanigans to track the second universe, however adult must have go through statue room to waste keys, - * so can go back there and get new keys for Child to use if they do, and the navigation logic for shared MQ spirit from Statue Room is very simple for Adult. - * Additionally, we don't need to know if adult can actually reach spirit temple or climb to statue room, because if the player can't do that, then universe 2 can't happen anyway, - * and if the player does so out of logic, they can do it again, as the only consumable used sets a permanent flag. - - * The Adult Navigation logic is as such: - * - Broken Wall room is 6 key locked, because if the player tries to spend 6 keys in a way that would block adults access, they would have to give child access instead. - * - The child side hammer switch for the time travelling chest is 7 key locked for adult - * - Reaching gauntlets hand is 7 key locked - * - Going back into big block room is complex, but the only check there is child only so not a concern - * - Everything else is possible with basic adult movement, or is impossible for child to reach glitchlessly - * Anything 7 key locked does not need to be checked as shared, as all child access is Certain and because of this workaround we don't need to fake Adult access, meaning that is also Certain. - * All of this combined means that when checking if adult can reach a location in universe 2, we only have to ask if it is a 6 key locked location or not. - - * Knowing all of this this, we can confirm things are logical in 3 different ways: - * - If we have Adult Access, we know it is Certain Access, so they can get checks alone. - * - If we have 7 keys, child has Certain Access as we know they cannot be locked out, so can get checks alone, otherwise we check the logical overlap - * - If Child and Adult can get the check (ignoring actual adult access to the location), and the location is either not 6 key locked or we have 6 keys, we can get the check with the overlap - */ - bool MQSpiritShared(ConditionFn condition, bool IsBrokenWall, bool anyAge = false) { - //if we have Certain Access as child, we can check anyAge and if true, resolve a condition with Here as if adult is here it's also Certain Access - if (logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)){ - if (anyAge){ - return Here(condition); - } - return condition(); - //else, if we are here as adult, we have Certain Access from that and don't need special handling for checking adult - } else if (Adult() && logic->IsAdult){ - return condition(); - //if we do not have Certain Access, we need to check the overlap by seeing if we are both here as child and meet the adult universe's access condition - //We only need to do it as child, as only child access matters for this check, as adult access is assumed based on keys - } else if (Child() && logic->IsChild && (!IsBrokenWall || logic->SmallKeys(RR_SPIRIT_TEMPLE, 6))) { - bool result = false; - //store current age variables - bool pastAdult = logic->IsAdult; - bool pastChild = logic->IsChild; - - //First check if the check is possible as child - logic->IsChild = true; - logic->IsAdult = false; - result = condition(); - //If so, check again as adult. both have to be true for result to be true - if (result) { - logic->IsChild = false; - logic->IsAdult = true; - result = condition(); - } - - //set back age variables - logic->IsChild = pastChild; - logic->IsAdult = pastAdult; - return result; - } - return false; + return result; } + return false; + } }; extern std::array areaTable; extern std::vector grottoEvents; -bool Here(const RandomizerRegion region, ConditionFn condition); //RANDOTODO make a less stupid way to check own at either age than self referencing with this +bool Here(const RandomizerRegion region, + ConditionFn + condition); // RANDOTODO make a less stupid way to check own at either age than self referencing with this bool MQSpiritSharedStatueRoom(const RandomizerRegion region, ConditionFn condition, bool anyAge = false); bool MQSpiritSharedBrokenWallRoom(const RandomizerRegion region, ConditionFn condition, bool anyAge = false); bool CanPlantBean(const RandomizerRegion region); @@ -311,13 +341,13 @@ bool HasAccessTo(const RandomizerRegion region); #define NO_DAY_NIGHT_CYCLE false namespace Regions { - extern void AccessReset(); - extern void ResetAllLocations(); - extern bool HasTimePassAccess(uint8_t age); - extern void DumpWorldGraph(std::string str); -} //namespace Exits +extern void AccessReset(); +extern void ResetAllLocations(); +extern bool HasTimePassAccess(uint8_t age); +extern void DumpWorldGraph(std::string str); +} // namespace Regions -void RegionTable_Init(); +void RegionTable_Init(); Region* RegionTable(const RandomizerRegion regionKey); std::vector GetShuffleableEntrances(Rando::EntranceType type, bool onlyPrimary = true); Rando::Entrance* GetEntrance(const std::string name); diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp index 171542ea3..4ec6b6773 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_BottomOfTheWell() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_BOTTOM_OF_THE_WELL_ENTRYWAY] = Region("Bottom of the Well Entryway", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -130,20 +131,32 @@ void RegionTable_Init_BottomOfTheWell() { areaTable[RR_BOTTOM_OF_THE_WELL_BASEMENT] = Region("Bottom of the Well Basement", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, logic->BlastOrSmash()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), + LOCATION(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, logic->CanCutShrubs() && logic->BlastOrSmash()), }, { //Exits Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}), @@ -234,6 +247,10 @@ void RegionTable_Init_BottomOfTheWell() { //Locations LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_DEAD_HAND)), LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, logic->HasExplosives() || (ctx->GetTrickOption(RT_BOTW_MQ_DEADHAND_KEY) && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, logic->CanCutShrubs()), }, { //Exits //This assumes we spawned in dead hand's room, if whatever trick made this relevant instead puts us in the previous room, remove the kill Dead Hand check. @@ -293,4 +310,5 @@ void RegionTable_Init_BottomOfTheWell() { }); #pragma endregion -} \ No newline at end of file + // clang-format on +} 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 4740a7541..f327c9992 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_DekuTree() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_DEKU_TREE_ENTRYWAY] = Region("Deku Tree Entryway", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -24,6 +25,11 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MAP_CHEST, true), LOCATION(RC_DEKU_TREE_LOBBY_LOWER_HEART, true), LOCATION(RC_DEKU_TREE_LOBBY_UPPER_HEART, logic->CanPassEnemy(RE_BIG_SKULLTULA)), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_5, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_ENTRYWAY, []{return true;}), @@ -44,6 +50,10 @@ void RegionTable_Init_DekuTree() { //Locations LOCATION(RC_DEKU_TREE_SLINGSHOT_CHEST, true), LOCATION(RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, true), + LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_1, logic->CanCutShrubs() && logic->CanReflectNuts()), + LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_2, logic->CanCutShrubs() && logic->CanReflectNuts()), + LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_3, logic->CanCutShrubs() && logic->CanReflectNuts()), + LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_4, logic->CanCutShrubs() && logic->CanReflectNuts()), }, { //Exits Entrance(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS);}), @@ -58,6 +68,8 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_COMPASS_CHEST, true), LOCATION(RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, true), LOCATION(RC_DEKU_TREE_GS_COMPASS_ROOM, logic->CanAttack()), + LOCATION(RC_DEKU_TREE_COMPASS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_COMPASS_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_LOBBY, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);}), @@ -73,6 +85,8 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_BASEMENT_CHEST, true), LOCATION(RC_DEKU_TREE_GS_BASEMENT_GATE, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH)), LOCATION(RC_DEKU_TREE_GS_BASEMENT_VINES, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ctx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS) ? ED_SHORT_JUMPSLASH : ED_BOMB_THROW)), + LOCATION(RC_DEKU_TREE_BASEMENT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_LOBBY, []{return true;}), @@ -81,7 +95,13 @@ void RegionTable_Init_DekuTree() { Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return false;}), }); - areaTable[RR_DEKU_TREE_BASEMENT_SCRUB_ROOM] = Region("Deku Tree Basement Scrub Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_DEKU_TREE_BASEMENT_SCRUB_ROOM] = Region("Deku Tree Basement Scrub Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { + //Location + LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_LOWER, []{return true;}), Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, []{return Here(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return logic->CanHitEyeTargets();});}), @@ -93,7 +113,11 @@ void RegionTable_Init_DekuTree() { Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, []{return logic->HasItem(RG_BRONZE_SCALE) || ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG);}), }); - areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK] = Region("Deku Tree Basement Water Room Back", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK] = Region("Deku Tree Basement Water Room Back", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, []{return logic->HasItem(RG_BRONZE_SCALE) || ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG);}), Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return true;}), @@ -103,7 +127,11 @@ void RegionTable_Init_DekuTree() { //Events EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), - }, {}, { + }, { + //Locations + LOCATION(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, []{return true;}), Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return Here(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);});}), @@ -113,7 +141,11 @@ void RegionTable_Init_DekuTree() { //Events EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), - }, {}, { + }, { + //Location + LOCATION(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return true;}), Entrance(RR_DEKU_TREE_BASEMENT_BACK_ROOM, []{return Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);}) && Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->BlastOrSmash();});}), @@ -141,9 +173,12 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_OUTSIDE_BOSS_ROOM] = Region("Deku Tree Outside Boss Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()), }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return true;}), @@ -158,7 +193,14 @@ void RegionTable_Init_DekuTree() { //Events EventAccess(&logic->DekuBabaSticks, []{return logic->CanKillEnemy(RE_WITHERED_DEKU_BABA);}), EventAccess(&logic->BrokeDeku1FWeb, []{return logic->HasFireSource();}), - }, {}, { + }, { + //Locations + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_5, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_ENTRYWAY, []{return true;}), //may need canAvoid logic with enemy shuffle @@ -172,9 +214,12 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_MQ_2F] = Region("Deku Tree MQ 2F", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DEKU_TREE_MQ_MAP_CHEST, true), - LOCATION(RC_DEKU_TREE_MQ_GS_LOBBY, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_MAP_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_GS_LOBBY, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_CRATE, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}), @@ -194,6 +239,12 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, logic->CanKillEnemy(RE_DEKU_BABA)), LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, logic->HasFireSourceWithTorch() || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW))), LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}), @@ -204,7 +255,14 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_MQ_EYE_TARGET_ROOM] = Region("Deku Tree MQ Eye Target Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DEKU_TREE_MQ_DEKU_BABA_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_DEKU_BABA_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return Here(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return logic->CanHitEyeTargets();});}), @@ -213,10 +271,14 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_MQ_COMPASS_ROOM] = Region("Deku Tree MQ Compass Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DEKU_TREE_MQ_COMPASS_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_4, logic->CanCutShrubs()), }, { //Exits - Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return true;}), + Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS);}), Entrance(RR_DEKU_TREE_MQ_PAST_BOULDER_VINES, []{return Here(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS))) || (logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_SONG_OF_TIME) || ctx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS)));});}), }); @@ -235,7 +297,11 @@ void RegionTable_Init_DekuTree() { EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), }, { //Locations - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_CHEST, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_CHEST, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}), @@ -249,7 +315,13 @@ void RegionTable_Init_DekuTree() { //Events //Implies CanKillEnemy(RE_GOHMA_LARVA) EventAccess(&logic->ClearedMQDekuSERoom, []{return logic->CanKillEnemy(RE_MAD_SCRUB);}), - }, {}, { + }, { + //Locations + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return logic->HasFireSource();}), Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->ClearedMQDekuSERoom;}), @@ -261,7 +333,10 @@ void RegionTable_Init_DekuTree() { EventAccess(&logic->MQDekuWaterRoomTorches, []{return logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_STICKS) && (ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield())));}), }, { //Locations - LOCATION(RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, []{return ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield()) || logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS));}), @@ -275,14 +350,20 @@ void RegionTable_Init_DekuTree() { }, { //Locations //it blocks the chest while stunned unless you stun it from afar while it's slightly off the ground - LOCATION(RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, logic->CanUse(RG_SONG_OF_TIME) && logic->CanPassEnemy(RE_BIG_SKULLTULA)), + LOCATION(RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, logic->CanUse(RG_SONG_OF_TIME) && logic->CanPassEnemy(RE_BIG_SKULLTULA)), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return logic->MQDekuWaterRoomTorches && logic->CanPassEnemy(RE_BIG_SKULLTULA, logic->CanUse(RG_SONG_OF_TIME) ? ED_CLOSE : ED_SHORT_JUMPSLASH);}), Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield()) || logic->CanUse(RG_LONGSHOT) || logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)));}), }); - areaTable[RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM] = Region("Deku Tree MQ Basement Southwest Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM] = Region("Deku Tree MQ Basement Southwest Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, logic->CanCutShrubs()), + }, { //Exits //both imply CanKillEnemy(RE_GOHMA_LARVA) Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return logic->CanKillEnemy(RE_MAD_SCRUB) && logic->CanKillEnemy(RE_KEESE);});}), @@ -296,6 +377,11 @@ void RegionTable_Init_DekuTree() { }, { //Locations LOCATION(RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG))), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->IsChild && Here(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);});}), @@ -307,6 +393,9 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM] = Region("Deku Tree MQ Basement Back Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return true;}), @@ -317,7 +406,10 @@ void RegionTable_Init_DekuTree() { EventAccess(&logic->PushedDekuBasementBlock, []{return true;}), }, { //Locations - LOCATION(RC_DEKU_TREE_MQ_DEKU_SCRUB, logic->CanStunDeku()), + LOCATION(RC_DEKU_TREE_MQ_DEKU_SCRUB, logic->CanStunDeku()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->IsChild;}), @@ -332,6 +424,9 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT);}), @@ -353,11 +448,21 @@ void RegionTable_Init_DekuTree() { EventAccess(&logic->DekuTreeClear, []{return logic->DekuTreeClear || logic->CanKillEnemy(RE_GOHMA);}), }, { // Locations - LOCATION(RC_QUEEN_GOHMA, logic->DekuTreeClear), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_HEART, logic->DekuTreeClear), + LOCATION(RC_QUEEN_GOHMA, logic->DekuTreeClear), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_HEART, logic->DekuTreeClear), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, logic->CanCutShrubs()), }, { // Exits Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return true;}), Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return logic->DekuTreeClear;}, false), }); -} \ No newline at end of file + + // clang-format on +} 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 4ae2e1e70..8cd60f268 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_DodongosCavern() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_DODONGOS_CAVERN_ENTRYWAY] = Region("Dodongos Cavern Entryway", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -152,6 +153,8 @@ void RegionTable_Init_DodongosCavern() { //Locations LOCATION(RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, true), LOCATION(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, true), + LOCATION(RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_BLADE_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_ARMOS_ROOM, []{return true;}), @@ -173,6 +176,7 @@ void RegionTable_Init_DodongosCavern() { //Locations LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}), @@ -225,7 +229,10 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_BOSS_AREA] = Region("Dodongos Cavern Boss Region", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->FairyPot, []{return true;}), - }, {}, { + }, { + //Location + LOCATION(RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), Entrance(RR_DODONGOS_CAVERN_BACK_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOSS_AREA, []{return logic->CanBreakMudWalls();});}), @@ -299,10 +306,12 @@ void RegionTable_Init_DodongosCavern() { //EventAccess(&logic->CanClimbDCStairs, []{return logic->HasExplosives || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRCASE) && logic->CanUse(RG_FAIRY_BOW));}), }, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}), @@ -326,7 +335,11 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER] = Region("Dodongos Cavern MQ Stairs Upper", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, logic->CanStunDeku()), + LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, logic->CanStunDeku()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return true;}), @@ -345,7 +358,11 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM] = Region("Dodongos Cavern MQ Dodongo Room", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_DODONGO) || logic->HasItem(RG_GORONS_BRACELET)), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_DODONGO) || logic->HasItem(RG_GORONS_BRACELET)), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, []{return true;}), @@ -381,8 +398,14 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM] = Region("Dodongos Cavern MQ Larvae Room", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, true), //implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts - LOCATION(RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, true), //implied logic->CanKillEnemy(RE_GOLD_SKULTULLA) based on entry reqs. Add crate logic when BONKO is added + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, true), //implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts + LOCATION(RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, logic->CanBreakCrates()), //implied logic->CanKillEnemy(RE_GOLD_SKULTULLA) based on entry reqs. Add crate logic when BONKO is added + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return true;}), //implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts @@ -405,8 +428,10 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM] = Region("Dodongos Cavern MQ Before Upper Lizalfos", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return true;}), @@ -456,11 +481,19 @@ void RegionTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);}) && //could be a seperate room if it gets busy logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG, true))), //Implies you can avoid/kill the enemies with what you use on the skull, if this assumption is broken, add //&& (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);}) || (logic->CanAvoidEnemy(RE_FIRE_KEESE) && logic->CanAvoidEnemy(RE_MAD_SCRUB))) - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, logic->CanBreakPots()), - }, { + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, logic->CanBreakCrates()), + }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);});}), Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return true;}), @@ -471,6 +504,8 @@ void RegionTable_Init_DodongosCavern() { //Locations LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG, true))), //Implies you can avoid/kill the enemies with what you use on the skull, if this assumption is broken, add //&& (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);}) || (logic->CanAvoidEnemy(RE_FIRE_KEESE) && logic->CanAvoidEnemy(RE_MAD_SCRUB))) + LOCATION(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);});}), @@ -496,6 +531,7 @@ void RegionTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST, true), //pulling the grave isn't required, as you can open the chest through it LOCATION(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return logic->CanAttack();}), @@ -512,6 +548,7 @@ void RegionTable_Init_DodongosCavern() { Here(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) /* || bunny jumps*/);})), LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}), @@ -541,4 +578,6 @@ void RegionTable_Init_DodongosCavern() { Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}), Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->DodongosCavernClear;}, false), }); -} \ No newline at end of file + + // clang-format on +} 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 a17cfc598..8888cdac9 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_FireTemple() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_FIRE_TEMPLE_ENTRYWAY] = Region("Fire Temple Entryway", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -326,7 +327,13 @@ void RegionTable_Init_FireTemple() { Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, []{return logic->CanUse(RG_MEGATON_HAMMER);}), }); - areaTable[RR_FIRE_TEMPLE_HAMMER_RETURN_PATH] = Region("Fire Temple Hammer Return Path", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_FIRE_TEMPLE_HAMMER_RETURN_PATH] = Region("Fire Temple Hammer Return Path", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + // Locations + LOCATION(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + }, + { //Exits Entrance(RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, []{return logic->CanUse(RG_MEGATON_HAMMER);}), }); @@ -429,7 +436,10 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM] = Region("Fire Temple MQ Near Boss Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations //If we're using the south torch as the initial torch, or using FAs, we either have to cross to the north to remove the crate, or use a trick to ignore it - LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->FireTimer() > 25 && ctx->GetTrickOption(RT_FIRE_MQ_NEAR_BOSS) && (logic->CanUse(RG_FIRE_ARROWS) || (logic->IsAdult && logic->CanUse(RG_DINS_FIRE) && logic->CanUse(RG_FAIRY_BOW)))) + LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->FireTimer() > 25 && ctx->GetTrickOption(RT_FIRE_MQ_NEAR_BOSS) && (logic->CanUse(RG_FIRE_ARROWS) || (logic->IsAdult && logic->CanUse(RG_DINS_FIRE) && logic->CanUse(RG_FAIRY_BOW)))), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, logic->FireTimer() > 25 && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, logic->FireTimer() > 25 && logic->CanBreakCrates()), + }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return true;}), @@ -449,9 +459,15 @@ void RegionTable_Init_FireTemple() { //Fairies cannot be used for this as it is time sensetive, and NL is only useful with sticks as it disables other magic while in use, so it's tunic or raw damage taking ability. //testing tells me you take 3 ticks of lava damage, which is 12 internal damage or 3/4 of a heart at x1 damage multiplier, performing this run //logic->EffectiveHealth() works in half hearts for whatever reason, meaning this needs a deeper refactor to be perfect, but it should be good enough for now - LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_GORON_TUNIC) || logic->EffectiveHealth() >= 2 || (logic->CanUse(RG_NAYRUS_LOVE) && logic->CanUse(RG_STICKS))))))), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_GORON_TUNIC) || logic->EffectiveHealth() >= 2 || (logic->CanUse(RG_NAYRUS_LOVE) && logic->CanUse(RG_STICKS))))))), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, logic->FireTimer() > 25 && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, logic->FireTimer() > 25 && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, logic->CanBreakCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return true;}), @@ -521,7 +537,10 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE] = Region("Fire Temple MQ Lower Maze Crate Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, true), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, true), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, logic->CanBreakCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}), @@ -543,7 +562,12 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE] = Region("Fire Temple MQ Upper Maze Box Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, true), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, true), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), //Assumes maze access LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives()), }, { @@ -562,7 +586,13 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE] = Region("Fire Temple MQ Maze Shortcut Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FIRE_TEMPLE_MQ_COMPASS_CHEST, logic->OpenedUpperFireShortcut;), + LOCATION(RC_FIRE_TEMPLE_MQ_COMPASS_CHEST, logic->OpenedUpperFireShortcut;), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, []{return logic->OpenedUpperFireShortcut;}), @@ -599,8 +629,18 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM] = Region("Fire Temple MQ High Torch Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}), @@ -715,4 +755,6 @@ void RegionTable_Init_FireTemple() { Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}), Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, false), }); -} \ No newline at end of file + + // clang-format on +} 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 04efd4994..2f5ba96bf 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_ForestTemple() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_FOREST_TEMPLE_ENTRYWAY] = Region("Forest Temple Entryway", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -529,7 +530,14 @@ void RegionTable_Init_ForestTemple() { }); //This room exists to show the actual map layout, and for when the crates get added to logic - areaTable[RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM] = Region("Forest Temple MQ Torch Shot Room", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM] = Region("Forest Temple MQ Torch Shot Room", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + // Locations + LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + }, + { //Exits Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE);}), Entrance(RR_FOREST_TEMPLE_MQ_BETH_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 6);}), @@ -610,4 +618,6 @@ void RegionTable_Init_ForestTemple() { Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}), Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}, false), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp index c1a846564..ded6c8279 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp @@ -6,6 +6,7 @@ using namespace Rando; void RegionTable_Init_GanonsCastle() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_GANONS_CASTLE_ENTRYWAY] = Region("Ganon's Castle Entryway", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -511,4 +512,5 @@ void RegionTable_Init_GanonsCastle() { }, {}); #pragma endregion -} \ No newline at end of file + // clang-format on +} 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 0c45d755c..5466c598c 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 @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_GerudoTrainingGround() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_GERUDO_TRAINING_GROUND_ENTRYWAY] = Region("Gerudo Training Ground Entryway", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -151,7 +152,11 @@ void RegionTable_Init_GerudoTrainingGround() { areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER] = Region("Gerudo Training Ground MQ Center", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->MQGTGMazeSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}), - }, {}, { + }, + { //Locations + LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3);}), }); @@ -321,4 +326,5 @@ void RegionTable_Init_GerudoTrainingGround() { }); #pragma endregion -} \ No newline at end of file + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp index 879ac1dce..ff2bf9594 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_IceCavern() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_ICE_CAVERN_ENTRYWAY] = Region("Ice Cavern Entryway", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -144,4 +145,5 @@ void RegionTable_Init_IceCavern() { }, {}); #pragma endregion -} \ No newline at end of file + // clang-format on +} 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 7bfb98a87..3c45682ae 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_JabuJabusBelly() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_JABU_JABUS_BELLY_ENTRYWAY] = Region("Jabu Jabus Belly Entryway", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -27,10 +28,12 @@ void RegionTable_Init_JabuJabusBelly() { EventAccess(&logic->JabuWestTentacle, []{return logic->JabuRutoIn1F && logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}), }, { //Locations - LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku()), + LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku()), //We can kill the Stingers with ruto - LOCATION(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, logic->JabuRutoIn1F), - LOCATION(RC_JABU_JABUS_BELLY_MAP_CHEST, logic->JabuWestTentacle), + LOCATION(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, logic->JabuRutoIn1F), + LOCATION(RC_JABU_JABUS_BELLY_MAP_CHEST, logic->JabuWestTentacle), + LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_BEGINNING, []{return true;}), @@ -172,6 +175,8 @@ void RegionTable_Init_JabuJabusBelly() { LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, logic->CanBreakPots()), LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}), @@ -219,6 +224,11 @@ void RegionTable_Init_JabuJabusBelly() { //Locations LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, logic->CanCutShrubs() && logic->HasExplosives()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, logic->CanCutShrubs() && logic->HasExplosives()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}), @@ -232,10 +242,11 @@ void RegionTable_Init_JabuJabusBelly() { //Locations LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, true), //Implies logic->CanKillEnemy(RE_LIKE_LIKE) && logic->CanKillEnemy(RE_STINGER). Without swim, jump from the song of time block to the vines. - LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, logic->CanKillEnemy(RE_LIZALFOS)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, (logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)) || (ctx->GetTrickOption(RT_JABU_MQ_SOT_GS) && logic->CanUse(RG_BOOMERANG))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, logic->CanKillEnemy(RE_LIZALFOS)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, (logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)) || (ctx->GetTrickOption(RT_JABU_MQ_SOT_GS) && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, logic->CanCutShrubs()), }, { //Exits //without swim, jump from rang chest to the other side @@ -253,6 +264,9 @@ void RegionTable_Init_JabuJabusBelly() { LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, logic->CanBreakPots()), LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_BOOMERANG);}), @@ -297,7 +311,10 @@ void RegionTable_Init_JabuJabusBelly() { EventAccess(&logic->LoweredJabuPath, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}), }, { //Locations - LOCATION(RC_JABU_JABUS_BELLY_MQ_COW, logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_FAIRY_SLINGSHOT)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_COW, logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_FAIRY_SLINGSHOT)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}), @@ -319,9 +336,11 @@ void RegionTable_Init_JabuJabusBelly() { EventAccess(&logic->FairyPot, []{return true;}), }, { //Locations - LOCATION(RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_HOOKSHOT))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_HOOKSHOT))), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, []{return true;}), @@ -356,4 +375,6 @@ void RegionTable_Init_JabuJabusBelly() { Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return false;}), Entrance(RR_ZORAS_FOUNTAIN, []{return logic->JabuJabusBellyClear;}, false), }); -} \ No newline at end of file + + // clang-format on +} 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 8cf70fc3f..3be1acac4 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_ShadowTemple() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_SHADOW_TEMPLE_ENTRYWAY] = Region("Shadow Temple Entryway", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -125,7 +126,15 @@ void RegionTable_Init_ShadowTemple() { Entrance(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}), }); - areaTable[RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM] = Region("Shadow Temple MQ Spinner Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM] = Region("Shadow Temple MQ Spinner Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + // Locations + LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, logic->CanBreakSmallCrates()), + }, + { //Exits Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}), Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}) && (logic->CanUse(RG_HOVER_BOOTS) || Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS);}) || (ctx->GetTrickOption(RT_SHADOW_MQ_GAP) && logic->CanUse(RG_LONGSHOT) && logic->CanJumpslashExceptHammer()));}), @@ -409,4 +418,6 @@ void RegionTable_Init_ShadowTemple() { Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return false;}), Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return logic->ShadowTempleClear;}, false), }); -} \ No newline at end of file + + // clang-format on +} 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 e3d00ccf3..e7f9c0ee6 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_SpiritTemple() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_SPIRIT_TEMPLE_ENTRYWAY] = Region("Spirit Temple Entryway", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -31,13 +32,15 @@ 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))))), + LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), @@ -283,6 +286,10 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), + LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakCrates();})), + LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakCrates();})), + LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakSmallCrates();})), + }, { //Exits //we check possible adult access directly in MQSpiritSharedBrokenWallRoom, so this exit only covers Certain Access @@ -423,6 +430,7 @@ void RegionTable_Init_SpiritTemple() { areaTable[RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM] = Region("Spirit Temple MQ Four Beamos Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, logic->CanKillEnemy(RE_BEAMOS)), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, logic->CanKillEnemy(RE_BEAMOS) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_HOOKSHOT);}), @@ -506,10 +514,14 @@ void RegionTable_Init_SpiritTemple() { areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM] = Region("Spirit Temple MQ Big Mirror Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, logic->CanBreakCrates()), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, []{return true;}), @@ -554,4 +566,6 @@ void RegionTable_Init_SpiritTemple() { Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return false;}), Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, false), }); -} \ No newline at end of file + + // clang-format on +} 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 4d2fbb9bf..0ae5ac289 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp @@ -5,6 +5,7 @@ using namespace Rando; void RegionTable_Init_WaterTemple() { + // clang-format off // Vanilla/MQ Decider areaTable[RR_WATER_TEMPLE_ENTRYWAY] = Region("Water Temple Entryway", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits @@ -426,7 +427,11 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH] = Region("Water Temple MQ Central Pillar High", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->MQWaterOpenedPillarB1, []{return ((logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_DINS_FIRE)) || (ctx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && logic->CanUse(RG_FIRE_ARROWS))) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_LONGSHOT) && logic->CanJumpslash()));}), - }, {}, { + }, { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, logic->CanBreakCrates()), + }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return logic->MQWaterB1Switch && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC);}), }); @@ -442,15 +447,40 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL] = Region("Water Temple MQ Central Pillar B1 Final", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, logic->CanBreakCrates()), }, {}); //Region exists to add crate/pot/box locations areaTable[RR_WATER_TEMPLE_MQ_STORAGE_ROOM] = Region("Water Temple MQ Storage Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8);}), @@ -458,9 +488,19 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F] = Region("Water Temple MQ Behind Blue Switch 2F", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}), @@ -478,9 +518,17 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY] = Region("Water Temple MQ Lizalfos Hallway", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE, []{return logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_DINS_FIRE);}), @@ -496,9 +544,11 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE] = Region("Water Temple MQ Lizalfos Cage", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, logic->CanKillEnemy(RE_GOLD_SKULLTULA)), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, logic->CanKillEnemy(RE_GOLD_SKULLTULA)), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, logic->CanBreakCrates()), }, {}); //This room exists to hold the wonderitems that drop from the emblems here. Specifically this assumes you are standing on the final ledge @@ -591,7 +641,15 @@ void RegionTable_Init_WaterTemple() { }); //This region assumes Iron boots to access - areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL] = Region("Water Temple MQ Dragon Room Tunnel", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL] = Region("Water Temple MQ Dragon Room Tunnel", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return logic->CanUse(RG_LONGSHOT);}), Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT);}), @@ -601,13 +659,28 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE] = Region("Water Temple MQ Dragon Room Alcove", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->MQWaterDragonTorches, []{return true;}), - }, {}, { + }, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16;}), Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return logic->HasItem(RG_SILVER_SCALE);}), }); - areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR] = Region("Water Temple MQ Dragon Room Door", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR] = Region("Water Temple MQ Dragon Room Door", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return logic->CanUse(RG_LONGSHOT);}), Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanUse(RG_HOOKSHOT);}), @@ -617,7 +690,8 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH] = Region("Water Temple MQ Boss Key Room Switch", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return true;}), @@ -626,7 +700,15 @@ void RegionTable_Init_WaterTemple() { }); //this exists for the crates in preparation for clips through the grate - areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT] = Region("Water Temple MQ Boss Key Room Pit", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT] = Region("Water Temple MQ Boss Key Room Pit", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->CanHitSwitch(ED_BOOMERANG);}), }); @@ -652,7 +734,17 @@ void RegionTable_Init_WaterTemple() { Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST, []{return logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && (logic->MQWaterLevel(WL_LOW) || logic->WaterTimer() >= 24);}) }); - areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM] = Region("Water Temple MQ Triangle Torch Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM] = Region("Water Temple MQ Triangle Torch Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_GOLDEN_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 40 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT))));}), Entrance(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE, []{return logic->CanUse(RG_FIRE_ARROWS) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || (logic->CanUse(RG_LONGSHOT) && Here(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE, []{return logic->ScarecrowsSong();})));}) @@ -660,14 +752,30 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE] = Region("Water Temple MQ Triangle Torch Cage", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), + LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, logic->CanBreakCrates()), }, {}); - areaTable[RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM] = Region("Water Temple MQ Crates Whirlpools Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM] = Region("Water Temple MQ Crates Whirlpools Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + + }, + { //Exits //we can backflip over the spikes, but land in water. Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterB1Switch && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && (logic->CanUse(RG_LONGSHOT) || logic->HasItem(RG_BRONZE_SCALE));}), @@ -682,9 +790,15 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM] = Region("Water Temple MQ Single Stalfos Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, true), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, logic->CanBreakCrates()), + }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT)));}) @@ -698,8 +812,13 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_DODONGO_ROOM] = Region("Water Temple MQ Dodongo Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_4_TORCH_ROOM, []{return (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && Here(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);});}), @@ -708,7 +827,11 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE] = Region("Water Temple MQ Basement Gated Areas", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), + LOCATION(RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA) && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, logic->CanBreakCrates()), }, { Entrance(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return true;}) }); @@ -735,4 +858,6 @@ void RegionTable_Init_WaterTemple() { Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return false;}), Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}, false), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp index 6af0551e0..4b4579210 100644 --- a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp @@ -9,6 +9,7 @@ using namespace Rando; */ void RegionTable_Init_GerudoFortress() { + // clang-format off areaTable[RR_GERUDO_FORTRESS] = Region("Gerudo Fortress", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}), @@ -26,8 +27,8 @@ void RegionTable_Init_GerudoFortress() { LOCATION(RC_GF_GERUDO_MEMBERSHIP_CARD, logic->CanFinishGerudoFortress()), LOCATION(RC_GF_GS_ARCHERY_RANGE, logic->IsAdult && logic->HookshotOrBoomerang() && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanGetNightTimeGS()), LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && (logic->CanJumpslashExceptHammer() || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->HasExplosives() || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_DINS_FIRE)) && (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_GF_KITCHEN) || ctx->GetTrickOption(RT_GF_JUMP)) && logic->CanGetNightTimeGS()), - LOCATION(RC_GF_BREAK_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_GF_BREAK_ROOM_POT_2, logic->CanBreakPots()), + LOCATION(RC_GF_BREAK_ROOM_POT_1, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakPots()), + LOCATION(RC_GF_BREAK_ROOM_POT_2, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakPots()), LOCATION(RC_GF_KITCHEN_POT_1, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakPots()), LOCATION(RC_GF_KITCHEN_POT_2, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakPots()), LOCATION(RC_GF_NORTH_F1_CARPENTER_POT_1, logic->CanBreakPots()), @@ -42,6 +43,42 @@ void RegionTable_Init_GerudoFortress() { LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, logic->CanBreakPots()), LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, logic->CanBreakPots()), LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, logic->CanBreakPots()), + LOCATION(RC_GF_ABOVE_JAIL_CRATE, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_3, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_4, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_5, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_6, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_7, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_START_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_START_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, logic->IsChild && logic->HasExplosives() && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_1, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_2, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_3, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_4, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_5, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_BREAK_ROOM_CRATE_1, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_BREAK_ROOM_CRATE_2, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_BREAK_ROOM_CRATE_3, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_BREAK_ROOM_CRATE_4, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_NORTH_F1_CARPENTER_CRATE, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_NORTH_F3_CARPENTER_CRATE, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_2, logic->CanBreakCrates()), + + //RANDOTODO doublecheck when GF isn't a blob LOCATION(RC_GF_KITCHEN_SUN_FAIRY, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_SUNS_SONG)), }, { @@ -78,4 +115,6 @@ void RegionTable_Init_GerudoFortress() { //Exits Entrance(RR_GERUDO_FORTRESS, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} 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 b4b77056b..bdcdf9a4c 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_CastleGrounds() { + // clang-format off //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 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, {}, {}, { @@ -21,13 +22,15 @@ void RegionTable_Init_CastleGrounds() { }, { //Locations LOCATION(RC_HC_MALON_EGG, true), - LOCATION(RC_HC_GS_TREE, logic->IsChild && logic->CanAttack()), + LOCATION(RC_HC_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)), LOCATION(RC_HC_MALON_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), LOCATION(RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_HC_MALON_GOSSIP_STONE, true), LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE, true), + LOCATION(RC_HC_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HC_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_CASTLE_GROUNDS, []{return true;}), @@ -114,4 +117,6 @@ void RegionTable_Init_CastleGrounds() { Entrance(RR_GANONS_CASTLE_GROUNDS, []{return logic->BuiltRainbowBridge;}), Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return logic->IsAdult;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp index 6ba8bfc6e..b05b22c48 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_DeathMountainCrater() { + // clang-format off areaTable[RR_DMC_UPPER_NEARBY] = Region("DMC Upper Nearby", "Death Mountain Crater", {RA_DEATH_MOUNTAIN_CRATER}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(RR_DMC_UPPER_LOCAL, []{return logic->FireTimer() >= 48;}), @@ -17,10 +18,12 @@ void RegionTable_Init_DeathMountainCrater() { }, { //Locations LOCATION(RC_DMC_WALL_FREESTANDING_POH, logic->FireTimer() >= 16 || logic->Hearts() >= 3), - LOCATION(RC_DMC_GS_CRATE, (logic->FireTimer() >= 8 || logic->Hearts() >= 3) && logic->IsChild && logic->CanAttack()), + LOCATION(RC_DMC_GS_CRATE, (logic->FireTimer() >= 8 || logic->Hearts() >= 3) && logic->IsChild && logic->CanAttack() && logic->CanBreakCrates()), LOCATION(RC_DMC_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() && logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)), LOCATION(RC_DMC_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS) && logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)), LOCATION(RC_DMC_GOSSIP_STONE, logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)), + LOCATION(RC_DMC_CRATE, (logic->FireTimer() >= 8 || logic->Hearts() >= 3) && logic->IsChild && logic->CanBreakCrates()), + }, { //Exits Entrance(RR_DMC_UPPER_NEARBY, []{return true;}), @@ -113,6 +116,10 @@ void RegionTable_Init_DeathMountainCrater() { LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, true), LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_DMC_UPPER_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DMC_UPPER_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DMC_UPPER_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DMC_UPPER_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DMC_UPPER_LOCAL, []{return true;}), @@ -142,4 +149,6 @@ void RegionTable_Init_DeathMountainCrater() { //Exits Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTimer() >= 48 && logic->CanUse(RG_DISTANT_SCARECROW);}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp index bd0362598..b9fab96e0 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_DeathMountainTrail() { + // clang-format off areaTable[RR_DEATH_MOUNTAIN_TRAIL] = Region("Death Mountain", "Death Mountain", {RA_DEATH_MOUNTAIN_TRAIL}, DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET));}), @@ -72,6 +73,8 @@ void RegionTable_Init_DeathMountainTrail() { LOCATION(RC_DMT_COW_GROTTO_RUPEE_6, true), LOCATION(RC_DMT_COW_GROTTO_RED_RUPEE, true), LOCATION(RC_DMT_COW_GROTTO_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_DMT_COW_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DMT_COW_GROTTO_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}), @@ -86,6 +89,10 @@ void RegionTable_Init_DeathMountainTrail() { LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE, true), LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_DMT_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DMT_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DMT_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DMT_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}), @@ -98,4 +105,6 @@ void RegionTable_Init_DeathMountainTrail() { //Exits Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/desert_colossus.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/desert_colossus.cpp index 0ef2bbdfc..ac0869036 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/desert_colossus.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/desert_colossus.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_DesertColossus() { + // clang-format off areaTable[RR_DESERT_COLOSSUS] = Region("Desert Colossus", "Desert Colossus", {RA_DESERT_COLOSSUS}, DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->FairyPond, []{return logic->FairyPond || logic->CanUse(RG_SONG_OF_STORMS);}), @@ -74,4 +75,6 @@ void RegionTable_Init_DesertColossus() { //Exits Entrance(RR_DESERT_COLOSSUS, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp index 189d96521..86cc1b060 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_GerudoValley() { + // clang-format off areaTable[RR_GERUDO_VALLEY] = Region("Gerudo Valley", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->BugRock, []{return logic->BugRock || logic->IsChild;}), @@ -35,6 +36,7 @@ void RegionTable_Init_GerudoValley() { LOCATION(RC_GV_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), LOCATION(RC_GV_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GV_GOSSIP_STONE, true), + LOCATION(RC_GV_NEAR_COW_CRATE, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_GV_LOWER_STREAM, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS);}), @@ -56,7 +58,8 @@ void RegionTable_Init_GerudoValley() { areaTable[RR_GV_CRATE_LEDGE] = Region("GV Crate Ledge", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_GV_CRATE_FREESTANDING_POH, true), + LOCATION(RC_GV_CRATE_FREESTANDING_POH, logic->CanBreakCrates()), + LOCATION(RC_GV_FREESTANDING_POH_CRATE, logic->CanBreakCrates()), }, { //Exits Entrance(RR_GV_UPPER_STREAM, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}), @@ -69,6 +72,10 @@ void RegionTable_Init_GerudoValley() { LOCATION(RC_GV_TRADE_SAW, logic->IsAdult && logic->CanUse(RG_POACHERS_SAW)), LOCATION(RC_GV_GS_BEHIND_TENT, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), LOCATION(RC_GV_GS_PILLAR, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), + LOCATION(RC_GV_CRATE_BRIDGE_1, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_GV_CRATE_BRIDGE_2, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_GV_CRATE_BRIDGE_3, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_GV_CRATE_BRIDGE_4, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_GERUDO_FORTRESS, []{return true;}), @@ -108,4 +115,6 @@ void RegionTable_Init_GerudoValley() { //Exits Entrance(RR_GV_FORTRESS_SIDE, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp index 722402ae9..8081757d2 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_GoronCity() { + // clang-format off areaTable[RR_GORON_CITY] = Region("Goron City", "Goron City", {RA_GORON_CITY}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), @@ -32,6 +33,8 @@ void RegionTable_Init_GoronCity() { LOCATION(RC_GC_UPPER_STAIRCASE_POT_1, logic->CanBreakPots()), LOCATION(RC_GC_UPPER_STAIRCASE_POT_2, logic->CanBreakPots()), LOCATION(RC_GC_UPPER_STAIRCASE_POT_3, logic->CanBreakPots()), + LOCATION(RC_GC_MAZE_CRATE, logic->BlastOrSmash() || (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanBreakCrates())), + }, { //Exits Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}), @@ -108,4 +111,6 @@ void RegionTable_Init_GoronCity() { //Exits Entrance(RR_GC_GROTTO_PLATFORM, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp index 28d272711..012503d9a 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_Graveyard() { + // clang-format off areaTable[RR_THE_GRAVEYARD] = Region("The Graveyard", "The Graveyard", {RA_THE_GRAVEYARD}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->ButterflyFairy, []{return logic->ButterflyFairy || (logic->CanUse(RG_STICKS) && logic->AtDay);}), @@ -11,13 +12,26 @@ void RegionTable_Init_Graveyard() { EventAccess(&logic->BugRock, []{return true;}), }, { //Locations - LOCATION(RC_GRAVEYARD_FREESTANDING_POH, (logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_GY_POH) && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_GRAVEYARD_FREESTANDING_POH, (((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()) || (ctx->GetTrickOption(RT_GY_POH) && logic->CanUse(RG_BOOMERANG))), LOCATION(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, logic->HasItem(RG_CHILD_WALLET) && logic->IsChild && logic->AtNight), //TODO: This needs to change LOCATION(RC_GRAVEYARD_GS_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->AtNight && logic->CanGetNightTimeGS()), LOCATION(RC_GRAVEYARD_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_GY_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_12, logic->CanCutShrubs()), + LOCATION(RC_GRAVEYARD_CRATE, ((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()), }, { //Exits Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return logic->IsAdult || logic->AtNight;}), @@ -120,4 +134,6 @@ 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));}), }); + + // clang-format on } diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp index abedcc571..a9b238292 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp @@ -4,7 +4,13 @@ using namespace Rando; void RegionTable_Init_HauntedWasteland() { - areaTable[RR_WASTELAND_NEAR_FORTRESS] = Region("Wasteland Near Fortress", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, {}, { + // clang-format off + areaTable[RR_WASTELAND_NEAR_FORTRESS] = Region("Wasteland Near Fortress", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_HW_BEFORE_QUICKSAND_CRATE, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_GF_OUTSIDE_GATE, []{return true;}), Entrance(RR_HAUNTED_WASTELAND, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_HW_CROSSING);}), @@ -24,15 +30,25 @@ void RegionTable_Init_HauntedWasteland() { LOCATION(RC_WASTELAND_NEAR_GS_POT_2, logic->CanBreakPots()), LOCATION(RC_WASTELAND_NEAR_GS_POT_3, logic->CanBreakPots()), LOCATION(RC_WASTELAND_NEAR_GS_POT_4, logic->CanBreakPots()), + LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_3, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WASTELAND_NEAR_COLOSSUS, []{return ctx->GetTrickOption(RT_LENS_HW) || logic->CanUse(RG_LENS_OF_TRUTH);}), Entrance(RR_WASTELAND_NEAR_FORTRESS, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_HW_CROSSING);}), }); - areaTable[RR_WASTELAND_NEAR_COLOSSUS] = Region("Wasteland Near Colossus", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WASTELAND_NEAR_COLOSSUS] = Region("Wasteland Near Colossus", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_HW_NEAR_COLOSSUS_CRATE, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_DESERT_COLOSSUS, []{return true;}), Entrance(RR_HAUNTED_WASTELAND, []{return ctx->GetTrickOption(RT_HW_REVERSE) || false;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp index d73c09162..add3a2f86 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_HyruleField() { + // clang-format off areaTable[RR_HYRULE_FIELD] = Region("Hyrule Field", "Hyrule Field", {RA_HYRULE_FIELD}, DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->BigPoeKill, []{return logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_EPONA) && logic->HasBottle();}), @@ -12,6 +13,54 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_OCARINA_OF_TIME_ITEM, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)), LOCATION(RC_SONG_FROM_OCARINA_OF_TIME, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)), LOCATION(RC_HF_POND_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_HF_CENTRAL_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_12, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_12, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_12, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_12, logic->CanCutShrubs()), }, { //Exits Entrance(RR_LW_BRIDGE, []{return true;}), @@ -40,6 +89,10 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), @@ -54,6 +107,10 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_HF_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), @@ -88,6 +145,8 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_COW_GROTTO_POT_1, logic->CanBreakPots()), LOCATION(RC_HF_COW_GROTTO_POT_2, logic->CanBreakPots()), + LOCATION(RC_HF_COW_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_COW_GROTTO_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HF_COW_GROTTO, []{return true;}), @@ -102,6 +161,10 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), @@ -140,4 +203,6 @@ void RegionTable_Init_HyruleField() { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp index aff90914e..777e29050 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp @@ -4,32 +4,59 @@ using namespace Rando; void RegionTable_Init_Kakariko() { + // clang-format off areaTable[RR_KAKARIKO_VILLAGE] = Region("Kakariko Village", "Kakariko Village", {RA_KAKARIKO_VILLAGE}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->BugRock, []{return true;}), - //Open Gate setting is applies in RR_ROOT + //Open Gate setting is applied in RR_ROOT EventAccess(&logic->KakarikoVillageGateOpen, []{return logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER);}), }, { //Locations - LOCATION(RC_SHEIK_IN_KAKARIKO, logic->IsAdult && logic->HasItem(RG_FOREST_MEDALLION) && logic->HasItem(RG_FIRE_MEDALLION) && logic->HasItem(RG_WATER_MEDALLION)), - LOCATION(RC_KAK_ANJU_AS_CHILD, logic->IsChild && logic->AtDay), - LOCATION(RC_KAK_ANJU_AS_ADULT, logic->IsAdult && logic->AtDay), - LOCATION(RC_KAK_TRADE_POCKET_CUCCO, logic->IsAdult && logic->AtDay && (logic->CanUse(RG_POCKET_EGG) && logic->WakeUpAdultTalon)), + LOCATION(RC_SHEIK_IN_KAKARIKO, logic->IsAdult && logic->HasItem(RG_FOREST_MEDALLION) && logic->HasItem(RG_FIRE_MEDALLION) && logic->HasItem(RG_WATER_MEDALLION)), + LOCATION(RC_KAK_ANJU_AS_CHILD, logic->IsChild && logic->AtDay), + LOCATION(RC_KAK_ANJU_AS_ADULT, logic->IsAdult && logic->AtDay), + LOCATION(RC_KAK_TRADE_POCKET_CUCCO, logic->IsAdult && logic->AtDay && (logic->CanUse(RG_POCKET_EGG) && logic->WakeUpAdultTalon)), //Can kill lower kak skulls with pots - LOCATION(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, logic->IsChild && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_GS_SKULLTULA_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_GS_GUARDS_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_GS_TREE, logic->IsChild && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_GS_WATCHTOWER, logic->IsChild && (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_3, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, logic->IsChild && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_GS_SKULLTULA_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_GS_GUARDS_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_GS_TREE, logic->IsChild && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_GS_WATCHTOWER, logic->IsChild && (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_GY_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_FENCE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), @@ -223,6 +250,10 @@ void RegionTable_Init_Kakariko() { LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE, true), LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_KAK_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_KAK_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_KAK_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_KAK_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_KAK_BACKYARD, []{return true;}), @@ -239,4 +270,6 @@ 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));}), }); + + // clang-format on } diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp index fd7c340de..80df2bb91 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_KokiriForest() { + // clang-format off areaTable[RR_KOKIRI_FOREST] = Region("Kokiri Forest", "Kokiri Forest", {RA_KOKIRI_FOREST}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}), @@ -39,6 +40,41 @@ void RegionTable_Init_KokiriForest() { LOCATION(RC_KF_SARIAS_ROOF_EAST_HEART, logic->IsChild), LOCATION(RC_KF_SARIAS_ROOF_NORTH_HEART, logic->IsChild), LOCATION(RC_KF_GOSSIP_STONE, true), + LOCATION(RC_KF_CHILD_GRASS_1, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_2, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_3, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_4, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_5, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_6, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_7, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_8, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_9, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_10, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_11, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_12, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_MAZE_1, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_MAZE_2, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_MAZE_3, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_1, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_2, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_3, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_4, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_5, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_6, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_7, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_8, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_9, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_10, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_11, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_12, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_13, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_14, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_15, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_16, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_17, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_18, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_19, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_20, logic->IsAdult && logic->CanCutShrubs()), }, { //Exits Entrance(RR_KF_LINKS_HOUSE, []{return true;}), @@ -145,8 +181,14 @@ void RegionTable_Init_KokiriForest() { LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE, true), LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_KF_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_KF_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_KF_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_KF_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_KOKIRI_FOREST, []{return true;}) }); -} \ No newline at end of file + + // clang-format on +} 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 447d039d2..36d3ee1a3 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_LakeHylia() { + // clang-format off areaTable[RR_LAKE_HYLIA] = Region("Lake Hylia", "Lake Hylia", {RA_LAKE_HYLIA}, DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}), @@ -38,6 +39,48 @@ void RegionTable_Init_LakeHylia() { LOCATION(RC_LH_LAB_GOSSIP_STONE, true), LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE, true), LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE, true), + LOCATION(RC_LH_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_12, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_13, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_14, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_15, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_16, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_17, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_18, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_19, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_20, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_21, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_22, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_23, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_24, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_25, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_26, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_27, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_28, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_29, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_30, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_31, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_32, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_33, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_34, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_35, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_36, logic->CanCutShrubs()), + LOCATION(RC_LH_CHILD_GRASS_1, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_LH_CHILD_GRASS_2, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_LH_CHILD_GRASS_3, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_LH_CHILD_GRASS_4, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_LH_WARP_PAD_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_LH_WARP_PAD_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), @@ -64,10 +107,11 @@ void RegionTable_Init_LakeHylia() { //Locations LOCATION(RC_LH_LAB_DIVE, logic->HasItem(RG_GOLDEN_SCALE) || (ctx->GetTrickOption(RT_LH_LAB_DIVING) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT))), LOCATION(RC_LH_TRADE_FROG, logic->IsAdult && logic->CanUse(RG_EYEBALL_FROG)), - LOCATION(RC_LH_GS_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_LH_GS_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->CanBreakCrates()), LOCATION(RC_LH_LAB_FRONT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), LOCATION(RC_LH_LAB_LEFT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), LOCATION(RC_LH_LAB_RIGHT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), + LOCATION(RC_LH_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanBreakCrates()), }, { //Exits Entrance(RR_LAKE_HYLIA, []{return true;}), @@ -128,4 +172,6 @@ void RegionTable_Init_LakeHylia() { //Exits Entrance(RR_LAKE_HYLIA, []{return true;}), }); + + // clang-format on } 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 283150415..fae41664e 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 @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_LonLonRanch() { + // clang-format off areaTable[RR_LON_LON_RANCH] = Region("Lon Lon Ranch", "Lon Lon Ranch", {RA_LON_LON_RANCH}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->FreedEpona, []{return logic->FreedEpona || ((logic->HasItem(RG_CHILD_WALLET) || ctx->GetOption(RSK_SKIP_EPONA_RACE)) && logic->CanUse(RG_EPONAS_SONG) && logic->IsAdult && logic->AtDay);}), @@ -22,6 +23,7 @@ void RegionTable_Init_LonLonRanch() { LOCATION(RC_LLR_RAIN_SHED_POT_1, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_LLR_NEAR_TREE_CRATE, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), @@ -71,4 +73,6 @@ void RegionTable_Init_LonLonRanch() { //Exits Entrance(RR_LON_LON_RANCH, []{return true;}), }); + + // clang-format on } diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp index 17aaff639..812b33a55 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_LostWoods() { + // clang-format off areaTable[RR_LW_FOREST_EXIT] = Region("LW Forest Exit", "Lost Woods", {RA_THE_LOST_WOODS}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(RR_KOKIRI_FOREST, []{return true;}) @@ -48,6 +49,9 @@ void RegionTable_Init_LostWoods() { LOCATION(RC_LW_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_SHORTCUT_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_GOSSIP_STONE, true), + LOCATION(RC_LW_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_LW_FOREST_EXIT, []{return true;}), @@ -71,6 +75,12 @@ void RegionTable_Init_LostWoods() { LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LW_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_9, logic->CanCutShrubs()), }, { //Exits Entrance(RR_LW_FOREST_EXIT, []{return true;}), @@ -89,6 +99,10 @@ void RegionTable_Init_LostWoods() { LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE, true), LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_THE_LOST_WOODS, []{return true;}), @@ -128,4 +142,6 @@ void RegionTable_Init_LostWoods() { Entrance(RR_HYRULE_FIELD, []{return true;}), Entrance(RR_THE_LOST_WOODS, []{return logic->CanUse(RG_LONGSHOT);}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp index af406f8bf..2016b24cd 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_Market() { + // clang-format off areaTable[RR_MARKET_ENTRANCE] = Region("Market Entrance", "Market Entrance", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(RR_HYRULE_FIELD, []{return logic->IsAdult || logic->AtDay;}), @@ -11,7 +12,21 @@ void RegionTable_Init_Market() { Entrance(RR_MARKET_GUARD_HOUSE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}), }); - areaTable[RR_THE_MARKET] = Region("Market", "Market", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_THE_MARKET] = Region("Market", "Market", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_MARKET_GRASS_1, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_2, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_3, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_4, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_5, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_6, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_7, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_8, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MK_NEAR_BAZAAR_CRATE_1, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_NEAR_BAZAAR_CRATE_2, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_1, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_2, logic->IsChild && logic->CanBreakCrates()), + }, { //Exits Entrance(RR_MARKET_ENTRANCE, []{return true;}), Entrance(RR_TOT_ENTRANCE, []{return true;}), @@ -35,7 +50,6 @@ void RegionTable_Init_Market() { areaTable[RR_MARKET_GUARD_HOUSE] = Region("Market Guard House", "Market Guard House", {}, NO_DAY_NIGHT_CYCLE, { //Events - EventAccess(&logic->CouldEmptyBigPoes, []{return logic->IsAdult;}), EventAccess(&logic->CanEmptyBigPoes, []{return logic->IsAdult;}), }, { //Locations @@ -96,6 +110,11 @@ void RegionTable_Init_Market() { LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_9, logic->IsAdult && logic->CanBreakPots()), LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_10, logic->IsAdult && logic->CanBreakPots()), LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_11, logic->IsAdult && logic->CanBreakPots()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_1, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_2, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_3, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_4, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_5, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_MARKET_ENTRANCE, []{return true;}), @@ -199,7 +218,8 @@ void RegionTable_Init_Market() { areaTable[RR_MARKET_DOG_LADY_HOUSE] = Region("Market Dog Lady House", "Market Dog Lady House", {}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_MARKET_LOST_DOG, logic->IsChild && logic->AtNight), + LOCATION(RC_MARKET_LOST_DOG, logic->IsChild && logic->AtNight), + LOCATION(RC_MK_LOST_DOG_HOUSE_CRATE, logic->CanBreakCrates()), }, { //Exits Entrance(RR_MARKET_BACK_ALLEY, []{return true;}), @@ -214,4 +234,6 @@ void RegionTable_Init_Market() { //Exits Entrance(RR_MARKET_BACK_ALLEY, []{return true;}), }); + + // clang-format on } diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/sacred_forest_meadow.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/sacred_forest_meadow.cpp index ecc0577e2..9df62afd7 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/sacred_forest_meadow.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/sacred_forest_meadow.cpp @@ -4,10 +4,11 @@ using namespace Rando; void RegionTable_Init_SacredForestMeadow() { + // clang-format off areaTable[RR_SFM_ENTRYWAY] = Region("SFM Entryway", "Sacred Forest Meadow", {RA_SACRED_FOREST_MEADOW}, NO_DAY_NIGHT_CYCLE, {}, {}, { //Exits Entrance(RR_LW_BEYOND_MIDO, []{return true;}), - Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->CanJumpslash() || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE);}), + Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->IsAdult || logic->CanKillEnemy(RE_WOLFOS);}), Entrance(RR_SFM_WOLFOS_GROTTO, []{return logic->CanOpenBombGrotto();}), }); @@ -71,4 +72,6 @@ void RegionTable_Init_SacredForestMeadow() { //Exits Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/temple_of_time.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/temple_of_time.cpp index 06865772d..be2d8e33f 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/temple_of_time.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/temple_of_time.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_TempleOfTime() { + // clang-format off areaTable[RR_TOT_ENTRANCE] = Region("ToT Entrance", "ToT Entrance", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), @@ -51,4 +52,6 @@ void RegionTable_Init_TempleOfTime() { //Exits Entrance(RR_TEMPLE_OF_TIME, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_domain.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_domain.cpp index 0bf91e43a..07922bc8f 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_domain.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_domain.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_ZorasDomain() { + // clang-format off areaTable[RR_ZORAS_DOMAIN] = Region("Zoras Domain", "Zoras Domain", {RA_ZORAS_DOMAIN}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), @@ -90,4 +91,6 @@ void RegionTable_Init_ZorasDomain() { //Exits Entrance(RR_ZORAS_DOMAIN_ISLAND, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_fountain.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_fountain.cpp index ccdca0eca..a03070454 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_fountain.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_fountain.cpp @@ -4,6 +4,7 @@ using namespace Rando; void RegionTable_Init_ZorasFountain() { + // clang-format off areaTable[RR_ZORAS_FOUNTAIN] = Region("Zoras Fountain", "Zoras Fountain", {RA_ZORAS_FOUNTAIN}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}), @@ -61,4 +62,6 @@ void RegionTable_Init_ZorasFountain() { //Exits Entrance(RR_ZORAS_FOUNTAIN, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/zora_river.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp similarity index 85% rename from soh/soh/Enhancements/randomizer/location_access/overworld/zora_river.cpp rename to soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp index 16ac1b271..3fbf8bdbd 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/zora_river.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp @@ -4,9 +4,22 @@ using namespace Rando; void RegionTable_Init_ZoraRiver() { + // clang-format off areaTable[RR_ZR_FRONT] = Region("ZR Front", "Zora River", {RA_ZORAS_RIVER}, DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanAttack()), + LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)), + LOCATION(RC_ZR_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_12, logic->CanCutShrubs()), }, { //Exits Entrance(RR_ZORAS_RIVER, []{return logic->IsAdult || logic->BlastOrSmash();}), @@ -47,6 +60,7 @@ void RegionTable_Init_ZoraRiver() { LOCATION(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))), LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, true), LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, true), + LOCATION(RC_ZR_NEAR_FREESTANDING_POH_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_ZR_FRONT, []{return true;}), @@ -72,6 +86,10 @@ void RegionTable_Init_ZoraRiver() { LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE, true), LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_ZR_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_ZR_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_ZR_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_ZR_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_ZORAS_RIVER, []{return true;}), @@ -104,4 +122,6 @@ void RegionTable_Init_ZoraRiver() { //Exits Entrance(RR_ZORAS_RIVER, []{return true;}), }); -} \ No newline at end of file + + // clang-format on +} diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 116b7d709..d1785ba07 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -8,8 +8,7 @@ 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_QUEEN_GOHMA, RC_KING_DODONGO, RC_BARINADE, RC_PHANTOM_GANON, RC_VOLVAGIA, RC_MORPHA, RC_TWINROVA, RC_BONGO_BONGO, }; using namespace Rando; @@ -17,7 +16,8 @@ using namespace Rando; std::vector Rando::StaticData::GetPondFishLocations() { std::vector pondFishLocations = {}; for (Location& location : locationTable) { - if (location.GetRCType() == RCTYPE_FISH && location.GetScene() == SCENE_FISHING_POND && location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { + if (location.GetRCType() == RCTYPE_FISH && location.GetScene() == SCENE_FISHING_POND && + location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { pondFishLocations.push_back(location.GetRandomizerCheck()); } } @@ -26,7 +26,8 @@ std::vector Rando::StaticData::GetPondFishLocations() { std::vector Rando::StaticData::GetOverworldFishLocations() { std::vector overworldFishLocations = {}; for (Location& location : locationTable) { - if (location.GetRCType() == RCTYPE_FISH && location.GetScene() != SCENE_FISHING_POND && location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { + if (location.GetRCType() == RCTYPE_FISH && location.GetScene() != SCENE_FISHING_POND && + location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { overworldFishLocations.push_back(location.GetRandomizerCheck()); } } @@ -113,8 +114,9 @@ std::vector Rando::StaticData::GetOverworldFairyLocations() { return fairyLocations; } -void Rando::StaticData::InitLocationTable() { // Randomizer Check Quest Type Area Actor ID Scene ID Params Flags Short Name Hint Text Key Vanilla Item Spoiler Collection Check Vanilla Progression Price +void Rando::StaticData::InitLocationTable() { // clang-format off + // Randomizer Check Quest Type Area Actor ID Scene ID Params Flags Short Name Hint Text Key Vanilla Item Spoiler Collection Check Vanilla Progression Price locationTable[RC_UNKNOWN_CHECK] = Location::Base(RC_UNKNOWN_CHECK, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_INVALID, ACTOR_ID_MAX, SCENE_ID_MAX, 0x00, "Invalid Location", "Invalid Location", RHT_NONE, RG_NONE); // Kokiri Forest locationTable[RC_KF_KOKIRI_SWORD_CHEST] = Location::Chest(RC_KF_KOKIRI_SWORD_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_KOKIRI_FOREST, 1248, 0x00, "Kokiri Sword Chest", RHT_KF_KOKIRI_SWORD_CHEST, RG_KOKIRI_SWORD, true); @@ -225,7 +227,7 @@ void Rando::StaticData::InitLocationTable() { // // 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_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_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, "Royal Family's Tomb 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); @@ -733,7 +735,7 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_SFM_GS] = Location::GSToken(RC_SFM_GS, RCQUEST_BOTH, SCENE_SACRED_FOREST_MEADOW, 19720, 0x08, "GS", RHT_SFM_GS, 0x0D); // Hyrule Field locationTable[RC_HF_GS_COW_GROTTO] = Location::GSToken(RC_HF_GS_COW_GROTTO, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, 10753, 0x01, "GS Cow Grotto", RHT_HF_GS_COW_GROTTO, 0x0A); - locationTable[RC_HF_GS_NEAR_KAK_GROTTO] = Location::GSToken(RC_HF_GS_NEAR_KAK_GROTTO, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, 10754, 0x02, "GS Near Kak Grotto", RHT_HF_GS_NEAR_KAK_GROTTO, 0x0A); + locationTable[RC_HF_GS_NEAR_KAK_GROTTO] = Location::GSToken(RC_HF_GS_NEAR_KAK_GROTTO, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_GROTTOS, 10754, 0x02, "GS Stone Bridge Tree Grotto", RHT_HF_GS_NEAR_KAK_GROTTO, 0x0A); // Lake Hylia locationTable[RC_LH_GS_BEAN_PATCH] = Location::GSToken(RC_LH_GS_BEAN_PATCH, RCQUEST_BOTH, SCENE_LAKE_HYLIA, 29185, 0x01, "GS Bean Patch", RHT_LH_GS_BEAN_PATCH, 0x12); locationTable[RC_LH_GS_SMALL_ISLAND] = Location::GSToken(RC_LH_GS_SMALL_ISLAND, RCQUEST_BOTH, SCENE_LAKE_HYLIA, 20994, 0x02, "GS Small Island", RHT_LH_GS_SMALL_ISLAND, 0x12); @@ -827,34 +829,34 @@ 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(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(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(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); + 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(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 Royal Family's Tomb", "Song from Royal Family's Tomb", 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(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 locationTable[RC_KF_STORMS_GROTTO_BEEHIVE_LEFT] = Location::Base(RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_KOKIRI_FOREST, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-144, 0x2C), "Storms Grotto Beehive Left", RHT_BEEHIVE_CHEST_GROTTO, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_KF_STORMS_GROTTO_LEFT)); locationTable[RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT] = Location::Base(RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_KOKIRI_FOREST, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(121, 0x2C), "Storms Grotto Beehive Right", RHT_BEEHIVE_CHEST_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_KF_STORMS_GROTTO_RIGHT)); - locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT] = Location::Base(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_LOST_WOODS, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-144, 0x14), "Near Shortcuts Grotto Beehive Left", RHT_BEEHIVE_CHEST_GROTTO, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_LEFT)); - locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT] = Location::Base(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_LOST_WOODS, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(121, 0x14), "Near Shortcuts Grotto Beehive Right", RHT_BEEHIVE_CHEST_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_RIGHT)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT] = Location::Base(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_LOST_WOODS, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-144, 0x14), "Tunnel Grotto Beehive Left", RHT_BEEHIVE_CHEST_GROTTO, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_LEFT)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT] = Location::Base(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_LOST_WOODS, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(121, 0x14), "Tunnel Grotto Beehive Right", RHT_BEEHIVE_CHEST_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_RIGHT)); locationTable[RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE] = Location::Base(RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_LOST_WOODS, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(747, 0xF5), "Deku Scrub Grotto Beehive", RHT_BEEHIVE_SCRUB_PAIR_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_LW_DEKU_SCRUB_GROTTO)); - locationTable[RC_SFM_STORMS_GROTTO_BEEHIVE] = Location::Base(RC_SFM_STORMS_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_SACRED_FOREST_MEADOW, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2262, 0xEE), "Storms Grotto Beehive", RHT_BEEHIVE_SCRUB_PAIR_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_SFM_STORMS_GROTTO)); + locationTable[RC_SFM_STORMS_GROTTO_BEEHIVE] = Location::Base(RC_SFM_STORMS_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_SACRED_FOREST_MEADOW, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2262, 0xEE), "Deku Scrub Grotto Beehive", RHT_BEEHIVE_SCRUB_PAIR_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_SFM_STORMS_GROTTO)); locationTable[RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT] = Location::Base(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_HYRULE_FIELD, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-144, 0x00), "Near Market Grotto Beehive Left", RHT_BEEHIVE_CHEST_GROTTO, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_LEFT)); locationTable[RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT] = Location::Base(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_HYRULE_FIELD, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(121, 0x00), "Near Market Grotto Beehive Right", RHT_BEEHIVE_CHEST_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_RIGHT)); locationTable[RC_HF_OPEN_GROTTO_BEEHIVE_LEFT] = Location::Base(RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_HYRULE_FIELD, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-144, 0x03), "Open Grotto Beehive Left", RHT_BEEHIVE_CHEST_GROTTO, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_HF_OPEN_GROTTO_LEFT)); locationTable[RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT] = Location::Base(RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_HYRULE_FIELD, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(121, 0x03), "Open Grotto Beehive Right", RHT_BEEHIVE_CHEST_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_HF_OPEN_GROTTO_RIGHT)); locationTable[RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT] = Location::Base(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_HYRULE_FIELD, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-144, 0x22), "Southeast Grotto Beehive Left", RHT_BEEHIVE_CHEST_GROTTO, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_LEFT)); locationTable[RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT] = Location::Base(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_HYRULE_FIELD, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(121, 0x22), "Southeast Grotto Beehive Right", RHT_BEEHIVE_CHEST_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_RIGHT)); - locationTable[RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE] = Location::Base(RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_HYRULE_FIELD, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1410, 0xE6), "Inside Fence Grotto Beehive", RHT_BEEHIVE_LONELY_SCRUB_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_HF_INSIDE_FENCE_GROTTO)); - locationTable[RC_LLR_GROTTO_BEEHIVE] = Location::Base(RC_LLR_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_LON_LON_RANCH, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(5144, 0xFC), "Grotto Beehive", RHT_BEEHIVE_SCRUB_TRIO_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_LLR_GROTTO)); + locationTable[RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE] = Location::Base(RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_HYRULE_FIELD, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(1410, 0xE6), "Deku Scrub Grotto Beehive", RHT_BEEHIVE_LONELY_SCRUB_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_HF_INSIDE_FENCE_GROTTO)); + locationTable[RC_LLR_GROTTO_BEEHIVE] = Location::Base(RC_LLR_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_LON_LON_RANCH, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(5144, 0xFC), "Deku Scrub Grotto Beehive", RHT_BEEHIVE_SCRUB_TRIO_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_LLR_GROTTO)); locationTable[RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT] = Location::Base(RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_KAKARIKO_VILLAGE, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-144, 0x28), "Open Grotto Beehive Left", RHT_BEEHIVE_CHEST_GROTTO, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_LEFT)); locationTable[RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT] = Location::Base(RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_KAKARIKO_VILLAGE, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(121, 0x28), "Open Grotto Beehive Right", RHT_BEEHIVE_CHEST_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_RIGHT)); locationTable[RC_DMT_COW_GROTTO_BEEHIVE] = Location::Base(RC_DMT_COW_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2617, 0xF8), "Cow Grotto Beehive", RHT_BEEHIVE_COW_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_DMT_COW_GROTTO)); @@ -870,9 +872,9 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT] = Location::Base(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, RCQUEST_BOTH, RCTYPE_BEEHIVE, ACTOR_OBJ_COMB, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(382, 0x00), "In Front of King Zora Beehive Left", RHT_BEEHIVE_IN_FRONT_OF_KING_ZORA, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_LEFT)); locationTable[RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT] = Location::Base(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, RCQUEST_BOTH, RCTYPE_BEEHIVE, ACTOR_OBJ_COMB, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(948, 0x00), "In Front of King Zora Beehive Right", RHT_BEEHIVE_IN_FRONT_OF_KING_ZORA, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_RIGHT)); locationTable[RC_ZD_BEHIND_KING_ZORA_BEEHIVE] = Location::Base(RC_ZD_BEHIND_KING_ZORA_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, ACTOR_OBJ_COMB, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(701, 0x00), "Behind King Zora Beehive", RHT_BEEHIVE_BEHIND_KING_ZORA, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_ZD_BEHIND_KING_ZORA)); - locationTable[RC_LH_GROTTO_BEEHIVE] = Location::Base(RC_LH_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_LAKE_HYLIA, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(5144, 0xEF), "Grotto Beehive", RHT_BEEHIVE_SCRUB_TRIO_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_LH_GROTTO)); + locationTable[RC_LH_GROTTO_BEEHIVE] = Location::Base(RC_LH_GROTTO_BEEHIVE, RCQUEST_BOTH, RCTYPE_BEEHIVE, RCAREA_LAKE_HYLIA, ACTOR_OBJ_COMB, SCENE_GROTTOS, TWO_ACTOR_PARAMS(5144, 0xEF), "Deku Scrub Grotto Beehive", RHT_BEEHIVE_SCRUB_TRIO_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_LH_GROTTO)); 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)); + 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), "Deku Scrub Grotto Beehive", RHT_BEEHIVE_SCRUB_PAIR_GROTTO, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BEEHIVE_COLOSSUS_GROTTO)); /*------------------------------- --- SHOPS --- diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 62c14e6ff..4a1ede8e7 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -13,795 +13,865 @@ #include "macros.h" #include "variables.h" #include +#include "StringHelper.h" +#include "soh/resource/type/Scene.h" +#include "soh/resource/type/scenecommand/SetTransitionActorList.h" +#include "src/overlays/actors/ovl_En_Door/z_en_door.h" +#include "src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h" namespace Rando { - bool Logic::HasItem(RandomizerGet itemName) { - switch (itemName) { - case RG_FAIRY_OCARINA: - return CheckInventory(ITEM_OCARINA_FAIRY, false); - case RG_OCARINA_OF_TIME: - return CheckInventory(ITEM_OCARINA_TIME, true); - case RG_DINS_FIRE: - return CheckInventory(ITEM_DINS_FIRE, true); - case RG_FARORES_WIND: - return CheckInventory(ITEM_FARORES_WIND, true); - case RG_NAYRUS_LOVE: - return CheckInventory(ITEM_NAYRUS_LOVE, true); - case RG_LENS_OF_TRUTH: - return CheckInventory(ITEM_LENS, true); - case RG_FAIRY_BOW: - return CheckInventory(ITEM_BOW, true); - case RG_MEGATON_HAMMER: - return CheckInventory(ITEM_HAMMER, true); - case RG_HOOKSHOT: - return CheckInventory(ITEM_HOOKSHOT, false); - case RG_LONGSHOT: - return CheckInventory(ITEM_LONGSHOT, true); - case RG_PROGRESSIVE_STICK_UPGRADE: - case RG_STICKS: - return CurrentUpgrade(UPG_STICKS); - case RG_FIRE_ARROWS: - return CheckInventory(ITEM_ARROW_FIRE, true); - case RG_ICE_ARROWS: - return CheckInventory(ITEM_ARROW_ICE, true); - case RG_LIGHT_ARROWS: - return CheckInventory(ITEM_ARROW_LIGHT, true); - case RG_PROGRESSIVE_BOMBCHUS: - case RG_BOMBCHU_5: - case RG_BOMBCHU_10: - case RG_BOMBCHU_20: - return (BombchusEnabled() && (GetInLogic(LOGIC_BUY_BOMBCHUS) || CouldPlayBowling || CarpetMerchant)) || CheckInventory(ITEM_BOMBCHU, true); - case RG_FAIRY_SLINGSHOT: - return CheckInventory(ITEM_SLINGSHOT, true); - case RG_BOOMERANG: - return CheckInventory(ITEM_BOOMERANG, true); - case RG_PROGRESSIVE_NUT_UPGRADE: - case RG_NUTS: - return CurrentUpgrade(UPG_NUTS); - //RANDOTODO handle cases where the scarecrow is persistent between age better when OI is added - case RG_SCARECROW: - return ScarecrowsSong() && CanUse(RG_HOOKSHOT); - case RG_DISTANT_SCARECROW: - return ScarecrowsSong() && CanUse(RG_LONGSHOT); - case RG_MAGIC_BEAN: - return GetAmmo(ITEM_BEAN) > 0; - case RG_KOKIRI_SWORD: - case RG_DEKU_SHIELD: - case RG_GORON_TUNIC: - case RG_ZORA_TUNIC: - case RG_HYLIAN_SHIELD: - case RG_MIRROR_SHIELD: - case RG_MASTER_SWORD: - case RG_BIGGORON_SWORD: - case RG_IRON_BOOTS: - case RG_HOVER_BOOTS: - return CheckEquipment(RandoGetToEquipFlag.at(itemName)); - case RG_GORONS_BRACELET: - return CurrentUpgrade(UPG_STRENGTH); - case RG_SILVER_GAUNTLETS: - return CurrentUpgrade(UPG_STRENGTH) >= 2; - case RG_GOLDEN_GAUNTLETS: - return CurrentUpgrade(UPG_STRENGTH) >= 3; - case RG_PROGRESSIVE_BOMB_BAG: - case RG_BOMB_BAG: - return CurrentUpgrade(UPG_BOMB_BAG); - case RG_MAGIC_SINGLE: - return GetSaveContext()->magicLevel >= 1; - // Songs - case RG_ZELDAS_LULLABY: - case RG_EPONAS_SONG: - case RG_SARIAS_SONG: - case RG_SUNS_SONG: - case RG_SONG_OF_TIME: - case RG_SONG_OF_STORMS: - case RG_MINUET_OF_FOREST: - case RG_BOLERO_OF_FIRE: - case RG_SERENADE_OF_WATER: - case RG_REQUIEM_OF_SPIRIT: - case RG_NOCTURNE_OF_SHADOW: - case RG_PRELUDE_OF_LIGHT: - // Dungeon Rewards - case RG_KOKIRI_EMERALD: - case RG_GORON_RUBY: - case RG_ZORA_SAPPHIRE: - case RG_FOREST_MEDALLION: - case RG_FIRE_MEDALLION: - case RG_WATER_MEDALLION: - case RG_SPIRIT_MEDALLION: - case RG_SHADOW_MEDALLION: - case RG_LIGHT_MEDALLION: - // Misc Quest Items - case RG_STONE_OF_AGONY: - case RG_GERUDO_MEMBERSHIP_CARD: - return CheckQuestItem(RandoGetToQuestItem.at(itemName)); - case RG_RUTOS_LETTER: - return CheckEventChkInf(EVENTCHKINF_OBTAINED_RUTOS_LETTER); - case RG_DOUBLE_DEFENSE: - return GetSaveContext()->isDoubleDefenseAcquired; - case RG_FISHING_POLE: - case RG_ZELDAS_LETTER: - case RG_WEIRD_EGG: - case RG_GREG_RUPEE: - // Ocarina Buttons - case RG_OCARINA_A_BUTTON: - case RG_OCARINA_C_LEFT_BUTTON: - case RG_OCARINA_C_RIGHT_BUTTON: - case RG_OCARINA_C_DOWN_BUTTON: - case RG_OCARINA_C_UP_BUTTON: - // Boss Souls - case RG_GOHMA_SOUL: - case RG_KING_DODONGO_SOUL: - case RG_BARINADE_SOUL: - case RG_PHANTOM_GANON_SOUL: - case RG_VOLVAGIA_SOUL: - case RG_MORPHA_SOUL: - case RG_BONGO_BONGO_SOUL: - case RG_TWINROVA_SOUL: - case RG_GANON_SOUL: - case RG_SKELETON_KEY: - // Overworld Keys - case RG_GUARD_HOUSE_KEY: - case RG_MARKET_BAZAAR_KEY: - case RG_MARKET_POTION_SHOP_KEY: - case RG_MASK_SHOP_KEY: - case RG_MARKET_SHOOTING_GALLERY_KEY: - case RG_BOMBCHU_BOWLING_KEY: - case RG_TREASURE_CHEST_GAME_BUILDING_KEY: - case RG_BOMBCHU_SHOP_KEY: - case RG_RICHARDS_HOUSE_KEY: - case RG_ALLEY_HOUSE_KEY: - case RG_KAK_BAZAAR_KEY: - case RG_KAK_POTION_SHOP_KEY: - case RG_BOSS_HOUSE_KEY: - case RG_GRANNYS_POTION_SHOP_KEY: - case RG_SKULLTULA_HOUSE_KEY: - case RG_IMPAS_HOUSE_KEY: - case RG_WINDMILL_KEY: - case RG_KAK_SHOOTING_GALLERY_KEY: - case RG_DAMPES_HUT_KEY: - case RG_TALONS_HOUSE_KEY: - case RG_STABLES_KEY: - case RG_BACK_TOWER_KEY: - case RG_HYLIA_LAB_KEY: - case RG_FISHING_HOLE_KEY: - return CheckRandoInf(RandoGetToRandInf.at(itemName)); - // Boss Keys - case RG_EPONA: - return FreedEpona; - case RG_FOREST_TEMPLE_BOSS_KEY: - case RG_FIRE_TEMPLE_BOSS_KEY: - case RG_WATER_TEMPLE_BOSS_KEY: - case RG_SPIRIT_TEMPLE_BOSS_KEY: - case RG_SHADOW_TEMPLE_BOSS_KEY: - case RG_GANONS_CASTLE_BOSS_KEY: - return CheckDungeonItem(DUNGEON_KEY_BOSS, RandoGetToDungeonScene.at(itemName)); - // Maps - case RG_DEKU_TREE_MAP: - case RG_DODONGOS_CAVERN_MAP: - case RG_JABU_JABUS_BELLY_MAP: - case RG_FOREST_TEMPLE_MAP: - case RG_FIRE_TEMPLE_MAP: - case RG_WATER_TEMPLE_MAP: - case RG_SPIRIT_TEMPLE_MAP: - case RG_SHADOW_TEMPLE_MAP: - case RG_BOTTOM_OF_THE_WELL_MAP: - case RG_ICE_CAVERN_MAP: - return CheckDungeonItem(DUNGEON_MAP, RandoGetToDungeonScene.at(itemName)); - // Compasses - case RG_DEKU_TREE_COMPASS: - case RG_DODONGOS_CAVERN_COMPASS: - case RG_JABU_JABUS_BELLY_COMPASS: - case RG_FOREST_TEMPLE_COMPASS: - case RG_FIRE_TEMPLE_COMPASS: - case RG_WATER_TEMPLE_COMPASS: - case RG_SPIRIT_TEMPLE_COMPASS: - case RG_SHADOW_TEMPLE_COMPASS: - case RG_BOTTOM_OF_THE_WELL_COMPASS: - case RG_ICE_CAVERN_COMPASS: - return CheckDungeonItem(DUNGEON_COMPASS, RandoGetToDungeonScene.at(itemName)); - // Wallets - case RG_CHILD_WALLET: - return CheckRandoInf(RAND_INF_HAS_WALLET); - case RG_ADULT_WALLET: - return CurrentUpgrade(UPG_WALLET) >= 1; - case RG_GIANT_WALLET: - return CurrentUpgrade(UPG_WALLET) >= 2; - case RG_TYCOON_WALLET: - return CurrentUpgrade(UPG_WALLET) >= 3; - // Scales - case RG_BRONZE_SCALE: - return CheckRandoInf(RAND_INF_CAN_SWIM); - case RG_SILVER_SCALE: - return CurrentUpgrade(UPG_SCALE) >= 1; - case RG_GOLDEN_SCALE: - return CurrentUpgrade(UPG_SCALE) >= 2; - case RG_POCKET_EGG: - case RG_COJIRO: - case RG_ODD_MUSHROOM: - case RG_ODD_POTION: - case RG_POACHERS_SAW: - case RG_BROKEN_SWORD: - case RG_PRESCRIPTION: - case RG_EYEBALL_FROG: - case RG_EYEDROPS: - case RG_CLAIM_CHECK: - 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: - case RG_BOTTLE_WITH_BUGS: - case RG_BOTTLE_WITH_FAIRY: - case RG_BOTTLE_WITH_FISH: - case RG_BOTTLE_WITH_GREEN_POTION: - case RG_BOTTLE_WITH_MILK: - case RG_BOTTLE_WITH_POE: - case RG_BOTTLE_WITH_RED_POTION: - case RG_EMPTY_BOTTLE: - return HasBottle(); - default: - break; - } - SPDLOG_ERROR("HasItem reached `return false;`. Missing case for RandomizerGet of {}", static_cast(itemName)); - assert(false); - return false; - } - - //Can the passed in item be used? - //RANDOTODO catch magic items explicitly and add an assert on miss. - bool Logic::CanUse(RandomizerGet itemName) { - if (!HasItem(itemName)) - return false; - - switch (itemName) { - // Magic items - case RG_MAGIC_SINGLE: - return AmmoCanDrop || (HasBottle() && GetInLogic(LOGIC_BUY_MAGIC_POTION)); - case RG_DINS_FIRE: - case RG_FARORES_WIND: - case RG_NAYRUS_LOVE: - case RG_LENS_OF_TRUTH: - return CanUse(RG_MAGIC_SINGLE); - case RG_FIRE_ARROWS: - case RG_ICE_ARROWS: - case RG_LIGHT_ARROWS: - return CanUse(RG_MAGIC_SINGLE) && CanUse(RG_FAIRY_BOW); - - // Adult items - // TODO: Uncomment those if we ever implement more item usability settings - case RG_FAIRY_BOW: - return IsAdult && (AmmoCanDrop || GetInLogic(LOGIC_BUY_ARROW));// || BowAsChild; - case RG_MEGATON_HAMMER: - return IsAdult;// || HammerAsChild; - case RG_IRON_BOOTS: - return IsAdult;// || IronBootsAsChild; - case RG_HOVER_BOOTS: - return IsAdult;// || HoverBootsAsChild; - case RG_HOOKSHOT: - case RG_LONGSHOT: - case RG_SCARECROW: - case RG_DISTANT_SCARECROW: - return IsAdult;// || HookshotAsChild; - case RG_GORON_TUNIC: - return IsAdult;// || GoronTunicAsChild; - case RG_ZORA_TUNIC: - return IsAdult;// || ZoraTunicAsChild; - case RG_MIRROR_SHIELD: - return IsAdult;// || MirrorShieldAsChild; - case RG_MASTER_SWORD: - return IsAdult;// || MasterSwordAsChild; - case RG_BIGGORON_SWORD: - return IsAdult;// || BiggoronSwordAsChild; - case RG_SILVER_GAUNTLETS: - case RG_GOLDEN_GAUNTLETS: - // Adult Trade - case RG_POCKET_EGG: - case RG_COJIRO: - case RG_ODD_MUSHROOM: - case RG_ODD_POTION: - case RG_POACHERS_SAW: - case RG_BROKEN_SWORD: - case RG_PRESCRIPTION: - case RG_EYEBALL_FROG: - case RG_EYEDROPS: - case RG_CLAIM_CHECK: - return IsAdult; - - // Child items - case RG_FAIRY_SLINGSHOT: - return IsChild && (AmmoCanDrop || GetInLogic(LOGIC_BUY_SEED));// || SlingshotAsAdult; - case RG_BOOMERANG: - return IsChild;// || BoomerangAsAdult; - case RG_KOKIRI_SWORD: - return IsChild;// || KokiriSwordAsAdult; - case RG_NUTS: - return (NutPot || NutCrate || DekuBabaNuts) && AmmoCanDrop; //RANDOTODO BuyNuts currently mixed in with Nuts, should be seperate as BuyNuts are also a Nuts source - case RG_STICKS: - return IsChild /* || StickAsAdult;*/&& (StickPot || DekuBabaSticks); - case RG_DEKU_SHIELD: - return IsChild;// || DekuShieldAsAdult; - case RG_PROGRESSIVE_BOMB_BAG: - case RG_BOMB_BAG: - return AmmoCanDrop || GetInLogic(LOGIC_BUY_BOMB); - case RG_PROGRESSIVE_BOMBCHUS: - case RG_BOMBCHU_5: - case RG_BOMBCHU_10: - case RG_BOMBCHU_20: - return BombchuRefill() && BombchusEnabled(); - case RG_WEIRD_EGG: - case RG_RUTOS_LETTER: - return IsChild; - case RG_MAGIC_BEAN: - return IsChild; - +bool Logic::HasItem(RandomizerGet itemName) { + switch (itemName) { + case RG_FAIRY_OCARINA: + return CheckInventory(ITEM_OCARINA_FAIRY, false); + case RG_OCARINA_OF_TIME: + return CheckInventory(ITEM_OCARINA_TIME, true); + case RG_DINS_FIRE: + return CheckInventory(ITEM_DINS_FIRE, true); + case RG_FARORES_WIND: + return CheckInventory(ITEM_FARORES_WIND, true); + case RG_NAYRUS_LOVE: + return CheckInventory(ITEM_NAYRUS_LOVE, true); + case RG_LENS_OF_TRUTH: + return CheckInventory(ITEM_LENS, true); + case RG_FAIRY_BOW: + return CheckInventory(ITEM_BOW, true); + case RG_MEGATON_HAMMER: + return CheckInventory(ITEM_HAMMER, true); + case RG_HOOKSHOT: + return CheckInventory(ITEM_HOOKSHOT, false); + case RG_LONGSHOT: + return CheckInventory(ITEM_LONGSHOT, true); + case RG_PROGRESSIVE_STICK_UPGRADE: + case RG_STICKS: + return CurrentUpgrade(UPG_STICKS); + case RG_FIRE_ARROWS: + return CheckInventory(ITEM_ARROW_FIRE, true); + case RG_ICE_ARROWS: + return CheckInventory(ITEM_ARROW_ICE, true); + case RG_LIGHT_ARROWS: + return CheckInventory(ITEM_ARROW_LIGHT, true); + case RG_PROGRESSIVE_BOMBCHUS: + case RG_BOMBCHU_5: + case RG_BOMBCHU_10: + case RG_BOMBCHU_20: + return (BombchusEnabled() && (GetInLogic(LOGIC_BUY_BOMBCHUS) || CouldPlayBowling || CarpetMerchant)) || + CheckInventory(ITEM_BOMBCHU, true); + case RG_FAIRY_SLINGSHOT: + return CheckInventory(ITEM_SLINGSHOT, true); + case RG_BOOMERANG: + return CheckInventory(ITEM_BOOMERANG, true); + case RG_PROGRESSIVE_NUT_UPGRADE: + case RG_NUTS: + return CurrentUpgrade(UPG_NUTS); + // RANDOTODO handle cases where the scarecrow is persistent between age better when OI is added + case RG_SCARECROW: + return ScarecrowsSong() && CanUse(RG_HOOKSHOT); + case RG_DISTANT_SCARECROW: + return ScarecrowsSong() && CanUse(RG_LONGSHOT); + case RG_MAGIC_BEAN: + return GetAmmo(ITEM_BEAN) > 0; + case RG_KOKIRI_SWORD: + case RG_DEKU_SHIELD: + case RG_GORON_TUNIC: + case RG_ZORA_TUNIC: + case RG_HYLIAN_SHIELD: + case RG_MIRROR_SHIELD: + case RG_MASTER_SWORD: + case RG_BIGGORON_SWORD: + case RG_IRON_BOOTS: + case RG_HOVER_BOOTS: + return CheckEquipment(RandoGetToEquipFlag.at(itemName)); + case RG_GORONS_BRACELET: + return CurrentUpgrade(UPG_STRENGTH); + case RG_SILVER_GAUNTLETS: + return CurrentUpgrade(UPG_STRENGTH) >= 2; + case RG_GOLDEN_GAUNTLETS: + return CurrentUpgrade(UPG_STRENGTH) >= 3; + case RG_PROGRESSIVE_BOMB_BAG: + case RG_BOMB_BAG: + return CurrentUpgrade(UPG_BOMB_BAG); + case RG_MAGIC_SINGLE: + return GetSaveContext()->magicLevel >= 1 || GetSaveContext()->isMagicAcquired; // Songs - case RG_ZELDAS_LULLABY: - case RG_EPONAS_SONG: - case RG_PRELUDE_OF_LIGHT: - return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_C_LEFT_BUTTON) && HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON); - case RG_SARIAS_SONG: - return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_C_LEFT_BUTTON) && HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_DOWN_BUTTON); - case RG_SUNS_SONG: - return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON) && HasItem(RG_OCARINA_C_DOWN_BUTTON); - case RG_SONG_OF_TIME: - case RG_BOLERO_OF_FIRE: - case RG_REQUIEM_OF_SPIRIT: - return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_A_BUTTON) && HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_DOWN_BUTTON); - case RG_SONG_OF_STORMS: - return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_A_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON) && HasItem(RG_OCARINA_C_DOWN_BUTTON); - case RG_MINUET_OF_FOREST: - return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_A_BUTTON) && HasItem(RG_OCARINA_C_LEFT_BUTTON) && HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON); - case RG_SERENADE_OF_WATER: - case RG_NOCTURNE_OF_SHADOW: - return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_A_BUTTON) && HasItem(RG_OCARINA_C_LEFT_BUTTON) && HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_DOWN_BUTTON); - - // Misc. Items - case RG_FISHING_POLE: - return HasItem(RG_CHILD_WALLET); // as long as you have enough rubies - case RG_EPONA: - return IsAdult && CanUse(RG_EPONAS_SONG); - - // Bottle Items - case RG_BOTTLE_WITH_BUGS: - return BugShrub || WanderingBugs || BugRock || GetInLogic(LOGIC_BUGS_ACCESS); - case RG_BOTTLE_WITH_FISH: - return LoneFish || FishGroup || GetInLogic(LOGIC_FISH_ACCESS); //is there any need to care about lone vs group? - case RG_BOTTLE_WITH_BLUE_FIRE: //RANDOTODO should probably be better named - return BlueFireAccess || GetInLogic(LOGIC_BLUE_FIRE_ACCESS); - case RG_BOTTLE_WITH_FAIRY: - return FairyPot || GossipStoneFairy || BeanPlantFairy || ButterflyFairy || FreeFairies || FairyPond || GetInLogic(LOGIC_FAIRY_ACCESS); - - default: - SPDLOG_ERROR("CanUse reached `default` for {}. Assuming intention is no extra requirements for use so returning true, but HasItem should be used instead.", static_cast(itemName)); - assert(false); - return true; - } + case RG_ZELDAS_LULLABY: + case RG_EPONAS_SONG: + case RG_SARIAS_SONG: + case RG_SUNS_SONG: + case RG_SONG_OF_TIME: + case RG_SONG_OF_STORMS: + case RG_MINUET_OF_FOREST: + case RG_BOLERO_OF_FIRE: + case RG_SERENADE_OF_WATER: + case RG_REQUIEM_OF_SPIRIT: + case RG_NOCTURNE_OF_SHADOW: + case RG_PRELUDE_OF_LIGHT: + // Dungeon Rewards + case RG_KOKIRI_EMERALD: + case RG_GORON_RUBY: + case RG_ZORA_SAPPHIRE: + case RG_FOREST_MEDALLION: + case RG_FIRE_MEDALLION: + case RG_WATER_MEDALLION: + case RG_SPIRIT_MEDALLION: + case RG_SHADOW_MEDALLION: + case RG_LIGHT_MEDALLION: + // Misc Quest Items + case RG_STONE_OF_AGONY: + case RG_GERUDO_MEMBERSHIP_CARD: + return CheckQuestItem(RandoGetToQuestItem.at(itemName)); + case RG_RUTOS_LETTER: + return CheckEventChkInf(EVENTCHKINF_OBTAINED_RUTOS_LETTER); + case RG_DOUBLE_DEFENSE: + return GetSaveContext()->isDoubleDefenseAcquired; + case RG_FISHING_POLE: + case RG_ZELDAS_LETTER: + case RG_WEIRD_EGG: + case RG_GREG_RUPEE: + // Ocarina Buttons + case RG_OCARINA_A_BUTTON: + case RG_OCARINA_C_LEFT_BUTTON: + case RG_OCARINA_C_RIGHT_BUTTON: + case RG_OCARINA_C_DOWN_BUTTON: + case RG_OCARINA_C_UP_BUTTON: + // Boss Souls + case RG_GOHMA_SOUL: + case RG_KING_DODONGO_SOUL: + case RG_BARINADE_SOUL: + case RG_PHANTOM_GANON_SOUL: + case RG_VOLVAGIA_SOUL: + case RG_MORPHA_SOUL: + case RG_BONGO_BONGO_SOUL: + case RG_TWINROVA_SOUL: + case RG_GANON_SOUL: + case RG_SKELETON_KEY: + // Overworld Keys + case RG_GUARD_HOUSE_KEY: + case RG_MARKET_BAZAAR_KEY: + case RG_MARKET_POTION_SHOP_KEY: + case RG_MASK_SHOP_KEY: + case RG_MARKET_SHOOTING_GALLERY_KEY: + case RG_BOMBCHU_BOWLING_KEY: + case RG_TREASURE_CHEST_GAME_BUILDING_KEY: + case RG_BOMBCHU_SHOP_KEY: + case RG_RICHARDS_HOUSE_KEY: + case RG_ALLEY_HOUSE_KEY: + case RG_KAK_BAZAAR_KEY: + case RG_KAK_POTION_SHOP_KEY: + case RG_BOSS_HOUSE_KEY: + case RG_GRANNYS_POTION_SHOP_KEY: + case RG_SKULLTULA_HOUSE_KEY: + case RG_IMPAS_HOUSE_KEY: + case RG_WINDMILL_KEY: + case RG_KAK_SHOOTING_GALLERY_KEY: + case RG_DAMPES_HUT_KEY: + case RG_TALONS_HOUSE_KEY: + case RG_STABLES_KEY: + case RG_BACK_TOWER_KEY: + case RG_HYLIA_LAB_KEY: + case RG_FISHING_HOLE_KEY: + return CheckRandoInf(RandoGetToRandInf.at(itemName)); + // Boss Keys + case RG_EPONA: + return FreedEpona; + case RG_FOREST_TEMPLE_BOSS_KEY: + case RG_FIRE_TEMPLE_BOSS_KEY: + case RG_WATER_TEMPLE_BOSS_KEY: + case RG_SPIRIT_TEMPLE_BOSS_KEY: + case RG_SHADOW_TEMPLE_BOSS_KEY: + case RG_GANONS_CASTLE_BOSS_KEY: + return CheckDungeonItem(DUNGEON_KEY_BOSS, RandoGetToDungeonScene.at(itemName)); + // Maps + case RG_DEKU_TREE_MAP: + case RG_DODONGOS_CAVERN_MAP: + case RG_JABU_JABUS_BELLY_MAP: + case RG_FOREST_TEMPLE_MAP: + case RG_FIRE_TEMPLE_MAP: + case RG_WATER_TEMPLE_MAP: + case RG_SPIRIT_TEMPLE_MAP: + case RG_SHADOW_TEMPLE_MAP: + case RG_BOTTOM_OF_THE_WELL_MAP: + case RG_ICE_CAVERN_MAP: + return CheckDungeonItem(DUNGEON_MAP, RandoGetToDungeonScene.at(itemName)); + // Compasses + case RG_DEKU_TREE_COMPASS: + case RG_DODONGOS_CAVERN_COMPASS: + case RG_JABU_JABUS_BELLY_COMPASS: + case RG_FOREST_TEMPLE_COMPASS: + case RG_FIRE_TEMPLE_COMPASS: + case RG_WATER_TEMPLE_COMPASS: + case RG_SPIRIT_TEMPLE_COMPASS: + case RG_SHADOW_TEMPLE_COMPASS: + case RG_BOTTOM_OF_THE_WELL_COMPASS: + case RG_ICE_CAVERN_COMPASS: + return CheckDungeonItem(DUNGEON_COMPASS, RandoGetToDungeonScene.at(itemName)); + // Wallets + case RG_CHILD_WALLET: + return CheckRandoInf(RAND_INF_HAS_WALLET); + case RG_ADULT_WALLET: + return CurrentUpgrade(UPG_WALLET) >= 1; + case RG_GIANT_WALLET: + return CurrentUpgrade(UPG_WALLET) >= 2; + case RG_TYCOON_WALLET: + return CurrentUpgrade(UPG_WALLET) >= 3; + // Scales + case RG_BRONZE_SCALE: + return CheckRandoInf(RAND_INF_CAN_SWIM); + case RG_SILVER_SCALE: + return CurrentUpgrade(UPG_SCALE) >= 1; + case RG_GOLDEN_SCALE: + return CurrentUpgrade(UPG_SCALE) >= 2; + case RG_POCKET_EGG: + return CheckRandoInf(RAND_INF_ADULT_TRADES_HAS_POCKET_EGG); + case RG_COJIRO: + case RG_ODD_MUSHROOM: + case RG_ODD_POTION: + case RG_POACHERS_SAW: + case RG_BROKEN_SWORD: + case RG_PRESCRIPTION: + case RG_EYEBALL_FROG: + case RG_EYEDROPS: + case RG_CLAIM_CHECK: + return CheckRandoInf(itemName - RG_COJIRO + RAND_INF_ADULT_TRADES_HAS_COJIRO); + case RG_BOTTLE_WITH_BIG_POE: + case RG_BOTTLE_WITH_BLUE_FIRE: + case RG_BOTTLE_WITH_BLUE_POTION: + case RG_BOTTLE_WITH_BUGS: + case RG_BOTTLE_WITH_FAIRY: + case RG_BOTTLE_WITH_FISH: + case RG_BOTTLE_WITH_GREEN_POTION: + case RG_BOTTLE_WITH_MILK: + case RG_BOTTLE_WITH_POE: + case RG_BOTTLE_WITH_RED_POTION: + case RG_EMPTY_BOTTLE: + return HasBottle(); + default: + break; } + SPDLOG_ERROR("HasItem reached `return false;`. Missing case for RandomizerGet of {}", + static_cast(itemName)); + assert(false); + return false; +} - bool Logic::HasProjectile(HasProjectileAge age) { - return HasExplosives() || - (age == HasProjectileAge::Child && (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG))) || - (age == HasProjectileAge::Adult && (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW) )) || - (age == HasProjectileAge::Both && (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG)) && (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW))) || - (age == HasProjectileAge::Either && (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG) || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW))); - } - - bool Logic::HasBossSoul(RandomizerGet itemName) { - if (!ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS)) { - return true; - } - switch(itemName) { - case RG_GOHMA_SOUL: - case RG_KING_DODONGO_SOUL: - case RG_BARINADE_SOUL: - case RG_PHANTOM_GANON_SOUL: - case RG_VOLVAGIA_SOUL: - case RG_MORPHA_SOUL: - case RG_BONGO_BONGO_SOUL: - case RG_TWINROVA_SOUL: - return HasItem(itemName); - case RG_GANON_SOUL: - return ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).Is(RO_BOSS_SOULS_ON_PLUS_GANON) ? HasItem(RG_GANON_SOUL) : true; - default: - return false; - } - } - - bool Logic::CanOpenOverworldDoor(RandomizerGet key) { - if (!ctx->GetOption(RSK_LOCK_OVERWORLD_DOORS)) { - return true; - } - - if (HasItem(RG_SKELETON_KEY)) { - return true; - } - - return HasItem(key); - } - - uint8_t GetDifficultyValueFromString(Rando::Option& glitchOption) { - return 0; - } - - //todo rewrite glitch section - - bool Logic::CanEquipSwap(RandomizerGet itemName) { - if (!HasItem(itemName)) - return false; - - if (CanDoGlitch(GlitchType::EquipSwapDins) || CanDoGlitch(GlitchType::EquipSwap)) - return true; - +// Can the passed in item be used? +// RANDOTODO catch magic items explicitly and add an assert on miss. +bool Logic::CanUse(RandomizerGet itemName) { + if (!HasItem(itemName)) return false; - } - bool Logic::CanDoGlitch(GlitchType glitch) { - // TODO: Uncomment when glitches are implemented - switch(glitch) { - case GlitchType::EquipSwapDins: - return ((IsAdult && HasItem(RG_DINS_FIRE)) || (IsChild && (HasItem(RG_STICKS) || HasItem(RG_DINS_FIRE)))) && false; //GlitchEquipSwapDins; - case GlitchType::EquipSwap: // todo: add bunny hood to adult item equippable list and child trade item to child item equippable list - return ((IsAdult && (HasItem(RG_DINS_FIRE) || HasItem(RG_FARORES_WIND) || HasItem(RG_NAYRUS_LOVE))) || (IsChild && (HasItem(RG_STICKS) || - HasItem(RG_FAIRY_SLINGSHOT) || HasItem(RG_BOOMERANG) || HasBottle() || CanUse(RG_NUTS) || HasItem(RG_FAIRY_OCARINA) || HasItem(RG_LENS_OF_TRUTH) || HasExplosives() || - GetAmmo(ITEM_BEAN) > 0 || HasItem(RG_DINS_FIRE) || HasItem(RG_FARORES_WIND) || HasItem(RG_NAYRUS_LOVE)))) && false; //GlitchEquipSwap; - } + switch (itemName) { + // Magic items + case RG_MAGIC_SINGLE: + return AmmoCanDrop || (HasBottle() && GetInLogic(LOGIC_BUY_MAGIC_POTION)); + case RG_DINS_FIRE: + case RG_FARORES_WIND: + case RG_NAYRUS_LOVE: + case RG_LENS_OF_TRUTH: + return CanUse(RG_MAGIC_SINGLE); + case RG_FIRE_ARROWS: + case RG_ICE_ARROWS: + case RG_LIGHT_ARROWS: + return CanUse(RG_MAGIC_SINGLE) && CanUse(RG_FAIRY_BOW); - //Shouldn't be reached - return false; - } + // Adult items + // TODO: Uncomment those if we ever implement more item usability settings + case RG_FAIRY_BOW: + return IsAdult && (AmmoCanDrop || GetInLogic(LOGIC_BUY_ARROW)); // || BowAsChild; + case RG_MEGATON_HAMMER: + return IsAdult; // || HammerAsChild; + case RG_IRON_BOOTS: + return IsAdult; // || IronBootsAsChild; + case RG_HOVER_BOOTS: + return IsAdult; // || HoverBootsAsChild; + case RG_HOOKSHOT: + case RG_LONGSHOT: + case RG_SCARECROW: + case RG_DISTANT_SCARECROW: + return IsAdult; // || HookshotAsChild; + case RG_GORON_TUNIC: + return IsAdult; // || GoronTunicAsChild; + case RG_ZORA_TUNIC: + return IsAdult; // || ZoraTunicAsChild; + case RG_MIRROR_SHIELD: + return IsAdult; // || MirrorShieldAsChild; + case RG_MASTER_SWORD: + return IsAdult; // || MasterSwordAsChild; + case RG_BIGGORON_SWORD: + return IsAdult; // || BiggoronSwordAsChild; + case RG_SILVER_GAUNTLETS: + case RG_GOLDEN_GAUNTLETS: + // Adult Trade + case RG_POCKET_EGG: + case RG_COJIRO: + case RG_ODD_MUSHROOM: + case RG_ODD_POTION: + case RG_POACHERS_SAW: + case RG_BROKEN_SWORD: + case RG_PRESCRIPTION: + case RG_EYEBALL_FROG: + case RG_EYEDROPS: + case RG_CLAIM_CHECK: + return IsAdult; -//RANDOTODO quantity is a placeholder for proper ammo use calculation logic. in time will want updating to account for ammo capacity -//Can we kill this enemy - bool Logic::CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wallOrFloor, uint8_t quantity, bool timer, bool inWater) { - bool killed = false; - switch(enemy) { - case RE_GOLD_SKULLTULA: - switch (distance){ - case ED_CLOSE: - //hammer jumpslash cannot damage these, but hammer swing can - killed = CanUse(RG_MEGATON_HAMMER); - [[fallthrough]]; - case ED_SHORT_JUMPSLASH: - killed = killed || CanUse(RG_KOKIRI_SWORD); - [[fallthrough]]; - case ED_MASTER_SWORD_JUMPSLASH: - killed = killed || CanUse(RG_MASTER_SWORD); - [[fallthrough]]; - case ED_LONG_JUMPSLASH: - killed = killed || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); - [[fallthrough]]; - case ED_BOMB_THROW: - killed = killed || CanUse(RG_BOMB_BAG); - [[fallthrough]]; - case ED_BOOMERANG: - killed = killed || CanUse(RG_BOOMERANG) || CanUse(RG_DINS_FIRE); - [[fallthrough]]; - case ED_HOOKSHOT: - //RANDOTODO test dins and chu range in a practical example - killed = killed || CanUse(RG_HOOKSHOT); - [[fallthrough]]; - case ED_LONGSHOT: - killed = killed || CanUse(RG_LONGSHOT) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); - [[fallthrough]]; - case ED_FAR: - killed = killed || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); - break; - } - return killed; - case RE_GOHMA_LARVA: - case RE_MAD_SCRUB: - case RE_DEKU_BABA: - return CanAttack(); - case RE_BIG_SKULLTULA: - switch (distance){ - case ED_CLOSE: - //hammer jumpslash cannot damage these, but hammer swing can - killed = CanUse(RG_MEGATON_HAMMER); - [[fallthrough]]; - case ED_SHORT_JUMPSLASH: - killed = killed || CanUse(RG_KOKIRI_SWORD); - [[fallthrough]]; - case ED_MASTER_SWORD_JUMPSLASH: - killed = killed || CanUse(RG_MASTER_SWORD); - [[fallthrough]]; - case ED_LONG_JUMPSLASH: - killed = killed || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); - [[fallthrough]]; - case ED_BOMB_THROW: - killed = killed || CanUse(RG_BOMB_BAG); - [[fallthrough]]; - case ED_BOOMERANG: - //RANDOTODO test dins and chu range in a practical example - killed = killed || CanUse(RG_DINS_FIRE); - [[fallthrough]]; - case ED_HOOKSHOT: - //RANDOTODO test dins and chu range in a practical example - killed = killed || CanUse(RG_HOOKSHOT) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); - [[fallthrough]]; - case ED_LONGSHOT: - killed = killed || CanUse(RG_LONGSHOT); - [[fallthrough]]; - case ED_FAR: - killed = killed || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); - break; - } - return killed; - case RE_DODONGO: - 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: - case RE_FIRE_KEESE: - switch (distance){ - case ED_CLOSE: - case ED_SHORT_JUMPSLASH: - killed = CanUse(RG_MEGATON_HAMMER) || CanUse(RG_KOKIRI_SWORD); - [[fallthrough]]; - case ED_MASTER_SWORD_JUMPSLASH: - killed = killed || CanUse(RG_MASTER_SWORD); - [[fallthrough]]; - case ED_LONG_JUMPSLASH: - killed = killed || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); - [[fallthrough]]; - case ED_BOMB_THROW: - //RANDOTODO test dins and chu range in a practical example - killed = killed || (!inWater && CanUse(RG_BOMB_BAG)); - [[fallthrough]]; - case ED_BOOMERANG: - //RANDOTODO test dins and chu range in a practical example - killed = killed || CanUse(RG_BOOMERANG); - [[fallthrough]]; - case ED_HOOKSHOT: - //RANDOTODO test dins, bomb and chu range in a practical example - killed = killed || CanUse(RG_HOOKSHOT) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); - [[fallthrough]]; - case ED_LONGSHOT: - killed = killed || CanUse(RG_LONGSHOT); - [[fallthrough]]; - case ED_FAR: - killed = killed || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); - break; - } - return killed; - case RE_BLUE_BUBBLE: - //RANDOTODO Trick to use shield hylian shield as child to stun these guys - //RANDOTODO check hammer damage - return BlastOrSmash() || CanUse(RG_FAIRY_BOW) || ((CanJumpslashExceptHammer() || CanUse(RG_FAIRY_SLINGSHOT)) && (CanUse(RG_NUTS) || HookshotOrBoomerang() || CanStandingShield())); - case RE_DEAD_HAND: - //RANDOTODO change Dead Hand trick to be sticks Dead Hand - return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || (CanUse(RG_STICKS) && ctx->GetTrickOption(RT_BOTW_CHILD_DEADHAND)); - case RE_WITHERED_DEKU_BABA: - return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG); - case RE_LIKE_LIKE: - case RE_FLOORMASTER: - return CanDamage(); - case RE_STALFOS: - //RANDOTODO Add trick to kill stalfos with sticks, and a second one for bombs without stunning. Higher ammo logic for bombs is also plausible - switch (distance){ - case ED_CLOSE: - case ED_SHORT_JUMPSLASH: - killed = CanUse(RG_MEGATON_HAMMER) || CanUse(RG_KOKIRI_SWORD); - [[fallthrough]]; - case ED_MASTER_SWORD_JUMPSLASH: - killed = killed || CanUse(RG_MASTER_SWORD); - [[fallthrough]]; - case ED_LONG_JUMPSLASH: - killed = killed || CanUse(RG_BIGGORON_SWORD) || (quantity <= 1 && CanUse(RG_STICKS)); - [[fallthrough]]; - case ED_BOMB_THROW: - killed = killed || (quantity <= 2 && !timer && !inWater && (CanUse(RG_NUTS) || HookshotOrBoomerang()) && CanUse(RG_BOMB_BAG)); - [[fallthrough]]; - case ED_BOOMERANG: - case ED_HOOKSHOT: - //RANDOTODO test dins and chu range in a practical example - killed = killed || (wallOrFloor && CanUse(RG_BOMBCHU_5)); - [[fallthrough]]; - case ED_LONGSHOT: - case ED_FAR: - killed = killed || CanUse(RG_FAIRY_BOW); - break; - } - return killed; - //Needs 16 bombs, but is in default logic in N64, probably because getting the hits is quite easy. - //bow and sling can wake them and damage after they shed their armour, so could reduce ammo requirements for explosives to 10. - //requires 8 sticks to kill so would be a trick unless we apply higher stick bag logic - case RE_IRON_KNUCKLE: - return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_MEGATON_HAMMER) || HasExplosives(); - //To stun flare dancer with chus, you have to hit the flame under it while it is spinning. It should eventually return to spinning after dashing for a while if you miss the window - //it is possible to damage the core with explosives, but difficult to get all 4 hits in even with chus, and if it reconstructs the core heals, so it would be a trick. - //the core takes damage from hookshot even if it doesn't show - //Dins killing isn't hard, but is obscure and tight on single magic, so is a trick - case RE_FLARE_DANCER: - return CanUse(RG_MEGATON_HAMMER) || CanUse(RG_HOOKSHOT) || (HasExplosives() && (CanJumpslashExceptHammer() || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG))); - case RE_WOLFOS: - case RE_WHITE_WOLFOS: - case RE_WALLMASTER: - return CanJumpslash() || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOMBCHU_5) || CanUse(RG_DINS_FIRE) || (CanUse(RG_BOMB_BAG) && (CanUse(RG_NUTS) || CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG))); - case RE_GERUDO_WARRIOR: - return CanJumpslash() || CanUse(RG_FAIRY_BOW) || (ctx->GetTrickOption(RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON) && (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOMBCHU_5))); - case RE_GIBDO: - case RE_REDEAD: - return CanJumpslash() || CanUse(RG_DINS_FIRE); - case RE_MEG: - return CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || HasExplosives(); - case RE_ARMOS: - return BlastOrSmash() || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS) || CanUse(RG_FAIRY_BOW) || ((CanUse(RG_NUTS) || CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG)) && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_FAIRY_SLINGSHOT))); - case RE_GREEN_BUBBLE: - //does not technically need to be stunned to kill with dins, but the flame must be off and timing it is awkward - //Also they don't trigger the kill room in ganons MQ if they die from dins? Vanilla bug? - return CanJumpslash() || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || HasExplosives()/* || (CanUse(RG_DINS_FIRE) && (CanUse(RG_NUTS) || CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG)))*/; - case RE_DINOLFOS: - //stunning + bombs is possible but painful, as it loves to dodge the bombs and hookshot. it also dodges chus but if you cook it so it detonates under the dodge it usually gets caught on landing - return CanJumpslash() || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || (!timer && CanUse(RG_BOMBCHU_5)); - case RE_TORCH_SLUG: - 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: - switch (distance){ - case ED_CLOSE: - case ED_SHORT_JUMPSLASH: - killed = CanUse(RG_MEGATON_HAMMER) || CanUse(RG_KOKIRI_SWORD); - [[fallthrough]]; - case ED_MASTER_SWORD_JUMPSLASH: - killed = killed || CanUse(RG_MASTER_SWORD); - [[fallthrough]]; - case ED_LONG_JUMPSLASH: - killed = killed || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); - [[fallthrough]]; - case ED_BOMB_THROW: - //RANDOTODO test dins and chu range in a practical example - killed = killed || (!inWater && CanUse(RG_BOMB_BAG)); - [[fallthrough]]; - case ED_BOOMERANG: - case ED_HOOKSHOT: - //RANDOTODO test dins, bomb and chu range in a practical example - killed = killed || CanUse(RG_HOOKSHOT) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); - [[fallthrough]]; - case ED_LONGSHOT: - killed = killed || CanUse(RG_LONGSHOT); - [[fallthrough]]; - case ED_FAR: - killed = killed || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); - break; - } - return killed; - 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 shenanigans 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 + // Child items + case RG_FAIRY_SLINGSHOT: + return IsChild && (AmmoCanDrop || GetInLogic(LOGIC_BUY_SEED)); // || SlingshotAsAdult; + case RG_BOOMERANG: + return IsChild; // || BoomerangAsAdult; + case RG_KOKIRI_SWORD: + return IsChild; // || KokiriSwordAsAdult; + case RG_NUTS: + return (NutPot || NutCrate || DekuBabaNuts) && + AmmoCanDrop; // RANDOTODO BuyNuts currently mixed in with Nuts, should be seperate as BuyNuts are + // also a Nuts source + case RG_STICKS: + return IsChild /* || StickAsAdult;*/ && (StickPot || DekuBabaSticks); + case RG_DEKU_SHIELD: + return IsChild; // || DekuShieldAsAdult; + case RG_PROGRESSIVE_BOMB_BAG: + case RG_BOMB_BAG: + return AmmoCanDrop || GetInLogic(LOGIC_BUY_BOMB); + case RG_PROGRESSIVE_BOMBCHUS: + case RG_BOMBCHU_5: + case RG_BOMBCHU_10: + case RG_BOMBCHU_20: + return BombchuRefill() && BombchusEnabled(); + case RG_WEIRD_EGG: + case RG_RUTOS_LETTER: + return IsChild; + case RG_MAGIC_BEAN: + return IsChild; - // Bottle is not taken into account since a sword, hammer or stick are required - // for killing ganondorf and all of those can reflect the energy ball - // This will not be the case once ammo logic in taken into account as - // sticks are limited and using a bottle might become a requirement in that case - return HasBossSoul(RG_GANON_SOUL) && CanUse(RG_LIGHT_ARROWS) && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)); - case RE_GANON: - return HasBossSoul(RG_GANON_SOUL) && CanUse(RG_MASTER_SWORD); - case RE_DARK_LINK: - //RANDOTODO Dark link is buggy right now, retest when he is not - return CanJumpslash() || CanUse(RG_FAIRY_BOW); - case RE_ANUBIS: - //there's a restoration that allows beating them with mirror shield + some way to trigger their attack - return HasFireSource(); - case RE_BEAMOS: - return HasExplosives(); - case RE_PURPLE_LEEVER: - //dies on it's own, so this is the conditions to spawn it (killing 10 normal leevers) - //Sticks and Ice arrows work but will need ammo capacity logic - //other methods can damage them but not kill them, and they run when hit, making them impractical - return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD); - case RE_TENTACLE: - return CanUse(RG_BOOMERANG); - case RE_BARI: - return HookshotOrBoomerang() || CanUse(RG_FAIRY_BOW) || HasExplosives() || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_STICKS) || CanUse(RG_DINS_FIRE) || (TakeDamage() && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD))); - case RE_SHABOM: - //RANDOTODO when you add better damage logic, you can kill this by taking hits - return CanUse(RG_BOOMERANG) || CanUse(RG_NUTS) || CanJumpslash() || CanUse(RG_DINS_FIRE) || CanUse(RG_ICE_ARROWS); - case RE_OCTOROK: - return CanReflectNuts() || HookshotOrBoomerang() || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOMB_BAG) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); - default: - SPDLOG_ERROR("CanKillEnemy reached `default`."); - assert(false); - return false; - } - } + // Songs + case RG_ZELDAS_LULLABY: + case RG_EPONAS_SONG: + case RG_PRELUDE_OF_LIGHT: + return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_C_LEFT_BUTTON) && + HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON); + case RG_SARIAS_SONG: + return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_C_LEFT_BUTTON) && + HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_DOWN_BUTTON); + case RG_SUNS_SONG: + return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON) && + HasItem(RG_OCARINA_C_DOWN_BUTTON); + case RG_SONG_OF_TIME: + case RG_BOLERO_OF_FIRE: + case RG_REQUIEM_OF_SPIRIT: + return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_A_BUTTON) && HasItem(RG_OCARINA_C_RIGHT_BUTTON) && + HasItem(RG_OCARINA_C_DOWN_BUTTON); + case RG_SONG_OF_STORMS: + return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_A_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON) && + HasItem(RG_OCARINA_C_DOWN_BUTTON); + case RG_MINUET_OF_FOREST: + return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_A_BUTTON) && HasItem(RG_OCARINA_C_LEFT_BUTTON) && + HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON); + case RG_SERENADE_OF_WATER: + case RG_NOCTURNE_OF_SHADOW: + return HasItem(RG_FAIRY_OCARINA) && HasItem(RG_OCARINA_A_BUTTON) && HasItem(RG_OCARINA_C_LEFT_BUTTON) && + HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_DOWN_BUTTON); -//It is rare for Pass Enemy to need distance, this only happens when the enemy blocks a platform and you can't reach it before it blocks you -//an example is the Big Skulltula in water room of MQ deku, which is out of sword swing height but blocks off the whole SoT block -//Can we get past this enemy in a tight space? - bool Logic::CanPassEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wallOrFloor) { - if (CanKillEnemy(enemy, distance, wallOrFloor)){ + // Misc. Items + case RG_FISHING_POLE: + return HasItem(RG_CHILD_WALLET); // as long as you have enough rubies + case RG_EPONA: + return IsAdult && CanUse(RG_EPONAS_SONG); + + // Bottle Items + case RG_BOTTLE_WITH_BUGS: + return BugShrub || WanderingBugs || BugRock || GetInLogic(LOGIC_BUGS_ACCESS); + case RG_BOTTLE_WITH_FISH: + return LoneFish || FishGroup || + GetInLogic(LOGIC_FISH_ACCESS); // is there any need to care about lone vs group? + case RG_BOTTLE_WITH_BLUE_FIRE: // RANDOTODO should probably be better named + return BlueFireAccess || GetInLogic(LOGIC_BLUE_FIRE_ACCESS); + case RG_BOTTLE_WITH_FAIRY: + return FairyPot || GossipStoneFairy || BeanPlantFairy || ButterflyFairy || FreeFairies || FairyPond || + GetInLogic(LOGIC_FAIRY_ACCESS); + + default: + SPDLOG_ERROR("CanUse reached `default` for {}. Assuming intention is no extra requirements for use so " + "returning true, but HasItem should be used instead.", + static_cast(itemName)); + assert(false); return true; - } - switch(enemy) { - case RE_GOLD_SKULLTULA: - case RE_GOHMA_LARVA: - case RE_LIZALFOS: - case RE_DODONGO: //RANDOTODO do dodongos block the way in tight corridors? - case RE_MAD_SCRUB: - case RE_KEESE: - case RE_FIRE_KEESE: - case RE_BLUE_BUBBLE: - case RE_DEAD_HAND: - case RE_DEKU_BABA: - case RE_WITHERED_DEKU_BABA: - case RE_STALFOS: - case RE_FLARE_DANCER: - case RE_WOLFOS: - case RE_WHITE_WOLFOS: - case RE_FLOORMASTER: - case RE_MEG: - case RE_ARMOS: - case RE_FREEZARD: - case RE_SPIKE: - case RE_DARK_LINK: - case RE_ANUBIS: - case RE_WALLMASTER: - case RE_PURPLE_LEEVER: - case RE_OCTOROK: - return true; - case RE_BIG_SKULLTULA: - //hammer jumpslash can pass, but only on flat land where you can kill with hammer swing - return CanUse(RG_NUTS) || CanUse(RG_BOOMERANG); - case RE_LIKE_LIKE: - return CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG); - case RE_GIBDO: - case RE_REDEAD: - // we need a way to check if suns won't force a reload - return CanUse(RG_HOOKSHOT) || CanUse(RG_SUNS_SONG); - case RE_IRON_KNUCKLE: - case RE_BIG_OCTO: - return false; - case RE_GREEN_BUBBLE: - return TakeDamage() || CanUse(RG_NUTS) || CanUse(RG_BOOMERANG) || CanUse(RG_HOOKSHOT); - default: - SPDLOG_ERROR("CanPassEnemy reached `default`."); - assert(false); - return false; - } } +} -//Can we avoid this enemy while climbing up a wall, or doing a difficult platforming challenge? -//use grounded if the challenge is such that the enemy interfears even if it cannot hit link out of the air - bool Logic::CanAvoidEnemy(RandomizerEnemy enemy, bool grounded, uint8_t quantity) { - //DISTANCE AND WALL ASSUMED, add more arguments later if needed - if (CanKillEnemy(enemy, ED_CLOSE, true, quantity)){ +bool Logic::HasProjectile(HasProjectileAge age) { + return HasExplosives() || + (age == HasProjectileAge::Child && (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG))) || + (age == HasProjectileAge::Adult && (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW))) || + (age == HasProjectileAge::Both && (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG)) && + (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW))) || + (age == HasProjectileAge::Either && + (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG) || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW))); +} + +bool Logic::HasBossSoul(RandomizerGet itemName) { + if (!ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS)) { return true; - } - switch(enemy) { - case RE_GOLD_SKULLTULA: + } + switch (itemName) { + case RG_GOHMA_SOUL: + case RG_KING_DODONGO_SOUL: + case RG_BARINADE_SOUL: + case RG_PHANTOM_GANON_SOUL: + case RG_VOLVAGIA_SOUL: + case RG_MORPHA_SOUL: + case RG_BONGO_BONGO_SOUL: + case RG_TWINROVA_SOUL: + return HasItem(itemName); + case RG_GANON_SOUL: + return ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).Is(RO_BOSS_SOULS_ON_PLUS_GANON) ? HasItem(RG_GANON_SOUL) + : true; + default: + return false; + } +} + +// RANDOMISERTODO intergrate into HasItem +bool Logic::CanOpenOverworldDoor(RandomizerGet key) { + if (!ctx->GetOption(RSK_LOCK_OVERWORLD_DOORS)) { + return true; + } + + if (HasItem(RG_SKELETON_KEY)) { + return true; + } + + return HasItem(key); +} + +uint8_t GetDifficultyValueFromString(Rando::Option& glitchOption) { + return 0; +} + +// todo rewrite glitch section + +bool Logic::CanEquipSwap(RandomizerGet itemName) { + if (!HasItem(itemName)) + return false; + + if (CanDoGlitch(GlitchType::EquipSwapDins) || CanDoGlitch(GlitchType::EquipSwap)) + return true; + + return false; +} + +bool Logic::CanDoGlitch(GlitchType glitch) { + // TODO: Uncomment when glitches are implemented + switch (glitch) { + case GlitchType::EquipSwapDins: + return ((IsAdult && HasItem(RG_DINS_FIRE)) || (IsChild && (HasItem(RG_STICKS) || HasItem(RG_DINS_FIRE)))) && + false; // GlitchEquipSwapDins; + case GlitchType::EquipSwap: // todo: add bunny hood to adult item equippable list and child trade item to child + // item equippable list + return ((IsAdult && (HasItem(RG_DINS_FIRE) || HasItem(RG_FARORES_WIND) || HasItem(RG_NAYRUS_LOVE))) || + (IsChild && (HasItem(RG_STICKS) || HasItem(RG_FAIRY_SLINGSHOT) || HasItem(RG_BOOMERANG) || + HasBottle() || CanUse(RG_NUTS) || HasItem(RG_FAIRY_OCARINA) || + HasItem(RG_LENS_OF_TRUTH) || HasExplosives() || GetAmmo(ITEM_BEAN) > 0 || + HasItem(RG_DINS_FIRE) || HasItem(RG_FARORES_WIND) || HasItem(RG_NAYRUS_LOVE)))) && + false; // GlitchEquipSwap; + } + + // Shouldn't be reached + return false; +} + +// RANDOTODO quantity is a placeholder for proper ammo use calculation logic. in time will want updating to account for +// ammo capacity Can we kill this enemy +bool Logic::CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wallOrFloor, uint8_t quantity, bool timer, + bool inWater) { + bool killed = false; + switch (enemy) { + case RE_GOLD_SKULLTULA: + switch (distance) { + case ED_CLOSE: + // hammer jumpslash cannot damage these, but hammer swing can + killed = CanUse(RG_MEGATON_HAMMER); + [[fallthrough]]; + case ED_SHORT_JUMPSLASH: + killed = killed || CanUse(RG_KOKIRI_SWORD); + [[fallthrough]]; + case ED_MASTER_SWORD_JUMPSLASH: + killed = killed || CanUse(RG_MASTER_SWORD); + [[fallthrough]]; + case ED_LONG_JUMPSLASH: + killed = killed || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); + [[fallthrough]]; + case ED_BOMB_THROW: + killed = killed || CanUse(RG_BOMB_BAG); + [[fallthrough]]; + case ED_BOOMERANG: + killed = killed || CanUse(RG_BOOMERANG) || CanUse(RG_DINS_FIRE); + [[fallthrough]]; + case ED_HOOKSHOT: + // RANDOTODO test dins and chu range in a practical example + killed = killed || CanUse(RG_HOOKSHOT); + [[fallthrough]]; + case ED_LONGSHOT: + killed = killed || CanUse(RG_LONGSHOT) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); + [[fallthrough]]; + case ED_FAR: + killed = killed || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); + break; + } + return killed; + case RE_GOHMA_LARVA: + case RE_MAD_SCRUB: + case RE_DEKU_BABA: + return CanAttack(); + case RE_BIG_SKULLTULA: + switch (distance) { + case ED_CLOSE: + // hammer jumpslash cannot damage these, but hammer swing can + killed = CanUse(RG_MEGATON_HAMMER); + [[fallthrough]]; + case ED_SHORT_JUMPSLASH: + killed = killed || CanUse(RG_KOKIRI_SWORD); + [[fallthrough]]; + case ED_MASTER_SWORD_JUMPSLASH: + killed = killed || CanUse(RG_MASTER_SWORD); + [[fallthrough]]; + case ED_LONG_JUMPSLASH: + killed = killed || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); + [[fallthrough]]; + case ED_BOMB_THROW: + killed = killed || CanUse(RG_BOMB_BAG); + [[fallthrough]]; + case ED_BOOMERANG: + // RANDOTODO test dins and chu range in a practical example + killed = killed || CanUse(RG_DINS_FIRE); + [[fallthrough]]; + case ED_HOOKSHOT: + // RANDOTODO test dins and chu range in a practical example + killed = killed || CanUse(RG_HOOKSHOT) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); + [[fallthrough]]; + case ED_LONGSHOT: + killed = killed || CanUse(RG_LONGSHOT); + [[fallthrough]]; + case ED_FAR: + killed = killed || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); + break; + } + return killed; + case RE_DODONGO: + 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: + case RE_FIRE_KEESE: + switch (distance) { + case ED_CLOSE: + case ED_SHORT_JUMPSLASH: + killed = CanUse(RG_MEGATON_HAMMER) || CanUse(RG_KOKIRI_SWORD); + [[fallthrough]]; + case ED_MASTER_SWORD_JUMPSLASH: + killed = killed || CanUse(RG_MASTER_SWORD); + [[fallthrough]]; + case ED_LONG_JUMPSLASH: + killed = killed || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); + [[fallthrough]]; + case ED_BOMB_THROW: + // RANDOTODO test dins and chu range in a practical example + killed = killed || (!inWater && CanUse(RG_BOMB_BAG)); + [[fallthrough]]; + case ED_BOOMERANG: + // RANDOTODO test dins and chu range in a practical example + killed = killed || CanUse(RG_BOOMERANG); + [[fallthrough]]; + case ED_HOOKSHOT: + // RANDOTODO test dins, bomb and chu range in a practical example + killed = killed || CanUse(RG_HOOKSHOT) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); + [[fallthrough]]; + case ED_LONGSHOT: + killed = killed || CanUse(RG_LONGSHOT); + [[fallthrough]]; + case ED_FAR: + killed = killed || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); + break; + } + return killed; + case RE_BLUE_BUBBLE: + // RANDOTODO Trick to use shield hylian shield as child to stun these guys + // RANDOTODO check hammer damage + return BlastOrSmash() || CanUse(RG_FAIRY_BOW) || + ((CanJumpslashExceptHammer() || CanUse(RG_FAIRY_SLINGSHOT)) && + (CanUse(RG_NUTS) || HookshotOrBoomerang() || CanStandingShield())); + case RE_DEAD_HAND: + // RANDOTODO change Dead Hand trick to be sticks Dead Hand + return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || + (CanUse(RG_STICKS) && ctx->GetTrickOption(RT_BOTW_CHILD_DEADHAND)); + case RE_WITHERED_DEKU_BABA: + return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || + CanUse(RG_BOOMERANG); + case RE_LIKE_LIKE: + case RE_FLOORMASTER: + return CanDamage(); + case RE_STALFOS: + // RANDOTODO Add trick to kill stalfos with sticks, and a second one for bombs without stunning. Higher ammo + // logic for bombs is also plausible + switch (distance) { + case ED_CLOSE: + case ED_SHORT_JUMPSLASH: + killed = CanUse(RG_MEGATON_HAMMER) || CanUse(RG_KOKIRI_SWORD); + [[fallthrough]]; + case ED_MASTER_SWORD_JUMPSLASH: + killed = killed || CanUse(RG_MASTER_SWORD); + [[fallthrough]]; + case ED_LONG_JUMPSLASH: + killed = killed || CanUse(RG_BIGGORON_SWORD) || (quantity <= 1 && CanUse(RG_STICKS)); + [[fallthrough]]; + case ED_BOMB_THROW: + killed = killed || (quantity <= 2 && !timer && !inWater && + (CanUse(RG_NUTS) || HookshotOrBoomerang()) && CanUse(RG_BOMB_BAG)); + [[fallthrough]]; + case ED_BOOMERANG: + case ED_HOOKSHOT: + // RANDOTODO test dins and chu range in a practical example + killed = killed || (wallOrFloor && CanUse(RG_BOMBCHU_5)); + [[fallthrough]]; + case ED_LONGSHOT: + case ED_FAR: + killed = killed || CanUse(RG_FAIRY_BOW); + break; + } + return killed; + // Needs 16 bombs, but is in default logic in N64, probably because getting the hits is quite easy. + // bow and sling can wake them and damage after they shed their armour, so could reduce ammo requirements for + // explosives to 10. requires 8 sticks to kill so would be a trick unless we apply higher stick bag logic + case RE_IRON_KNUCKLE: + return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || + CanUse(RG_MEGATON_HAMMER) || HasExplosives(); + // To stun flare dancer with chus, you have to hit the flame under it while it is spinning. It should eventually + // return to spinning after dashing for a while if you miss the window it is possible to damage the core with + // explosives, but difficult to get all 4 hits in even with chus, and if it reconstructs the core heals, so it + // would be a trick. the core takes damage from hookshot even if it doesn't show Dins killing isn't hard, but is + // obscure and tight on single magic, so is a trick + case RE_FLARE_DANCER: + return CanUse(RG_MEGATON_HAMMER) || CanUse(RG_HOOKSHOT) || + (HasExplosives() && (CanJumpslashExceptHammer() || CanUse(RG_FAIRY_BOW) || + CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG))); + case RE_WOLFOS: + case RE_WHITE_WOLFOS: + case RE_WALLMASTER: + return CanJumpslash() || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOMBCHU_5) || + CanUse(RG_DINS_FIRE) || + (CanUse(RG_BOMB_BAG) && (CanUse(RG_NUTS) || CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG))); + case RE_GERUDO_WARRIOR: + return CanJumpslash() || CanUse(RG_FAIRY_BOW) || + (ctx->GetTrickOption(RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON) && + (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOMBCHU_5))); + case RE_GIBDO: + case RE_REDEAD: + return CanJumpslash() || CanUse(RG_DINS_FIRE); + case RE_MEG: + return CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || HasExplosives(); + case RE_ARMOS: + return BlastOrSmash() || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS) || + CanUse(RG_FAIRY_BOW) || + ((CanUse(RG_NUTS) || CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG)) && + (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_FAIRY_SLINGSHOT))); + case RE_GREEN_BUBBLE: + // does not technically need to be stunned to kill with dins, but the flame must be off and timing it is + // awkward Also they don't trigger the kill room in ganons MQ if they die from dins? Vanilla bug? + return CanJumpslash() || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || + HasExplosives() /* || (CanUse(RG_DINS_FIRE) && (CanUse(RG_NUTS) || CanUse(RG_HOOKSHOT) || + CanUse(RG_BOOMERANG)))*/ + ; + case RE_DINOLFOS: + // stunning + bombs is possible but painful, as it loves to dodge the bombs and hookshot. it also dodges + // chus but if you cook it so it detonates under the dodge it usually gets caught on landing + return CanJumpslash() || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || + (!timer && CanUse(RG_BOMBCHU_5)); + case RE_TORCH_SLUG: + 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: + switch (distance) { + case ED_CLOSE: + case ED_SHORT_JUMPSLASH: + killed = CanUse(RG_MEGATON_HAMMER) || CanUse(RG_KOKIRI_SWORD); + [[fallthrough]]; + case ED_MASTER_SWORD_JUMPSLASH: + killed = killed || CanUse(RG_MASTER_SWORD); + [[fallthrough]]; + case ED_LONG_JUMPSLASH: + killed = killed || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); + [[fallthrough]]; + case ED_BOMB_THROW: + // RANDOTODO test dins and chu range in a practical example + killed = killed || (!inWater && CanUse(RG_BOMB_BAG)); + [[fallthrough]]; + case ED_BOOMERANG: + case ED_HOOKSHOT: + // RANDOTODO test dins, bomb and chu range in a practical example + killed = killed || CanUse(RG_HOOKSHOT) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); + [[fallthrough]]; + case ED_LONGSHOT: + killed = killed || CanUse(RG_LONGSHOT); + [[fallthrough]]; + case ED_FAR: + killed = killed || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); + break; + } + return killed; + 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 shenanigans 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 + + // Bottle is not taken into account since a sword, hammer or stick are required + // for killing ganondorf and all of those can reflect the energy ball + // This will not be the case once ammo logic in taken into account as + // sticks are limited and using a bottle might become a requirement in that case + return HasBossSoul(RG_GANON_SOUL) && CanUse(RG_LIGHT_ARROWS) && + (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD)); + case RE_GANON: + return HasBossSoul(RG_GANON_SOUL) && CanUse(RG_MASTER_SWORD); + case RE_DARK_LINK: + // RANDOTODO Dark link is buggy right now, retest when he is not + return CanJumpslash() || CanUse(RG_FAIRY_BOW); + case RE_ANUBIS: + // there's a restoration that allows beating them with mirror shield + some way to trigger their attack + return HasFireSource(); + case RE_BEAMOS: + return HasExplosives(); + case RE_PURPLE_LEEVER: + // dies on it's own, so this is the conditions to spawn it (killing 10 normal leevers) + // Sticks and Ice arrows work but will need ammo capacity logic + // other methods can damage them but not kill them, and they run when hit, making them impractical + return CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD); + case RE_TENTACLE: + return CanUse(RG_BOOMERANG); + case RE_BARI: + return HookshotOrBoomerang() || CanUse(RG_FAIRY_BOW) || HasExplosives() || CanUse(RG_MEGATON_HAMMER) || + CanUse(RG_STICKS) || CanUse(RG_DINS_FIRE) || + (TakeDamage() && (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD))); + case RE_SHABOM: + // RANDOTODO when you add better damage logic, you can kill this by taking hits + return CanUse(RG_BOOMERANG) || CanUse(RG_NUTS) || CanJumpslash() || CanUse(RG_DINS_FIRE) || + CanUse(RG_ICE_ARROWS); + case RE_OCTOROK: + return CanReflectNuts() || HookshotOrBoomerang() || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || + CanUse(RG_BOMB_BAG) || (wallOrFloor && CanUse(RG_BOMBCHU_5)); + default: + SPDLOG_ERROR("CanKillEnemy reached `default`."); + assert(false); + return false; + } +} + +// It is rare for Pass Enemy to need distance, this only happens when the enemy blocks a platform and you can't reach it +// before it blocks you an example is the Big Skulltula in water room of MQ deku, which is out of sword swing height but +// blocks off the whole SoT block Can we get past this enemy in a tight space? +bool Logic::CanPassEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wallOrFloor) { + if (CanKillEnemy(enemy, distance, wallOrFloor)) { + return true; + } + switch (enemy) { + case RE_GOLD_SKULLTULA: + case RE_GOHMA_LARVA: + case RE_LIZALFOS: + case RE_DODONGO: // RANDOTODO do dodongos block the way in tight corridors? + case RE_MAD_SCRUB: + case RE_KEESE: + case RE_FIRE_KEESE: + case RE_BLUE_BUBBLE: + case RE_DEAD_HAND: + case RE_DEKU_BABA: + case RE_WITHERED_DEKU_BABA: + case RE_STALFOS: + case RE_FLARE_DANCER: + case RE_WOLFOS: + case RE_WHITE_WOLFOS: + case RE_FLOORMASTER: + case RE_MEG: + case RE_ARMOS: + case RE_FREEZARD: + case RE_SPIKE: + case RE_DARK_LINK: + case RE_ANUBIS: + case RE_WALLMASTER: + case RE_PURPLE_LEEVER: + case RE_OCTOROK: + return true; + case RE_BIG_SKULLTULA: + // hammer jumpslash can pass, but only on flat land where you can kill with hammer swing + return CanUse(RG_NUTS) || CanUse(RG_BOOMERANG); + case RE_LIKE_LIKE: + return CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG); + case RE_GIBDO: + case RE_REDEAD: + // we need a way to check if suns won't force a reload + return CanUse(RG_HOOKSHOT) || CanUse(RG_SUNS_SONG); + case RE_IRON_KNUCKLE: + case RE_BIG_OCTO: + return false; + case RE_GREEN_BUBBLE: + return TakeDamage() || CanUse(RG_NUTS) || CanUse(RG_BOOMERANG) || CanUse(RG_HOOKSHOT); + default: + SPDLOG_ERROR("CanPassEnemy reached `default`."); + assert(false); + return false; + } +} + +// Can we avoid this enemy while climbing up a wall, or doing a difficult platforming challenge? +// use grounded if the challenge is such that the enemy interfears even if it cannot hit link out of the air +bool Logic::CanAvoidEnemy(RandomizerEnemy enemy, bool grounded, uint8_t quantity) { + // DISTANCE AND WALL ASSUMED, add more arguments later if needed + if (CanKillEnemy(enemy, ED_CLOSE, true, quantity)) { + return true; + } + switch (enemy) { + case RE_GOLD_SKULLTULA: case RE_GOHMA_LARVA: case RE_LIZALFOS: case RE_DODONGO: @@ -829,961 +899,991 @@ namespace Rando { case RE_WALLMASTER: case RE_ANUBIS: case RE_PURPLE_LEEVER: - return true; + return true; case RE_BEAMOS: - return !grounded || CanUse(RG_NUTS) || (quantity == 1 && (CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT))); + return !grounded || CanUse(RG_NUTS) || + (quantity == 1 && (CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT))); case RE_MAD_SCRUB: - return !grounded || CanUse(RG_NUTS); + return !grounded || CanUse(RG_NUTS); case RE_KEESE: case RE_FIRE_KEESE: - return CanUse(RG_NUTS); + return CanUse(RG_NUTS); case RE_BLUE_BUBBLE: - //RANDOTODO Trick to use shield hylian shield as child to stun these guys - return !grounded || CanUse(RG_NUTS) || HookshotOrBoomerang() || CanStandingShield(); + // RANDOTODO Trick to use shield hylian shield as child to stun these guys + return !grounded || CanUse(RG_NUTS) || HookshotOrBoomerang() || CanStandingShield(); default: - SPDLOG_ERROR("CanPassEnemy reached `default`."); - assert(false); - return false; - } - } - - bool Logic::CanGetEnemyDrop(RandomizerEnemy enemy, EnemyDistance distance, bool aboveLink) { - if (!CanKillEnemy(enemy, distance)){ + SPDLOG_ERROR("CanPassEnemy reached `default`."); + assert(false); return false; - } - if (distance <= ED_MASTER_SWORD_JUMPSLASH){ - return true; - } - bool drop = false; - switch(enemy) { - case RE_GOLD_SKULLTULA: - switch(distance){ - case ED_CLOSE: - case ED_SHORT_JUMPSLASH: - case ED_MASTER_SWORD_JUMPSLASH: - case ED_LONG_JUMPSLASH: - case ED_BOMB_THROW: - case ED_BOOMERANG: - drop = drop || CanUse(RG_BOOMERANG); - [[fallthrough]]; - case ED_HOOKSHOT: - drop = drop || CanUse(RG_HOOKSHOT); - [[fallthrough]]; - case ED_LONGSHOT: - drop = drop || CanUse(RG_LONGSHOT); - [[fallthrough]]; - case ED_FAR: - break; - //RANDOTODO double check all jumpslash kills that might be out of jump/backflip range - } - return drop; - break; - case RE_KEESE: - case RE_FIRE_KEESE: - return true; - default: - return aboveLink || (distance <= ED_BOOMERANG && CanUse(RG_BOOMERANG)); - } } +} - bool Logic::CanBreakMudWalls() { - return BlastOrSmash() || (ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && BlueFire()); - } - - bool Logic::CanGetDekuBabaSticks() { - return (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG)); - } - - bool Logic::CanGetDekuBabaNuts() { - return CanJumpslash() || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || HasExplosives() || CanUse(RG_DINS_FIRE); - } - - bool Logic::CanHitEyeTargets() { - return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT); - } - - bool Logic::CanDetonateBombFlowers() { - return CanUse(RG_FAIRY_BOW) || HasExplosives() || CanUse(RG_DINS_FIRE); - } - - bool Logic::CanDetonateUprightBombFlower() { - return CanDetonateBombFlowers() || HasItem(RG_GORONS_BRACELET); - } - - bool Logic::MQWaterLevel(RandoWaterLevel level) { - //For ease of reading, I will call the triforce emblem that sets the water to WL_LOW the "Low Emblem", the one that sets it to WL_MID the "Mid Emblem", and the one that sets it to WL_HIGH the "High Emblem" - switch(level){ - //While you have to go through WL_LOW to get to Mid, the requirements for WL_LOW are stricter than WL_MID because you can always go up to WL_MID and then could need to go back to WL_HIGH to reach the Low Emblem again - //Thanks to this caveat you need to be able to reach and play ZL to both the High and Low Emblems to have WL_LOW in logic. - //Alternativly a way to reach WL_LOW from WL_MID could exist, but all glitchless methods need you to do a Low-locked action - case WL_LOW: - return (CanWaterTempleHigh && CanWaterTempleLowFromHigh) || (CanWaterTempleLowFromMid && CanWaterTempleLowFromHigh); - case WL_LOW_OR_MID: - return (CanWaterTempleHigh && CanWaterTempleLowFromHigh) || (CanWaterTempleLowFromHigh && CanWaterTempleMiddle) || (CanWaterTempleLowFromMid && CanWaterTempleLowFromHigh); - //If we can set it to High out of logic we can just repeat what we did to lower the water in the first place as High is the default. - //Because of this you only need to be able to use the Low and Mid Emblems, WL_LOW could be skipped if it was ever possible to play ZL underwater. - case WL_MID: - return CanWaterTempleLowFromHigh && CanWaterTempleMiddle; - //Despite being the initial state of water temple, WL_HIGH has the extra requirement of making sure that, if we were to lower the water out of logic, we could put it back to WL_HIGH - //However because it is the default state, we do not need to check if we can actually change the water level, only to make sure we can return to WL_HIGH if we found the means to play ZL out of logic. - //There are 2 methods to lock yourself out after playing ZL already: Not being able to reach the High Emblem and being unable to replay ZL. (I will be ignoring other-age-access shenanigains) - //The former check would simply be a check to see if we can reach High Emblem, but we assume the water is WL_MID (as if we can set it to WL_LOW, we can set it to WL_MID, as Mid Emblem has no requirements) - //The latter check can be assumed for now but will want a revisit once OI tricks are added. - case WL_HIGH: - return ReachedWaterHighEmblem; - case WL_HIGH_OR_MID: - return ReachedWaterHighEmblem || (CanWaterTempleLowFromHigh && CanWaterTempleMiddle); - } - SPDLOG_ERROR("MQWaterLevel reached `return false;`. Missing case for a Water Level"); - assert(false); +bool Logic::CanGetEnemyDrop(RandomizerEnemy enemy, EnemyDistance distance, bool aboveLink) { + if (!CanKillEnemy(enemy, distance)) { return false; } - - Logic::Logic() { - - } - - uint8_t Logic::BottleCount() { - uint8_t count = 0; - if (CouldEmptyBigPoes){ - for (int i = SLOT_BOTTLE_1; i <= SLOT_BOTTLE_4; i++) { - uint8_t item = GetSaveContext()->inventory.items[i]; - switch (item) { - case ITEM_LETTER_RUTO: - if (DeliverLetter) { - count++; - } - break; - case ITEM_BIG_POE: - if (CanEmptyBigPoes) { - count++; - } - break; - case ITEM_NONE: - break; - default: - count++; - break; - } - } - } - return count; - } - - uint8_t Logic::OcarinaButtons(){ - return HasItem(RG_OCARINA_A_BUTTON) + HasItem(RG_OCARINA_C_LEFT_BUTTON) + HasItem(RG_OCARINA_C_RIGHT_BUTTON) + HasItem(RG_OCARINA_C_UP_BUTTON) + HasItem(RG_OCARINA_C_DOWN_BUTTON); - } - - bool Logic::HasBottle(){ - return BottleCount() >= 1; - } - - bool Logic::CanJumpslashExceptHammer() { - // Not including hammer as hammer jump attacks can be weird; - return CanUse(RG_STICKS) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD); - } - - bool Logic::CanJumpslash() { - return CanJumpslashExceptHammer() || CanUse(RG_MEGATON_HAMMER); - } - - bool Logic::CanHitSwitch(EnemyDistance distance, bool inWater) { - bool hit = false; - switch (distance){ - case ED_CLOSE: - case ED_SHORT_JUMPSLASH: - hit = CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MEGATON_HAMMER); - [[fallthrough]]; - case ED_MASTER_SWORD_JUMPSLASH: - hit = hit || CanUse(RG_MASTER_SWORD); - [[fallthrough]]; - case ED_LONG_JUMPSLASH: - hit = hit || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); - [[fallthrough]]; - case ED_BOMB_THROW: - hit = hit || (!inWater && CanUse(RG_BOMB_BAG)); - [[fallthrough]]; - case ED_BOOMERANG: - hit = hit || CanUse(RG_BOOMERANG); - [[fallthrough]]; - case ED_HOOKSHOT: - //RANDOTODO test chu range in a practical example - hit = hit || CanUse(RG_HOOKSHOT) || CanUse(RG_BOMBCHU_5) ; - [[fallthrough]]; - case ED_LONGSHOT: - hit = hit || CanUse(RG_LONGSHOT); - [[fallthrough]]; - case ED_FAR: - hit = hit || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); - break; - } - return hit; - } - - bool Logic::CanDamage() { - return CanUse(RG_FAIRY_SLINGSHOT) || CanJumpslash() || HasExplosives() || CanUse(RG_DINS_FIRE) || CanUse(RG_FAIRY_BOW); - } - - bool Logic::CanAttack() { - return CanDamage() || CanUse(RG_BOOMERANG) || CanUse(RG_HOOKSHOT); - } - - bool Logic::BombchusEnabled(){ - return ctx->GetOption(RSK_BOMBCHU_BAG) ? CheckInventory(ITEM_BOMBCHU, true) : HasItem(RG_BOMB_BAG); - } - - // TODO: Implement Ammo Drop Setting in place of bombchu drops - bool Logic::BombchuRefill(){ - return GetInLogic(LOGIC_BUY_BOMBCHUS) || CouldPlayBowling || CarpetMerchant || (ctx->GetOption(RSK_ENABLE_BOMBCHU_DROPS).Is(RO_AMMO_DROPS_ON/*_PLUS_BOMBCHU*/)); - } - - bool Logic::HookshotOrBoomerang(){ - return CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG); - } - - bool Logic::ScarecrowsSong(){ - return (ctx->GetOption(RSK_SKIP_SCARECROWS_SONG) && HasItem(RG_FAIRY_OCARINA) && OcarinaButtons() >= 2) - || (ChildScarecrow && AdultScarecrow); - } - - bool Logic::BlueFire(){ - return CanUse(RG_BOTTLE_WITH_BLUE_FIRE) || (ctx->GetOption(RSK_BLUE_FIRE_ARROWS) && CanUse(RG_ICE_ARROWS)); - } - - bool Logic::CanBreakPots(){ + if (distance <= ED_MASTER_SWORD_JUMPSLASH) { return true; } - - bool Logic::HasExplosives(){ - return CanUse(RG_BOMB_BAG) || CanUse(RG_BOMBCHU_5); - } - - bool Logic::BlastOrSmash(){ - return HasExplosives() || CanUse(RG_MEGATON_HAMMER); - } - - bool Logic::CanSpawnSoilSkull(){ - return IsChild && CanUse(RG_BOTTLE_WITH_BUGS); - } - - bool Logic::CanReflectNuts(){ - return CanUse(RG_DEKU_SHIELD) || (IsAdult && HasItem(RG_HYLIAN_SHIELD)); - } - - bool Logic::CanCutShrubs(){ - return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BOOMERANG) || HasExplosives() || CanUse(RG_MASTER_SWORD) || CanUse(RG_MEGATON_HAMMER) || CanUse(RG_BIGGORON_SWORD); - } - - bool Logic::CanStunDeku(){ - return CanAttack() || CanUse(RG_NUTS) || CanReflectNuts(); - } - - bool Logic::CanLeaveForest(){ - return ctx->GetOption(RSK_FOREST).IsNot(RO_CLOSED_FOREST_ON) || IsAdult || DekuTreeClear || ctx->GetOption(RSK_SHUFFLE_INTERIOR_ENTRANCES) || ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES); - } - - bool Logic::CallGossipFairyExceptSuns(){ - return CanUse(RG_ZELDAS_LULLABY) || CanUse(RG_EPONAS_SONG) || CanUse(RG_SONG_OF_TIME); - } - - bool Logic::CallGossipFairy(){ - return CallGossipFairyExceptSuns() || CanUse(RG_SUNS_SONG); - } - - //the number returned by this is in half heart hits taken. - //RANDOTODO work in OoT side health instead for greater applicability (16 per heart) - uint8_t Logic::EffectiveHealth(){ - /* Multiplier will be: - 0 for half daamge - 1 for normal damage - 2 for double damage - 3 for quad damage - 4 for 8* damage - 5 for 16* damage - 10 for OHKO. - This is the number of shifts to apply, not a real multiplier - */ - uint8_t Multiplier = (ctx->GetOption(RSK_DAMAGE_MULTIPLIER).Get() < 6) ? ctx->GetOption(RSK_DAMAGE_MULTIPLIER).Get() : 10; - //(Hearts() << (2 + HasItem(RG_DOUBLE_DEFENSE))) is quarter hearts after DD - //>> Multiplier halves on normal and does nothing on half, meaning we're working with half hearts on normal damage - return ((Hearts() << (2 + HasItem(RG_DOUBLE_DEFENSE))) >> Multiplier) + - //As 1 is a quarter heart, (1 << Multiplier) is effectivly half-hearts of unmodified damage - //Adds an extra hit if the damage is not exact lethal - ((Hearts() << (2 + HasItem(RG_DOUBLE_DEFENSE))) % (1 << Multiplier) > 0); - } - - uint8_t Logic::Hearts(){ - return GetSaveContext()->healthCapacity / 16; - } - - uint8_t Logic::DungeonCount(){ - return DekuTreeClear + DodongosCavernClear + JabuJabusBellyClear + ForestTempleClear + FireTempleClear + WaterTempleClear + SpiritTempleClear + ShadowTempleClear; - } - - uint8_t Logic::StoneCount(){ - return HasItem(RG_KOKIRI_EMERALD) + HasItem(RG_GORON_RUBY) + HasItem(RG_ZORA_SAPPHIRE); - } - - uint8_t Logic::MedallionCount(){ - return HasItem(RG_FOREST_MEDALLION) + HasItem(RG_FIRE_MEDALLION) + HasItem(RG_WATER_MEDALLION) + HasItem(RG_SPIRIT_MEDALLION) + HasItem(RG_SHADOW_MEDALLION) + HasItem(RG_LIGHT_MEDALLION); - } - - uint8_t Logic::FireTimer(){ - return CanUse(RG_GORON_TUNIC) ? 255 : (ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS)) ? (Hearts() * 8) : 0; - } - - //Tunic is not required if you are using irons to do something that a simple gold scale dive could do, and you are not in water temple. (celing swimming and long walks through water do not count) - uint8_t Logic::WaterTimer(){ - return CanUse(RG_ZORA_TUNIC) ? 255 : (ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS)) ? (Hearts() * 8) : 0; - } - - bool Logic::TakeDamage(){ - return CanUse(RG_BOTTLE_WITH_FAIRY) || EffectiveHealth() != 1 || CanUse(RG_NAYRUS_LOVE); - } - - bool Logic::CanOpenBombGrotto(){ - return BlastOrSmash() && (HasItem(RG_STONE_OF_AGONY) || ctx->GetTrickOption(RT_GROTTOS_WITHOUT_AGONY)); - } - - bool Logic::CanOpenStormsGrotto(){ - return CanUse(RG_SONG_OF_STORMS) && (HasItem(RG_STONE_OF_AGONY) || ctx->GetTrickOption(RT_GROTTOS_WITHOUT_AGONY)); - } - - bool Logic::CanGetNightTimeGS(){ - return AtNight && (CanUse(RG_SUNS_SONG) || !ctx->GetOption(RSK_SKULLS_SUNS_SONG)); - } - - bool Logic::CanBreakUpperBeehives(){ - return HookshotOrBoomerang() || (ctx->GetTrickOption(RT_BOMBCHU_BEEHIVES) && CanUse(RG_BOMBCHU_5)); - } - - bool Logic::CanBreakLowerBeehives(){ - return CanBreakUpperBeehives() || CanUse(RG_BOMB_BAG); - } - - bool Logic::HasFireSource(){ - return CanUse(RG_DINS_FIRE) || CanUse(RG_FIRE_ARROWS); - } - - bool Logic::HasFireSourceWithTorch(){ - return HasFireSource() || CanUse(RG_STICKS); - } - -//Is this best off signaling what you have already traded, or what step you are currently on? - bool Logic::TradeQuestStep(RandomizerGet rg){ - if (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE)){ - return false; //This does not apply when we are shuffling trade items - } - bool hasState = false; - //Falling through each case to test each possibility - switch (rg){ - case RG_POCKET_EGG: - hasState = hasState || HasItem(RG_POCKET_EGG); - [[fallthrough]]; - case RG_COJIRO: - hasState = hasState || HasItem(RG_COJIRO); - [[fallthrough]]; - case RG_ODD_MUSHROOM: - hasState = hasState || HasItem(RG_ODD_MUSHROOM); - [[fallthrough]]; - case RG_ODD_POTION: - hasState = hasState || HasItem(RG_ODD_POTION); - [[fallthrough]]; - case RG_POACHERS_SAW: - hasState = hasState || HasItem(RG_POACHERS_SAW); - [[fallthrough]]; - case RG_BROKEN_SWORD: - hasState = hasState || HasItem(RG_BROKEN_SWORD); - [[fallthrough]]; - case RG_PRESCRIPTION: - hasState = hasState || HasItem(RG_PRESCRIPTION); - [[fallthrough]]; - case RG_EYEDROPS: - hasState = hasState || HasItem(RG_EYEDROPS); - [[fallthrough]]; - case RG_CLAIM_CHECK: - hasState = hasState || HasItem(RG_CLAIM_CHECK); - break; - default: - SPDLOG_ERROR("TradeQuestStep reached `return false;`. Missing case for RandomizerGet of {}", static_cast(rg)); - assert(false); - return false; - } - return hasState; - } - - bool Logic::CanFinishGerudoFortress(){ - return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && SmallKeys(RR_GERUDO_FORTRESS, 4) && CanKillEnemy(RE_GERUDO_WARRIOR) && (HasItem(RG_GERUDO_MEMBERSHIP_CARD) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_GF_KITCHEN))) || - (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST) && SmallKeys(RR_GERUDO_FORTRESS, 1) && CanKillEnemy(RE_GERUDO_WARRIOR)) || - ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE); - } - - bool Logic::CanStandingShield(){ - return CanUse(RG_MIRROR_SHIELD) || (IsAdult && HasItem(RG_HYLIAN_SHIELD)) || CanUse(RG_DEKU_SHIELD); - } - - bool Logic::CanShield(){ - return CanUse(RG_MIRROR_SHIELD) || HasItem(RG_HYLIAN_SHIELD) || CanUse(RG_DEKU_SHIELD); - } - - bool Logic::CanUseProjectile(){ - return HasExplosives() || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG); - } - - bool Logic::CanBuildRainbowBridge(){ - return ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_ALWAYS_OPEN) || - (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_VANILLA) && HasItem(RG_SHADOW_MEDALLION) && HasItem(RG_SPIRIT_MEDALLION) && CanUse(RG_LIGHT_ARROWS)) || - (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_STONES) && StoneCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_BRIDGE_OPTIONS).Is(RO_BRIDGE_GREG_REWARD)) >= ctx->GetOption(RSK_RAINBOW_BRIDGE_STONE_COUNT).Get()) || - (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_MEDALLIONS) && MedallionCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_BRIDGE_OPTIONS).Is(RO_BRIDGE_GREG_REWARD)) >= ctx->GetOption(RSK_RAINBOW_BRIDGE_MEDALLION_COUNT).Get()) || - (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEON_REWARDS) && StoneCount() + MedallionCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_BRIDGE_OPTIONS).Is(RO_BRIDGE_GREG_REWARD)) >= ctx->GetOption(RSK_RAINBOW_BRIDGE_REWARD_COUNT).Get()) || - (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEONS) && DungeonCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_BRIDGE_OPTIONS).Is(RO_BRIDGE_GREG_REWARD)) >= ctx->GetOption(RSK_RAINBOW_BRIDGE_DUNGEON_COUNT).Get()) || - (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_TOKENS) && GetGSCount() >= ctx->GetOption(RSK_RAINBOW_BRIDGE_TOKEN_COUNT).Get()) || - (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_GREG) && HasItem(RG_GREG_RUPEE)); - } - - bool Logic::CanTriggerLACS(){ - return (ctx->LACSCondition() == RO_LACS_VANILLA && HasItem(RG_SHADOW_MEDALLION) && HasItem(RG_SPIRIT_MEDALLION)) || - (ctx->LACSCondition() == RO_LACS_STONES && StoneCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_LACS_OPTIONS).Is(RO_LACS_GREG_REWARD)) >= ctx->GetOption(RSK_LACS_STONE_COUNT).Get()) || - (ctx->LACSCondition() == RO_LACS_MEDALLIONS && MedallionCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_LACS_OPTIONS).Is(RO_LACS_GREG_REWARD)) >= ctx->GetOption(RSK_LACS_MEDALLION_COUNT).Get()) || - (ctx->LACSCondition() == RO_LACS_REWARDS && StoneCount() + MedallionCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_LACS_OPTIONS).Is(RO_LACS_GREG_REWARD)) >= ctx->GetOption(RSK_LACS_REWARD_COUNT).Get()) || - (ctx->LACSCondition() == RO_LACS_DUNGEONS && DungeonCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_LACS_OPTIONS).Is(RO_LACS_GREG_REWARD)) >= ctx->GetOption(RSK_LACS_DUNGEON_COUNT).Get()) || - (ctx->LACSCondition() == RO_LACS_TOKENS && GetGSCount() >= ctx->GetOption(RSK_LACS_TOKEN_COUNT).Get()); - } - - bool Logic::SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmount) { - return SmallKeys(dungeon, requiredAmount, requiredAmount); - } - - bool Logic::SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmountGlitchless, uint8_t requiredAmountGlitched) { - if (HasItem(RG_SKELETON_KEY)) { + bool drop = false; + switch (enemy) { + case RE_GOLD_SKULLTULA: + switch (distance) { + case ED_CLOSE: + case ED_SHORT_JUMPSLASH: + case ED_MASTER_SWORD_JUMPSLASH: + case ED_LONG_JUMPSLASH: + case ED_BOMB_THROW: + case ED_BOOMERANG: + drop = drop || CanUse(RG_BOOMERANG); + [[fallthrough]]; + case ED_HOOKSHOT: + drop = drop || CanUse(RG_HOOKSHOT); + [[fallthrough]]; + case ED_LONGSHOT: + drop = drop || CanUse(RG_LONGSHOT); + [[fallthrough]]; + case ED_FAR: + break; + // RANDOTODO double check all jumpslash kills that might be out of jump/backflip range + } + return drop; + break; + case RE_KEESE: + case RE_FIRE_KEESE: return true; - } - switch (dungeon) { - case RR_FOREST_TEMPLE: - /*if (IsGlitched && (GetDifficultyValueFromString(GlitchHookshotJump_Boots) >= static_cast(GlitchDifficulty::INTERMEDIATE) || GetDifficultyValueFromString(GlitchHoverBoost) >= static_cast(GlitchDifficulty::NOVICE) || - (GetDifficultyValueFromString(GlitchHover) >= static_cast(GlitchDifficulty::NOVICE) && GetDifficultyValueFromString(GlitchISG) >= static_cast(GlitchDifficulty::INTERMEDIATE)))) { - return ForestTempleKeys >= requiredAmountGlitched; - }*/ - return GetSmallKeyCount(SCENE_FOREST_TEMPLE) >= requiredAmountGlitchless; - - case RR_FIRE_TEMPLE: - /*if (IsGlitched && (GetDifficultyValueFromString(GlitchLedgeClip) >= static_cast(GlitchDifficulty::INTERMEDIATE) || GetDifficultyValueFromString(GlitchHover) >= static_cast(GlitchDifficulty::INTERMEDIATE))) { - return FireTempleKeys >= requiredAmountGlitched; - }*/ - return GetSmallKeyCount(SCENE_FIRE_TEMPLE) >= requiredAmountGlitchless; - - case RR_WATER_TEMPLE: - /*if (IsGlitched && (false)) { - return WaterTempleKeys >= requiredAmountGlitched; - }*/ - return GetSmallKeyCount(SCENE_WATER_TEMPLE) >= requiredAmountGlitchless; - - case RR_SPIRIT_TEMPLE: - /*if (IsGlitched && (false)) { - return SpiritTempleKeys >= requiredAmountGlitched; - }*/ - return GetSmallKeyCount(SCENE_SPIRIT_TEMPLE) >= requiredAmountGlitchless; - - case RR_SHADOW_TEMPLE: - /*if (IsGlitched && (GetDifficultyValueFromString(GlitchHookshotClip) >= static_cast(GlitchDifficulty::NOVICE))) { - return ShadowTempleKeys >= requiredAmountGlitched; - }*/ - return GetSmallKeyCount(SCENE_SHADOW_TEMPLE) >= requiredAmountGlitchless; - - case RR_BOTTOM_OF_THE_WELL: - /*if (IsGlitched && (false)) { - return BottomOfTheWellKeys >= requiredAmountGlitched; - }*/ - return GetSmallKeyCount(SCENE_BOTTOM_OF_THE_WELL) >= requiredAmountGlitchless; - - case RR_GERUDO_TRAINING_GROUND: - /*if (IsGlitched && (false)) { - return GerudoTrainingGroundsKeys >= requiredAmountGlitched; - }*/ - return GetSmallKeyCount(SCENE_GERUDO_TRAINING_GROUND) >= requiredAmountGlitchless; - - case RR_GANONS_CASTLE: - /*if (IsGlitched && (false)) { - return GanonsCastleKeys >= requiredAmountGlitched; - }*/ - return GetSmallKeyCount(SCENE_INSIDE_GANONS_CASTLE) >= requiredAmountGlitchless; - - case RR_MARKET_TREASURE_CHEST_GAME: - /*if (IsGlitched && (false)) { - return TreasureGameKeys >= requiredAmountGlitched; - }*/ - return GetSmallKeyCount(SCENE_TREASURE_BOX_SHOP) >= requiredAmountGlitchless; - - case RR_GERUDO_FORTRESS: - return GetSmallKeyCount(SCENE_THIEVES_HIDEOUT) >= requiredAmountGlitchless; - - default: - return false; - } + default: + return aboveLink || (distance <= ED_BOOMERANG && CanUse(RG_BOOMERANG)); } +} - std::map Logic::RandoGetToEquipFlag = { - { RG_KOKIRI_SWORD, EQUIP_FLAG_SWORD_KOKIRI }, - { RG_MASTER_SWORD, EQUIP_FLAG_SWORD_MASTER }, - { RG_BIGGORON_SWORD, EQUIP_FLAG_SWORD_BGS }, - { RG_DEKU_SHIELD, EQUIP_FLAG_SHIELD_DEKU }, - { RG_HYLIAN_SHIELD, EQUIP_FLAG_SHIELD_HYLIAN }, - { RG_MIRROR_SHIELD, EQUIP_FLAG_SHIELD_MIRROR }, - { RG_GORON_TUNIC, EQUIP_FLAG_TUNIC_GORON }, - { RG_ZORA_TUNIC, EQUIP_FLAG_TUNIC_ZORA }, - { RG_BUY_DEKU_SHIELD, EQUIP_FLAG_SHIELD_DEKU }, - { RG_BUY_HYLIAN_SHIELD, EQUIP_FLAG_SHIELD_HYLIAN }, - { RG_BUY_GORON_TUNIC, EQUIP_FLAG_TUNIC_GORON }, - { RG_BUY_ZORA_TUNIC, EQUIP_FLAG_TUNIC_ZORA }, - { RG_IRON_BOOTS, EQUIP_FLAG_BOOTS_IRON }, - { RG_HOVER_BOOTS, EQUIP_FLAG_BOOTS_HOVER } - }; +bool Logic::CanBreakMudWalls() { + return BlastOrSmash() || (ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && BlueFire()); +} - std::map Logic::RandoGetToRandInf = { - { RG_ZELDAS_LETTER, RAND_INF_ZELDAS_LETTER }, - { RG_WEIRD_EGG, RAND_INF_WEIRD_EGG }, - { RG_GOHMA_SOUL, RAND_INF_GOHMA_SOUL }, - { RG_KING_DODONGO_SOUL, RAND_INF_KING_DODONGO_SOUL }, - { RG_BARINADE_SOUL, RAND_INF_BARINADE_SOUL }, - { RG_PHANTOM_GANON_SOUL, RAND_INF_PHANTOM_GANON_SOUL }, - { RG_VOLVAGIA_SOUL, RAND_INF_VOLVAGIA_SOUL }, - { RG_MORPHA_SOUL, RAND_INF_MORPHA_SOUL }, - { RG_BONGO_BONGO_SOUL, RAND_INF_BONGO_BONGO_SOUL }, - { RG_TWINROVA_SOUL, RAND_INF_TWINROVA_SOUL }, - { RG_GANON_SOUL, RAND_INF_GANON_SOUL }, - { RG_OCARINA_A_BUTTON, RAND_INF_HAS_OCARINA_A }, - { RG_OCARINA_C_UP_BUTTON, RAND_INF_HAS_OCARINA_C_UP }, - { RG_OCARINA_C_DOWN_BUTTON, RAND_INF_HAS_OCARINA_C_DOWN }, - { RG_OCARINA_C_LEFT_BUTTON, RAND_INF_HAS_OCARINA_C_LEFT }, - { RG_OCARINA_C_RIGHT_BUTTON, RAND_INF_HAS_OCARINA_C_RIGHT }, - { RG_SKELETON_KEY, RAND_INF_HAS_SKELETON_KEY }, - { RG_GREG_RUPEE, RAND_INF_GREG_FOUND }, - { RG_FISHING_POLE, RAND_INF_FISHING_POLE_FOUND }, - { RG_GUARD_HOUSE_KEY, RAND_INF_GUARD_HOUSE_KEY_OBTAINED }, - { RG_MARKET_BAZAAR_KEY, RAND_INF_MARKET_BAZAAR_KEY_OBTAINED }, - { RG_MARKET_POTION_SHOP_KEY, RAND_INF_MARKET_POTION_SHOP_KEY_OBTAINED }, - { RG_MASK_SHOP_KEY, RAND_INF_MASK_SHOP_KEY_OBTAINED }, - { RG_MARKET_SHOOTING_GALLERY_KEY, RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED }, - { RG_BOMBCHU_BOWLING_KEY, RAND_INF_BOMBCHU_BOWLING_KEY_OBTAINED }, - { RG_TREASURE_CHEST_GAME_BUILDING_KEY, RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED }, - { RG_BOMBCHU_SHOP_KEY, RAND_INF_BOMBCHU_SHOP_KEY_OBTAINED }, - { RG_RICHARDS_HOUSE_KEY, RAND_INF_RICHARDS_HOUSE_KEY_OBTAINED }, - { RG_ALLEY_HOUSE_KEY, RAND_INF_ALLEY_HOUSE_KEY_OBTAINED }, - { RG_KAK_BAZAAR_KEY, RAND_INF_KAK_BAZAAR_KEY_OBTAINED }, - { RG_KAK_POTION_SHOP_KEY, RAND_INF_KAK_POTION_SHOP_KEY_OBTAINED }, - { RG_BOSS_HOUSE_KEY, RAND_INF_BOSS_HOUSE_KEY_OBTAINED }, - { RG_GRANNYS_POTION_SHOP_KEY, RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED }, - { RG_SKULLTULA_HOUSE_KEY, RAND_INF_SKULLTULA_HOUSE_KEY_OBTAINED }, - { RG_IMPAS_HOUSE_KEY, RAND_INF_IMPAS_HOUSE_KEY_OBTAINED }, - { RG_WINDMILL_KEY, RAND_INF_WINDMILL_KEY_OBTAINED }, - { RG_KAK_SHOOTING_GALLERY_KEY, RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED }, - { RG_DAMPES_HUT_KEY, RAND_INF_DAMPES_HUT_KEY_OBTAINED }, - { RG_TALONS_HOUSE_KEY, RAND_INF_TALONS_HOUSE_KEY_OBTAINED }, - { RG_STABLES_KEY, RAND_INF_STABLES_KEY_OBTAINED }, - { RG_BACK_TOWER_KEY, RAND_INF_BACK_TOWER_KEY_OBTAINED }, - { RG_HYLIA_LAB_KEY, RAND_INF_HYLIA_LAB_KEY_OBTAINED }, - { RG_FISHING_HOLE_KEY, RAND_INF_FISHING_HOLE_KEY_OBTAINED }, - }; +bool Logic::CanGetDekuBabaSticks() { + return (CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_BOOMERANG)); +} - std::map Logic::RandoGetToDungeonScene = { - { RG_FOREST_TEMPLE_SMALL_KEY, SCENE_FOREST_TEMPLE }, - { RG_FIRE_TEMPLE_SMALL_KEY, SCENE_FIRE_TEMPLE }, - { RG_WATER_TEMPLE_SMALL_KEY, SCENE_WATER_TEMPLE }, - { RG_SPIRIT_TEMPLE_SMALL_KEY, SCENE_SPIRIT_TEMPLE }, - { RG_SHADOW_TEMPLE_SMALL_KEY, SCENE_SHADOW_TEMPLE }, - { RG_BOTTOM_OF_THE_WELL_SMALL_KEY, SCENE_BOTTOM_OF_THE_WELL }, - { RG_GERUDO_TRAINING_GROUND_SMALL_KEY, SCENE_GERUDO_TRAINING_GROUND }, - { RG_GERUDO_FORTRESS_SMALL_KEY, SCENE_THIEVES_HIDEOUT }, - { RG_GANONS_CASTLE_SMALL_KEY, SCENE_INSIDE_GANONS_CASTLE }, - { RG_FOREST_TEMPLE_KEY_RING, SCENE_FOREST_TEMPLE }, - { RG_FIRE_TEMPLE_KEY_RING, SCENE_FIRE_TEMPLE }, - { RG_WATER_TEMPLE_KEY_RING, SCENE_WATER_TEMPLE }, - { RG_SPIRIT_TEMPLE_KEY_RING, SCENE_SPIRIT_TEMPLE }, - { RG_SHADOW_TEMPLE_KEY_RING, SCENE_SHADOW_TEMPLE }, - { RG_BOTTOM_OF_THE_WELL_KEY_RING, SCENE_BOTTOM_OF_THE_WELL }, - { RG_GERUDO_TRAINING_GROUND_KEY_RING, SCENE_GERUDO_TRAINING_GROUND }, - { RG_GERUDO_FORTRESS_KEY_RING, SCENE_THIEVES_HIDEOUT }, - { RG_GANONS_CASTLE_KEY_RING, SCENE_INSIDE_GANONS_CASTLE }, - { RG_FOREST_TEMPLE_BOSS_KEY, SCENE_FOREST_TEMPLE }, - { RG_FIRE_TEMPLE_BOSS_KEY, SCENE_FIRE_TEMPLE }, - { RG_WATER_TEMPLE_BOSS_KEY, SCENE_WATER_TEMPLE }, - { RG_SPIRIT_TEMPLE_BOSS_KEY, SCENE_SPIRIT_TEMPLE }, - { RG_SHADOW_TEMPLE_BOSS_KEY, SCENE_SHADOW_TEMPLE }, - { RG_GANONS_CASTLE_BOSS_KEY, SCENE_INSIDE_GANONS_CASTLE }, - { RG_DEKU_TREE_MAP, SCENE_DEKU_TREE }, - { RG_DODONGOS_CAVERN_MAP, SCENE_DODONGOS_CAVERN }, - { RG_JABU_JABUS_BELLY_MAP, SCENE_JABU_JABU }, - { RG_FOREST_TEMPLE_MAP, SCENE_FOREST_TEMPLE }, - { RG_FIRE_TEMPLE_MAP, SCENE_FIRE_TEMPLE }, - { RG_WATER_TEMPLE_MAP, SCENE_WATER_TEMPLE }, - { RG_SPIRIT_TEMPLE_MAP, SCENE_SPIRIT_TEMPLE }, - { RG_SHADOW_TEMPLE_MAP, SCENE_SHADOW_TEMPLE }, - { RG_BOTTOM_OF_THE_WELL_MAP, SCENE_BOTTOM_OF_THE_WELL }, - { RG_ICE_CAVERN_MAP, SCENE_ICE_CAVERN }, - { RG_DEKU_TREE_COMPASS, SCENE_DEKU_TREE }, - { RG_DODONGOS_CAVERN_COMPASS, SCENE_DODONGOS_CAVERN }, - { RG_JABU_JABUS_BELLY_COMPASS, SCENE_JABU_JABU }, - { RG_FOREST_TEMPLE_COMPASS, SCENE_FOREST_TEMPLE }, - { RG_FIRE_TEMPLE_COMPASS, SCENE_FIRE_TEMPLE }, - { RG_WATER_TEMPLE_COMPASS, SCENE_WATER_TEMPLE }, - { RG_SPIRIT_TEMPLE_COMPASS, SCENE_SPIRIT_TEMPLE }, - { RG_SHADOW_TEMPLE_COMPASS, SCENE_SHADOW_TEMPLE }, - { RG_BOTTOM_OF_THE_WELL_COMPASS, SCENE_BOTTOM_OF_THE_WELL }, - { RG_ICE_CAVERN_COMPASS, SCENE_ICE_CAVERN }, - { RG_TREASURE_GAME_SMALL_KEY, SCENE_TREASURE_BOX_SHOP } - }; +bool Logic::CanGetDekuBabaNuts() { + return CanJumpslash() || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || HasExplosives() || + CanUse(RG_DINS_FIRE); +} - std::map Logic::RandoGetToQuestItem = { - { RG_FOREST_MEDALLION, QUEST_MEDALLION_FOREST }, - { RG_FIRE_MEDALLION, QUEST_MEDALLION_FIRE }, - { RG_WATER_MEDALLION, QUEST_MEDALLION_WATER }, - { RG_SPIRIT_MEDALLION, QUEST_MEDALLION_SPIRIT }, - { RG_SHADOW_MEDALLION, QUEST_MEDALLION_SHADOW }, - { RG_LIGHT_MEDALLION, QUEST_MEDALLION_LIGHT }, - { RG_MINUET_OF_FOREST, QUEST_SONG_MINUET }, - { RG_BOLERO_OF_FIRE, QUEST_SONG_BOLERO }, - { RG_SERENADE_OF_WATER, QUEST_SONG_SERENADE }, - { RG_REQUIEM_OF_SPIRIT, QUEST_SONG_REQUIEM }, - { RG_NOCTURNE_OF_SHADOW, QUEST_SONG_NOCTURNE }, - { RG_PRELUDE_OF_LIGHT, QUEST_SONG_PRELUDE }, - { RG_ZELDAS_LULLABY, QUEST_SONG_LULLABY }, - { RG_EPONAS_SONG, QUEST_SONG_EPONA }, - { RG_SARIAS_SONG, QUEST_SONG_SARIA }, - { RG_SUNS_SONG, QUEST_SONG_SUN }, - { RG_SONG_OF_TIME, QUEST_SONG_TIME }, - { RG_SONG_OF_STORMS, QUEST_SONG_STORMS }, - { RG_KOKIRI_EMERALD, QUEST_KOKIRI_EMERALD }, - { RG_GORON_RUBY, QUEST_GORON_RUBY }, - { RG_ZORA_SAPPHIRE, QUEST_ZORA_SAPPHIRE }, - { RG_STONE_OF_AGONY, QUEST_STONE_OF_AGONY }, - { RG_GERUDO_MEMBERSHIP_CARD, QUEST_GERUDO_CARD }, - }; +bool Logic::CanHitEyeTargets() { + return CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT); +} - std::map BottleRandomizerGetToItemID = { - { RG_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED }, - { RG_BOTTLE_WITH_GREEN_POTION, ITEM_POTION_GREEN }, - { RG_BOTTLE_WITH_BLUE_POTION, ITEM_POTION_BLUE }, - { RG_BOTTLE_WITH_FAIRY, ITEM_FAIRY }, - { RG_BOTTLE_WITH_FISH, ITEM_FISH }, - { RG_BOTTLE_WITH_BLUE_FIRE, ITEM_BLUE_FIRE }, - { RG_BOTTLE_WITH_BUGS, ITEM_BUG }, - { RG_BOTTLE_WITH_POE, ITEM_POE }, - { RG_BOTTLE_WITH_BIG_POE, ITEM_BIG_POE }, - }; +bool Logic::CanDetonateBombFlowers() { + return CanUse(RG_FAIRY_BOW) || HasExplosives() || CanUse(RG_DINS_FIRE); +} - uint32_t HookshotLookup[3] = { ITEM_NONE, ITEM_HOOKSHOT, ITEM_LONGSHOT }; - uint32_t OcarinaLookup[3] = { ITEM_NONE, ITEM_OCARINA_FAIRY, ITEM_OCARINA_TIME }; +bool Logic::CanDetonateUprightBombFlower() { + return CanDetonateBombFlowers() || HasItem(RG_GORONS_BRACELET); +} - void Logic::ApplyItemEffect(Item& item, bool state) { - auto randoGet = item.GetRandomizerGet(); - if (item.GetGIEntry()->objectId == OBJECT_GI_STICK) { - SetInventory(ITEM_STICK, (!state ? ITEM_NONE : ITEM_STICK)); - } - if (item.GetGIEntry()->objectId == OBJECT_GI_NUTS) { - SetInventory(ITEM_NUT, (!state ? ITEM_NONE : ITEM_NUT)); - } - switch (item.GetItemType()) { - case ITEMTYPE_ITEM: - { - switch (randoGet) { - case RG_STONE_OF_AGONY: - case RG_GERUDO_MEMBERSHIP_CARD: - SetQuestItem(RandoGetToQuestItem.at(randoGet), state); - break; - case RG_WEIRD_EGG: - SetRandoInf(RAND_INF_WEIRD_EGG, state); - break; - case RG_ZELDAS_LETTER: - SetRandoInf(RAND_INF_ZELDAS_LETTER, state); - break; - case RG_DOUBLE_DEFENSE: - mSaveContext->isDoubleDefenseAcquired = state; - break; - case RG_POCKET_EGG: - case RG_COJIRO: - case RG_ODD_MUSHROOM: - case RG_ODD_POTION: - case RG_POACHERS_SAW: - case RG_BROKEN_SWORD: - case RG_PRESCRIPTION: - case RG_EYEBALL_FROG: - case RG_EYEDROPS: - case RG_CLAIM_CHECK: - SetRandoInf(randoGet - RG_POCKET_EGG + RAND_INF_ADULT_TRADES_HAS_POCKET_EGG, state); - break; - case RG_PROGRESSIVE_HOOKSHOT: - { - uint8_t i; - for (i = 0; i < 3; i++) { - if (CurrentInventory(ITEM_HOOKSHOT) == HookshotLookup[i]) { - break; +bool Logic::MQWaterLevel(RandoWaterLevel level) { + // For ease of reading, I will call the triforce emblem that sets the water to WL_LOW the "Low Emblem", the one that + // sets it to WL_MID the "Mid Emblem", and the one that sets it to WL_HIGH the "High Emblem" + switch (level) { + // While you have to go through WL_LOW to get to Mid, the requirements for WL_LOW are stricter than WL_MID + // because you can always go up to WL_MID and then could need to go back to WL_HIGH to reach the Low Emblem + // again Thanks to this caveat you need to be able to reach and play ZL to both the High and Low Emblems to have + // WL_LOW in logic. Alternativly a way to reach WL_LOW from WL_MID could exist, but all glitchless methods need + // you to do a Low-locked action + case WL_LOW: + return (CanWaterTempleHigh && CanWaterTempleLowFromHigh) || + (CanWaterTempleLowFromMid && CanWaterTempleLowFromHigh); + case WL_LOW_OR_MID: + return (CanWaterTempleHigh && CanWaterTempleLowFromHigh) || + (CanWaterTempleLowFromHigh && CanWaterTempleMiddle) || + (CanWaterTempleLowFromMid && CanWaterTempleLowFromHigh); + // If we can set it to High out of logic we can just repeat what we did to lower the water in the first place as + // High is the default. Because of this you only need to be able to use the Low and Mid Emblems, WL_LOW could be + // skipped if it was ever possible to play ZL underwater. + case WL_MID: + return CanWaterTempleLowFromHigh && CanWaterTempleMiddle; + // Despite being the initial state of water temple, WL_HIGH has the extra requirement of making sure that, if we + // were to lower the water out of logic, we could put it back to WL_HIGH However because it is the default + // state, we do not need to check if we can actually change the water level, only to make sure we can return to + // WL_HIGH if we found the means to play ZL out of logic. There are 2 methods to lock yourself out after playing + // ZL already: Not being able to reach the High Emblem and being unable to replay ZL. (I will be ignoring + // other-age-access shenanigains) The former check would simply be a check to see if we can reach High Emblem, + // but we assume the water is WL_MID (as if we can set it to WL_LOW, we can set it to WL_MID, as Mid Emblem has + // no requirements) The latter check can be assumed for now but will want a revisit once OI tricks are added. + case WL_HIGH: + return ReachedWaterHighEmblem; + case WL_HIGH_OR_MID: + return ReachedWaterHighEmblem || (CanWaterTempleLowFromHigh && CanWaterTempleMiddle); + } + SPDLOG_ERROR("MQWaterLevel reached `return false;`. Missing case for a Water Level"); + assert(false); + return false; +} + +Logic::Logic() { +} + +uint8_t Logic::BottleCount() { + uint8_t count = 0; + if (CouldEmptyBigPoes && !AreCheckingBigPoes) { + for (int i = SLOT_BOTTLE_1; i <= SLOT_BOTTLE_4; i++) { + uint8_t item = GetSaveContext()->inventory.items[i]; + switch (item) { + case ITEM_LETTER_RUTO: + if (DeliverLetter) { + count++; } - } - auto newItem = i + (!state ? -1 : 1); - if (newItem < 0) { - newItem = 0; - } - else if (newItem > 2) { - newItem = 2; - } - SetInventory(ITEM_HOOKSHOT, HookshotLookup[newItem]); - } break; - case RG_PROGRESSIVE_STRENGTH: - { - auto currentLevel = CurrentUpgrade(UPG_STRENGTH); - auto newLevel = currentLevel + (!state ? -1 : 1); - SetUpgrade(UPG_STRENGTH, newLevel); - } break; - case RG_PROGRESSIVE_BOMB_BAG: - { - auto realGI = item.GetGIEntry(); - if (realGI->itemId == RG_BOMB_BAG_INF && realGI->modIndex == MOD_RANDOMIZER) { - SetRandoInf(RAND_INF_HAS_INFINITE_BOMB_BAG, true); break; - } - auto currentLevel = CurrentUpgrade(UPG_BOMB_BAG); - auto newLevel = currentLevel + (!state ? -1 : 1); - if (currentLevel == 0 && state || currentLevel == 1 && !state) { - SetInventory(ITEM_BOMB, (!state ? ITEM_NONE : ITEM_BOMB)); - } - SetUpgrade(UPG_BOMB_BAG, newLevel); - } break; - case RG_PROGRESSIVE_BOW: - { - auto realGI = item.GetGIEntry(); - if (realGI->itemId == RG_QUIVER_INF && realGI->modIndex == MOD_RANDOMIZER) { - SetRandoInf(RAND_INF_HAS_INFINITE_QUIVER, true); - break; - } - auto currentLevel = CurrentUpgrade(UPG_QUIVER); - auto newLevel = currentLevel + (!state ? -1 : 1); - if (currentLevel == 0 && state || currentLevel == 1 && !state) { - SetInventory(ITEM_BOW, (!state ? ITEM_NONE : ITEM_BOW)); - } - SetUpgrade(UPG_QUIVER, newLevel); - } break; - case RG_PROGRESSIVE_SLINGSHOT: - { - auto realGI = item.GetGIEntry(); - if (realGI->itemId == RG_BULLET_BAG_INF && realGI->modIndex == MOD_RANDOMIZER) { - SetRandoInf(RAND_INF_HAS_INFINITE_BULLET_BAG, true); - break; - } - auto currentLevel = CurrentUpgrade(UPG_BULLET_BAG); - auto newLevel = currentLevel + (!state ? -1 : 1); - if (currentLevel == 0 && state || currentLevel == 1 && !state) { - SetInventory(ITEM_SLINGSHOT, (!state ? ITEM_NONE : ITEM_SLINGSHOT)); - } - SetUpgrade(UPG_BULLET_BAG, newLevel); - } break; - case RG_PROGRESSIVE_WALLET: - { - auto realGI = item.GetGIEntry(); - if (realGI->itemId == RG_WALLET_INF && realGI->modIndex == MOD_RANDOMIZER) { - SetRandoInf(RAND_INF_HAS_INFINITE_MONEY, true); - break; - } - auto currentLevel = CurrentUpgrade(UPG_WALLET); - if (!CheckRandoInf(RAND_INF_HAS_WALLET) && state) { - SetRandoInf(RAND_INF_HAS_WALLET, true); - } - else if (currentLevel == 0 && !state) { - SetRandoInf(RAND_INF_HAS_WALLET, false); - } - else { - auto newLevel = currentLevel + (!state ? -1 : 1); - SetUpgrade(UPG_WALLET, newLevel); - } - } break; - case RG_PROGRESSIVE_SCALE: - { - auto currentLevel = CurrentUpgrade(UPG_SCALE); - if (!CheckRandoInf(RAND_INF_CAN_SWIM) && state) { - SetRandoInf(RAND_INF_CAN_SWIM, true); - } - else if (currentLevel == 0 && !state) { - SetRandoInf(RAND_INF_CAN_SWIM, false); - } - else { - auto newLevel = currentLevel + (!state ? -1 : 1); - SetUpgrade(UPG_SCALE, newLevel); - } - } break; - case RG_PROGRESSIVE_NUT_UPGRADE: - { - auto realGI = item.GetGIEntry(); - if (realGI->itemId == RG_NUT_UPGRADE_INF && realGI->modIndex == MOD_RANDOMIZER) { - SetRandoInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE, true); - break; - } - auto currentLevel = CurrentUpgrade(UPG_NUTS); - auto newLevel = currentLevel + (!state ? -1 : 1); - if (currentLevel == 0 && state || currentLevel == 1 && !state) { - SetInventory(ITEM_NUT, (!state ? ITEM_NONE : ITEM_NUT)); - } - SetUpgrade(UPG_NUTS, newLevel); - } break; - case RG_PROGRESSIVE_STICK_UPGRADE: - { - auto realGI = item.GetGIEntry(); - if (realGI->itemId == RG_STICK_UPGRADE_INF && realGI->modIndex == MOD_RANDOMIZER) { - SetRandoInf(RAND_INF_HAS_INFINITE_STICK_UPGRADE, true); - break; - } - auto currentLevel = CurrentUpgrade(UPG_STICKS); - auto newLevel = currentLevel + (!state ? -1 : 1); - if (currentLevel == 0 && state || currentLevel == 1 && !state) { - SetInventory(ITEM_STICK, (!state ? ITEM_NONE : ITEM_STICK)); - } - SetUpgrade(UPG_STICKS, newLevel); - } break; - case RG_PROGRESSIVE_BOMBCHUS: - { - auto realGI = item.GetGIEntry(); - if (realGI->itemId == RG_BOMBCHU_INF && realGI->modIndex == MOD_RANDOMIZER) { - SetRandoInf(RAND_INF_HAS_INFINITE_BOMBCHUS, true); - break; - } - SetInventory(ITEM_BOMBCHU, (!state ? ITEM_NONE : ITEM_BOMBCHU)); - } break; - case RG_PROGRESSIVE_MAGIC_METER: - { - auto realGI = item.GetGIEntry(); - if (realGI->itemId == RG_MAGIC_INF && realGI->modIndex == MOD_RANDOMIZER) { - SetRandoInf(RAND_INF_HAS_INFINITE_MAGIC_METER, true); - break; - } - mSaveContext->magicLevel += (!state ? -1 : 1); - } break; - case RG_PROGRESSIVE_OCARINA: - { - uint8_t i; - for (i = 0; i < 3; i++) { - if (CurrentInventory(ITEM_OCARINA_FAIRY) == OcarinaLookup[i]) { - break; + case ITEM_BIG_POE: + if (CanEmptyBigPoes) { + count++; } - } - i += (!state ? -1 : 1); - if (i < 0) { - i = 0; - } - else if (i > 2) { - i = 2; - } - SetInventory(ITEM_OCARINA_FAIRY, OcarinaLookup[i]); - } break; - case RG_HEART_CONTAINER: - mSaveContext->healthCapacity += (!state ? -16 : 16); - break; - case RG_PIECE_OF_HEART: - mSaveContext->healthCapacity += (!state ? -4 : 4); - break; - case RG_BOOMERANG: - case RG_LENS_OF_TRUTH: - case RG_MEGATON_HAMMER: - case RG_DINS_FIRE: - case RG_FARORES_WIND: - case RG_NAYRUS_LOVE: - case RG_FIRE_ARROWS: - case RG_ICE_ARROWS: - case RG_LIGHT_ARROWS: - SetInventory(item.GetGIEntry()->itemId, (!state ? ITEM_NONE : item.GetGIEntry()->itemId)); - break; - case RG_MAGIC_BEAN: - case RG_MAGIC_BEAN_PACK: - { - auto change = (item.GetRandomizerGet() == RG_MAGIC_BEAN ? 1 : 10); - auto current = GetAmmo(ITEM_BEAN); - SetAmmo(ITEM_BEAN, current + (!state ? -change : change)); - } break; - case RG_EMPTY_BOTTLE: - case RG_BOTTLE_WITH_MILK: - case RG_BOTTLE_WITH_RED_POTION: - case RG_BOTTLE_WITH_GREEN_POTION: - case RG_BOTTLE_WITH_BLUE_POTION: - case RG_BOTTLE_WITH_FAIRY: - case RG_BOTTLE_WITH_FISH: - case RG_BOTTLE_WITH_BLUE_FIRE: - case RG_BOTTLE_WITH_BUGS: - case RG_BOTTLE_WITH_POE: - case RG_BOTTLE_WITH_BIG_POE: - { - uint8_t slot = SLOT_BOTTLE_1; - while (slot != SLOT_BOTTLE_4) { - if (mSaveContext->inventory.items[slot] == ITEM_NONE) { - break; - } - slot++; - } - uint16_t itemId = item.GetGIEntry()->itemId; - 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: - SetEventChkInf(EVENTCHKINF_OBTAINED_RUTOS_LETTER, state); - break; - case RG_GOHMA_SOUL: - case RG_KING_DODONGO_SOUL: - case RG_BARINADE_SOUL: - case RG_PHANTOM_GANON_SOUL: - case RG_VOLVAGIA_SOUL: - case RG_MORPHA_SOUL: - case RG_BONGO_BONGO_SOUL: - case RG_TWINROVA_SOUL: - case RG_GANON_SOUL: - case RG_OCARINA_A_BUTTON: - case RG_OCARINA_C_UP_BUTTON: - case RG_OCARINA_C_DOWN_BUTTON: - case RG_OCARINA_C_LEFT_BUTTON: - case RG_OCARINA_C_RIGHT_BUTTON: - case RG_GREG_RUPEE: - case RG_FISHING_POLE: - case RG_GUARD_HOUSE_KEY: - case RG_MARKET_BAZAAR_KEY: - case RG_MARKET_POTION_SHOP_KEY: - case RG_MASK_SHOP_KEY: - case RG_MARKET_SHOOTING_GALLERY_KEY: - case RG_BOMBCHU_BOWLING_KEY: - case RG_TREASURE_CHEST_GAME_BUILDING_KEY: - case RG_BOMBCHU_SHOP_KEY: - case RG_RICHARDS_HOUSE_KEY: - case RG_ALLEY_HOUSE_KEY: - case RG_KAK_BAZAAR_KEY: - case RG_KAK_POTION_SHOP_KEY: - case RG_BOSS_HOUSE_KEY: - case RG_GRANNYS_POTION_SHOP_KEY: - case RG_SKULLTULA_HOUSE_KEY: - case RG_IMPAS_HOUSE_KEY: - case RG_WINDMILL_KEY: - case RG_KAK_SHOOTING_GALLERY_KEY: - case RG_DAMPES_HUT_KEY: - case RG_TALONS_HOUSE_KEY: - case RG_STABLES_KEY: - case RG_BACK_TOWER_KEY: - case RG_HYLIA_LAB_KEY: - case RG_FISHING_HOLE_KEY: - SetRandoInf(RandoGetToRandInf.at(randoGet), state); - break; - case RG_TRIFORCE_PIECE: - mSaveContext->ship.quest.data.randomizer.triforcePiecesCollected += (!state ? -1 : 1); - break; - case RG_BOMBCHU_5: - case RG_BOMBCHU_10: - case RG_BOMBCHU_20: - SetInventory(ITEM_BOMBCHU, (!state ? ITEM_NONE : ITEM_BOMBCHU)); - break; - default: - break; + break; + case ITEM_NONE: + break; + default: + count++; + break; } } - break; - case ITEMTYPE_EQUIP: - { + } + return count; +} + +uint8_t Logic::OcarinaButtons() { + return HasItem(RG_OCARINA_A_BUTTON) + HasItem(RG_OCARINA_C_LEFT_BUTTON) + HasItem(RG_OCARINA_C_RIGHT_BUTTON) + + HasItem(RG_OCARINA_C_UP_BUTTON) + HasItem(RG_OCARINA_C_DOWN_BUTTON); +} + +bool Logic::HasBottle() { + return BottleCount() >= 1; +} + +bool Logic::CanJumpslashExceptHammer() { + // Not including hammer as hammer jump attacks can be weird; + return CanUse(RG_STICKS) || CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD); +} + +bool Logic::CanJumpslash() { + return CanJumpslashExceptHammer() || CanUse(RG_MEGATON_HAMMER); +} + +bool Logic::CanHitSwitch(EnemyDistance distance, bool inWater) { + bool hit = false; + switch (distance) { + case ED_CLOSE: + case ED_SHORT_JUMPSLASH: + hit = CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MEGATON_HAMMER); + [[fallthrough]]; + case ED_MASTER_SWORD_JUMPSLASH: + hit = hit || CanUse(RG_MASTER_SWORD); + [[fallthrough]]; + case ED_LONG_JUMPSLASH: + hit = hit || CanUse(RG_BIGGORON_SWORD) || CanUse(RG_STICKS); + [[fallthrough]]; + case ED_BOMB_THROW: + hit = hit || (!inWater && CanUse(RG_BOMB_BAG)); + [[fallthrough]]; + case ED_BOOMERANG: + hit = hit || CanUse(RG_BOOMERANG); + [[fallthrough]]; + case ED_HOOKSHOT: + // RANDOTODO test chu range in a practical example + hit = hit || CanUse(RG_HOOKSHOT) || CanUse(RG_BOMBCHU_5); + [[fallthrough]]; + case ED_LONGSHOT: + hit = hit || CanUse(RG_LONGSHOT); + [[fallthrough]]; + case ED_FAR: + hit = hit || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW); + break; + } + return hit; +} + +bool Logic::CanDamage() { + return CanUse(RG_FAIRY_SLINGSHOT) || CanJumpslash() || HasExplosives() || CanUse(RG_DINS_FIRE) || + CanUse(RG_FAIRY_BOW); +} + +bool Logic::CanAttack() { + return CanDamage() || CanUse(RG_BOOMERANG) || CanUse(RG_HOOKSHOT); +} + +bool Logic::BombchusEnabled() { + return ctx->GetOption(RSK_BOMBCHU_BAG) ? CheckInventory(ITEM_BOMBCHU, true) : HasItem(RG_BOMB_BAG); +} + +// TODO: Implement Ammo Drop Setting in place of bombchu drops +bool Logic::BombchuRefill() { + return GetInLogic(LOGIC_BUY_BOMBCHUS) || CouldPlayBowling || CarpetMerchant || + (ctx->GetOption(RSK_ENABLE_BOMBCHU_DROPS).Is(RO_AMMO_DROPS_ON /*_PLUS_BOMBCHU*/)); +} + +bool Logic::HookshotOrBoomerang() { + return CanUse(RG_HOOKSHOT) || CanUse(RG_BOOMERANG); +} + +bool Logic::ScarecrowsSong() { + return (ctx->GetOption(RSK_SKIP_SCARECROWS_SONG) && HasItem(RG_FAIRY_OCARINA) && OcarinaButtons() >= 2) || + (ChildScarecrow && AdultScarecrow); +} + +bool Logic::BlueFire() { + return CanUse(RG_BOTTLE_WITH_BLUE_FIRE) || (ctx->GetOption(RSK_BLUE_FIRE_ARROWS) && CanUse(RG_ICE_ARROWS)); +} + +bool Logic::CanBreakPots() { + return true; +} + +bool Logic::CanBreakCrates() { + return true; +} + +bool Logic::CanBreakSmallCrates() { + return true; +} + +bool Logic::HasExplosives() { + return CanUse(RG_BOMB_BAG) || CanUse(RG_BOMBCHU_5); +} + +bool Logic::BlastOrSmash() { + return HasExplosives() || CanUse(RG_MEGATON_HAMMER); +} + +bool Logic::CanSpawnSoilSkull() { + return IsChild && CanUse(RG_BOTTLE_WITH_BUGS); +} + +bool Logic::CanReflectNuts() { + return CanUse(RG_DEKU_SHIELD) || (IsAdult && HasItem(RG_HYLIAN_SHIELD)); +} + +bool Logic::CanCutShrubs() { + return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_BOOMERANG) || HasExplosives() || CanUse(RG_MASTER_SWORD) || + CanUse(RG_MEGATON_HAMMER) || CanUse(RG_BIGGORON_SWORD) || HasItem(RG_GORONS_BRACELET); +} + +bool Logic::CanStunDeku() { + return CanAttack() || CanUse(RG_NUTS) || CanReflectNuts(); +} + +bool Logic::CanLeaveForest() { + return ctx->GetOption(RSK_FOREST).IsNot(RO_CLOSED_FOREST_ON) || IsAdult || DekuTreeClear || + ctx->GetOption(RSK_SHUFFLE_INTERIOR_ENTRANCES) || ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES); +} + +bool Logic::CallGossipFairyExceptSuns() { + return CanUse(RG_ZELDAS_LULLABY) || CanUse(RG_EPONAS_SONG) || CanUse(RG_SONG_OF_TIME); +} + +bool Logic::CallGossipFairy() { + return CallGossipFairyExceptSuns() || CanUse(RG_SUNS_SONG); +} + +// the number returned by this is in half heart hits taken. +// RANDOTODO work in OoT side health instead for greater applicability (16 per heart) +uint8_t Logic::EffectiveHealth() { + /* Multiplier will be: + 0 for half daamge + 1 for normal damage + 2 for double damage + 3 for quad damage + 4 for 8* damage + 5 for 16* damage + 10 for OHKO. + This is the number of shifts to apply, not a real multiplier + */ + uint8_t Multiplier = + (ctx->GetOption(RSK_DAMAGE_MULTIPLIER).Get() < 6) ? ctx->GetOption(RSK_DAMAGE_MULTIPLIER).Get() : 10; + //(Hearts() << (2 + HasItem(RG_DOUBLE_DEFENSE))) is quarter hearts after DD + //>> Multiplier halves on normal and does nothing on half, meaning we're working with half hearts on normal damage + return ((Hearts() << (2 + HasItem(RG_DOUBLE_DEFENSE))) >> Multiplier) + + // As 1 is a quarter heart, (1 << Multiplier) is effectivly half-hearts of unmodified damage + // Adds an extra hit if the damage is not exact lethal + ((Hearts() << (2 + HasItem(RG_DOUBLE_DEFENSE))) % (1 << Multiplier) > 0); +} + +uint8_t Logic::Hearts() { + return GetSaveContext()->healthCapacity / 16; +} + +uint8_t Logic::DungeonCount() { + return DekuTreeClear + DodongosCavernClear + JabuJabusBellyClear + ForestTempleClear + FireTempleClear + + WaterTempleClear + SpiritTempleClear + ShadowTempleClear; +} + +uint8_t Logic::StoneCount() { + return HasItem(RG_KOKIRI_EMERALD) + HasItem(RG_GORON_RUBY) + HasItem(RG_ZORA_SAPPHIRE); +} + +uint8_t Logic::MedallionCount() { + return HasItem(RG_FOREST_MEDALLION) + HasItem(RG_FIRE_MEDALLION) + HasItem(RG_WATER_MEDALLION) + + HasItem(RG_SPIRIT_MEDALLION) + HasItem(RG_SHADOW_MEDALLION) + HasItem(RG_LIGHT_MEDALLION); +} + +uint8_t Logic::FireTimer() { + return CanUse(RG_GORON_TUNIC) ? 255 : (ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS)) ? (Hearts() * 8) : 0; +} + +// Tunic is not required if you are using irons to do something that a simple gold scale dive could do, and you are not +// in water temple. (celing swimming and long walks through water do not count) +uint8_t Logic::WaterTimer() { + return CanUse(RG_ZORA_TUNIC) ? 255 : (ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS)) ? (Hearts() * 8) : 0; +} + +bool Logic::TakeDamage() { + return CanUse(RG_BOTTLE_WITH_FAIRY) || EffectiveHealth() != 1 || CanUse(RG_NAYRUS_LOVE); +} + +bool Logic::CanOpenBombGrotto() { + return BlastOrSmash() && (HasItem(RG_STONE_OF_AGONY) || ctx->GetTrickOption(RT_GROTTOS_WITHOUT_AGONY)); +} + +bool Logic::CanOpenStormsGrotto() { + return CanUse(RG_SONG_OF_STORMS) && (HasItem(RG_STONE_OF_AGONY) || ctx->GetTrickOption(RT_GROTTOS_WITHOUT_AGONY)); +} + +bool Logic::CanGetNightTimeGS() { + return AtNight && (CanUse(RG_SUNS_SONG) || !ctx->GetOption(RSK_SKULLS_SUNS_SONG)); +} + +bool Logic::CanBreakUpperBeehives() { + return HookshotOrBoomerang() || (ctx->GetTrickOption(RT_BOMBCHU_BEEHIVES) && CanUse(RG_BOMBCHU_5)); +} + +bool Logic::CanBreakLowerBeehives() { + return CanBreakUpperBeehives() || CanUse(RG_BOMB_BAG); +} + +bool Logic::HasFireSource() { + return CanUse(RG_DINS_FIRE) || CanUse(RG_FIRE_ARROWS); +} + +bool Logic::HasFireSourceWithTorch() { + return HasFireSource() || CanUse(RG_STICKS); +} + +// Is this best off signaling what you have already traded, or what step you are currently on? +bool Logic::TradeQuestStep(RandomizerGet rg) { + if (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE)) { + return false; // This does not apply when we are shuffling trade items + } + bool hasState = false; + // Falling through each case to test each possibility + switch (rg) { + case RG_POCKET_EGG: + hasState = hasState || HasItem(RG_POCKET_EGG); + [[fallthrough]]; + case RG_COJIRO: + hasState = hasState || HasItem(RG_COJIRO); + [[fallthrough]]; + case RG_ODD_MUSHROOM: + hasState = hasState || HasItem(RG_ODD_MUSHROOM); + [[fallthrough]]; + case RG_ODD_POTION: + hasState = hasState || HasItem(RG_ODD_POTION); + [[fallthrough]]; + case RG_POACHERS_SAW: + hasState = hasState || HasItem(RG_POACHERS_SAW); + [[fallthrough]]; + case RG_BROKEN_SWORD: + hasState = hasState || HasItem(RG_BROKEN_SWORD); + [[fallthrough]]; + case RG_PRESCRIPTION: + hasState = hasState || HasItem(RG_PRESCRIPTION); + [[fallthrough]]; + case RG_EYEDROPS: + hasState = hasState || HasItem(RG_EYEDROPS); + [[fallthrough]]; + case RG_CLAIM_CHECK: + hasState = hasState || HasItem(RG_CLAIM_CHECK); + break; + default: + SPDLOG_ERROR("TradeQuestStep reached `return false;`. Missing case for RandomizerGet of {}", + static_cast(rg)); + assert(false); + return false; + } + return hasState; +} + +bool Logic::CanFinishGerudoFortress() { + return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && SmallKeys(RR_GERUDO_FORTRESS, 4) && + CanKillEnemy(RE_GERUDO_WARRIOR) && + (HasItem(RG_GERUDO_MEMBERSHIP_CARD) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || + CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_GF_KITCHEN))) || + (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST) && SmallKeys(RR_GERUDO_FORTRESS, 1) && + CanKillEnemy(RE_GERUDO_WARRIOR)) || + ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE); +} + +bool Logic::CanStandingShield() { + return CanUse(RG_MIRROR_SHIELD) || (IsAdult && HasItem(RG_HYLIAN_SHIELD)) || CanUse(RG_DEKU_SHIELD); +} + +bool Logic::CanShield() { + return CanUse(RG_MIRROR_SHIELD) || HasItem(RG_HYLIAN_SHIELD) || CanUse(RG_DEKU_SHIELD); +} + +bool Logic::CanUseProjectile() { + return HasExplosives() || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_SLINGSHOT) || + CanUse(RG_BOOMERANG); +} + +bool Logic::CanBuildRainbowBridge() { + return ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_ALWAYS_OPEN) || + (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_VANILLA) && HasItem(RG_SHADOW_MEDALLION) && + HasItem(RG_SPIRIT_MEDALLION) && CanUse(RG_LIGHT_ARROWS)) || + (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_STONES) && + StoneCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_BRIDGE_OPTIONS).Is(RO_BRIDGE_GREG_REWARD)) >= + ctx->GetOption(RSK_RAINBOW_BRIDGE_STONE_COUNT).Get()) || + (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_MEDALLIONS) && + MedallionCount() + + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_BRIDGE_OPTIONS).Is(RO_BRIDGE_GREG_REWARD)) >= + ctx->GetOption(RSK_RAINBOW_BRIDGE_MEDALLION_COUNT).Get()) || + (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEON_REWARDS) && + StoneCount() + MedallionCount() + + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_BRIDGE_OPTIONS).Is(RO_BRIDGE_GREG_REWARD)) >= + ctx->GetOption(RSK_RAINBOW_BRIDGE_REWARD_COUNT).Get()) || + (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_DUNGEONS) && + DungeonCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_BRIDGE_OPTIONS).Is(RO_BRIDGE_GREG_REWARD)) >= + ctx->GetOption(RSK_RAINBOW_BRIDGE_DUNGEON_COUNT).Get()) || + (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_TOKENS) && + GetGSCount() >= ctx->GetOption(RSK_RAINBOW_BRIDGE_TOKEN_COUNT).Get()) || + (ctx->GetOption(RSK_RAINBOW_BRIDGE).Is(RO_BRIDGE_GREG) && HasItem(RG_GREG_RUPEE)); +} + +bool Logic::CanTriggerLACS() { + return (ctx->LACSCondition() == RO_LACS_VANILLA && HasItem(RG_SHADOW_MEDALLION) && HasItem(RG_SPIRIT_MEDALLION)) || + (ctx->LACSCondition() == RO_LACS_STONES && + StoneCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_LACS_OPTIONS).Is(RO_LACS_GREG_REWARD)) >= + ctx->GetOption(RSK_LACS_STONE_COUNT).Get()) || + (ctx->LACSCondition() == RO_LACS_MEDALLIONS && + MedallionCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_LACS_OPTIONS).Is(RO_LACS_GREG_REWARD)) >= + ctx->GetOption(RSK_LACS_MEDALLION_COUNT).Get()) || + (ctx->LACSCondition() == RO_LACS_REWARDS && + StoneCount() + MedallionCount() + + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_LACS_OPTIONS).Is(RO_LACS_GREG_REWARD)) >= + ctx->GetOption(RSK_LACS_REWARD_COUNT).Get()) || + (ctx->LACSCondition() == RO_LACS_DUNGEONS && + DungeonCount() + (HasItem(RG_GREG_RUPEE) && ctx->GetOption(RSK_LACS_OPTIONS).Is(RO_LACS_GREG_REWARD)) >= + ctx->GetOption(RSK_LACS_DUNGEON_COUNT).Get()) || + (ctx->LACSCondition() == RO_LACS_TOKENS && GetGSCount() >= ctx->GetOption(RSK_LACS_TOKEN_COUNT).Get()); +} + +bool Logic::SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmount) { + return SmallKeys(dungeon, requiredAmount, requiredAmount); +} + +bool Logic::SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmountGlitchless, uint8_t requiredAmountGlitched) { + if (HasItem(RG_SKELETON_KEY)) { + return true; + } + switch (dungeon) { + case RR_FOREST_TEMPLE: + /*if (IsGlitched && (GetDifficultyValueFromString(GlitchHookshotJump_Boots) >= + static_cast(GlitchDifficulty::INTERMEDIATE) || GetDifficultyValueFromString(GlitchHoverBoost) >= + static_cast(GlitchDifficulty::NOVICE) || (GetDifficultyValueFromString(GlitchHover) >= + static_cast(GlitchDifficulty::NOVICE) && GetDifficultyValueFromString(GlitchISG) >= + static_cast(GlitchDifficulty::INTERMEDIATE)))) { return ForestTempleKeys >= requiredAmountGlitched; + }*/ + return GetSmallKeyCount(SCENE_FOREST_TEMPLE) >= requiredAmountGlitchless; + + case RR_FIRE_TEMPLE: + /*if (IsGlitched && (GetDifficultyValueFromString(GlitchLedgeClip) >= + static_cast(GlitchDifficulty::INTERMEDIATE) || GetDifficultyValueFromString(GlitchHover) >= + static_cast(GlitchDifficulty::INTERMEDIATE))) { return FireTempleKeys >= requiredAmountGlitched; + }*/ + return GetSmallKeyCount(SCENE_FIRE_TEMPLE) >= requiredAmountGlitchless; + + case RR_WATER_TEMPLE: + /*if (IsGlitched && (false)) { + return WaterTempleKeys >= requiredAmountGlitched; + }*/ + return GetSmallKeyCount(SCENE_WATER_TEMPLE) >= requiredAmountGlitchless; + + case RR_SPIRIT_TEMPLE: + /*if (IsGlitched && (false)) { + return SpiritTempleKeys >= requiredAmountGlitched; + }*/ + return GetSmallKeyCount(SCENE_SPIRIT_TEMPLE) >= requiredAmountGlitchless; + + case RR_SHADOW_TEMPLE: + /*if (IsGlitched && (GetDifficultyValueFromString(GlitchHookshotClip) >= + static_cast(GlitchDifficulty::NOVICE))) { return ShadowTempleKeys >= requiredAmountGlitched; + }*/ + return GetSmallKeyCount(SCENE_SHADOW_TEMPLE) >= requiredAmountGlitchless; + + case RR_BOTTOM_OF_THE_WELL: + /*if (IsGlitched && (false)) { + return BottomOfTheWellKeys >= requiredAmountGlitched; + }*/ + return GetSmallKeyCount(SCENE_BOTTOM_OF_THE_WELL) >= requiredAmountGlitchless; + + case RR_GERUDO_TRAINING_GROUND: + /*if (IsGlitched && (false)) { + return GerudoTrainingGroundsKeys >= requiredAmountGlitched; + }*/ + return GetSmallKeyCount(SCENE_GERUDO_TRAINING_GROUND) >= requiredAmountGlitchless; + + case RR_GANONS_CASTLE: + /*if (IsGlitched && (false)) { + return GanonsCastleKeys >= requiredAmountGlitched; + }*/ + return GetSmallKeyCount(SCENE_INSIDE_GANONS_CASTLE) >= requiredAmountGlitchless; + + case RR_MARKET_TREASURE_CHEST_GAME: + /*if (IsGlitched && (false)) { + return TreasureGameKeys >= requiredAmountGlitched; + }*/ + return GetSmallKeyCount(SCENE_TREASURE_BOX_SHOP) >= requiredAmountGlitchless; + + case RR_GERUDO_FORTRESS: + return GetSmallKeyCount(SCENE_THIEVES_HIDEOUT) >= requiredAmountGlitchless; + + default: + return false; + } +} + +std::map Logic::RandoGetToEquipFlag = { + { RG_KOKIRI_SWORD, EQUIP_FLAG_SWORD_KOKIRI }, { RG_MASTER_SWORD, EQUIP_FLAG_SWORD_MASTER }, + { RG_BIGGORON_SWORD, EQUIP_FLAG_SWORD_BGS }, { RG_DEKU_SHIELD, EQUIP_FLAG_SHIELD_DEKU }, + { RG_HYLIAN_SHIELD, EQUIP_FLAG_SHIELD_HYLIAN }, { RG_MIRROR_SHIELD, EQUIP_FLAG_SHIELD_MIRROR }, + { RG_GORON_TUNIC, EQUIP_FLAG_TUNIC_GORON }, { RG_ZORA_TUNIC, EQUIP_FLAG_TUNIC_ZORA }, + { RG_BUY_DEKU_SHIELD, EQUIP_FLAG_SHIELD_DEKU }, { RG_BUY_HYLIAN_SHIELD, EQUIP_FLAG_SHIELD_HYLIAN }, + { RG_BUY_GORON_TUNIC, EQUIP_FLAG_TUNIC_GORON }, { RG_BUY_ZORA_TUNIC, EQUIP_FLAG_TUNIC_ZORA }, + { RG_IRON_BOOTS, EQUIP_FLAG_BOOTS_IRON }, { RG_HOVER_BOOTS, EQUIP_FLAG_BOOTS_HOVER } +}; + +std::map Logic::RandoGetToRandInf = { + { RG_ZELDAS_LETTER, RAND_INF_ZELDAS_LETTER }, + { RG_WEIRD_EGG, RAND_INF_WEIRD_EGG }, + { RG_GOHMA_SOUL, RAND_INF_GOHMA_SOUL }, + { RG_KING_DODONGO_SOUL, RAND_INF_KING_DODONGO_SOUL }, + { RG_BARINADE_SOUL, RAND_INF_BARINADE_SOUL }, + { RG_PHANTOM_GANON_SOUL, RAND_INF_PHANTOM_GANON_SOUL }, + { RG_VOLVAGIA_SOUL, RAND_INF_VOLVAGIA_SOUL }, + { RG_MORPHA_SOUL, RAND_INF_MORPHA_SOUL }, + { RG_BONGO_BONGO_SOUL, RAND_INF_BONGO_BONGO_SOUL }, + { RG_TWINROVA_SOUL, RAND_INF_TWINROVA_SOUL }, + { RG_GANON_SOUL, RAND_INF_GANON_SOUL }, + { RG_OCARINA_A_BUTTON, RAND_INF_HAS_OCARINA_A }, + { RG_OCARINA_C_UP_BUTTON, RAND_INF_HAS_OCARINA_C_UP }, + { RG_OCARINA_C_DOWN_BUTTON, RAND_INF_HAS_OCARINA_C_DOWN }, + { RG_OCARINA_C_LEFT_BUTTON, RAND_INF_HAS_OCARINA_C_LEFT }, + { RG_OCARINA_C_RIGHT_BUTTON, RAND_INF_HAS_OCARINA_C_RIGHT }, + { RG_SKELETON_KEY, RAND_INF_HAS_SKELETON_KEY }, + { RG_GREG_RUPEE, RAND_INF_GREG_FOUND }, + { RG_FISHING_POLE, RAND_INF_FISHING_POLE_FOUND }, + { RG_GUARD_HOUSE_KEY, RAND_INF_GUARD_HOUSE_KEY_OBTAINED }, + { RG_MARKET_BAZAAR_KEY, RAND_INF_MARKET_BAZAAR_KEY_OBTAINED }, + { RG_MARKET_POTION_SHOP_KEY, RAND_INF_MARKET_POTION_SHOP_KEY_OBTAINED }, + { RG_MASK_SHOP_KEY, RAND_INF_MASK_SHOP_KEY_OBTAINED }, + { RG_MARKET_SHOOTING_GALLERY_KEY, RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED }, + { RG_BOMBCHU_BOWLING_KEY, RAND_INF_BOMBCHU_BOWLING_KEY_OBTAINED }, + { RG_TREASURE_CHEST_GAME_BUILDING_KEY, RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED }, + { RG_BOMBCHU_SHOP_KEY, RAND_INF_BOMBCHU_SHOP_KEY_OBTAINED }, + { RG_RICHARDS_HOUSE_KEY, RAND_INF_RICHARDS_HOUSE_KEY_OBTAINED }, + { RG_ALLEY_HOUSE_KEY, RAND_INF_ALLEY_HOUSE_KEY_OBTAINED }, + { RG_KAK_BAZAAR_KEY, RAND_INF_KAK_BAZAAR_KEY_OBTAINED }, + { RG_KAK_POTION_SHOP_KEY, RAND_INF_KAK_POTION_SHOP_KEY_OBTAINED }, + { RG_BOSS_HOUSE_KEY, RAND_INF_BOSS_HOUSE_KEY_OBTAINED }, + { RG_GRANNYS_POTION_SHOP_KEY, RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED }, + { RG_SKULLTULA_HOUSE_KEY, RAND_INF_SKULLTULA_HOUSE_KEY_OBTAINED }, + { RG_IMPAS_HOUSE_KEY, RAND_INF_IMPAS_HOUSE_KEY_OBTAINED }, + { RG_WINDMILL_KEY, RAND_INF_WINDMILL_KEY_OBTAINED }, + { RG_KAK_SHOOTING_GALLERY_KEY, RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED }, + { RG_DAMPES_HUT_KEY, RAND_INF_DAMPES_HUT_KEY_OBTAINED }, + { RG_TALONS_HOUSE_KEY, RAND_INF_TALONS_HOUSE_KEY_OBTAINED }, + { RG_STABLES_KEY, RAND_INF_STABLES_KEY_OBTAINED }, + { RG_BACK_TOWER_KEY, RAND_INF_BACK_TOWER_KEY_OBTAINED }, + { RG_HYLIA_LAB_KEY, RAND_INF_HYLIA_LAB_KEY_OBTAINED }, + { RG_FISHING_HOLE_KEY, RAND_INF_FISHING_HOLE_KEY_OBTAINED }, +}; + +std::map Logic::RandoGetToDungeonScene = { + { RG_FOREST_TEMPLE_SMALL_KEY, SCENE_FOREST_TEMPLE }, + { RG_FIRE_TEMPLE_SMALL_KEY, SCENE_FIRE_TEMPLE }, + { RG_WATER_TEMPLE_SMALL_KEY, SCENE_WATER_TEMPLE }, + { RG_SPIRIT_TEMPLE_SMALL_KEY, SCENE_SPIRIT_TEMPLE }, + { RG_SHADOW_TEMPLE_SMALL_KEY, SCENE_SHADOW_TEMPLE }, + { RG_BOTTOM_OF_THE_WELL_SMALL_KEY, SCENE_BOTTOM_OF_THE_WELL }, + { RG_GERUDO_TRAINING_GROUND_SMALL_KEY, SCENE_GERUDO_TRAINING_GROUND }, + { RG_GERUDO_FORTRESS_SMALL_KEY, SCENE_THIEVES_HIDEOUT }, + { RG_GANONS_CASTLE_SMALL_KEY, SCENE_INSIDE_GANONS_CASTLE }, + { RG_FOREST_TEMPLE_KEY_RING, SCENE_FOREST_TEMPLE }, + { RG_FIRE_TEMPLE_KEY_RING, SCENE_FIRE_TEMPLE }, + { RG_WATER_TEMPLE_KEY_RING, SCENE_WATER_TEMPLE }, + { RG_SPIRIT_TEMPLE_KEY_RING, SCENE_SPIRIT_TEMPLE }, + { RG_SHADOW_TEMPLE_KEY_RING, SCENE_SHADOW_TEMPLE }, + { RG_BOTTOM_OF_THE_WELL_KEY_RING, SCENE_BOTTOM_OF_THE_WELL }, + { RG_GERUDO_TRAINING_GROUND_KEY_RING, SCENE_GERUDO_TRAINING_GROUND }, + { RG_GERUDO_FORTRESS_KEY_RING, SCENE_THIEVES_HIDEOUT }, + { RG_GANONS_CASTLE_KEY_RING, SCENE_INSIDE_GANONS_CASTLE }, + { RG_FOREST_TEMPLE_BOSS_KEY, SCENE_FOREST_TEMPLE }, + { RG_FIRE_TEMPLE_BOSS_KEY, SCENE_FIRE_TEMPLE }, + { RG_WATER_TEMPLE_BOSS_KEY, SCENE_WATER_TEMPLE }, + { RG_SPIRIT_TEMPLE_BOSS_KEY, SCENE_SPIRIT_TEMPLE }, + { RG_SHADOW_TEMPLE_BOSS_KEY, SCENE_SHADOW_TEMPLE }, + { RG_GANONS_CASTLE_BOSS_KEY, SCENE_INSIDE_GANONS_CASTLE }, + { RG_DEKU_TREE_MAP, SCENE_DEKU_TREE }, + { RG_DODONGOS_CAVERN_MAP, SCENE_DODONGOS_CAVERN }, + { RG_JABU_JABUS_BELLY_MAP, SCENE_JABU_JABU }, + { RG_FOREST_TEMPLE_MAP, SCENE_FOREST_TEMPLE }, + { RG_FIRE_TEMPLE_MAP, SCENE_FIRE_TEMPLE }, + { RG_WATER_TEMPLE_MAP, SCENE_WATER_TEMPLE }, + { RG_SPIRIT_TEMPLE_MAP, SCENE_SPIRIT_TEMPLE }, + { RG_SHADOW_TEMPLE_MAP, SCENE_SHADOW_TEMPLE }, + { RG_BOTTOM_OF_THE_WELL_MAP, SCENE_BOTTOM_OF_THE_WELL }, + { RG_ICE_CAVERN_MAP, SCENE_ICE_CAVERN }, + { RG_DEKU_TREE_COMPASS, SCENE_DEKU_TREE }, + { RG_DODONGOS_CAVERN_COMPASS, SCENE_DODONGOS_CAVERN }, + { RG_JABU_JABUS_BELLY_COMPASS, SCENE_JABU_JABU }, + { RG_FOREST_TEMPLE_COMPASS, SCENE_FOREST_TEMPLE }, + { RG_FIRE_TEMPLE_COMPASS, SCENE_FIRE_TEMPLE }, + { RG_WATER_TEMPLE_COMPASS, SCENE_WATER_TEMPLE }, + { RG_SPIRIT_TEMPLE_COMPASS, SCENE_SPIRIT_TEMPLE }, + { RG_SHADOW_TEMPLE_COMPASS, SCENE_SHADOW_TEMPLE }, + { RG_BOTTOM_OF_THE_WELL_COMPASS, SCENE_BOTTOM_OF_THE_WELL }, + { RG_ICE_CAVERN_COMPASS, SCENE_ICE_CAVERN }, + { RG_TREASURE_GAME_SMALL_KEY, SCENE_TREASURE_BOX_SHOP } +}; + +std::map Logic::RandoGetToQuestItem = { + { RG_FOREST_MEDALLION, QUEST_MEDALLION_FOREST }, + { RG_FIRE_MEDALLION, QUEST_MEDALLION_FIRE }, + { RG_WATER_MEDALLION, QUEST_MEDALLION_WATER }, + { RG_SPIRIT_MEDALLION, QUEST_MEDALLION_SPIRIT }, + { RG_SHADOW_MEDALLION, QUEST_MEDALLION_SHADOW }, + { RG_LIGHT_MEDALLION, QUEST_MEDALLION_LIGHT }, + { RG_MINUET_OF_FOREST, QUEST_SONG_MINUET }, + { RG_BOLERO_OF_FIRE, QUEST_SONG_BOLERO }, + { RG_SERENADE_OF_WATER, QUEST_SONG_SERENADE }, + { RG_REQUIEM_OF_SPIRIT, QUEST_SONG_REQUIEM }, + { RG_NOCTURNE_OF_SHADOW, QUEST_SONG_NOCTURNE }, + { RG_PRELUDE_OF_LIGHT, QUEST_SONG_PRELUDE }, + { RG_ZELDAS_LULLABY, QUEST_SONG_LULLABY }, + { RG_EPONAS_SONG, QUEST_SONG_EPONA }, + { RG_SARIAS_SONG, QUEST_SONG_SARIA }, + { RG_SUNS_SONG, QUEST_SONG_SUN }, + { RG_SONG_OF_TIME, QUEST_SONG_TIME }, + { RG_SONG_OF_STORMS, QUEST_SONG_STORMS }, + { RG_KOKIRI_EMERALD, QUEST_KOKIRI_EMERALD }, + { RG_GORON_RUBY, QUEST_GORON_RUBY }, + { RG_ZORA_SAPPHIRE, QUEST_ZORA_SAPPHIRE }, + { RG_STONE_OF_AGONY, QUEST_STONE_OF_AGONY }, + { RG_GERUDO_MEMBERSHIP_CARD, QUEST_GERUDO_CARD }, +}; + +std::map BottleRandomizerGetToItemID = { + { RG_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED }, + { RG_BOTTLE_WITH_GREEN_POTION, ITEM_POTION_GREEN }, + { RG_BOTTLE_WITH_BLUE_POTION, ITEM_POTION_BLUE }, + { RG_BOTTLE_WITH_FAIRY, ITEM_FAIRY }, + { RG_BOTTLE_WITH_FISH, ITEM_FISH }, + { RG_BOTTLE_WITH_BLUE_FIRE, ITEM_BLUE_FIRE }, + { RG_BOTTLE_WITH_BUGS, ITEM_BUG }, + { RG_BOTTLE_WITH_POE, ITEM_POE }, + { RG_BOTTLE_WITH_BIG_POE, ITEM_BIG_POE }, +}; + +uint32_t HookshotLookup[3] = { ITEM_NONE, ITEM_HOOKSHOT, ITEM_LONGSHOT }; +uint32_t OcarinaLookup[3] = { ITEM_NONE, ITEM_OCARINA_FAIRY, ITEM_OCARINA_TIME }; + +void Logic::ApplyItemEffect(Item& item, bool state) { + auto randoGet = item.GetRandomizerGet(); + if (item.GetGIEntry()->objectId == OBJECT_GI_STICK) { + SetInventory(ITEM_STICK, (!state ? ITEM_NONE : ITEM_STICK)); + } + if (item.GetGIEntry()->objectId == OBJECT_GI_NUTS) { + SetInventory(ITEM_NUT, (!state ? ITEM_NONE : ITEM_NUT)); + } + switch (item.GetItemType()) { + case ITEMTYPE_ITEM: { + switch (randoGet) { + case RG_STONE_OF_AGONY: + case RG_GERUDO_MEMBERSHIP_CARD: + SetQuestItem(RandoGetToQuestItem.at(randoGet), state); + break; + case RG_WEIRD_EGG: + SetRandoInf(RAND_INF_WEIRD_EGG, state); + break; + case RG_ZELDAS_LETTER: + SetRandoInf(RAND_INF_ZELDAS_LETTER, state); + break; + case RG_DOUBLE_DEFENSE: + mSaveContext->isDoubleDefenseAcquired = state; + break; + case RG_POCKET_EGG: + SetRandoInf(RAND_INF_ADULT_TRADES_HAS_POCKET_EGG, state); + break; + case RG_COJIRO: + case RG_ODD_MUSHROOM: + case RG_ODD_POTION: + case RG_POACHERS_SAW: + case RG_BROKEN_SWORD: + case RG_PRESCRIPTION: + case RG_EYEBALL_FROG: + case RG_EYEDROPS: + case RG_CLAIM_CHECK: + SetRandoInf(randoGet - RG_COJIRO + RAND_INF_ADULT_TRADES_HAS_COJIRO, state); + break; + case RG_PROGRESSIVE_HOOKSHOT: { + uint8_t i; + for (i = 0; i < 3; i++) { + if (CurrentInventory(ITEM_HOOKSHOT) == HookshotLookup[i]) { + break; + } + } + auto newItem = i + (!state ? -1 : 1); + if (newItem < 0) { + newItem = 0; + } else if (newItem > 2) { + newItem = 2; + } + SetInventory(ITEM_HOOKSHOT, HookshotLookup[newItem]); + } break; + case RG_PROGRESSIVE_STRENGTH: { + auto currentLevel = CurrentUpgrade(UPG_STRENGTH); + auto newLevel = currentLevel + (!state ? -1 : 1); + SetUpgrade(UPG_STRENGTH, newLevel); + } break; + case RG_PROGRESSIVE_BOMB_BAG: { + auto realGI = item.GetGIEntry(); + if (realGI->itemId == RG_BOMB_BAG_INF && realGI->modIndex == MOD_RANDOMIZER) { + SetRandoInf(RAND_INF_HAS_INFINITE_BOMB_BAG, true); + break; + } + auto currentLevel = CurrentUpgrade(UPG_BOMB_BAG); + auto newLevel = currentLevel + (!state ? -1 : 1); + if (currentLevel == 0 && state || currentLevel == 1 && !state) { + SetInventory(ITEM_BOMB, (!state ? ITEM_NONE : ITEM_BOMB)); + } + SetUpgrade(UPG_BOMB_BAG, newLevel); + } break; + case RG_PROGRESSIVE_BOW: { + auto realGI = item.GetGIEntry(); + if (realGI->itemId == RG_QUIVER_INF && realGI->modIndex == MOD_RANDOMIZER) { + SetRandoInf(RAND_INF_HAS_INFINITE_QUIVER, true); + break; + } + auto currentLevel = CurrentUpgrade(UPG_QUIVER); + auto newLevel = currentLevel + (!state ? -1 : 1); + if (currentLevel == 0 && state || currentLevel == 1 && !state) { + SetInventory(ITEM_BOW, (!state ? ITEM_NONE : ITEM_BOW)); + } + SetUpgrade(UPG_QUIVER, newLevel); + } break; + case RG_PROGRESSIVE_SLINGSHOT: { + auto realGI = item.GetGIEntry(); + if (realGI->itemId == RG_BULLET_BAG_INF && realGI->modIndex == MOD_RANDOMIZER) { + SetRandoInf(RAND_INF_HAS_INFINITE_BULLET_BAG, true); + break; + } + auto currentLevel = CurrentUpgrade(UPG_BULLET_BAG); + auto newLevel = currentLevel + (!state ? -1 : 1); + if (currentLevel == 0 && state || currentLevel == 1 && !state) { + SetInventory(ITEM_SLINGSHOT, (!state ? ITEM_NONE : ITEM_SLINGSHOT)); + } + SetUpgrade(UPG_BULLET_BAG, newLevel); + } break; + case RG_PROGRESSIVE_WALLET: { + auto realGI = item.GetGIEntry(); + if (realGI->itemId == RG_WALLET_INF && realGI->modIndex == MOD_RANDOMIZER) { + SetRandoInf(RAND_INF_HAS_INFINITE_MONEY, true); + break; + } + auto currentLevel = CurrentUpgrade(UPG_WALLET); + if (!CheckRandoInf(RAND_INF_HAS_WALLET) && state) { + SetRandoInf(RAND_INF_HAS_WALLET, true); + } else if (currentLevel == 0 && !state) { + SetRandoInf(RAND_INF_HAS_WALLET, false); + } else { + auto newLevel = currentLevel + (!state ? -1 : 1); + SetUpgrade(UPG_WALLET, newLevel); + } + } break; + case RG_PROGRESSIVE_SCALE: { + auto currentLevel = CurrentUpgrade(UPG_SCALE); + if (!CheckRandoInf(RAND_INF_CAN_SWIM) && state) { + SetRandoInf(RAND_INF_CAN_SWIM, true); + } else if (currentLevel == 0 && !state) { + SetRandoInf(RAND_INF_CAN_SWIM, false); + } else { + auto newLevel = currentLevel + (!state ? -1 : 1); + SetUpgrade(UPG_SCALE, newLevel); + } + } break; + case RG_PROGRESSIVE_NUT_UPGRADE: { + auto realGI = item.GetGIEntry(); + if (realGI->itemId == RG_NUT_UPGRADE_INF && realGI->modIndex == MOD_RANDOMIZER) { + SetRandoInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE, true); + break; + } + auto currentLevel = CurrentUpgrade(UPG_NUTS); + auto newLevel = currentLevel + (!state ? -1 : 1); + if (currentLevel == 0 && state || currentLevel == 1 && !state) { + SetInventory(ITEM_NUT, (!state ? ITEM_NONE : ITEM_NUT)); + } + SetUpgrade(UPG_NUTS, newLevel); + } break; + case RG_PROGRESSIVE_STICK_UPGRADE: { + auto realGI = item.GetGIEntry(); + if (realGI->itemId == RG_STICK_UPGRADE_INF && realGI->modIndex == MOD_RANDOMIZER) { + SetRandoInf(RAND_INF_HAS_INFINITE_STICK_UPGRADE, true); + break; + } + auto currentLevel = CurrentUpgrade(UPG_STICKS); + auto newLevel = currentLevel + (!state ? -1 : 1); + if (currentLevel == 0 && state || currentLevel == 1 && !state) { + SetInventory(ITEM_STICK, (!state ? ITEM_NONE : ITEM_STICK)); + } + SetUpgrade(UPG_STICKS, newLevel); + } break; + case RG_PROGRESSIVE_BOMBCHUS: { + auto realGI = item.GetGIEntry(); + if (realGI->itemId == RG_BOMBCHU_INF && realGI->modIndex == MOD_RANDOMIZER) { + SetRandoInf(RAND_INF_HAS_INFINITE_BOMBCHUS, true); + break; + } + SetInventory(ITEM_BOMBCHU, (!state ? ITEM_NONE : ITEM_BOMBCHU)); + } break; + case RG_PROGRESSIVE_MAGIC_METER: { + auto realGI = item.GetGIEntry(); + if (realGI->itemId == RG_MAGIC_INF && realGI->modIndex == MOD_RANDOMIZER) { + SetRandoInf(RAND_INF_HAS_INFINITE_MAGIC_METER, true); + break; + } + mSaveContext->magicLevel += (!state ? -1 : 1); + } break; + case RG_PROGRESSIVE_OCARINA: { + uint8_t i; + for (i = 0; i < 3; i++) { + if (CurrentInventory(ITEM_OCARINA_FAIRY) == OcarinaLookup[i]) { + break; + } + } + i += (!state ? -1 : 1); + if (i < 0) { + i = 0; + } else if (i > 2) { + i = 2; + } + SetInventory(ITEM_OCARINA_FAIRY, OcarinaLookup[i]); + } break; + case RG_HEART_CONTAINER: + mSaveContext->healthCapacity += (!state ? -16 : 16); + break; + case RG_PIECE_OF_HEART: + mSaveContext->healthCapacity += (!state ? -4 : 4); + break; + case RG_BOOMERANG: + case RG_LENS_OF_TRUTH: + case RG_MEGATON_HAMMER: + case RG_DINS_FIRE: + case RG_FARORES_WIND: + case RG_NAYRUS_LOVE: + case RG_FIRE_ARROWS: + case RG_ICE_ARROWS: + case RG_LIGHT_ARROWS: + SetInventory(item.GetGIEntry()->itemId, (!state ? ITEM_NONE : item.GetGIEntry()->itemId)); + break; + case RG_MAGIC_BEAN: + case RG_MAGIC_BEAN_PACK: { + auto change = (item.GetRandomizerGet() == RG_MAGIC_BEAN ? 1 : 10); + auto current = GetAmmo(ITEM_BEAN); + SetAmmo(ITEM_BEAN, current + (!state ? -change : change)); + } break; + case RG_EMPTY_BOTTLE: + case RG_BOTTLE_WITH_MILK: + case RG_BOTTLE_WITH_RED_POTION: + case RG_BOTTLE_WITH_GREEN_POTION: + case RG_BOTTLE_WITH_BLUE_POTION: + case RG_BOTTLE_WITH_FAIRY: + case RG_BOTTLE_WITH_FISH: + case RG_BOTTLE_WITH_BLUE_FIRE: + case RG_BOTTLE_WITH_BUGS: + case RG_BOTTLE_WITH_POE: + case RG_BOTTLE_WITH_BIG_POE: { + uint8_t slot = SLOT_BOTTLE_1; + while (slot != SLOT_BOTTLE_4) { + if (mSaveContext->inventory.items[slot] == ITEM_NONE) { + break; + } + slot++; + } + uint16_t itemId = item.GetGIEntry()->itemId; + 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: + SetEventChkInf(EVENTCHKINF_OBTAINED_RUTOS_LETTER, state); + break; + case RG_GOHMA_SOUL: + case RG_KING_DODONGO_SOUL: + case RG_BARINADE_SOUL: + case RG_PHANTOM_GANON_SOUL: + case RG_VOLVAGIA_SOUL: + case RG_MORPHA_SOUL: + case RG_BONGO_BONGO_SOUL: + case RG_TWINROVA_SOUL: + case RG_GANON_SOUL: + case RG_OCARINA_A_BUTTON: + case RG_OCARINA_C_UP_BUTTON: + case RG_OCARINA_C_DOWN_BUTTON: + case RG_OCARINA_C_LEFT_BUTTON: + case RG_OCARINA_C_RIGHT_BUTTON: + case RG_GREG_RUPEE: + case RG_FISHING_POLE: + case RG_GUARD_HOUSE_KEY: + case RG_MARKET_BAZAAR_KEY: + case RG_MARKET_POTION_SHOP_KEY: + case RG_MASK_SHOP_KEY: + case RG_MARKET_SHOOTING_GALLERY_KEY: + case RG_BOMBCHU_BOWLING_KEY: + case RG_TREASURE_CHEST_GAME_BUILDING_KEY: + case RG_BOMBCHU_SHOP_KEY: + case RG_RICHARDS_HOUSE_KEY: + case RG_ALLEY_HOUSE_KEY: + case RG_KAK_BAZAAR_KEY: + case RG_KAK_POTION_SHOP_KEY: + case RG_BOSS_HOUSE_KEY: + case RG_GRANNYS_POTION_SHOP_KEY: + case RG_SKULLTULA_HOUSE_KEY: + case RG_IMPAS_HOUSE_KEY: + case RG_WINDMILL_KEY: + case RG_KAK_SHOOTING_GALLERY_KEY: + case RG_DAMPES_HUT_KEY: + case RG_TALONS_HOUSE_KEY: + case RG_STABLES_KEY: + case RG_BACK_TOWER_KEY: + case RG_HYLIA_LAB_KEY: + case RG_FISHING_HOLE_KEY: + SetRandoInf(RandoGetToRandInf.at(randoGet), state); + break; + case RG_TRIFORCE_PIECE: + mSaveContext->ship.quest.data.randomizer.triforcePiecesCollected += (!state ? -1 : 1); + break; + case RG_BOMBCHU_5: + case RG_BOMBCHU_10: + case RG_BOMBCHU_20: + SetInventory(ITEM_BOMBCHU, (!state ? ITEM_NONE : ITEM_BOMBCHU)); + break; + default: + break; + } + } break; + case ITEMTYPE_EQUIP: { RandomizerGet itemRG = item.GetRandomizerGet(); if (itemRG == RG_GIANTS_KNIFE || itemRG == RG_DEKU_SHIELD || itemRG == RG_HYLIAN_SHIELD) { return; @@ -1794,15 +1894,13 @@ namespace Rando { if (equipId == EQUIP_FLAG_SWORD_BGS) { mSaveContext->bgsFlag = false; } - } - else { + } else { mSaveContext->inventory.equipment |= equipId; if (equipId == EQUIP_FLAG_SWORD_BGS) { mSaveContext->bgsFlag = true; } } - } - break; + } break; case ITEMTYPE_DUNGEONREWARD: case ITEMTYPE_SONG: SetQuestItem(RandoGetToQuestItem.find(item.GetRandomizerGet())->second, state); @@ -1817,8 +1915,7 @@ namespace Rando { SetDungeonItem(DUNGEON_KEY_BOSS, RandoGetToDungeonScene.find(item.GetRandomizerGet())->second, state); break; case ITEMTYPE_FORTRESS_SMALLKEY: - case ITEMTYPE_SMALLKEY: - { + case ITEMTYPE_SMALLKEY: { auto randoGet = item.GetRandomizerGet(); auto keyring = randoGet >= RG_FOREST_TEMPLE_KEY_RING && randoGet <= RG_GANONS_CASTLE_KEY_RING; auto dungeonIndex = RandoGetToDungeonScene.find(randoGet)->second; @@ -1826,16 +1923,13 @@ namespace Rando { if (!state) { if (keyring) { count = 0; - } - else { + } else { count -= 1; } - } - else { + } else { if (keyring) { count = 10; - } - else { + } else { count += 1; } } @@ -1848,498 +1942,590 @@ namespace Rando { break; case ITEMTYPE_DROP: case ITEMTYPE_REFILL: - case ITEMTYPE_SHOP: - { + case ITEMTYPE_SHOP: { RandomizerGet itemRG = item.GetRandomizerGet(); - if (itemRG == RG_BUY_HYLIAN_SHIELD || itemRG == RG_BUY_DEKU_SHIELD || itemRG == RG_BUY_GORON_TUNIC || itemRG == RG_BUY_ZORA_TUNIC) { + if (itemRG == RG_BUY_HYLIAN_SHIELD || itemRG == RG_BUY_DEKU_SHIELD || itemRG == RG_BUY_GORON_TUNIC || + itemRG == RG_BUY_ZORA_TUNIC) { uint32_t equipId = RandoGetToEquipFlag.find(itemRG)->second; if (!state) { mSaveContext->inventory.equipment &= ~equipId; - } - else { + } else { mSaveContext->inventory.equipment |= equipId; } } switch (itemRG) { - case RG_DEKU_NUTS_5: - case RG_DEKU_NUTS_10: - case RG_BUY_DEKU_NUTS_5: - case RG_BUY_DEKU_NUTS_10: - SetInventory(ITEM_NUT, (!state ? ITEM_NONE : ITEM_NUT)); - break; - case RG_DEKU_STICK_1: - case RG_BUY_DEKU_STICK_1: - case RG_STICKS: - SetInventory(ITEM_STICK, (!state ? ITEM_NONE : ITEM_STICK)); - break; - case RG_BOMBCHU_5: - case RG_BOMBCHU_10: - case RG_BOMBCHU_20: - SetInventory(ITEM_BOMBCHU, (!state ? ITEM_NONE : ITEM_BOMBCHU)); - break; - default: - break; + case RG_DEKU_NUTS_5: + case RG_DEKU_NUTS_10: + case RG_BUY_DEKU_NUTS_5: + case RG_BUY_DEKU_NUTS_10: + SetInventory(ITEM_NUT, (!state ? ITEM_NONE : ITEM_NUT)); + break; + case RG_DEKU_STICK_1: + case RG_BUY_DEKU_STICK_1: + case RG_STICKS: + SetInventory(ITEM_STICK, (!state ? ITEM_NONE : ITEM_STICK)); + break; + case RG_BOMBCHU_5: + case RG_BOMBCHU_10: + case RG_BOMBCHU_20: + SetInventory(ITEM_BOMBCHU, (!state ? ITEM_NONE : ITEM_BOMBCHU)); + break; + default: + break; } } break; - } - } - - SaveContext* Logic::GetSaveContext() { - if (mSaveContext == nullptr) { - NewSaveContext(); - } - return mSaveContext; - } - - void Logic::SetSaveContext(SaveContext* context) { - mSaveContext = context; - } - - void Logic::InitSaveContext() { - mSaveContext->totalDays = 0; - mSaveContext->bgsDayCount = 0; - - mSaveContext->deaths = 0; - for (int i = 0; i < ARRAY_COUNT(mSaveContext->playerName); i++) { - mSaveContext->playerName[i] = 0x3E; - } - mSaveContext->n64ddFlag = 0; - mSaveContext->healthCapacity = 0x30; - mSaveContext->health = 0x30; - mSaveContext->magicLevel = 0; - mSaveContext->magic = 0x30; - mSaveContext->rupees = 0; - mSaveContext->swordHealth = 0; - mSaveContext->naviTimer = 0; - mSaveContext->isMagicAcquired = 0; - mSaveContext->isDoubleMagicAcquired = 0; - mSaveContext->isDoubleDefenseAcquired = 0; - mSaveContext->bgsFlag = 0; - mSaveContext->ocarinaGameRoundNum = 0; - for (int button = 0; button < ARRAY_COUNT(mSaveContext->childEquips.buttonItems); button++) { - mSaveContext->childEquips.buttonItems[button] = ITEM_NONE; - } - for (int button = 0; button < ARRAY_COUNT(mSaveContext->childEquips.cButtonSlots); button++) { - mSaveContext->childEquips.cButtonSlots[button] = SLOT_NONE; - } - mSaveContext->childEquips.equipment = 0; - for (int button = 0; button < ARRAY_COUNT(mSaveContext->adultEquips.buttonItems); button++) { - mSaveContext->adultEquips.buttonItems[button] = ITEM_NONE; - } - for (int button = 0; button < ARRAY_COUNT(mSaveContext->adultEquips.cButtonSlots); button++) { - mSaveContext->adultEquips.cButtonSlots[button] = SLOT_NONE; - } - mSaveContext->adultEquips.equipment = 0; - mSaveContext->unk_54 = 0; - mSaveContext->savedSceneNum = SCENE_LINKS_HOUSE; - - // Equipment - for (int button = 0; button < ARRAY_COUNT(mSaveContext->equips.buttonItems); button++) { - mSaveContext->equips.buttonItems[button] = ITEM_NONE; - } - for (int button = 0; button < ARRAY_COUNT(mSaveContext->equips.cButtonSlots); button++) { - mSaveContext->equips.cButtonSlots[button] = SLOT_NONE; - } - mSaveContext->equips.equipment = 0; - - // Inventory - for (int item = 0; item < ARRAY_COUNT(mSaveContext->inventory.items); item++) { - mSaveContext->inventory.items[item] = ITEM_NONE; - } - for (int ammo = 0; ammo < ARRAY_COUNT(mSaveContext->inventory.ammo); ammo++) { - mSaveContext->inventory.ammo[ammo] = 0; - } - mSaveContext->inventory.equipment = 0; - mSaveContext->inventory.upgrades = 0; - mSaveContext->inventory.questItems = 0; - for (int dungeon = 0; dungeon < ARRAY_COUNT(mSaveContext->inventory.dungeonItems); dungeon++) { - mSaveContext->inventory.dungeonItems[dungeon] = 0; - } - for (int dungeon = 0; dungeon < ARRAY_COUNT(mSaveContext->inventory.dungeonKeys); dungeon++) { - mSaveContext->inventory.dungeonKeys[dungeon] = 0x0; - } - mSaveContext->inventory.defenseHearts = 0; - mSaveContext->inventory.gsTokens = 0; - for (int scene = 0; scene < ARRAY_COUNT(mSaveContext->sceneFlags); scene++) { - mSaveContext->sceneFlags[scene].chest = 0; - mSaveContext->sceneFlags[scene].swch = 0; - mSaveContext->sceneFlags[scene].clear = 0; - mSaveContext->sceneFlags[scene].collect = 0; - mSaveContext->sceneFlags[scene].unk = 0; - mSaveContext->sceneFlags[scene].rooms = 0; - mSaveContext->sceneFlags[scene].floors = 0; - } - mSaveContext->fw.pos.x = 0; - mSaveContext->fw.pos.y = 0; - mSaveContext->fw.pos.z = 0; - mSaveContext->fw.yaw = 0; - mSaveContext->fw.playerParams = 0; - mSaveContext->fw.entranceIndex = 0; - mSaveContext->fw.roomIndex = 0; - mSaveContext->fw.set = 0; - mSaveContext->fw.tempSwchFlags = 0; - mSaveContext->fw.tempCollectFlags = 0; - for (int flag = 0; flag < ARRAY_COUNT(mSaveContext->gsFlags); flag++) { - mSaveContext->gsFlags[flag] = 0; - } - for (int highscore = 0; highscore < ARRAY_COUNT(mSaveContext->highScores); highscore++) { - mSaveContext->highScores[highscore] = 0; - } - for (int flag = 0; flag < ARRAY_COUNT(mSaveContext->eventChkInf); flag++) { - mSaveContext->eventChkInf[flag] = 0; - } - for (int flag = 0; flag < ARRAY_COUNT(mSaveContext->itemGetInf); flag++) { - mSaveContext->itemGetInf[flag] = 0; - } - for (int flag = 0; flag < ARRAY_COUNT(mSaveContext->infTable); flag++) { - mSaveContext->infTable[flag] = 0; - } - mSaveContext->worldMapAreaData = 0; - mSaveContext->scarecrowLongSongSet = 0; - for (int i = 0; i < ARRAY_COUNT(mSaveContext->scarecrowLongSong); i++) { - mSaveContext->scarecrowLongSong[i].noteIdx = 0; - mSaveContext->scarecrowLongSong[i].unk_01 = 0; - mSaveContext->scarecrowLongSong[i].unk_02 = 0; - mSaveContext->scarecrowLongSong[i].volume = 0; - mSaveContext->scarecrowLongSong[i].vibrato = 0; - mSaveContext->scarecrowLongSong[i].tone = 0; - mSaveContext->scarecrowLongSong[i].semitone = 0; - } - mSaveContext->scarecrowSpawnSongSet = 0; - for (int i = 0; i < ARRAY_COUNT(mSaveContext->scarecrowSpawnSong); i++) { - mSaveContext->scarecrowSpawnSong[i].noteIdx = 0; - mSaveContext->scarecrowSpawnSong[i].unk_01 = 0; - mSaveContext->scarecrowSpawnSong[i].unk_02 = 0; - mSaveContext->scarecrowSpawnSong[i].volume = 0; - mSaveContext->scarecrowSpawnSong[i].vibrato = 0; - mSaveContext->scarecrowSpawnSong[i].tone = 0; - mSaveContext->scarecrowSpawnSong[i].semitone = 0; - } - - mSaveContext->horseData.scene = SCENE_HYRULE_FIELD; - mSaveContext->horseData.pos.x = -1840; - mSaveContext->horseData.pos.y = 72; - mSaveContext->horseData.pos.z = 5497; - mSaveContext->horseData.angle = -0x6AD9; - mSaveContext->magicLevel = 0; - mSaveContext->infTable[29] = 1; - mSaveContext->sceneFlags[5].swch = 0x40000000; - - // SoH specific - mSaveContext->ship.backupFW = mSaveContext->fw; - mSaveContext->ship.pendingSale = ITEM_NONE; - mSaveContext->ship.pendingSaleMod = MOD_NONE; - mSaveContext->ship.pendingIceTrapCount = 0; - - // Init with normal quest unless only an MQ rom is provided - mSaveContext->ship.quest.id = OTRGlobals::Instance->HasOriginal() ? QUEST_NORMAL : QUEST_MASTER; - - //RANDOTODO (ADD ITEMLOCATIONS TO GSAVECONTEXT) - } - - void Logic::NewSaveContext() { - if (mSaveContext != nullptr && mSaveContext != &gSaveContext) { - free(mSaveContext); - } - mSaveContext = new SaveContext(); - InitSaveContext(); - } - - uint8_t Logic::InventorySlot(uint32_t item) { - return gItemSlots[item]; - } - - uint32_t Logic::CurrentUpgrade(uint32_t upgrade) { - return (mSaveContext->inventory.upgrades & gUpgradeMasks[upgrade]) >> gUpgradeShifts[upgrade]; - } - - uint32_t Logic::CurrentInventory(uint32_t item) { - return mSaveContext->inventory.items[InventorySlot(item)]; - } - - void Logic::SetUpgrade(uint32_t upgrade, uint8_t level) { - mSaveContext->inventory.upgrades &= gUpgradeNegMasks[upgrade]; - mSaveContext->inventory.upgrades |= level << gUpgradeShifts[upgrade]; - } - - bool Logic::CheckInventory(uint32_t item, bool exact) { - auto current = mSaveContext->inventory.items[InventorySlot(item)]; - return exact ? (current == item) : (current != ITEM_NONE); - } - - void Logic::SetInventory(uint32_t itemSlot, uint32_t item) { - mSaveContext->inventory.items[InventorySlot(itemSlot)] = item; - } - - bool Logic::CheckEquipment(uint32_t equipFlag) { - return (equipFlag & mSaveContext->inventory.equipment); - } - - bool Logic::CheckQuestItem(uint32_t item) { - return ((1 << item) & mSaveContext->inventory.questItems); - } - - void Logic::SetQuestItem(uint32_t item, bool state) { - if (!state) { - mSaveContext->inventory.questItems &= ~(1 << item); - } else { - mSaveContext->inventory.questItems |= (1 << item); - } - } - - uint8_t Logic::GetSmallKeyCount(uint32_t dungeonIndex) { - return mSaveContext->inventory.dungeonKeys[dungeonIndex]; - } - - void Logic::SetSmallKeyCount(uint32_t dungeonIndex, uint8_t count) { - mSaveContext->inventory.dungeonKeys[dungeonIndex] = count; - } - - bool Logic::CheckDungeonItem(uint32_t item, uint32_t dungeonIndex) { - return mSaveContext->inventory.dungeonItems[dungeonIndex] & gBitFlags[item]; - } - - void Logic::SetDungeonItem(uint32_t item, uint32_t dungeonIndex, bool state) { - if (!state) { - mSaveContext->inventory.dungeonItems[dungeonIndex] &= ~gBitFlags[item]; - } else { - mSaveContext->inventory.dungeonItems[dungeonIndex] |= gBitFlags[item]; - } - } - - bool Logic::CheckRandoInf(uint32_t flag) { - return mSaveContext->ship.randomizerInf[flag >> 4] & (1 << (flag & 0xF)); - } - - void Logic::SetRandoInf(uint32_t flag, bool state) { - if (!state) { - mSaveContext->ship.randomizerInf[flag >> 4] &= ~(1 << (flag & 0xF)); - } else { - mSaveContext->ship.randomizerInf[flag >> 4] |= (1 << (flag & 0xF)); - } - } - - bool Logic::CheckEventChkInf(int32_t flag) { - return mSaveContext->eventChkInf[flag >> 4] & (1 << (flag & 0xF)); - } - - void Logic::SetEventChkInf(int32_t flag, bool state) { - if (!state) { - mSaveContext->eventChkInf[flag >> 4] &= ~(1 << (flag & 0xF)); - } else { - mSaveContext->eventChkInf[flag >> 4] |= (1 << (flag & 0xF)); - } - } - - uint8_t Logic::GetGSCount() { - return mSaveContext->inventory.gsTokens; - } - - uint8_t Logic::GetAmmo(uint32_t item) { - return mSaveContext->inventory.ammo[gItemSlots[item]]; - } - - void Logic::SetAmmo(uint32_t item, uint8_t count) { - mSaveContext->inventory.ammo[gItemSlots[item]] = count; - } - - void Logic::SetContext(std::shared_ptr _ctx) { - ctx = _ctx; - } - - bool Logic::GetInLogic(LogicVal logicVal) { - return inLogic[logicVal]; - } - - void Logic::SetInLogic(LogicVal logicVal, bool value) { - inLogic[logicVal] = value; - } - - void Logic::Reset() { - NewSaveContext(); - StartPerformanceTimer(PT_LOGIC_RESET); - memset(inLogic, false, sizeof(inLogic)); - //Settings-dependent variables - IsKeysanity = ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE) || - ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE) || - ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE); - AmmoCanDrop = /*AmmoDrops.IsNot(AMMODROPS_NONE) TODO: AmmoDrop setting*/ true; - - //Child item logic - SkullMask = false; - MaskOfTruth = false; - - //Adult logic - FreedEpona = false; - //BigPoe = false; - - //Trade Quest Events - WakeUpAdultTalon = false; - - //Dungeon Clears - DekuTreeClear = false; - DodongosCavernClear = false; - JabuJabusBellyClear = false; - ForestTempleClear = false; - FireTempleClear = false; - WaterTempleClear = false; - SpiritTempleClear = false; - ShadowTempleClear = false; - - //Trial Clears - ForestTrialClear = false; - FireTrialClear = false; - WaterTrialClear = false; - SpiritTrialClear = false; - ShadowTrialClear = false; - LightTrialClear = false; - - //Ocarina C Buttons - bool ocBtnShuffle = ctx->GetOption(RSK_SHUFFLE_OCARINA_BUTTONS).Is(true); - SetRandoInf(RAND_INF_HAS_OCARINA_A, !ocBtnShuffle); - SetRandoInf(RAND_INF_HAS_OCARINA_C_UP, !ocBtnShuffle); - SetRandoInf(RAND_INF_HAS_OCARINA_C_DOWN, !ocBtnShuffle); - SetRandoInf(RAND_INF_HAS_OCARINA_C_LEFT, !ocBtnShuffle); - SetRandoInf(RAND_INF_HAS_OCARINA_C_RIGHT, !ocBtnShuffle); - - //Progressive Items - SetUpgrade(UPG_STICKS, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG).Is(true) ? 0 : 1); - SetUpgrade(UPG_NUTS, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG).Is(true) ? 0 : 1); - - //If we're not shuffling swim, we start with it - if (ctx->GetOption(RSK_SHUFFLE_SWIM).Is(false)) { - SetRandoInf(RAND_INF_CAN_SWIM, true); - } - - //If we're not shuffling child's wallet, we start with it - if (ctx->GetOption(RSK_SHUFFLE_CHILD_WALLET).Is(false)) { - SetRandoInf(RAND_INF_HAS_WALLET, true); - } - - //If we're not shuffling fishing pole, we start with it - if (ctx->GetOption(RSK_SHUFFLE_FISHING_POLE).Is(false)) { - SetRandoInf(RAND_INF_FISHING_POLE_FOUND, true); - } - - //If not keysanity, start with 1 logical key to account for automatically unlocking the basement door in vanilla FiT - if (!IsKeysanity && ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsVanilla()) { - SetSmallKeyCount(SCENE_FIRE_TEMPLE, 1); - } - - //Bottle Count - Bottles = 0; - NumBottles = 0; - CanEmptyBigPoes = false; - - //Drops and Bottle Contents Access - NutPot = false; - NutCrate = false; - DekuBabaNuts = false; - StickPot = false; - DekuBabaSticks = false; - BugShrub = false; - WanderingBugs = false; - BugRock = false; - BlueFireAccess = false; - FishGroup = false; - LoneFish = false; - GossipStoneFairy = false; - BeanPlantFairy = false; - ButterflyFairy = false; - FairyPot = false; - FreeFairies = false; - FairyPond = false; - - PieceOfHeart = 0; - HeartContainer = 0; - - /* --- HELPERS, EVENTS, AND LOCATION ACCESS --- */ - /* These are used to simplify reading the logic, but need to be updated - / every time a base value is updated. */ - - ChildScarecrow = false; - AdultScarecrow = false; - - CouldPlayBowling = false; - IsChild = false; - IsAdult = false; - //CanPlantBean = false; - BigPoeKill = false; - BigPoes = 0; - - BaseHearts = ctx->GetOption(RSK_STARTING_HEARTS).Get() + 1; - - - //Bridge Requirements - BuiltRainbowBridge = false; - - //Other - AtDay = false; - AtNight = false; - GetSaveContext()->linkAge = !ctx->GetOption(RSK_SELECTED_STARTING_AGE).Get(); - - //Events - ShowedMidoSwordAndShield = false; - CarpenterRescue = false; - GF_GateOpen = false; - GtG_GateOpen = false; - DampesWindmillAccess = false; - DrainWell = false; - GoronCityChildFire = false; - GCWoodsWarpOpen = false; - GCDaruniasDoorOpenChild = false; - StopGCRollingGoronAsAdult = false; - CanWaterTempleLowFromHigh = false; - CanWaterTempleLowFromMid = false; - CanWaterTempleMiddle = false; - CanWaterTempleHigh = false; - KakarikoVillageGateOpen = false; - KingZoraThawed = false; - ForestTempleJoelle = false; - ForestTempleBeth = false; - ForestTempleAmy = false; - ForestTempleMeg = false; - FireLoopSwitch = false; - LinksCow = false; - DeliverLetter = false; - ClearMQDCUpperLobbyRocks = false; - LoweredWaterInsideBotw = false; - OpenedWestRoomMQBotw = false; - OpenedMiddleHoleMQBotw = false; - BrokeDeku1FWeb = false; - ClearedMQDekuSERoom = false; - MQDekuWaterRoomTorches = false; - PushedDekuBasementBlock = false; - OpenedLowestGoronCage = false; - OpenedUpperFireShortcut = false; - HitFireTemplePlatform = false; - OpenedFireMQFireMazeDoor = false; - MQForestBlockRoomTargets = false; - ForestCanTwistHallway = false; - ForestClearBelowBowChest = false; - ForestOpenBossCorridor = false; - ShadowTrialFirstChest = false; - MQGTGMazeSwitch = false; - GTGPlatformSilverRupees = false; - MQJabuHolesRoomDoor = false; - JabuWestTentacle = false; - JabuEastTentacle = false; - JabuNorthTentacle = false; - LoweredJabuPath = false; - MQJabuLiftRoomCow = false; - MQShadowFloorSpikeRupees = false; - ShadowShortcutBlock = false; - MQWaterStalfosPit = false; - MQWaterDragonTorches = false; - MQWaterB1Switch = false; - //MQWaterPillarSoTBlock = false; - MQWaterOpenedPillarB1 = false; - MQSpiritCrawlBoulder = false; - MQSpiritMapRoomEnemies = false; - MQSpirit3SunsEnemies = false; - Spirit1FSilverRupees = false; - JabuRutoIn1F = false; - - StopPerformanceTimer(PT_LOGIC_RESET); } } + +SaveContext* Logic::GetSaveContext() { + if (mSaveContext == nullptr) { + NewSaveContext(); + } + return mSaveContext; +} + +void Logic::SetSaveContext(SaveContext* context) { + mSaveContext = context; +} + +void Logic::InitSaveContext() { + mSaveContext->totalDays = 0; + mSaveContext->bgsDayCount = 0; + + mSaveContext->deaths = 0; + for (int i = 0; i < ARRAY_COUNT(mSaveContext->playerName); i++) { + mSaveContext->playerName[i] = 0x3E; + } + mSaveContext->n64ddFlag = 0; + mSaveContext->healthCapacity = 0x30; + mSaveContext->health = 0x30; + mSaveContext->magicLevel = 0; + mSaveContext->magic = 0x30; + mSaveContext->rupees = 0; + mSaveContext->swordHealth = 0; + mSaveContext->naviTimer = 0; + mSaveContext->isMagicAcquired = 0; + mSaveContext->isDoubleMagicAcquired = 0; + mSaveContext->isDoubleDefenseAcquired = 0; + mSaveContext->bgsFlag = 0; + mSaveContext->ocarinaGameRoundNum = 0; + for (int button = 0; button < ARRAY_COUNT(mSaveContext->childEquips.buttonItems); button++) { + mSaveContext->childEquips.buttonItems[button] = ITEM_NONE; + } + for (int button = 0; button < ARRAY_COUNT(mSaveContext->childEquips.cButtonSlots); button++) { + mSaveContext->childEquips.cButtonSlots[button] = SLOT_NONE; + } + mSaveContext->childEquips.equipment = 0; + for (int button = 0; button < ARRAY_COUNT(mSaveContext->adultEquips.buttonItems); button++) { + mSaveContext->adultEquips.buttonItems[button] = ITEM_NONE; + } + for (int button = 0; button < ARRAY_COUNT(mSaveContext->adultEquips.cButtonSlots); button++) { + mSaveContext->adultEquips.cButtonSlots[button] = SLOT_NONE; + } + mSaveContext->adultEquips.equipment = 0; + mSaveContext->unk_54 = 0; + mSaveContext->savedSceneNum = SCENE_LINKS_HOUSE; + + // Equipment + for (int button = 0; button < ARRAY_COUNT(mSaveContext->equips.buttonItems); button++) { + mSaveContext->equips.buttonItems[button] = ITEM_NONE; + } + for (int button = 0; button < ARRAY_COUNT(mSaveContext->equips.cButtonSlots); button++) { + mSaveContext->equips.cButtonSlots[button] = SLOT_NONE; + } + mSaveContext->equips.equipment = 0; + + // Inventory + for (int item = 0; item < ARRAY_COUNT(mSaveContext->inventory.items); item++) { + mSaveContext->inventory.items[item] = ITEM_NONE; + } + for (int ammo = 0; ammo < ARRAY_COUNT(mSaveContext->inventory.ammo); ammo++) { + mSaveContext->inventory.ammo[ammo] = 0; + } + mSaveContext->inventory.equipment = 0; + mSaveContext->inventory.upgrades = 0; + mSaveContext->inventory.questItems = 0; + for (int dungeon = 0; dungeon < ARRAY_COUNT(mSaveContext->inventory.dungeonItems); dungeon++) { + mSaveContext->inventory.dungeonItems[dungeon] = 0; + } + for (int dungeon = 0; dungeon < ARRAY_COUNT(mSaveContext->inventory.dungeonKeys); dungeon++) { + mSaveContext->inventory.dungeonKeys[dungeon] = 0x0; + } + mSaveContext->inventory.defenseHearts = 0; + mSaveContext->inventory.gsTokens = 0; + for (int scene = 0; scene < ARRAY_COUNT(mSaveContext->sceneFlags); scene++) { + mSaveContext->sceneFlags[scene].chest = 0; + mSaveContext->sceneFlags[scene].swch = 0; + mSaveContext->sceneFlags[scene].clear = 0; + mSaveContext->sceneFlags[scene].collect = 0; + mSaveContext->sceneFlags[scene].unk = 0; + mSaveContext->sceneFlags[scene].rooms = 0; + mSaveContext->sceneFlags[scene].floors = 0; + } + mSaveContext->fw.pos.x = 0; + mSaveContext->fw.pos.y = 0; + mSaveContext->fw.pos.z = 0; + mSaveContext->fw.yaw = 0; + mSaveContext->fw.playerParams = 0; + mSaveContext->fw.entranceIndex = 0; + mSaveContext->fw.roomIndex = 0; + mSaveContext->fw.set = 0; + mSaveContext->fw.tempSwchFlags = 0; + mSaveContext->fw.tempCollectFlags = 0; + for (int flag = 0; flag < ARRAY_COUNT(mSaveContext->gsFlags); flag++) { + mSaveContext->gsFlags[flag] = 0; + } + for (int highscore = 0; highscore < ARRAY_COUNT(mSaveContext->highScores); highscore++) { + mSaveContext->highScores[highscore] = 0; + } + for (int flag = 0; flag < ARRAY_COUNT(mSaveContext->eventChkInf); flag++) { + mSaveContext->eventChkInf[flag] = 0; + } + for (int flag = 0; flag < ARRAY_COUNT(mSaveContext->itemGetInf); flag++) { + mSaveContext->itemGetInf[flag] = 0; + } + for (int flag = 0; flag < ARRAY_COUNT(mSaveContext->infTable); flag++) { + mSaveContext->infTable[flag] = 0; + } + mSaveContext->worldMapAreaData = 0; + mSaveContext->scarecrowLongSongSet = 0; + for (int i = 0; i < ARRAY_COUNT(mSaveContext->scarecrowLongSong); i++) { + mSaveContext->scarecrowLongSong[i].noteIdx = 0; + mSaveContext->scarecrowLongSong[i].unk_01 = 0; + mSaveContext->scarecrowLongSong[i].unk_02 = 0; + mSaveContext->scarecrowLongSong[i].volume = 0; + mSaveContext->scarecrowLongSong[i].vibrato = 0; + mSaveContext->scarecrowLongSong[i].tone = 0; + mSaveContext->scarecrowLongSong[i].semitone = 0; + } + mSaveContext->scarecrowSpawnSongSet = 0; + for (int i = 0; i < ARRAY_COUNT(mSaveContext->scarecrowSpawnSong); i++) { + mSaveContext->scarecrowSpawnSong[i].noteIdx = 0; + mSaveContext->scarecrowSpawnSong[i].unk_01 = 0; + mSaveContext->scarecrowSpawnSong[i].unk_02 = 0; + mSaveContext->scarecrowSpawnSong[i].volume = 0; + mSaveContext->scarecrowSpawnSong[i].vibrato = 0; + mSaveContext->scarecrowSpawnSong[i].tone = 0; + mSaveContext->scarecrowSpawnSong[i].semitone = 0; + } + + mSaveContext->horseData.scene = SCENE_HYRULE_FIELD; + mSaveContext->horseData.pos.x = -1840; + mSaveContext->horseData.pos.y = 72; + mSaveContext->horseData.pos.z = 5497; + mSaveContext->horseData.angle = -0x6AD9; + mSaveContext->magicLevel = 0; + mSaveContext->infTable[29] = 1; + mSaveContext->sceneFlags[5].swch = 0x40000000; + + // SoH specific + mSaveContext->ship.backupFW = mSaveContext->fw; + mSaveContext->ship.pendingSale = ITEM_NONE; + mSaveContext->ship.pendingSaleMod = MOD_NONE; + mSaveContext->ship.pendingIceTrapCount = 0; + + // Init with normal quest unless only an MQ rom is provided + mSaveContext->ship.quest.id = OTRGlobals::Instance->HasOriginal() ? QUEST_NORMAL : QUEST_MASTER; + + // RANDOTODO (ADD ITEMLOCATIONS TO GSAVECONTEXT) +} + +void Logic::NewSaveContext() { + if (mSaveContext != nullptr && mSaveContext != &gSaveContext) { + free(mSaveContext); + } + mSaveContext = new SaveContext(); + InitSaveContext(); +} + +uint8_t Logic::InventorySlot(uint32_t item) { + return gItemSlots[item]; +} + +uint32_t Logic::CurrentUpgrade(uint32_t upgrade) { + return (mSaveContext->inventory.upgrades & gUpgradeMasks[upgrade]) >> gUpgradeShifts[upgrade]; +} + +uint32_t Logic::CurrentInventory(uint32_t item) { + return mSaveContext->inventory.items[InventorySlot(item)]; +} + +void Logic::SetUpgrade(uint32_t upgrade, uint8_t level) { + mSaveContext->inventory.upgrades &= gUpgradeNegMasks[upgrade]; + mSaveContext->inventory.upgrades |= level << gUpgradeShifts[upgrade]; +} + +bool Logic::CheckInventory(uint32_t item, bool exact) { + auto current = mSaveContext->inventory.items[InventorySlot(item)]; + return exact ? (current == item) : (current != ITEM_NONE); +} + +void Logic::SetInventory(uint32_t itemSlot, uint32_t item) { + mSaveContext->inventory.items[InventorySlot(itemSlot)] = item; +} + +bool Logic::CheckEquipment(uint32_t equipFlag) { + return (equipFlag & mSaveContext->inventory.equipment); +} + +bool Logic::CheckQuestItem(uint32_t item) { + return ((1 << item) & mSaveContext->inventory.questItems); +} + +void Logic::SetQuestItem(uint32_t item, bool state) { + if (!state) { + mSaveContext->inventory.questItems &= ~(1 << item); + } else { + mSaveContext->inventory.questItems |= (1 << item); + } +} + +// Get the swch bit positions for the dungeon +const std::vector& GetDungeonSmallKeyDoors(SceneID sceneId) { + static const std::vector emptyVector; + + auto dungeonInfo = Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(sceneId); + if (dungeonInfo == nullptr) { + return emptyVector; + } + + bool masterQuest = dungeonInfo->IsMQ(); + + // Create a unique key for the dungeon and master quest + uint8_t key = sceneId | (masterQuest << 7); + + static std::unordered_map> dungeonSmallKeyDoors; + auto foundEntry = dungeonSmallKeyDoors.find(key); + if (foundEntry != dungeonSmallKeyDoors.end()) { + return foundEntry->second; + } + dungeonSmallKeyDoors[key] = {}; + + // Get the scene path + SceneTableEntry* sceneTableEntry = &gSceneTable[sceneId]; + std::string scenePath = + StringHelper::Sprintf("scenes/%s/%s/%s", masterQuest ? "mq" : "nonmq", sceneTableEntry->sceneFile.fileName, + sceneTableEntry->sceneFile.fileName); + + // Load the scene + std::shared_ptr scene = std::dynamic_pointer_cast( + Ship::Context::GetInstance()->GetResourceManager()->LoadResource(scenePath)); + if (scene == nullptr) { + return emptyVector; + } + + // Find the SetTransitionActorList command + std::shared_ptr transitionActorListCommand = nullptr; + for (auto& command : scene->commands) { + if (command->cmdId == SOH::SceneCommandID::SetTransitionActorList) { + transitionActorListCommand = std::dynamic_pointer_cast(command); + break; + } + } + if (transitionActorListCommand == nullptr) { + return emptyVector; + } + + // Find the bit position for the small key doors + for (auto& transitionActor : transitionActorListCommand->transitionActorList) { + if (transitionActor.id == ACTOR_EN_DOOR) { + uint8_t doorType = (transitionActor.params >> 7) & 7; + if (doorType == DOOR_LOCKED) { + dungeonSmallKeyDoors[key].emplace_back(transitionActor.params & 0x3F); + } + } else if (transitionActor.id == ACTOR_DOOR_SHUTTER) { + uint8_t doorType = (transitionActor.params >> 7) & 15; + if (doorType == SHUTTER_BACK_LOCKED || doorType == SHUTTER_BOSS || doorType == SHUTTER_KEY_LOCKED) { + dungeonSmallKeyDoors[key].emplace_back(transitionActor.params & 0x3F); + } + } + } + + return dungeonSmallKeyDoors[key]; +} + +int8_t GetUsedSmallKeyCount(SceneID sceneId) { + const auto& smallKeyDoors = GetDungeonSmallKeyDoors(sceneId); + + // Get the swch value for the scene + uint32_t swch; + if (gPlayState != nullptr && gPlayState->sceneNum == sceneId) { + swch = gPlayState->actorCtx.flags.swch; + } else { + swch = gSaveContext.sceneFlags[sceneId].swch; + } + + // Count the number of small keys doors unlocked + int8_t unlockedSmallKeyDoors = 0; + for (auto& smallKeyDoor : smallKeyDoors) { + unlockedSmallKeyDoors += swch >> smallKeyDoor & 1; + } + + // RANDOTODO: Account for MQ Water trick that causes the basement lock to unlock when the player clears the stalfos + // pit. + return unlockedSmallKeyDoors; +} + +uint8_t Logic::GetSmallKeyCount(uint32_t dungeonIndex) { + int8_t dungeonKeys = mSaveContext->inventory.dungeonKeys[dungeonIndex]; + if (dungeonKeys == -1) { + // never got keys, so can't have used keys + return 0; + } + return dungeonKeys + GetUsedSmallKeyCount(SceneID(dungeonIndex)); +} + +void Logic::SetSmallKeyCount(uint32_t dungeonIndex, uint8_t count) { + mSaveContext->inventory.dungeonKeys[dungeonIndex] = count; +} + +bool Logic::CheckDungeonItem(uint32_t item, uint32_t dungeonIndex) { + return mSaveContext->inventory.dungeonItems[dungeonIndex] & gBitFlags[item]; +} + +void Logic::SetDungeonItem(uint32_t item, uint32_t dungeonIndex, bool state) { + if (!state) { + mSaveContext->inventory.dungeonItems[dungeonIndex] &= ~gBitFlags[item]; + } else { + mSaveContext->inventory.dungeonItems[dungeonIndex] |= gBitFlags[item]; + } +} + +bool Logic::CheckRandoInf(uint32_t flag) { + return mSaveContext->ship.randomizerInf[flag >> 4] & (1 << (flag & 0xF)); +} + +void Logic::SetRandoInf(uint32_t flag, bool state) { + if (!state) { + mSaveContext->ship.randomizerInf[flag >> 4] &= ~(1 << (flag & 0xF)); + } else { + mSaveContext->ship.randomizerInf[flag >> 4] |= (1 << (flag & 0xF)); + } +} + +bool Logic::CheckEventChkInf(int32_t flag) { + return mSaveContext->eventChkInf[flag >> 4] & (1 << (flag & 0xF)); +} + +void Logic::SetEventChkInf(int32_t flag, bool state) { + if (!state) { + mSaveContext->eventChkInf[flag >> 4] &= ~(1 << (flag & 0xF)); + } else { + mSaveContext->eventChkInf[flag >> 4] |= (1 << (flag & 0xF)); + } +} + +uint8_t Logic::GetGSCount() { + return mSaveContext->inventory.gsTokens; +} + +uint8_t Logic::GetAmmo(uint32_t item) { + return mSaveContext->inventory.ammo[gItemSlots[item]]; +} + +void Logic::SetAmmo(uint32_t item, uint8_t count) { + mSaveContext->inventory.ammo[gItemSlots[item]] = count; +} + +void Logic::SetContext(std::shared_ptr _ctx) { + ctx = _ctx; +} + +bool Logic::GetInLogic(LogicVal logicVal) { + return inLogic[logicVal]; +} + +void Logic::SetInLogic(LogicVal logicVal, bool value) { + inLogic[logicVal] = value; +} + +void Logic::Reset() { + NewSaveContext(); + StartPerformanceTimer(PT_LOGIC_RESET); + memset(inLogic, false, sizeof(inLogic)); + // Settings-dependent variables + IsKeysanity = ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE) || + ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE) || + ctx->GetOption(RSK_KEYSANITY).Is(RO_DUNGEON_ITEM_LOC_ANYWHERE); + + // AmmoCanDrop = /*AmmoDrops.IsNot(AMMODROPS_NONE)*/ false; TODO: AmmoDrop setting + + // Child item logic + SkullMask = false; + MaskOfTruth = false; + + // Adult logic + FreedEpona = false; + // BigPoe = false; + + // Trade Quest Events + WakeUpAdultTalon = false; + + // Dungeon Clears + DekuTreeClear = false; + DodongosCavernClear = false; + JabuJabusBellyClear = false; + ForestTempleClear = false; + FireTempleClear = false; + WaterTempleClear = false; + SpiritTempleClear = false; + ShadowTempleClear = false; + + // Trial Clears + ForestTrialClear = false; + FireTrialClear = false; + WaterTrialClear = false; + SpiritTrialClear = false; + ShadowTrialClear = false; + LightTrialClear = false; + + // Ocarina C Buttons + bool ocBtnShuffle = ctx->GetOption(RSK_SHUFFLE_OCARINA_BUTTONS).Is(true); + SetRandoInf(RAND_INF_HAS_OCARINA_A, !ocBtnShuffle); + SetRandoInf(RAND_INF_HAS_OCARINA_C_UP, !ocBtnShuffle); + SetRandoInf(RAND_INF_HAS_OCARINA_C_DOWN, !ocBtnShuffle); + SetRandoInf(RAND_INF_HAS_OCARINA_C_LEFT, !ocBtnShuffle); + SetRandoInf(RAND_INF_HAS_OCARINA_C_RIGHT, !ocBtnShuffle); + + // Progressive Items + SetUpgrade(UPG_STICKS, ctx->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG).Is(true) ? 0 : 1); + SetUpgrade(UPG_NUTS, ctx->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG).Is(true) ? 0 : 1); + + // If we're not shuffling swim, we start with it + if (ctx->GetOption(RSK_SHUFFLE_SWIM).Is(false)) { + SetRandoInf(RAND_INF_CAN_SWIM, true); + } + + // If we're not shuffling child's wallet, we start with it + if (ctx->GetOption(RSK_SHUFFLE_CHILD_WALLET).Is(false)) { + SetRandoInf(RAND_INF_HAS_WALLET, true); + } + + // If we're not shuffling fishing pole, we start with it + if (ctx->GetOption(RSK_SHUFFLE_FISHING_POLE).Is(false)) { + SetRandoInf(RAND_INF_FISHING_POLE_FOUND, true); + } + + // If not keysanity, start with 1 logical key to account for automatically unlocking the basement door in vanilla + // FiT + if (!IsKeysanity && ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsVanilla()) { + SetSmallKeyCount(SCENE_FIRE_TEMPLE, 1); + } + + // Bottle Count + Bottles = 0; + NumBottles = 0; + CanEmptyBigPoes = false; + CouldEmptyBigPoes = false; + + // Drops and Bottle Contents Access + NutPot = false; + NutCrate = false; + DekuBabaNuts = false; + StickPot = false; + DekuBabaSticks = false; + BugShrub = false; + WanderingBugs = false; + BugRock = false; + BlueFireAccess = false; + FishGroup = false; + LoneFish = false; + GossipStoneFairy = false; + BeanPlantFairy = false; + ButterflyFairy = false; + FairyPot = false; + FreeFairies = false; + FairyPond = false; + + PieceOfHeart = 0; + HeartContainer = 0; + + /* --- HELPERS, EVENTS, AND LOCATION ACCESS --- */ + /* These are used to simplify reading the logic, but need to be updated + / every time a base value is updated. */ + + ChildScarecrow = false; + AdultScarecrow = false; + + CouldPlayBowling = false; + IsChild = false; + IsAdult = false; + // CanPlantBean = false; + BigPoeKill = false; + BigPoes = 0; + + BaseHearts = ctx->GetOption(RSK_STARTING_HEARTS).Get() + 1; + + // Bridge Requirements + BuiltRainbowBridge = false; + + // Other + AtDay = false; + AtNight = false; + GetSaveContext()->linkAge = !ctx->GetOption(RSK_SELECTED_STARTING_AGE).Get(); + + // Events + ShowedMidoSwordAndShield = false; + CarpenterRescue = false; + GF_GateOpen = false; + GtG_GateOpen = false; + DampesWindmillAccess = false; + DrainWell = false; + GoronCityChildFire = false; + GCWoodsWarpOpen = false; + GCDaruniasDoorOpenChild = false; + StopGCRollingGoronAsAdult = false; + CanWaterTempleLowFromHigh = false; + CanWaterTempleLowFromMid = false; + CanWaterTempleMiddle = false; + CanWaterTempleHigh = false; + KakarikoVillageGateOpen = false; + KingZoraThawed = false; + ForestTempleJoelle = false; + ForestTempleBeth = false; + ForestTempleAmy = false; + ForestTempleMeg = false; + FireLoopSwitch = false; + LinksCow = false; + DeliverLetter = false; + ClearMQDCUpperLobbyRocks = false; + LoweredWaterInsideBotw = false; + OpenedWestRoomMQBotw = false; + OpenedMiddleHoleMQBotw = false; + BrokeDeku1FWeb = false; + ClearedMQDekuSERoom = false; + MQDekuWaterRoomTorches = false; + PushedDekuBasementBlock = false; + OpenedLowestGoronCage = false; + OpenedUpperFireShortcut = false; + HitFireTemplePlatform = false; + OpenedFireMQFireMazeDoor = false; + MQForestBlockRoomTargets = false; + ForestCanTwistHallway = false; + ForestClearBelowBowChest = false; + ForestOpenBossCorridor = false; + ShadowTrialFirstChest = false; + MQGTGMazeSwitch = false; + GTGPlatformSilverRupees = false; + MQJabuHolesRoomDoor = false; + JabuWestTentacle = false; + JabuEastTentacle = false; + JabuNorthTentacle = false; + LoweredJabuPath = false; + MQJabuLiftRoomCow = false; + MQShadowFloorSpikeRupees = false; + ShadowShortcutBlock = false; + MQWaterStalfosPit = false; + MQWaterDragonTorches = false; + MQWaterB1Switch = false; + // MQWaterPillarSoTBlock = false; + MQWaterOpenedPillarB1 = false; + MQSpiritCrawlBoulder = false; + MQSpiritMapRoomEnemies = false; + MQSpirit3SunsEnemies = false; + Spirit1FSilverRupees = false; + JabuRutoIn1F = false; + + StopPerformanceTimer(PT_LOGIC_RESET); +} +} // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/logic.h b/soh/soh/Enhancements/randomizer/logic.h index d8fa9864b..4549c9952 100644 --- a/soh/soh/Enhancements/randomizer/logic.h +++ b/soh/soh/Enhancements/randomizer/logic.h @@ -64,10 +64,14 @@ class Logic { // Bottle Count uint8_t Bottles = 0; uint8_t NumBottles = 0; - //this event covers if the player can currently empty big poes in logic + // this event covers if the player can currently empty big poes in logic bool CanEmptyBigPoes = false; - //this check covers if the generation has confirmed that it's possible to empty big poes if needed as adult - bool CouldEmptyBigPoes = true; + // this event covers if the player could, if they filled their bottle with big poes in field, empty them at the poe + // merchant. Works in tandem with the big poes safety check during entrance validation + bool CouldEmptyBigPoes = false; + // this check is used to tell logic that we are checking big poes accessibility in logic, to ensure it's not + // bottle-locked. + bool AreCheckingBigPoes = false; // Drops and Bottle Contents Access bool NutPot = false; @@ -87,7 +91,7 @@ class Logic { bool FairyPot = false; bool FreeFairies = false; bool FairyPond = false; - bool AmmoCanDrop = false; + bool AmmoCanDrop = true; uint8_t PieceOfHeart = 0; uint8_t HeartContainer = 0; @@ -151,7 +155,7 @@ class Logic { bool OpenedFireMQFireMazeDoor = false; bool MQForestBlockRoomTargets = false; bool ForestCanTwistHallway = false; - bool ForestClearBelowBowChest = false; //a better name that covers both versions would be nice + bool ForestClearBelowBowChest = false; // a better name that covers both versions would be nice bool ForestOpenBossCorridor = false; bool ShadowTrialFirstChest = false; bool MQGTGMazeSwitch = false; @@ -168,7 +172,7 @@ class Logic { bool MQWaterStalfosPit = false; bool MQWaterDragonTorches = false; bool MQWaterB1Switch = false; - //bool MQWaterPillarSoTBlock = false; should be irrelevant. SHOULD. + // bool MQWaterPillarSoTBlock = false; should be irrelevant. SHOULD. bool MQWaterOpenedPillarB1 = false; bool MQSpiritCrawlBoulder = false; bool MQSpiritMapRoomEnemies = false; @@ -190,7 +194,8 @@ class Logic { bool SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmountGlitchless, uint8_t requiredAmountGlitched); bool CanDoGlitch(GlitchType glitch); bool CanEquipSwap(RandomizerGet itemName); - bool CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance = ED_CLOSE, bool wallOrFloor = true, uint8_t quantity = 1, bool timer = false, bool inWater = false); + bool CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance = ED_CLOSE, bool wallOrFloor = true, + uint8_t quantity = 1, bool timer = false, bool inWater = false); bool CanPassEnemy(RandomizerEnemy enemy, EnemyDistance distance = ED_CLOSE, bool wallOrFloor = true); bool CanAvoidEnemy(RandomizerEnemy enemy, bool grounded = false, uint8_t quantity = 1); bool CanGetEnemyDrop(RandomizerEnemy enemy, EnemyDistance distance = ED_CLOSE, bool aboveLink = false); @@ -237,6 +242,8 @@ class Logic { bool CanBreakUpperBeehives(); bool CanBreakLowerBeehives(); bool CanBreakPots(); + bool CanBreakCrates(); + bool CanBreakSmallCrates(); bool HasFireSource(); bool HasFireSourceWithTorch(); bool TradeQuestStep(RandomizerGet rg); diff --git a/soh/soh/Enhancements/randomizer/option.cpp b/soh/soh/Enhancements/randomizer/option.cpp index 64ca107c5..43fcc2f65 100644 --- a/soh/soh/Enhancements/randomizer/option.cpp +++ b/soh/soh/Enhancements/randomizer/option.cpp @@ -10,29 +10,30 @@ namespace Rando { Option Option::Bool(RandomizerSettingKey key_, std::string name_, std::vector options_, const OptionCategory category_, std::string cvarName_, std::string description_, WidgetType widgetType_, const uint8_t defaultOption_, const bool defaultHidden_, int imFlags_) { - return {static_cast(key_), std::move(name_), std::move(options_), category_, - std::move(cvarName_), std::move(description_), widgetType_, defaultOption_, defaultHidden_, imFlags_}; + return { static_cast(key_), std::move(name_), std::move(options_), category_, std::move(cvarName_), + std::move(description_), widgetType_, defaultOption_, defaultHidden_, imFlags_ }; } Option Option::Bool(RandomizerSettingKey key_, std::string name_, std::string cvarName_, std::string description_, const int imFlags_, const WidgetType widgetType_, const bool defaultOption_) { - return Option(key_, std::move(name_), {"Off", "On"}, OptionCategory::Setting, std::move(cvarName_), + return Option(key_, std::move(name_), { "Off", "On" }, OptionCategory::Setting, std::move(cvarName_), std::move(description_), widgetType_, defaultOption_, false, imFlags_); } Option Option::U8(RandomizerSettingKey key_, std::string name_, std::vector options_, const OptionCategory category_, std::string cvarName_, std::string description_, WidgetType widgetType_, const uint8_t defaultOption_, const bool defaultHidden_, int imFlags_) { - return {static_cast(key_), std::move(name_), std::move(options_), category_, std::move(cvarName_), - std::move(description_), widgetType_, defaultOption_, defaultHidden_, imFlags_}; + return { static_cast(key_), std::move(name_), std::move(options_), category_, std::move(cvarName_), + std::move(description_), widgetType_, defaultOption_, defaultHidden_, imFlags_ }; } Option Option::LogicTrick(RandomizerTrick rt_, std::string name_) { - return Option(rt_, std::move(name_), { "Disabled", "Enabled" }, OptionCategory::Setting, "", - "", WidgetType::Checkbox, 0, false, IMFLAG_NONE); + return Option(rt_, std::move(name_), { "Disabled", "Enabled" }, OptionCategory::Setting, "", "", + WidgetType::Checkbox, 0, false, IMFLAG_NONE); } -OptionValue::OptionValue(uint8_t val) : mVal(val) {} +OptionValue::OptionValue(uint8_t val) : mVal(val) { +} uint8_t OptionValue::Get() { return mVal; @@ -62,8 +63,8 @@ const std::string& Option::GetDescription() const { return description; } -uint8_t Option::GetMenuOptionIndex() const { - return menuSelection; +uint8_t Option::GetOptionIndex() const { + return CVarGetInteger(cvarName.c_str(), defaultOption); } const std::string& Option::GetOptionText(size_t index) const { @@ -74,18 +75,6 @@ const std::string& Option::GetCVarName() const { return cvarName; } -void Option::SaveCVar() const { - if (!cvarName.empty()) { - CVarSetInteger(cvarName.c_str(), GetMenuOptionIndex()); - } -} - -void Option::SetFromCVar() { - if (!cvarName.empty()) { - SetMenuIndex(CVarGetInteger(cvarName.c_str(), defaultOption)); - } -} - void Option::SetDelayedOption() { delayedSelection = contextSelection; } @@ -94,13 +83,6 @@ void Option::RestoreDelayedOption() { contextSelection = delayedSelection; } -void Option::SetMenuIndex(size_t idx) { - menuSelection = idx; - if (menuSelection > options.size() - 1) { - menuSelection = options.size() - 1; - } -} - void Option::SetContextIndex(size_t idx) { // TODO: Set to Context's OptionValue array. contextSelection = idx; @@ -122,8 +104,8 @@ bool Option::IsHidden() const { } void Option::ChangeOptions(std::vector opts) { - if (menuSelection >= opts.size()) { - menuSelection = opts.size() - 1; + if (GetOptionIndex() >= opts.size()) { + CVarSetInteger(cvarName.c_str(), opts.size() - 1); } options = std::move(opts); } @@ -188,7 +170,7 @@ uint8_t Option::GetValueFromText(const std::string text) { } void Option::SetContextIndexFromText(const std::string text) { - if (optionsTextToVar.contains(text)){ + if (optionsTextToVar.contains(text)) { SetContextIndex(optionsTextToVar[text]); } else { SPDLOG_ERROR("Option {} does not have a var named {}.", name, text); @@ -202,16 +184,16 @@ Option::Option(size_t key_, std::string name_, std::vector options_ : key(key_), name(std::move(name_)), options(std::move(options_)), category(category_), cvarName(std::move(cvarName_)), description(std::move(description_)), widgetType(widgetType_), defaultOption(defaultOption_), defaultHidden(defaultHidden_), imFlags(imFlags_) { - menuSelection = contextSelection = defaultOption; + contextSelection = defaultOption; hidden = defaultHidden; PopulateTextToNum(); - SetFromCVar(); } bool Option::RenderCheckbox() { bool changed = false; bool val = static_cast(CVarGetInteger(cvarName.c_str(), defaultOption)); - UIWidgets::CheckboxOptions widgetOptions = static_cast(UIWidgets::CheckboxOptions().Color(THEME_COLOR).Tooltip(description.c_str())); + UIWidgets::CheckboxOptions widgetOptions = static_cast( + UIWidgets::CheckboxOptions().Color(THEME_COLOR).Tooltip(description.c_str())); widgetOptions.disabled = disabled; if (UIWidgets::Checkbox(name.c_str(), &val, widgetOptions)) { CVarSetInteger(cvarName.c_str(), val); @@ -230,12 +212,14 @@ bool Option::RenderCombobox() { changed = true; Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } - UIWidgets::ComboboxOptions widgetOptions = UIWidgets::ComboboxOptions().Color(THEME_COLOR).Tooltip(description.c_str()); + UIWidgets::ComboboxOptions widgetOptions = + UIWidgets::ComboboxOptions().Color(THEME_COLOR).Tooltip(description.c_str()); if (this->GetKey() == RSK_LOGIC_RULES) { - widgetOptions = widgetOptions.LabelPosition(UIWidgets::LabelPositions::None).ComponentAlignment(UIWidgets::ComponentAlignments::Right); + widgetOptions = widgetOptions.LabelPosition(UIWidgets::LabelPositions::None) + .ComponentAlignment(UIWidgets::ComponentAlignments::Right); } widgetOptions.disabled = disabled; - if(UIWidgets::Combobox(name.c_str(), &selected, options, widgetOptions)) { + if (UIWidgets::Combobox(name.c_str(), &selected, options, widgetOptions)) { CVarSetInteger(cvarName.c_str(), static_cast(selected)); changed = true; Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); @@ -245,13 +229,18 @@ bool Option::RenderCombobox() { bool Option::RenderSlider() { bool changed = false; - int val = GetMenuOptionIndex(); + int val = CVarGetInteger(cvarName.c_str(), defaultOption); if (val > options.size() - 1) { val = options.size() - 1; - CVarSetInteger(cvarName.c_str(), val); changed = true; } - UIWidgets::IntSliderOptions widgetOptions = UIWidgets::IntSliderOptions().Color(THEME_COLOR).Min(0).Max(options.size() - 1).Tooltip(description.c_str()).Format(options[val].c_str()).DefaultValue(defaultOption); + UIWidgets::IntSliderOptions widgetOptions = UIWidgets::IntSliderOptions() + .Color(THEME_COLOR) + .Min(0) + .Max(options.size() - 1) + .Tooltip(description.c_str()) + .Format(options[val].c_str()) + .DefaultValue(defaultOption); widgetOptions.disabled = disabled; if (UIWidgets::SliderInt(name.c_str(), &val, widgetOptions)) { changed = true; @@ -266,33 +255,36 @@ bool Option::RenderSlider() { } if (changed) { CVarSetInteger(cvarName.c_str(), val); - SetFromCVar(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } return changed; } -void Option::PopulateTextToNum(){ - for (uint8_t count = 0; count < options.size(); count++){ +void Option::PopulateTextToNum() { + for (uint8_t count = 0; count < options.size(); count++) { optionsTextToVar[options[count]] = count; } } -LocationOption::LocationOption(RandomizerCheck key_, const std::string& name_) : - Option(key_, name_, {"Included", "Excluded"}, OptionCategory::Setting, "", "", WidgetType::Checkbox, - RO_LOCATION_INCLUDE, false, IMFLAG_NONE) {} +LocationOption::LocationOption(RandomizerCheck key_, const std::string& name_) + : Option(key_, name_, { "Included", "Excluded" }, OptionCategory::Setting, "", "", WidgetType::Checkbox, + RO_LOCATION_INCLUDE, false, IMFLAG_NONE) { +} RandomizerCheck LocationOption::GetKey() const { return static_cast(key); } -TrickOption::TrickOption(RandomizerTrick key_, const RandomizerCheckQuest quest_, const RandomizerArea area_, std::set tags_, const std::string& name_, std::string description_) : - Option(key_, name_, {"Disabled", "Enabled"}, OptionCategory::Setting, "", - std::move(description_), WidgetType::Checkbox, 0, false, IMFLAG_NONE), - mQuest(quest_), mArea(area_), mTags(std::move(tags_)) {} +TrickOption::TrickOption(RandomizerTrick key_, const RandomizerCheckQuest quest_, const RandomizerArea area_, + std::set tags_, const std::string& name_, std::string description_) + : Option(key_, name_, { "Disabled", "Enabled" }, OptionCategory::Setting, "", std::move(description_), + WidgetType::Checkbox, 0, false, IMFLAG_NONE), + mQuest(quest_), mArea(area_), mTags(std::move(tags_)) { +} -TrickOption TrickOption::LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set tags_, const std::string& name_, std::string description_) { - return {key_, quest_, area_, std::move(tags_), name_, std::move(description_)}; +TrickOption TrickOption::LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, + std::set tags_, const std::string& name_, std::string description_) { + return { key_, quest_, area_, std::move(tags_), name_, std::move(description_) }; } RandomizerTrick TrickOption::GetKey() const { @@ -317,8 +309,8 @@ const std::set& TrickOption::GetTags() const { OptionGroup::OptionGroup(std::string name, std::vector options, const OptionGroupType groupType, const WidgetContainerType containerType, std::string description) - : mName(std::move(name)), mOptions(std::move(options)), mGroupType(groupType), - mContainerType(containerType), mDescription(std::move(description)) { + : mName(std::move(name)), mOptions(std::move(options)), mGroupType(groupType), mContainerType(containerType), + mDescription(std::move(description)) { } OptionGroup::OptionGroup(std::string name, std::vector subGroups, const OptionGroupType groupType, @@ -329,14 +321,12 @@ OptionGroup::OptionGroup(std::string name, std::vector subGroups, OptionGroup OptionGroup::SubGroup(std::string name, std::vector options, const WidgetContainerType containerType, std::string description) { - return {std::move(name), std::move(options), OptionGroupType::SUBGROUP, containerType, - std::move(description)}; + return { std::move(name), std::move(options), OptionGroupType::SUBGROUP, containerType, std::move(description) }; } OptionGroup OptionGroup::SubGroup(std::string name, std::vector subGroups, const WidgetContainerType containerType, std::string description) { - return {std::move(name), std::move(subGroups), OptionGroupType::SUBGROUP, containerType, - std::move(description)}; + return { std::move(name), std::move(subGroups), OptionGroupType::SUBGROUP, containerType, std::move(description) }; } const std::string& OptionGroup::GetName() const { @@ -380,7 +370,8 @@ bool OptionGroup::RenderImGui() const { // NOLINT(*-no-recursion) bool changed = false; ImGui::BeginDisabled(mDisabled); if (mContainerType == WidgetContainerType::TABLE) { - if (ImGui::BeginTable(mName.c_str(), static_cast(mSubGroups.size()), ImGuiTableFlags_BordersH | ImGuiTableFlags_BordersV)) { + if (ImGui::BeginTable(mName.c_str(), static_cast(mSubGroups.size()), + ImGuiTableFlags_BordersH | ImGuiTableFlags_BordersV)) { for (const auto column : mSubGroups) { if (column->GetContainerType() == WidgetContainerType::COLUMN) { ImGui::TableSetupColumn(column->GetName().c_str(), ImGuiTableColumnFlags_WidthStretch, 200.0f); diff --git a/soh/soh/Enhancements/randomizer/option.h b/soh/soh/Enhancements/randomizer/option.h index 518487219..d92fa4473 100644 --- a/soh/soh/Enhancements/randomizer/option.h +++ b/soh/soh/Enhancements/randomizer/option.h @@ -16,28 +16,31 @@ namespace Rando { enum ImGuiMenuFlags { - IMFLAG_NONE = 0, - IMFLAG_SEPARATOR_BOTTOM = 1 << 0, /** Adds a padded separator below the widget. */ - IMFLAG_SEPARATOR_TOP = 1 << 1, /** Adds a padded separator above the widget. */ - IMFLAG_INDENT = 1 << 2, /** Indents this widget and all proceeding widgets. */ - IMFLAG_UNINDENT = 1 << 3, /** Unindents this widget and all proceeding widgets. */ + IMFLAG_NONE = 0, + IMFLAG_SEPARATOR_BOTTOM = 1 << 0, /** Adds a padded separator below the widget. */ + IMFLAG_SEPARATOR_TOP = 1 << 1, /** Adds a padded separator above the widget. */ + IMFLAG_INDENT = 1 << 2, /** Indents this widget and all proceeding widgets. */ + IMFLAG_UNINDENT = 1 << 3, /** Unindents this widget and all proceeding widgets. */ }; /** * @brief Affects how options are handled when writing a spoiler/patch file */ enum class OptionCategory { - Setting, /** An option that typically affects the logic/item pool/etc. of the seed. Typically gets written out to the spoiler file. */ - Toggle, /** An option that typically affects other options rather than affecting the seed directly. i.e. A toggle for randomizing the values of other options. */ + Setting, /** An option that typically affects the logic/item pool/etc. of the seed. Typically gets written out to + the spoiler file. */ + Toggle, /** An option that typically affects other options rather than affecting the seed directly. i.e. A toggle + for randomizing the values of other options. */ }; /** * @brief Controls how this option is rendered in the menu. */ enum class WidgetType { - Checkbox, /** Default for Bools, not compatible if options.size() > 2. */ - Combobox, /** Default for U8s, works with U8s and Bools. */ - Slider, /** Compatible with U8s. If constructed with NumOpts, consider using this. Technically can be used for Bool or non-NumOpts options but it would be a bit weird semantically. */ + Checkbox, /** Default for Bools, not compatible if options.size() > 2. */ + Combobox, /** Default for U8s, works with U8s and Bools. */ + Slider, /** Compatible with U8s. If constructed with NumOpts, consider using this. Technically can be used for Bool + or non-NumOpts options but it would be a bit weird semantically. */ }; class OptionValue { @@ -47,15 +50,15 @@ class OptionValue { /** * @brief Returns the value of the OptionValue's mVal - * - * @return uint8_t + * + * @return uint8_t */ uint8_t Get(); /** * @brief Set the OptionValue's mVal to the provided val. - * - * @param val + * + * @param val */ void Set(uint8_t val); @@ -146,8 +149,8 @@ class Option { * @return Option */ static Option Bool(RandomizerSettingKey key_, std::string name_, std::string cvarName_, - std::string description_ = "", int imFlags_ = IMFLAG_SEPARATOR_BOTTOM, - WidgetType widgetType_ = WidgetType::Checkbox, bool defaultOption_ = false); + std::string description_ = "", int imFlags_ = IMFLAG_SEPARATOR_BOTTOM, + WidgetType widgetType_ = WidgetType::Checkbox, bool defaultOption_ = false); /** * @brief Constructs a U8 Option. @@ -192,8 +195,8 @@ class Option { /** * @brief Get the Key Option - * - * @return const RandomizerSettingKey + * + * @return const RandomizerSettingKey */ RandomizerSettingKey GetKey() const; @@ -207,9 +210,9 @@ class Option { /** * @brief Get the text of the Option value of the selected index. - * - * @param index - * @return const std::string& + * + * @param index + * @return const std::string& */ const std::string& GetOptionText(size_t index) const; @@ -225,19 +228,7 @@ class Option { * * @return uint8_t */ - uint8_t GetMenuOptionIndex() const; - - /** - * @brief Sets the CVar corresponding to the property `cvarName` equal to the value - * of the property `selectedValue`. - */ - void SaveCVar() const; - - /** - * @brief Sets the value of property `selectedValue` equal to the CVar corresponding - * to the property `cvarName`. - */ - void SetFromCVar(); + uint8_t GetOptionIndex() const; /** * @brief Set the delayedOption to the currently selected index so it can be restored later. @@ -249,13 +240,6 @@ class Option { */ void RestoreDelayedOption(); - /** - * @brief Set the menu index for this Option. Also calls `SetVariable()`. - * - * @param idx the index to set as the selected index. - */ - void SetMenuIndex(size_t idx); - /** * @brief Set the rando context index for this Option. Also calls `SetVariable()`. * @@ -298,7 +282,7 @@ class Option { * "Enable" in this context refers to the ability to change the option in the * settings menu. The actual value of the option is not decided by whether or not * the option is "Enabled". - */ + */ void Enable(); /** @@ -331,7 +315,7 @@ class Option { uint8_t GetValueFromText(std::string text); void SetContextIndexFromText(std::string text); -protected: + protected: Option(size_t key_, std::string name_, std::vector options_, OptionCategory category_, std::string cvarName_, std::string description_, WidgetType widgetType_, uint8_t defaultOption_, bool defaultHidden_, int imFlags_); @@ -344,7 +328,6 @@ protected: void PopulateTextToNum(); std::string name; std::vector options; - uint8_t menuSelection = 0; uint8_t contextSelection = 0; uint8_t delayedSelection = 0; bool hidden = false; @@ -361,14 +344,14 @@ protected: }; class LocationOption : public Option { -public: - LocationOption() = default; - LocationOption(RandomizerCheck key_, const std::string& name_); - RandomizerCheck GetKey() const; + public: + LocationOption() = default; + LocationOption(RandomizerCheck key_, const std::string& name_); + RandomizerCheck GetKey() const; }; class TrickOption : public Option { -public: + public: TrickOption() = default; /** * @brief A convenience function for constructing the Option for a trick. @@ -381,7 +364,8 @@ public: * @param description_ A brief description of the trick. * @return Option */ - static TrickOption LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set tags_, const std::string& name_, std::string description_); + static TrickOption LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, + std::set tags_, const std::string& name_, std::string description_); RandomizerTrick GetKey() const; @@ -409,8 +393,9 @@ public: const std::set& GetTags() const; -private: - TrickOption(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set tags_, const std::string& name_, std::string description_); + private: + TrickOption(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set tags_, + const std::string& name_, std::string description_); RandomizerCheckQuest mQuest; RandomizerArea mArea; std::set mTags; @@ -422,11 +407,11 @@ enum class OptionGroupType { }; enum class WidgetContainerType { - BASIC, /** Barebones container, just lists the options within. */ - SECTION, /** Similar to Barebones, but has a header with the section name. */ - COLUMN, /** Signifies the container should be the start of new column within a table. */ - TABLE, /** Signifies the container is a table (should contain other subgroups with type column)*/ - TABBED, /** Signifies this container's contents should be contained within a tabbed interface. */ + BASIC, /** Barebones container, just lists the options within. */ + SECTION, /** Similar to Barebones, but has a header with the section name. */ + COLUMN, /** Signifies the container should be the start of new column within a table. */ + TABLE, /** Signifies the container is a table (should contain other subgroups with type column)*/ + TABBED, /** Signifies this container's contents should be contained within a tabbed interface. */ }; class OptionGroup { @@ -456,7 +441,8 @@ class OptionGroup { * @param containerType Specifies the type of container this widget should render as in ImGui. * @param description A description that can appear in a tooltip in ImGui. */ - OptionGroup(std::string name, std::vector subGroups, OptionGroupType groupType = OptionGroupType::DEFAULT, + OptionGroup(std::string name, std::vector subGroups, + OptionGroupType groupType = OptionGroupType::DEFAULT, WidgetContainerType containerType = WidgetContainerType::BASIC, std::string description = ""); /** @@ -469,7 +455,8 @@ class OptionGroup { * @param description A description that can appear in a tooltip in ImGui. * @return OptionGroup */ - static OptionGroup SubGroup(std::string name, std::vector options, WidgetContainerType containerType = WidgetContainerType::BASIC, + static OptionGroup SubGroup(std::string name, std::vector options, + WidgetContainerType containerType = WidgetContainerType::BASIC, std::string description = ""); /** @@ -482,7 +469,8 @@ class OptionGroup { * @param description A description that can appear in a tooltip in ImGui. * @return OptionGroup */ - static OptionGroup SubGroup(std::string name, std::vector subGroups, WidgetContainerType containerType = WidgetContainerType::BASIC, + static OptionGroup SubGroup(std::string name, std::vector subGroups, + WidgetContainerType containerType = WidgetContainerType::BASIC, std::string description = ""); /** @@ -546,4 +534,4 @@ class OptionGroup { }; } // namespace Rando -#endif //RANDOPTION_H \ No newline at end of file +#endif // RANDOPTION_H \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index a3184765f..8dc07ce7a 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -2,18 +2,19 @@ namespace Rando { void Settings::CreateOptionDescriptions() { - mOptionDescriptions[RSK_FOREST] = "Determines if Kokiri forest can be left for the Lost Woods bridge or the Deku Tree.\n" - "\n" - "On - Kokiri Sword & Deku Shield are required to access " - "the Deku Tree, and completing the Deku Tree is required to " - "access the Lost Woods Bridge Exit.\n" - "\n" - "Deku Only - Kokiri boy no longer blocks the path to the Bridge " - "but Mido still requires the Kokiri Sword and Deku Shield " - "to access the tree.\n" - "\n" - "Off - Mido no longer blocks the path to the Deku Tree. Kokiri " - "boy no longer blocks the path out of the forest."; + mOptionDescriptions[RSK_FOREST] = + "Determines if Kokiri forest can be left for the Lost Woods bridge or the Deku Tree.\n" + "\n" + "On - Kokiri Sword & Deku Shield are required to access " + "the Deku Tree, and completing the Deku Tree is required to " + "access the Lost Woods Bridge Exit.\n" + "\n" + "Deku Only - Kokiri boy no longer blocks the path to the Bridge " + "but Mido still requires the Kokiri Sword and Deku Shield " + "to access the tree.\n" + "\n" + "Off - Mido no longer blocks the path to the Deku Tree. Kokiri " + "boy no longer blocks the path out of the forest."; mOptionDescriptions[RSK_KAK_GATE] = "Closed - The gate will remain closed until Zelda's Letter " "is shown to the guard.\n" "\n" @@ -41,22 +42,24 @@ void Settings::CreateOptionDescriptions() { "\n" "Open - Sleeping Waterfall is always open. " "Link may always enter Zora's Domain."; - mOptionDescriptions[RSK_LOCK_OVERWORLD_DOORS] = "Add locks to all wooden overworld doors, requiring specific small keys to open them"; + mOptionDescriptions[RSK_LOCK_OVERWORLD_DOORS] = + "Add locks to all wooden overworld doors, requiring specific small keys to open them"; mOptionDescriptions[RSK_STARTING_AGE] = "Choose which age Link will start as.\n\n" "Starting as adult means you start with the Master Sword in your inventory.\n" "The child option is forcefully set if it would conflict with other options."; - mOptionDescriptions[RSK_GERUDO_FORTRESS] = "Sets the state of the carpenters captured by Gerudo " - "in Gerudo Fortress, and with it the number of guards that spawn.\n" - "\n" - "Normal - All 4 carpenters are required to be saved.\n" - "\n" - "Fast - Only the bottom left carpenter requires rescuing.\n" - "\n" - "Free - The bridge is repaired from the start, and Nabooru cannot spawn.\n" - "If the Gerudo Membership Card isn't shuffled, you start with it.\n" - "\n" - "Only \"Normal\" is compatible with Gerudo Fortress Key Rings."; + mOptionDescriptions[RSK_GERUDO_FORTRESS] = + "Sets the state of the carpenters captured by Gerudo " + "in Gerudo Fortress, and with it the number of guards that spawn.\n" + "\n" + "Normal - All 4 carpenters are required to be saved.\n" + "\n" + "Fast - Only the bottom left carpenter requires rescuing.\n" + "\n" + "Free - The bridge is repaired from the start, and Nabooru cannot spawn.\n" + "If the Gerudo Membership Card isn't shuffled, you start with it.\n" + "\n" + "Only \"Normal\" is compatible with Gerudo Fortress Key Rings."; mOptionDescriptions[RSK_RAINBOW_BRIDGE] = "Alters the requirements to open the bridge to Ganon's Castle.\n" "\n" @@ -111,13 +114,13 @@ void Settings::CreateOptionDescriptions() { "Selection Only - Specify which dungeons are Vanilla, Master Quest or a 50/50 between the two.\n" "Differs from Random Number in that they are rolled individually, making the exact total a bell curve."; mOptionDescriptions[RSK_MQ_DUNGEON_SET] = - "Choose specific Dungeons to be Master Quest or Vanilla.\n" - "\n" - "If Master Quest Dungeons is set to Set Number or Random, the dungeons chosen " - "to be Master Quest here will count towards that total. Any Dungeons set to Vanilla " - "here will be guaranteed to be Vanilla. If Set Number is higher than the amount of dungeons " - "set to either MQ or Random here, you will have fewer MQ Dungeons than the number you " - "set."; + "Choose specific Dungeons to be Master Quest or Vanilla.\n" + "\n" + "If Master Quest Dungeons is set to Set Number or Random, the dungeons chosen " + "to be Master Quest here will count towards that total. Any Dungeons set to Vanilla " + "here will be guaranteed to be Vanilla. If Set Number is higher than the amount of dungeons " + "set to either MQ or Random here, you will have fewer MQ Dungeons than the number you " + "set."; mOptionDescriptions[RSK_TRIFORCE_HUNT] = "Pieces of the Triforce of Courage have been scattered across the world. Find them all to finish the game!\n\n" "When the required amount of pieces have been found, the game is saved and Ganon's Boss key is given " @@ -224,12 +227,11 @@ void Settings::CreateOptionDescriptions() { "\n" "Adult Link will start with a second free item instead of the Master Sword.\n" "If you haven't found the Master Sword before facing Ganon, you won't receive it during the fight."; - mOptionDescriptions[RSK_SHUFFLE_CHILD_WALLET] = - "Enabling this shuffles the Child's Wallet into the item pool.\n" - "\n" - "You will not be able to carry any rupees until you find a wallet."; - mOptionDescriptions[RSK_INCLUDE_TYCOON_WALLET] = - "Enabling this adds an extra Progressive Wallet to the pool and adds a new 999 capacity tier after Giant's Wallet.\n"; + mOptionDescriptions[RSK_SHUFFLE_CHILD_WALLET] = "Enabling this shuffles the Child's Wallet into the item pool.\n" + "\n" + "You will not be able to carry any rupees until you find a wallet."; + mOptionDescriptions[RSK_INCLUDE_TYCOON_WALLET] = "Enabling this adds an extra Progressive Wallet to the pool and " + "adds a new 999 capacity tier after Giant's Wallet.\n"; mOptionDescriptions[RSK_SHUFFLE_OCARINA] = "Enabling this shuffles the Fairy Ocarina and the Ocarina of Time into the item pool.\n" "\n" @@ -259,62 +261,79 @@ void Settings::CreateOptionDescriptions() { "\n" "The Gerudo Card is required to enter the Gerudo Training Ground, opening " "the gate to Haunted Wasteland and the Horseback Archery minigame."; - mOptionDescriptions[RSK_SHUFFLE_POTS] = "Pots will drop a randomized item the first time they're broken and collected. This does not include the flying pots." - " Pots will have a different appearance when they hold a randomized item.\n" - "With this option enabled, Ganon's boss key door is moved further up the stairs to\n" - "allow access to the pots before obtaining Ganon's Boss Key.\n" - "\n" - "Off - Pots will not be shuffled.\n" - "\n" - "Dungeons - Only shuffle pots that are within dungeons.\n" - "\n" - "Overworld - Only shuffle pots that are outside of dungeons.\n" - "\n" - "All pots - Shuffle all pots."; - mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE] = "Shuffles the fishing pole into the item pool.\n" + mOptionDescriptions[RSK_SHUFFLE_POTS] = + "Pots will drop a randomized item the first time they're broken and collected. This does not include the " + "flying pots." + " Pots will have a different appearance when they hold a randomized item.\n" + "With this option enabled, Ganon's boss key door is moved further up the stairs to\n" + "allow access to the pots before obtaining Ganon's Boss Key.\n" "\n" - "The fishing pole is required to play the fishing pond minigame."; - mOptionDescriptions[RSK_INFINITE_UPGRADES] = "Adds upgrades that hold infinite quantities of items (bombs, arrows, etc.).\n" + "Off - Pots will not be shuffled.\n" + "\n" + "Dungeons - Only shuffle pots that are within dungeons.\n" + "\n" + "Overworld - Only shuffle pots that are outside of dungeons.\n" + "\n" + "All pots - Shuffle all pots."; + mOptionDescriptions[RSK_SHUFFLE_CRATES] = + "Crates will drop a randomized item the first time they're broken and collected. " + "Crates will have a different appearance when they hold a randomized item.\n" + "\n" + "Off - Crates will not be shuffled.\n" + "\n" + "Dungeons - Only shuffle crates that are within dungeons.\n" + "\n" + "Overworld - Only shuffle crates that are outside of dungeons.\n" + "\n" + "All Crates - Shuffle all crates."; + mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE] = "Shuffles the fishing pole into the item pool.\n" + "\n" + "The fishing pole is required to play the fishing pond minigame."; + mOptionDescriptions[RSK_INFINITE_UPGRADES] = + "Adds upgrades that hold infinite quantities of items (bombs, arrows, etc.).\n" "\n" "Progressive - The infinite upgrades are obtained after getting the last normal capacity upgrade.\n" "\n" - "Condensed Progressive - The infinite upgrades are obtained as the first capacity upgrade (doesn't apply to the infinite wallet or to infinite magic)."; + "Condensed Progressive - The infinite upgrades are obtained as the first capacity upgrade (doesn't apply to " + "the infinite wallet or to infinite magic)."; mOptionDescriptions[RSK_SHUFFLE_DEKU_STICK_BAG] = "Shuffles the Deku Stick bag into the item pool.\n" - "\n" - "The Deku Stick bag is required to hold Deku Sticks."; + "\n" + "The Deku Stick bag is required to hold Deku Sticks."; mOptionDescriptions[RSK_SHUFFLE_DEKU_NUT_BAG] = "Shuffles the Deku Nut bag into the item pool.\n" + "\n" + "The Deku Nut bag is required to hold Deku Nuts."; + mOptionDescriptions[RSK_SHOPSANITY] = + "Off - All shop items will be the same as vanilla.\n" "\n" - "The Deku Nut bag is required to hold Deku Nuts."; - mOptionDescriptions[RSK_SHOPSANITY] = "Off - All shop items will be the same as vanilla.\n" - "\n" - "Specific Count - Vanilla shop items will be shuffled among different shops, and " - "each shop will contain a specific number (0-7) of non-vanilla shop items.\n" - "\n" - "Random - Vanilla shop items will be shuffled among different shops, and " - "each shop will contain a random number (1-7) of non-vanilla shop items."; - mOptionDescriptions[RSK_SHOPSANITY_COUNT] = "0 Items - Vanilla shop items will be shuffled among different shops.\n" - "\n" - "1-7 Items - Vanilla shop items will be shuffled among different shops, and " - "each shop will contain 1-7 non-vanilla shop items.\n" - /* - "\n" - "8 Items - All shops will contain 8 non-vanilla shop items.\n" - */; + "Specific Count - Vanilla shop items will be shuffled among different shops, and " + "each shop will contain a specific number (0-7) of non-vanilla shop items.\n" + "\n" + "Random - Vanilla shop items will be shuffled among different shops, and " + "each shop will contain a random number (1-7) of non-vanilla shop items."; + mOptionDescriptions[RSK_SHOPSANITY_COUNT] = + "0 Items - Vanilla shop items will be shuffled among different shops.\n" + "\n" + "1-7 Items - Vanilla shop items will be shuffled among different shops, and " + "each shop will contain 1-7 non-vanilla shop items.\n" + /* + "\n" + "8 Items - All shops will contain 8 non-vanilla shop items.\n" + */ + ; mOptionDescriptions[RSK_SHOPSANITY_PRICES] = "Vanilla - The same price as the item it replaced.\n" "Cheap Balanced - Prices will range between 0 to 95 rupees, favoring lower numbers.\n" "Balanced - Prices will range between 0 to 300 rupees, favoring lower numbers.\n" "Fixed - A fixed number.\n" "Range - A random point between specific ranges.\n" - "Set By Wallet - Set weights that decide the choice of each wallet, and get a random price in that range if that wallet is chosen."; - mOptionDescriptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE] = - "The price for Shopsanity checks."; + "Set By Wallet - Set weights that decide the choice of each wallet, and get a random price in that range if " + "that wallet is chosen."; + mOptionDescriptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE] = "The price for Shopsanity checks."; mOptionDescriptions[RSK_SHOPSANITY_PRICES_RANGE_1] = "The first part of the inclusive range of prices to allow for Shopsanity checks."; mOptionDescriptions[RSK_SHOPSANITY_PRICES_RANGE_2] = "The second part of the inclusive range of prices to allow for Shopsanity checks."; - mOptionDescriptions[RSK_SHOPSANITY_PRICES_NO_WALLET_WEIGHT] = - "The chance for Shopsanity checks to be free."; + mOptionDescriptions[RSK_SHOPSANITY_PRICES_NO_WALLET_WEIGHT] = "The chance for Shopsanity checks to be free."; mOptionDescriptions[RSK_SHOPSANITY_PRICES_CHILD_WALLET_WEIGHT] = "The chance for Shopsanity checks to be purchasable with Child's Wallet (1-99)."; mOptionDescriptions[RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT] = @@ -327,16 +346,24 @@ void Settings::CreateOptionDescriptions() { "After choosing a price, set it to the affordable amount based on the wallet required.\n\n" "Affordable prices per tier: starter = 1, adult = 100, giant = 201, tycoon = 501\n\n" "Use this to enable wallet tier locking, but make shop items not as expensive as they could be."; - mOptionDescriptions[RSK_FISHSANITY] = "Off - Fish will not be shuffled. No changes will be made to fishing behavior.\n\n" - "Shuffle only Hyrule Loach - Allows you to earn an item by catching the Hyrule Loach at the fishing pond and giving it to the owner.\n\n" - "Shuffle Fishing Pond - The fishing pond's fish will be shuffled. Catching a fish in the fishing pond will grant a reward.\n\n" - "Shuffle Overworld Fish - Fish in generic grottos and Zora's Domain will be shuffled. Catching a fish in a bottle will give a reward.\n\n" + mOptionDescriptions[RSK_FISHSANITY] = + "Off - Fish will not be shuffled. No changes will be made to fishing behavior.\n\n" + "Shuffle only Hyrule Loach - Allows you to earn an item by catching the Hyrule Loach at the fishing pond and " + "giving it to the owner.\n\n" + "Shuffle Fishing Pond - The fishing pond's fish will be shuffled. Catching a fish in the fishing pond will " + "grant a reward.\n\n" + "Shuffle Overworld Fish - Fish in generic grottos and Zora's Domain will be shuffled. Catching a fish in a " + "bottle will give a reward.\n\n" "Shuffle Both - Both overworld fish and fish in the fishing pond will be shuffled."; - mOptionDescriptions[RSK_FISHSANITY_POND_COUNT] = "The number of fish to randomize in the fishing pool.\n\n" - "If set to maximum, each fish will have a unique check, including a Hyrule Loach which appears only as child, and " + mOptionDescriptions[RSK_FISHSANITY_POND_COUNT] = + "The number of fish to randomize in the fishing pool.\n\n" + "If set to maximum, each fish will have a unique check, including a Hyrule Loach which appears only as child, " + "and " "uncaught fish will be given a visual indicator to distinguish from already-caught fish.\n\n" "Otherwise, any fish caught in the pond will give a reward, until all rewards have been given."; - mOptionDescriptions[RSK_FISHSANITY_AGE_SPLIT] = "Enabling this will split the fishing pond fish by age, making fishing pond fish grant different rewards as child and adult.\n\n" + mOptionDescriptions[RSK_FISHSANITY_AGE_SPLIT] = + "Enabling this will split the fishing pond fish by age, making fishing pond fish grant different rewards as " + "child and adult.\n\n" "If disabled, then the child pond will be shuffled and shared between both ages.\n\n" "Note that, as child, there is a second loach available in the pond!"; mOptionDescriptions[RSK_SHUFFLE_SCRUBS] = @@ -353,15 +380,14 @@ void Settings::CreateOptionDescriptions() { "Balanced - Prices will range between 0 to 300 rupees, favoring lower numbers.\n" "Fixed - A fixed number.\n" "Range - A random point between specific ranges.\n" - "Set By Wallet - Set weights that decide the choice of each wallet, and get a random price in that range if that wallet is chosen."; - mOptionDescriptions[RSK_SCRUBS_PRICES_FIXED_PRICE] = - "The price for Scrub checks."; + "Set By Wallet - Set weights that decide the choice of each wallet, and get a random price in that range if " + "that wallet is chosen."; + mOptionDescriptions[RSK_SCRUBS_PRICES_FIXED_PRICE] = "The price for Scrub checks."; mOptionDescriptions[RSK_SCRUBS_PRICES_RANGE_1] = "The first part of the inclusive range of prices to allow for Scrub checks."; mOptionDescriptions[RSK_SCRUBS_PRICES_RANGE_2] = "The second part of the inclusive range of prices to allow for Scrub checks."; - mOptionDescriptions[RSK_SCRUBS_PRICES_NO_WALLET_WEIGHT] = - "The chance for Scrub checks to be free."; + mOptionDescriptions[RSK_SCRUBS_PRICES_NO_WALLET_WEIGHT] = "The chance for Scrub checks to be free."; mOptionDescriptions[RSK_SCRUBS_PRICES_CHILD_WALLET_WEIGHT] = "The chance for Scrub checks to be purchasable with Child's Wallet (1-99)."; mOptionDescriptions[RSK_SCRUBS_PRICES_ADULT_WALLET_WEIGHT] = @@ -374,8 +400,7 @@ void Settings::CreateOptionDescriptions() { "After choosing a price, set it to the affordable amount based on the wallet required.\n\n" "Affordable prices per tier: starter = 1, adult = 100, giant = 201, tycoon = 501\n\n" "Use this to enable wallet tier locking, but make scrub items not as expensive as they could be."; - mOptionDescriptions[RSK_SHUFFLE_BEEHIVES] = - "Beehives give a randomized item from the pool when broken."; + mOptionDescriptions[RSK_SHUFFLE_BEEHIVES] = "Beehives give a randomized item from the pool when broken."; mOptionDescriptions[RSK_SHUFFLE_COWS] = "Cows give a randomized item from the pool upon performing Epona's Song in front of them."; mOptionDescriptions[RSK_SHUFFLE_MERCHANTS] = @@ -397,15 +422,14 @@ void Settings::CreateOptionDescriptions() { "Balanced - Prices will range between 0 to 300 rupees, favoring lower numbers.\n" "Fixed - A fixed number.\n" "Range - A random point between specific ranges.\n" - "Set By Wallet - Set weights that decide the choice of each wallet, and get a random price in that range if that wallet is chosen."; - mOptionDescriptions[RSK_MERCHANT_PRICES_FIXED_PRICE] = - "The price for Merchant checks."; + "Set By Wallet - Set weights that decide the choice of each wallet, and get a random price in that range if " + "that wallet is chosen."; + mOptionDescriptions[RSK_MERCHANT_PRICES_FIXED_PRICE] = "The price for Merchant checks."; mOptionDescriptions[RSK_MERCHANT_PRICES_RANGE_1] = "The first part of the inclusive range of prices to allow for Merchant checks."; mOptionDescriptions[RSK_MERCHANT_PRICES_RANGE_2] = "The second part of the inclusive range of prices to allow for Merchant checks."; - mOptionDescriptions[RSK_MERCHANT_PRICES_NO_WALLET_WEIGHT] = - "The chance for Merchant checks to be free."; + mOptionDescriptions[RSK_MERCHANT_PRICES_NO_WALLET_WEIGHT] = "The chance for Merchant checks to be free."; mOptionDescriptions[RSK_MERCHANT_PRICES_CHILD_WALLET_WEIGHT] = "The chance for Merchant checks to be purchasable with Child's Wallet (1-99)."; mOptionDescriptions[RSK_MERCHANT_PRICES_ADULT_WALLET_WEIGHT] = @@ -437,18 +461,29 @@ void Settings::CreateOptionDescriptions() { "have collected all 100 Gold Skulltula Tokens.\n" "\n" "You can still talk to him multiple times to get Huge Rupees."; - mOptionDescriptions[RSK_SHUFFLE_FREESTANDING] = "Freestanding rupees & hearts are shuffles to random items. " - "Freestanding heart pieces and small keys are already shuffled by default.\n" - "\n" - "Off - freestanding rupees & hearts will not be shuffled.\n" - "\n" - "Dungeons - Only freestanding rupees & hearts that are within dungeons.\n" - "\n" - "Overworld - Only freestanding rupees & hearts that are outside of dungeons.\n" - "\n" - "All Items - Shuffle all freestanding rupees & hearts."; - mOptionDescriptions[RSK_SHUFFLE_FAIRIES] = - "Shuffle fairy locations."; + mOptionDescriptions[RSK_SHUFFLE_FREESTANDING] = + "Freestanding rupees & hearts are shuffles to random items. " + "Freestanding heart pieces and small keys are already shuffled by default.\n" + "\n" + "Off - freestanding rupees & hearts will not be shuffled.\n" + "\n" + "Dungeons - Only freestanding rupees & hearts that are within dungeons.\n" + "\n" + "Overworld - Only freestanding rupees & hearts that are outside of dungeons.\n" + "\n" + "All Items - Shuffle all freestanding rupees & hearts."; + mOptionDescriptions[RSK_SHUFFLE_FAIRIES] = "Shuffle fairy locations."; + mOptionDescriptions[RSK_SHUFFLE_GRASS] = + "Grass/Bushes will drop a randomized item the first time they're cut and collected. " + "Grass/Bushes will have a different appearance when they hold a randomized item.\n" + "\n" + "Off - Grass/Bushes will not be shuffled.\n" + "\n" + "Dungeons - Only shuffle grass/bushes that are within dungeons.\n" + "\n" + "Overworld - Only shuffle grass/bushes that are outside of dungeons.\n" + "\n" + "All Grass/Bushes - Shuffle all grass/bushes."; 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" @@ -632,7 +667,8 @@ void Settings::CreateOptionDescriptions() { mOptionDescriptions[RSK_GANONDORF_HINT] = "Talking to Ganondorf in his boss room will tell you the location of the Light Arrows and Master Sword." "If this option is enabled and Ganondorf is reachable without these items, Gossip Stones will never hint the " - "appropriate items.";//RANDOTODO make this hint text about no dupe hints a global hint for static hints. Add to navi? + "appropriate items."; // RANDOTODO make this hint text about no dupe hints a global hint for static hints. Add + // to navi? mOptionDescriptions[RSK_SHEIK_LA_HINT] = "Talking to Sheik inside Ganon's Castle will tell you the location of the Light Arrows." "If this option is enabled and Sheik is reachable without Light Arrows, Gossip Stones will never hint the " @@ -641,29 +677,46 @@ void Settings::CreateOptionDescriptions() { "Reading the diary of Dampé the gravekeeper as adult will tell you the location of one of the Hookshots."; mOptionDescriptions[RSK_GREG_HINT] = "Talking to the chest game owner after buying a key will tell you the location of Greg the Green Rupee."; - mOptionDescriptions[RSK_LOACH_HINT] = - "Talking to the fishing pond owner and asking to talk about something will tell you what's the reward for the Hyrule Loach."; + mOptionDescriptions[RSK_LOACH_HINT] = "Talking to the fishing pond owner and asking to talk about something will " + "tell you what's the reward for the Hyrule Loach."; mOptionDescriptions[RSK_SARIA_HINT] = "Talking to Saria either in person or through Saria's Song will tell you the " "location of a progressive magic meter."; - mOptionDescriptions[RSK_FISHING_POLE_HINT] = "Talking to the fishing pond owner without the fishing pole will tell you its location."; - mOptionDescriptions[RSK_OOT_HINT] = "Sheik in the Temple of Time will tell you the item and song on the Ocarina of Time."; + mOptionDescriptions[RSK_FISHING_POLE_HINT] = + "Talking to the fishing pond owner without the fishing pole will tell you its location."; + mOptionDescriptions[RSK_OOT_HINT] = + "Sheik in the Temple of Time will tell you the item and song on the Ocarina of Time."; mOptionDescriptions[RSK_FROGS_HINT] = "Standing near the pedestal for the frogs in Zora's River will tell you the " "reward for the frogs' Ocarina game."; - mOptionDescriptions[RSK_BIGGORON_HINT] = "Talking to Biggoron will tell you the item he will give you in exchange for the Claim Check."; - mOptionDescriptions[RSK_BIG_POES_HINT] = "Talking to the Poe Collector in the Market Guardhouse while adult will tell you what you receive for handing in Big Poes."; - mOptionDescriptions[RSK_CHICKENS_HINT] = "Talking to Anju as a child will tell you the item she will give you for delivering her cuccos to the pen."; - mOptionDescriptions[RSK_MALON_HINT] = "Talking to Malon as adult will tell you the item on \"Link's cow\", the cow you win from beating her time on the Lon Lon Obstacle Course."; - mOptionDescriptions[RSK_HBA_HINT] = "Talking to the Horseback Archery gerudo in Gerudo Fortress, or the nearby sign, will tell you what you win for scoring 1000 and 1500 points on Horseback Archery."; - mOptionDescriptions[RSK_WARP_SONG_HINTS] = "Playing a warp song will tell you where it leads. (If warp song destinations are vanilla, this is always enabled.)"; + mOptionDescriptions[RSK_BIGGORON_HINT] = + "Talking to Biggoron will tell you the item he will give you in exchange for the Claim Check."; + mOptionDescriptions[RSK_BIG_POES_HINT] = "Talking to the Poe Collector in the Market Guardhouse while adult will " + "tell you what you receive for handing in Big Poes."; + mOptionDescriptions[RSK_CHICKENS_HINT] = + "Talking to Anju as a child will tell you the item she will give you for delivering her cuccos to the pen."; + mOptionDescriptions[RSK_MALON_HINT] = "Talking to Malon as adult will tell you the item on \"Link's cow\", the cow " + "you win from beating her time on the Lon Lon Obstacle Course."; + mOptionDescriptions[RSK_HBA_HINT] = + "Talking to the Horseback Archery gerudo in Gerudo Fortress, or the nearby sign, will tell you what you win " + "for scoring 1000 and 1500 points on Horseback Archery."; + mOptionDescriptions[RSK_WARP_SONG_HINTS] = "Playing a warp song will tell you where it leads. (If warp song " + "destinations are vanilla, this is always enabled.)"; mOptionDescriptions[RSK_SCRUB_TEXT_HINT] = "Business scrubs will reveal the identity of what they're selling."; - mOptionDescriptions[RSK_MERCHANT_TEXT_HINT] = "Merchants will reveal the identity of what they're selling (Shops are not affected by this setting)."; - mOptionDescriptions[RSK_KAK_10_SKULLS_HINT] = "Talking to the Cursed Resident in the Skulltula House who is saved after 10 tokens will tell you the reward."; - mOptionDescriptions[RSK_KAK_20_SKULLS_HINT] = "Talking to the Cursed Resident in the Skulltula House who is saved after 20 tokens will tell you the reward."; - mOptionDescriptions[RSK_KAK_30_SKULLS_HINT] = "Talking to the Cursed Resident in the Skulltula House who is saved after 30 tokens will tell you the reward."; - mOptionDescriptions[RSK_KAK_40_SKULLS_HINT] = "Talking to the Cursed Resident in the Skulltula House who is saved after 40 tokens will tell you the reward."; - mOptionDescriptions[RSK_KAK_50_SKULLS_HINT] = "Talking to the Cursed Resident in the Skulltula House who is saved after 50 tokens will tell you the reward."; - mOptionDescriptions[RSK_KAK_100_SKULLS_HINT] = "Talking to the Cursed Resident in the Skulltula House who is saved after 100 tokens will tell you the reward."; - mOptionDescriptions[RSK_MASK_SHOP_HINT] = "Reading the mask shop sign will tell you rewards from showing masks at the Deku Theatre."; + mOptionDescriptions[RSK_MERCHANT_TEXT_HINT] = + "Merchants will reveal the identity of what they're selling (Shops are not affected by this setting)."; + mOptionDescriptions[RSK_KAK_10_SKULLS_HINT] = + "Talking to the Cursed Resident in the Skulltula House who is saved after 10 tokens will tell you the reward."; + mOptionDescriptions[RSK_KAK_20_SKULLS_HINT] = + "Talking to the Cursed Resident in the Skulltula House who is saved after 20 tokens will tell you the reward."; + mOptionDescriptions[RSK_KAK_30_SKULLS_HINT] = + "Talking to the Cursed Resident in the Skulltula House who is saved after 30 tokens will tell you the reward."; + mOptionDescriptions[RSK_KAK_40_SKULLS_HINT] = + "Talking to the Cursed Resident in the Skulltula House who is saved after 40 tokens will tell you the reward."; + mOptionDescriptions[RSK_KAK_50_SKULLS_HINT] = + "Talking to the Cursed Resident in the Skulltula House who is saved after 50 tokens will tell you the reward."; + mOptionDescriptions[RSK_KAK_100_SKULLS_HINT] = + "Talking to the Cursed Resident in the Skulltula House who is saved after 100 tokens will tell you the reward."; + mOptionDescriptions[RSK_MASK_SHOP_HINT] = + "Reading the mask shop sign will tell you rewards from showing masks at the Deku Theatre."; mOptionDescriptions[RSK_FULL_WALLETS] = "Start with a full wallet. All wallet upgrades come filled with rupees."; mOptionDescriptions[RSK_BOMBCHU_BAG] = "Bombchus require their own bag to be found before use. Without this setting, any Bombchu requirement " @@ -681,7 +734,8 @@ void Settings::CreateOptionDescriptions() { mOptionDescriptions[RSK_BLUE_FIRE_ARROWS] = "Ice Arrows act like Blue Fire, making them able to melt red ice. " "Item placement logic will respect this option, so it might be required to use this to progress."; - mOptionDescriptions[RSK_SKELETON_KEY] = "Adds a new item called the \"Skeleton Key\", it unlocks every dungeon door locked by a small key."; + mOptionDescriptions[RSK_SKELETON_KEY] = + "Adds a new item called the \"Skeleton Key\", it unlocks every dungeon door locked by a small key."; mOptionDescriptions[RSK_SUNLIGHT_ARROWS] = "Light Arrows can be used to light up the sun switches instead of using the Mirror Shield. " "Item placement logic will respect this option, so it might be required to use this to progress."; @@ -699,7 +753,9 @@ void Settings::CreateOptionDescriptions() { "location is reachable. When disabled, only " "required items and locations to beat the game " "will be guaranteed reachable."; - mOptionDescriptions[RSK_SHUFFLE_BOSS_SOULS] = "Shuffles 8 boss souls (one for each blue warp dungeon). A boss will not appear until you collect its respective soul." - "\n\"On + Ganon\" will also hide Ganon and Ganondorf behind a boss soul."; + mOptionDescriptions[RSK_SHUFFLE_BOSS_SOULS] = + "Shuffles 8 boss souls (one for each blue warp dungeon). A boss will not appear until you collect its " + "respective soul." + "\n\"On + Ganon\" will also hide Ganon and Ganondorf behind a boss soul."; } } // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 244afb9c4..d567a3d8e 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -17,7 +17,7 @@ #include #include "../custom-message/CustomMessageTypes.h" #include "../item-tables/ItemTableManager.h" -#include "../presets.h" +#include "../Presets/Presets.h" #include "../../../src/overlays/actors/ovl_En_GirlA/z_en_girla.h" #include #include "randomizer_check_objects.h" @@ -66,68 +66,201 @@ const std::string Randomizer::IceTrapRandoMessageTableID = "RandomizerIceTrap"; const std::string Randomizer::randoMiscHintsTableID = "RandomizerMiscHints"; static const char* englishRupeeNames[175] = { - "[P]", "Bad RNG Rolls", "Bananas", "Beanbean Coins", "Beans", - "Beli", "Bells", "Berries", "Bison Dollars", "Bitcoin", - "Blue Essence", "Bolts", "Bones", "Boondollars", "Bottle Caps", - "Bratwürste", "Bucks", "BugFrags", "Canadian Dollars", "Cards", - "Chaos Orbs", "Clams", "Coal", "Cocoa Beans", "Coins", - "Cookies", "Copper", "Cor", "Cornflakes", "Credits", - "Crimebucks", "Crystal Shards", "Cubits", "Cucumbers", "Dalmations", - "Dampécoin", "Dark Elixir", "Darseks", "Dead Memes", "Diamonds", - "DNA", "Doge", "Dogecoin", "Doll Hairs", "Dollars", - "Dollarydoos", "Dosh", "Doubloons", "Dwarfbucks", "Elexit", - "Emeralds", "Energon", "Eris", "Ether", "Euro", - "Experience", "Extinction Points", "Floopies", "Flurbos", "FPS", - "Friends", "Frog Coins", "Gald", "Gekz", "Gems", - "Geo", "Gil", "Glimmer", "Glitches", "Gold", - "Gold Dragons", "Goober Dollars", "Green Herbs", "Greg Siblings", "Grouses", - "Gummybears", "Hell", "Hyrule Loaches", "Ice Traps", "ISK", - "Jiggies", "KF7 Ammo", "Kinstones", "Kremcoins", "Kroner", - "Leaves", "Lemmings", "Lien", "Lira", "Lumber", - "Lungmen Dollars", "Macca", "Mana", "Mann Co. Keys", "Meat", - "Meat Stacks", "Medaparts", "Meseta", "Mesetas", "Minerals", - "Monopoly Money", "Moons", "Mora", "Mumbo Tokens", "Munny", - "Mushrooms", "Mysteries", "Neopoints", "Notes", "Nuyen", - "Orbs", "Ore", "Pix", "Pixels", "Plastyks", - "Platinum", "Pokédollars", "Pokémon", "Poko", "Pokos", - "Potch", "Pounds", "Power Pellets", "Primogems", "Réals", - "Refined Metal", "Remote Mines", "Retweets", "Rhinu", "Rings", - "Riot Points", "Robux", "Rubies", "Rubles", "Runite Ore", - "Rupees", "Saint Quartz", "Septims", "Shekels", "Shillings", - "Silver", "Simoleons", "Smackaroos", "Social Credit", "Souls", - "Spent Casings", "Spice", "Spondulicks", "Spoons", "Star Bits", - "Star Chips", "Stars", "Stones of Jordan", "Store Credit", "Strawbs", - "Studs", "Super Sea Snails", "Talent", "Teef", "Telecrystals", - "Tiberium", "TokKul", "Toys", "Turnips", "Upvotes", - "V-Bucks", "Vespene Gas", "Watts", "Widgets", "Woolongs", - "World Dollars", "Wumpa Fruit", "Yen", "Zenny", "Zorkmids" + "[P]", + "Bad RNG Rolls", + "Bananas", + "Beanbean Coins", + "Beans", + "Beli", + "Bells", + "Berries", + "Bison Dollars", + "Bitcoin", + "Blue Essence", + "Bolts", + "Bones", + "Boondollars", + "Bottle Caps", + "Bratwürste", + "Bucks", + "BugFrags", + "Canadian Dollars", + "Cards", + "Chaos Orbs", + "Clams", + "Coal", + "Cocoa Beans", + "Coins", + "Cookies", + "Copper", + "Cor", + "Cornflakes", + "Credits", + "Crimebucks", + "Crystal Shards", + "Cubits", + "Cucumbers", + "Dalmations", + "Dampécoin", + "Dark Elixir", + "Darseks", + "Dead Memes", + "Diamonds", + "DNA", + "Doge", + "Dogecoin", + "Doll Hairs", + "Dollars", + "Dollarydoos", + "Dosh", + "Doubloons", + "Dwarfbucks", + "Elexit", + "Emeralds", + "Energon", + "Eris", + "Ether", + "Euro", + "Experience", + "Extinction Points", + "Floopies", + "Flurbos", + "FPS", + "Friends", + "Frog Coins", + "Gald", + "Gekz", + "Gems", + "Geo", + "Gil", + "Glimmer", + "Glitches", + "Gold", + "Gold Dragons", + "Goober Dollars", + "Green Herbs", + "Greg Siblings", + "Grouses", + "Gummybears", + "Hell", + "Hyrule Loaches", + "Ice Traps", + "ISK", + "Jiggies", + "KF7 Ammo", + "Kinstones", + "Kremcoins", + "Kroner", + "Leaves", + "Lemmings", + "Lien", + "Lira", + "Lumber", + "Lungmen Dollars", + "Macca", + "Mana", + "Mann Co. Keys", + "Meat", + "Meat Stacks", + "Medaparts", + "Meseta", + "Mesetas", + "Minerals", + "Monopoly Money", + "Moons", + "Mora", + "Mumbo Tokens", + "Munny", + "Mushrooms", + "Mysteries", + "Neopoints", + "Notes", + "Nuyen", + "Orbs", + "Ore", + "Pix", + "Pixels", + "Plastyks", + "Platinum", + "Pokédollars", + "Pokémon", + "Poko", + "Pokos", + "Potch", + "Pounds", + "Power Pellets", + "Primogems", + "Réals", + "Refined Metal", + "Remote Mines", + "Retweets", + "Rhinu", + "Rings", + "Riot Points", + "Robux", + "Rubies", + "Rubles", + "Runite Ore", + "Rupees", + "Saint Quartz", + "Septims", + "Shekels", + "Shillings", + "Silver", + "Simoleons", + "Smackaroos", + "Social Credit", + "Souls", + "Spent Casings", + "Spice", + "Spondulicks", + "Spoons", + "Star Bits", + "Star Chips", + "Stars", + "Stones of Jordan", + "Store Credit", + "Strawbs", + "Studs", + "Super Sea Snails", + "Talent", + "Teef", + "Telecrystals", + "Tiberium", + "TokKul", + "Toys", + "Turnips", + "Upvotes", + "V-Bucks", + "Vespene Gas", + "Watts", + "Widgets", + "Woolongs", + "World Dollars", + "Wumpa Fruit", + "Yen", + "Zenny", + "Zorkmids", }; static const char* germanRupeeNames[65] = { - "Bananen", "Bitcoin", "Bonbons", "Bratwürste", "Brause UFOs", - "Brötchen", "Cent", "Diamanten", "Diridari", "Dogecoin", - "ECU", "Elexit", "Erz", "Erzbrocken", "Euro", - "EXP", "Forint", "Franken", "Freunde", "Gil", - "Gold", "Groschen", "Gulden", "Gummibären", "Heller", - "Juwelen", "Karolin", "Kartoffeln", "Kies", "Knete", - "Knochen", "Kohle", "Kraniche", "Kreuzer", "Kronen", - "Kronkorken", "Kröten", "Mark", "Mäuse", "Monde", - "Moorhühner", "Moos", "Münzen", "Penunze", "Pesa", - "Pfandflaschen", "Pfennig", "Pfund", "Pilze", "Plastiks", - "Pokédollar", "Radieschen", "Rappen", "Rubine", "Saphire", - "Schilling", "Seelen", "Smaragde", "Steine", "Sterne", - "Sternis", "Tael", "Taler", "Wagenchips", "Zenny" + "Bananen", "Bitcoin", "Bonbons", "Bratwürste", "Brause UFOs", "Brötchen", "Cent", "Diamanten", + "Diridari", "Dogecoin", "ECU", "Elexit", "Erz", "Erzbrocken", "Euro", "EXP", + "Forint", "Franken", "Freunde", "Gil", "Gold", "Groschen", "Gulden", "Gummibären", + "Heller", "Juwelen", "Karolin", "Kartoffeln", "Kies", "Knete", "Knochen", "Kohle", + "Kraniche", "Kreuzer", "Kronen", "Kronkorken", "Kröten", "Mark", "Mäuse", "Monde", + "Moorhühner", "Moos", "Münzen", "Penunze", "Pesa", "Pfandflaschen", "Pfennig", "Pfund", + "Pilze", "Plastiks", "Pokédollar", "Radieschen", "Rappen", "Rubine", "Saphire", "Schilling", + "Seelen", "Smaragde", "Steine", "Sterne", "Sternis", "Tael", "Taler", "Wagenchips", + "Zenny" }; static const char* frenchRupeeNames[40] = { - "Anneaux", "Baguettes", "Balles", "Bananes", "Bitcoin", - "Blés", "Bling", "Capsules", "Centimes", "Champignons", - "Clochettes", "Crédits", "Croissants", "Diamants", "Dogecoin", - "Dollars", "Émeraudes", "Éthers", "Étoiles", "Euros", - "Florens", "Francs", "Galds", "Gils", "Grouses", - "Halos", "Joyaux", "Lunes", "Mailles", "Munnies", - "Orbes", "Orens", "Pépètes", "Pièces", "Plastyks", - "Pokédollars", "Pokémon", "Radis", "Rubis", "Zennies" + "Anneaux", "Baguettes", "Balles", "Bananes", "Bitcoin", "Blés", "Bling", "Capsules", + "Centimes", "Champignons", "Clochettes", "Crédits", "Croissants", "Diamants", "Dogecoin", "Dollars", + "Émeraudes", "Éthers", "Étoiles", "Euros", "Florens", "Francs", "Galds", "Gils", + "Grouses", "Halos", "Joyaux", "Lunes", "Mailles", "Munnies", "Orbes", "Orens", + "Pépètes", "Pièces", "Plastyks", "Pokédollars", "Pokémon", "Radis", "Rubis", "Zennies" }; Randomizer::Randomizer() { @@ -166,7 +299,7 @@ std::unordered_map spoilerFileDungeonToScene = { { "Ganon's Castle", SCENE_INSIDE_GANONS_CASTLE } }; -std::unordered_map getItemIdToItemId = { +std::unordered_map getItemIdToItemId = { { GI_BOW, ITEM_BOW }, { GI_ARROW_FIRE, ITEM_ARROW_FIRE }, { GI_DINS_FIRE, ITEM_DINS_FIRE }, @@ -205,12 +338,12 @@ std::unordered_map getItemIdToItemId = { { GI_PRESCRIPTION, ITEM_PRESCRIPTION }, { GI_FROG, ITEM_FROG }, { GI_EYEDROPS, ITEM_EYEDROPS }, - { GI_CLAIM_CHECK, ITEM_CLAIM_CHECK } + { GI_CLAIM_CHECK, ITEM_CLAIM_CHECK }, }; #pragma optimize("", off) #pragma GCC push_options -#pragma GCC optimize ("O0") +#pragma GCC optimize("O0") bool Randomizer::SpoilerFileExists(const char* spoilerFileName) { if (strcmp(spoilerFileName, "") != 0) { std::ifstream spoilerFileStream(SohUtils::Sanitize(spoilerFileName)); @@ -232,65 +365,69 @@ void Randomizer::LoadHintMessages() { CustomMessageManager::Instance->ClearMessageTable(Randomizer::hintMessageTableID); CustomMessageManager::Instance->AddCustomMessageTable(Randomizer::hintMessageTableID); - //Extra Hints + // Extra Hints CustomMessageManager::Instance->ClearMessageTable(Randomizer::randoMiscHintsTableID); CustomMessageManager::Instance->AddCustomMessageTable(Randomizer::randoMiscHintsTableID); - // Bow Shooting Gallery reminder - CustomMessageManager::Instance->CreateMessage(Randomizer::hintMessageTableID, TEXT_SHOOTING_GALLERY_MAN_COME_BACK_WITH_BOW, + CustomMessageManager::Instance->CreateMessage( + Randomizer::hintMessageTableID, TEXT_SHOOTING_GALLERY_MAN_COME_BACK_WITH_BOW, CustomMessage("Come back when you have your own bow and you'll get a #different prize#!", - "Komm wieder sobald Du Deinen eigenen Bogen hast, um einen #speziellen Preis# zu erhalten!", - "J'aurai #une autre récompense# pour toi lorsque tu auras ton propre arc.", - {QM_RED})); + "Komm wieder sobald Du Deinen eigenen Bogen hast, um einen #speziellen Preis# zu erhalten!", + "J'aurai #une autre récompense# pour toi lorsque tu auras ton propre arc.", { QM_RED })); // Warp Song Mysterious text - CustomMessageManager::Instance->CreateMessage(Randomizer::hintMessageTableID, TEXT_WARP_MINUET_OF_FOREST, + CustomMessageManager::Instance->CreateMessage( + Randomizer::hintMessageTableID, TEXT_WARP_MINUET_OF_FOREST, CustomMessage("Warp to&#a mysterious place?#&" + CustomMessages::TWO_WAY_CHOICE() + "#OK&No#", - "Zu&#einem mysteriösen Ort#?&" + CustomMessages::TWO_WAY_CHOICE() + "#OK&No#", - "Se téléporter vers&#un endroit mystérieux#?&" + CustomMessages::TWO_WAY_CHOICE() + "#OK!&Non#", - {QM_RED, QM_GREEN})); + "Zu&#einem mysteriösen Ort#?&" + CustomMessages::TWO_WAY_CHOICE() + "#OK&No#", + "Se téléporter vers&#un endroit mystérieux#?&" + CustomMessages::TWO_WAY_CHOICE() + "#OK!&Non#", + { QM_RED, QM_GREEN })); // Lake Hylia water level system - CustomMessageManager::Instance->CreateMessage(Randomizer::hintMessageTableID, TEXT_LAKE_HYLIA_WATER_SWITCH_SIGN, - CustomMessage("Water level control system.&Keep away!", - "Wasserstand Kontrollsystem&Finger weg!", - "Système de contrôle du niveau&d'eau.&Ne pas toucher!")); - CustomMessageManager::Instance->CreateMessage(Randomizer::hintMessageTableID, TEXT_LAKE_HYLIA_WATER_SWITCH_NAVI, - CustomMessage("%cThis switch is rustier than you think.^%cSomething must be wrong with the pipe system in the %bWater Temple%c.", - "%cDieser Schalter scheint rostiger zu sein als er aussieht.^%cEtwas muss mit dem Leitungssystem im %bWassertempel%c nicht stimmen.", - "%cCet interrupteur est très rouillé.^%cIl doit y avoir un problème avec la tuyauterie du %bTemple de l'Eau%c.")); + CustomMessageManager::Instance->CreateMessage( + Randomizer::hintMessageTableID, TEXT_LAKE_HYLIA_WATER_SWITCH_SIGN, + CustomMessage("Water level control system.&Keep away!", "Wasserstand Kontrollsystem&Finger weg!", + "Système de contrôle du niveau&d'eau.&Ne pas toucher!")); + CustomMessageManager::Instance->CreateMessage( + Randomizer::hintMessageTableID, TEXT_LAKE_HYLIA_WATER_SWITCH_NAVI, + CustomMessage("%cThis switch is rustier than you think.^%cSomething must be wrong with the pipe system in the " + "%bWater Temple%c.", + "%cDieser Schalter scheint rostiger zu sein als er aussieht.^%cEtwas muss mit dem Leitungssystem " + "im %bWassertempel%c nicht stimmen.", + "%cCet interrupteur est très rouillé.^%cIl doit y avoir un problème avec la tuyauterie du " + "%bTemple de l'Eau%c.")); } // Reference soh/src/overlays/actors/ovl_En_GirlA/z_en_girla.h std::unordered_map randomizerGetToEnGirlShopItem = { - { RG_BUY_DEKU_NUTS_5, SI_DEKU_NUTS_5 }, - { RG_BUY_ARROWS_30, SI_ARROWS_30 }, - { RG_BUY_ARROWS_50, SI_ARROWS_50 }, - { RG_BUY_BOMBS_525, SI_BOMBS_5_R25 }, - { RG_BUY_DEKU_NUTS_10, SI_DEKU_NUTS_10 }, - { RG_BUY_DEKU_STICK_1, SI_DEKU_STICK }, - { RG_BUY_BOMBS_10, SI_BOMBS_10 }, - { RG_BUY_FISH, SI_FISH }, + { RG_BUY_DEKU_NUTS_5, SI_DEKU_NUTS_5 }, + { RG_BUY_ARROWS_30, SI_ARROWS_30 }, + { RG_BUY_ARROWS_50, SI_ARROWS_50 }, + { RG_BUY_BOMBS_525, SI_BOMBS_5_R25 }, + { RG_BUY_DEKU_NUTS_10, SI_DEKU_NUTS_10 }, + { RG_BUY_DEKU_STICK_1, SI_DEKU_STICK }, + { RG_BUY_BOMBS_10, SI_BOMBS_10 }, + { RG_BUY_FISH, SI_FISH }, { RG_BUY_RED_POTION_30, SI_RED_POTION_R30 }, - { RG_BUY_GREEN_POTION, SI_GREEN_POTION }, - { RG_BUY_BLUE_POTION, SI_BLUE_POTION }, + { RG_BUY_GREEN_POTION, SI_GREEN_POTION }, + { RG_BUY_BLUE_POTION, SI_BLUE_POTION }, { RG_BUY_HYLIAN_SHIELD, SI_HYLIAN_SHIELD }, - { RG_BUY_DEKU_SHIELD, SI_DEKU_SHIELD }, - { RG_BUY_GORON_TUNIC, SI_GORON_TUNIC }, - { RG_BUY_ZORA_TUNIC, SI_ZORA_TUNIC }, - { RG_BUY_HEART, SI_RECOVERY_HEART }, - { RG_BUY_BOMBCHUS_10, SI_BOMBCHU_10_1 }, - { RG_BUY_BOMBCHUS_20, SI_BOMBCHU_20_1 }, + { RG_BUY_DEKU_SHIELD, SI_DEKU_SHIELD }, + { RG_BUY_GORON_TUNIC, SI_GORON_TUNIC }, + { RG_BUY_ZORA_TUNIC, SI_ZORA_TUNIC }, + { RG_BUY_HEART, SI_RECOVERY_HEART }, + { RG_BUY_BOMBCHUS_10, SI_BOMBCHU_10_1 }, + { RG_BUY_BOMBCHUS_20, SI_BOMBCHU_20_1 }, { RG_BUY_DEKU_SEEDS_30, SI_DEKU_SEEDS_30 }, - { RG_BUY_BLUE_FIRE, SI_BLUE_FIRE }, - { RG_BUY_BOTTLE_BUG, SI_BUGS }, - { RG_BUY_POE, SI_POE }, + { RG_BUY_BLUE_FIRE, SI_BLUE_FIRE }, + { RG_BUY_BOTTLE_BUG, SI_BUGS }, + { RG_BUY_POE, SI_POE }, { RG_BUY_FAIRYS_SPIRIT, SI_FAIRY }, - { RG_BUY_ARROWS_10, SI_ARROWS_10 }, - { RG_BUY_BOMBS_20, SI_BOMBS_20 }, - { RG_BUY_BOMBS_30, SI_BOMBS_30 }, - { RG_BUY_BOMBS_535, SI_BOMBS_5_R35 }, + { RG_BUY_ARROWS_10, SI_ARROWS_10 }, + { RG_BUY_BOMBS_20, SI_BOMBS_20 }, + { RG_BUY_BOMBS_30, SI_BOMBS_30 }, + { RG_BUY_BOMBS_535, SI_BOMBS_5_R35 }, { RG_BUY_RED_POTION_40, SI_RED_POTION_R40 }, { RG_BUY_RED_POTION_50, SI_RED_POTION_R50 }, }; @@ -300,112 +437,137 @@ void Randomizer::LoadMerchantMessages() { CustomMessageManager::Instance->ClearMessageTable(Randomizer::merchantMessageTableID); CustomMessageManager::Instance->AddCustomMessageTable(Randomizer::merchantMessageTableID); - // Prices have a chance of being 0, and the "sell" message below doesn't really make sense for a free item, so adding a "free" variation here - CustomMessageManager::Instance->CreateMessage(Randomizer::merchantMessageTableID, TEXT_SCRUB_RANDOM_FREE, - CustomMessage("\x12\x38\x82" "All right! You win! In return for sparing me, I will give you a #[[1]]#!&Please, take it!\x07\x10\xA3", - "\x12\x38\x82" "In Ordnung! Du gewinnst! Im Austausch dafür, dass Du mich verschont hast, werde ich Dir einen #[[1]]# geben!\x07\x10\xA3", - "\x12\x38\x82" "J'me rends! Laisse-moi partir et en échange, je te donne un #[[1]]#! Vas-y prends le!\x07\x10\xA3", - {QM_GREEN})); - CustomMessageManager::Instance->CreateMessage(Randomizer::merchantMessageTableID, TEXT_SCRUB_RANDOM, - CustomMessage("\x12\x38\x82" "All right! You win! In return for sparing me, I will sell you a #[[1]]#! #[[2]] Rupees# it is!\x07\x10\xA3", - "\x12\x38\x82" "Ich gebe auf! Ich verkaufe Dir einen #[[1]]# für #[[2]] Rubine#!\x07\x10\xA3", - "\x12\x38\x82" "J'abandonne! Tu veux bien m'acheter un #[[1]]#? Ça fera #[[2]] Rubis#!\x07\x10\xA3", - {QM_GREEN, QM_YELLOW})); + // Prices have a chance of being 0, and the "sell" message below doesn't really make sense for a free item, so + // adding a "free" variation here + CustomMessageManager::Instance->CreateMessage( + Randomizer::merchantMessageTableID, TEXT_SCRUB_RANDOM_FREE, + CustomMessage( + "\x12\x38\x82" + "All right! You win! In return for sparing me, I will give you a #[[1]]#!&Please, take it!\x07\x10\xA3", + "\x12\x38\x82" + "In Ordnung! Du gewinnst! Im Austausch dafür, dass Du mich verschont hast, werde ich Dir einen #[[1]]# " + "geben!\x07\x10\xA3", + "\x12\x38\x82" + "J'me rends! Laisse-moi partir et en échange, je te donne un #[[1]]#! Vas-y prends le!\x07\x10\xA3", + { QM_GREEN })); + CustomMessageManager::Instance->CreateMessage( + Randomizer::merchantMessageTableID, TEXT_SCRUB_RANDOM, + CustomMessage("\x12\x38\x82" + "All right! You win! In return for sparing me, I will sell you a #[[1]]#! #[[2]] Rupees# it " + "is!\x07\x10\xA3", + "\x12\x38\x82" + "Ich gebe auf! Ich verkaufe Dir einen #[[1]]# für #[[2]] Rubine#!\x07\x10\xA3", + "\x12\x38\x82" + "J'abandonne! Tu veux bien m'acheter un #[[1]]#? Ça fera #[[2]] Rubis#!\x07\x10\xA3", + { QM_GREEN, QM_YELLOW })); - //Carpet Salesman + // Carpet Salesman CustomMessageManager::Instance->CreateMessage( Randomizer::merchantMessageTableID, TEXT_CARPET_SALESMAN_ARMS_DEALER, CustomMessage("Finally! Now I can go back to being an #arms dealer#!", - /*german*/"Endlich! Schon bald kann ich wieder #Krabbelminen-Händler# sein!", - /*french*/"Squalala! Je vais enfin pouvoir #prendre des vacances#!", - {QM_RED})); + /*german*/ "Endlich! Schon bald kann ich wieder #Krabbelminen-Händler# sein!", + /*french*/ "Squalala! Je vais enfin pouvoir #prendre des vacances#!", { QM_RED })); // Each shop item has two messages, one for when the cursor is over it, and one for when you select it and are // prompted buy/don't buy CustomMessageManager::Instance->CreateMessage( Randomizer::merchantMessageTableID, TEXT_SHOP_ITEM_RANDOM, - CustomMessage("\x08#[[1]]# #[[2]]_Rupees#&Special deal! #ONE LEFT#!&Get it while it lasts!\x0A\x02", + CustomMessage( + "\x08#[[1]]# #[[2]]_Rupees#&Special deal! #ONE LEFT#!&Get it while it lasts!\x0A\x02", "\x08#[[1]]# #[[2]]_Rubine#&Sonderangebot! #NUR NOCH EINES VERFÜGBAR#!&Beeilen Sie sich!\x0A\x02", "\x08#[[1]]# #[[2]]_Rubis#&Offre spéciale! #DERNIER EN STOCK#!&Faites vite!\x0A\x02", - {QM_GREEN, QM_YELLOW, QM_RED})); + { QM_GREEN, QM_YELLOW, QM_RED })); CustomMessageManager::Instance->CreateMessage( Randomizer::merchantMessageTableID, TEXT_SHOP_ITEM_RANDOM_CONFIRM, CustomMessage("\x08#[[1]]# #[[2]]_Rupees#\x09\x1B#Buy&Don't buy#\x09\x02", - "\x08#[[1]]# #[[2]]_Rubine#\x09\x1B#Kaufen&Nicht kaufen#\x09\x02", - "\x08#[[1]]# #[[2]]_Rubis#\x09\x1B#Acheter&Ne pas acheter#\x09\x02", - {QM_GREEN, QM_YELLOW, QM_GREEN})); - + "\x08#[[1]]# #[[2]]_Rubine#\x09\x1B#Kaufen&Nicht kaufen#\x09\x02", + "\x08#[[1]]# #[[2]]_Rubis#\x09\x1B#Acheter&Ne pas acheter#\x09\x02", + { QM_GREEN, QM_YELLOW, QM_GREEN })); + CustomMessageManager::Instance->CreateMessage( Randomizer::merchantMessageTableID, TEXT_BEAN_SALESMAN_BUY_FOR_10, - CustomMessage("I tried to be a #magic bean# salesman, but it turns out my marketing skills weren't worth " - "beans!^Anyway, want to buy #[[1]]# for #[[2]] Rupees#?\x1B#Yes&No#", - /*german*/ "Möchten Sie #[[1]]# für #[[2]] Rubine# kaufen?\x1B#Ja&Nein#", - /*french*/ "J'ai essayé d'être un vendeur de #haricots magiques#, mais j'étais mauvais au niveau du marketing et ça " - "me courait sur le haricot...^Enfin bref, ça te dirait de m'acheter #[[1]]# pour #[[2]] Rubis#?\x1B#Oui&Non#", - {QM_RED, QM_GREEN, QM_YELLOW, QM_GREEN})); + CustomMessage( + "I tried to be a #magic bean# salesman, but it turns out my marketing skills weren't worth " + "beans!^Anyway, want to buy #[[1]]# for #[[2]] Rupees#?\x1B#Yes&No#", + /*german*/ "Möchten Sie #[[1]]# für #[[2]] Rubine# kaufen?\x1B#Ja&Nein#", + /*french*/ + "J'ai essayé d'être un vendeur de #haricots magiques#, mais j'étais mauvais au niveau du marketing et ça " + "me courait sur le haricot...^Enfin bref, ça te dirait de m'acheter #[[1]]# pour #[[2]] " + "Rubis#?\x1B#Oui&Non#", + { QM_RED, QM_GREEN, QM_YELLOW, QM_GREEN })); CustomMessageManager::Instance->CreateMessage( Randomizer::merchantMessageTableID, TEXT_BEAN_SALESMAN_BUY_FOR_100, - CustomMessage("I never thought I'd say this, but I'm selling the last #Magic Bean#.^#99 Rupees#, no less.\x1B#Yes&No#", - "Ich hätte nie gedacht, daß ich das sage, aber ich verkaufe die letzte^#Wundererbse# für #99 Rubine#.\x1B&#Ja&Nein#", - "Je te vends mon dernier #Haricot&magique# pour #99 Rubis#.\x1B&#AcheterNe pas acheter#", - {QM_RED, QM_YELLOW, QM_GREEN})); + CustomMessage( + "I never thought I'd say this, but I'm selling the last #Magic Bean#.^#99 Rupees#, no less.\x1B#Yes&No#", + "Ich hätte nie gedacht, daß ich das sage, aber ich verkaufe die letzte^#Wundererbse# für #99 " + "Rubine#.\x1B&#Ja&Nein#", + "Je te vends mon dernier #Haricot&magique# pour #99 Rubis#.\x1B&#AcheterNe pas acheter#", + { QM_RED, QM_YELLOW, QM_GREEN })); CustomMessageManager::Instance->CreateMessage( Randomizer::merchantMessageTableID, TEXT_MEDIGORON, CustomMessage("How about buying #[[1]]# for #[[2]] Rupees#?\x1B#Buy&Don't buy#", - /*german*/ "Möchtest Du #[[1]]# für #[[2]] Rubine# kaufen?\x1B#Klar!&Nie im Leben!#", - /*french*/ "Veux-tu acheter #[[1]]# pour #[[2]] rubis#?\x1B#Acheter&Ne pas acheter#", - {QM_GREEN, QM_YELLOW, QM_GREEN})); - /*spanish*/ // ¿Me compras #[[1]]# por #[[2]] rupias#?\x1B#Comprar&No comprar# + /*german*/ "Möchtest Du #[[1]]# für #[[2]] Rubine# kaufen?\x1B#Klar!&Nie im Leben!#", + /*french*/ "Veux-tu acheter #[[1]]# pour #[[2]] rubis#?\x1B#Acheter&Ne pas acheter#", + { QM_GREEN, QM_YELLOW, QM_GREEN })); + /*spanish*/ // ¿Me compras #[[1]]# por #[[2]] rupias#?\x1B#Comprar&No comprar# + + CustomMessage firstCarpet = CustomMessage( + "Welcome!^I am selling stuff, strange and rare, from all over the world to everybody. Today's special is...^", + /*german*/ + "Sei gegrüßt!^Ich verkaufe allerlei Kuriositäten. Stets sonderliche und seltene Ware aus " + "aller Welt für jedermann. Das heutige Angebot bleibt...^", + /*french*/ "Bienvenue!^Je vends des objets rares et merveilleux du monde entier. En spécial aujourd'hui...^"); + /*spanish*/ // ¡Acércate!^Vendo productos extraños y difíciles de encontrar... De todo el mundo a todo el mundo. La + // oferta de hoy es...^#¡ - CustomMessage firstCarpet = CustomMessage("Welcome!^I am selling stuff, strange and rare, from all over the world to everybody. Today's special is...^", - /*german*/ "Sei gegrüßt!^Ich verkaufe allerlei Kuriositäten. Stets sonderliche und seltene Ware aus " - "aller Welt für jedermann. Das heutige Angebot bleibt...^", - /*french*/ "Bienvenue!^Je vends des objets rares et merveilleux du monde entier. En spécial aujourd'hui...^"); - /*spanish*/ // ¡Acércate!^Vendo productos extraños y difíciles de encontrar... De todo el mundo a todo el mundo. La oferta de hoy es...^#¡ - CustomMessageManager::Instance->CreateMessage( Randomizer::merchantMessageTableID, TEXT_CARPET_SALESMAN_MYSTERIOUS, firstCarpet + - CustomMessage("Terrifying! I won't tell you what it is until I see the #money#...^How about #[[2]] Rupees#?&&" - "\x1B#Buy&Don't buy#", - /*german*/ "Furchterregend, oder? Ich erzähle Euch mehr, wenn ich #Geld# sehe...^Wie wär's mit #[[2]] Rubinen#?&&" - "\x1B#Aber sicher!&Ich bin weg!#", - /*french*/ "Terrible! Mais montre tes #rubis# avant que je te dise ce que c'est...^Disons #[[2]] " - "rubis#?&&\x1B#Acheter&Ne pas acheter#", - {QM_RED, QM_YELLOW, QM_GREEN})); - /*spanish*/ // ¡Terrorífico! No te revelaré su nombre hasta que vea el #dinero#...^#[[2]] rupias#, ¿qué te parece?&&" - // "\x1B#Comprar&No comprar# + CustomMessage( + "Terrifying! I won't tell you what it is until I see the #money#...^How about #[[2]] Rupees#?&&" + "\x1B#Buy&Don't buy#", + /*german*/ + "Furchterregend, oder? Ich erzähle Euch mehr, wenn ich #Geld# sehe...^Wie wär's mit #[[2]] Rubinen#?&&" + "\x1B#Aber sicher!&Ich bin weg!#", + /*french*/ + "Terrible! Mais montre tes #rubis# avant que je te dise ce que c'est...^Disons #[[2]] " + "rubis#?&&\x1B#Acheter&Ne pas acheter#", + { QM_RED, QM_YELLOW, QM_GREEN })); + /*spanish*/ // ¡Terrorífico! No te revelaré su nombre hasta que vea el #dinero#...^#[[2]] rupias#, ¿qué te + // parece?&&" + // "\x1B#Comprar&No comprar# CustomMessageManager::Instance->CreateMessage( Randomizer::merchantMessageTableID, TEXT_CARPET_SALESMAN_1, firstCarpet + - CustomMessage("#[[1]]!# It's real, I promise! A lonely man such as myself wouldn't #lie# to you, hmm?^" - "How about #[[2]] Rupees#?\x1B#Buy&Don't buy#", - /*german*/ "#[[1]]#! Ich kann versichern, es ist ein aufrichtiges Angebot!^Ein einsamer Mann wie ich würde Dich doch " - "nicht #anlügen#, oder?^Wie wär's mit #[[2]] Rubinen#?\x1B#Aber sicher!&Ich bin weg!#", - /*french*/ "#[[1]]!# C'est vrai! J'te jure! Un gars comme moi ne te #mentirai# pas tu ne crois pas?^Disons #[[2]] " - "rubis#?\x1B#Acheter&Ne pas acheter#", - {QM_GREEN, QM_RED, QM_YELLOW})); + CustomMessage( + "#[[1]]!# It's real, I promise! A lonely man such as myself wouldn't #lie# to you, hmm?^" + "How about #[[2]] Rupees#?\x1B#Buy&Don't buy#", + /*german*/ + "#[[1]]#! Ich kann versichern, es ist ein aufrichtiges Angebot!^Ein einsamer Mann wie ich würde Dich " + "doch " + "nicht #anlügen#, oder?^Wie wär's mit #[[2]] Rubinen#?\x1B#Aber sicher!&Ich bin weg!#", + /*french*/ + "#[[1]]!# C'est vrai! J'te jure! Un gars comme moi ne te #mentirai# pas tu ne crois pas?^Disons #[[2]] " + "rubis#?\x1B#Acheter&Ne pas acheter#", + { QM_GREEN, QM_RED, QM_YELLOW })); CustomMessageManager::Instance->CreateMessage( Randomizer::merchantMessageTableID, TEXT_GRANNYS_SHOP, CustomMessage("#[[1]]#! How about #[[2]] Rupees#?\x1B#Buy&Don't buy#", - /*german*/ "#[[1]]#! Sagen wir #[[2]] Rubine#?\x1B#Gerne!&Auf keinen Fall!#", - /*french*/ "#[[1]]#! Que dis-tu de #[[2]] rubis#?\x1B#Acheter&Ne pas acheter#", - {QM_GREEN, QM_YELLOW, QM_GREEN}, {true})); - // /*spanish*/#[[1]]#. Vendo por #[[2]] rupias#.&\x1B#Comprar&No comprar# + /*german*/ "#[[1]]#! Sagen wir #[[2]] Rubine#?\x1B#Gerne!&Auf keinen Fall!#", + /*french*/ "#[[1]]#! Que dis-tu de #[[2]] rubis#?\x1B#Acheter&Ne pas acheter#", + { QM_GREEN, QM_YELLOW, QM_GREEN }, { true })); + // /*spanish*/#[[1]]#. Vendo por #[[2]] rupias#.&\x1B#Comprar&No comprar# } std::map trialFlagToTrialKey = { - { EVENTCHKINF_COMPLETED_LIGHT_TRIAL, TK_LIGHT_TRIAL, }, - { EVENTCHKINF_COMPLETED_FOREST_TRIAL, TK_FOREST_TRIAL, }, - { EVENTCHKINF_COMPLETED_FIRE_TRIAL, TK_FIRE_TRIAL, }, - { EVENTCHKINF_COMPLETED_WATER_TRIAL, TK_WATER_TRIAL, }, - { EVENTCHKINF_COMPLETED_SPIRIT_TRIAL, TK_SPIRIT_TRIAL, }, - { EVENTCHKINF_COMPLETED_SHADOW_TRIAL, TK_SHADOW_TRIAL, } + { EVENTCHKINF_COMPLETED_LIGHT_TRIAL, TK_LIGHT_TRIAL }, { EVENTCHKINF_COMPLETED_FOREST_TRIAL, TK_FOREST_TRIAL }, + { EVENTCHKINF_COMPLETED_FIRE_TRIAL, TK_FIRE_TRIAL }, { EVENTCHKINF_COMPLETED_WATER_TRIAL, TK_WATER_TRIAL }, + { EVENTCHKINF_COMPLETED_SPIRIT_TRIAL, TK_SPIRIT_TRIAL }, { EVENTCHKINF_COMPLETED_SHADOW_TRIAL, TK_SHADOW_TRIAL }, }; bool Randomizer::IsTrialRequired(s32 trialFlag) { @@ -455,9 +617,11 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe return !CHECK_OWNED_EQUIP(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_DEKU) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; case RG_HYLIAN_SHIELD: case RG_BUY_HYLIAN_SHIELD: - return !CHECK_OWNED_EQUIP(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_HYLIAN) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return !CHECK_OWNED_EQUIP(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_HYLIAN) ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_MIRROR_SHIELD: - return !CHECK_OWNED_EQUIP(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_MIRROR) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return !CHECK_OWNED_EQUIP(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_MIRROR) ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_GORON_TUNIC: case RG_BUY_GORON_TUNIC: return !CHECK_OWNED_EQUIP(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_GORON) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; @@ -471,27 +635,34 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe // Inventory Items case RG_PROGRESSIVE_STICK_UPGRADE: - return infiniteUpgrades != RO_INF_UPGRADES_OFF ? - (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_STICK_UPGRADE) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) : - (CUR_UPG_VALUE(UPG_STICKS) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); + return infiniteUpgrades != RO_INF_UPGRADES_OFF + ? (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_STICK_UPGRADE) ? CANT_OBTAIN_ALREADY_HAVE + : CAN_OBTAIN) + : (CUR_UPG_VALUE(UPG_STICKS) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); case RG_DEKU_STICK_1: case RG_BUY_DEKU_STICK_1: - return CUR_UPG_VALUE(UPG_STICKS) || !OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG).Get() - ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE; + return CUR_UPG_VALUE(UPG_STICKS) || + !OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG).Get() + ? CAN_OBTAIN + : CANT_OBTAIN_NEED_UPGRADE; case RG_PROGRESSIVE_NUT_UPGRADE: - return infiniteUpgrades != RO_INF_UPGRADES_OFF ? - (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) : - (CUR_UPG_VALUE(UPG_NUTS) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); + return infiniteUpgrades != RO_INF_UPGRADES_OFF + ? (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE) ? CANT_OBTAIN_ALREADY_HAVE + : CAN_OBTAIN) + : (CUR_UPG_VALUE(UPG_NUTS) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); case RG_DEKU_NUTS_5: case RG_DEKU_NUTS_10: case RG_BUY_DEKU_NUTS_5: case RG_BUY_DEKU_NUTS_10: - return CUR_UPG_VALUE(UPG_NUTS) || !OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG).Get() - ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE; + return CUR_UPG_VALUE(UPG_NUTS) || + !OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG).Get() + ? CAN_OBTAIN + : CANT_OBTAIN_NEED_UPGRADE; case RG_PROGRESSIVE_BOMB_BAG: - return infiniteUpgrades != RO_INF_UPGRADES_OFF ? - (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BOMB_BAG) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) : - (CUR_UPG_VALUE(UPG_BOMB_BAG) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); + return infiniteUpgrades != RO_INF_UPGRADES_OFF + ? (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BOMB_BAG) ? CANT_OBTAIN_ALREADY_HAVE + : CAN_OBTAIN) + : (CUR_UPG_VALUE(UPG_BOMB_BAG) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); case RG_BOMBS_5: case RG_BOMBS_10: case RG_BOMBS_20: @@ -502,9 +673,9 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe case RG_BUY_BOMBS_30: return CUR_UPG_VALUE(UPG_BOMB_BAG) ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE; case RG_PROGRESSIVE_BOW: - return infiniteUpgrades != RO_INF_UPGRADES_OFF ? - (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_QUIVER) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) : - (CUR_UPG_VALUE(UPG_QUIVER) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); + return infiniteUpgrades != RO_INF_UPGRADES_OFF + ? (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_QUIVER) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) + : (CUR_UPG_VALUE(UPG_QUIVER) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); case RG_ARROWS_5: case RG_ARROWS_10: case RG_ARROWS_30: @@ -513,9 +684,10 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe case RG_BUY_ARROWS_50: return CUR_UPG_VALUE(UPG_QUIVER) ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE; case RG_PROGRESSIVE_SLINGSHOT: - return infiniteUpgrades != RO_INF_UPGRADES_OFF ? - (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BULLET_BAG) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) : - (CUR_UPG_VALUE(UPG_BULLET_BAG) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); + return infiniteUpgrades != RO_INF_UPGRADES_OFF + ? (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BULLET_BAG) ? CANT_OBTAIN_ALREADY_HAVE + : CAN_OBTAIN) + : (CUR_UPG_VALUE(UPG_BULLET_BAG) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); case RG_DEKU_SEEDS_30: case RG_BUY_DEKU_SEEDS_30: return CUR_UPG_VALUE(UPG_BULLET_BAG) ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE; @@ -533,7 +705,8 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe case RG_BOMBCHU_20: case RG_BUY_BOMBCHUS_10: case RG_BUY_BOMBCHUS_20: - case RG_PROGRESSIVE_BOMBCHUS: //RANDOTODO Do we want bombchu refills to exist seperatly from bombchu bags? If so, this needs changing. + case RG_PROGRESSIVE_BOMBCHUS: // RANDOTODO Do we want bombchu refills to exist seperatly from bombchu bags? If + // so, this needs changing. return CAN_OBTAIN; case RG_PROGRESSIVE_HOOKSHOT: switch (INV_CONTENT(ITEM_HOOKSHOT)) { @@ -634,9 +807,10 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe case RG_PROGRESSIVE_MAGIC_METER: case RG_MAGIC_SINGLE: case RG_MAGIC_DOUBLE: - return infiniteUpgrades != RO_INF_UPGRADES_OFF ? - (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_MAGIC_METER) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) : - (gSaveContext.magicLevel < 2 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); + return infiniteUpgrades != RO_INF_UPGRADES_OFF + ? (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_MAGIC_METER) ? CANT_OBTAIN_ALREADY_HAVE + : CAN_OBTAIN) + : (gSaveContext.magicLevel < 2 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); case RG_FISHING_POLE: return !Flags_GetRandomizerInf(RAND_INF_FISHING_POLE_FOUND) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; @@ -704,7 +878,8 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe case RG_SHADOW_TEMPLE_COMPASS: return !CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, SCENE_SHADOW_TEMPLE) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; case RG_BOTTOM_OF_THE_WELL_COMPASS: - return !CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, SCENE_BOTTOM_OF_THE_WELL) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return !CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, SCENE_BOTTOM_OF_THE_WELL) ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_ICE_CAVERN_COMPASS: return !CHECK_DUNGEON_ITEM(DUNGEON_COMPASS, SCENE_ICE_CAVERN) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; case RG_FOREST_TEMPLE_BOSS_KEY: @@ -720,25 +895,46 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe case RG_GANONS_CASTLE_BOSS_KEY: return !CHECK_DUNGEON_ITEM(DUNGEON_KEY_BOSS, SCENE_GANONS_TOWER) ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; case RG_FOREST_TEMPLE_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_FOREST_TEMPLE] < FOREST_TEMPLE_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_FOREST_TEMPLE] < FOREST_TEMPLE_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_FIRE_TEMPLE_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_FIRE_TEMPLE] < FIRE_TEMPLE_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_FIRE_TEMPLE] < FIRE_TEMPLE_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_WATER_TEMPLE_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_WATER_TEMPLE] < WATER_TEMPLE_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_WATER_TEMPLE] < WATER_TEMPLE_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_SPIRIT_TEMPLE_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_SPIRIT_TEMPLE] < SPIRIT_TEMPLE_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_SPIRIT_TEMPLE] < SPIRIT_TEMPLE_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_SHADOW_TEMPLE_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_SHADOW_TEMPLE] < SHADOW_TEMPLE_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_SHADOW_TEMPLE] < SHADOW_TEMPLE_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_BOTTOM_OF_THE_WELL_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_BOTTOM_OF_THE_WELL] < BOTTOM_OF_THE_WELL_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_BOTTOM_OF_THE_WELL] < BOTTOM_OF_THE_WELL_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_GERUDO_TRAINING_GROUND_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_GERUDO_TRAINING_GROUND] < GERUDO_TRAINING_GROUND_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_GERUDO_TRAINING_GROUND] < + GERUDO_TRAINING_GROUND_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_GERUDO_FORTRESS_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_THIEVES_HIDEOUT] < GERUDO_FORTRESS_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_THIEVES_HIDEOUT] < GERUDO_FORTRESS_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_GANONS_CASTLE_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_INSIDE_GANONS_CASTLE] < GANONS_CASTLE_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_INSIDE_GANONS_CASTLE] < GANONS_CASTLE_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; case RG_TREASURE_GAME_SMALL_KEY: - return gSaveContext.inventory.dungeonKeys[SCENE_TREASURE_BOX_SHOP] < TREASURE_GAME_SMALL_KEY_MAX ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE; + return gSaveContext.inventory.dungeonKeys[SCENE_TREASURE_BOX_SHOP] < TREASURE_GAME_SMALL_KEY_MAX + ? CAN_OBTAIN + : CANT_OBTAIN_ALREADY_HAVE; // Dungeon Rewards case RG_KOKIRI_EMERALD: @@ -794,761 +990,2124 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe // There has been some talk about potentially just using the RC identifier to store flags rather than randomizer inf, so // for now we're not going to store randomzierInf in the randomizer check objects, we're just going to map them 1:1 here std::map rcToRandomizerInf = { - { RC_KF_LINKS_HOUSE_COW, RAND_INF_COWS_MILKED_KF_LINKS_HOUSE_COW }, - { RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT }, - { RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT }, - { RC_LW_DEKU_SCRUB_NEAR_BRIDGE, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE }, - { RC_LW_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_REAR }, - { RC_LW_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT }, - { RC_SFM_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_REAR }, - { RC_SFM_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_FRONT }, - { RC_HF_DEKU_SCRUB_GROTTO, RAND_INF_SCRUBS_PURCHASED_HF_DEKU_SCRUB_GROTTO }, - { RC_HF_COW_GROTTO_COW, RAND_INF_COWS_MILKED_HF_COW_GROTTO_COW }, - { RC_LH_DEKU_SCRUB_GROTTO_LEFT, RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_LEFT }, - { RC_LH_DEKU_SCRUB_GROTTO_RIGHT, RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_RIGHT }, - { RC_LH_DEKU_SCRUB_GROTTO_CENTER, RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_CENTER }, - { RC_GV_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_REAR }, - { RC_GV_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT }, - { RC_GV_COW, RAND_INF_COWS_MILKED_GV_COW }, - { RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR }, - { RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT }, - { RC_KAK_IMPAS_HOUSE_COW, RAND_INF_COWS_MILKED_KAK_IMPAS_HOUSE_COW }, - { RC_DMT_COW_GROTTO_COW, RAND_INF_COWS_MILKED_DMT_COW_GROTTO_COW }, - { RC_GC_DEKU_SCRUB_GROTTO_LEFT, RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_LEFT }, - { RC_GC_DEKU_SCRUB_GROTTO_RIGHT, RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_RIGHT }, - { RC_GC_DEKU_SCRUB_GROTTO_CENTER, RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_CENTER }, - { RC_DMC_DEKU_SCRUB, RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB }, - { RC_DMC_DEKU_SCRUB_GROTTO_LEFT, RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_LEFT }, - { RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_RIGHT }, - { RC_DMC_DEKU_SCRUB_GROTTO_CENTER, RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_CENTER }, - { RC_ZR_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_REAR }, - { RC_ZR_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_FRONT }, - { RC_LLR_DEKU_SCRUB_GROTTO_LEFT, RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_LEFT }, - { RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_RIGHT }, - { RC_LLR_DEKU_SCRUB_GROTTO_CENTER, RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_CENTER }, - { RC_LLR_STABLES_LEFT_COW, RAND_INF_COWS_MILKED_LLR_STABLES_LEFT_COW }, - { RC_LLR_STABLES_RIGHT_COW, RAND_INF_COWS_MILKED_LLR_STABLES_RIGHT_COW }, - { RC_LLR_TOWER_LEFT_COW, RAND_INF_COWS_MILKED_LLR_TOWER_LEFT_COW }, - { RC_LLR_TOWER_RIGHT_COW, RAND_INF_COWS_MILKED_LLR_TOWER_RIGHT_COW }, - { RC_DEKU_TREE_MQ_DEKU_SCRUB, RAND_INF_SCRUBS_PURCHASED_DEKU_TREE_MQ_DEKU_SCRUB }, - { RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT }, - { RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS }, - { RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT }, - { RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY }, - { RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR }, - { RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT }, - { RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE }, - { RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS }, - { RC_JABU_JABUS_BELLY_DEKU_SCRUB, RAND_INF_SCRUBS_PURCHASED_JABU_JABUS_BELLY_DEKU_SCRUB }, - { RC_JABU_JABUS_BELLY_MQ_COW, RAND_INF_COWS_MILKED_JABU_JABUS_BELLY_MQ_COW }, - { RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT }, - { RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT }, - { RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_RIGHT }, - { RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_LEFT }, - { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT }, - { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT }, - { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER }, - { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT }, - { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT }, - { RC_KF_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_1 }, - { RC_KF_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_2 }, - { RC_KF_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_3 }, - { RC_KF_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_4 }, - { RC_KF_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_5 }, - { RC_KF_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_6 }, - { RC_KF_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_7 }, - { RC_KF_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_8 }, - { RC_GC_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_1 }, - { RC_GC_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_2 }, - { RC_GC_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_3 }, - { RC_GC_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_4 }, - { RC_GC_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_5 }, - { RC_GC_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_6 }, - { RC_GC_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_7 }, - { RC_GC_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_8 }, - { RC_ZD_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_1 }, - { RC_ZD_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_2 }, - { RC_ZD_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_3 }, - { RC_ZD_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_4 }, - { RC_ZD_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_5 }, - { RC_ZD_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_6 }, - { RC_ZD_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_7 }, - { RC_ZD_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_8 }, - { RC_KAK_BAZAAR_ITEM_1, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_1 }, - { RC_KAK_BAZAAR_ITEM_2, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_2 }, - { RC_KAK_BAZAAR_ITEM_3, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_3 }, - { RC_KAK_BAZAAR_ITEM_4, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_4 }, - { RC_KAK_BAZAAR_ITEM_5, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_5 }, - { RC_KAK_BAZAAR_ITEM_6, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_6 }, - { RC_KAK_BAZAAR_ITEM_7, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_7 }, - { RC_KAK_BAZAAR_ITEM_8, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_8 }, - { RC_KAK_POTION_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_1 }, - { RC_KAK_POTION_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_2 }, - { RC_KAK_POTION_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_3 }, - { RC_KAK_POTION_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_4 }, - { RC_KAK_POTION_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_5 }, - { RC_KAK_POTION_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_6 }, - { RC_KAK_POTION_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_7 }, - { RC_KAK_POTION_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_8 }, - { RC_MARKET_BAZAAR_ITEM_1, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_1 }, - { RC_MARKET_BAZAAR_ITEM_2, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_2 }, - { RC_MARKET_BAZAAR_ITEM_3, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_3 }, - { RC_MARKET_BAZAAR_ITEM_4, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_4 }, - { RC_MARKET_BAZAAR_ITEM_5, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_5 }, - { RC_MARKET_BAZAAR_ITEM_6, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_6 }, - { RC_MARKET_BAZAAR_ITEM_7, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_7 }, - { RC_MARKET_BAZAAR_ITEM_8, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_8 }, - { RC_MARKET_POTION_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_1 }, - { RC_MARKET_POTION_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_2 }, - { RC_MARKET_POTION_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_3 }, - { RC_MARKET_POTION_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_4 }, - { RC_MARKET_POTION_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_5 }, - { RC_MARKET_POTION_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_6 }, - { RC_MARKET_POTION_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_7 }, - { RC_MARKET_POTION_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_8 }, - { RC_MARKET_BOMBCHU_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_1 }, - { RC_MARKET_BOMBCHU_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_2 }, - { RC_MARKET_BOMBCHU_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_3 }, - { RC_MARKET_BOMBCHU_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_4 }, - { RC_MARKET_BOMBCHU_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_5 }, - { RC_MARKET_BOMBCHU_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_6 }, - { RC_MARKET_BOMBCHU_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_7 }, - { RC_MARKET_BOMBCHU_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_8 }, - { RC_TOT_MASTER_SWORD, RAND_INF_TOT_MASTER_SWORD }, - { RC_GC_MEDIGORON, RAND_INF_MERCHANTS_MEDIGORON }, - { RC_KAK_GRANNYS_SHOP, RAND_INF_MERCHANTS_GRANNYS_SHOP }, - { RC_WASTELAND_BOMBCHU_SALESMAN, RAND_INF_MERCHANTS_CARPET_SALESMAN }, - { RC_ZR_MAGIC_BEAN_SALESMAN, RAND_INF_MERCHANTS_MAGIC_BEAN_SALESMAN }, - { RC_LW_TRADE_COJIRO, RAND_INF_ADULT_TRADES_LW_TRADE_COJIRO }, - { RC_GV_TRADE_SAW, RAND_INF_ADULT_TRADES_GV_TRADE_SAW }, - { RC_DMT_TRADE_BROKEN_SWORD, RAND_INF_ADULT_TRADES_DMT_TRADE_BROKEN_SWORD }, - { RC_LH_TRADE_FROG, RAND_INF_ADULT_TRADES_LH_TRADE_FROG }, - { RC_DMT_TRADE_EYEDROPS, RAND_INF_ADULT_TRADES_DMT_TRADE_EYEDROPS }, - { RC_LH_CHILD_FISHING, RAND_INF_CHILD_FISHING }, - { RC_LH_ADULT_FISHING, RAND_INF_ADULT_FISHING }, - { RC_MARKET_10_BIG_POES, RAND_INF_10_BIG_POES }, - { RC_KAK_100_GOLD_SKULLTULA_REWARD, RAND_INF_KAK_100_GOLD_SKULLTULA_REWARD }, - { RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_KF_STORMS_GROTTO_LEFT }, - { RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_KF_STORMS_GROTTO_RIGHT }, - { RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_LEFT }, - { RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_RIGHT }, - { RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_LW_DEKU_SCRUB_GROTTO }, - { RC_SFM_STORMS_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_SFM_STORMS_GROTTO }, - { RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_LEFT }, - { RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_RIGHT }, - { RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_HF_OPEN_GROTTO_LEFT }, - { RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_HF_OPEN_GROTTO_RIGHT }, - { RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_LEFT }, - { RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_RIGHT }, - { RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_HF_INSIDE_FENCE_GROTTO }, - { RC_LLR_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_LLR_GROTTO }, - { RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_LEFT }, - { RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_RIGHT }, - { RC_DMT_COW_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_DMT_COW_GROTTO }, - { RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_LEFT }, - { RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_RIGHT }, - { RC_GC_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_GC_GROTTO }, - { RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_LEFT }, - { RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_RIGHT }, - { RC_DMC_HAMMER_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_DMC_HAMMER_GROTTO }, - { RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_LEFT }, - { RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_RIGHT }, - { RC_ZR_STORMS_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_ZR_STORMS_GROTTO }, - { RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_LEFT }, - { RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_RIGHT }, - { RC_ZD_BEHIND_KING_ZORA_BEEHIVE, RAND_INF_BEEHIVE_ZD_BEHIND_KING_ZORA }, - { RC_LH_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_LH_GROTTO }, - { RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_GV_DEKU_SCRUB_GROTTO }, - { RC_COLOSSUS_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_COLOSSUS_GROTTO }, - { RC_LH_CHILD_FISH_1, RAND_INF_CHILD_FISH_1 }, - { RC_LH_CHILD_FISH_2, RAND_INF_CHILD_FISH_2 }, - { RC_LH_CHILD_FISH_3, RAND_INF_CHILD_FISH_3 }, - { RC_LH_CHILD_FISH_4, RAND_INF_CHILD_FISH_4 }, - { RC_LH_CHILD_FISH_5, RAND_INF_CHILD_FISH_5 }, - { RC_LH_CHILD_FISH_6, RAND_INF_CHILD_FISH_6 }, - { RC_LH_CHILD_FISH_7, RAND_INF_CHILD_FISH_7 }, - { RC_LH_CHILD_FISH_8, RAND_INF_CHILD_FISH_8 }, - { RC_LH_CHILD_FISH_9, RAND_INF_CHILD_FISH_9 }, - { RC_LH_CHILD_FISH_10, RAND_INF_CHILD_FISH_10 }, - { RC_LH_CHILD_FISH_11, RAND_INF_CHILD_FISH_11 }, - { RC_LH_CHILD_FISH_12, RAND_INF_CHILD_FISH_12 }, - { RC_LH_CHILD_FISH_13, RAND_INF_CHILD_FISH_13 }, - { RC_LH_CHILD_FISH_14, RAND_INF_CHILD_FISH_14 }, - { RC_LH_CHILD_FISH_15, RAND_INF_CHILD_FISH_15 }, - { RC_LH_CHILD_LOACH_1, RAND_INF_CHILD_LOACH_1 }, - { RC_LH_CHILD_LOACH_2, RAND_INF_CHILD_LOACH_2 }, - { RC_LH_ADULT_FISH_1, RAND_INF_ADULT_FISH_1 }, - { RC_LH_ADULT_FISH_2, RAND_INF_ADULT_FISH_2 }, - { RC_LH_ADULT_FISH_3, RAND_INF_ADULT_FISH_3 }, - { RC_LH_ADULT_FISH_4, RAND_INF_ADULT_FISH_4 }, - { RC_LH_ADULT_FISH_5, RAND_INF_ADULT_FISH_5 }, - { RC_LH_ADULT_FISH_6, RAND_INF_ADULT_FISH_6 }, - { RC_LH_ADULT_FISH_7, RAND_INF_ADULT_FISH_7 }, - { RC_LH_ADULT_FISH_8, RAND_INF_ADULT_FISH_8 }, - { RC_LH_ADULT_FISH_9, RAND_INF_ADULT_FISH_9 }, - { RC_LH_ADULT_FISH_10, RAND_INF_ADULT_FISH_10 }, - { RC_LH_ADULT_FISH_11, RAND_INF_ADULT_FISH_11 }, - { RC_LH_ADULT_FISH_12, RAND_INF_ADULT_FISH_12 }, - { RC_LH_ADULT_FISH_13, RAND_INF_ADULT_FISH_13 }, - { RC_LH_ADULT_FISH_14, RAND_INF_ADULT_FISH_14 }, - { RC_LH_ADULT_FISH_15, RAND_INF_ADULT_FISH_15 }, - { RC_LH_ADULT_LOACH, RAND_INF_ADULT_LOACH }, - { RC_ZR_OPEN_GROTTO_FISH, RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO }, - { RC_DMC_UPPER_GROTTO_FISH, RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO }, - { RC_DMT_STORMS_GROTTO_FISH, RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO }, - { RC_KAK_OPEN_GROTTO_FISH, RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO }, - { RC_HF_NEAR_MARKET_GROTTO_FISH, RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO }, - { RC_HF_OPEN_GROTTO_FISH, RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO }, - { RC_HF_SOUTHEAST_GROTTO_FISH, RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO }, - { RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO }, - { RC_KF_STORMS_GROTTO_FISH, RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO }, - { RC_ZD_FISH_1, RAND_INF_ZD_FISH_1 }, - { RC_ZD_FISH_2, RAND_INF_ZD_FISH_2 }, - { RC_ZD_FISH_3, RAND_INF_ZD_FISH_3 }, - { RC_ZD_FISH_4, RAND_INF_ZD_FISH_4 }, - { RC_ZD_FISH_5, RAND_INF_ZD_FISH_5 }, - - { RC_KF_LINKS_HOUSE_POT, RAND_INF_KF_LINKS_HOUSE_POT }, - { RC_KF_TWINS_HOUSE_POT_1, RAND_INF_KF_TWINS_HOUSE_POT_1 }, - { RC_KF_TWINS_HOUSE_POT_2, RAND_INF_KF_TWINS_HOUSE_POT_2 }, - { RC_KF_BROTHERS_HOUSE_POT_1, RAND_INF_KF_BROTHERS_HOUSE_POT_1 }, - { RC_KF_BROTHERS_HOUSE_POT_2, RAND_INF_KF_BROTHERS_HOUSE_POT_2 }, - { RC_GF_BREAK_ROOM_POT_1, RAND_INF_GF_BREAK_ROOM_POT_1 }, - { RC_GF_BREAK_ROOM_POT_2, RAND_INF_GF_BREAK_ROOM_POT_2 }, - { RC_GF_KITCHEN_POT_1, RAND_INF_GF_KITCHEN_POT_1 }, - { RC_GF_KITCHEN_POT_2, RAND_INF_GF_KITCHEN_POT_2 }, - { RC_GF_NORTH_F1_CARPENTER_POT_1, RAND_INF_GF_NORTH_F1_CARPENTER_POT_1 }, - { RC_GF_NORTH_F1_CARPENTER_POT_2, RAND_INF_GF_NORTH_F1_CARPENTER_POT_2 }, - { RC_GF_NORTH_F1_CARPENTER_POT_3, RAND_INF_GF_NORTH_F1_CARPENTER_POT_3 }, - { RC_GF_NORTH_F2_CARPENTER_POT_1, RAND_INF_GF_NORTH_F2_CARPENTER_POT_1 }, - { RC_GF_NORTH_F2_CARPENTER_POT_2, RAND_INF_GF_NORTH_F2_CARPENTER_POT_2 }, - { RC_GF_SOUTH_F1_CARPENTER_POT_1, RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1 }, - { RC_GF_SOUTH_F1_CARPENTER_POT_2, RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2 }, - { RC_GF_SOUTH_F1_CARPENTER_POT_3, RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3 }, - { RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1 }, - { RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2 }, - { RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3 }, - { RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4 }, - { RC_WASTELAND_NEAR_GS_POT_1, RAND_INF_WASTELAND_NEAR_GS_POT_1 }, - { RC_WASTELAND_NEAR_GS_POT_2, RAND_INF_WASTELAND_NEAR_GS_POT_2 }, - { RC_WASTELAND_NEAR_GS_POT_3, RAND_INF_WASTELAND_NEAR_GS_POT_3 }, - { RC_WASTELAND_NEAR_GS_POT_4, RAND_INF_WASTELAND_NEAR_GS_POT_4 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_1, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_1 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_2, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_2 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_3, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_3 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_4, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_4 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_5, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_5 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_6, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_6 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_7, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_7 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_8, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_8 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_9, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_9 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_10, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_10 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_11, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_11 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_12, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_12 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_13, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_13 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_14, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_14 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_15, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_15 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_16, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_16 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_17, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_17 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_18, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_18 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_19, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_19 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_20, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_20 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_21, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_21 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_22, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_22 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_23, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_23 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_24, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_24 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_25, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_25 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_26, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_26 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_27, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_27 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_28, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_28 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_29, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_29 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_30, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_30 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_31, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_31 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_32, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_32 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_33, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_33 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_34, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_34 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_35, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_35 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_36, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_36 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_37, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_37 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_38, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_38 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_39, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_39 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_40, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_40 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_41, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_41 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_42, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_42 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_43, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_43 }, - { RC_MK_GUARD_HOUSE_CHILD_POT_44, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_44 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_1, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_1 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_2, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_2 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_3, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_3 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_4, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_4 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_5, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_5 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_6, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_6 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_7, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_7 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_8, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_8 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_9, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_9 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_10, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_10 }, - { RC_MK_GUARD_HOUSE_ADULT_POT_11, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_11 }, - { RC_MK_BACK_ALLEY_HOUSE_POT_1, RAND_INF_MK_BACK_ALLEY_HOUSE_POT_1 }, - { RC_MK_BACK_ALLEY_HOUSE_POT_2, RAND_INF_MK_BACK_ALLEY_HOUSE_POT_2 }, - { RC_MK_BACK_ALLEY_HOUSE_POT_3, RAND_INF_MK_BACK_ALLEY_HOUSE_POT_3 }, - { RC_KAK_NEAR_POTION_SHOP_POT_1, RAND_INF_KAK_NEAR_POTION_SHOP_POT_1 }, - { RC_KAK_NEAR_POTION_SHOP_POT_2, RAND_INF_KAK_NEAR_POTION_SHOP_POT_2 }, - { RC_KAK_NEAR_POTION_SHOP_POT_3, RAND_INF_KAK_NEAR_POTION_SHOP_POT_3 }, - { RC_KAK_NEAR_IMPAS_HOUSE_POT_1, RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_1 }, - { RC_KAK_NEAR_IMPAS_HOUSE_POT_2, RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_2 }, - { RC_KAK_NEAR_IMPAS_HOUSE_POT_3, RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_3 }, - { RC_KAK_NEAR_GUARDS_HOUSE_POT_1, RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_1 }, - { RC_KAK_NEAR_GUARDS_HOUSE_POT_2, RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_2 }, - { RC_KAK_NEAR_GUARDS_HOUSE_POT_3, RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_3 }, - { RC_KAK_NEAR_MEDICINE_SHOP_POT_1, RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_1 }, - { RC_KAK_NEAR_MEDICINE_SHOP_POT_2, RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_2 }, - { RC_GY_DAMPES_GRAVE_POT_1, RAND_INF_GY_DAMPES_GRAVE_POT_1 }, - { RC_GY_DAMPES_GRAVE_POT_2, RAND_INF_GY_DAMPES_GRAVE_POT_2 }, - { RC_GY_DAMPES_GRAVE_POT_3, RAND_INF_GY_DAMPES_GRAVE_POT_3 }, - { RC_GY_DAMPES_GRAVE_POT_4, RAND_INF_GY_DAMPES_GRAVE_POT_4 }, - { RC_GY_DAMPES_GRAVE_POT_5, RAND_INF_GY_DAMPES_GRAVE_POT_5 }, - { RC_GY_DAMPES_GRAVE_POT_6, RAND_INF_GY_DAMPES_GRAVE_POT_6 }, - { RC_GC_LOWER_STAIRCASE_POT_1, RAND_INF_GC_LOWER_STAIRCASE_POT_1 }, - { RC_GC_LOWER_STAIRCASE_POT_2, RAND_INF_GC_LOWER_STAIRCASE_POT_2 }, - { RC_GC_UPPER_STAIRCASE_POT_1, RAND_INF_GC_UPPER_STAIRCASE_POT_1 }, - { RC_GC_UPPER_STAIRCASE_POT_2, RAND_INF_GC_UPPER_STAIRCASE_POT_2 }, - { RC_GC_UPPER_STAIRCASE_POT_3, RAND_INF_GC_UPPER_STAIRCASE_POT_3 }, - { RC_GC_MEDIGORON_POT_1, RAND_INF_GC_MEDIGORON_POT_1 }, - { RC_GC_DARUNIA_POT_1, RAND_INF_GC_DARUNIA_POT_1 }, - { RC_GC_DARUNIA_POT_2, RAND_INF_GC_DARUNIA_POT_2 }, - { RC_GC_DARUNIA_POT_3, RAND_INF_GC_DARUNIA_POT_3 }, - { RC_DMC_NEAR_GC_POT_1, RAND_INF_DMC_NEAR_GC_POT_1 }, - { RC_DMC_NEAR_GC_POT_2, RAND_INF_DMC_NEAR_GC_POT_2 }, - { RC_DMC_NEAR_GC_POT_3, RAND_INF_DMC_NEAR_GC_POT_3 }, - { RC_DMC_NEAR_GC_POT_4, RAND_INF_DMC_NEAR_GC_POT_4 }, - { RC_ZD_NEAR_SHOP_POT_1, RAND_INF_ZD_NEAR_SHOP_POT_1 }, - { RC_ZD_NEAR_SHOP_POT_2, RAND_INF_ZD_NEAR_SHOP_POT_2 }, - { RC_ZD_NEAR_SHOP_POT_3, RAND_INF_ZD_NEAR_SHOP_POT_3 }, - { RC_ZD_NEAR_SHOP_POT_4, RAND_INF_ZD_NEAR_SHOP_POT_4 }, - { RC_ZD_NEAR_SHOP_POT_5, RAND_INF_ZD_NEAR_SHOP_POT_5 }, - { RC_ZF_HIDDEN_CAVE_POT_1, RAND_INF_ZF_HIDDEN_CAVE_POT_1 }, - { RC_ZF_HIDDEN_CAVE_POT_2, RAND_INF_ZF_HIDDEN_CAVE_POT_2 }, - { RC_ZF_HIDDEN_CAVE_POT_3, RAND_INF_ZF_HIDDEN_CAVE_POT_3 }, - { RC_ZF_NEAR_JABU_POT_1, RAND_INF_ZF_NEAR_JABU_POT_1 }, - { RC_ZF_NEAR_JABU_POT_2, RAND_INF_ZF_NEAR_JABU_POT_2 }, - { RC_ZF_NEAR_JABU_POT_3, RAND_INF_ZF_NEAR_JABU_POT_3 }, - { RC_ZF_NEAR_JABU_POT_4, RAND_INF_ZF_NEAR_JABU_POT_4 }, - { RC_LLR_FRONT_POT_1, RAND_INF_LLR_FRONT_POT_1 }, - { RC_LLR_FRONT_POT_2, RAND_INF_LLR_FRONT_POT_2 }, - { RC_LLR_FRONT_POT_3, RAND_INF_LLR_FRONT_POT_3 }, - { RC_LLR_FRONT_POT_4, RAND_INF_LLR_FRONT_POT_4 }, - { RC_LLR_RAIN_SHED_POT_1, RAND_INF_LLR_RAIN_SHED_POT_1 }, - { RC_LLR_RAIN_SHED_POT_2, RAND_INF_LLR_RAIN_SHED_POT_2 }, - { RC_LLR_RAIN_SHED_POT_3, RAND_INF_LLR_RAIN_SHED_POT_3 }, - { RC_LLR_TALONS_HOUSE_POT_1, RAND_INF_LLR_TALONS_HOUSE_POT_1 }, - { RC_LLR_TALONS_HOUSE_POT_2, RAND_INF_LLR_TALONS_HOUSE_POT_2 }, - { RC_LLR_TALONS_HOUSE_POT_3, RAND_INF_LLR_TALONS_HOUSE_POT_3 }, - { RC_HF_COW_GROTTO_POT_1, RAND_INF_HF_COW_GROTTO_POT_1 }, - { RC_HF_COW_GROTTO_POT_2, RAND_INF_HF_COW_GROTTO_POT_2 }, - { RC_HC_STORMS_GROTTO_POT_1, RAND_INF_HC_STORMS_GROTTO_POT_1 }, - { RC_HC_STORMS_GROTTO_POT_2, RAND_INF_HC_STORMS_GROTTO_POT_2 }, - { RC_HC_STORMS_GROTTO_POT_3, RAND_INF_HC_STORMS_GROTTO_POT_3 }, - { RC_HC_STORMS_GROTTO_POT_4, RAND_INF_HC_STORMS_GROTTO_POT_4 }, - { RC_DODONGOS_CAVERN_LIZALFOS_POT_1, RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_1 }, - { RC_DODONGOS_CAVERN_LIZALFOS_POT_2, RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_2 }, - { RC_DODONGOS_CAVERN_LIZALFOS_POT_3, RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_3 }, - { RC_DODONGOS_CAVERN_LIZALFOS_POT_4, RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_4 }, - { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_1 }, - { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_2 }, - { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_3 }, - { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_4 }, - { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_5 }, - { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_6 }, - { RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1, RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_1 }, - { RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2, RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_2 }, - { RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3, RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_3 }, - { RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4, RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_4 }, - { RC_DODONGOS_CAVERN_STAIRCASE_POT_1, RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_1 }, - { RC_DODONGOS_CAVERN_STAIRCASE_POT_2, RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_2 }, - { RC_DODONGOS_CAVERN_STAIRCASE_POT_3, RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_3 }, - { RC_DODONGOS_CAVERN_STAIRCASE_POT_4, RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_4 }, - { RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1, RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_1 }, - { RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2, RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_2 }, - { RC_DODONGOS_CAVERN_BLADE_POT_1, RAND_INF_DODONGOS_CAVERN_BLADE_POT_1 }, - { RC_DODONGOS_CAVERN_BLADE_POT_2, RAND_INF_DODONGOS_CAVERN_BLADE_POT_2 }, - { RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1, RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_1 }, - { RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_2 }, - { RC_DODONGOS_CAVERN_BACK_ROOM_POT_1, RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_1 }, - { RC_DODONGOS_CAVERN_BACK_ROOM_POT_2, RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_2 }, - { RC_DODONGOS_CAVERN_BACK_ROOM_POT_3, RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_3 }, - { RC_DODONGOS_CAVERN_BACK_ROOM_POT_4, RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_4 }, - { RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1 }, - { RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2, RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2 }, - { RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3 }, - { RC_JABU_JABUS_BELLY_BARINADE_POT_1, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_1 }, - { RC_JABU_JABUS_BELLY_BARINADE_POT_2, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_2 }, - { RC_JABU_JABUS_BELLY_BARINADE_POT_3, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_3 }, - { RC_JABU_JABUS_BELLY_BARINADE_POT_4, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_4 }, - { RC_JABU_JABUS_BELLY_BARINADE_POT_5, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_5 }, - { RC_JABU_JABUS_BELLY_BARINADE_POT_6, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_6 }, - { RC_JABU_JABUS_BELLY_BASEMENT_POT_1, RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_1 }, - { RC_JABU_JABUS_BELLY_BASEMENT_POT_2, RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_2 }, - { RC_JABU_JABUS_BELLY_BASEMENT_POT_3, RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_3 }, - { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1 }, - { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2 }, - { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3 }, - { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4 }, - { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5 }, - { RC_FOREST_TEMPLE_LOBBY_POT_1, RAND_INF_FOREST_TEMPLE_LOBBY_POT_1 }, - { RC_FOREST_TEMPLE_LOBBY_POT_2, RAND_INF_FOREST_TEMPLE_LOBBY_POT_2 }, - { RC_FOREST_TEMPLE_LOBBY_POT_3, RAND_INF_FOREST_TEMPLE_LOBBY_POT_3 }, - { RC_FOREST_TEMPLE_LOBBY_POT_4, RAND_INF_FOREST_TEMPLE_LOBBY_POT_4 }, - { RC_FOREST_TEMPLE_LOBBY_POT_5, RAND_INF_FOREST_TEMPLE_LOBBY_POT_5 }, - { RC_FOREST_TEMPLE_LOBBY_POT_6, RAND_INF_FOREST_TEMPLE_LOBBY_POT_6 }, - { RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1, RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_1 }, - { RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_2 }, - { RC_FOREST_TEMPLE_GREEN_POE_POT_1, RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_1 }, - { RC_FOREST_TEMPLE_GREEN_POE_POT_2, RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_2 }, - { RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1, RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_1 }, - { RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2, RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_2 }, - { RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3, RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_3 }, - { RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4, RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_4 }, - { RC_FOREST_TEMPLE_BLUE_POE_POT_1, RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_1 }, - { RC_FOREST_TEMPLE_BLUE_POE_POT_2, RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_2 }, - { RC_FOREST_TEMPLE_BLUE_POE_POT_3, RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_3 }, - { RC_FOREST_TEMPLE_FROZEN_EYE_POT_1, RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_1 }, - { RC_FOREST_TEMPLE_FROZEN_EYE_POT_2, RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_2 }, - { RC_FIRE_TEMPLE_NEAR_BOSS_POT_1, RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_1 }, - { RC_FIRE_TEMPLE_NEAR_BOSS_POT_2, RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_2 }, - { RC_FIRE_TEMPLE_NEAR_BOSS_POT_3, RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_3 }, - { RC_FIRE_TEMPLE_NEAR_BOSS_POT_4, RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_4 }, - { RC_FIRE_TEMPLE_BIG_LAVA_POT_1, RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_1 }, - { RC_FIRE_TEMPLE_BIG_LAVA_POT_2, RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_2 }, - { RC_FIRE_TEMPLE_BIG_LAVA_POT_3, RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_3 }, - { RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1 }, - { RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2 }, - { RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3 }, - { RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4 }, - { RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1 }, - { RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2 }, - { RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3 }, - { RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4 }, - { RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_1 }, - { RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_2 }, - { RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_1 }, - { RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_2 }, - { RC_WATER_TEMPLE_TORCH_POT_1, RAND_INF_WATER_TEMPLE_TORCH_POT_1 }, - { RC_WATER_TEMPLE_TORCH_POT_2, RAND_INF_WATER_TEMPLE_TORCH_POT_2 }, - { RC_WATER_TEMPLE_NEAR_COMPASS_POT_1, RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_1 }, - { RC_WATER_TEMPLE_NEAR_COMPASS_POT_2, RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_2 }, - { RC_WATER_TEMPLE_NEAR_COMPASS_POT_3, RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_3 }, - { RC_WATER_TEMPLE_CENTRAL_BOW_POT_1, RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_1 }, - { RC_WATER_TEMPLE_CENTRAL_BOW_POT_2, RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_2 }, - { RC_WATER_TEMPLE_BEHIND_GATE_POT_1, RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_1 }, - { RC_WATER_TEMPLE_BEHIND_GATE_POT_2, RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_2 }, - { RC_WATER_TEMPLE_BEHIND_GATE_POT_3, RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_3 }, - { RC_WATER_TEMPLE_BEHIND_GATE_POT_4, RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_4 }, - { RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1, RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1 }, - { RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2 }, - { RC_WATER_TEMPLE_RIVER_POT_1, RAND_INF_WATER_TEMPLE_RIVER_POT_1 }, - { RC_WATER_TEMPLE_RIVER_POT_2, RAND_INF_WATER_TEMPLE_RIVER_POT_2 }, - { RC_WATER_TEMPLE_LIKE_LIKE_POT_1, RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_1 }, - { RC_WATER_TEMPLE_LIKE_LIKE_POT_2, RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_2 }, - { RC_WATER_TEMPLE_BOSS_KEY_POT_1, RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_1 }, - { RC_WATER_TEMPLE_BOSS_KEY_POT_2, RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_2 }, - { RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, RAND_INF_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1 }, - { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1 }, - { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2 }, - { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3 }, - { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4 }, - { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5 }, - { RC_SHADOW_TEMPLE_MAP_CHEST_POT_1, RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_1 }, - { RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_2 }, - { RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_1 }, - { RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_2 }, - { RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_3 }, - { RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_4 }, - { RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_1 }, - { RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_2 }, - { RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, RAND_INF_SHADOW_TEMPLE_SPIKE_WALLS_POT_1 }, - { RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_1 }, - { RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_2 }, - { RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1, RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_1 }, - { RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_2 }, - { RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_3 }, - { RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_4 }, - { RC_SPIRIT_TEMPLE_LOBBY_POT_1, RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_1 }, - { RC_SPIRIT_TEMPLE_LOBBY_POT_2, RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_2 }, - { RC_SPIRIT_TEMPLE_ANUBIS_POT_1, RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_1 }, - { RC_SPIRIT_TEMPLE_ANUBIS_POT_2, RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_2 }, - { RC_SPIRIT_TEMPLE_ANUBIS_POT_3, RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_3 }, - { RC_SPIRIT_TEMPLE_ANUBIS_POT_4, RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_4 }, - { RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, RAND_INF_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1 }, - { RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1 }, - { RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2 }, - { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1 }, - { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2 }, - { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3 }, - { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4 }, - { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5 }, - { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6 }, - { RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, RAND_INF_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1 }, - { RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_WATER_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_WATER_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_WATER_TRIAL_POT_3, RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_3 }, - { RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_3 }, - { RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_4 }, - { RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1 }, - { RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_1, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_1 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_2, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_2 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_3, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_3 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_4, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_4 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_5, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_5 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_6, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_6 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_7, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_7 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_8, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_8 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_9, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_9 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_10, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_10 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_11, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_11 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_12, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_12 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_13, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_13 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_14, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_14 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_15, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_15 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_16, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_16 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_17, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_17 }, - { RC_GANONS_CASTLE_GANONS_TOWER_POT_18, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_18 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_1 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_2 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_3 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_4 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_5 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_6 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_7 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_8 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_9 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_10 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_11 }, - { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_12 }, - { RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1 }, - { RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2 }, - { RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3 }, - { RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1 }, - { RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2 }, - { RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1 }, - { RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, RAND_INF_BOTTOM_OF_THE_WELL_UNDERWATER_POT }, - { RC_ICE_CAVERN_HALL_POT_1, RAND_INF_ICE_CAVERN_HALL_POT_1 }, - { RC_ICE_CAVERN_HALL_POT_2, RAND_INF_ICE_CAVERN_HALL_POT_2 }, - { RC_ICE_CAVERN_SPINNING_BLADE_POT_1, RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_1 }, - { RC_ICE_CAVERN_SPINNING_BLADE_POT_2, RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_2 }, - { RC_ICE_CAVERN_SPINNING_BLADE_POT_3, RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_3 }, - { RC_ICE_CAVERN_NEAR_END_POT_1, RAND_INF_ICE_CAVERN_NEAR_END_POT_1 }, - { RC_ICE_CAVERN_NEAR_END_POT_2, RAND_INF_ICE_CAVERN_NEAR_END_POT_2 }, - { RC_ICE_CAVERN_FROZEN_POT_1, RAND_INF_ICE_CAVERN_FROZEN_POT_1 }, + { RC_KF_LINKS_HOUSE_COW, RAND_INF_COWS_MILKED_KF_LINKS_HOUSE_COW }, + { RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT }, + { RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT }, + { RC_LW_DEKU_SCRUB_NEAR_BRIDGE, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_NEAR_BRIDGE }, + { RC_LW_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_REAR }, + { RC_LW_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT }, + { RC_SFM_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_REAR }, + { RC_SFM_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_SFM_DEKU_SCRUB_GROTTO_FRONT }, + { RC_HF_DEKU_SCRUB_GROTTO, RAND_INF_SCRUBS_PURCHASED_HF_DEKU_SCRUB_GROTTO }, + { RC_HF_COW_GROTTO_COW, RAND_INF_COWS_MILKED_HF_COW_GROTTO_COW }, + { RC_LH_DEKU_SCRUB_GROTTO_LEFT, RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_LEFT }, + { RC_LH_DEKU_SCRUB_GROTTO_RIGHT, RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_RIGHT }, + { RC_LH_DEKU_SCRUB_GROTTO_CENTER, RAND_INF_SCRUBS_PURCHASED_LH_DEKU_SCRUB_GROTTO_CENTER }, + { RC_GV_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_REAR }, + { RC_GV_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_GV_DEKU_SCRUB_GROTTO_FRONT }, + { RC_GV_COW, RAND_INF_COWS_MILKED_GV_COW }, + { RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_REAR }, + { RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT }, + { RC_KAK_IMPAS_HOUSE_COW, RAND_INF_COWS_MILKED_KAK_IMPAS_HOUSE_COW }, + { RC_DMT_COW_GROTTO_COW, RAND_INF_COWS_MILKED_DMT_COW_GROTTO_COW }, + { RC_GC_DEKU_SCRUB_GROTTO_LEFT, RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_LEFT }, + { RC_GC_DEKU_SCRUB_GROTTO_RIGHT, RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_RIGHT }, + { RC_GC_DEKU_SCRUB_GROTTO_CENTER, RAND_INF_SCRUBS_PURCHASED_GC_DEKU_SCRUB_GROTTO_CENTER }, + { RC_DMC_DEKU_SCRUB, RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB }, + { RC_DMC_DEKU_SCRUB_GROTTO_LEFT, RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_LEFT }, + { RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_RIGHT }, + { RC_DMC_DEKU_SCRUB_GROTTO_CENTER, RAND_INF_SCRUBS_PURCHASED_DMC_DEKU_SCRUB_GROTTO_CENTER }, + { RC_ZR_DEKU_SCRUB_GROTTO_REAR, RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_REAR }, + { RC_ZR_DEKU_SCRUB_GROTTO_FRONT, RAND_INF_SCRUBS_PURCHASED_ZR_DEKU_SCRUB_GROTTO_FRONT }, + { RC_LLR_DEKU_SCRUB_GROTTO_LEFT, RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_LEFT }, + { RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_RIGHT }, + { RC_LLR_DEKU_SCRUB_GROTTO_CENTER, RAND_INF_SCRUBS_PURCHASED_LLR_DEKU_SCRUB_GROTTO_CENTER }, + { RC_LLR_STABLES_LEFT_COW, RAND_INF_COWS_MILKED_LLR_STABLES_LEFT_COW }, + { RC_LLR_STABLES_RIGHT_COW, RAND_INF_COWS_MILKED_LLR_STABLES_RIGHT_COW }, + { RC_LLR_TOWER_LEFT_COW, RAND_INF_COWS_MILKED_LLR_TOWER_LEFT_COW }, + { RC_LLR_TOWER_RIGHT_COW, RAND_INF_COWS_MILKED_LLR_TOWER_RIGHT_COW }, + { RC_DEKU_TREE_MQ_DEKU_SCRUB, RAND_INF_SCRUBS_PURCHASED_DEKU_TREE_MQ_DEKU_SCRUB }, + { RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, + RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT }, + { RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, + RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS }, + { RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, + RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT }, + { RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY }, + { RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR }, + { RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, + RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT }, + { RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE }, + { RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, + RAND_INF_SCRUBS_PURCHASED_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS }, + { RC_JABU_JABUS_BELLY_DEKU_SCRUB, RAND_INF_SCRUBS_PURCHASED_JABU_JABUS_BELLY_DEKU_SCRUB }, + { RC_JABU_JABUS_BELLY_MQ_COW, RAND_INF_COWS_MILKED_JABU_JABUS_BELLY_MQ_COW }, + { RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT }, + { RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT }, + { RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_RIGHT }, + { RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_DEKU_SCRUB_LEFT }, + { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT }, + { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT }, + { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER }, + { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT }, + { RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, RAND_INF_SCRUBS_PURCHASED_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT }, + { RC_KF_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_1 }, + { RC_KF_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_2 }, + { RC_KF_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_3 }, + { RC_KF_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_4 }, + { RC_KF_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_5 }, + { RC_KF_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_6 }, + { RC_KF_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_7 }, + { RC_KF_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_KF_SHOP_ITEM_8 }, + { RC_GC_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_1 }, + { RC_GC_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_2 }, + { RC_GC_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_3 }, + { RC_GC_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_4 }, + { RC_GC_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_5 }, + { RC_GC_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_6 }, + { RC_GC_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_7 }, + { RC_GC_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_GC_SHOP_ITEM_8 }, + { RC_ZD_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_1 }, + { RC_ZD_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_2 }, + { RC_ZD_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_3 }, + { RC_ZD_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_4 }, + { RC_ZD_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_5 }, + { RC_ZD_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_6 }, + { RC_ZD_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_7 }, + { RC_ZD_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_ZD_SHOP_ITEM_8 }, + { RC_KAK_BAZAAR_ITEM_1, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_1 }, + { RC_KAK_BAZAAR_ITEM_2, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_2 }, + { RC_KAK_BAZAAR_ITEM_3, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_3 }, + { RC_KAK_BAZAAR_ITEM_4, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_4 }, + { RC_KAK_BAZAAR_ITEM_5, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_5 }, + { RC_KAK_BAZAAR_ITEM_6, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_6 }, + { RC_KAK_BAZAAR_ITEM_7, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_7 }, + { RC_KAK_BAZAAR_ITEM_8, RAND_INF_SHOP_ITEMS_KAK_BAZAAR_ITEM_8 }, + { RC_KAK_POTION_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_1 }, + { RC_KAK_POTION_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_2 }, + { RC_KAK_POTION_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_3 }, + { RC_KAK_POTION_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_4 }, + { RC_KAK_POTION_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_5 }, + { RC_KAK_POTION_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_6 }, + { RC_KAK_POTION_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_7 }, + { RC_KAK_POTION_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_KAK_POTION_SHOP_ITEM_8 }, + { RC_MARKET_BAZAAR_ITEM_1, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_1 }, + { RC_MARKET_BAZAAR_ITEM_2, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_2 }, + { RC_MARKET_BAZAAR_ITEM_3, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_3 }, + { RC_MARKET_BAZAAR_ITEM_4, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_4 }, + { RC_MARKET_BAZAAR_ITEM_5, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_5 }, + { RC_MARKET_BAZAAR_ITEM_6, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_6 }, + { RC_MARKET_BAZAAR_ITEM_7, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_7 }, + { RC_MARKET_BAZAAR_ITEM_8, RAND_INF_SHOP_ITEMS_MARKET_BAZAAR_ITEM_8 }, + { RC_MARKET_POTION_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_1 }, + { RC_MARKET_POTION_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_2 }, + { RC_MARKET_POTION_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_3 }, + { RC_MARKET_POTION_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_4 }, + { RC_MARKET_POTION_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_5 }, + { RC_MARKET_POTION_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_6 }, + { RC_MARKET_POTION_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_7 }, + { RC_MARKET_POTION_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_MARKET_POTION_SHOP_ITEM_8 }, + { RC_MARKET_BOMBCHU_SHOP_ITEM_1, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_1 }, + { RC_MARKET_BOMBCHU_SHOP_ITEM_2, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_2 }, + { RC_MARKET_BOMBCHU_SHOP_ITEM_3, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_3 }, + { RC_MARKET_BOMBCHU_SHOP_ITEM_4, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_4 }, + { RC_MARKET_BOMBCHU_SHOP_ITEM_5, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_5 }, + { RC_MARKET_BOMBCHU_SHOP_ITEM_6, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_6 }, + { RC_MARKET_BOMBCHU_SHOP_ITEM_7, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_7 }, + { RC_MARKET_BOMBCHU_SHOP_ITEM_8, RAND_INF_SHOP_ITEMS_MARKET_BOMBCHU_SHOP_ITEM_8 }, + { RC_TOT_MASTER_SWORD, RAND_INF_TOT_MASTER_SWORD }, + { RC_GC_MEDIGORON, RAND_INF_MERCHANTS_MEDIGORON }, + { RC_KAK_GRANNYS_SHOP, RAND_INF_MERCHANTS_GRANNYS_SHOP }, + { RC_WASTELAND_BOMBCHU_SALESMAN, RAND_INF_MERCHANTS_CARPET_SALESMAN }, + { RC_ZR_MAGIC_BEAN_SALESMAN, RAND_INF_MERCHANTS_MAGIC_BEAN_SALESMAN }, + { RC_LW_TRADE_COJIRO, RAND_INF_ADULT_TRADES_LW_TRADE_COJIRO }, + { RC_GV_TRADE_SAW, RAND_INF_ADULT_TRADES_GV_TRADE_SAW }, + { RC_DMT_TRADE_BROKEN_SWORD, RAND_INF_ADULT_TRADES_DMT_TRADE_BROKEN_SWORD }, + { RC_LH_TRADE_FROG, RAND_INF_ADULT_TRADES_LH_TRADE_FROG }, + { RC_DMT_TRADE_EYEDROPS, RAND_INF_ADULT_TRADES_DMT_TRADE_EYEDROPS }, + { RC_LH_CHILD_FISHING, RAND_INF_CHILD_FISHING }, + { RC_LH_ADULT_FISHING, RAND_INF_ADULT_FISHING }, + { RC_MARKET_10_BIG_POES, RAND_INF_10_BIG_POES }, + { RC_KAK_100_GOLD_SKULLTULA_REWARD, RAND_INF_KAK_100_GOLD_SKULLTULA_REWARD }, + { RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_KF_STORMS_GROTTO_LEFT }, + { RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_KF_STORMS_GROTTO_RIGHT }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_LEFT }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_LW_NEAR_SHORTCUTS_GROTTO_RIGHT }, + { RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_LW_DEKU_SCRUB_GROTTO }, + { RC_SFM_STORMS_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_SFM_STORMS_GROTTO }, + { RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_LEFT }, + { RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_HF_NEAR_MARKET_GROTTO_RIGHT }, + { RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_HF_OPEN_GROTTO_LEFT }, + { RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_HF_OPEN_GROTTO_RIGHT }, + { RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_LEFT }, + { RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_HF_SOUTHEAST_GROTTO_RIGHT }, + { RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_HF_INSIDE_FENCE_GROTTO }, + { RC_LLR_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_LLR_GROTTO }, + { RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_LEFT }, + { RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_KAK_OPEN_GROTTO_RIGHT }, + { RC_DMT_COW_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_DMT_COW_GROTTO }, + { RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_LEFT }, + { RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_DMT_STORMS_GROTTO_RIGHT }, + { RC_GC_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_GC_GROTTO }, + { RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_LEFT }, + { RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_DMC_UPPER_GROTTO_RIGHT }, + { RC_DMC_HAMMER_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_DMC_HAMMER_GROTTO }, + { RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT, RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_LEFT }, + { RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_ZR_OPEN_GROTTO_RIGHT }, + { RC_ZR_STORMS_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_ZR_STORMS_GROTTO }, + { RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_LEFT }, + { RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, RAND_INF_BEEHIVE_ZD_IN_FRONT_OF_KING_ZORA_RIGHT }, + { RC_ZD_BEHIND_KING_ZORA_BEEHIVE, RAND_INF_BEEHIVE_ZD_BEHIND_KING_ZORA }, + { RC_LH_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_LH_GROTTO }, + { RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_GV_DEKU_SCRUB_GROTTO }, + { RC_COLOSSUS_GROTTO_BEEHIVE, RAND_INF_BEEHIVE_COLOSSUS_GROTTO }, + { RC_LH_CHILD_FISH_1, RAND_INF_CHILD_FISH_1 }, + { RC_LH_CHILD_FISH_2, RAND_INF_CHILD_FISH_2 }, + { RC_LH_CHILD_FISH_3, RAND_INF_CHILD_FISH_3 }, + { RC_LH_CHILD_FISH_4, RAND_INF_CHILD_FISH_4 }, + { RC_LH_CHILD_FISH_5, RAND_INF_CHILD_FISH_5 }, + { RC_LH_CHILD_FISH_6, RAND_INF_CHILD_FISH_6 }, + { RC_LH_CHILD_FISH_7, RAND_INF_CHILD_FISH_7 }, + { RC_LH_CHILD_FISH_8, RAND_INF_CHILD_FISH_8 }, + { RC_LH_CHILD_FISH_9, RAND_INF_CHILD_FISH_9 }, + { RC_LH_CHILD_FISH_10, RAND_INF_CHILD_FISH_10 }, + { RC_LH_CHILD_FISH_11, RAND_INF_CHILD_FISH_11 }, + { RC_LH_CHILD_FISH_12, RAND_INF_CHILD_FISH_12 }, + { RC_LH_CHILD_FISH_13, RAND_INF_CHILD_FISH_13 }, + { RC_LH_CHILD_FISH_14, RAND_INF_CHILD_FISH_14 }, + { RC_LH_CHILD_FISH_15, RAND_INF_CHILD_FISH_15 }, + { RC_LH_CHILD_LOACH_1, RAND_INF_CHILD_LOACH_1 }, + { RC_LH_CHILD_LOACH_2, RAND_INF_CHILD_LOACH_2 }, + { RC_LH_ADULT_FISH_1, RAND_INF_ADULT_FISH_1 }, + { RC_LH_ADULT_FISH_2, RAND_INF_ADULT_FISH_2 }, + { RC_LH_ADULT_FISH_3, RAND_INF_ADULT_FISH_3 }, + { RC_LH_ADULT_FISH_4, RAND_INF_ADULT_FISH_4 }, + { RC_LH_ADULT_FISH_5, RAND_INF_ADULT_FISH_5 }, + { RC_LH_ADULT_FISH_6, RAND_INF_ADULT_FISH_6 }, + { RC_LH_ADULT_FISH_7, RAND_INF_ADULT_FISH_7 }, + { RC_LH_ADULT_FISH_8, RAND_INF_ADULT_FISH_8 }, + { RC_LH_ADULT_FISH_9, RAND_INF_ADULT_FISH_9 }, + { RC_LH_ADULT_FISH_10, RAND_INF_ADULT_FISH_10 }, + { RC_LH_ADULT_FISH_11, RAND_INF_ADULT_FISH_11 }, + { RC_LH_ADULT_FISH_12, RAND_INF_ADULT_FISH_12 }, + { RC_LH_ADULT_FISH_13, RAND_INF_ADULT_FISH_13 }, + { RC_LH_ADULT_FISH_14, RAND_INF_ADULT_FISH_14 }, + { RC_LH_ADULT_FISH_15, RAND_INF_ADULT_FISH_15 }, + { RC_LH_ADULT_LOACH, RAND_INF_ADULT_LOACH }, + { RC_ZR_OPEN_GROTTO_FISH, RAND_INF_GROTTO_FISH_ZR_OPEN_GROTTO }, + { RC_DMC_UPPER_GROTTO_FISH, RAND_INF_GROTTO_FISH_DMC_UPPER_GROTTO }, + { RC_DMT_STORMS_GROTTO_FISH, RAND_INF_GROTTO_FISH_DMT_STORMS_GROTTO }, + { RC_KAK_OPEN_GROTTO_FISH, RAND_INF_GROTTO_FISH_KAK_OPEN_GROTTO }, + { RC_HF_NEAR_MARKET_GROTTO_FISH, RAND_INF_GROTTO_FISH_HF_NEAR_MARKET_GROTTO }, + { RC_HF_OPEN_GROTTO_FISH, RAND_INF_GROTTO_FISH_HF_OPEN_GROTTO }, + { RC_HF_SOUTHEAST_GROTTO_FISH, RAND_INF_GROTTO_FISH_HF_SOUTHEAST_GROTTO }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, RAND_INF_GROTTO_FISH_LW_NEAR_SHORTCUTS_GROTTO }, + { RC_KF_STORMS_GROTTO_FISH, RAND_INF_GROTTO_FISH_KF_STORMS_GROTTO }, + { RC_ZD_FISH_1, RAND_INF_ZD_FISH_1 }, + { RC_ZD_FISH_2, RAND_INF_ZD_FISH_2 }, + { RC_ZD_FISH_3, RAND_INF_ZD_FISH_3 }, + { RC_ZD_FISH_4, RAND_INF_ZD_FISH_4 }, + { RC_ZD_FISH_5, RAND_INF_ZD_FISH_5 }, + // Grass + { RC_KF_CHILD_GRASS_1, RAND_INF_KF_CHILD_GRASS_1 }, + { RC_KF_CHILD_GRASS_2, RAND_INF_KF_CHILD_GRASS_2 }, + { RC_KF_CHILD_GRASS_3, RAND_INF_KF_CHILD_GRASS_3 }, + { RC_KF_CHILD_GRASS_4, RAND_INF_KF_CHILD_GRASS_4 }, + { RC_KF_CHILD_GRASS_5, RAND_INF_KF_CHILD_GRASS_5 }, + { RC_KF_CHILD_GRASS_6, RAND_INF_KF_CHILD_GRASS_6 }, + { RC_KF_CHILD_GRASS_7, RAND_INF_KF_CHILD_GRASS_7 }, + { RC_KF_CHILD_GRASS_8, RAND_INF_KF_CHILD_GRASS_8 }, + { RC_KF_CHILD_GRASS_9, RAND_INF_KF_CHILD_GRASS_9 }, + { RC_KF_CHILD_GRASS_10, RAND_INF_KF_CHILD_GRASS_10 }, + { RC_KF_CHILD_GRASS_11, RAND_INF_KF_CHILD_GRASS_11 }, + { RC_KF_CHILD_GRASS_12, RAND_INF_KF_CHILD_GRASS_12 }, + { RC_KF_CHILD_GRASS_MAZE_1, RAND_INF_KF_CHILD_GRASS_MAZE_1 }, + { RC_KF_CHILD_GRASS_MAZE_2, RAND_INF_KF_CHILD_GRASS_MAZE_2 }, + { RC_KF_CHILD_GRASS_MAZE_3, RAND_INF_KF_CHILD_GRASS_MAZE_3 }, + { RC_KF_ADULT_GRASS_1, RAND_INF_KF_ADULT_GRASS_1 }, + { RC_KF_ADULT_GRASS_2, RAND_INF_KF_ADULT_GRASS_2 }, + { RC_KF_ADULT_GRASS_3, RAND_INF_KF_ADULT_GRASS_3 }, + { RC_KF_ADULT_GRASS_4, RAND_INF_KF_ADULT_GRASS_4 }, + { RC_KF_ADULT_GRASS_5, RAND_INF_KF_ADULT_GRASS_5 }, + { RC_KF_ADULT_GRASS_6, RAND_INF_KF_ADULT_GRASS_6 }, + { RC_KF_ADULT_GRASS_7, RAND_INF_KF_ADULT_GRASS_7 }, + { RC_KF_ADULT_GRASS_8, RAND_INF_KF_ADULT_GRASS_8 }, + { RC_KF_ADULT_GRASS_9, RAND_INF_KF_ADULT_GRASS_9 }, + { RC_KF_ADULT_GRASS_10, RAND_INF_KF_ADULT_GRASS_10 }, + { RC_KF_ADULT_GRASS_11, RAND_INF_KF_ADULT_GRASS_11 }, + { RC_KF_ADULT_GRASS_12, RAND_INF_KF_ADULT_GRASS_12 }, + { RC_KF_ADULT_GRASS_13, RAND_INF_KF_ADULT_GRASS_13 }, + { RC_KF_ADULT_GRASS_14, RAND_INF_KF_ADULT_GRASS_14 }, + { RC_KF_ADULT_GRASS_15, RAND_INF_KF_ADULT_GRASS_15 }, + { RC_KF_ADULT_GRASS_16, RAND_INF_KF_ADULT_GRASS_16 }, + { RC_KF_ADULT_GRASS_17, RAND_INF_KF_ADULT_GRASS_17 }, + { RC_KF_ADULT_GRASS_18, RAND_INF_KF_ADULT_GRASS_18 }, + { RC_KF_ADULT_GRASS_19, RAND_INF_KF_ADULT_GRASS_19 }, + { RC_KF_ADULT_GRASS_20, RAND_INF_KF_ADULT_GRASS_20 }, + { RC_LW_GRASS_1, RAND_INF_LW_GRASS_1 }, + { RC_LW_GRASS_2, RAND_INF_LW_GRASS_2 }, + { RC_LW_GRASS_3, RAND_INF_LW_GRASS_3 }, + { RC_LW_GRASS_4, RAND_INF_LW_GRASS_4 }, + { RC_LW_GRASS_5, RAND_INF_LW_GRASS_5 }, + { RC_LW_GRASS_6, RAND_INF_LW_GRASS_6 }, + { RC_LW_GRASS_7, RAND_INF_LW_GRASS_7 }, + { RC_LW_GRASS_8, RAND_INF_LW_GRASS_8 }, + { RC_LW_GRASS_9, RAND_INF_LW_GRASS_9 }, + { RC_MARKET_GRASS_1, RAND_INF_MARKET_GRASS_1 }, + { RC_MARKET_GRASS_2, RAND_INF_MARKET_GRASS_2 }, + { RC_MARKET_GRASS_3, RAND_INF_MARKET_GRASS_3 }, + { RC_MARKET_GRASS_4, RAND_INF_MARKET_GRASS_4 }, + { RC_MARKET_GRASS_5, RAND_INF_MARKET_GRASS_5 }, + { RC_MARKET_GRASS_6, RAND_INF_MARKET_GRASS_6 }, + { RC_MARKET_GRASS_7, RAND_INF_MARKET_GRASS_7 }, + { RC_MARKET_GRASS_8, RAND_INF_MARKET_GRASS_8 }, + { RC_HC_GRASS_1, RAND_INF_HC_GRASS_1 }, + { RC_HC_GRASS_2, RAND_INF_HC_GRASS_2 }, + { RC_KAK_GRASS_1, RAND_INF_KAK_GRASS_1 }, + { RC_KAK_GRASS_2, RAND_INF_KAK_GRASS_2 }, + { RC_KAK_GRASS_3, RAND_INF_KAK_GRASS_3 }, + { RC_KAK_GRASS_4, RAND_INF_KAK_GRASS_4 }, + { RC_KAK_GRASS_5, RAND_INF_KAK_GRASS_5 }, + { RC_KAK_GRASS_6, RAND_INF_KAK_GRASS_6 }, + { RC_KAK_GRASS_7, RAND_INF_KAK_GRASS_7 }, + { RC_KAK_GRASS_8, RAND_INF_KAK_GRASS_8 }, + { RC_GY_GRASS_1, RAND_INF_GY_GRASS_1 }, + { RC_GY_GRASS_2, RAND_INF_GY_GRASS_2 }, + { RC_GY_GRASS_3, RAND_INF_GY_GRASS_3 }, + { RC_GY_GRASS_4, RAND_INF_GY_GRASS_4 }, + { RC_GY_GRASS_5, RAND_INF_GY_GRASS_5 }, + { RC_GY_GRASS_6, RAND_INF_GY_GRASS_6 }, + { RC_GY_GRASS_7, RAND_INF_GY_GRASS_7 }, + { RC_GY_GRASS_8, RAND_INF_GY_GRASS_8 }, + { RC_GY_GRASS_9, RAND_INF_GY_GRASS_9 }, + { RC_GY_GRASS_10, RAND_INF_GY_GRASS_10 }, + { RC_GY_GRASS_11, RAND_INF_GY_GRASS_11 }, + { RC_GY_GRASS_12, RAND_INF_GY_GRASS_12 }, + { RC_LH_GRASS_1, RAND_INF_LH_GRASS_1 }, + { RC_LH_GRASS_2, RAND_INF_LH_GRASS_2 }, + { RC_LH_GRASS_3, RAND_INF_LH_GRASS_3 }, + { RC_LH_GRASS_4, RAND_INF_LH_GRASS_4 }, + { RC_LH_GRASS_5, RAND_INF_LH_GRASS_5 }, + { RC_LH_GRASS_6, RAND_INF_LH_GRASS_6 }, + { RC_LH_GRASS_7, RAND_INF_LH_GRASS_7 }, + { RC_LH_GRASS_8, RAND_INF_LH_GRASS_8 }, + { RC_LH_GRASS_9, RAND_INF_LH_GRASS_9 }, + { RC_LH_GRASS_10, RAND_INF_LH_GRASS_10 }, + { RC_LH_GRASS_11, RAND_INF_LH_GRASS_11 }, + { RC_LH_GRASS_12, RAND_INF_LH_GRASS_12 }, + { RC_LH_GRASS_13, RAND_INF_LH_GRASS_13 }, + { RC_LH_GRASS_14, RAND_INF_LH_GRASS_14 }, + { RC_LH_GRASS_15, RAND_INF_LH_GRASS_15 }, + { RC_LH_GRASS_16, RAND_INF_LH_GRASS_16 }, + { RC_LH_GRASS_17, RAND_INF_LH_GRASS_17 }, + { RC_LH_GRASS_18, RAND_INF_LH_GRASS_18 }, + { RC_LH_GRASS_19, RAND_INF_LH_GRASS_19 }, + { RC_LH_GRASS_20, RAND_INF_LH_GRASS_20 }, + { RC_LH_GRASS_21, RAND_INF_LH_GRASS_21 }, + { RC_LH_GRASS_22, RAND_INF_LH_GRASS_22 }, + { RC_LH_GRASS_23, RAND_INF_LH_GRASS_23 }, + { RC_LH_GRASS_24, RAND_INF_LH_GRASS_24 }, + { RC_LH_GRASS_25, RAND_INF_LH_GRASS_25 }, + { RC_LH_GRASS_26, RAND_INF_LH_GRASS_26 }, + { RC_LH_GRASS_27, RAND_INF_LH_GRASS_27 }, + { RC_LH_GRASS_28, RAND_INF_LH_GRASS_28 }, + { RC_LH_GRASS_29, RAND_INF_LH_GRASS_29 }, + { RC_LH_GRASS_30, RAND_INF_LH_GRASS_30 }, + { RC_LH_GRASS_31, RAND_INF_LH_GRASS_31 }, + { RC_LH_GRASS_32, RAND_INF_LH_GRASS_32 }, + { RC_LH_GRASS_33, RAND_INF_LH_GRASS_33 }, + { RC_LH_GRASS_34, RAND_INF_LH_GRASS_34 }, + { RC_LH_GRASS_35, RAND_INF_LH_GRASS_35 }, + { RC_LH_GRASS_36, RAND_INF_LH_GRASS_36 }, + { RC_LH_CHILD_GRASS_1, RAND_INF_LH_CHILD_GRASS_1 }, + { RC_LH_CHILD_GRASS_2, RAND_INF_LH_CHILD_GRASS_2 }, + { RC_LH_CHILD_GRASS_3, RAND_INF_LH_CHILD_GRASS_3 }, + { RC_LH_CHILD_GRASS_4, RAND_INF_LH_CHILD_GRASS_4 }, + { RC_LH_WARP_PAD_GRASS_1, RAND_INF_LH_WARP_PAD_GRASS_1 }, + { RC_LH_WARP_PAD_GRASS_2, RAND_INF_LH_WARP_PAD_GRASS_2 }, + { RC_HF_NEAR_KF_GRASS_1, RAND_INF_HF_NEAR_KF_GRASS_1 }, + { RC_HF_NEAR_KF_GRASS_2, RAND_INF_HF_NEAR_KF_GRASS_2 }, + { RC_HF_NEAR_KF_GRASS_3, RAND_INF_HF_NEAR_KF_GRASS_3 }, + { RC_HF_NEAR_KF_GRASS_4, RAND_INF_HF_NEAR_KF_GRASS_4 }, + { RC_HF_NEAR_KF_GRASS_5, RAND_INF_HF_NEAR_KF_GRASS_5 }, + { RC_HF_NEAR_KF_GRASS_6, RAND_INF_HF_NEAR_KF_GRASS_6 }, + { RC_HF_NEAR_KF_GRASS_7, RAND_INF_HF_NEAR_KF_GRASS_7 }, + { RC_HF_NEAR_KF_GRASS_8, RAND_INF_HF_NEAR_KF_GRASS_8 }, + { RC_HF_NEAR_KF_GRASS_9, RAND_INF_HF_NEAR_KF_GRASS_9 }, + { RC_HF_NEAR_KF_GRASS_10, RAND_INF_HF_NEAR_KF_GRASS_10 }, + { RC_HF_NEAR_KF_GRASS_11, RAND_INF_HF_NEAR_KF_GRASS_11 }, + { RC_HF_NEAR_KF_GRASS_12, RAND_INF_HF_NEAR_KF_GRASS_12 }, + { RC_HF_NEAR_MARKET_GRASS_1, RAND_INF_HF_NEAR_MARKET_GRASS_1 }, + { RC_HF_NEAR_MARKET_GRASS_2, RAND_INF_HF_NEAR_MARKET_GRASS_2 }, + { RC_HF_NEAR_MARKET_GRASS_3, RAND_INF_HF_NEAR_MARKET_GRASS_3 }, + { RC_HF_NEAR_MARKET_GRASS_4, RAND_INF_HF_NEAR_MARKET_GRASS_4 }, + { RC_HF_NEAR_MARKET_GRASS_5, RAND_INF_HF_NEAR_MARKET_GRASS_5 }, + { RC_HF_NEAR_MARKET_GRASS_6, RAND_INF_HF_NEAR_MARKET_GRASS_6 }, + { RC_HF_NEAR_MARKET_GRASS_7, RAND_INF_HF_NEAR_MARKET_GRASS_7 }, + { RC_HF_NEAR_MARKET_GRASS_8, RAND_INF_HF_NEAR_MARKET_GRASS_8 }, + { RC_HF_NEAR_MARKET_GRASS_9, RAND_INF_HF_NEAR_MARKET_GRASS_9 }, + { RC_HF_NEAR_MARKET_GRASS_10, RAND_INF_HF_NEAR_MARKET_GRASS_10 }, + { RC_HF_NEAR_MARKET_GRASS_11, RAND_INF_HF_NEAR_MARKET_GRASS_11 }, + { RC_HF_NEAR_MARKET_GRASS_12, RAND_INF_HF_NEAR_MARKET_GRASS_12 }, + { RC_HF_SOUTH_GRASS_1, RAND_INF_HF_SOUTH_GRASS_1 }, + { RC_HF_SOUTH_GRASS_2, RAND_INF_HF_SOUTH_GRASS_2 }, + { RC_HF_SOUTH_GRASS_3, RAND_INF_HF_SOUTH_GRASS_3 }, + { RC_HF_SOUTH_GRASS_4, RAND_INF_HF_SOUTH_GRASS_4 }, + { RC_HF_SOUTH_GRASS_5, RAND_INF_HF_SOUTH_GRASS_5 }, + { RC_HF_SOUTH_GRASS_6, RAND_INF_HF_SOUTH_GRASS_6 }, + { RC_HF_SOUTH_GRASS_7, RAND_INF_HF_SOUTH_GRASS_7 }, + { RC_HF_SOUTH_GRASS_8, RAND_INF_HF_SOUTH_GRASS_8 }, + { RC_HF_SOUTH_GRASS_9, RAND_INF_HF_SOUTH_GRASS_9 }, + { RC_HF_SOUTH_GRASS_10, RAND_INF_HF_SOUTH_GRASS_10 }, + { RC_HF_SOUTH_GRASS_11, RAND_INF_HF_SOUTH_GRASS_11 }, + { RC_HF_SOUTH_GRASS_12, RAND_INF_HF_SOUTH_GRASS_12 }, + { RC_HF_CENTRAL_GRASS_1, RAND_INF_HF_CENTRAL_GRASS_1 }, + { RC_HF_CENTRAL_GRASS_2, RAND_INF_HF_CENTRAL_GRASS_2 }, + { RC_HF_CENTRAL_GRASS_3, RAND_INF_HF_CENTRAL_GRASS_3 }, + { RC_HF_CENTRAL_GRASS_4, RAND_INF_HF_CENTRAL_GRASS_4 }, + { RC_HF_CENTRAL_GRASS_5, RAND_INF_HF_CENTRAL_GRASS_5 }, + { RC_HF_CENTRAL_GRASS_6, RAND_INF_HF_CENTRAL_GRASS_6 }, + { RC_HF_CENTRAL_GRASS_7, RAND_INF_HF_CENTRAL_GRASS_7 }, + { RC_HF_CENTRAL_GRASS_8, RAND_INF_HF_CENTRAL_GRASS_8 }, + { RC_HF_CENTRAL_GRASS_9, RAND_INF_HF_CENTRAL_GRASS_9 }, + { RC_HF_CENTRAL_GRASS_10, RAND_INF_HF_CENTRAL_GRASS_10 }, + { RC_HF_CENTRAL_GRASS_11, RAND_INF_HF_CENTRAL_GRASS_11 }, + { RC_HF_CENTRAL_GRASS_12, RAND_INF_HF_CENTRAL_GRASS_12 }, + { RC_ZR_GRASS_1, RAND_INF_ZR_GRASS_1 }, + { RC_ZR_GRASS_2, RAND_INF_ZR_GRASS_2 }, + { RC_ZR_GRASS_3, RAND_INF_ZR_GRASS_3 }, + { RC_ZR_GRASS_4, RAND_INF_ZR_GRASS_4 }, + { RC_ZR_GRASS_5, RAND_INF_ZR_GRASS_5 }, + { RC_ZR_GRASS_6, RAND_INF_ZR_GRASS_6 }, + { RC_ZR_GRASS_7, RAND_INF_ZR_GRASS_7 }, + { RC_ZR_GRASS_8, RAND_INF_ZR_GRASS_8 }, + { RC_ZR_GRASS_9, RAND_INF_ZR_GRASS_9 }, + { RC_ZR_GRASS_10, RAND_INF_ZR_GRASS_10 }, + { RC_ZR_GRASS_11, RAND_INF_ZR_GRASS_11 }, + { RC_ZR_GRASS_12, RAND_INF_ZR_GRASS_12 }, + { RC_ZR_NEAR_FREESTANDING_POH_GRASS, RAND_INF_ZR_NEAR_FREESTANDING_POH_GRASS }, + // Grotto Grass + { RC_KF_STORMS_GROTTO_GRASS_1, RAND_INF_KF_STORMS_GROTTO_GRASS_1 }, + { RC_KF_STORMS_GROTTO_GRASS_2, RAND_INF_KF_STORMS_GROTTO_GRASS_2 }, + { RC_KF_STORMS_GROTTO_GRASS_3, RAND_INF_KF_STORMS_GROTTO_GRASS_3 }, + { RC_KF_STORMS_GROTTO_GRASS_4, RAND_INF_KF_STORMS_GROTTO_GRASS_4 }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1 }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2 }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3 }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4 }, + { RC_HF_NEAR_MARKET_GROTTO_GRASS_1, RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_1 }, + { RC_HF_NEAR_MARKET_GROTTO_GRASS_2, RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_2 }, + { RC_HF_NEAR_MARKET_GROTTO_GRASS_3, RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_3 }, + { RC_HF_NEAR_MARKET_GROTTO_GRASS_4, RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_4 }, + { RC_HF_OPEN_GROTTO_GRASS_1, RAND_INF_HF_OPEN_GROTTO_GRASS_1 }, + { RC_HF_OPEN_GROTTO_GRASS_2, RAND_INF_HF_OPEN_GROTTO_GRASS_2 }, + { RC_HF_OPEN_GROTTO_GRASS_3, RAND_INF_HF_OPEN_GROTTO_GRASS_3 }, + { RC_HF_OPEN_GROTTO_GRASS_4, RAND_INF_HF_OPEN_GROTTO_GRASS_4 }, + { RC_HF_SOUTHEAST_GROTTO_GRASS_1, RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_1 }, + { RC_HF_SOUTHEAST_GROTTO_GRASS_2, RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_2 }, + { RC_HF_SOUTHEAST_GROTTO_GRASS_3, RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_3 }, + { RC_HF_SOUTHEAST_GROTTO_GRASS_4, RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_4 }, + { RC_HF_COW_GROTTO_GRASS_1, RAND_INF_HF_COW_GROTTO_GRASS_1 }, + { RC_HF_COW_GROTTO_GRASS_2, RAND_INF_HF_COW_GROTTO_GRASS_2 }, + { RC_KAK_OPEN_GROTTO_GRASS_1, RAND_INF_KAK_OPEN_GROTTO_GRASS_1 }, + { RC_KAK_OPEN_GROTTO_GRASS_2, RAND_INF_KAK_OPEN_GROTTO_GRASS_2 }, + { RC_KAK_OPEN_GROTTO_GRASS_3, RAND_INF_KAK_OPEN_GROTTO_GRASS_3 }, + { RC_KAK_OPEN_GROTTO_GRASS_4, RAND_INF_KAK_OPEN_GROTTO_GRASS_4 }, + { RC_DMT_STORMS_GROTTO_GRASS_1, RAND_INF_DMT_STORMS_GROTTO_GRASS_1 }, + { RC_DMT_STORMS_GROTTO_GRASS_2, RAND_INF_DMT_STORMS_GROTTO_GRASS_2 }, + { RC_DMT_STORMS_GROTTO_GRASS_3, RAND_INF_DMT_STORMS_GROTTO_GRASS_3 }, + { RC_DMT_STORMS_GROTTO_GRASS_4, RAND_INF_DMT_STORMS_GROTTO_GRASS_4 }, + { RC_DMT_COW_GROTTO_GRASS_1, RAND_INF_DMT_COW_GROTTO_GRASS_1 }, + { RC_DMT_COW_GROTTO_GRASS_2, RAND_INF_DMT_COW_GROTTO_GRASS_2 }, + { RC_DMC_UPPER_GROTTO_GRASS_1, RAND_INF_DMC_UPPER_GROTTO_GRASS_1 }, + { RC_DMC_UPPER_GROTTO_GRASS_2, RAND_INF_DMC_UPPER_GROTTO_GRASS_2 }, + { RC_DMC_UPPER_GROTTO_GRASS_3, RAND_INF_DMC_UPPER_GROTTO_GRASS_3 }, + { RC_DMC_UPPER_GROTTO_GRASS_4, RAND_INF_DMC_UPPER_GROTTO_GRASS_4 }, + { RC_ZR_OPEN_GROTTO_GRASS_1, RAND_INF_ZR_OPEN_GROTTO_GRASS_1 }, + { RC_ZR_OPEN_GROTTO_GRASS_2, RAND_INF_ZR_OPEN_GROTTO_GRASS_2 }, + { RC_ZR_OPEN_GROTTO_GRASS_3, RAND_INF_ZR_OPEN_GROTTO_GRASS_3 }, + { RC_ZR_OPEN_GROTTO_GRASS_4, RAND_INF_ZR_OPEN_GROTTO_GRASS_4 }, + // Dungeon Grass + { RC_DEKU_TREE_LOBBY_GRASS_1, RAND_INF_DEKU_TREE_LOBBY_GRASS_1 }, + { RC_DEKU_TREE_LOBBY_GRASS_2, RAND_INF_DEKU_TREE_LOBBY_GRASS_2 }, + { RC_DEKU_TREE_LOBBY_GRASS_3, RAND_INF_DEKU_TREE_LOBBY_GRASS_3 }, + { RC_DEKU_TREE_LOBBY_GRASS_4, RAND_INF_DEKU_TREE_LOBBY_GRASS_4 }, + { RC_DEKU_TREE_LOBBY_GRASS_5, RAND_INF_DEKU_TREE_LOBBY_GRASS_5 }, + { RC_DEKU_TREE_SLINGSHOT_GRASS_1, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_1 }, + { RC_DEKU_TREE_SLINGSHOT_GRASS_2, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_2 }, + { RC_DEKU_TREE_SLINGSHOT_GRASS_3, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_3 }, + { RC_DEKU_TREE_SLINGSHOT_GRASS_4, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_4 }, + { RC_DEKU_TREE_COMPASS_GRASS_1, RAND_INF_DEKU_TREE_COMPASS_GRASS_1 }, + { RC_DEKU_TREE_COMPASS_GRASS_2, RAND_INF_DEKU_TREE_COMPASS_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3 }, + { RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4 }, + { RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_2 }, + { RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_1 }, + { RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_2 }, + { RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_3 }, + { RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, RAND_INF_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS }, + { RC_DODONGOS_CAVERN_BLADE_GRASS, RAND_INF_DODONGOS_CAVERN_BLADE_GRASS }, + { RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_GRASS }, + { RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, RAND_INF_DODONGOS_CAVERN_BEFORE_BOSS_GRASS }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3 }, + // MQ Dungeon Grass + { RC_DEKU_TREE_MQ_LOBBY_GRASS_1, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_1 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_2, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_2 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_3, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_3 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_4, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_4 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_5, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_5 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_6, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_6 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_7, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_7 }, + { RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_1 }, + { RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_2 }, + { RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_3 }, + { RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_4 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7 }, + { RC_DEKU_TREE_MQ_COMPASS_GRASS_1, RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_1 }, + { RC_DEKU_TREE_MQ_COMPASS_GRASS_2, RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_2 }, + { RC_DEKU_TREE_MQ_COMPASS_GRASS_3, RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_3 }, + { RC_DEKU_TREE_MQ_COMPASS_GRASS_4, RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_4 }, + { RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4 }, + { RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4 }, + { RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5 }, + { RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3 }, + { RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1 }, + { RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2 }, + { RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3 }, + { RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1 }, + { RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2 }, + { RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3 }, + { RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4 }, + { RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_GRASS }, + { RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, RAND_INF_DODONGOS_CAVERN_MQ_BACK_POE_GRASS }, + { RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1 }, + { RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3 }, + { RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, RAND_INF_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS }, + { RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, RAND_INF_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS }, + { RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS }, + { RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2 }, + { RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1 }, + { RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2 }, + { RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3 }, + { RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4 }, + // Shared Dungeon Grass + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_1 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_2 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_3 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_4 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_5 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_6 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_7 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_8 }, + // End Grass - { RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1 }, - { RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2 }, - { RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_1 }, - { RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_2 }, - { RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1 }, - { RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2 }, - { RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1 }, - { RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2 }, - { RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1 }, - { RC_FOREST_TEMPLE_MQ_LOBBY_POT_1, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_1 }, - { RC_FOREST_TEMPLE_MQ_LOBBY_POT_2, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_2 }, - { RC_FOREST_TEMPLE_MQ_LOBBY_POT_3, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_3 }, - { RC_FOREST_TEMPLE_MQ_LOBBY_POT_4, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_4 }, - { RC_FOREST_TEMPLE_MQ_LOBBY_POT_5, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_5 }, - { RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_6 }, - { RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1, RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_1 }, - { RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_2 }, - { RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1 }, - { RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2 }, - { RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3 }, - { RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4 }, - { RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1, RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_1 }, - { RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2, RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_2 }, - { RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3, RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_3 }, - { RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1, RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_1 }, - { RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_2 }, - { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1, RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_1 }, - { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2, RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_2 }, - { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3, RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_3 }, - { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_4 }, - { RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2 }, - { RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3 }, - { RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4 }, - { RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2 }, - { RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3 }, - { RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4 }, - { RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2 }, - { RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3 }, - { RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4 }, - { RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT, RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT, RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_2 }, - { RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2 }, - { RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_2 }, - { RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2 }, - { RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3 }, - { RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4 }, - { RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_2 }, - { RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_3 }, - { RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_4 }, - { RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT, RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT, RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_2 }, - { RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_1 }, - { RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_2 }, - { RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2 }, - { RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1 }, - { RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2 }, - { RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1 }, - { RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2 }, - { RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1 }, - { RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2 }, - { RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT, RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_1 }, - { RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT, RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_2 }, - { RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_3 }, - { RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT, RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_4 }, - { RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1, RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1 }, - { RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2, RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2 }, - { RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT, RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_1 }, - { RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT, RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_2 }, - { RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT, RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_3 }, - { RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT, RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_4 }, - { RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, RAND_INF_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT }, - { RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1 }, - { RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2 }, - { RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1 }, - { RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2 }, - { RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3 }, - { RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT }, - { RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1 }, - { RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2 }, - { RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3 }, - { RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1 }, - { RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2 }, - { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1 }, - { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2 }, - { RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT, RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_1 }, - { RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT, RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_2 }, - { RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT, RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_3 }, - { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1 }, - { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2 }, - { RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1 }, - { RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2, RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2 }, - { RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3 }, - { RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1 }, - { RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2 }, - { RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_1 }, - { RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_2 }, - { RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_3 }, - { RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_4 }, - { RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_5 }, - { RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_6 }, - { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1 }, - { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2 }, - { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3 }, - { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4 }, - { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5 }, - { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6 }, - { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7 }, - { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8 }, - { RC_ICE_CAVERN_MQ_ENTRANCE_POT, RAND_INF_ICE_CAVERN_MQ_ENTRANCE_POT }, - { RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1 }, - { RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2, RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2 }, - { RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1, RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1 }, - { RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2, RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2 }, - { RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3, RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3 }, - { RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4, RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4 }, - { RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1, RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1 }, - { RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2 }, - { RC_ICE_CAVERN_MQ_COMPASS_POT_1, RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_1 }, - { RC_ICE_CAVERN_MQ_COMPASS_POT_2, RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_2 }, - { RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1 }, - { RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2 }, - { RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3 }, - { RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4 }, - { RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT }, - { RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1 }, - { RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2 }, - { RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT }, - { RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1 }, - { RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2 }, - { RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3 }, - { RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4 }, - { RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_1 }, - { RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_2 }, - { RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_3 }, - { RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_4 }, - { RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_5 }, - { RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1 }, - { RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2 }, - { RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1 }, - { RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2 }, - { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1 }, - { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2 }, - { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3 }, - { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4 }, - { RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1 }, - { RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2 }, - { RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1 }, - { RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2 }, - { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_1 }, - { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_2 }, - { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_3 }, - { RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_4 }, - { RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_5 }, - { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1 }, - { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2 }, - { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3 }, - { RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1 }, - { RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2 }, - { RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_3 }, - { RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_4 }, - { RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_5 }, - { RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1 }, - { RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2 }, - { RC_WATER_TEMPLE_MQ_RIVER_POT_1, RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_1 }, - { RC_WATER_TEMPLE_MQ_RIVER_POT_2, RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_2 }, - { RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1 }, - { RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2 }, - { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1 }, - { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2 }, - { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1 }, - { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2 }, - { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3 }, - { RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1 }, - { RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2 }, - { RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_1 }, - { RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_2 }, - { RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_3 }, - { RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_4 }, - { RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, RAND_INF_WATER_TEMPLE_MQ_BOSS_KEY_POT }, - { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1 }, - { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2 }, - { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1 }, - { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2 }, + { RC_KF_LINKS_HOUSE_POT, RAND_INF_KF_LINKS_HOUSE_POT }, + { RC_KF_TWINS_HOUSE_POT_1, RAND_INF_KF_TWINS_HOUSE_POT_1 }, + { RC_KF_TWINS_HOUSE_POT_2, RAND_INF_KF_TWINS_HOUSE_POT_2 }, + { RC_KF_BROTHERS_HOUSE_POT_1, RAND_INF_KF_BROTHERS_HOUSE_POT_1 }, + { RC_KF_BROTHERS_HOUSE_POT_2, RAND_INF_KF_BROTHERS_HOUSE_POT_2 }, + { RC_GF_BREAK_ROOM_POT_1, RAND_INF_GF_BREAK_ROOM_POT_1 }, + { RC_GF_BREAK_ROOM_POT_2, RAND_INF_GF_BREAK_ROOM_POT_2 }, + { RC_GF_KITCHEN_POT_1, RAND_INF_GF_KITCHEN_POT_1 }, + { RC_GF_KITCHEN_POT_2, RAND_INF_GF_KITCHEN_POT_2 }, + { RC_GF_NORTH_F1_CARPENTER_POT_1, RAND_INF_GF_NORTH_F1_CARPENTER_POT_1 }, + { RC_GF_NORTH_F1_CARPENTER_POT_2, RAND_INF_GF_NORTH_F1_CARPENTER_POT_2 }, + { RC_GF_NORTH_F1_CARPENTER_POT_3, RAND_INF_GF_NORTH_F1_CARPENTER_POT_3 }, + { RC_GF_NORTH_F2_CARPENTER_POT_1, RAND_INF_GF_NORTH_F2_CARPENTER_POT_1 }, + { RC_GF_NORTH_F2_CARPENTER_POT_2, RAND_INF_GF_NORTH_F2_CARPENTER_POT_2 }, + { RC_GF_SOUTH_F1_CARPENTER_POT_1, RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1 }, + { RC_GF_SOUTH_F1_CARPENTER_POT_2, RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2 }, + { RC_GF_SOUTH_F1_CARPENTER_POT_3, RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3 }, + { RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1 }, + { RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2 }, + { RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3 }, + { RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4 }, + { RC_WASTELAND_NEAR_GS_POT_1, RAND_INF_WASTELAND_NEAR_GS_POT_1 }, + { RC_WASTELAND_NEAR_GS_POT_2, RAND_INF_WASTELAND_NEAR_GS_POT_2 }, + { RC_WASTELAND_NEAR_GS_POT_3, RAND_INF_WASTELAND_NEAR_GS_POT_3 }, + { RC_WASTELAND_NEAR_GS_POT_4, RAND_INF_WASTELAND_NEAR_GS_POT_4 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_1, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_1 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_2, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_2 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_3, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_3 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_4, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_4 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_5, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_5 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_6, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_6 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_7, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_7 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_8, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_8 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_9, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_9 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_10, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_10 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_11, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_11 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_12, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_12 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_13, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_13 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_14, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_14 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_15, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_15 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_16, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_16 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_17, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_17 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_18, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_18 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_19, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_19 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_20, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_20 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_21, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_21 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_22, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_22 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_23, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_23 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_24, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_24 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_25, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_25 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_26, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_26 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_27, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_27 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_28, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_28 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_29, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_29 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_30, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_30 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_31, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_31 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_32, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_32 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_33, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_33 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_34, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_34 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_35, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_35 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_36, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_36 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_37, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_37 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_38, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_38 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_39, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_39 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_40, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_40 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_41, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_41 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_42, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_42 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_43, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_43 }, + { RC_MK_GUARD_HOUSE_CHILD_POT_44, RAND_INF_MK_GUARD_HOUSE_CHILD_POT_44 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_1, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_1 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_2, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_2 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_3, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_3 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_4, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_4 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_5, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_5 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_6, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_6 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_7, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_7 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_8, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_8 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_9, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_9 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_10, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_10 }, + { RC_MK_GUARD_HOUSE_ADULT_POT_11, RAND_INF_MK_GUARD_HOUSE_ADULT_POT_11 }, + { RC_MK_BACK_ALLEY_HOUSE_POT_1, RAND_INF_MK_BACK_ALLEY_HOUSE_POT_1 }, + { RC_MK_BACK_ALLEY_HOUSE_POT_2, RAND_INF_MK_BACK_ALLEY_HOUSE_POT_2 }, + { RC_MK_BACK_ALLEY_HOUSE_POT_3, RAND_INF_MK_BACK_ALLEY_HOUSE_POT_3 }, + { RC_KAK_NEAR_POTION_SHOP_POT_1, RAND_INF_KAK_NEAR_POTION_SHOP_POT_1 }, + { RC_KAK_NEAR_POTION_SHOP_POT_2, RAND_INF_KAK_NEAR_POTION_SHOP_POT_2 }, + { RC_KAK_NEAR_POTION_SHOP_POT_3, RAND_INF_KAK_NEAR_POTION_SHOP_POT_3 }, + { RC_KAK_NEAR_IMPAS_HOUSE_POT_1, RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_1 }, + { RC_KAK_NEAR_IMPAS_HOUSE_POT_2, RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_2 }, + { RC_KAK_NEAR_IMPAS_HOUSE_POT_3, RAND_INF_KAK_NEAR_IMPAS_HOUSE_POT_3 }, + { RC_KAK_NEAR_GUARDS_HOUSE_POT_1, RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_1 }, + { RC_KAK_NEAR_GUARDS_HOUSE_POT_2, RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_2 }, + { RC_KAK_NEAR_GUARDS_HOUSE_POT_3, RAND_INF_KAK_NEAR_GUARDS_HOUSE_POT_3 }, + { RC_KAK_NEAR_MEDICINE_SHOP_POT_1, RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_1 }, + { RC_KAK_NEAR_MEDICINE_SHOP_POT_2, RAND_INF_KAK_NEAR_MEDICINE_SHOP_POT_2 }, + { RC_GY_DAMPES_GRAVE_POT_1, RAND_INF_GY_DAMPES_GRAVE_POT_1 }, + { RC_GY_DAMPES_GRAVE_POT_2, RAND_INF_GY_DAMPES_GRAVE_POT_2 }, + { RC_GY_DAMPES_GRAVE_POT_3, RAND_INF_GY_DAMPES_GRAVE_POT_3 }, + { RC_GY_DAMPES_GRAVE_POT_4, RAND_INF_GY_DAMPES_GRAVE_POT_4 }, + { RC_GY_DAMPES_GRAVE_POT_5, RAND_INF_GY_DAMPES_GRAVE_POT_5 }, + { RC_GY_DAMPES_GRAVE_POT_6, RAND_INF_GY_DAMPES_GRAVE_POT_6 }, + { RC_GC_LOWER_STAIRCASE_POT_1, RAND_INF_GC_LOWER_STAIRCASE_POT_1 }, + { RC_GC_LOWER_STAIRCASE_POT_2, RAND_INF_GC_LOWER_STAIRCASE_POT_2 }, + { RC_GC_UPPER_STAIRCASE_POT_1, RAND_INF_GC_UPPER_STAIRCASE_POT_1 }, + { RC_GC_UPPER_STAIRCASE_POT_2, RAND_INF_GC_UPPER_STAIRCASE_POT_2 }, + { RC_GC_UPPER_STAIRCASE_POT_3, RAND_INF_GC_UPPER_STAIRCASE_POT_3 }, + { RC_GC_MEDIGORON_POT_1, RAND_INF_GC_MEDIGORON_POT_1 }, + { RC_GC_DARUNIA_POT_1, RAND_INF_GC_DARUNIA_POT_1 }, + { RC_GC_DARUNIA_POT_2, RAND_INF_GC_DARUNIA_POT_2 }, + { RC_GC_DARUNIA_POT_3, RAND_INF_GC_DARUNIA_POT_3 }, + { RC_DMC_NEAR_GC_POT_1, RAND_INF_DMC_NEAR_GC_POT_1 }, + { RC_DMC_NEAR_GC_POT_2, RAND_INF_DMC_NEAR_GC_POT_2 }, + { RC_DMC_NEAR_GC_POT_3, RAND_INF_DMC_NEAR_GC_POT_3 }, + { RC_DMC_NEAR_GC_POT_4, RAND_INF_DMC_NEAR_GC_POT_4 }, + { RC_ZD_NEAR_SHOP_POT_1, RAND_INF_ZD_NEAR_SHOP_POT_1 }, + { RC_ZD_NEAR_SHOP_POT_2, RAND_INF_ZD_NEAR_SHOP_POT_2 }, + { RC_ZD_NEAR_SHOP_POT_3, RAND_INF_ZD_NEAR_SHOP_POT_3 }, + { RC_ZD_NEAR_SHOP_POT_4, RAND_INF_ZD_NEAR_SHOP_POT_4 }, + { RC_ZD_NEAR_SHOP_POT_5, RAND_INF_ZD_NEAR_SHOP_POT_5 }, + { RC_ZF_HIDDEN_CAVE_POT_1, RAND_INF_ZF_HIDDEN_CAVE_POT_1 }, + { RC_ZF_HIDDEN_CAVE_POT_2, RAND_INF_ZF_HIDDEN_CAVE_POT_2 }, + { RC_ZF_HIDDEN_CAVE_POT_3, RAND_INF_ZF_HIDDEN_CAVE_POT_3 }, + { RC_ZF_NEAR_JABU_POT_1, RAND_INF_ZF_NEAR_JABU_POT_1 }, + { RC_ZF_NEAR_JABU_POT_2, RAND_INF_ZF_NEAR_JABU_POT_2 }, + { RC_ZF_NEAR_JABU_POT_3, RAND_INF_ZF_NEAR_JABU_POT_3 }, + { RC_ZF_NEAR_JABU_POT_4, RAND_INF_ZF_NEAR_JABU_POT_4 }, + { RC_LLR_FRONT_POT_1, RAND_INF_LLR_FRONT_POT_1 }, + { RC_LLR_FRONT_POT_2, RAND_INF_LLR_FRONT_POT_2 }, + { RC_LLR_FRONT_POT_3, RAND_INF_LLR_FRONT_POT_3 }, + { RC_LLR_FRONT_POT_4, RAND_INF_LLR_FRONT_POT_4 }, + { RC_LLR_RAIN_SHED_POT_1, RAND_INF_LLR_RAIN_SHED_POT_1 }, + { RC_LLR_RAIN_SHED_POT_2, RAND_INF_LLR_RAIN_SHED_POT_2 }, + { RC_LLR_RAIN_SHED_POT_3, RAND_INF_LLR_RAIN_SHED_POT_3 }, + { RC_LLR_TALONS_HOUSE_POT_1, RAND_INF_LLR_TALONS_HOUSE_POT_1 }, + { RC_LLR_TALONS_HOUSE_POT_2, RAND_INF_LLR_TALONS_HOUSE_POT_2 }, + { RC_LLR_TALONS_HOUSE_POT_3, RAND_INF_LLR_TALONS_HOUSE_POT_3 }, + { RC_HF_COW_GROTTO_POT_1, RAND_INF_HF_COW_GROTTO_POT_1 }, + { RC_HF_COW_GROTTO_POT_2, RAND_INF_HF_COW_GROTTO_POT_2 }, + { RC_HC_STORMS_GROTTO_POT_1, RAND_INF_HC_STORMS_GROTTO_POT_1 }, + { RC_HC_STORMS_GROTTO_POT_2, RAND_INF_HC_STORMS_GROTTO_POT_2 }, + { RC_HC_STORMS_GROTTO_POT_3, RAND_INF_HC_STORMS_GROTTO_POT_3 }, + { RC_HC_STORMS_GROTTO_POT_4, RAND_INF_HC_STORMS_GROTTO_POT_4 }, + { RC_DODONGOS_CAVERN_LIZALFOS_POT_1, RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_1 }, + { RC_DODONGOS_CAVERN_LIZALFOS_POT_2, RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_2 }, + { RC_DODONGOS_CAVERN_LIZALFOS_POT_3, RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_3 }, + { RC_DODONGOS_CAVERN_LIZALFOS_POT_4, RAND_INF_DODONGOS_CAVERN_LIZALFOS_POT_4 }, + { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_1 }, + { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_2 }, + { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_3 }, + { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_4 }, + { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_5 }, + { RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6, RAND_INF_DODONGOS_CAVERN_SIDE_ROOM_POT_6 }, + { RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1, RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_1 }, + { RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2, RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_2 }, + { RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3, RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_3 }, + { RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4, RAND_INF_DODONGOS_CAVERN_TORCH_ROOM_POT_4 }, + { RC_DODONGOS_CAVERN_STAIRCASE_POT_1, RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_1 }, + { RC_DODONGOS_CAVERN_STAIRCASE_POT_2, RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_2 }, + { RC_DODONGOS_CAVERN_STAIRCASE_POT_3, RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_3 }, + { RC_DODONGOS_CAVERN_STAIRCASE_POT_4, RAND_INF_DODONGOS_CAVERN_STAIRCASE_POT_4 }, + { RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1, RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_1 }, + { RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2, RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_POT_2 }, + { RC_DODONGOS_CAVERN_BLADE_POT_1, RAND_INF_DODONGOS_CAVERN_BLADE_POT_1 }, + { RC_DODONGOS_CAVERN_BLADE_POT_2, RAND_INF_DODONGOS_CAVERN_BLADE_POT_2 }, + { RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1, RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_1 }, + { RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, RAND_INF_DODONGOS_CAVERN_DOUBLE_EYE_POT_2 }, + { RC_DODONGOS_CAVERN_BACK_ROOM_POT_1, RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_1 }, + { RC_DODONGOS_CAVERN_BACK_ROOM_POT_2, RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_2 }, + { RC_DODONGOS_CAVERN_BACK_ROOM_POT_3, RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_3 }, + { RC_DODONGOS_CAVERN_BACK_ROOM_POT_4, RAND_INF_DODONGOS_CAVERN_BACK_ROOM_POT_4 }, + { RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1 }, + { RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2, RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2 }, + { RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, RAND_INF_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3 }, + { RC_JABU_JABUS_BELLY_BARINADE_POT_1, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_1 }, + { RC_JABU_JABUS_BELLY_BARINADE_POT_2, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_2 }, + { RC_JABU_JABUS_BELLY_BARINADE_POT_3, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_3 }, + { RC_JABU_JABUS_BELLY_BARINADE_POT_4, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_4 }, + { RC_JABU_JABUS_BELLY_BARINADE_POT_5, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_5 }, + { RC_JABU_JABUS_BELLY_BARINADE_POT_6, RAND_INF_JABU_JABUS_BELLY_BARINADE_POT_6 }, + { RC_JABU_JABUS_BELLY_BASEMENT_POT_1, RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_1 }, + { RC_JABU_JABUS_BELLY_BASEMENT_POT_2, RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_2 }, + { RC_JABU_JABUS_BELLY_BASEMENT_POT_3, RAND_INF_JABU_JABUS_BELLY_BASEMENT_POT_3 }, + { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1 }, + { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2 }, + { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3 }, + { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4 }, + { RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, RAND_INF_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5 }, + { RC_FOREST_TEMPLE_LOBBY_POT_1, RAND_INF_FOREST_TEMPLE_LOBBY_POT_1 }, + { RC_FOREST_TEMPLE_LOBBY_POT_2, RAND_INF_FOREST_TEMPLE_LOBBY_POT_2 }, + { RC_FOREST_TEMPLE_LOBBY_POT_3, RAND_INF_FOREST_TEMPLE_LOBBY_POT_3 }, + { RC_FOREST_TEMPLE_LOBBY_POT_4, RAND_INF_FOREST_TEMPLE_LOBBY_POT_4 }, + { RC_FOREST_TEMPLE_LOBBY_POT_5, RAND_INF_FOREST_TEMPLE_LOBBY_POT_5 }, + { RC_FOREST_TEMPLE_LOBBY_POT_6, RAND_INF_FOREST_TEMPLE_LOBBY_POT_6 }, + { RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1, RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_1 }, + { RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, RAND_INF_FOREST_TEMPLE_LOWER_STALFOS_POT_2 }, + { RC_FOREST_TEMPLE_GREEN_POE_POT_1, RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_1 }, + { RC_FOREST_TEMPLE_GREEN_POE_POT_2, RAND_INF_FOREST_TEMPLE_GREEN_POE_POT_2 }, + { RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1, RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_1 }, + { RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2, RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_2 }, + { RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3, RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_3 }, + { RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4, RAND_INF_FOREST_TEMPLE_UPPER_STALFOS_POT_4 }, + { RC_FOREST_TEMPLE_BLUE_POE_POT_1, RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_1 }, + { RC_FOREST_TEMPLE_BLUE_POE_POT_2, RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_2 }, + { RC_FOREST_TEMPLE_BLUE_POE_POT_3, RAND_INF_FOREST_TEMPLE_BLUE_POE_POT_3 }, + { RC_FOREST_TEMPLE_FROZEN_EYE_POT_1, RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_1 }, + { RC_FOREST_TEMPLE_FROZEN_EYE_POT_2, RAND_INF_FOREST_TEMPLE_FROZEN_EYE_POT_2 }, + { RC_FIRE_TEMPLE_NEAR_BOSS_POT_1, RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_1 }, + { RC_FIRE_TEMPLE_NEAR_BOSS_POT_2, RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_2 }, + { RC_FIRE_TEMPLE_NEAR_BOSS_POT_3, RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_3 }, + { RC_FIRE_TEMPLE_NEAR_BOSS_POT_4, RAND_INF_FIRE_TEMPLE_NEAR_BOSS_POT_4 }, + { RC_FIRE_TEMPLE_BIG_LAVA_POT_1, RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_1 }, + { RC_FIRE_TEMPLE_BIG_LAVA_POT_2, RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_2 }, + { RC_FIRE_TEMPLE_BIG_LAVA_POT_3, RAND_INF_FIRE_TEMPLE_BIG_LAVA_POT_3 }, + { RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1 }, + { RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2 }, + { RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3 }, + { RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4 }, + { RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1 }, + { RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2 }, + { RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3 }, + { RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, RAND_INF_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4 }, + { RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_1 }, + { RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, RAND_INF_WATER_TEMPLE_MAIN_LEVEL_2_POT_2 }, + { RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_1 }, + { RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, RAND_INF_WATER_TEMPLE_MAIN_LEVEL_1_POT_2 }, + { RC_WATER_TEMPLE_TORCH_POT_1, RAND_INF_WATER_TEMPLE_TORCH_POT_1 }, + { RC_WATER_TEMPLE_TORCH_POT_2, RAND_INF_WATER_TEMPLE_TORCH_POT_2 }, + { RC_WATER_TEMPLE_NEAR_COMPASS_POT_1, RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_1 }, + { RC_WATER_TEMPLE_NEAR_COMPASS_POT_2, RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_2 }, + { RC_WATER_TEMPLE_NEAR_COMPASS_POT_3, RAND_INF_WATER_TEMPLE_NEAR_COMPASS_POT_3 }, + { RC_WATER_TEMPLE_CENTRAL_BOW_POT_1, RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_1 }, + { RC_WATER_TEMPLE_CENTRAL_BOW_POT_2, RAND_INF_WATER_TEMPLE_CENTRAL_BOW_POT_2 }, + { RC_WATER_TEMPLE_BEHIND_GATE_POT_1, RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_1 }, + { RC_WATER_TEMPLE_BEHIND_GATE_POT_2, RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_2 }, + { RC_WATER_TEMPLE_BEHIND_GATE_POT_3, RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_3 }, + { RC_WATER_TEMPLE_BEHIND_GATE_POT_4, RAND_INF_WATER_TEMPLE_BEHIND_GATE_POT_4 }, + { RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1, RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1 }, + { RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, RAND_INF_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2 }, + { RC_WATER_TEMPLE_RIVER_POT_1, RAND_INF_WATER_TEMPLE_RIVER_POT_1 }, + { RC_WATER_TEMPLE_RIVER_POT_2, RAND_INF_WATER_TEMPLE_RIVER_POT_2 }, + { RC_WATER_TEMPLE_LIKE_LIKE_POT_1, RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_1 }, + { RC_WATER_TEMPLE_LIKE_LIKE_POT_2, RAND_INF_WATER_TEMPLE_LIKE_LIKE_POT_2 }, + { RC_WATER_TEMPLE_BOSS_KEY_POT_1, RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_1 }, + { RC_WATER_TEMPLE_BOSS_KEY_POT_2, RAND_INF_WATER_TEMPLE_BOSS_KEY_POT_2 }, + { RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, RAND_INF_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1 }, + { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1 }, + { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2 }, + { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3 }, + { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4 }, + { RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, RAND_INF_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5 }, + { RC_SHADOW_TEMPLE_MAP_CHEST_POT_1, RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_1 }, + { RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, RAND_INF_SHADOW_TEMPLE_MAP_CHEST_POT_2 }, + { RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_1 }, + { RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_2 }, + { RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_3 }, + { RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, RAND_INF_SHADOW_TEMPLE_FALLING_SPIKES_POT_4 }, + { RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_1 }, + { RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, RAND_INF_SHADOW_TEMPLE_AFTER_WIND_POT_2 }, + { RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, RAND_INF_SHADOW_TEMPLE_SPIKE_WALLS_POT_1 }, + { RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_1 }, + { RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, RAND_INF_SHADOW_TEMPLE_FLOORMASTER_POT_2 }, + { RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1, RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_1 }, + { RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_2 }, + { RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_3 }, + { RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, RAND_INF_SHADOW_TEMPLE_AFTER_BOAT_POT_4 }, + { RC_SPIRIT_TEMPLE_LOBBY_POT_1, RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_1 }, + { RC_SPIRIT_TEMPLE_LOBBY_POT_2, RAND_INF_SPIRIT_TEMPLE_LOBBY_POT_2 }, + { RC_SPIRIT_TEMPLE_ANUBIS_POT_1, RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_1 }, + { RC_SPIRIT_TEMPLE_ANUBIS_POT_2, RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_2 }, + { RC_SPIRIT_TEMPLE_ANUBIS_POT_3, RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_3 }, + { RC_SPIRIT_TEMPLE_ANUBIS_POT_4, RAND_INF_SPIRIT_TEMPLE_ANUBIS_POT_4 }, + { RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, RAND_INF_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1 }, + { RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1 }, + { RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, RAND_INF_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2 }, + { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1 }, + { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2 }, + { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3 }, + { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4 }, + { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5 }, + { RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, RAND_INF_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6 }, + { RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, RAND_INF_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1 }, + { RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_FOREST_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_FIRE_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_WATER_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_WATER_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_WATER_TRIAL_POT_3, RAND_INF_GANONS_CASTLE_WATER_TRIAL_POT_3 }, + { RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_3 }, + { RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, RAND_INF_GANONS_CASTLE_SHADOW_TRIAL_POT_4 }, + { RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_SPIRIT_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1 }, + { RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_LIGHT_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_1, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_1 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_2, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_2 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_3, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_3 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_4, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_4 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_5, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_5 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_6, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_6 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_7, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_7 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_8, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_8 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_9, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_9 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_10, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_10 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_11, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_11 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_12, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_12 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_13, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_13 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_14, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_14 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_15, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_15 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_16, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_16 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_17, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_17 }, + { RC_GANONS_CASTLE_GANONS_TOWER_POT_18, RAND_INF_GANONS_CASTLE_GANONS_TOWER_POT_18 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_1 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_2 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_3 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_4 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_5 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_6 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_7 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_8 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_9 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_10 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_11 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_POT_12 }, + { RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1 }, + { RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2 }, + { RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, RAND_INF_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3 }, + { RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1 }, + { RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2 }, + { RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1 }, + { RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, RAND_INF_BOTTOM_OF_THE_WELL_UNDERWATER_POT }, + { RC_ICE_CAVERN_HALL_POT_1, RAND_INF_ICE_CAVERN_HALL_POT_1 }, + { RC_ICE_CAVERN_HALL_POT_2, RAND_INF_ICE_CAVERN_HALL_POT_2 }, + { RC_ICE_CAVERN_SPINNING_BLADE_POT_1, RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_1 }, + { RC_ICE_CAVERN_SPINNING_BLADE_POT_2, RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_2 }, + { RC_ICE_CAVERN_SPINNING_BLADE_POT_3, RAND_INF_ICE_CAVERN_SPINNING_BLADE_POT_3 }, + { RC_ICE_CAVERN_NEAR_END_POT_1, RAND_INF_ICE_CAVERN_NEAR_END_POT_1 }, + { RC_ICE_CAVERN_NEAR_END_POT_2, RAND_INF_ICE_CAVERN_NEAR_END_POT_2 }, + { RC_ICE_CAVERN_FROZEN_POT_1, RAND_INF_ICE_CAVERN_FROZEN_POT_1 }, + + { RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1 }, + { RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, RAND_INF_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2 }, + { RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_1 }, + { RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, RAND_INF_JABU_JABUS_BELLY_MQ_GEYSER_POT_2 }, + { RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1 }, + { RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, RAND_INF_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2 }, + { RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1 }, + { RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, RAND_INF_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2 }, + { RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1 }, + { RC_FOREST_TEMPLE_MQ_LOBBY_POT_1, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_1 }, + { RC_FOREST_TEMPLE_MQ_LOBBY_POT_2, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_2 }, + { RC_FOREST_TEMPLE_MQ_LOBBY_POT_3, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_3 }, + { RC_FOREST_TEMPLE_MQ_LOBBY_POT_4, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_4 }, + { RC_FOREST_TEMPLE_MQ_LOBBY_POT_5, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_5 }, + { RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, RAND_INF_FOREST_TEMPLE_MQ_LOBBY_POT_6 }, + { RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1, RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_1 }, + { RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, RAND_INF_FOREST_TEMPLE_MQ_LOWER_STALFOS_POT_2 }, + { RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1 }, + { RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2 }, + { RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3 }, + { RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, RAND_INF_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4 }, + { RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1, RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_1 }, + { RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2, RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_2 }, + { RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3, RAND_INF_FOREST_TEMPLE_MQ_BLUE_POE_POT_3 }, + { RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1, RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_1 }, + { RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, RAND_INF_FOREST_TEMPLE_MQ_GREEN_POE_POT_2 }, + { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1, RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_1 }, + { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2, RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_2 }, + { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3, RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_3 }, + { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, RAND_INF_FOREST_TEMPLE_MQ_BASEMENT_POT_4 }, + { RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2 }, + { RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3 }, + { RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, RAND_INF_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4 }, + { RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2 }, + { RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3 }, + { RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, RAND_INF_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4 }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2 }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3 }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4 }, + { RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT, RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT, RAND_INF_DODONGOS_CAVERN_MQ_BLOCK_ROOM_POT_2 }, + { RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2 }, + { RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_SILVER_BLOCK_POT_2 }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2 }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3 }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4 }, + { RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_2 }, + { RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_3 }, + { RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_POT_4 }, + { RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT, RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT, RAND_INF_DODONGOS_CAVERN_MQ_BEFORE_BOSS_POT_2 }, + { RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_1 }, + { RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, RAND_INF_DODONGOS_CAVERN_MQ_BACKROOM_POT_2 }, + { RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2 }, + { RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1 }, + { RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, RAND_INF_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2 }, + { RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1 }, + { RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, RAND_INF_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2 }, + { RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1 }, + { RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, RAND_INF_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2 }, + { RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT, RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_1 }, + { RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT, RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_2 }, + { RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_3 }, + { RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT, RAND_INF_SHADOW_TEMPLE_MQ_FALLING_SPIKES_POT_4 }, + { RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1, RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1 }, + { RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2, RAND_INF_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2 }, + { RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT, RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_1 }, + { RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT, RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_2 }, + { RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT, RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_3 }, + { RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT, RAND_INF_SHADOW_TEMPLE_MQ_AFTER_BOAT_POT_4 }, + { RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, RAND_INF_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT }, + { RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1 }, + { RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, RAND_INF_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2 }, + { RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1 }, + { RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2 }, + { RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, RAND_INF_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3 }, + { RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, RAND_INF_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT }, + { RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_1 }, + { RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_2 }, + { RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, RAND_INF_BOTTOM_OF_THE_WELL_MQ_SOUTH_KEY_POT_3 }, + { RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_1 }, + { RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, RAND_INF_FIRE_TEMPLE_MQ_ENTRANCE_POT_2 }, + { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1 }, + { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2 }, + { RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT, RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_1 }, + { RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT, RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_2 }, + { RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT, RAND_INF_FIRE_TEMPLE_MQ_LAVA_POT_3 }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1 }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2 }, + { RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1 }, + { RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2, RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2 }, + { RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, RAND_INF_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3 }, + { RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1 }, + { RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, RAND_INF_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2 }, + { RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_1 }, + { RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_2 }, + { RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_3 }, + { RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_4 }, + { RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_5 }, + { RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, RAND_INF_FIRE_TEMPLE_MQ_FIRE_MAZE_POT_6 }, + { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1 }, + { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2 }, + { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3 }, + { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4 }, + { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5 }, + { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6 }, + { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7 }, + { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, RAND_INF_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8 }, + { RC_ICE_CAVERN_MQ_ENTRANCE_POT, RAND_INF_ICE_CAVERN_MQ_ENTRANCE_POT }, + { RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1 }, + { RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2, RAND_INF_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2 }, + { RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1, RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1 }, + { RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2, RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2 }, + { RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3, RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3 }, + { RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4, RAND_INF_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4 }, + { RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1, RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1 }, + { RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, RAND_INF_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2 }, + { RC_ICE_CAVERN_MQ_COMPASS_POT_1, RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_1 }, + { RC_ICE_CAVERN_MQ_COMPASS_POT_2, RAND_INF_ICE_CAVERN_MQ_COMPASS_POT_2 }, + { RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1 }, + { RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2 }, + { RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3 }, + { RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, RAND_INF_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4 }, + { RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT }, + { RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1 }, + { RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2 }, + { RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT }, + { RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1 }, + { RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2 }, + { RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3 }, + { RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, RAND_INF_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4 }, + { RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_1 }, + { RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_2 }, + { RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_3 }, + { RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_4 }, + { RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, RAND_INF_SPIRIT_TEMPLE_MQ_CENTRAL_CHAMBER_POT_5 }, + { RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1 }, + { RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2 }, + { RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1 }, + { RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2 }, + { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1 }, + { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2 }, + { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3 }, + { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4 }, + { RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1 }, + { RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2 }, + { RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1 }, + { RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, RAND_INF_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2 }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_1 }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_2 }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_3 }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_4 }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_GATE_POT_5 }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1 }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2 }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3 }, + { RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1 }, + { RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2 }, + { RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_3 }, + { RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_4 }, + { RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT, RAND_INF_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_5 }, + { RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1 }, + { RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, RAND_INF_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2 }, + { RC_WATER_TEMPLE_MQ_RIVER_POT_1, RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_1 }, + { RC_WATER_TEMPLE_MQ_RIVER_POT_2, RAND_INF_WATER_TEMPLE_MQ_RIVER_POT_2 }, + { RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1 }, + { RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, RAND_INF_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2 }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1 }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2 }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1 }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2 }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3 }, + { RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1 }, + { RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, RAND_INF_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2 }, + { RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_1 }, + { RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_2 }, + { RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_3 }, + { RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, RAND_INF_WATER_TEMPLE_MQ_LOWEST_GS_POT_4 }, + { RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, RAND_INF_WATER_TEMPLE_MQ_BOSS_KEY_POT }, + { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1 }, + { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2 }, + { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1 }, + { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2 }, + // Crates + { + RC_GV_FREESTANDING_POH_CRATE, + RAND_INF_GV_FREESTANDING_POH_CRATE, + }, + { + RC_GV_NEAR_COW_CRATE, + RAND_INF_GV_NEAR_COW_CRATE, + }, + { + RC_GV_CRATE_BRIDGE_1, + RAND_INF_GV_CRATE_BRIDGE_1, + }, + { + RC_GV_CRATE_BRIDGE_2, + RAND_INF_GV_CRATE_BRIDGE_2, + }, + { + RC_GV_CRATE_BRIDGE_3, + RAND_INF_GV_CRATE_BRIDGE_3, + }, + { + RC_GV_CRATE_BRIDGE_4, + RAND_INF_GV_CRATE_BRIDGE_4, + }, + { + RC_GF_ABOVE_JAIL_CRATE, + RAND_INF_GF_ABOVE_JAIL_CRATE, + }, + { + RC_GF_OUTSIDE_CENTER_CRATE_1, + RAND_INF_GF_OUTSIDE_CENTER_CRATE_1, + }, + { + RC_GF_OUTSIDE_CENTER_CRATE_2, + RAND_INF_GF_OUTSIDE_CENTER_CRATE_2, + }, + { + RC_GF_OUTSIDE_CENTER_CRATE_3, + RAND_INF_GF_OUTSIDE_CENTER_CRATE_3, + }, + { + RC_GF_OUTSIDE_CENTER_CRATE_4, + RAND_INF_GF_OUTSIDE_CENTER_CRATE_4, + }, + { + RC_GF_OUTSIDE_LEFT_CRATE_1, + RAND_INF_GF_OUTSIDE_LEFT_CRATE_1, + }, + { + RC_GF_OUTSIDE_LEFT_CRATE_2, + RAND_INF_GF_OUTSIDE_LEFT_CRATE_2, + }, + { + RC_GF_ARCHERY_RANGE_CRATE_1, + RAND_INF_GF_ARCHERY_RANGE_CRATE_1, + }, + { + RC_GF_ARCHERY_RANGE_CRATE_2, + RAND_INF_GF_ARCHERY_RANGE_CRATE_2, + }, + { + RC_GF_ARCHERY_RANGE_CRATE_3, + RAND_INF_GF_ARCHERY_RANGE_CRATE_3, + }, + { + RC_GF_ARCHERY_RANGE_CRATE_4, + RAND_INF_GF_ARCHERY_RANGE_CRATE_4, + }, + { + RC_GF_ARCHERY_RANGE_CRATE_5, + RAND_INF_GF_ARCHERY_RANGE_CRATE_5, + }, + { + RC_GF_ARCHERY_RANGE_CRATE_6, + RAND_INF_GF_ARCHERY_RANGE_CRATE_6, + }, + { + RC_GF_ARCHERY_RANGE_CRATE_7, + RAND_INF_GF_ARCHERY_RANGE_CRATE_7, + }, + { + RC_GF_ARCHERY_START_CRATE_1, + RAND_INF_GF_ARCHERY_START_CRATE_1, + }, + { + RC_GF_ARCHERY_START_CRATE_2, + RAND_INF_GF_ARCHERY_START_CRATE_2, + }, + { + RC_GF_ARCHERY_LEFT_END_CRATE_1, + RAND_INF_GF_ARCHERY_LEFT_END_CRATE_1, + }, + { + RC_GF_ARCHERY_LEFT_END_CRATE_2, + RAND_INF_GF_ARCHERY_LEFT_END_CRATE_2, + }, + { + RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, + RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE, + }, + { + RC_GF_ARCHERY_RIGHT_END_CRATE_1, + RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_1, + }, + { + RC_GF_ARCHERY_RIGHT_END_CRATE_2, + RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2, + }, + { + RC_GF_KITCHEN_CRATE_1, + RAND_INF_GF_KITCHEN_CRATE_1, + }, + { + RC_GF_KITCHEN_CRATE_2, + RAND_INF_GF_KITCHEN_CRATE_2, + }, + { + RC_GF_KITCHEN_CRATE_3, + RAND_INF_GF_KITCHEN_CRATE_3, + }, + { + RC_GF_KITCHEN_CRATE_4, + RAND_INF_GF_KITCHEN_CRATE_4, + }, + { + RC_GF_KITCHEN_CRATE_5, + RAND_INF_GF_KITCHEN_CRATE_5, + }, + { + RC_GF_BREAK_ROOM_CRATE_1, + RAND_INF_GF_BREAK_ROOM_CRATE_1, + }, + { + RC_GF_BREAK_ROOM_CRATE_2, + RAND_INF_GF_BREAK_ROOM_CRATE_2, + }, + { + RC_GF_BREAK_ROOM_CRATE_3, + RAND_INF_GF_BREAK_ROOM_CRATE_3, + }, + { + RC_GF_BREAK_ROOM_CRATE_4, + RAND_INF_GF_BREAK_ROOM_CRATE_4, + }, + { + RC_GF_NORTH_F1_CARPENTER_CRATE, + RAND_INF_GF_NORTH_F1_CARPENTER_CRATE, + }, + { + RC_GF_NORTH_F3_CARPENTER_CRATE, + RAND_INF_GF_NORTH_F3_CARPENTER_CRATE, + }, + { + RC_GF_SOUTH_F2_CARPENTER_CRATE_1, + RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_1, + }, + { + RC_GF_SOUTH_F2_CARPENTER_CRATE_2, + RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2, + }, + { + RC_HW_BEFORE_QUICKSAND_CRATE, + RAND_INF_HW_BEFORE_QUICKSAND_CRATE, + }, + { + RC_HW_AFTER_QUICKSAND_CRATE_1, + RAND_INF_HW_AFTER_QUICKSAND_CRATE_1, + }, + { + RC_HW_AFTER_QUICKSAND_CRATE_2, + RAND_INF_HW_AFTER_QUICKSAND_CRATE_2, + }, + { + RC_HW_AFTER_QUICKSAND_CRATE_3, + RAND_INF_HW_AFTER_QUICKSAND_CRATE_3, + }, + { + RC_HW_NEAR_COLOSSUS_CRATE, + RAND_INF_HW_NEAR_COLOSSUS_CRATE, + }, + { + RC_MK_NEAR_BAZAAR_CRATE_1, + RAND_INF_MK_NEAR_BAZAAR_CRATE_1, + }, + { + RC_MK_NEAR_BAZAAR_CRATE_2, + RAND_INF_MK_NEAR_BAZAAR_CRATE_2, + }, + { + RC_MK_SHOOTING_GALLERY_CRATE_1, + RAND_INF_MK_SHOOTING_GALLERY_CRATE_1, + }, + { + RC_MK_SHOOTING_GALLERY_CRATE_2, + RAND_INF_MK_SHOOTING_GALLERY_CRATE_2, + }, + { + RC_MK_LOST_DOG_HOUSE_CRATE, + RAND_INF_MK_LOST_DOG_HOUSE_CRATE, + }, + { + RC_MK_GUARD_HOUSE_CRATE_1, + RAND_INF_MK_GUARD_HOUSE_CRATE_1, + }, + { + RC_MK_GUARD_HOUSE_CRATE_2, + RAND_INF_MK_GUARD_HOUSE_CRATE_2, + }, + { + RC_MK_GUARD_HOUSE_CRATE_3, + RAND_INF_MK_GUARD_HOUSE_CRATE_3, + }, + { + RC_MK_GUARD_HOUSE_CRATE_4, + RAND_INF_MK_GUARD_HOUSE_CRATE_4, + }, + { + RC_MK_GUARD_HOUSE_CRATE_5, + RAND_INF_MK_GUARD_HOUSE_CRATE_5, + }, + { + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, + }, + { + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, + }, + { + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, + }, + { + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, + }, + { + RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, + RAND_INF_KAK_NEAR_POTION_SHOP_ADULT_CRATE, + }, + { + RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, + RAND_INF_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, + }, + { + RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, + }, + { + RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, + }, + { + RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, + }, + { + RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, + }, + { + RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_1, + }, + { + RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_2, + }, + { + RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, + RAND_INF_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, + }, + { + RC_KAK_NEAR_GY_CHILD_CRATE, + RAND_INF_KAK_NEAR_GY_CHILD_CRATE, + }, + { + RC_KAK_NEAR_WINDMILL_CHILD_CRATE, + RAND_INF_KAK_NEAR_WINDMILL_CHILD_CRATE, + }, + { + RC_KAK_NEAR_FENCE_CHILD_CRATE, + RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE, + }, + { + RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, + RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, + }, + { + RC_KAK_NEAR_BAZAAR_CHILD_CRATE, + RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE, + }, + { + RC_GRAVEYARD_CRATE, + RAND_INF_GRAVEYARD_CRATE, + }, + { + RC_GC_MAZE_CRATE, + RAND_INF_GC_MAZE_CRATE, + }, + { + RC_DMC_CRATE, + RAND_INF_DMC_CRATE, + }, + { + RC_LLR_NEAR_TREE_CRATE, + RAND_INF_LLR_NEAR_TREE_CRATE, + }, + { + RC_LH_LAB_CRATE, + RAND_INF_LH_LAB_CRATE, + }, + + { + RC_DEKU_TREE_MQ_LOBBY_CRATE, + RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE, + }, + { + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, + }, + { + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, + }, + { + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, + }, + { + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, + }, + { + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, + }, + { + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, + }, + { + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, + }, + { + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, + }, + { + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, + }, + { + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, + }, + { + RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, + }, + { + RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, + }, + { + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, + }, + { + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, + }, + { + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, + }, + { + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, + }, + { + RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, + }, + { + RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, + }, + { + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, + }, + { + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, + }, + { + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, + }, + { + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, + }, + { + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, + }, + { + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, + }, + { + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, + }, + { + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, + }, + { + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, + }, + { + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, + }, + { + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, + }, + { + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, + }, + { + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, + }, + { + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, + }, + { + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, + }, + { + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, + }, + { + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, + }, + { + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, + }, + { + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, + }, + { + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, + }, + { + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, + }, + { + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, + }, + { + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, + }, + { + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, + }, + { + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, + }, + { + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, + }, + { + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, + }, + { + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, + }, + { + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, + }, + { + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, + }, + { + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, + }, + { + RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, + RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, + }, + { + RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, + RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, + }, + { + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, + }, + { + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, + }, + { + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, + }, + { + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, + }, + { + RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, + RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, + }, + + { + RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, + RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, + }, + { + RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, + RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, + }, + { + RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, + RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, + }, + { + RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, + RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, + }, + { + RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, + RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, + }, + { + RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, + RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, + }, + + { + RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, + RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, + }, + { + RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, + RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, + }, + { + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, + RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, + }, + { + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, + RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, + }, + { + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, + RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, + }, + { + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, + }, + { + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, + }, + { + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, + }, + { + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, + }, + { + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, + }, + { + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, + }, + { + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, + }, + { + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, + }, + { + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, + }, + { + RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, + RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, + }, + { + RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, + RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, + }, }; BeehiveIdentity Randomizer::IdentifyBeehive(s32 sceneNum, s16 xPosition, s32 respawnData) { @@ -1577,9 +3136,10 @@ Rando::Location* Randomizer::GetCheckObjectFromActor(s16 actorId, s16 sceneNum, auto fs = OTRGlobals::Instance->gRandoContext->GetFishsanity(); RandomizerCheck specialRc = RC_UNKNOWN_CHECK; // TODO: Migrate these special cases into table, or at least document why they are special - switch(sceneNum) { + switch (sceneNum) { case SCENE_TREASURE_BOX_SHOP: { - if ((actorId == ACTOR_EN_BOX && actorParams == 20170) || (actorId == ACTOR_ITEM_ETCETERA && actorParams == 2572)) { + if ((actorId == ACTOR_EN_BOX && actorParams == 20170) || + (actorId == ACTOR_ITEM_ETCETERA && actorParams == 2572)) { specialRc = RC_MARKET_TREASURE_CHEST_GAME_REWARD; } @@ -1626,11 +3186,21 @@ Rando::Location* Randomizer::GetCheckObjectFromActor(s16 actorId, s16 sceneNum, case SCENE_HOUSE_OF_SKULLTULA: if (actorId == ACTOR_EN_SSH) { switch (actorParams) { // actor params are used to differentiate between textboxes - case 1: specialRc = RC_KAK_10_GOLD_SKULLTULA_REWARD; break; - case 2: specialRc = RC_KAK_20_GOLD_SKULLTULA_REWARD; break; - case 3: specialRc = RC_KAK_30_GOLD_SKULLTULA_REWARD; break; - case 4: specialRc = RC_KAK_40_GOLD_SKULLTULA_REWARD; break; - case 5: specialRc = RC_KAK_50_GOLD_SKULLTULA_REWARD; break; + case 1: + specialRc = RC_KAK_10_GOLD_SKULLTULA_REWARD; + break; + case 2: + specialRc = RC_KAK_20_GOLD_SKULLTULA_REWARD; + break; + case 3: + specialRc = RC_KAK_30_GOLD_SKULLTULA_REWARD; + break; + case 4: + specialRc = RC_KAK_40_GOLD_SKULLTULA_REWARD; + break; + case 5: + specialRc = RC_KAK_50_GOLD_SKULLTULA_REWARD; + break; } } break; @@ -1688,11 +3258,10 @@ Rando::Location* Randomizer::GetCheckObjectFromActor(s16 actorId, s16 sceneNum, auto range = Rando::StaticData::CheckFromActorMultimap.equal_range(std::make_tuple(actorId, sceneNum, actorParams)); for (auto it = range.first; it != range.second; ++it) { - if ( - Rando::StaticData::GetLocation(it->second)->GetQuest() == RCQUEST_BOTH || - (Rando::StaticData::GetLocation(it->second)->GetQuest() == RCQUEST_VANILLA && !ResourceMgr_IsGameMasterQuest()) || - (Rando::StaticData::GetLocation(it->second)->GetQuest() == RCQUEST_MQ && ResourceMgr_IsGameMasterQuest()) - ) { + if (Rando::StaticData::GetLocation(it->second)->GetQuest() == RCQUEST_BOTH || + (Rando::StaticData::GetLocation(it->second)->GetQuest() == RCQUEST_VANILLA && + !ResourceMgr_IsGameMasterQuest()) || + (Rando::StaticData::GetLocation(it->second)->GetQuest() == RCQUEST_MQ && ResourceMgr_IsGameMasterQuest())) { return Rando::StaticData::GetLocation(it->second); } } @@ -1710,7 +3279,8 @@ ScrubIdentity Randomizer::IdentifyScrub(s32 sceneNum, s32 actorParams, s32 respa scrubIdentity.isShuffled = false; // Scrubs that are 0x06 are loaded as 0x03 when child, switching from selling arrows to seeds - if (actorParams == 0x06) actorParams = 0x03; + if (actorParams == 0x06) + actorParams = 0x03; if (sceneNum == SCENE_GROTTOS) { actorParams = TWO_ACTOR_PARAMS(actorParams, respawnData); @@ -1724,11 +3294,14 @@ ScrubIdentity Randomizer::IdentifyScrub(s32 sceneNum, s32 actorParams, s32 respa scrubIdentity.getItemId = (GetItemID)Rando::StaticData::RetrieveItem(location->GetVanillaItem()).GetItemID(); scrubIdentity.isShuffled = GetRandoSettingValue(RSK_SHUFFLE_SCRUBS) == RO_SCRUBS_ALL; - if (location->GetRandomizerCheck() == RC_HF_DEKU_SCRUB_GROTTO || location->GetRandomizerCheck() == RC_LW_DEKU_SCRUB_GROTTO_FRONT || location->GetRandomizerCheck() == RC_LW_DEKU_SCRUB_NEAR_BRIDGE) { + if (location->GetRandomizerCheck() == RC_HF_DEKU_SCRUB_GROTTO || + location->GetRandomizerCheck() == RC_LW_DEKU_SCRUB_GROTTO_FRONT || + location->GetRandomizerCheck() == RC_LW_DEKU_SCRUB_NEAR_BRIDGE) { scrubIdentity.isShuffled = GetRandoSettingValue(RSK_SHUFFLE_SCRUBS) != RO_SCRUBS_OFF; } - scrubIdentity.itemPrice = OTRGlobals::Instance->gRandoContext->GetItemLocation(scrubIdentity.randomizerCheck)->GetPrice(); + scrubIdentity.itemPrice = + OTRGlobals::Instance->gRandoContext->GetItemLocation(scrubIdentity.randomizerCheck)->GetPrice(); } return scrubIdentity; @@ -1747,9 +3320,11 @@ ShopItemIdentity Randomizer::IdentifyShopItem(s32 sceneNum, u8 slotIndex) { return shopItemIdentity; } - Rando::Location* location = GetCheckObjectFromActor(ACTOR_EN_GIRLA, + Rando::Location* location = GetCheckObjectFromActor( + ACTOR_EN_GIRLA, // Bazaar (SHOP1) scene is reused, so if entering from Kak use debug scene to identify - (sceneNum == SCENE_BAZAAR && gSaveContext.entranceIndex == ENTR_BAZAAR_0) ? SCENE_TEST01 : sceneNum, slotIndex - 1); + (sceneNum == SCENE_BAZAAR && gSaveContext.entranceIndex == ENTR_BAZAAR_0) ? SCENE_TEST01 : sceneNum, + slotIndex - 1); if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK) { shopItemIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; @@ -1762,7 +3337,8 @@ ShopItemIdentity Randomizer::IdentifyShopItem(s32 sceneNum, u8 slotIndex) { shopItemIdentity.enGirlAShopItem = randomizerGetToEnGirlShopItem[randoGet]; } - shopItemIdentity.itemPrice = OTRGlobals::Instance->gRandoContext->GetItemLocation(shopItemIdentity.randomizerCheck)->GetPrice(); + shopItemIdentity.itemPrice = + OTRGlobals::Instance->gRandoContext->GetItemLocation(shopItemIdentity.randomizerCheck)->GetPrice(); } return shopItemIdentity; @@ -1836,11 +3412,129 @@ FishIdentity Randomizer::IdentifyFish(s32 sceneNum, s32 actorParams) { return fishIdentity; } +GrassIdentity Randomizer::IdentifyGrass(s32 sceneNum, s32 posX, s32 posZ, s32 respawnData, s32 linkAge) { + struct GrassIdentity grassIdentity; + + grassIdentity.randomizerInf = RAND_INF_MAX; + grassIdentity.randomizerCheck = RC_UNKNOWN_CHECK; + + if (sceneNum == SCENE_GROTTOS) { + respawnData = TWO_ACTOR_PARAMS(posX, respawnData); + } else { + // We'll just pretend it's always daytime for our market bushes. + if (sceneNum == SCENE_MARKET_NIGHT) { + sceneNum = SCENE_MARKET_DAY; + + /* + The two bushes by the tree are not in the same spot + between night and day. We'll assume the coordinates + of the daytime bushes so that we can count them as + the same locations. + */ + if (posX == -74) { + posX = -106; + posZ = 277; + } + if (posX == -87) { + posX = -131; + posZ = 225; + } + } + + /* + Same as with Market. ZR has a bush slightly off pos + between Child and Adult. This is to merge them into + a single location. + */ + if (sceneNum == SCENE_ZORAS_RIVER) { + if (posX == 233) { + posX = 231; + posZ = -1478; + } + } + + // The two bushes behind the sign in KF should be separate + // locations between Child and Adult. + if (sceneNum == SCENE_KOKIRI_FOREST && linkAge == 0) { + if (posX == -498 || posX == -523) { + posZ = 0xFF; + } + } + + respawnData = TWO_ACTOR_PARAMS(posX, posZ); + } + + Rando::Location* location = GetCheckObjectFromActor(ACTOR_EN_KUSA, sceneNum, respawnData); + + if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK) { + grassIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; + grassIdentity.randomizerCheck = location->GetRandomizerCheck(); + } + + return grassIdentity; +} + +CrateIdentity Randomizer::IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ) { + struct CrateIdentity crateIdentity; + uint32_t crateSceneNum = sceneNum; + + // pretend night is day to align crates in market and align GF child/adult crates + if (sceneNum == SCENE_MARKET_NIGHT) { + crateSceneNum = SCENE_MARKET_DAY; + } else if (sceneNum == SCENE_GERUDOS_FORTRESS && gPlayState->linkAgeOnLoad == 1 && posX == 310) { + if (posZ == -1830) { + posZ = -1842.0f; + } else if (posZ == -1770) { + posZ = -1782.0f; + } + } + + crateIdentity.randomizerInf = RAND_INF_MAX; + crateIdentity.randomizerCheck = RC_UNKNOWN_CHECK; + + s32 actorParams = TWO_ACTOR_PARAMS(posX, posZ); + + Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_KIBAKO2, crateSceneNum, actorParams); + + if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { + LUSLOG_WARN("IdentifyCrate did not receive a valid RC value (%d).", location->GetRandomizerCheck()); + assert(false); + } else { + crateIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; + crateIdentity.randomizerCheck = location->GetRandomizerCheck(); + } + + return crateIdentity; +} + +SmallCrateIdentity Randomizer::IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ) { + struct SmallCrateIdentity smallCrateIdentity; + uint32_t smallCrateSceneNum = sceneNum; + + smallCrateIdentity.randomizerInf = RAND_INF_MAX; + smallCrateIdentity.randomizerCheck = RC_UNKNOWN_CHECK; + + s32 actorParams = TWO_ACTOR_PARAMS(posX, posZ); + + Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_KIBAKO, smallCrateSceneNum, actorParams); + + if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { + LUSLOG_WARN("IdentifyCrate did not receive a valid RC value (%d).", location->GetRandomizerCheck()); + assert(false); + } else { + smallCrateIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; + smallCrateIdentity.randomizerCheck = location->GetRandomizerCheck(); + } + + return smallCrateIdentity; +} + u8 Randomizer::GetRandoSettingValue(RandomizerSettingKey randoSettingKey) { return Rando::Context::GetInstance()->GetOption(randoSettingKey).Get(); } -GetItemEntry Randomizer::GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, bool checkObtainability) { +GetItemEntry Randomizer::GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, + bool checkObtainability) { return Rando::Context::GetInstance()->GetFinalGIEntry(randomizerCheck, checkObtainability); } @@ -1852,13 +3546,14 @@ RandomizerInf Randomizer::GetRandomizerInfFromCheck(RandomizerCheck rc) { auto rcIt = rcToRandomizerInf.find(rc); if (rcIt == rcToRandomizerInf.end()) return RAND_INF_MAX; - + return rcIt->second; } RandomizerCheck Randomizer::GetCheckFromRandomizerInf(RandomizerInf randomizerInf) { for (auto const& [key, value] : rcToRandomizerInf) { - if (value == randomizerInf) return key; + if (value == randomizerInf) + return key; } return RC_UNKNOWN_CHECK; @@ -1870,10 +3565,9 @@ void GenerateRandomizerImgui(std::string seed = "") { CVarSetInteger(CVAR_GENERAL("RandoGenerating"), 1); CVarSave(); auto ctx = Rando::Context::GetInstance(); - //RANDOTODO proper UI for selecting if a spoiler loaded should be used for settings - Rando::Settings::GetInstance()->SetAllFromCVar(); + // RANDOTODO proper UI for selecting if a spoiler loaded should be used for settings Rando::Settings::GetInstance()->SetAllToContext(); - + // todo: this efficently when we build out cvar array support std::set excludedLocations; std::stringstream excludedLocationStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), "")); @@ -1883,14 +3577,13 @@ void GenerateRandomizerImgui(std::string seed = "") { } // todo: better way to sort out linking tricks rather than name - + std::set enabledTricks; std::stringstream enabledTrickStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), "")); std::string enabledTrickString; while (getline(enabledTrickStringStream, enabledTrickString, ',')) { enabledTricks.insert((RandomizerTrick)std::stoi(enabledTrickString)); } - // Update the visibilitiy before removing conflicting excludes (in case the locations tab wasn't viewed) RandomizerCheckObjects::UpdateImGuiVisibility(); @@ -1925,11 +3618,10 @@ bool GenerateRandomizer(std::string seed /*= ""*/) { static const std::unordered_map randomizerPresetList = { { RANDOMIZER_PRESET_DEFAULT, "Default" }, - { RANDOMIZER_PRESET_SPOCK_RACE, "Spock Race" }, - { RANDOMIZER_PRESET_SPOCK_RACE_NO_LOGIC, "Spock Race (No Logic)" }, - { RANDOMIZER_PRESET_S6, "S6" }, - { RANDOMIZER_PRESET_HELL_MODE, "Hell Mode" }, - { RANDOMIZER_PRESET_BENCHMARK, "Benchmark" } + { RANDOMIZER_PRESET_BEGINNER, "Beginner" }, + { RANDOMIZER_PRESET_STANDARD, "Standard" }, + { RANDOMIZER_PRESET_ADVANCED, "Advanced" }, + { RANDOMIZER_PRESET_HELL_MODE, "Hell Mode" } }; static int32_t randomizerPresetSelected = RANDOMIZER_PRESET_DEFAULT; @@ -1939,32 +3631,38 @@ void RandomizerSettingsWindow::DrawElement() { generated = 0; randoThread.join(); } - bool disableEditingRandoSettings = CVarGetInteger(CVAR_GENERAL("RandoGenerating"), 0) || CVarGetInteger(CVAR_GENERAL("OnFileSelectNameEntry"), 0); + static bool locationsTabOpen = false; + static bool tricksTabOpen = false; + bool disableEditingRandoSettings = + CVarGetInteger(CVAR_GENERAL("RandoGenerating"), 0) || CVarGetInteger(CVAR_GENERAL("OnFileSelectNameEntry"), 0); ImGui::BeginDisabled(CVarGetInteger(CVAR_SETTING("DisableChanges"), 0) || disableEditingRandoSettings); const PresetTypeDefinition presetTypeDef = presetTypes.at(PRESET_TYPE_RANDOMIZER); std::string comboboxTooltip = ""; for (auto iter = presetTypeDef.presets.begin(); iter != presetTypeDef.presets.end(); ++iter) { - if (iter->first != 0) comboboxTooltip += "\n\n"; + if (iter->first != 0) + comboboxTooltip += "\n\n"; comboboxTooltip += std::string(iter->second.label) + " - " + std::string(iter->second.description); } const std::string presetTypeCvar = CVAR_GENERAL("SelectedPresets.") + std::to_string(PRESET_TYPE_RANDOMIZER); randomizerPresetSelected = CVarGetInteger(presetTypeCvar.c_str(), RANDOMIZER_PRESET_DEFAULT); - if (UIWidgets::Combobox("Randomizer Presets", &randomizerPresetSelected, randomizerPresetList, UIWidgets::ComboboxOptions() - .DefaultIndex(RANDOMIZER_PRESET_DEFAULT) - .Tooltip(comboboxTooltip.c_str()) - .Color(THEME_COLOR)) - ) { + if (UIWidgets::Combobox("Randomizer Presets", &randomizerPresetSelected, randomizerPresetList, + UIWidgets::ComboboxOptions() + .DefaultIndex(RANDOMIZER_PRESET_DEFAULT) + .Tooltip(comboboxTooltip.c_str()) + .Color(THEME_COLOR))) { CVarSetInteger(presetTypeCvar.c_str(), randomizerPresetSelected); } ImGui::SameLine(); ImGui::SetCursorPosY(ImGui::GetCursorPos().y + 35.f); - if (UIWidgets::Button("Apply Preset##Randomizer", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline).Padding(ImVec2(10.f, 6.f)))) { + if (UIWidgets::Button( + "Apply Preset##Randomizer", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline).Padding(ImVec2(10.f, 6.f)))) { if (randomizerPresetSelected >= presetTypeDef.presets.size()) { randomizerPresetSelected = 0; } const PresetDefinition selectedPresetDef = presetTypeDef.presets.at(randomizerPresetSelected); - for(const char* block : presetTypeDef.blocksToClear) { + for (const char* block : presetTypeDef.blocksToClear) { CVarClearBlock(block); } if (randomizerPresetSelected != 0) { @@ -1972,38 +3670,51 @@ void RandomizerSettingsWindow::DrawElement() { } CVarSetInteger(presetTypeCvar.c_str(), randomizerPresetSelected); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); + mSettings->UpdateOptionProperties(); + // force excluded location list and trick list update if tab is open. + locationsTabOpen = false; + tricksTabOpen = false; } UIWidgets::Spacer(0); - UIWidgets::CVarCheckbox("Manual seed entry", CVAR_RANDOMIZER_SETTING("ManualSeedEntry"), UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CVarCheckbox("Manual seed entry", CVAR_RANDOMIZER_SETTING("ManualSeedEntry"), + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ManualSeedEntry"), 0)) { UIWidgets::PushStyleInput(THEME_COLOR); - ImGui::InputText("##RandomizerSeed", seedString, MAX_SEED_STRING_SIZE, ImGuiInputTextFlags_CallbackCharFilter, UIWidgets::TextFilters::FilterAlphaNum); - UIWidgets::Tooltip( - "Characters from a-z, A-Z, and 0-9 are supported.\n" - "Character limit is 1023, after which the seed will be truncated.\n" - ); + ImGui::InputText("##RandomizerSeed", seedString, MAX_SEED_STRING_SIZE, ImGuiInputTextFlags_CallbackCharFilter, + UIWidgets::TextFilters::FilterAlphaNum); + UIWidgets::Tooltip("Characters from a-z, A-Z, and 0-9 are supported.\n" + "Character limit is 1023, after which the seed will be truncated.\n"); + ImGui::SameLine(); + if (UIWidgets::Button( + ICON_FA_RANDOM, + UIWidgets::ButtonOptions() + .Size(UIWidgets::Sizes::Inline) + .Color(THEME_COLOR) + .Padding(ImVec2(10.f, 6.f)) + .Tooltip("Creates a new random seed value to be used when generating a randomizer"))) { + SohUtils::CopyStringToCharArray(seedString, std::to_string(rand() & 0xFFFFFFFF), MAX_SEED_STRING_SIZE); + } + ImGui::SameLine(); + if (UIWidgets::Button(ICON_FA_ERASER, UIWidgets::ButtonOptions() + .Size(UIWidgets::Sizes::Inline) + .Color(THEME_COLOR) + .Padding(ImVec2(10.f, 6.f)))) { + memset(seedString, 0, MAX_SEED_STRING_SIZE); + } if (strnlen(seedString, MAX_SEED_STRING_SIZE) == 0) { ImGui::SameLine(17.0f); ImGui::TextColored(ImVec4(1.0f, 1.0f, 1.0f, 0.4f), "Leave blank for random seed"); } UIWidgets::PopStyleInput(); - ImGui::SameLine(0.f, 50.f); - if (UIWidgets::Button(ICON_FA_RANDOM, UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR).Padding(ImVec2(10.f, 6.f)).Tooltip( - "Creates a new random seed value to be used when generating a randomizer" - ))) { - SohUtils::CopyStringToCharArray(seedString, std::to_string(rand() & 0xFFFFFFFF), MAX_SEED_STRING_SIZE); - } - ImGui::SameLine(); - if (UIWidgets::Button(ICON_FA_ERASER, UIWidgets::ButtonOptions().Size(UIWidgets::Sizes::Inline).Color(THEME_COLOR).Padding(ImVec2(10.f, 6.f)))) { - memset(seedString, 0, MAX_SEED_STRING_SIZE); - } } UIWidgets::Spacer(0); - ImGui::BeginDisabled((CVarGetInteger(CVAR_RANDOMIZER_SETTING("DontGenerateSpoiler"), 0) && gSaveContext.gameMode != GAMEMODE_FILE_SELECT) || - GameInteractor::IsSaveLoaded()); - if (UIWidgets::Button("Generate Randomizer", UIWidgets::ButtonOptions().Size(ImVec2(250.f, 0.f)).Color(THEME_COLOR))) { + ImGui::BeginDisabled((CVarGetInteger(CVAR_RANDOMIZER_SETTING("DontGenerateSpoiler"), 0) && + gSaveContext.gameMode != GAMEMODE_FILE_SELECT) || + GameInteractor::IsSaveLoaded()); + if (UIWidgets::Button("Generate Randomizer", + UIWidgets::ButtonOptions().Size(ImVec2(250.f, 0.f)).Color(THEME_COLOR))) { ctx->SetSpoilerLoaded(false); GenerateRandomizer(CVarGetInteger(CVAR_RANDOMIZER_SETTING("ManualSeedEntry"), 0) ? seedString : ""); } @@ -2036,10 +3747,12 @@ void RandomizerSettingsWindow::DrawElement() { ImGui::EndTabItem(); } - ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == RO_LOGIC_VANILLA); + ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == + RO_LOGIC_VANILLA); if (ImGui::BeginTabItem("Items")) { ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, cellPadding); - ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == RO_LOGIC_VANILLA); + ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == + RO_LOGIC_VANILLA); if (mSettings->GetOptionGroup(RSG_ITEMS_IMGUI_TABLE).RenderImGui()) { mNeedsUpdate = true; } @@ -2049,7 +3762,8 @@ void RandomizerSettingsWindow::DrawElement() { } ImGui::EndDisabled(); - ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == RO_LOGIC_VANILLA); + ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == + RO_LOGIC_VANILLA); if (ImGui::BeginTabItem("Gameplay")) { ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, cellPadding); if (mSettings->GetOptionGroup(RSG_GAMEPLAY_IMGUI_TABLE).RenderImGui()) { @@ -2060,15 +3774,16 @@ void RandomizerSettingsWindow::DrawElement() { } ImGui::EndDisabled(); - ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == RO_LOGIC_VANILLA); - static bool locationsTabOpen = false; + ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == + RO_LOGIC_VANILLA); if (ImGui::BeginTabItem("Locations")) { ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, cellPadding); if (!locationsTabOpen) { locationsTabOpen = true; RandomizerCheckObjects::UpdateImGuiVisibility(); // todo: this efficently when we build out cvar array support - std::stringstream excludedLocationStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), "")); + std::stringstream excludedLocationStringStream( + CVarGetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), "")); std::string excludedLocationString; excludedLocations.clear(); while (getline(excludedLocationStringStream, excludedLocationString, ',')) { @@ -2110,7 +3825,8 @@ void RandomizerSettingsWindow::DrawElement() { if (ImGui::TreeNode(RandomizerCheckObjects::GetRCAreaName(rcArea).c_str())) { for (auto& location : locations) { if (ctx->GetItemLocation(location)->IsVisible() && !excludedLocations.count(location) && - locationSearch.PassFilter(Rando::StaticData::GetLocation(location)->GetName().c_str())) { + locationSearch.PassFilter( + Rando::StaticData::GetLocation(location)->GetName().c_str())) { UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f)); if (ImGui::ArrowButton(std::to_string(location).c_str(), ImGuiDir_Right)) { excludedLocations.insert(location); @@ -2120,8 +3836,12 @@ void RandomizerSettingsWindow::DrawElement() { excludedLocationString += std::to_string(excludedLocationIt); excludedLocationString += ","; } - CVarSetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), excludedLocationString.c_str()); - Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); + CVarSetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), + excludedLocationString.c_str()); + Ship::Context::GetInstance() + ->GetWindow() + ->GetGui() + ->SaveConsoleVariablesNextFrame(); } UIWidgets::PopStyleButton(); ImGui::SameLine(); @@ -2166,9 +3886,13 @@ void RandomizerSettingsWindow::DrawElement() { if (excludedLocationString == "") { CVarClear(CVAR_RANDOMIZER_SETTING("ExcludedLocations")); } else { - CVarSetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), excludedLocationString.c_str()); + CVarSetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), + excludedLocationString.c_str()); } - Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); + Ship::Context::GetInstance() + ->GetWindow() + ->GetGui() + ->SaveConsoleVariablesNextFrame(); } UIWidgets::PopStyleButton(); ImGui::SameLine(); @@ -2190,19 +3914,19 @@ void RandomizerSettingsWindow::DrawElement() { } ImGui::EndDisabled(); - static bool tricksTabOpen = false; if (ImGui::BeginTabItem("Tricks/Glitches")) { if (!tricksTabOpen) { tricksTabOpen = true; - //RandomizerTricks::UpdateImGuiVisibility(); - // todo: this efficently when we build out cvar array support + // RandomizerTricks::UpdateImGuiVisibility(); + // todo: this efficently when we build out cvar array support std::stringstream enabledTrickStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), "")); std::string enabledTrickString; enabledTricks.clear(); while (getline(enabledTrickStringStream, enabledTrickString, ',')) { enabledTricks.insert((RandomizerTrick)std::stoi(enabledTrickString)); } - std::stringstream enabledGlitchStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledGlitches"), "")); + std::stringstream enabledGlitchStringStream( + CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledGlitches"), "")); std::string enabledGlitchString; enabledGlitches.clear(); while (getline(enabledGlitchStringStream, enabledGlitchString, ',')) { @@ -2228,93 +3952,93 @@ void RandomizerSettingsWindow::DrawElement() { } if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == RO_LOGIC_VANILLA) { ImGui::SameLine(); - ImGui::TextColored(ImVec4(1.0f, 0.0f, 0.0f, 1.0f), "Heads up! This will disable all rando settings except for entrance shuffle and starter items"); + ImGui::TextColored( + ImVec4(1.0f, 0.0f, 0.0f, 1.0f), + "Heads up! This will disable all rando settings except for entrance shuffle and starter items"); } ImGui::PopItemWidth(); ImGui::EndTable(); } - ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == RO_LOGIC_VANILLA); + ImGui::BeginDisabled(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == + RO_LOGIC_VANILLA); // Tricks - static std::unordered_map areaTreeDisabled { - {RA_NONE, true}, - {RA_KOKIRI_FOREST, true}, - {RA_THE_LOST_WOODS, true}, - {RA_SACRED_FOREST_MEADOW, true}, - {RA_HYRULE_FIELD, true}, - {RA_LAKE_HYLIA, true}, - {RA_GERUDO_VALLEY, true}, - {RA_GERUDO_FORTRESS, true}, - {RA_HAUNTED_WASTELAND, true}, - {RA_DESERT_COLOSSUS, true}, - {RA_THE_MARKET, true}, - {RA_HYRULE_CASTLE, true}, - {RA_KAKARIKO_VILLAGE, true}, - {RA_THE_GRAVEYARD, true}, - {RA_DEATH_MOUNTAIN_TRAIL, true}, - {RA_GORON_CITY, true}, - {RA_DEATH_MOUNTAIN_CRATER, true}, - {RA_ZORAS_RIVER, true}, - {RA_ZORAS_DOMAIN, true}, - {RA_ZORAS_FOUNTAIN, true}, - {RA_LON_LON_RANCH, true}, - {RA_DEKU_TREE, true}, - {RA_DODONGOS_CAVERN, true}, - {RA_JABU_JABUS_BELLY, true}, - {RA_FOREST_TEMPLE, true}, - {RA_FIRE_TEMPLE, true}, - {RA_WATER_TEMPLE, true}, - {RA_SPIRIT_TEMPLE, true}, - {RA_SHADOW_TEMPLE, true}, - {RA_BOTTOM_OF_THE_WELL, true}, - {RA_ICE_CAVERN, true}, - {RA_GERUDO_TRAINING_GROUND, true}, - {RA_GANONS_CASTLE, true} + static std::unordered_map areaTreeDisabled{ + { RA_NONE, true }, + { RA_KOKIRI_FOREST, true }, + { RA_THE_LOST_WOODS, true }, + { RA_SACRED_FOREST_MEADOW, true }, + { RA_HYRULE_FIELD, true }, + { RA_LAKE_HYLIA, true }, + { RA_GERUDO_VALLEY, true }, + { RA_GERUDO_FORTRESS, true }, + { RA_HAUNTED_WASTELAND, true }, + { RA_DESERT_COLOSSUS, true }, + { RA_THE_MARKET, true }, + { RA_HYRULE_CASTLE, true }, + { RA_KAKARIKO_VILLAGE, true }, + { RA_THE_GRAVEYARD, true }, + { RA_DEATH_MOUNTAIN_TRAIL, true }, + { RA_GORON_CITY, true }, + { RA_DEATH_MOUNTAIN_CRATER, true }, + { RA_ZORAS_RIVER, true }, + { RA_ZORAS_DOMAIN, true }, + { RA_ZORAS_FOUNTAIN, true }, + { RA_LON_LON_RANCH, true }, + { RA_DEKU_TREE, true }, + { RA_DODONGOS_CAVERN, true }, + { RA_JABU_JABUS_BELLY, true }, + { RA_FOREST_TEMPLE, true }, + { RA_FIRE_TEMPLE, true }, + { RA_WATER_TEMPLE, true }, + { RA_SPIRIT_TEMPLE, true }, + { RA_SHADOW_TEMPLE, true }, + { RA_BOTTOM_OF_THE_WELL, true }, + { RA_ICE_CAVERN, true }, + { RA_GERUDO_TRAINING_GROUND, true }, + { RA_GANONS_CASTLE, true }, }; - static std::unordered_map areaTreeEnabled { - {RA_NONE, true}, - {RA_KOKIRI_FOREST, true}, - {RA_THE_LOST_WOODS, true}, - {RA_SACRED_FOREST_MEADOW, true}, - {RA_HYRULE_FIELD, true}, - {RA_LAKE_HYLIA, true}, - {RA_GERUDO_VALLEY, true}, - {RA_GERUDO_FORTRESS, true}, - {RA_HAUNTED_WASTELAND, true}, - {RA_DESERT_COLOSSUS, true}, - {RA_THE_MARKET, true}, - {RA_HYRULE_CASTLE, true}, - {RA_KAKARIKO_VILLAGE, true}, - {RA_THE_GRAVEYARD, true}, - {RA_DEATH_MOUNTAIN_TRAIL, true}, - {RA_GORON_CITY, true}, - {RA_DEATH_MOUNTAIN_CRATER, true}, - {RA_ZORAS_RIVER, true}, - {RA_ZORAS_DOMAIN, true}, - {RA_ZORAS_FOUNTAIN, true}, - {RA_LON_LON_RANCH, true}, - {RA_DEKU_TREE, true}, - {RA_DODONGOS_CAVERN, true}, - {RA_JABU_JABUS_BELLY, true}, - {RA_FOREST_TEMPLE, true}, - {RA_FIRE_TEMPLE, true}, - {RA_WATER_TEMPLE, true}, - {RA_SPIRIT_TEMPLE, true}, - {RA_SHADOW_TEMPLE, true}, - {RA_BOTTOM_OF_THE_WELL, true}, - {RA_ICE_CAVERN, true}, - {RA_GERUDO_TRAINING_GROUND, true}, - {RA_GANONS_CASTLE, true} + static std::unordered_map areaTreeEnabled{ + { RA_NONE, true }, + { RA_KOKIRI_FOREST, true }, + { RA_THE_LOST_WOODS, true }, + { RA_SACRED_FOREST_MEADOW, true }, + { RA_HYRULE_FIELD, true }, + { RA_LAKE_HYLIA, true }, + { RA_GERUDO_VALLEY, true }, + { RA_GERUDO_FORTRESS, true }, + { RA_HAUNTED_WASTELAND, true }, + { RA_DESERT_COLOSSUS, true }, + { RA_THE_MARKET, true }, + { RA_HYRULE_CASTLE, true }, + { RA_KAKARIKO_VILLAGE, true }, + { RA_THE_GRAVEYARD, true }, + { RA_DEATH_MOUNTAIN_TRAIL, true }, + { RA_GORON_CITY, true }, + { RA_DEATH_MOUNTAIN_CRATER, true }, + { RA_ZORAS_RIVER, true }, + { RA_ZORAS_DOMAIN, true }, + { RA_ZORAS_FOUNTAIN, true }, + { RA_LON_LON_RANCH, true }, + { RA_DEKU_TREE, true }, + { RA_DODONGOS_CAVERN, true }, + { RA_JABU_JABUS_BELLY, true }, + { RA_FOREST_TEMPLE, true }, + { RA_FIRE_TEMPLE, true }, + { RA_WATER_TEMPLE, true }, + { RA_SPIRIT_TEMPLE, true }, + { RA_SHADOW_TEMPLE, true }, + { RA_BOTTOM_OF_THE_WELL, true }, + { RA_ICE_CAVERN, true }, + { RA_GERUDO_TRAINING_GROUND, true }, + { RA_GANONS_CASTLE, true }, }; - static std::map showTag { - { Rando::Tricks::Tag::NOVICE, true }, - { Rando::Tricks::Tag::INTERMEDIATE, true }, - { Rando::Tricks::Tag::ADVANCED, true }, - { Rando::Tricks::Tag::EXPERT, true }, - { Rando::Tricks::Tag::EXTREME, true }, - { Rando::Tricks::Tag::EXPERIMENTAL, true }, + static std::map showTag{ + { Rando::Tricks::Tag::NOVICE, true }, { Rando::Tricks::Tag::INTERMEDIATE, true }, + { Rando::Tricks::Tag::ADVANCED, true }, { Rando::Tricks::Tag::EXPERT, true }, + { Rando::Tricks::Tag::EXTREME, true }, { Rando::Tricks::Tag::EXPERIMENTAL, true }, //{ Rando::Tricks::Tag::GLITCH, false }, }; static ImGuiTextFilter trickSearch; @@ -2323,7 +4047,8 @@ void RandomizerSettingsWindow::DrawElement() { UIWidgets::PopStyleInput(); if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) != RO_LOGIC_NO_LOGIC) { ImGui::SameLine(); - if (UIWidgets::Button("Disable All", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(250.f, 0.f)))) { + if (UIWidgets::Button("Disable All", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(250.f, 0.f)))) { for (int i = 0; i < RT_MAX; i++) { auto etfound = enabledTricks.find(static_cast(i)); if (etfound != enabledTricks.end()) { @@ -2339,7 +4064,8 @@ void RandomizerSettingsWindow::DrawElement() { Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } ImGui::SameLine(); - if (UIWidgets::Button("Enable All", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(250.f, 0.f)))) { + if (UIWidgets::Button("Enable All", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(250.f, 0.f)))) { for (int i = 0; i < RT_MAX; i++) { if (!enabledTricks.count(static_cast(i))) { enabledTricks.insert(static_cast(i)); @@ -2354,7 +4080,9 @@ void RandomizerSettingsWindow::DrawElement() { Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } } - if (ImGui::BeginTable("trickTags", showTag.size(), ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings | ImGuiTableFlags_Borders)) { + if (ImGui::BeginTable("trickTags", showTag.size(), + ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings | + ImGuiTableFlags_Borders)) { for (auto [rtTag, isShown] : showTag) { ImGui::TableNextColumn(); if (isShown) { @@ -2382,19 +4110,22 @@ void RandomizerSettingsWindow::DrawElement() { ImGui::TableNextColumn(); window->DC.CurrLineTextBaseOffset = 0.0f; - if (UIWidgets::Button("Collapse All##disabled", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { + if (UIWidgets::Button("Collapse All##disabled", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { for (int i = 0; i < RA_MAX; i++) { areaTreeDisabled[static_cast(i)] = false; } } ImGui::SameLine(); - if (UIWidgets::Button("Open All##disabled", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { + if (UIWidgets::Button("Open All##disabled", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { for (int i = 0; i < RA_MAX; i++) { areaTreeDisabled[static_cast(i)] = true; } } ImGui::SameLine(); - if (UIWidgets::Button("Enable Visible", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { + if (UIWidgets::Button("Enable Visible", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { for (int i = 0; i < RT_MAX; i++) { auto option = mSettings->GetTrickOption(static_cast(i)); if (!enabledTricks.count(static_cast(i)) && @@ -2413,7 +4144,8 @@ void RandomizerSettingsWindow::DrawElement() { Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } - ImGui::BeginChild("ChildTricksDisabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar); + ImGui::BeginChild("ChildTricksDisabled", ImVec2(0, -8), false, + ImGuiWindowFlags_HorizontalScrollbar); for (auto [area, trickIds] : mSettings->mTricksByArea) { bool hasTricks = false; @@ -2426,14 +4158,20 @@ void RandomizerSettingsWindow::DrawElement() { } } if (hasTricks) { - ImGui::TreeNodeSetOpen(ImGui::GetID((Rando::Tricks::GetAreaName(area) + "##disabled").c_str()), areaTreeDisabled[area]); + ImGui::TreeNodeSetOpen( + ImGui::GetID((Rando::Tricks::GetAreaName(area) + "##disabled").c_str()), + areaTreeDisabled[area]); ImGui::SetNextItemOpen(true, ImGuiCond_Once); if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##disabled").c_str())) { for (auto rt : trickIds) { auto option = mSettings->GetTrickOption(rt); if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) && - !enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) { - ImGui::TreeNodeSetOpen(ImGui::GetID((Rando::Tricks::GetAreaName(option.GetArea()) + "##disabled").c_str()), areaTreeDisabled[option.GetArea()]); + !enabledTricks.count(rt) && + Rando::Tricks::CheckTags(showTag, option.GetTags())) { + ImGui::TreeNodeSetOpen( + ImGui::GetID( + (Rando::Tricks::GetAreaName(option.GetArea()) + "##disabled").c_str()), + areaTreeDisabled[option.GetArea()]); ImGui::SetNextItemOpen(true, ImGuiCond_Once); UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f)); if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Right)) { @@ -2443,8 +4181,12 @@ void RandomizerSettingsWindow::DrawElement() { enabledTrickString += std::to_string(enabledTrickIt); enabledTrickString += ","; } - CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str()); - Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); + CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), + enabledTrickString.c_str()); + Ship::Context::GetInstance() + ->GetWindow() + ->GetGui() + ->SaveConsoleVariablesNextFrame(); } UIWidgets::PopStyleButton(); Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName()); @@ -2466,24 +4208,26 @@ void RandomizerSettingsWindow::DrawElement() { ImGui::TableNextColumn(); window->DC.CurrLineTextBaseOffset = 0.0f; - if (UIWidgets::Button("Collapse All##enabled", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { + if (UIWidgets::Button("Collapse All##enabled", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { for (int i = 0; i < RA_MAX; i++) { areaTreeEnabled[static_cast(i)] = false; } } ImGui::SameLine(); - if (UIWidgets::Button("Open All##enabled", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { + if (UIWidgets::Button("Open All##enabled", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { for (int i = 0; i < RA_MAX; i++) { areaTreeEnabled[static_cast(i)] = true; } } ImGui::SameLine(); - if (UIWidgets::Button("Disable Visible", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { + if (UIWidgets::Button("Disable Visible", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) { for (int i = 0; i < RT_MAX; i++) { auto option = mSettings->GetTrickOption(static_cast(i)); if (enabledTricks.count(static_cast(i)) && - trickSearch.PassFilter(option.GetName().c_str()) && - areaTreeEnabled[option.GetArea()] && + trickSearch.PassFilter(option.GetName().c_str()) && areaTreeEnabled[option.GetArea()] && Rando::Tricks::CheckTags(showTag, option.GetTags())) { enabledTricks.erase(static_cast(i)); } @@ -2514,14 +4258,20 @@ void RandomizerSettingsWindow::DrawElement() { } } if (hasTricks) { - ImGui::TreeNodeSetOpen(ImGui::GetID((Rando::Tricks::GetAreaName(area) + "##enabled").c_str()), areaTreeEnabled[area]); + ImGui::TreeNodeSetOpen( + ImGui::GetID((Rando::Tricks::GetAreaName(area) + "##enabled").c_str()), + areaTreeEnabled[area]); ImGui::SetNextItemOpen(true, ImGuiCond_Once); if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##enabled").c_str())) { for (auto rt : trickIds) { auto option = mSettings->GetTrickOption(rt); if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) && - enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) { - ImGui::TreeNodeSetOpen(ImGui::GetID((Rando::Tricks::GetAreaName(option.GetArea()) + "##enabled").c_str()), areaTreeEnabled[option.GetArea()]); + enabledTricks.count(rt) && + Rando::Tricks::CheckTags(showTag, option.GetTags())) { + ImGui::TreeNodeSetOpen( + ImGui::GetID( + (Rando::Tricks::GetAreaName(option.GetArea()) + "##enabled").c_str()), + areaTreeEnabled[option.GetArea()]); ImGui::SetNextItemOpen(true, ImGuiCond_Once); UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f)); if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Left)) { @@ -2530,19 +4280,23 @@ void RandomizerSettingsWindow::DrawElement() { for (auto enabledTrickIt : enabledTricks) { enabledTrickString += std::to_string(enabledTrickIt); enabledTrickString += ","; + } + if (enabledTrickString == "") { + CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks")); + } else { + CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), + enabledTrickString.c_str()); + } + Ship::Context::GetInstance() + ->GetWindow() + ->GetGui() + ->SaveConsoleVariablesNextFrame(); } - if (enabledTrickString == "") { - CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks")); - } else { - CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str()); - } - Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); - } - UIWidgets::PopStyleButton(); - Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName()); - ImGui::SameLine(); - ImGui::Text("%s", option.GetName().c_str()); - UIWidgets::Tooltip(option.GetDescription().c_str()); + UIWidgets::PopStyleButton(); + Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName()); + ImGui::SameLine(); + ImGui::Text("%s", option.GetName().c_str()); + UIWidgets::Tooltip(option.GetDescription().c_str()); } } areaTreeEnabled[area] = true; @@ -2601,41 +4355,48 @@ CustomMessage Randomizer::GetSheikMessage(s16 scene, u16 originalTextId) { CustomMessage messageEntry; switch (scene) { case SCENE_TEMPLE_OF_TIME: - if (ctx->GetOption(RSK_OOT_HINT) && !ctx->GetItemLocation(RC_SONG_FROM_OCARINA_OF_TIME)->HasObtained()){ + if (ctx->GetOption(RSK_OOT_HINT) && !ctx->GetItemLocation(RC_SONG_FROM_OCARINA_OF_TIME)->HasObtained()) { messageEntry = ctx->GetHint(RH_OOT_HINT)->GetHintMessage(MF_RAW); } else if (!CHECK_DUNGEON_ITEM(DUNGEON_KEY_BOSS, SCENE_GANONS_TOWER)) { messageEntry = CustomMessage( - "@, meet me at %gGanon's Castle%w once you obtain the %rkey to his lair%w.", - "@, wir treffen uns bei %gGanons Schloß%w, sobald Du den %rSchlüssel zu seinem Verlies%w hast.", - "Retrouve-moi au %gChâteau de Ganon%w une fois que tu auras obtenu la %rclé de son repaire%w."); + "@, meet me at %gGanon's Castle%w once you obtain the %rkey to his lair%w.", + "@, wir treffen uns bei %gGanons Schloß%w, sobald Du den %rSchlüssel zu seinem Verlies%w hast.", + "Retrouve-moi au %gChâteau de Ganon%w une fois que tu auras obtenu la %rclé de son repaire%w."); } else { - messageEntry = CustomMessage( - "The time has come. Prepare yourself.", - "Die Zeit ist gekommen.&Mach Dich bereit.", - "Le moment est venu @.&Tu ferais bien de te préparer."); + messageEntry = + CustomMessage("The time has come. Prepare yourself.", "Die Zeit ist gekommen.&Mach Dich bereit.", + "Le moment est venu @.&Tu ferais bien de te préparer."); } break; case SCENE_INSIDE_GANONS_CASTLE: if (ctx->GetOption(RSK_SHEIK_LA_HINT) && INV_CONTENT(ITEM_ARROW_LIGHT) != ITEM_ARROW_LIGHT) { messageEntry = ctx->GetHint(RH_SHEIK_HINT)->GetHintMessage(MF_RAW); - } else if (!(CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER) && INV_CONTENT(ITEM_ARROW_LIGHT) == ITEM_ARROW_LIGHT && - CUR_CAPACITY(UPG_QUIVER) >= 30 && gSaveContext.isMagicAcquired)) { - messageEntry = CustomMessage("You are still ill-equipped to face %rGanondorf%w." - "^Seek out the %cMaster Sword%w, %rsomething to hold your arrows%w, and %gmagic%w to summon the %ylight%w.", + } else if (!(CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER) && + INV_CONTENT(ITEM_ARROW_LIGHT) == ITEM_ARROW_LIGHT && CUR_CAPACITY(UPG_QUIVER) >= 30 && + gSaveContext.isMagicAcquired)) { + messageEntry = CustomMessage( + "You are still ill-equipped to face %rGanondorf%w." + "^Seek out the %cMaster Sword%w, %rsomething to hold your arrows%w, and %gmagic%w to summon the " + "%ylight%w.", "Du bist noch nicht gewappnet um Dich %rGanondorf%w stellen zu können.^" - "Begib Dich auf die Suche nach dem %cMaster-Schwert%w, %retwas um Deinen Pfeilen einen Sinn zu geben%w,^sowie %gdie Magie%w, um das %yLicht%w herauf beschwören zu können.", + "Begib Dich auf die Suche nach dem %cMaster-Schwert%w, %retwas um Deinen Pfeilen einen Sinn zu " + "geben%w,^sowie %gdie Magie%w, um das %yLicht%w herauf beschwören zu können.", "@, tu n'es toujours pas prêt à affronter %rGanondorf%w.^" - "Cherche l'%cÉpée de Légende%w, %rquelque chose pour ranger tes flèches%w et de la %gmagie%w pour invoquer la %ylumière%w."); - } else if (!Flags_GetEventChkInf(EVENTCHKINF_DISPELLED_GANONS_TOWER_BARRIER) && !ctx->GetOption(RSK_TRIAL_COUNT).Is(0)){ + "Cherche l'%cÉpée de Légende%w, %rquelque chose pour ranger tes flèches%w et de la %gmagie%w pour " + "invoquer la %ylumière%w."); + } else if (!Flags_GetEventChkInf(EVENTCHKINF_DISPELLED_GANONS_TOWER_BARRIER) && + !ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) { messageEntry = CustomMessage( - "You may have what you need to defeat %rthe Evil King%w, but the %cbarrier%w still stands.^Complete the remaining %gtrials%w to destroy it.", - "Du magst das haben, was Du brauchst um %rden bösen König%w zu besiegen, aber die %cBarriere%w steht noch.^Absolviere die verbleibenden %gPrüfungen%w um sie zu zerstören.", - "@, tu as peut-être ce qu'il te faut pour vaincre %rle Malin%w, mais les barrières sont toujours actives.^Termine les épreuves restantes pour les détruire."); + "You may have what you need to defeat %rthe Evil King%w, but the %cbarrier%w still " + "stands.^Complete the remaining %gtrials%w to destroy it.", + "Du magst das haben, was Du brauchst um %rden bösen König%w zu besiegen, aber die %cBarriere%w " + "steht noch.^Absolviere die verbleibenden %gPrüfungen%w um sie zu zerstören.", + "@, tu as peut-être ce qu'il te faut pour vaincre %rle Malin%w, mais les barrières sont toujours " + "actives.^Termine les épreuves restantes pour les détruire."); } else { - messageEntry = CustomMessage( - "If you're ready, then proceed.^Good luck.", - "Wenn Du bereit bist, so schreite&voran.^Viel Glück.", - "Si tu es prêt, tu peux y aller.^Bonne chance."); + messageEntry = CustomMessage("If you're ready, then proceed.^Good luck.", + "Wenn Du bereit bist, so schreite&voran.^Viel Glück.", + "Si tu es prêt, tu peux y aller.^Bonne chance."); } break; } @@ -2646,10 +4407,10 @@ CustomMessage Randomizer::GetSheikMessage(s16 scene, u16 originalTextId) { CustomMessage Randomizer::GetFishingPondOwnerMessage(u16 originalTextId) { auto ctx = Rando::Context::GetInstance(); CustomMessage messageEntry = CustomMessage( - "Sorry, but the pond is closed.&I've lost my good %rfishing pole%w...&Can't go fishing without it!", - "Entschuldigung, aber der Teich ist zu.&Ich habe meine gute %rAngelrute%w verloren.&Ohne kann ich nicht fischen!", - "Désolé, mais l'étang est fermé.&J'ai perdu ma bonne %rCanne à Pêche%w...&Impossible de pêcher sans elle!" - ); + "Sorry, but the pond is closed.&I've lost my good %rfishing pole%w...&Can't go fishing without it!", + "Entschuldigung, aber der Teich ist zu.&Ich habe meine gute %rAngelrute%w verloren.&Ohne kann ich nicht " + "fischen!", + "Désolé, mais l'étang est fermé.&J'ai perdu ma bonne %rCanne à Pêche%w...&Impossible de pêcher sans elle!"); if (Rando::Context::GetInstance()->GetOption(RSK_FISHING_POLE_HINT)) { messageEntry = messageEntry + CustomMessage(ctx->GetHint(RH_FISHING_POLE)->GetHintMessage()); @@ -2657,14 +4418,13 @@ CustomMessage Randomizer::GetFishingPondOwnerMessage(u16 originalTextId) { // if the fishing pond guy doesnt remember me i will cry :( if (originalTextId == TEXT_FISHING_POND_START_MET) { - messageEntry = CustomMessage( - "Hey, mister! I remember you!&It's been a long time!^", - "Hallo, mein Herr! Ich erinnere mich an Sie!&Lang ist's her!", - "Hé, monsieur! Je me souviens de toi!&Ça fait longtemps!" - ) + messageEntry; + messageEntry = CustomMessage("Hey, mister! I remember you!&It's been a long time!^", + "Hallo, mein Herr! Ich erinnere mich an Sie!&Lang ist's her!", + "Hé, monsieur! Je me souviens de toi!&Ça fait longtemps!") + + messageEntry; } - messageEntry.Format(); //RANDOTODO why is this needed when it's not elsewhere.... + messageEntry.Format(); // RANDOTODO why is this needed when it's not elsewhere.... return messageEntry; } @@ -2681,24 +4441,27 @@ CustomMessage Randomizer::GetMerchantMessage(RandomizerCheck rc, TextIDs textId, } else if (shopItemGet == RG_ICE_TRAP) { shopItemGet = ctx->overrides[rc].LooksLike(); shopItemName = CustomMessage(ctx->overrides[rc].GetTrickName()); - } else { - auto shopItem = Rando::StaticData::RetrieveItem(shopItemGet); - shopItemName = {shopItem.GetName()}; - } - - if (freeTextId != TEXT_NONE && shopItemPrice == 0) { - messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::merchantMessageTableID, freeTextId, MF_RAW); } else { - messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::merchantMessageTableID, textId, MF_RAW); + auto shopItem = Rando::StaticData::RetrieveItem(shopItemGet); + shopItemName = { shopItem.GetName() }; } - messageEntry.InsertNames({shopItemName, {std::to_string(shopItemPrice)}}); + if (freeTextId != TEXT_NONE && shopItemPrice == 0) { + messageEntry = + CustomMessageManager::Instance->RetrieveMessage(Randomizer::merchantMessageTableID, freeTextId, MF_RAW); + } else { + messageEntry = + CustomMessageManager::Instance->RetrieveMessage(Randomizer::merchantMessageTableID, textId, MF_RAW); + } + + messageEntry.InsertNames({ shopItemName, { std::to_string(shopItemPrice) } }); messageEntry.AutoFormat(); return messageEntry; } CustomMessage Randomizer::GetMapGetItemMessageWithHint(GetItemEntry itemEntry) { - CustomMessage messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::getItemMessageTableID, itemEntry.getItemId); + CustomMessage messageEntry = + CustomMessageManager::Instance->RetrieveMessage(Randomizer::getItemMessageTableID, itemEntry.getItemId); int sceneNum; switch (itemEntry.getItemId) { case RG_DEKU_TREE_MAP: @@ -2735,8 +4498,7 @@ CustomMessage Randomizer::GetMapGetItemMessageWithHint(GetItemEntry itemEntry) { if (GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == RO_MQ_DUNGEONS_NONE || (GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == RO_MQ_DUNGEONS_SET_NUMBER && - GetRandoSettingValue(RSK_MQ_DUNGEON_COUNT) == 12) - ) { + GetRandoSettingValue(RSK_MQ_DUNGEON_COUNT) == 12)) { messageEntry.Replace("[[typeHint]]", ""); } else if (ResourceMgr_IsSceneMasterQuest(sceneNum)) { messageEntry.Replace("[[typeHint]]", Rando::StaticData::hintTextTable[RHT_DUNGEON_MASTERFUL].GetHintMessage()); @@ -2747,8 +4509,7 @@ CustomMessage Randomizer::GetMapGetItemMessageWithHint(GetItemEntry itemEntry) { return messageEntry; } -template -void CreateGetItemMessages(const std::array& messageEntries) { +template void CreateGetItemMessages(const std::array& messageEntries) { CustomMessageManager* customMessageManager = CustomMessageManager::Instance; customMessageManager->AddCustomMessageTable(Randomizer::getItemMessageTableID); for (const GetItemMessage& messageEntry : messageEntries) { @@ -2781,17 +4542,15 @@ void CreateRupeeMessages() { } customMessageManager->CreateMessage( Randomizer::rupeeMessageTableID, rupee, - CustomMessage( - "You found" + rupeeText + " !", - "Du hast" + rupeeText + " gefunden!", - "Vous obtenez" + rupeeText + " !", TEXTBOX_TYPE_BLACK, TEXTBOX_POS_BOTTOM)); + CustomMessage("You found" + rupeeText + " !", "Du hast" + rupeeText + " gefunden!", + "Vous obtenez" + rupeeText + " !", TEXTBOX_TYPE_BLACK, TEXTBOX_POS_BOTTOM)); } } CustomMessage Randomizer::GetRupeeMessage(u16 rupeeTextId) { - CustomMessage messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::rupeeMessageTableID, rupeeTextId, MF_AUTO_FORMAT); - messageEntry.Replace("[[rupee]]", CustomMessage(RandomElement(englishRupeeNames), - RandomElement(germanRupeeNames), + CustomMessage messageEntry = + CustomMessageManager::Instance->RetrieveMessage(Randomizer::rupeeMessageTableID, rupeeTextId, MF_AUTO_FORMAT); + messageEntry.Replace("[[rupee]]", CustomMessage(RandomElement(englishRupeeNames), RandomElement(germanRupeeNames), RandomElement(frenchRupeeNames))); return messageEntry; } @@ -2801,19 +4560,24 @@ void CreateTriforcePieceMessages() { { "You found a %yTriforce Piece%w!&%g[[current]]%w down, %c[[remaining]]%w to go. It's a start!", "Ein %yTriforce-Splitter%w! Du hast&%g[[current]]%w von %c[[required]]%w gefunden. Es ist ein&Anfang!", - "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à trouver. C'est un début!" }, + "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à " + "trouver. C'est un début!" }, { "You found a %yTriforce Piece%w!&%g[[current]]%w down, %c[[remaining]]%w to go. Progress!", "Ein %yTriforce-Splitter%w! Du hast&%g[[current]]%w von %c[[required]]%w gefunden. Es geht voran!", - "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à trouver. Ça avance!" }, + "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à " + "trouver. Ça avance!" }, { "You found a %yTriforce Piece%w!&%g[[current]]%w down, %c[[remaining]]%w to go. Over half-way&there!", - "Ein %yTriforce-Splitter%w! Du hast&schon %g[[current]]%w von %c[[required]]%w gefunden. Schon&über die Hälfte!", - "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à trouver. Il en reste un&peu moins que la moitié!" }, + "Ein %yTriforce-Splitter%w! Du hast&schon %g[[current]]%w von %c[[required]]%w gefunden. Schon&über die " + "Hälfte!", + "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à " + "trouver. Il en reste un&peu moins que la moitié!" }, { "You found a %yTriforce Piece%w!&%g[[current]]%w down, %c[[remaining]]%w to go. Almost done!", "Ein %yTriforce-Splitter%w! Du hast&schon %g[[current]]%w von %c[[required]]%w gefunden. Fast&geschafft!", - "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à trouver. C'est presque&terminé!" }, + "Vous trouvez un %yFragment de la&Triforce%w! Vous en avez %g[[current]]%w, il en&reste %c[[remaining]]%w à " + "trouver. C'est presque&terminé!" }, { "You completed the %yTriforce of&Courage%w! %gGG%w!", "Das %yTriforce des Mutes%w! Du hast&alle Splitter gefunden. %gGut gemacht%w!", @@ -2821,7 +4585,8 @@ void CreateTriforcePieceMessages() { { "You found a spare %yTriforce Piece%w!&You only needed %c[[required]]%w, but you have %g[[current]]%w!", "Ein übriger %yTriforce-Splitter%w! Du&hast nun %g[[current]]%w von %c[[required]]%w nötigen gefunden.", - "Vous avez trouvé un %yFragment de&Triforce%w en plus! Vous n'aviez besoin&que de %c[[required]]%w, mais vous en avez %g[[current]]%w en&tout!" }, + "Vous avez trouvé un %yFragment de&Triforce%w en plus! Vous n'aviez besoin&que de %c[[required]]%w, mais " + "vous en avez %g[[current]]%w en&tout!" }, }; CustomMessageManager* customMessageManager = CustomMessageManager::Instance; customMessageManager->AddCustomMessageTable(Randomizer::triforcePieceMessageTableID); @@ -2923,7 +4688,8 @@ void CreateNaviRandoMessages() { "%cMême un adulte ne peut pas pousser&de grands blocs sans un petit %wgain&de force%c!" }, { "%cI've heard that %rFlare Dancer&%cis weak to the %wMaster Sword%c!&Have you tried it?", - "%cIch habe gehört, daß der&%rFlammenderwisch %ceine Schwäche für&das %wMaster-Schwert %caufweist. Hast Du&es " + "%cIch habe gehört, daß der&%rFlammenderwisch %ceine Schwäche für&das %wMaster-Schwert %caufweist. Hast " + "Du&es " "schon einmal versucht einzusetzen?", "%cJ'ai entendu dire que les %rDanse-&Flammes %csont faîbles face à l'%wÉpée de&Légende%c! Est-ce que tu as " "essayé?" }, @@ -2947,12 +4713,14 @@ void CreateNaviRandoMessages() { "trop apprécier&le fait que tu %wportes un masque%c!" }, { "%cIf you get trapped somewhere, you&might have to %wsave your game %cand&%wreset%c!", - "%cSolltest Du irgendwo eingeschlossen&sein, mußt Du vielleicht Dein %wSpiel&speichern %cund %wneu starten%c!", + "%cSolltest Du irgendwo eingeschlossen&sein, mußt Du vielleicht Dein %wSpiel&speichern %cund %wneu " + "starten%c!", "%cSi tu es coincé quelque part, tu&devrais %wsauvegarder ta partie %cet&faire un %wreset%c!" }, { "%cSheik will meet you in a %rburning&village %conce you have %gForest%c,&%rFire%c, and %bWater " "%cMedallions!", - "%cShiek wird Dich in einem %rbrennenden&Dorf %ctreffen, sobald Du das Amulett&des %gWaldes%c, %rFeuers %cund " + "%cShiek wird Dich in einem %rbrennenden&Dorf %ctreffen, sobald Du das Amulett&des %gWaldes%c, %rFeuers " + "%cund " "%bWassers&%cbesitzt.", "%cSheik t'attendra dans un %rvillage&en feu %clorsque tu auras récupéré&les médaillons de la %gForêt%c, du " "%rFeu&%cet de l'%bEau%c!" }, @@ -2967,9 +4735,7 @@ void CreateNaviRandoMessages() { CustomMessageManager* customMessageManager = CustomMessageManager::Instance; customMessageManager->AddCustomMessageTable(Randomizer::NaviRandoMessageTableID); for (unsigned int i = 0; i <= (NUM_NAVI_MESSAGES - 1); i++) { - customMessageManager->CreateMessage( - Randomizer::NaviRandoMessageTableID, i, - NaviMessages[i]); + customMessageManager->CreateMessage(Randomizer::NaviRandoMessageTableID, i, NaviMessages[i]); } } @@ -3019,7 +4785,7 @@ CustomMessage Randomizer::GetIceTrapMessage() { "Would you like #ice# with that?", "You have obtained the #Ice# Medallion!", "Quick, do a #Zora# impression!", - "One item #on the rocks#!",//would be better if it could display the name of the item + "One item #on the rocks#!", // would be better if it could display the name of the item "How much does a polar bear weigh?&Enough to break the #ice#.", "You got Din's #Ice#!", "You got Nayru's #Cold#!", @@ -3082,12 +4848,13 @@ CustomMessage Randomizer::GetIceTrapMessage() { "STOP!&You violated the #Thaw#!", "I wanted to give you a treasure, but it looks like you got #cold feet#.", "You told me you wanted to deliver #just ice# to Ganondorf!", - "You got the triforce!&This ancient artifact of divine power can grant any- wait, no, sorry, it's just an ice trap. My bad.", + "You got the triforce!&This ancient artifact of divine power can grant any- wait, no, sorry, it's just an ice " + "trap. My bad.", "Time to #cool off#!", "The #Ice Cavern# sends its regards.", "Loading item, please #wait#...", "Mash A+B to not #die#.", - "Sorry, your item is in another location.", //would be better if it could have the name of the item + "Sorry, your item is in another location.", // would be better if it could have the name of the item "You only wish this was %gGreg%w.", "Do you want to drink a hot chocolate?", "The #cold# never bothered me anyway.", @@ -3108,7 +4875,8 @@ CustomMessage Randomizer::GetIceTrapMessage() { "Remember, there may be some momentary #discomfort#.", "In a perfect world #ice traps# like me would not exist, but this is not a perfect world.", "Gee, it sure is #cold# around here.", - "You tested the item with your #ice detector#, it beeped.", //would be better if it could have the name of the item + "You tested the item with your #ice detector#, it beeped.", // would be better if it could have the name of the + // item "You have found the way of the zero. The #sub-zero#.", "Mweep... mweep... mweep...", "Scum, #freezebag#! I mean #freeze#, scumbag!", @@ -3127,19 +4895,22 @@ CustomMessage Randomizer::GetIceTrapMessage() { "Hydration break! Hey, who #froze# my water?", "Oops, wrong #item model#.", "Whoops! You have to put the item #in your inventory#.", - "You dropped the item, shattering it into #shards of ice#!", //would be better if it could have the name of the item + "You dropped the item, shattering it into #shards of ice#!", // would be better if it could have the name of the + // item "Is this... golden age Simpsons?&BECAUSE I'M ABOUT TO #CHOKE A CHILD#.", "You are the weakest @, #goodbye#!", "Ugh... Why did we even randomize #this item#?", "The #Frost Moon# is rising...", - "According to all known laws of physics and biology, there is no way that @ should be able to survive #getting fully encased in ice#. The cells in @'s body would all die by the time they #unthaw#. Of course, this is a video game, so @ survives anyway... #Probably#.", + "According to all known laws of physics and biology, there is no way that @ should be able to survive #getting " + "fully encased in ice#. The cells in @'s body would all die by the time they #unthaw#. Of course, this is a " + "video game, so @ survives anyway... #Probably#.", "Okay, so stop me if you've heard this one - a gamer and a bottle of #liquid nitrogen# walk into a milk bar...", "Lástima, es una #trampa de hielo#...&&Nobody expects the Spanish #ice trap#!", "Gee, it sure is #BURR#ing around here.", "Navi? Oh! I thought she was called #Névé#!", "It's fine, @ knew this was a #trap#, they're just using it to take damage intentionally to manipulate RNG.", - "Unfortunately, the item has #stopped#.", //would be better if it could have the name of the item - "This item is #not available# in your country.", //would be better if it could have the name of the item + "Unfortunately, the item has #stopped#.", // would be better if it could have the name of the item + "This item is #not available# in your country.", // would be better if it could have the name of the item "#Ice# try. #;)#", "D'oh, I #missed#!", "Where is my #super suit#?", @@ -3198,12 +4969,13 @@ CustomMessage Randomizer::GetIceTrapMessage() { "J'espère que ça ne te fait ni chaud, ni #froid#.", "Je voulais t'offrir un trésor, mais il semble que tu aies eu #froid aux pieds#", "Tu m'as dit que tu voulais livrer #de la glace# à Ganondorf!", - "Tu as obtenu la Triforce!&Cet ancien artefact divin peut exaucer n'importe quel... ah non, désolé, c'est juste un piège de glace.", + "Tu as obtenu la Triforce!&Cet ancien artefact divin peut exaucer n'importe quel... ah non, désolé, c'est " + "juste un piège de glace.", "Il est temps de #te rafraîchir#!", "La #Caverne Polaire# te passe le bonjour.", "Chargement de l'objet, veuillez #patienter#...", "Martèle A+B pour ne pas #mourir#.", - "Désolé, ton objet est à un autre endroit.", //would be better if it could have the name of the item + "Désolé, ton objet est à un autre endroit.", // would be better if it could have the name of the item "Tu espérais que ce soit %gGreg%w.", "Tu veux boire un chocolat chaud?", "Le #froid# ne m'a jamais dérangé, de toute façon.", @@ -3222,9 +4994,11 @@ CustomMessage Randomizer::GetIceTrapMessage() { "Commence à marteler.", "Cet objet va #s'autodétruire# dans 5 secondes...", "Souviens-toi, il pourrait y avoir un léger #inconfort#.", - "Dans un monde parfait, les #pièges de glace# comme moi n'existeraient pas, mais ce n'est pas un monde parfait.", + "Dans un monde parfait, les #pièges de glace# comme moi n'existeraient pas, mais ce n'est pas un monde " + "parfait.", "Mon dieu qu'il fait #froid# ici.", - "Tu as testé l'objet avec ton #détecteur de glace#, il a bipé.", //would be better if it could have the name of the item + "Tu as testé l'objet avec ton #détecteur de glace#, il a bipé.", // would be better if it could have the name of + // the item "Tu as découvert le chemin du zéro. Le #sub-zéro#.", "Mweep... mweep... mweep...", "Gelé, #sac à glace#! Je veux dire #gèle-toi#, racaille!", @@ -3243,16 +5017,21 @@ CustomMessage Randomizer::GetIceTrapMessage() { "Pause hydratation ! Hé, qui a #gelé# mon eau?", "Oups, mauvais #modèle d'objet#.", "Oups! Tu dois mettre l'objet #dans ton inventaire#.", - "Tu as fait tomber l'objet, le brisant en #éclats de glace#!", //would be better if it could have the name of the item + "Tu as fait tomber l'objet, le brisant en #éclats de glace#!", // would be better if it could have the name of + // the item "Tu es le maillon faible @, #au revoir#!", "Ugh... Pourquoi avons-nous même randomisé #cet objet#?", "La #Lune de Givre# se lève...", - "Selon toutes les lois connues de la physique et de la biologie, @ ne devrait pas survivre à #être complètement enfermé dans la glace#. Les cellules de @ mourraient avant qu'elles ne #dégèlent#. Mais c'est un jeu vidéo, alors @ survit... #Probablement#.", - "OK, arrête-moi si tu l'as déjà entendue - un joueur et une bouteille de #nitrogène liquide# entrent dans un bar à lait...", + "Selon toutes les lois connues de la physique et de la biologie, @ ne devrait pas survivre à #être " + "complètement enfermé dans la glace#. Les cellules de @ mourraient avant qu'elles ne #dégèlent#. Mais c'est un " + "jeu vidéo, alors @ survit... #Probablement#.", + "OK, arrête-moi si tu l'as déjà entendue - un joueur et une bouteille de #nitrogène liquide# entrent dans un " + "bar à lait...", "Lástima, c'est un #piège de glace#...&&Personne ne s'attend à un #piège de glace espagnol#!", "Mon dieu qu'il fait #GLAGLA# ici.", - "C'est bon, @ savait que c'était un #piège#, il l'utilise juste pour prendre des dégâts intentionnellement et manipuler la RNG.", - "Cet objet n'est #pas disponible# dans votre pays.", //would be better if it could have the name of the item + "C'est bon, @ savait que c'était un #piège#, il l'utilise juste pour prendre des dégâts intentionnellement et " + "manipuler la RNG.", + "Cet objet n'est #pas disponible# dans votre pays.", // would be better if it could have the name of the item "#Bonne# tentative. #;)#", "Où est mon #Super Costume#?", "#La revanche du Titanic#.", @@ -3263,17 +5042,11 @@ CustomMessage Randomizer::GetIceTrapMessage() { if (CVarGetInteger(CVAR_GENERAL("LetItSnow"), 0)) { msg = CustomMessage( /*english*/ "This year for Christmas, all you get is #COAL#!", - /*german*/ "This year for Christmas, all you get is #COAL#!", - /*french*/ "Pour Noël, cette année, tu n'auras que du #CHARBON#! %rJoyeux Noël%w!", - { QM_BLUE } - ); + /*german*/ "This year for Christmas, all you get is #COAL#!", + /*french*/ "Pour Noël, cette année, tu n'auras que du #CHARBON#! %rJoyeux Noël%w!", { QM_BLUE }); } else { - msg = CustomMessage( - RandomElement(englishIceTrapMessages), - RandomElement(germanIceTrapMessages), - RandomElement(frenchIceTrapMessages), - { QM_BLUE, QM_BLUE, QM_BLUE } - ); + msg = CustomMessage(RandomElement(englishIceTrapMessages), RandomElement(germanIceTrapMessages), + RandomElement(frenchIceTrapMessages), { QM_BLUE, QM_BLUE, QM_BLUE }); } msg.AutoFormat(); @@ -3288,7 +5061,7 @@ static int goronIDs[9] = { TEXT_FIRE_TEMPLE_GORON_OWE_YOU_BIG_TIME, TEXT_FIRE_TEMPLE_GORON_OCARINA_SECRET, TEXT_FIRE_TEMPLE_GORON_PILLAR_SECRET, TEXT_FIRE_TEMPLE_GORON_HIDDEN_DOOR_SECRET, - TEXT_FIRE_TEMPLE_GORON_SOUNDS_DIFFERENT_SECRET}; + TEXT_FIRE_TEMPLE_GORON_SOUNDS_DIFFERENT_SECRET }; void CreateFireTempleGoronMessages() { CustomMessage FireTempleGoronMessages[NUM_GORON_MESSAGES] = { @@ -3383,438 +5156,374 @@ CustomMessage Randomizer::GetGoronMessage(u16 index) { void Randomizer::CreateCustomMessages() { // RANDTODO: Translate into french and german and replace GIMESSAGE_UNTRANSLATED // with GIMESSAGE(getItemID, itemID, english, german, french). - const std::array getItemMessages = {{ - GIMESSAGE(RG_GREG_RUPEE, ITEM_MASK_GORON, - "You found %gGreg%w!", - "%gGreg%w! Du hast ihn wirklich gefunden!", - "Félicitation! Vous avez trouvé %gGreg%w!"), - GIMESSAGE(RG_MASTER_SWORD, ITEM_SWORD_MASTER, - "You found the %gMaster Sword%w!", - "Du erhältst das %gMaster-Schwert%w!", - "Vous obtenez %gl'Épée de Légende%w!"), - GIMESSAGE(RG_BOTTLE_WITH_BLUE_FIRE, ITEM_BLUE_FIRE, - "You got a %rBottle with Blue &Fire%w! Use it to melt Red Ice!", - "Du erhältst eine %rFlasche mit&blauem Feuer%w! Nutze es um&%rRotes Eis%w zu schmelzen!", + const std::array getItemMessages = { { + GIMESSAGE(RG_GREG_RUPEE, ITEM_MASK_GORON, "You found %gGreg%w!", "%gGreg%w! Du hast ihn wirklich gefunden!", + "Félicitation! Vous avez trouvé %gGreg%w!"), + GIMESSAGE(RG_MASTER_SWORD, ITEM_SWORD_MASTER, "You found the %gMaster Sword%w!", + "Du erhältst das %gMaster-Schwert%w!", "Vous obtenez %gl'Épée de Légende%w!"), + GIMESSAGE( + RG_BOTTLE_WITH_BLUE_FIRE, ITEM_BLUE_FIRE, "You got a %rBottle with Blue &Fire%w! Use it to melt Red Ice!", + "Du erhältst eine %rFlasche mit&blauem Feuer%w! Nutze es um&%rRotes Eis%w zu schmelzen!", "Vous obtenez une %rBouteille avec&une Flamme Bleue%w! Utilisez-la&pour faire fondre la %rGlace&Rouge%w!"), - GIMESSAGE(RG_BOTTLE_WITH_BIG_POE, ITEM_BIG_POE, - "You got a %rBig Poe in a Bottle%w!&Sell it to the Ghost Shop!", - "Du hast einen %rNachtschwärmer%w&in einer Flasche gefangen!&Gehe zum %rGespenstermarkt%w&und verkaufe ihn!", - "Vous obtenez une %rBouteille avec&une Âme%w! Vendez-la au Marchand&d'Âme"), - GIMESSAGE(RG_BOTTLE_WITH_BLUE_POTION, ITEM_POTION_BLUE, - "You got a %rBottle of Blue Potion%w!&Drink it to replenish your&%ghealth%w and %bmagic%w!", - "Du erhältst ein %rBlaues Elixier%w!&Nutze es, um Deine %rMagie- und&Energieleiste%w komplett&aufzufüllen!", - "Vous obtenez une %rBouteille avec&une Potion Bleue%w! Buvez-la pour&restaurer votre %rénergie vitale%w&ainsi que votre %gmagie%w!"), + GIMESSAGE(RG_BOTTLE_WITH_BIG_POE, ITEM_BIG_POE, "You got a %rBig Poe in a Bottle%w!&Sell it to the Ghost Shop!", + "Du hast einen %rNachtschwärmer%w&in einer Flasche gefangen!&Gehe zum %rGespenstermarkt%w&und " + "verkaufe ihn!", + "Vous obtenez une %rBouteille avec&une Âme%w! Vendez-la au Marchand&d'Âme"), + GIMESSAGE( + RG_BOTTLE_WITH_BLUE_POTION, ITEM_POTION_BLUE, + "You got a %rBottle of Blue Potion%w!&Drink it to replenish your&%ghealth%w and %bmagic%w!", + "Du erhältst ein %rBlaues Elixier%w!&Nutze es, um Deine %rMagie- und&Energieleiste%w komplett&aufzufüllen!", + "Vous obtenez une %rBouteille avec&une Potion Bleue%w! Buvez-la pour&restaurer votre %rénergie " + "vitale%w&ainsi que votre %gmagie%w!"), GIMESSAGE(RG_BOTTLE_WITH_FISH, ITEM_FISH, - "You got a %rFish in a Bottle%w!&It looks fresh and delicious!&They say Jabu-Jabu loves them!", - "Du hast jetzt einen %rFisch in&einer Flasche%w! Er sieht richtig&frisch aus! Man sagt,&Lord Jabu-Jabu liebt Fische!", - "Vous obtenez une %rBouteille avec&un Poisson%w! Il a l'air délicieux!&Il paraîtrait que %bJabu-Jabu %wen&serait friand!"), - GIMESSAGE(RG_BOTTLE_WITH_BUGS, ITEM_BUG, - "You got a %rBug in a Bottle%w!&They love to burrow in&dirt holes!", - "Du hast jetzt %rKäfer in einer&Flasche&%w!&Sie graben gerne&in Erdlöchern.", - "Vous obtenez une %rBouteille avec&des Insectes%w! Ils adorent creuser&dans la terre meuble!"), - GIMESSAGE(RG_BOTTLE_WITH_FAIRY, ITEM_FAIRY, - "You got a %rFairy in a Bottle%w!&Use it wisely!", - "Du hast jetzt eine %rFee in einer&Flasche%w! Nutze sie weise!", - "Vous obtenez une %rBouteille avec&une Fée%w! Faites-en bon usage!"), - GIMESSAGE(RG_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED, + "You got a %rFish in a Bottle%w!&It looks fresh and delicious!&They say Jabu-Jabu loves them!", + "Du hast jetzt einen %rFisch in&einer Flasche%w! Er sieht richtig&frisch aus! Man sagt,&Lord " + "Jabu-Jabu liebt Fische!", + "Vous obtenez une %rBouteille avec&un Poisson%w! Il a l'air délicieux!&Il paraîtrait que %bJabu-Jabu " + "%wen&serait friand!"), + GIMESSAGE(RG_BOTTLE_WITH_BUGS, ITEM_BUG, "You got a %rBug in a Bottle%w!&They love to burrow in&dirt holes!", + "Du hast jetzt %rKäfer in einer&Flasche&%w!&Sie graben gerne&in Erdlöchern.", + "Vous obtenez une %rBouteille avec&des Insectes%w! Ils adorent creuser&dans la terre meuble!"), + GIMESSAGE(RG_BOTTLE_WITH_FAIRY, ITEM_FAIRY, "You got a %rFairy in a Bottle%w!&Use it wisely!", + "Du hast jetzt eine %rFee in einer&Flasche%w! Nutze sie weise!", + "Vous obtenez une %rBouteille avec&une Fée%w! Faites-en bon usage!"), + GIMESSAGE( + RG_BOTTLE_WITH_RED_POTION, ITEM_POTION_RED, "You got a %rBottle of Red Potion%w!&Drink it to replenish your&%ghealth%w!", - "Du erhältst ein %rRotes Elixier%w!&Nutze es, um Deine %rEnergieleiste&%weinmalig komplett aufzufüllen!", + "Du erhältst ein %rRotes Elixier%w!&Nutze es, um Deine %rEnergieleiste&%weinmalig komplett aufzufüllen!", "Vous obtenez une %rBouteille avec&une Potion Rouge%w! Buvez-la pour&restaurer votre %rénergie vitale%w!"), - GIMESSAGE(RG_BOTTLE_WITH_GREEN_POTION, ITEM_POTION_GREEN, + GIMESSAGE( + RG_BOTTLE_WITH_GREEN_POTION, ITEM_POTION_GREEN, "You got a %rBottle of Green Potion%w!&Drink it to replenish your&%bmagic%w!", - "Du erhältst ein %rGrünes Elixier%w!&Nutze es, um Deine %bMagieleiste&%weinmalig komplett aufzufüllen!", + "Du erhältst ein %rGrünes Elixier%w!&Nutze es, um Deine %bMagieleiste&%weinmalig komplett aufzufüllen!", "Vous obtenez une %rBouteille avec&une Potion Verte%w! Buvez-la pour&restaurer votre %gmagie%w!"), GIMESSAGE(RG_BOTTLE_WITH_POE, ITEM_POE, - "You got a %rPoe in a Bottle%w!&That creepy Ghost Shop might&be interested in this...", - "Du hast jetzt ein %rIrrlicht in einer&Flasche%w! Der %rGespenstermarkt%w&interessiert sich für vielleicht&dafür...", - "Vous obtenez une %rBouteille avec&un Esprit%w! Ça intéresserait&peut-être le vendeur d'Âme "), + "You got a %rPoe in a Bottle%w!&That creepy Ghost Shop might&be interested in this...", + "Du hast jetzt ein %rIrrlicht in einer&Flasche%w! Der %rGespenstermarkt%w&interessiert sich für " + "vielleicht&dafür...", + "Vous obtenez une %rBouteille avec&un Esprit%w! Ça intéresserait&peut-être le vendeur d'Âme "), - GIMESSAGE(RG_GERUDO_FORTRESS_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %yThieves Hideout &%wSmall Key!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %yDiebesversteck%w!", - "Vous obtenez une %rPetite Clé %w&du %yRepaire des Voleurs%w!"), - GIMESSAGE(RG_FOREST_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %gForest Temple &%wSmall Key!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %gWaldtempel%w!", - "Vous obtenez une %rPetite Clé %w&du %gTemple de la Forêt%w!"), - GIMESSAGE(RG_FIRE_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %rFire Temple &%wSmall Key!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %rFeuertempel%w!", - "Vous obtenez une %rPetite Clé %w&du %rTemple du Feu%w!"), - GIMESSAGE(RG_WATER_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %bWater Temple &%wSmall Key!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %bWassertempel%w!", - "Vous obtenez une %rPetite Clé %w&du %bTemple de l'Eau%w!"), - GIMESSAGE(RG_SPIRIT_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %ySpirit Temple &%wSmall Key!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %yGeistertempel%w!", - "Vous obtenez une %rPetite Clé %w&du %yTemple de l'Esprit%w!"), - GIMESSAGE(RG_SHADOW_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %pShadow Temple &%wSmall Key!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %pSchattentempel%w!", - "Vous obtenez une %rPetite Clé %w&du %pTemple de l'Ombre%w!"), - GIMESSAGE(RG_BOTTOM_OF_THE_WELL_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %pBottom of the &Well %wSmall Key!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %pGrund des Brunnens%w!", - "Vous obtenez une %rPetite Clé %w&du %pPuits%w!"), + GIMESSAGE(RG_GERUDO_FORTRESS_SMALL_KEY, ITEM_KEY_SMALL, "You found a %yThieves Hideout &%wSmall Key!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %yDiebesversteck%w!", + "Vous obtenez une %rPetite Clé %w&du %yRepaire des Voleurs%w!"), + GIMESSAGE(RG_FOREST_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %gForest Temple &%wSmall Key!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %gWaldtempel%w!", + "Vous obtenez une %rPetite Clé %w&du %gTemple de la Forêt%w!"), + GIMESSAGE(RG_FIRE_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %rFire Temple &%wSmall Key!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %rFeuertempel%w!", + "Vous obtenez une %rPetite Clé %w&du %rTemple du Feu%w!"), + GIMESSAGE(RG_WATER_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %bWater Temple &%wSmall Key!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %bWassertempel%w!", + "Vous obtenez une %rPetite Clé %w&du %bTemple de l'Eau%w!"), + GIMESSAGE(RG_SPIRIT_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %ySpirit Temple &%wSmall Key!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %yGeistertempel%w!", + "Vous obtenez une %rPetite Clé %w&du %yTemple de l'Esprit%w!"), + GIMESSAGE(RG_SHADOW_TEMPLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %pShadow Temple &%wSmall Key!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %pSchattentempel%w!", + "Vous obtenez une %rPetite Clé %w&du %pTemple de l'Ombre%w!"), + GIMESSAGE(RG_BOTTOM_OF_THE_WELL_SMALL_KEY, ITEM_KEY_SMALL, "You found a %pBottom of the &Well %wSmall Key!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %pGrund des Brunnens%w!", + "Vous obtenez une %rPetite Clé %w&du %pPuits%w!"), GIMESSAGE(RG_GERUDO_TRAINING_GROUND_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %yGerudo Training &Grounds %wSmall Key!", - "Du erhältst einen %rkleinen&Schlüssel%w für die %yGerudo-Trainingsarena%w!", - "Vous obtenez une %rPetite Clé %w&du %yGymnase Gerudo%w!"), - GIMESSAGE(RG_GANONS_CASTLE_SMALL_KEY, ITEM_KEY_SMALL, - "You found a %rGanon's Castle &%wSmall Key!", - "Du erhältst einen %rkleinen&Schlüssel%w für %rGanons Schloß%w!", - "Vous obtenez une %rPetite Clé %w&du %rChâteau de Ganon%w!"), - GIMESSAGE(RG_GUARD_HOUSE_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gGuard House%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus der Wachen%w!", - "Vous obtenez la %rClé %wde la&%gMaison des Gardes%w!"), - GIMESSAGE(RG_MARKET_BAZAAR_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gMarket Bazaar%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %gBasar des Marktes%w!", - "Vous obtenez la %rClé %wdu %gBazar&de la Place du Marché%w!"), - GIMESSAGE(RG_MARKET_POTION_SHOP_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gMarket Potion Shop%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %gMagie-Laden des Marktes%w!", - "Vous obtenez la %rClé %wde la&%gPlace du Marché%w!"), - GIMESSAGE(RG_MASK_SHOP_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gMask Shop%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %gMaskenladen%w!", - "Vous obtenez la %rClé %wde la&%gFoire aux Masques%w!"), + "You found a %yGerudo Training &Ground %wSmall Key!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %yGerudo-Trainingsgelände%w!", + "Vous obtenez une %rPetite Clé %w&du %yGymnase Gerudo%w!"), + GIMESSAGE(RG_GANONS_CASTLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %rGanon's Castle &%wSmall Key!", + "Du erhältst einen %rkleinen&Schlüssel%w für %rGanons Schloß%w!", + "Vous obtenez une %rPetite Clé %w&du %rChâteau de Ganon%w!"), + GIMESSAGE(RG_GUARD_HOUSE_KEY, ITEM_KEY_SMALL, "You found the key to the&%gGuard House%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus der Wachen%w!", + "Vous obtenez la %rClé %wde la&%gMaison des Gardes%w!"), + GIMESSAGE(RG_MARKET_BAZAAR_KEY, ITEM_KEY_SMALL, "You found the key to the&%gMarket Bazaar%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %gBasar des Marktes%w!", + "Vous obtenez la %rClé %wdu %gBazar&de la Place du Marché%w!"), + GIMESSAGE(RG_MARKET_POTION_SHOP_KEY, ITEM_KEY_SMALL, "You found the key to the&%gMarket Potion Shop%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %gMagie-Laden des Marktes%w!", + "Vous obtenez la %rClé %wde la&%gPlace du Marché%w!"), + GIMESSAGE(RG_MASK_SHOP_KEY, ITEM_KEY_SMALL, "You found the key to the&%gMask Shop%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %gMaskenladen%w!", + "Vous obtenez la %rClé %wde la&%gFoire aux Masques%w!"), GIMESSAGE(RG_MARKET_SHOOTING_GALLERY_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gMarket Shooting Gallery%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für die %gSchießbude des Marktes%w!", - "Vous obtenez la %rClé %wdu %gStand de&Tir de la Place du Marché%w!"), - GIMESSAGE(RG_BOMBCHU_BOWLING_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gBombchu Bowling Alley%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für die %gMinenbowlingbahn%w!", - "Vous obtenez la %rClé %wdu %gBowling&Teigneux%w!"), + "You found the key to the&%gMarket Shooting Gallery%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für die %gSchießbude des Marktes%w!", + "Vous obtenez la %rClé %wdu %gStand de&Tir de la Place du Marché%w!"), + GIMESSAGE(RG_BOMBCHU_BOWLING_KEY, ITEM_KEY_SMALL, "You found the key to the&%gBombchu Bowling Alley%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für die %gMinenbowlingbahn%w!", + "Vous obtenez la %rClé %wdu %gBowling&Teigneux%w!"), GIMESSAGE(RG_TREASURE_CHEST_GAME_BUILDING_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gTreasure Chest Game Building%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus des Schatzkisten-Pokers%w!", - "Vous obtenez la %rClé %wdu %gJeu de la&Chasse au Trésor%w!"), - GIMESSAGE(RG_BOMBCHU_SHOP_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gBombchu Shop%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %gKrabbelminenladen%w!", - "Vous obtenez la %rClé %wdu %gMagasin&de Missiles%w!"), - GIMESSAGE(RG_RICHARDS_HOUSE_KEY, ITEM_KEY_SMALL, - "You found the key to&%gRichard's House%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus von Richard%w!", - "Vous obtenez la %rClé %wde la %gMaison&de Kiki%w!"), - GIMESSAGE(RG_ALLEY_HOUSE_KEY, ITEM_KEY_SMALL, - "You found the key to&the %gAlley House%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus in der Gasse%w!", - "Vous obtenez la %rClé %wde la %gMaison&de la Ruelle%w!"), - GIMESSAGE(RG_KAK_BAZAAR_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gKakariko Bazaar%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %gBasar von Kakariko%w!", - "Vous obtenez la %rClé %wdu %gBazar&de Cocorico%w!"), - GIMESSAGE(RG_KAK_POTION_SHOP_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gKakariko Potion Shop%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %gMagie-Laden von Kakariko%w!", - "Vous obtenez la %rClé %wdu %gMagasin de&Potions de Cocorico%w!"), - GIMESSAGE(RG_BOSS_HOUSE_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gBoss's House%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus des Chefs%w!", - "Vous obtenez la %rClé %wde la %gMaison&du chef des ouvriers%w!"), - GIMESSAGE(RG_GRANNYS_POTION_SHOP_KEY, ITEM_KEY_SMALL, - "You found the key to&%gGranny's Potion Shop%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für %gAsas Hexenladen%w!", - "Vous obtenez la %rClé %wde&l'%gApothicaire%w!"), - GIMESSAGE(RG_SKULLTULA_HOUSE_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gSkulltula House%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %gSkulltula-Haus%w!", - "Vous obtenez la %rClé %wde la %gMaison&des Araignées%w!"), - GIMESSAGE(RG_IMPAS_HOUSE_KEY, ITEM_KEY_SMALL, - "You found the key to&%gImpa's House%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus von Impa%w!", - "Vous obtenez la %rClé %wde la %gMaison&d'Impa%w!"), - GIMESSAGE(RG_WINDMILL_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gWindmill%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für die %gWindmühle%w!", - "Vous obtenez la %rClé %w du %gMoulin%w!"), + "You found the key to the&%gTreasure Chest Game Building%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus des Schatzkisten-Pokers%w!", + "Vous obtenez la %rClé %wdu %gJeu de la&Chasse au Trésor%w!"), + GIMESSAGE(RG_BOMBCHU_SHOP_KEY, ITEM_KEY_SMALL, "You found the key to the&%gBombchu Shop%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %gKrabbelminenladen%w!", + "Vous obtenez la %rClé %wdu %gMagasin&de Missiles%w!"), + GIMESSAGE(RG_RICHARDS_HOUSE_KEY, ITEM_KEY_SMALL, "You found the key to&%gRichard's House%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus von Richard%w!", + "Vous obtenez la %rClé %wde la %gMaison&de Kiki%w!"), + GIMESSAGE(RG_ALLEY_HOUSE_KEY, ITEM_KEY_SMALL, "You found the key to&the %gAlley House%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus in der Gasse%w!", + "Vous obtenez la %rClé %wde la %gMaison&de la Ruelle%w!"), + GIMESSAGE(RG_KAK_BAZAAR_KEY, ITEM_KEY_SMALL, "You found the key to the&%gKakariko Bazaar%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %gBasar von Kakariko%w!", + "Vous obtenez la %rClé %wdu %gBazar&de Cocorico%w!"), + GIMESSAGE(RG_KAK_POTION_SHOP_KEY, ITEM_KEY_SMALL, "You found the key to the&%gKakariko Potion Shop%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %gMagie-Laden von Kakariko%w!", + "Vous obtenez la %rClé %wdu %gMagasin de&Potions de Cocorico%w!"), + GIMESSAGE(RG_BOSS_HOUSE_KEY, ITEM_KEY_SMALL, "You found the key to the&%gBoss's House%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus des Chefs%w!", + "Vous obtenez la %rClé %wde la %gMaison&du chef des ouvriers%w!"), + GIMESSAGE(RG_GRANNYS_POTION_SHOP_KEY, ITEM_KEY_SMALL, "You found the key to&%gGranny's Potion Shop%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für %gAsas Hexenladen%w!", + "Vous obtenez la %rClé %wde&l'%gApothicaire%w!"), + GIMESSAGE(RG_SKULLTULA_HOUSE_KEY, ITEM_KEY_SMALL, "You found the key to the&%gSkulltula House%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %gSkulltula-Haus%w!", + "Vous obtenez la %rClé %wde la %gMaison&des Araignées%w!"), + GIMESSAGE(RG_IMPAS_HOUSE_KEY, ITEM_KEY_SMALL, "You found the key to&%gImpa's House%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus von Impa%w!", + "Vous obtenez la %rClé %wde la %gMaison&d'Impa%w!"), + GIMESSAGE(RG_WINDMILL_KEY, ITEM_KEY_SMALL, "You found the key to the&%gWindmill%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für die %gWindmühle%w!", + "Vous obtenez la %rClé %w du %gMoulin%w!"), GIMESSAGE(RG_KAK_SHOOTING_GALLERY_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gKakariko Shooting Gallery%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für die %gSchießbude von Kakariko%w!", - "Vous obtenez la %rClé %w du %gStand de&Tir de Cocorico%w!"), - GIMESSAGE(RG_DAMPES_HUT_KEY, ITEM_KEY_SMALL, - "You found the key to&%gDampe's Hut%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für die %gHütte von Boris%w!", - "Vous obtenez la %rClé %wde la %gCabane&d'Igor%w!"), - GIMESSAGE(RG_TALONS_HOUSE_KEY, ITEM_KEY_SMALL, - "You found the key to&%gTalon's House%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus von Talon%w!", - "Vous obtenez la %rClé %wde la %gMaison&de Talon%w!"), - GIMESSAGE(RG_STABLES_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gStables%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für die %gStälle%w!", - "Vous obtenez la %rClé %wdes %gÉcuries%w!"), - GIMESSAGE(RG_BACK_TOWER_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gBack Tower%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %ghinteren Turm%w!", - "Vous obtenez la %rClé %wdu %gSilo%w!"), - GIMESSAGE(RG_HYLIA_LAB_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gHylia Laboratory%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für das %gHylia-Labor%w!", - "Vous obtenez la %rClé %wdu %gLaboratoire&du Lac Hylia%w!"), - GIMESSAGE(RG_FISHING_HOLE_KEY, ITEM_KEY_SMALL, - "You found the key to the&%gPond%w!", - "Du erhältst einen %rkleinen&Schlüssel%w für den %gFischweiher%w!", - "Vous obtenez la %rClé %wde l'%gÉtang%w!"), + "You found the key to the&%gKakariko Shooting Gallery%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für die %gSchießbude von Kakariko%w!", + "Vous obtenez la %rClé %w du %gStand de&Tir de Cocorico%w!"), + GIMESSAGE(RG_DAMPES_HUT_KEY, ITEM_KEY_SMALL, "You found the key to&%gDampe's Hut%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für die %gHütte von Boris%w!", + "Vous obtenez la %rClé %wde la %gCabane&d'Igor%w!"), + GIMESSAGE(RG_TALONS_HOUSE_KEY, ITEM_KEY_SMALL, "You found the key to&%gTalon's House%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %gHaus von Talon%w!", + "Vous obtenez la %rClé %wde la %gMaison&de Talon%w!"), + GIMESSAGE(RG_STABLES_KEY, ITEM_KEY_SMALL, "You found the key to the&%gStables%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für die %gStälle%w!", + "Vous obtenez la %rClé %wdes %gÉcuries%w!"), + GIMESSAGE(RG_BACK_TOWER_KEY, ITEM_KEY_SMALL, "You found the key to the&%gBack Tower%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %ghinteren Turm%w!", + "Vous obtenez la %rClé %wdu %gSilo%w!"), + GIMESSAGE(RG_HYLIA_LAB_KEY, ITEM_KEY_SMALL, "You found the key to the&%gHylia Laboratory%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für das %gHylia-Labor%w!", + "Vous obtenez la %rClé %wdu %gLaboratoire&du Lac Hylia%w!"), + GIMESSAGE(RG_FISHING_HOLE_KEY, ITEM_KEY_SMALL, "You found the key to the&%gPond%w!", + "Du erhältst einen %rkleinen&Schlüssel%w für den %gFischweiher%w!", + "Vous obtenez la %rClé %wde l'%gÉtang%w!"), - GIMESSAGE(RG_GERUDO_FORTRESS_KEY_RING, ITEM_KEY_SMALL, - "You found a %yThieves Hideout&%wKeyring!", - "Du erhältst ein %rSchlüsselbund%w&für das %yDiebesversteck%w!", - "Vous obtenez le trousseau de&clés du %yRepaire des Voleurs%w!"), - GIMESSAGE(RG_FOREST_TEMPLE_KEY_RING, ITEM_KEY_SMALL, - "You found a %gForest Temple&%wKeyring!", - "Du erhältst ein %rSchlüsselbund%w&für den %gWaldtempel%w!", - "Vous obtenez le trousseau de&clés du %gTemple de la Forêt%w!"), - GIMESSAGE(RG_FIRE_TEMPLE_KEY_RING, ITEM_KEY_SMALL, - "You found a %rFire Temple&%wKeyring!", - "Du erhältst ein %rSchlüsselbund%w&für den %rFeuertempel%w!", - "Vous obtenez le trousseau de&clés du %rTemple du Feu%w!"), - GIMESSAGE(RG_WATER_TEMPLE_KEY_RING, ITEM_KEY_SMALL, - "You found a %bWater Temple&%wKeyring!", - "Du erhältst ein %rSchlüsselbund%w&für den %bWassertempel%w!", - "Vous obtenez le trousseau de&clés du %bTemple de l'Eau%w!"), - GIMESSAGE(RG_SPIRIT_TEMPLE_KEY_RING, ITEM_KEY_SMALL, - "You found a %ySpirit Temple&%wKeyring!", - "Du erhältst ein %rSchlüsselbund%w&für den %yGeistertempel%w!", - "Vous obtenez le trousseau de&clés du %yTemple de l'Esprit%w!"), - GIMESSAGE(RG_SHADOW_TEMPLE_KEY_RING, ITEM_KEY_SMALL, - "You found a %pShadow Temple&%wKeyring!", - "Du erhältst ein %rSchlüsselbund%w&für den %pSchattentempel%w!", - "Vous obtenez le trousseau de&clés du %pTemple de l'Ombre%w!"), - GIMESSAGE(RG_BOTTOM_OF_THE_WELL_KEY_RING, ITEM_KEY_SMALL, - "You found a %pBottom of the&Well %wKeyring!", - "Du erhältst ein %rSchlüsselbund%w&für den %pGrund des Brunnens%w!", - "Vous obtenez le trousseau de&clés du %pPuits%w!"), - GIMESSAGE(RG_GERUDO_TRAINING_GROUND_KEY_RING, ITEM_KEY_SMALL, - "You found a %yGerudo Training&Grounds %wKeyring!", - "Du erhältst ein %rSchlüsselbund%w&für die %yGerudo-Trainingsarena%w!", - "Vous obtenez le trousseau de&clés du %yGymnase Gerudo%w!"), - GIMESSAGE(RG_GANONS_CASTLE_KEY_RING, ITEM_KEY_SMALL, - "You found a %rGanon's Castle&%wKeyring!", - "Du erhältst ein %rSchlüsselbund%w&für %rGanons Schloß%w!", - "Vous obtenez le trousseau de&clés du %rChâteau de Ganon%w!"), - GIMESSAGE(RG_TREASURE_GAME_KEY_RING, ITEM_KEY_SMALL, - "You found a %rTreasure Chest Game&%wKeyring!", - "!!!", - "Vous obtenez le trousseau de&clés du %rJeu de la Chasse au Trésor%w!"), + GIMESSAGE(RG_GERUDO_FORTRESS_KEY_RING, ITEM_KEY_SMALL, "You found a %yThieves Hideout&%wKeyring!", + "Du erhältst ein %rSchlüsselbund%w&für das %yDiebesversteck%w!", + "Vous obtenez le trousseau de&clés du %yRepaire des Voleurs%w!"), + GIMESSAGE(RG_FOREST_TEMPLE_KEY_RING, ITEM_KEY_SMALL, "You found a %gForest Temple&%wKeyring!", + "Du erhältst ein %rSchlüsselbund%w&für den %gWaldtempel%w!", + "Vous obtenez le trousseau de&clés du %gTemple de la Forêt%w!"), + GIMESSAGE(RG_FIRE_TEMPLE_KEY_RING, ITEM_KEY_SMALL, "You found a %rFire Temple&%wKeyring!", + "Du erhältst ein %rSchlüsselbund%w&für den %rFeuertempel%w!", + "Vous obtenez le trousseau de&clés du %rTemple du Feu%w!"), + GIMESSAGE(RG_WATER_TEMPLE_KEY_RING, ITEM_KEY_SMALL, "You found a %bWater Temple&%wKeyring!", + "Du erhältst ein %rSchlüsselbund%w&für den %bWassertempel%w!", + "Vous obtenez le trousseau de&clés du %bTemple de l'Eau%w!"), + GIMESSAGE(RG_SPIRIT_TEMPLE_KEY_RING, ITEM_KEY_SMALL, "You found a %ySpirit Temple&%wKeyring!", + "Du erhältst ein %rSchlüsselbund%w&für den %yGeistertempel%w!", + "Vous obtenez le trousseau de&clés du %yTemple de l'Esprit%w!"), + GIMESSAGE(RG_SHADOW_TEMPLE_KEY_RING, ITEM_KEY_SMALL, "You found a %pShadow Temple&%wKeyring!", + "Du erhältst ein %rSchlüsselbund%w&für den %pSchattentempel%w!", + "Vous obtenez le trousseau de&clés du %pTemple de l'Ombre%w!"), + GIMESSAGE(RG_BOTTOM_OF_THE_WELL_KEY_RING, ITEM_KEY_SMALL, "You found a %pBottom of the&Well %wKeyring!", + "Du erhältst ein %rSchlüsselbund%w&für den %pGrund des Brunnens%w!", + "Vous obtenez le trousseau de&clés du %pPuits%w!"), + GIMESSAGE(RG_GERUDO_TRAINING_GROUND_KEY_RING, ITEM_KEY_SMALL, "You found a %yGerudo Training&Ground %wKeyring!", + "Du erhältst ein %rSchlüsselbund%w&für das %yGerudo-Trainingsgelände%w!", + "Vous obtenez le trousseau de&clés du %yGymnase Gerudo%w!"), + GIMESSAGE(RG_GANONS_CASTLE_KEY_RING, ITEM_KEY_SMALL, "You found a %rGanon's Castle&%wKeyring!", + "Du erhältst ein %rSchlüsselbund%w&für %rGanons Schloß%w!", + "Vous obtenez le trousseau de&clés du %rChâteau de Ganon%w!"), + GIMESSAGE(RG_TREASURE_GAME_KEY_RING, ITEM_KEY_SMALL, "You found a %rTreasure Chest Game&%wKeyring!", + "Du erhältst ein %rSchlüsselbund%w& für das %rSchatztruhen-Poker&%w!", + "Vous obtenez le trousseau de&clés du %rJeu de la Chasse au Trésor%w!"), - GIMESSAGE(RG_FOREST_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, - "You found the %gForest Temple&%wBoss Key!", - "Du erhältst den %rMaster-Schlüssel%w&für den %gWaldtempel%w!", - "Vous obtenez la %rClé d'or %wdu&%gTemple de la Forêt%w!"), - GIMESSAGE(RG_FIRE_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, - "You found the %rFire Temple&%wBoss Key!", - "Du erhältst den %rMaster-Schlüssel%w&für den %rFeuertempel%w!", - "Vous obtenez la %rClé d'or %wdu&%rTemple du Feu%w!"), - GIMESSAGE(RG_WATER_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, - "You found the %bWater Temple&%wBoss Key!", - "Du erhältst den %rMaster-Schlüssel%w&für den %bWassertempel%w!", - "Vous obtenez la %rClé d'or %wdu&%bTemple de l'Eau%w!"), - GIMESSAGE(RG_SPIRIT_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, - "You found the %ySpirit Temple&%wBoss Key!", - "Du erhältst den %rMaster-Schlüssel%w&für den %yGeistertempel%w!", - "Vous obtenez la %rClé d'or %wdu&%yTemple de l'Esprit%w!"), - GIMESSAGE(RG_SHADOW_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, - "You found the %pShadow Temple&%wBoss Key!", - "Du erhältst den %rMaster-Schlüssel%w&für den %pSchattentempel%w!", - "Vous obtenez la %rClé d'or %wdu&%pTemple de l'Ombre%w!"), - GIMESSAGE(RG_GANONS_CASTLE_BOSS_KEY, ITEM_KEY_BOSS, - "You found the %rGanon's Castle&%wBoss Key!", - "Du erhältst den %rMaster-Schlüssel%w&für %rGanons Schloß%w!", - "Vous obtenez la %rClé d'or %wdu&%rChâteau de Ganon%w!"), + GIMESSAGE(RG_FOREST_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %gForest Temple&%wBoss Key!", + "Du erhältst den %rMaster-Schlüssel%w&für den %gWaldtempel%w!", + "Vous obtenez la %rClé d'or %wdu&%gTemple de la Forêt%w!"), + GIMESSAGE(RG_FIRE_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %rFire Temple&%wBoss Key!", + "Du erhältst den %rMaster-Schlüssel%w&für den %rFeuertempel%w!", + "Vous obtenez la %rClé d'or %wdu&%rTemple du Feu%w!"), + GIMESSAGE(RG_WATER_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %bWater Temple&%wBoss Key!", + "Du erhältst den %rMaster-Schlüssel%w&für den %bWassertempel%w!", + "Vous obtenez la %rClé d'or %wdu&%bTemple de l'Eau%w!"), + GIMESSAGE(RG_SPIRIT_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %ySpirit Temple&%wBoss Key!", + "Du erhältst den %rMaster-Schlüssel%w&für den %yGeistertempel%w!", + "Vous obtenez la %rClé d'or %wdu&%yTemple de l'Esprit%w!"), + GIMESSAGE(RG_SHADOW_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %pShadow Temple&%wBoss Key!", + "Du erhältst den %rMaster-Schlüssel%w&für den %pSchattentempel%w!", + "Vous obtenez la %rClé d'or %wdu&%pTemple de l'Ombre%w!"), + GIMESSAGE(RG_GANONS_CASTLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %rGanon's Castle&%wBoss Key!", + "Du erhältst den %rMaster-Schlüssel%w&für %rGanons Schloß%w!", + "Vous obtenez la %rClé d'or %wdu&%rChâteau de Ganon%w!"), - GIMESSAGE(RG_DEKU_TREE_MAP, ITEM_DUNGEON_MAP, - "You found the %gDeku Tree&%wMap![[typeHint]]", - "Du erhältst die %rKarte%w für den&%gDeku-Baum%w![[typeHint]]", - "Vous obtenez la %rCarte %wde&l'%gArbre Mojo%w![[typeHint]]"), - GIMESSAGE(RG_DODONGOS_CAVERN_MAP, ITEM_DUNGEON_MAP, - "You found the %rDodongo's Cavern&%wMap![[typeHint]]", - "Du erhältst die %rKarte%w für&%rDodongos Höhle%w![[typeHint]]", - "Vous obtenez la %rCarte %wde la&%rCaverne Dodongo%w![[typeHint]]"), - GIMESSAGE(RG_JABU_JABUS_BELLY_MAP, ITEM_DUNGEON_MAP, - "You found the %bJabu Jabu's Belly&%wMap![[typeHint]]", - "Du erhältst die %rKarte%w für&%bJabu-Jabus Bauch%w![[typeHint]]", - "Vous obtenez la %rCarte %wdu&%bVentre de Jabu-Jabu%w![[typeHint]]"), - GIMESSAGE(RG_FOREST_TEMPLE_MAP, ITEM_DUNGEON_MAP, - "You found the %gForest Temple&%wMap![[typeHint]]", - "Du erhältst die %rKarte%w für den&%gWaldtempel%w![[typeHint]]", - "Vous obtenez la %rCarte %wdu&%gTemple de la Forêt%w![[typeHint]]"), - GIMESSAGE(RG_FIRE_TEMPLE_MAP, ITEM_DUNGEON_MAP, - "You found the %rFire Temple&%wMap![[typeHint]]", - "Du erhältst die %rKarte%w für den&%rFeuertempel%w![[typeHint]]", - "Vous obtenez la %rCarte %wdu&%rTemple du Feu%w![[typeHint]]"), - GIMESSAGE(RG_WATER_TEMPLE_MAP, ITEM_DUNGEON_MAP, - "You found the %bWater Temple&%wMap![[typeHint]]", - "Du erhältst die %rKarte%w für den&%bWassertempel%w![[typeHint]]", - "Vous obtenez la %rCarte %wdu&%bTemple de l'Eau%w![[typeHint]]"), - GIMESSAGE(RG_SPIRIT_TEMPLE_MAP, ITEM_DUNGEON_MAP, - "You found the %ySpirit Temple&%wMap![[typeHint]]", - "Du erhältst die %rKarte%w für den&%yGeistertempel%w![[typeHint]]", - "Vous obtenez la %rCarte %wdu&%yTemple de l'Esprit%w![[typeHint]]"), - GIMESSAGE(RG_SHADOW_TEMPLE_MAP, ITEM_DUNGEON_MAP, - "You found the %pShadow Temple&%wMap![[typeHint]]", - "Du erhältst die %rKarte%w für den&%pSchattentempel%w![[typeHint]]", - "Vous obtenez la %rCarte %wdu&%pTemple de l'Ombre%w![[typeHint]]"), - GIMESSAGE(RG_BOTTOM_OF_THE_WELL_MAP, ITEM_DUNGEON_MAP, - "You found the %pBottom of the&Well %wMap![[typeHint]]", - "Du erhältst die %rKarte%w für den&%pGrund des Brunnens%w![[typeHint]]", - "Vous obtenez la %rCarte %wdu&%pPuits%w![[typeHint]]"), - GIMESSAGE(RG_ICE_CAVERN_MAP, ITEM_DUNGEON_MAP, - "You found the %cIce Cavern&%wMap![[typeHint]]", - "Du erhältst die %rKarte%w für die&%cEishöhle%w![[typeHint]]", - "Vous obtenez la %rCarte %wde&la %cCaverne Polaire%w![[typeHint]]"), + GIMESSAGE(RG_DEKU_TREE_MAP, ITEM_DUNGEON_MAP, "You found the %gDeku Tree&%wMap![[typeHint]]", + "Du erhältst die %rKarte%w für den&%gDeku-Baum%w![[typeHint]]", + "Vous obtenez la %rCarte %wde&l'%gArbre Mojo%w![[typeHint]]"), + GIMESSAGE(RG_DODONGOS_CAVERN_MAP, ITEM_DUNGEON_MAP, "You found the %rDodongo's Cavern&%wMap![[typeHint]]", + "Du erhältst die %rKarte%w für&%rDodongos Höhle%w![[typeHint]]", + "Vous obtenez la %rCarte %wde la&%rCaverne Dodongo%w![[typeHint]]"), + GIMESSAGE(RG_JABU_JABUS_BELLY_MAP, ITEM_DUNGEON_MAP, "You found the %bJabu Jabu's Belly&%wMap![[typeHint]]", + "Du erhältst die %rKarte%w für&%bJabu-Jabus Bauch%w![[typeHint]]", + "Vous obtenez la %rCarte %wdu&%bVentre de Jabu-Jabu%w![[typeHint]]"), + GIMESSAGE(RG_FOREST_TEMPLE_MAP, ITEM_DUNGEON_MAP, "You found the %gForest Temple&%wMap![[typeHint]]", + "Du erhältst die %rKarte%w für den&%gWaldtempel%w![[typeHint]]", + "Vous obtenez la %rCarte %wdu&%gTemple de la Forêt%w![[typeHint]]"), + GIMESSAGE(RG_FIRE_TEMPLE_MAP, ITEM_DUNGEON_MAP, "You found the %rFire Temple&%wMap![[typeHint]]", + "Du erhältst die %rKarte%w für den&%rFeuertempel%w![[typeHint]]", + "Vous obtenez la %rCarte %wdu&%rTemple du Feu%w![[typeHint]]"), + GIMESSAGE(RG_WATER_TEMPLE_MAP, ITEM_DUNGEON_MAP, "You found the %bWater Temple&%wMap![[typeHint]]", + "Du erhältst die %rKarte%w für den&%bWassertempel%w![[typeHint]]", + "Vous obtenez la %rCarte %wdu&%bTemple de l'Eau%w![[typeHint]]"), + GIMESSAGE(RG_SPIRIT_TEMPLE_MAP, ITEM_DUNGEON_MAP, "You found the %ySpirit Temple&%wMap![[typeHint]]", + "Du erhältst die %rKarte%w für den&%yGeistertempel%w![[typeHint]]", + "Vous obtenez la %rCarte %wdu&%yTemple de l'Esprit%w![[typeHint]]"), + GIMESSAGE(RG_SHADOW_TEMPLE_MAP, ITEM_DUNGEON_MAP, "You found the %pShadow Temple&%wMap![[typeHint]]", + "Du erhältst die %rKarte%w für den&%pSchattentempel%w![[typeHint]]", + "Vous obtenez la %rCarte %wdu&%pTemple de l'Ombre%w![[typeHint]]"), + GIMESSAGE(RG_BOTTOM_OF_THE_WELL_MAP, ITEM_DUNGEON_MAP, "You found the %pBottom of the&Well %wMap![[typeHint]]", + "Du erhältst die %rKarte%w für den&%pGrund des Brunnens%w![[typeHint]]", + "Vous obtenez la %rCarte %wdu&%pPuits%w![[typeHint]]"), + GIMESSAGE(RG_ICE_CAVERN_MAP, ITEM_DUNGEON_MAP, "You found the %cIce Cavern&%wMap![[typeHint]]", + "Du erhältst die %rKarte%w für die&%cEishöhle%w![[typeHint]]", + "Vous obtenez la %rCarte %wde&la %cCaverne Polaire%w![[typeHint]]"), - GIMESSAGE(RG_DEKU_TREE_COMPASS, ITEM_COMPASS, - "You found the %gDeku Tree&%wCompass!", - "Du erhältst den %rKompaß%w für den&%gDeku-Baum%w!", - "Vous obtenez la %rBoussole %wde&l'%gArbre Mojo%w!"), - GIMESSAGE(RG_DODONGOS_CAVERN_COMPASS, ITEM_COMPASS, - "You found the %rDodongo's Cavern&%wCompass!", - "Du erhältst den %rKompaß%w für&%rDodongos Höhle%w!", - "Vous obtenez la %rBoussole %wde la&%rCaverne Dodongo%w!"), - GIMESSAGE(RG_JABU_JABUS_BELLY_COMPASS, ITEM_COMPASS, - "You found the %bJabu Jabu's Belly&%wCompass!", - "Du erhältst den %rKompaß%w für den&%bJabu-Jabus Bauch%w!", - "Vous obtenez la %rBoussole %wdu&%bVentre de Jabu-Jabu%w!"), - GIMESSAGE(RG_FOREST_TEMPLE_COMPASS, ITEM_COMPASS, - "You found the %gForest Temple&%wCompass!", - "Du erhältst den %rKompaß%w für den&%gWaldtempel%w!", - "Vous obtenez la %rBoussole %wdu&%gTemple de la Forêt%w!"), - GIMESSAGE(RG_FIRE_TEMPLE_COMPASS, ITEM_COMPASS, - "You found the %rFire Temple&%wCompass!", - "Du erhältst den %rKompaß%w für den&%rFeuertempel%w!", - "Vous obtenez la %rBoussole %wdu&%rTemple du Feu%w!"), - GIMESSAGE(RG_WATER_TEMPLE_COMPASS, ITEM_COMPASS, - "You found the %bWater Temple&%wCompass!", - "Du erhältst den %rKompaß%w für den&%bWassertempel%w!", - "Vous obtenez la %rBoussole %wdu&%bTemple de l'Eau%w!"), - GIMESSAGE(RG_SPIRIT_TEMPLE_COMPASS, ITEM_COMPASS, - "You found the %ySpirit Temple&%wCompass!", - "Du erhältst den %rKompaß%w für den&%yGeistertempel%w!", - "Vous obtenez la %rBoussole %wdu&%yTemple de l'Esprit%w!"), - GIMESSAGE(RG_SHADOW_TEMPLE_COMPASS, ITEM_COMPASS, - "You found the %pShadow Temple&%wCompass!", - "Du erhältst den %rKompaß%w für den&%pSchattentempel%w!", - "Vous obtenez la %rBoussole %wdu&%pTemple de l'Ombre%w!"), - GIMESSAGE(RG_BOTTOM_OF_THE_WELL_COMPASS, ITEM_COMPASS, - "You found the %pBottom of the&Well %wCompass!", - "Du erhältst den %rKompaß%w für den&%pGrund des Brunnens%w!", - "Vous obtenez la %rBoussole %wdu&%pPuits%w!"), - GIMESSAGE(RG_ICE_CAVERN_COMPASS, ITEM_COMPASS, - "You found the %cIce Cavern&%wCompass!", - "Du erhältst den %rKompaß%w für die&%cEishöhle%w!", - "Vous obtenez la %rBoussole %wde&la %cCaverne Polaire%w!"), + GIMESSAGE(RG_DEKU_TREE_COMPASS, ITEM_COMPASS, "You found the %gDeku Tree&%wCompass!", + "Du erhältst den %rKompaß%w für den&%gDeku-Baum%w!", + "Vous obtenez la %rBoussole %wde&l'%gArbre Mojo%w!"), + GIMESSAGE(RG_DODONGOS_CAVERN_COMPASS, ITEM_COMPASS, "You found the %rDodongo's Cavern&%wCompass!", + "Du erhältst den %rKompaß%w für&%rDodongos Höhle%w!", + "Vous obtenez la %rBoussole %wde la&%rCaverne Dodongo%w!"), + GIMESSAGE(RG_JABU_JABUS_BELLY_COMPASS, ITEM_COMPASS, "You found the %bJabu Jabu's Belly&%wCompass!", + "Du erhältst den %rKompaß%w für den&%bJabu-Jabus Bauch%w!", + "Vous obtenez la %rBoussole %wdu&%bVentre de Jabu-Jabu%w!"), + GIMESSAGE(RG_FOREST_TEMPLE_COMPASS, ITEM_COMPASS, "You found the %gForest Temple&%wCompass!", + "Du erhältst den %rKompaß%w für den&%gWaldtempel%w!", + "Vous obtenez la %rBoussole %wdu&%gTemple de la Forêt%w!"), + GIMESSAGE(RG_FIRE_TEMPLE_COMPASS, ITEM_COMPASS, "You found the %rFire Temple&%wCompass!", + "Du erhältst den %rKompaß%w für den&%rFeuertempel%w!", + "Vous obtenez la %rBoussole %wdu&%rTemple du Feu%w!"), + GIMESSAGE(RG_WATER_TEMPLE_COMPASS, ITEM_COMPASS, "You found the %bWater Temple&%wCompass!", + "Du erhältst den %rKompaß%w für den&%bWassertempel%w!", + "Vous obtenez la %rBoussole %wdu&%bTemple de l'Eau%w!"), + GIMESSAGE(RG_SPIRIT_TEMPLE_COMPASS, ITEM_COMPASS, "You found the %ySpirit Temple&%wCompass!", + "Du erhältst den %rKompaß%w für den&%yGeistertempel%w!", + "Vous obtenez la %rBoussole %wdu&%yTemple de l'Esprit%w!"), + GIMESSAGE(RG_SHADOW_TEMPLE_COMPASS, ITEM_COMPASS, "You found the %pShadow Temple&%wCompass!", + "Du erhältst den %rKompaß%w für den&%pSchattentempel%w!", + "Vous obtenez la %rBoussole %wdu&%pTemple de l'Ombre%w!"), + GIMESSAGE(RG_BOTTOM_OF_THE_WELL_COMPASS, ITEM_COMPASS, "You found the %pBottom of the&Well %wCompass!", + "Du erhältst den %rKompaß%w für den&%pGrund des Brunnens%w!", + "Vous obtenez la %rBoussole %wdu&%pPuits%w!"), + GIMESSAGE(RG_ICE_CAVERN_COMPASS, ITEM_COMPASS, "You found the %cIce Cavern&%wCompass!", + "Du erhältst den %rKompaß%w für die&%cEishöhle%w!", + "Vous obtenez la %rBoussole %wde&la %cCaverne Polaire%w!"), GIMESSAGE(RG_MAGIC_BEAN_PACK, ITEM_BEAN, - "You got a %rPack of Magic Beans%w!&Find a suitable spot for a garden&and plant them. Then, wait for&something fun to happen!", - "Du erhältst eine %rPackung&Wundererbsen%w! Suche nach einer&Stelle um sie einzupflanzen.&Warte ab, was passiert!", - "Vous obtenez un %rPaquet de&Haricots Magiques%w! Trouvez&un endroit approprié pour un&jardin et plantez-les.^Attendez ensuite que quelque&chose d'amusant se produise!"), + "You got a %rPack of Magic Beans%w!&Find a suitable spot for a garden&and plant them. Then, wait " + "for&something fun to happen!", + "Du erhältst eine %rPackung&Wundererbsen%w! Suche nach einer&Stelle um sie einzupflanzen.&Warte ab, " + "was passiert!", + "Vous obtenez un %rPaquet de&Haricots Magiques%w! Trouvez&un endroit approprié pour un&jardin et " + "plantez-les.^Attendez ensuite que quelque&chose d'amusant se produise!"), GIMESSAGE(RG_TYCOON_WALLET, ITEM_WALLET_GIANT, - "You got a %rTycoon's Wallet%w!&It's gigantic! Now you can carry&up to %y999 rupees%w!", - "Du erhältst die %rGoldene&Geldbörse%w! Die größte aller&Geldbörsen! Jetzt kannst Du bis&zu %y999 Rubine%w mit Dir führen!", - "Vous obtenez la %rBourse de Magnat%w!&Elle peut contenir jusqu'à %y999 rubis%w!&C'est gigantesque!"), + "You got a %rTycoon's Wallet%w!&It's gigantic! Now you can carry&up to %y999 rupees%w!", + "Du erhältst die %rGoldene&Geldbörse%w! Die größte aller&Geldbörsen! Jetzt kannst Du bis&zu %y999 " + "Rubine%w mit Dir führen!", + "Vous obtenez la %rBourse de Magnat%w!&Elle peut contenir jusqu'à %y999 rubis%w!&C'est gigantesque!"), GIMESSAGE(RG_CHILD_WALLET, ITEM_WALLET_ADULT, - "You got a %rChild's Wallet%w!&Now you can carry&up to %y99 rupees%w!", - "Du erhältst die %rKindergeldbörse%w!&Jetzt kannst Du bis&zu %y99 Rubine%w mit Dir führen!", - "Vous obtenez la %rPetite Bourse%w!&Elle peut contenir jusqu'à %y99 rubis%w!"), + "You got a %rChild's Wallet%w!&Now you can carry&up to %y99 rupees%w!", + "Du erhältst die %rKindergeldbörse%w!&Jetzt kannst Du bis&zu %y99 Rubine%w mit Dir führen!", + "Vous obtenez la %rPetite Bourse%w!&Elle peut contenir jusqu'à %y99 rubis%w!"), - GIMESSAGE_NO_GERMAN(RG_GOHMA_SOUL, ITEM_BIG_POE, - "You found the soul for %gGohma%w!", - "Vous obtenez l'âme de %gGohma%w!"), - GIMESSAGE_NO_GERMAN(RG_KING_DODONGO_SOUL, ITEM_BIG_POE, - "You found the soul for %rKing&Dodongo%w!", - "Vous obtenez l'âme du %rRoi Dodongo%w!"), - GIMESSAGE_NO_GERMAN(RG_BARINADE_SOUL, ITEM_BIG_POE, - "You found the soul for %bBarinade%w!", - "Vous obtenez l'âme de %bBarinade%w!"), - GIMESSAGE_NO_GERMAN(RG_PHANTOM_GANON_SOUL, ITEM_BIG_POE, - "You found the soul for %gPhantom&Ganon%w!", - "Vous obtenez l'âme de %gGanon&Spectral%w!"), - GIMESSAGE_NO_GERMAN(RG_VOLVAGIA_SOUL, ITEM_BIG_POE, - "You found the soul for %rVolvagia%w!", - "Vous obtenez l'âme de %rVulcania%w!"), - GIMESSAGE_NO_GERMAN(RG_MORPHA_SOUL, ITEM_BIG_POE, - "You found the soul for %bMorpha%w!", - "Vous obtenez l'âme de %bMorpha%w!"), - GIMESSAGE_NO_GERMAN(RG_BONGO_BONGO_SOUL, ITEM_BIG_POE, - "You found the soul for %pBongo&Bongo%w!", - "Vous obtenez l'âme de %pBongo&Bongo%w!"), - GIMESSAGE_NO_GERMAN(RG_TWINROVA_SOUL, ITEM_BIG_POE, - "You found the soul for %yTwinrova%w!", - "Vous obtenez l'âme du %yDuo&Maléfique%w!"), - GIMESSAGE_NO_GERMAN(RG_GANON_SOUL, ITEM_BIG_POE, - "You found the soul for %cGanon%w!", - "Vous obtenez l'âme de %cGanon%w!"), + GIMESSAGE(RG_GOHMA_SOUL, ITEM_BIG_POE, "You found the soul for %gGohma%w!", + "Du hast die Seele von %gGohma%w gefunden!", "Vous obtenez l'âme de %gGohma%w!"), + GIMESSAGE(RG_KING_DODONGO_SOUL, ITEM_BIG_POE, "You found the soul for %rKing&Dodongo%w!", + "Du hast die Seele von %rKönig&Dodongo%w gefunden!", "Vous obtenez l'âme du %rRoi Dodongo%w!"), + GIMESSAGE(RG_BARINADE_SOUL, ITEM_BIG_POE, "You found the soul for %bBarinade%w!", + "Du hast die Seele von %bBarinade%w gefunden!", "Vous obtenez l'âme de %bBarinade%w!"), + GIMESSAGE(RG_PHANTOM_GANON_SOUL, ITEM_BIG_POE, "You found the soul for %gPhantom&Ganon%w!", + "Du hast die Seele von %gPhantom-&Ganon%w gefunden!", "Vous obtenez l'âme de %gGanon&Spectral%w!"), + GIMESSAGE(RG_VOLVAGIA_SOUL, ITEM_BIG_POE, "You found the soul for %rVolvagia%w!", + "Du hast die Seele von %rVolvagia%w gefunden!", "Vous obtenez l'âme de %rVolcania%w!"), + GIMESSAGE(RG_MORPHA_SOUL, ITEM_BIG_POE, "You found the soul for %bMorpha%w!", + "Du hast die Seele von %bMorpha%w gefunden!", "Vous obtenez l'âme de %bMorpha%w!"), + GIMESSAGE(RG_BONGO_BONGO_SOUL, ITEM_BIG_POE, "You found the soul for %pBongo&Bongo%w!", + "Du hast die Seele von %pBongo&Bongo%w gefunden!", "Vous obtenez l'âme de %pBongo&Bongo%w!"), + GIMESSAGE(RG_TWINROVA_SOUL, ITEM_BIG_POE, "You found the soul for %yTwinrova%w!", + "Du hast die Seele von %yTwinrova%w gefunden!", "Vous obtenez l'âme du %yDuo&Maléfique%w!"), + GIMESSAGE(RG_GANON_SOUL, ITEM_BIG_POE, "You found the soul for %cGanon%w!", + "Du hast die Seele von %cGanon%w gefunden!", "Vous obtenez l'âme de %cGanon%w!"), GIMESSAGE(RG_OCARINA_A_BUTTON, ITEM_OCARINA_TIME, - "You got the %b\x9f%r button for the&Ocarina%w! You can now use it&while playing songs!", - "Der %b\x9f%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", - "Vous obtenez la %rtouche %b\x9f%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en jouez!"), + "You got the %b\x9f%r button for the&Ocarina%w! You can now use it&while playing songs!", + "Der %b\x9f%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", + "Vous obtenez la %rtouche %b\x9f%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en " + "jouez!"), GIMESSAGE(RG_OCARINA_C_LEFT_BUTTON, ITEM_OCARINA_TIME, - "You got the %y\xa7%r button for the&Ocarina%w! You can now use it&while playing songs!", - "Der %y\xa7%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", - "Vous obtenez la %rtouche %y\xa7%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en jouez!"), + "You got the %y\xa7%r button for the&Ocarina%w! You can now use it&while playing songs!", + "Der %y\xa7%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", + "Vous obtenez la %rtouche %y\xa7%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en " + "jouez!"), GIMESSAGE(RG_OCARINA_C_RIGHT_BUTTON, ITEM_OCARINA_TIME, - "You got the %y\xa8%r button for the&Ocarina%w! You can now use it&while playing songs!", - "Der %y\xa8%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", - "Vous obtenez la %rtouche %y\xa8%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en jouez!"), + "You got the %y\xa8%r button for the&Ocarina%w! You can now use it&while playing songs!", + "Der %y\xa8%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", + "Vous obtenez la %rtouche %y\xa8%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en " + "jouez!"), GIMESSAGE(RG_OCARINA_C_UP_BUTTON, ITEM_OCARINA_TIME, - "You got the %y\xa5%r button for the&Ocarina%w! You can now use it&while playing songs!", - "Der %y\xa5%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", - "Vous obtenez la %rtouche %y\xa5%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en jouez!"), + "You got the %y\xa5%r button for the&Ocarina%w! You can now use it&while playing songs!", + "Der %y\xa5%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", + "Vous obtenez la %rtouche %y\xa5%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en " + "jouez!"), GIMESSAGE(RG_OCARINA_C_DOWN_BUTTON, ITEM_OCARINA_TIME, - "You got the %y\xa6%r button for the&Ocarina%w! You can now use it&while playing songs!", - "Der %y\xa6%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", - "Vous obtenez la %rtouche %y\xa6%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en jouez!"), - - GIMESSAGE_NO_GERMAN(RG_BRONZE_SCALE, ITEM_SCALE_SILVER, - "You got the %rBronze Scale%w!&The power of buoyancy is yours!", - "Vous obtenez l'%rÉcaille de Bronze%w!&Le pouvoir de la flottabilité est&à vous!"), - GIMESSAGE_NO_GERMAN(RG_FISHING_POLE, ITEM_FISHING_POLE, - "You found a lost %rFishing Pole%w!&Time to hit the pond!", - "Vous obtenez une %rCanne à pêche%w&perdue!&Il est temps d'aller à %gl'étang%w!"), - GIMESSAGE_NO_GERMAN(RG_BOMBCHU_BAG, ITEM_BOMBCHU, - "You found the %rBombchu Bag%w!", - "Vous obtenez un %rSac de Missiles&Teigneux%w!"), - GIMESSAGE_NO_GERMAN(RG_BOMB_BAG_INF, ITEM_BOMB_BAG_40, - "You got an %rInfinite Bomb Bag%w!&Now you have %yinfinite bombs%w!", + "You got the %y\xa6%r button for the&Ocarina%w! You can now use it&while playing songs!", + "Der %y\xa6%r Knopf%w!&Du kannst ihn nun zum Spielen&von Liedern auf der %rOkarina%w&verwenden!", + "Vous obtenez la %rtouche %y\xa6%r de&l'Ocarina%w! Vous pouvez&maintenant l'utiliser lorsque&vous en " + "jouez!"), + + GIMESSAGE(RG_BRONZE_SCALE, ITEM_SCALE_SILVER, "You got the %rBronze Scale%w!&The power of buoyancy is yours!", + "Du hast die %rBronzene Schuppe%w erhalten!&Die Macht der Schwungkraft ist dein!", + "Vous obtenez l'%rÉcaille de Bronze%w!&Le pouvoir de la flottabilité est&à vous!"), + GIMESSAGE(RG_FISHING_POLE, ITEM_FISHING_POLE, "You found a lost %rFishing Pole%w!&Time to hit the pond!", + "Du hast eine verlorene %rAngelrute%w gefunden!&Zeit, im Teich zu angeln!", + "Vous obtenez une %rCanne à pêche%w&perdue!&Il est temps d'aller à %gl'étang%w!"), + GIMESSAGE(RG_BOMBCHU_BAG, ITEM_BOMBCHU, "You found the %rBombchu Bag%w!", + "Du hast die %rKrabbelminentasche%w&gefunden!", "Vous obtenez un %rSac de Missiles&Teigneux%w!"), + GIMESSAGE( + RG_BOMB_BAG_INF, ITEM_BOMB_BAG_40, "You got an %rInfinite Bomb Bag%w!&Now you have %yinfinite bombs%w!", + "Du hast eine %runendliche Bombentasche%w&gefunden! Nun hast Du &%yunendliche Bomben%w!", "Vous obtenez un %rSac de Bombes&sans fond%w!&Vous avez maintenant des %ybombes&en quantité illimitée%w!"), - GIMESSAGE_NO_GERMAN(RG_QUIVER_INF, ITEM_QUIVER_50, - "You got an %rInfinite Quiver%w!&Now you have %yinfinite arrows%w!", - "Vous obtenez un %rCarquois Infini%w!&Vous avez maintenant des %yflèches&de manière illimitée%w!"), - GIMESSAGE_NO_GERMAN(RG_BULLET_BAG_INF, ITEM_BULLET_BAG_50, - "You got an %rInfinite Bullet Bag%w!&Now you have %yinfinite&slingshot seeds%w!", - "Vous obtenez un %rSac de Graines&sans fond%w!&Vous avez maintenant des %ygraines&de lance-pierres à l'infini%w!"), - GIMESSAGE_NO_GERMAN(RG_STICK_UPGRADE_INF, ITEM_STICK, - "You now have %yinfinite%w %rDeku Sticks%w!", - "Vous avez maintenant des %yBâtons&Mojo de manière illimitée%w!"), - GIMESSAGE_NO_GERMAN(RG_NUT_UPGRADE_INF, ITEM_NUT, - "You now have %yinfinite%w %rDeku Nuts%w!", - "Vous avez maintenant des %yNoix&Mojo de manière illimitée%w!"), - GIMESSAGE_NO_GERMAN(RG_MAGIC_INF, ITEM_MAGIC_LARGE, - "You now have %yinfinite%w %rMagic%w!", - "Vous avez maintenant une quantité&de %ymagie illimitée%w!"), - GIMESSAGE_NO_GERMAN(RG_BOMBCHU_INF, ITEM_BOMBCHU, - "You now have %yinfinite%w %rBombchus%w!", - "Vous avez maintenant des %yMissiles&Teigneux en quantité illimités%w!"), - GIMESSAGE_NO_GERMAN(RG_WALLET_INF, ITEM_WALLET_GIANT, - "You now have %yinfinite%w %rmoney%w!", - "Vous avez maintenant des %yRubis en& quantité illimitée%w!"), - GIMESSAGE_NO_GERMAN(RG_SKELETON_KEY, ITEM_KEY_SMALL, - "You found the %rSkeleton Key%w!", - "Vous avez trouvé la %rClé Squelette%w!"), - GIMESSAGE_NO_GERMAN(RG_DEKU_STICK_BAG, ITEM_STICK, - "You found the %rDeku Stick Bag%w!&You can now hold deku sticks!", - "Vous avez trouvé le %rSac de Bâtons&Mojo%w!&Vous pouvez maintenant porter des&Bâtons Mojo!"), - GIMESSAGE_NO_GERMAN(RG_DEKU_NUT_BAG, ITEM_NUT, - "You found the %rDeku Nut Bag%w!&You can now hold deku nuts!", - "Vous avez trouvé le %rSac de Noix& Mojo%w!&Vous pouvez maintenant porter des&Noix Mojo!"), - }}; + GIMESSAGE(RG_QUIVER_INF, ITEM_QUIVER_50, "You got an %rInfinite Quiver%w!&Now you have %yinfinite arrows%w!", + "Du hast einen %runendlichen Köcher%w&gefunden! Nun hast Du &%yunendliche Pfeile%w!", + "Vous obtenez un %rCarquois Infini%w!&Vous avez maintenant des %yflèches&de manière illimitée%w!"), + GIMESSAGE(RG_BULLET_BAG_INF, ITEM_BULLET_BAG_50, + "You got an %rInfinite Bullet Bag%w!&Now you have %yinfinite&slingshot seeds%w!", + "Du hast eine %runendliche Samentasche%w&gefunden! Nun hast Du &%yunendliche Samen%w!", + "Vous obtenez un %rSac de Graines&sans fond%w!&Vous avez maintenant des %ygraines&de lance-pierres à " + "l'infini%w!"), + GIMESSAGE(RG_STICK_UPGRADE_INF, ITEM_STICK, "You now have %yinfinite%w %rDeku Sticks%w!", + "Du hast nun %yrunendliche%w %rDeku-Stäbe%w!", + "Vous avez maintenant des %yBâtons&Mojo de manière illimitée%w!"), + GIMESSAGE(RG_NUT_UPGRADE_INF, ITEM_NUT, "You now have %yinfinite%w %rDeku Nuts%w!", + "Du hast nun %yunendliche%w %rDeku-Nüsse%w!", + "Vous avez maintenant des %yNoix&Mojo de manière illimitée%w!"), + GIMESSAGE(RG_MAGIC_INF, ITEM_MAGIC_LARGE, "You now have %yinfinite%w %rMagic%w!", + "Du hast nun %yunendliche%w %rMagiew!", "Vous avez maintenant une quantité&de %ymagie illimitée%w!"), + GIMESSAGE(RG_BOMBCHU_INF, ITEM_BOMBCHU, "You now have %yinfinite%w %rBombchus%w!", + "Du hast nun %yunendliche%w %rKrabbelminen%w!", + "Vous avez maintenant des %yMissiles&Teigneux en quantité illimités%w!"), + GIMESSAGE(RG_WALLET_INF, ITEM_WALLET_GIANT, "You now have %yinfinite%w %rmoney%w!", + "Du hast nun %yunendliche%w %rRubinew!", + "Vous avez maintenant des %yRubis en& quantité illimitée%w!"), + GIMESSAGE(RG_SKELETON_KEY, ITEM_KEY_SMALL, "You found the %rSkeleton Key%w!", + "Du hast den %rSkelettschlüssel%w gefunden!", "Vous avez trouvé la %rClé Squelette%w!"), + GIMESSAGE(RG_DEKU_STICK_BAG, ITEM_STICK, "You found the %rDeku Stick Bag%w!&You can now hold Deku Sticks!", + "Du hast eine %rDeku-Stab-Tasche%w&gefunden! Nun kannst Du &%yDeku-Stäbe%w halten!", + "Vous avez trouvé le %rSac de Bâtons&Mojo%w!&Vous pouvez maintenant porter des&Bâtons Mojo!"), + GIMESSAGE(RG_DEKU_NUT_BAG, ITEM_NUT, "You found the %rDeku Nut Bag%w!&You can now hold Deku Nuts!", + "Du hast eine %rDeku-Nuß-Tasche%w&gefunden! Nun kannst Du &%yDeku-Nüsse%w halten!", + "Vous avez trouvé le %rSac de Noix& Mojo%w!&Vous pouvez maintenant porter des&Noix Mojo!"), + } }; CreateGetItemMessages(getItemMessages); CreateRupeeMessages(); CreateTriforcePieceMessages(); @@ -3822,16 +5531,17 @@ void Randomizer::CreateCustomMessages() { CreateFireTempleGoronMessages(); } -class ExtendedVanillaTableInvalidItemIdException: public std::exception { - private: +class ExtendedVanillaTableInvalidItemIdException : public std::exception { + private: s16 itemID; - public: - ExtendedVanillaTableInvalidItemIdException(s16 itemID): itemID(itemID) {} - std::string what() { + public: + ExtendedVanillaTableInvalidItemIdException(s16 itemID) : itemID(itemID) { + } + std::string what() { return itemID + " is not a valid ItemID for the extendedVanillaGetItemTable. If you are adding a new" - "item, try adding it to randoGetItemTable instead."; - } + "item, try adding it to randoGetItemTable instead."; + } }; void RandomizerSettingsWindow::InitElement() { @@ -3883,36 +5593,38 @@ extern "C" u8 Return_Item_Entry(GetItemEntry itemEntry, u8 returnItem); // used for items that only set a rand inf when obtained std::map randomizerGetToRandInf = { - { RG_FISHING_POLE, RAND_INF_FISHING_POLE_FOUND }, - { RG_BRONZE_SCALE, RAND_INF_CAN_SWIM }, - { RG_QUIVER_INF, RAND_INF_HAS_INFINITE_QUIVER }, - { RG_BOMB_BAG_INF, RAND_INF_HAS_INFINITE_BOMB_BAG }, - { RG_BULLET_BAG_INF, RAND_INF_HAS_INFINITE_BULLET_BAG }, - { RG_STICK_UPGRADE_INF, RAND_INF_HAS_INFINITE_STICK_UPGRADE }, - { RG_NUT_UPGRADE_INF, RAND_INF_HAS_INFINITE_NUT_UPGRADE }, - { RG_MAGIC_INF, RAND_INF_HAS_INFINITE_MAGIC_METER }, - { RG_BOMBCHU_INF, RAND_INF_HAS_INFINITE_BOMBCHUS }, - { RG_WALLET_INF, RAND_INF_HAS_INFINITE_MONEY }, - { RG_SKELETON_KEY, RAND_INF_HAS_SKELETON_KEY }, - { RG_OCARINA_A_BUTTON, RAND_INF_HAS_OCARINA_A }, - { RG_OCARINA_C_UP_BUTTON, RAND_INF_HAS_OCARINA_C_UP }, - { RG_OCARINA_C_DOWN_BUTTON, RAND_INF_HAS_OCARINA_C_DOWN }, - { RG_OCARINA_C_LEFT_BUTTON, RAND_INF_HAS_OCARINA_C_LEFT }, + { RG_FISHING_POLE, RAND_INF_FISHING_POLE_FOUND }, + { RG_BRONZE_SCALE, RAND_INF_CAN_SWIM }, + { RG_QUIVER_INF, RAND_INF_HAS_INFINITE_QUIVER }, + { RG_BOMB_BAG_INF, RAND_INF_HAS_INFINITE_BOMB_BAG }, + { RG_BULLET_BAG_INF, RAND_INF_HAS_INFINITE_BULLET_BAG }, + { RG_STICK_UPGRADE_INF, RAND_INF_HAS_INFINITE_STICK_UPGRADE }, + { RG_NUT_UPGRADE_INF, RAND_INF_HAS_INFINITE_NUT_UPGRADE }, + { RG_MAGIC_INF, RAND_INF_HAS_INFINITE_MAGIC_METER }, + { RG_BOMBCHU_INF, RAND_INF_HAS_INFINITE_BOMBCHUS }, + { RG_WALLET_INF, RAND_INF_HAS_INFINITE_MONEY }, + { RG_SKELETON_KEY, RAND_INF_HAS_SKELETON_KEY }, + { RG_OCARINA_A_BUTTON, RAND_INF_HAS_OCARINA_A }, + { RG_OCARINA_C_UP_BUTTON, RAND_INF_HAS_OCARINA_C_UP }, + { RG_OCARINA_C_DOWN_BUTTON, RAND_INF_HAS_OCARINA_C_DOWN }, + { RG_OCARINA_C_LEFT_BUTTON, RAND_INF_HAS_OCARINA_C_LEFT }, { RG_OCARINA_C_RIGHT_BUTTON, RAND_INF_HAS_OCARINA_C_RIGHT }, - { RG_GOHMA_SOUL, RAND_INF_GOHMA_SOUL }, - { RG_KING_DODONGO_SOUL, RAND_INF_KING_DODONGO_SOUL }, - { RG_BARINADE_SOUL, RAND_INF_BARINADE_SOUL }, - { RG_PHANTOM_GANON_SOUL, RAND_INF_PHANTOM_GANON_SOUL }, - { RG_VOLVAGIA_SOUL, RAND_INF_VOLVAGIA_SOUL }, - { RG_MORPHA_SOUL, RAND_INF_MORPHA_SOUL }, - { RG_BONGO_BONGO_SOUL, RAND_INF_BONGO_BONGO_SOUL }, - { RG_TWINROVA_SOUL, RAND_INF_TWINROVA_SOUL }, - { RG_GANON_SOUL, RAND_INF_GANON_SOUL }, + { RG_GOHMA_SOUL, RAND_INF_GOHMA_SOUL }, + { RG_KING_DODONGO_SOUL, RAND_INF_KING_DODONGO_SOUL }, + { RG_BARINADE_SOUL, RAND_INF_BARINADE_SOUL }, + { RG_PHANTOM_GANON_SOUL, RAND_INF_PHANTOM_GANON_SOUL }, + { RG_VOLVAGIA_SOUL, RAND_INF_VOLVAGIA_SOUL }, + { RG_MORPHA_SOUL, RAND_INF_MORPHA_SOUL }, + { RG_BONGO_BONGO_SOUL, RAND_INF_BONGO_BONGO_SOUL }, + { RG_TWINROVA_SOUL, RAND_INF_TWINROVA_SOUL }, + { RG_GANON_SOUL, RAND_INF_GANON_SOUL }, }; extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { if (giEntry.modIndex != MOD_RANDOMIZER) { - LUSLOG_WARN("Randomizer_Item_Give was called with a GetItemEntry with a mod index different from MOD_RANDOMIZER (%d)", giEntry.modIndex); + LUSLOG_WARN( + "Randomizer_Item_Give was called with a GetItemEntry with a mod index different from MOD_RANDOMIZER (%d)", + giEntry.modIndex); assert(false); return -1; } @@ -3922,13 +5634,13 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { // Gameplay stats: Update the time the item was obtained Randomizer_GameplayStats_SetTimestamp(item); - //if it's an item that just sets a randomizerInf, set it + // if it's an item that just sets a randomizerInf, set it if (randomizerGetToRandInf.find(item) != randomizerGetToRandInf.end()) { Flags_SetRandomizerInf(randomizerGetToRandInf.find(item)->second); return Return_Item_Entry(giEntry, RG_NONE); } - //bottle items + // bottle items if (item >= RG_BOTTLE_WITH_RED_POTION && item <= RG_BOTTLE_WITH_BIG_POE) { for (u16 i = 0; i < 4; i++) { if (gSaveContext.inventory.items[SLOT_BOTTLE_1 + i] == ITEM_NONE) { @@ -3971,14 +5683,12 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { } } - //dungeon items - if ( - (item >= RG_FOREST_TEMPLE_SMALL_KEY && item <= RG_GANONS_CASTLE_SMALL_KEY) || + // dungeon items + if ((item >= RG_FOREST_TEMPLE_SMALL_KEY && item <= RG_GANONS_CASTLE_SMALL_KEY) || (item >= RG_FOREST_TEMPLE_KEY_RING && item <= RG_GANONS_CASTLE_KEY_RING) || (item >= RG_FOREST_TEMPLE_BOSS_KEY && item <= RG_GANONS_CASTLE_BOSS_KEY) || (item >= RG_DEKU_TREE_MAP && item <= RG_ICE_CAVERN_MAP) || - (item >= RG_DEKU_TREE_COMPASS && item <= RG_ICE_CAVERN_COMPASS) - ) { + (item >= RG_DEKU_TREE_COMPASS && item <= RG_ICE_CAVERN_COMPASS)) { u16 mapIndex = gSaveContext.mapIndex; u8 numOfKeysOnKeyring = 0; switch (item) { @@ -4095,7 +5805,8 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { gSaveContext.inventory.dungeonItems[mapIndex] |= bitmask; return Return_Item_Entry(giEntry, RG_NONE); } else if (item >= RG_GUARD_HOUSE_KEY && item <= RG_FISHING_HOLE_KEY) { - Flags_SetRandomizerInf((RandomizerInf)((int)RAND_INF_GUARD_HOUSE_UNLOCKED + ((item - RG_GUARD_HOUSE_KEY) * 2) + 1)); + Flags_SetRandomizerInf( + (RandomizerInf)((int)RAND_INF_GUARD_HOUSE_UNLOCKED + ((item - RG_GUARD_HOUSE_KEY) * 2) + 1)); return Return_Item_Entry(giEntry, RG_NONE); } @@ -4147,7 +5858,8 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { GameInteractor_SetTriforceHuntPieceGiven(true); // Teleport to credits when goal is reached. - if (gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected == (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED) + 1)) { + if (gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected == + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED) + 1)) { gSaveContext.ship.stats.itemTimestamp[TIMESTAMP_TRIFORCE_COMPLETED] = GAMEPLAYSTAT_TOTAL_TIME; gSaveContext.ship.stats.gameComplete = 1; Flags_SetRandomizerInf(RAND_INF_GRANT_GANONS_BOSSKEY); diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index 76bde6a4f..78f48b01c 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -54,13 +54,19 @@ class Randomizer { CowIdentity IdentifyCow(s32 sceneNum, s32 posX, s32 posZ); PotIdentity IdentifyPot(s32 sceneNum, s32 posX, s32 posZ); FishIdentity IdentifyFish(s32 sceneNum, s32 actorParams); - GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, bool checkObtainability = true); - GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, bool checkObtainability = true); + GrassIdentity IdentifyGrass(s32 sceneNum, s32 posX, s32 posZ, s32 respawnData, s32 linkAge); + CrateIdentity IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ); + SmallCrateIdentity IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ); + GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, + bool checkObtainability = true); + GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, + bool checkObtainability = true); ItemObtainability GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck); ItemObtainability GetItemObtainabilityFromRandomizerGet(RandomizerGet randomizerCheck); CustomMessage GetSheikMessage(s16 scene, u16 originalTextId); CustomMessage GetFishingPondOwnerMessage(u16 originalTextId); - CustomMessage GetMerchantMessage(RandomizerCheck rc, TextIDs textId, TextIDs freeTextId = TEXT_NONE, bool mysterious = false); + CustomMessage GetMerchantMessage(RandomizerCheck rc, TextIDs textId, TextIDs freeTextId = TEXT_NONE, + bool mysterious = false); RandomizerCheck GetCheckFromActor(s16 actorId, s16 sceneNum, s16 actorParams); CustomMessage GetGoronMessage(u16 index); CustomMessage GetMapGetItemMessageWithHint(GetItemEntry itemEntry); @@ -79,4 +85,3 @@ bool GenerateRandomizer(std::string seed = ""); #ifdef __cplusplus } #endif - diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index e2581a634..34bddd0a5 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -13,11 +13,11 @@ // which doesn't exist yet. typedef enum { MOD_NONE, - MOD_RANDOMIZER + MOD_RANDOMIZER, } ModIndex; typedef enum { TABLE_VANILLA = MOD_NONE, - TABLE_RANDOMIZER = MOD_RANDOMIZER + TABLE_RANDOMIZER = MOD_RANDOMIZER, } TableIndex; typedef struct { @@ -209,7 +209,7 @@ typedef enum { LOGIC_OCARINA_C_UP_BUTTON, LOGIC_OCARINA_C_DOWN_BUTTON, LOGIC_OCARINA_C_LEFT_BUTTON, - LOGIC_OCARINA_C_RIGHT_BUTTON, + LOGIC_OCARINA_C_RIGHT_BUTTON, LOGIC_TRIFORCE_PIECES, LOGIC_MAX } LogicVal; @@ -288,12 +288,16 @@ typedef enum { RCTYPE_SONG_LOCATION, // Song locations RCTYPE_BOSS_HEART_OR_OTHER_REWARD, // Boss heart container or lesser dungeon rewards (lens, ice arrow) RCTYPE_POT, // Pots + RCTYPE_CRATE, // Crates + RCTYPE_NLCRATE, // NL Crates + RCTYPE_SMALL_CRATE, // Small crates RCTYPE_DUNGEON_REWARD, // Dungeon rewards (blue warps) RCTYPE_OCARINA, // Ocarina locations RCTYPE_BEEHIVE, // Beehives RCTYPE_FISH, // Fishes RCTYPE_FREESTANDING, // Freestanding rupees and hearts RCTYPE_FAIRY, // Fairies + RCTYPE_GRASS, // Grass } RandomizerCheckType; typedef enum { RCQUEST_VANILLA, RCQUEST_MQ, RCQUEST_BOTH } RandomizerCheckQuest; @@ -2333,6 +2337,266 @@ typedef enum { RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, // End Pots + // Overworld Crates + RC_GV_FREESTANDING_POH_CRATE, + RC_GV_NEAR_COW_CRATE, + RC_GV_CRATE_BRIDGE_1, + RC_GV_CRATE_BRIDGE_2, + RC_GV_CRATE_BRIDGE_3, + RC_GV_CRATE_BRIDGE_4, + RC_GF_ABOVE_JAIL_CRATE, + RC_GF_OUTSIDE_CENTER_CRATE_1, + RC_GF_OUTSIDE_CENTER_CRATE_2, + RC_GF_OUTSIDE_CENTER_CRATE_3, + RC_GF_OUTSIDE_CENTER_CRATE_4, + RC_GF_OUTSIDE_LEFT_CRATE_1, + RC_GF_OUTSIDE_LEFT_CRATE_2, + RC_GF_ARCHERY_RANGE_CRATE_1, + RC_GF_ARCHERY_RANGE_CRATE_2, + RC_GF_ARCHERY_RANGE_CRATE_3, + RC_GF_ARCHERY_RANGE_CRATE_4, + RC_GF_ARCHERY_RANGE_CRATE_5, + RC_GF_ARCHERY_RANGE_CRATE_6, + RC_GF_ARCHERY_RANGE_CRATE_7, + RC_GF_ARCHERY_START_CRATE_1, + RC_GF_ARCHERY_START_CRATE_2, + RC_GF_ARCHERY_LEFT_END_CRATE_1, + RC_GF_ARCHERY_LEFT_END_CRATE_2, + RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, + RC_GF_ARCHERY_RIGHT_END_CRATE_1, + RC_GF_ARCHERY_RIGHT_END_CRATE_2, + RC_GF_KITCHEN_CRATE_1, + RC_GF_KITCHEN_CRATE_2, + RC_GF_KITCHEN_CRATE_3, + RC_GF_KITCHEN_CRATE_4, + RC_GF_KITCHEN_CRATE_5, + RC_GF_BREAK_ROOM_CRATE_1, + RC_GF_BREAK_ROOM_CRATE_2, + RC_GF_BREAK_ROOM_CRATE_3, + RC_GF_BREAK_ROOM_CRATE_4, + RC_GF_NORTH_F1_CARPENTER_CRATE, + RC_GF_NORTH_F3_CARPENTER_CRATE, + RC_GF_SOUTH_F2_CARPENTER_CRATE_1, + RC_GF_SOUTH_F2_CARPENTER_CRATE_2, + RC_HW_BEFORE_QUICKSAND_CRATE, + RC_HW_AFTER_QUICKSAND_CRATE_1, + RC_HW_AFTER_QUICKSAND_CRATE_2, + RC_HW_AFTER_QUICKSAND_CRATE_3, + RC_HW_NEAR_COLOSSUS_CRATE, + RC_MK_NEAR_BAZAAR_CRATE_1, + RC_MK_NEAR_BAZAAR_CRATE_2, + RC_MK_SHOOTING_GALLERY_CRATE_1, + RC_MK_SHOOTING_GALLERY_CRATE_2, + RC_MK_LOST_DOG_HOUSE_CRATE, + RC_MK_GUARD_HOUSE_CRATE_1, + RC_MK_GUARD_HOUSE_CRATE_2, + RC_MK_GUARD_HOUSE_CRATE_3, + RC_MK_GUARD_HOUSE_CRATE_4, + RC_MK_GUARD_HOUSE_CRATE_5, + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, + RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, + RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, + RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, + RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, + RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, + RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, + RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, + RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, + RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, + RC_KAK_NEAR_GY_CHILD_CRATE, + RC_KAK_NEAR_WINDMILL_CHILD_CRATE, + RC_KAK_NEAR_FENCE_CHILD_CRATE, + RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, + RC_KAK_NEAR_BAZAAR_CHILD_CRATE, + RC_GRAVEYARD_CRATE, + RC_GC_MAZE_CRATE, + RC_DMC_CRATE, + RC_LLR_NEAR_TREE_CRATE, + RC_LH_LAB_CRATE, + + // MQ Dungeon Crates + RC_DEKU_TREE_MQ_LOBBY_CRATE, + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, + RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, + RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, + RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, + RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, + RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, + RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, + + // Dungeon Small Crates + RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, + RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, + RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, + RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, + RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, + RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, + + // MQ Dungeon Small Crates + RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, + RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, + RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, + RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, + // End Crates + RC_PIERRE, RC_DELIVER_RUTOS_LETTER, RC_MASTER_SWORD_PEDESTAL, @@ -2848,15 +3112,368 @@ typedef enum { RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, + + // Overworld Grass + RC_KF_CHILD_GRASS_1, + RC_KF_CHILD_GRASS_2, + RC_KF_CHILD_GRASS_3, + RC_KF_CHILD_GRASS_4, + RC_KF_CHILD_GRASS_5, + RC_KF_CHILD_GRASS_6, + RC_KF_CHILD_GRASS_7, + RC_KF_CHILD_GRASS_8, + RC_KF_CHILD_GRASS_9, + RC_KF_CHILD_GRASS_10, + RC_KF_CHILD_GRASS_11, + RC_KF_CHILD_GRASS_12, + RC_KF_CHILD_GRASS_MAZE_1, + RC_KF_CHILD_GRASS_MAZE_2, + RC_KF_CHILD_GRASS_MAZE_3, + RC_KF_ADULT_GRASS_1, + RC_KF_ADULT_GRASS_2, + RC_KF_ADULT_GRASS_3, + RC_KF_ADULT_GRASS_4, + RC_KF_ADULT_GRASS_5, + RC_KF_ADULT_GRASS_6, + RC_KF_ADULT_GRASS_7, + RC_KF_ADULT_GRASS_8, + RC_KF_ADULT_GRASS_9, + RC_KF_ADULT_GRASS_10, + RC_KF_ADULT_GRASS_11, + RC_KF_ADULT_GRASS_12, + RC_KF_ADULT_GRASS_13, + RC_KF_ADULT_GRASS_14, + RC_KF_ADULT_GRASS_15, + RC_KF_ADULT_GRASS_16, + RC_KF_ADULT_GRASS_17, + RC_KF_ADULT_GRASS_18, + RC_KF_ADULT_GRASS_19, + RC_KF_ADULT_GRASS_20, + RC_LW_GRASS_1, + RC_LW_GRASS_2, + RC_LW_GRASS_3, + RC_LW_GRASS_4, + RC_LW_GRASS_5, + RC_LW_GRASS_6, + RC_LW_GRASS_7, + RC_LW_GRASS_8, + RC_LW_GRASS_9, + RC_MARKET_GRASS_1, + RC_MARKET_GRASS_2, + RC_MARKET_GRASS_3, + RC_MARKET_GRASS_4, + RC_MARKET_GRASS_5, + RC_MARKET_GRASS_6, + RC_MARKET_GRASS_7, + RC_MARKET_GRASS_8, + RC_HC_GRASS_1, + RC_HC_GRASS_2, + RC_KAK_GRASS_1, + RC_KAK_GRASS_2, + RC_KAK_GRASS_3, + RC_KAK_GRASS_4, + RC_KAK_GRASS_5, + RC_KAK_GRASS_6, + RC_KAK_GRASS_7, + RC_KAK_GRASS_8, + RC_GY_GRASS_1, + RC_GY_GRASS_2, + RC_GY_GRASS_3, + RC_GY_GRASS_4, + RC_GY_GRASS_5, + RC_GY_GRASS_6, + RC_GY_GRASS_7, + RC_GY_GRASS_8, + RC_GY_GRASS_9, + RC_GY_GRASS_10, + RC_GY_GRASS_11, + RC_GY_GRASS_12, + RC_LH_GRASS_1, + RC_LH_GRASS_2, + RC_LH_GRASS_3, + RC_LH_GRASS_4, + RC_LH_GRASS_5, + RC_LH_GRASS_6, + RC_LH_GRASS_7, + RC_LH_GRASS_8, + RC_LH_GRASS_9, + RC_LH_GRASS_10, + RC_LH_GRASS_11, + RC_LH_GRASS_12, + RC_LH_GRASS_13, + RC_LH_GRASS_14, + RC_LH_GRASS_15, + RC_LH_GRASS_16, + RC_LH_GRASS_17, + RC_LH_GRASS_18, + RC_LH_GRASS_19, + RC_LH_GRASS_20, + RC_LH_GRASS_21, + RC_LH_GRASS_22, + RC_LH_GRASS_23, + RC_LH_GRASS_24, + RC_LH_GRASS_25, + RC_LH_GRASS_26, + RC_LH_GRASS_27, + RC_LH_GRASS_28, + RC_LH_GRASS_29, + RC_LH_GRASS_30, + RC_LH_GRASS_31, + RC_LH_GRASS_32, + RC_LH_GRASS_33, + RC_LH_GRASS_34, + RC_LH_GRASS_35, + RC_LH_GRASS_36, + RC_LH_CHILD_GRASS_1, + RC_LH_CHILD_GRASS_2, + RC_LH_CHILD_GRASS_3, + RC_LH_CHILD_GRASS_4, + RC_LH_WARP_PAD_GRASS_1, + RC_LH_WARP_PAD_GRASS_2, + RC_HF_NEAR_KF_GRASS_1, + RC_HF_NEAR_KF_GRASS_2, + RC_HF_NEAR_KF_GRASS_3, + RC_HF_NEAR_KF_GRASS_4, + RC_HF_NEAR_KF_GRASS_5, + RC_HF_NEAR_KF_GRASS_6, + RC_HF_NEAR_KF_GRASS_7, + RC_HF_NEAR_KF_GRASS_8, + RC_HF_NEAR_KF_GRASS_9, + RC_HF_NEAR_KF_GRASS_10, + RC_HF_NEAR_KF_GRASS_11, + RC_HF_NEAR_KF_GRASS_12, + RC_HF_NEAR_MARKET_GRASS_1, + RC_HF_NEAR_MARKET_GRASS_2, + RC_HF_NEAR_MARKET_GRASS_3, + RC_HF_NEAR_MARKET_GRASS_4, + RC_HF_NEAR_MARKET_GRASS_5, + RC_HF_NEAR_MARKET_GRASS_6, + RC_HF_NEAR_MARKET_GRASS_7, + RC_HF_NEAR_MARKET_GRASS_8, + RC_HF_NEAR_MARKET_GRASS_9, + RC_HF_NEAR_MARKET_GRASS_10, + RC_HF_NEAR_MARKET_GRASS_11, + RC_HF_NEAR_MARKET_GRASS_12, + RC_HF_SOUTH_GRASS_1, + RC_HF_SOUTH_GRASS_2, + RC_HF_SOUTH_GRASS_3, + RC_HF_SOUTH_GRASS_4, + RC_HF_SOUTH_GRASS_5, + RC_HF_SOUTH_GRASS_6, + RC_HF_SOUTH_GRASS_7, + RC_HF_SOUTH_GRASS_8, + RC_HF_SOUTH_GRASS_9, + RC_HF_SOUTH_GRASS_10, + RC_HF_SOUTH_GRASS_11, + RC_HF_SOUTH_GRASS_12, + RC_HF_CENTRAL_GRASS_1, + RC_HF_CENTRAL_GRASS_2, + RC_HF_CENTRAL_GRASS_3, + RC_HF_CENTRAL_GRASS_4, + RC_HF_CENTRAL_GRASS_5, + RC_HF_CENTRAL_GRASS_6, + RC_HF_CENTRAL_GRASS_7, + RC_HF_CENTRAL_GRASS_8, + RC_HF_CENTRAL_GRASS_9, + RC_HF_CENTRAL_GRASS_10, + RC_HF_CENTRAL_GRASS_11, + RC_HF_CENTRAL_GRASS_12, + RC_ZR_GRASS_1, + RC_ZR_GRASS_2, + RC_ZR_GRASS_3, + RC_ZR_GRASS_4, + RC_ZR_GRASS_5, + RC_ZR_GRASS_6, + RC_ZR_GRASS_7, + RC_ZR_GRASS_8, + RC_ZR_GRASS_9, + RC_ZR_GRASS_10, + RC_ZR_GRASS_11, + RC_ZR_GRASS_12, + RC_ZR_NEAR_FREESTANDING_POH_GRASS, + // Grotto Grass + RC_KF_STORMS_GROTTO_GRASS_1, + RC_KF_STORMS_GROTTO_GRASS_2, + RC_KF_STORMS_GROTTO_GRASS_3, + RC_KF_STORMS_GROTTO_GRASS_4, + RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, + RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, + RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, + RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, + RC_HF_NEAR_MARKET_GROTTO_GRASS_1, + RC_HF_NEAR_MARKET_GROTTO_GRASS_2, + RC_HF_NEAR_MARKET_GROTTO_GRASS_3, + RC_HF_NEAR_MARKET_GROTTO_GRASS_4, + RC_HF_OPEN_GROTTO_GRASS_1, + RC_HF_OPEN_GROTTO_GRASS_2, + RC_HF_OPEN_GROTTO_GRASS_3, + RC_HF_OPEN_GROTTO_GRASS_4, + RC_HF_SOUTHEAST_GROTTO_GRASS_1, + RC_HF_SOUTHEAST_GROTTO_GRASS_2, + RC_HF_SOUTHEAST_GROTTO_GRASS_3, + RC_HF_SOUTHEAST_GROTTO_GRASS_4, + RC_HF_COW_GROTTO_GRASS_1, + RC_HF_COW_GROTTO_GRASS_2, + RC_KAK_OPEN_GROTTO_GRASS_1, + RC_KAK_OPEN_GROTTO_GRASS_2, + RC_KAK_OPEN_GROTTO_GRASS_3, + RC_KAK_OPEN_GROTTO_GRASS_4, + RC_DMT_STORMS_GROTTO_GRASS_1, + RC_DMT_STORMS_GROTTO_GRASS_2, + RC_DMT_STORMS_GROTTO_GRASS_3, + RC_DMT_STORMS_GROTTO_GRASS_4, + RC_DMT_COW_GROTTO_GRASS_1, + RC_DMT_COW_GROTTO_GRASS_2, + RC_DMC_UPPER_GROTTO_GRASS_1, + RC_DMC_UPPER_GROTTO_GRASS_2, + RC_DMC_UPPER_GROTTO_GRASS_3, + RC_DMC_UPPER_GROTTO_GRASS_4, + RC_ZR_OPEN_GROTTO_GRASS_1, + RC_ZR_OPEN_GROTTO_GRASS_2, + RC_ZR_OPEN_GROTTO_GRASS_3, + RC_ZR_OPEN_GROTTO_GRASS_4, + // Dungeon Grass + RC_DEKU_TREE_LOBBY_GRASS_1, + RC_DEKU_TREE_LOBBY_GRASS_2, + RC_DEKU_TREE_LOBBY_GRASS_3, + RC_DEKU_TREE_LOBBY_GRASS_4, + RC_DEKU_TREE_LOBBY_GRASS_5, + RC_DEKU_TREE_SLINGSHOT_GRASS_1, + RC_DEKU_TREE_SLINGSHOT_GRASS_2, + RC_DEKU_TREE_SLINGSHOT_GRASS_3, + RC_DEKU_TREE_SLINGSHOT_GRASS_4, + RC_DEKU_TREE_COMPASS_GRASS_1, + RC_DEKU_TREE_COMPASS_GRASS_2, + RC_DEKU_TREE_BASEMENT_GRASS_1, + RC_DEKU_TREE_BASEMENT_GRASS_2, + RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, + RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, + RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, + RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, + RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, + RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, + RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, + RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, + RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, + RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, + RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, + RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, + RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, + RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, + RC_DODONGOS_CAVERN_BLADE_GRASS, + RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, + RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, + RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, + RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, + RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, + // MQ Dungeon Grass + RC_DEKU_TREE_MQ_LOBBY_GRASS_1, + RC_DEKU_TREE_MQ_LOBBY_GRASS_2, + RC_DEKU_TREE_MQ_LOBBY_GRASS_3, + RC_DEKU_TREE_MQ_LOBBY_GRASS_4, + RC_DEKU_TREE_MQ_LOBBY_GRASS_5, + RC_DEKU_TREE_MQ_LOBBY_GRASS_6, + RC_DEKU_TREE_MQ_LOBBY_GRASS_7, + RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, + RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, + RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, + RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, + RC_DEKU_TREE_MQ_COMPASS_GRASS_1, + RC_DEKU_TREE_MQ_COMPASS_GRASS_2, + RC_DEKU_TREE_MQ_COMPASS_GRASS_3, + RC_DEKU_TREE_MQ_COMPASS_GRASS_4, + RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, + RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, + RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, + RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, + RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, + RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, + RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, + RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, + RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, + RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, + RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, + RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, + RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, + RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, + RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, + RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, + RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, + RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, + RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, + RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, + RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, + RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, + RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, + // Shared Dungeon Grass + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, + // End Grass + RC_MAX } RandomizerCheck; -// Randomizer tricks and glitches (beta) based on knowledge of what is achievable in Ship of Harkinian randomizer, excludes Item manipulation (e.g. RBA/GIM/SRM) and Wrong Warping and Ganon BK Skip -// TODO Fill and alphabetize (area based tricks must have area in name and come alphetized after general tricks) +// Randomizer tricks and glitches (beta) based on knowledge of what is achievable in Ship of Harkinian randomizer, +// excludes Item manipulation (e.g. RBA/GIM/SRM) and Wrong Warping and Ganon BK Skip +// TODO Fill and alphabetize (area based tricks must have area in name and come alphetized after general tricks) // TODO test commented out tricks to see if consistent with console on SoH // TODO add area specific tricks typedef enum { - RT_VISIBLE_COLLISION, // -- general tricks + RT_VISIBLE_COLLISION, // -- general tricks RT_GROTTOS_WITHOUT_AGONY, RT_FEWER_TUNIC_REQUIREMENTS, RT_RUSTED_SWITCHES, @@ -2866,7 +3483,7 @@ typedef enum { RT_HOVER_BOOST_SIMPLE, RT_BOMBCHU_BEEHIVES, RT_BLUE_FIRE_MUD_WALLS, - RT_KF_ADULT_GS, // -- location tricks + RT_KF_ADULT_GS, // -- location tricks RT_LW_BRIDGE, RT_LW_MIDO_BACKFLIP, RT_LW_GS_BEAN, @@ -2874,7 +3491,7 @@ typedef enum { RT_KAK_MAN_ON_ROOF, RT_KAK_TOWER_GS, RT_KAK_ADULT_WINDMILL_POH, - RT_KAK_CHILD_WINDMILL_POH, + RT_KAK_CHILD_WINDMILL_POH, RT_KAK_ROOFTOP_GS, RT_GY_POH, RT_GY_CHILD_DAMPE_RACE_POH, @@ -3033,7 +3650,7 @@ typedef enum { RT_GANON_MQ_FIRE_TRIAL, RT_GANON_MQ_SHADOW_TRIAL, RT_GANON_MQ_LIGHT_TRIAL, - //RT_ROCS_FEATHER --if implemented with main branch + // RT_ROCS_FEATHER --if implemented with main branch RT_FOREST_TEMPLE_BK_SKIP, RT_FIRE_TEMPLE_BK_SKIP, RT_WATER_TEMPLE_BK_SKIP, @@ -3088,11 +3705,11 @@ typedef enum { RT_WEIRDSHOT, RT_WEIRDSHOT_CHU, RT_WEIRDSHOT_ENEMY, - //RT_FW_VOID_WARP_FAST_TEXT, --untested tricks: - //RT_ACTION_SWAP, - //RT_ACTOR_GLITCH, - //RT_ADULT_TRADE_TTG, - RT_TOT_DOT_SKIP_SWORDLESS, //AREA SPECIFIC GLITCHES + // RT_FW_VOID_WARP_FAST_TEXT, --untested tricks: + // RT_ACTION_SWAP, + // RT_ACTOR_GLITCH, + // RT_ADULT_TRADE_TTG, + RT_TOT_DOT_SKIP_SWORDLESS, // AREA SPECIFIC GLITCHES RT_TOT_DOT_SKIP_SWORD, RT_LLR_STEAL_EPONA, RT_KF_POKEY_SKIP, @@ -3108,7 +3725,7 @@ typedef enum { RT_ZF_JABU_ADULT_HOVERBOOT_BOMB, RT_FOREST_TEMPLE_FOUR_POE_SKIP, RT_FOREST_TEMPLE_JUNGLE_JUMP, - //RT_DARUNIA_CUTSCENE, + // RT_DARUNIA_CUTSCENE, RT_BOTTOM_OF_THE_WELL_SKULL_PUSH, RT_GANONS_CASTLE_BARRIER_SKIP_HOVER, RT_GANONS_CASTLE_GOLD_GAUNTLET_SKIP, @@ -3368,6 +3985,8 @@ typedef enum { RG_HOOKSHOT, RG_LONGSHOT, RG_SCARECROW, + + // Overworld keys RG_GUARD_HOUSE_KEY, RG_MARKET_BAZAAR_KEY, RG_MARKET_POTION_SHOP_KEY, @@ -4765,6 +5384,29 @@ typedef enum { RHT_POT_GANONS_CASTLE, RHT_POT_BOTTOM_OF_THE_WELL, RHT_POT_ICE_CAVERN, + // Shuffle Crates + RHT_CRATE_GERUDO_VALLEY, + RHT_CRATE_GERUDOS_FORTRESS, + RHT_CRATE_THIEVES_HIDEOUT, + RHT_CRATE_WASTELAND, + RHT_CRATE_MARKET, + RHT_CRATE_DOG_LADY_HOUSE, + RHT_CRATE_MARKET_GUARD_HOUSE, + RHT_CRATE_KAKARIKO_VILLAGE, + RHT_CRATE_GRAVEYARD, + RHT_CRATE_GORON_CITY, + RHT_CRATE_DEATH_MOUNTAIN_CRATER, + RHT_CRATE_LON_LON_RANCH, + RHT_CRATE_LAKESIDE_LABORATORY, + RHT_CRATE_DEKU_TREE, + RHT_CRATE_DODONGOS_CAVERN, + RHT_CRATE_JABU_JABU, + RHT_CRATE_FOREST_TEMPLE, + RHT_CRATE_FIRE_TEMPLE, + RHT_CRATE_WATER_TEMPLE, + RHT_CRATE_SPIRIT_TEMPLE, + RHT_CRATE_SHADOW_TEMPLE, + RHT_CRATE_GERUDO_TRAINING_GROUND, // Ganon Line RHT_GANON_JOKE01, RHT_GANON_JOKE02, @@ -4929,11 +5571,25 @@ typedef enum { RHT_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, + // GRASS + RHT_KF_GRASS, + RHT_LW_GRASS, + RHT_MARKET_GRASS, + RHT_HC_GRASS, + RHT_KAK_GRASS, + RHT_GY_GRASS, + RHT_LH_GRASS, + RHT_HF_GRASS, + RHT_ZR_GRASS, + RHT_GROTTO_GRASS, + RHT_DEKU_TREE_GRASS, + RHT_DODONGOS_CAVERN_GRASS, + RHT_BOTTOM_OF_THE_WELL_GRASS, + RHT_JABU_JABUS_BELLY_GRASS, // MAX - RHT_MAX + RHT_MAX, } RandomizerHintTextKey; - typedef struct { RandomizerGet rgID; RandomizerGet fakeRgID; @@ -5042,16 +5698,16 @@ typedef enum { RSK_STARTING_KOKIRI_SWORD, RSK_STARTING_MASTER_SWORD, RSK_STARTING_ZELDAS_LULLABY, - RSK_STARTING_EPONAS_SONG, - RSK_STARTING_SARIAS_SONG, + RSK_STARTING_EPONAS_SONG, + RSK_STARTING_SARIAS_SONG, RSK_STARTING_SUNS_SONG, RSK_STARTING_SONG_OF_TIME, RSK_STARTING_SONG_OF_STORMS, - RSK_STARTING_MINUET_OF_FOREST, + RSK_STARTING_MINUET_OF_FOREST, RSK_STARTING_BOLERO_OF_FIRE, RSK_STARTING_SERENADE_OF_WATER, - RSK_STARTING_REQUIEM_OF_SPIRIT, - RSK_STARTING_NOCTURNE_OF_SHADOW, + RSK_STARTING_REQUIEM_OF_SPIRIT, + RSK_STARTING_NOCTURNE_OF_SHADOW, RSK_STARTING_PRELUDE_OF_LIGHT, RSK_SHUFFLE_KOKIRI_SWORD, RSK_SHUFFLE_MASTER_SWORD, @@ -5088,6 +5744,7 @@ typedef enum { RSK_SHUFFLE_WEIRD_EGG, RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD, RSK_SHUFFLE_POTS, + RSK_SHUFFLE_CRATES, RSK_SHUFFLE_FROG_SONG_RUPEES, RSK_ITEM_POOL, RSK_ICE_TRAPS, @@ -5221,11 +5878,12 @@ typedef enum { RSK_SHUFFLE_FREESTANDING, RSK_SHUFFLE_FAIRIES, RSK_LOCK_OVERWORLD_DOORS, + RSK_SHUFFLE_GRASS, RSK_MAX } RandomizerSettingKey; -//Generic Settings (any binary option can use this) -// off/on +// Generic Settings (any binary option can use this) +// off/on typedef enum { RO_GENERIC_OFF, RO_GENERIC_ON, @@ -5243,54 +5901,54 @@ typedef enum { RO_GENERIC_SKIP, } RandoOptionGenericSkip; -//Closed Forest settings (On, Deku Only, Off) +// Closed Forest settings (On, Deku Only, Off) typedef enum { RO_CLOSED_FOREST_ON, RO_CLOSED_FOREST_DEKU_ONLY, RO_CLOSED_FOREST_OFF, } RandoOptionForest; -//Door of Time settings (closed, song only, open) +// Door of Time settings (closed, song only, open) typedef enum { RO_DOOROFTIME_CLOSED, RO_DOOROFTIME_SONGONLY, RO_DOOROFTIME_OPEN, } RandoOptionDoorOfTime; -//Zora's Fountain settings (closed, closed as child, open) +// Zora's Fountain settings (closed, closed as child, open) typedef enum { RO_ZF_CLOSED, RO_ZF_CLOSED_CHILD, RO_ZF_OPEN, } RandoOptionZorasFountain; -//Sleeping Waterfall settings (closed, open) +// Sleeping Waterfall settings (closed, open) typedef enum { RO_WATERFALL_CLOSED, RO_WATERFALL_OPEN, } RandoOptionSleepingWaterfall; -//Starting Age settings (child, adult, random) +// Starting Age settings (child, adult, random) typedef enum { RO_AGE_CHILD, RO_AGE_ADULT, RO_AGE_RANDOM, } RandoOptionStartingAge; -//Fortress Carpenters settings (normal, fast, free) +// Fortress Carpenters settings (normal, fast, free) typedef enum { RO_GF_CARPENTERS_NORMAL, RO_GF_CARPENTERS_FAST, RO_GF_CARPENTERS_FREE, } RandoOptionGerudoFortress; -//Kakariko Gate settings (closed/open) +// Kakariko Gate settings (closed/open) typedef enum { RO_KAK_GATE_CLOSED, RO_KAK_GATE_OPEN, } RandoOptionKakarikoGate; -//Rainbow Bridge settings (vanilla, always open, stones, medallions, dungeon rewards, dungeons, tokens) +// Rainbow Bridge settings (vanilla, always open, stones, medallions, dungeon rewards, dungeons, tokens) typedef enum { RO_BRIDGE_VANILLA = 0, RO_BRIDGE_ALWAYS_OPEN, @@ -5309,14 +5967,14 @@ typedef enum { RO_BRIDGE_WILDCARD_REWARD, } RandoOptionBridgeRewards; -//Shopsanity settings (off, specific count, random) +// Shopsanity settings (off, specific count, random) typedef enum { RO_SHOPSANITY_OFF, RO_SHOPSANITY_SPECIFIC_COUNT, RO_SHOPSANITY_RANDOM, } RandoOptionShopsanity; -//Shopsanity count settings (0-7 items) +// Shopsanity count settings (0-7 items) typedef enum { RO_SHOPSANITY_COUNT_ZERO_ITEMS, RO_SHOPSANITY_COUNT_ONE_ITEM, @@ -5329,27 +5987,27 @@ typedef enum { RO_SHOPSANITY_COUNT_EIGHT_ITEMS, } RandoOptionShopsanityCount; -//Shopsanity price ranges +// Shopsanity price ranges typedef enum { RO_PRICE_VANILLA, - RO_PRICE_CHEAP_BALANCED, //Balanced random from 0-95, favoring lower numbers - RO_PRICE_BALANCED, //Random from 0-300, favoring lower numbers + RO_PRICE_CHEAP_BALANCED, // Balanced random from 0-95, favoring lower numbers + RO_PRICE_BALANCED, // Random from 0-300, favoring lower numbers RO_PRICE_FIXED, RO_PRICE_RANGE, RO_PRICE_SET_BY_WALLET, } RandoOptionPrices; -//Scrubsanity settings (off, affordable, expensive, random) +// Scrubsanity settings (off, affordable, expensive, random) typedef enum { RO_SCRUBS_OFF, RO_SCRUBS_ONE_TIME_ONLY, RO_SCRUBS_ALL, } RandoOptionScrubsanity; -//Ammo drop settings (on, "on+bombchu", off) +// Ammo drop settings (on, "on+bombchu", off) typedef enum { RO_AMMO_DROPS_OFF, - //RO_AMMO_DROPS_ON_PLUS_BOMBCHU, + // RO_AMMO_DROPS_ON_PLUS_BOMBCHU, RO_AMMO_DROPS_ON, } RandoOptionAmmoDrops; @@ -5359,7 +6017,7 @@ typedef enum { RO_BOSS_SOULS_ON_PLUS_GANON, } RandoOptionBossSouls; -//Fishsanity settings (off, loach only, pond only, grottos only, both) +// Fishsanity settings (off, loach only, pond only, grottos only, both) typedef enum { RO_FISHSANITY_OFF, RO_FISHSANITY_HYRULE_LOACH, @@ -5368,15 +6026,15 @@ typedef enum { RO_FISHSANITY_BOTH } RandoOptionsFishsanity; -//Infinite Upgrades settings (off, progressive, condensed progressive) +// Infinite Upgrades settings (off, progressive, condensed progressive) typedef enum { RO_INF_UPGRADES_OFF, RO_INF_UPGRADES_PROGRESSIVE, RO_INF_UPGRADES_CONDENSED_PROGRESSIVE, } RandoOptionInfiniteUpgrades; -//Any Dungeon Item (start with, vanilla, own dungeon, any dungeon, -//overworld, anywhere) +// Any Dungeon Item (start with, vanilla, own dungeon, any dungeon, +// overworld, anywhere) typedef enum { RO_DUNGEON_ITEM_LOC_STARTWITH, RO_DUNGEON_ITEM_LOC_VANILLA, @@ -5386,7 +6044,7 @@ typedef enum { RO_DUNGEON_ITEM_LOC_ANYWHERE, } RandoOptionDungeonItemLocation; -//Dungeon reward settings +// Dungeon reward settings typedef enum { RO_DUNGEON_REWARDS_VANILLA, RO_DUNGEON_REWARDS_END_OF_DUNGEON, @@ -5395,7 +6053,7 @@ typedef enum { RO_DUNGEON_REWARDS_ANYWHERE, } RandoOptionDungeonRewards; -//Keyring Settings +// Keyring Settings typedef enum { RO_KEYRINGS_OFF, RO_KEYRINGS_RANDOM, @@ -5409,8 +6067,8 @@ typedef enum { RO_KEYRING_FOR_DUNGEON_ON, } RandoOptionKeyringForDungeon; -//Ganon's Boss Key Settings (vanilla, own dungeon, start with, -//overworld, anywhere, 100 GS reward) +// Ganon's Boss Key Settings (vanilla, own dungeon, start with, +// overworld, anywhere, 100 GS reward) typedef enum { RO_GANON_BOSS_KEY_VANILLA, RO_GANON_BOSS_KEY_OWN_DUNGEON, @@ -5443,42 +6101,42 @@ typedef enum { RO_LACS_WILDCARD_REWARD, } RandoOptionLACSRewards; -//Ganon's Trials +// Ganon's Trials typedef enum { RO_GANONS_TRIALS_SKIP, RO_GANONS_TRIALS_SET_NUMBER, RO_GANONS_TRIALS_RANDOM_NUMBER, } RandoOptionGanonsTrials; -//Shuffle Dungeon Entrance Settings (Off, on, plus ganon) +// Shuffle Dungeon Entrance Settings (Off, on, plus ganon) typedef enum { RO_DUNGEON_ENTRANCE_SHUFFLE_OFF, RO_DUNGEON_ENTRANCE_SHUFFLE_ON, RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON, } RandoOptionDungeonEntranceShuffle; -//Shuffle Boss Room Entrance Settings (Off, Age Restricted, Full) +// Shuffle Boss Room Entrance Settings (Off, Age Restricted, Full) typedef enum { RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF, RO_BOSS_ROOM_ENTRANCE_SHUFFLE_AGE_RESTRICTED, RO_BOSS_ROOM_ENTRANCE_SHUFFLE_FULL, } RandoOptionBossRoomEntranceShuffle; -//Shuffle Interior Entrance Settings (Off, simple, all) +// Shuffle Interior Entrance Settings (Off, simple, all) typedef enum { RO_INTERIOR_ENTRANCE_SHUFFLE_OFF, RO_INTERIOR_ENTRANCE_SHUFFLE_SIMPLE, RO_INTERIOR_ENTRANCE_SHUFFLE_ALL, } RandoOptionInteriorEntranceShuffle; -//Song shuffle Settings (Song locations, Dungeon rewards, anywhere) +// Song shuffle Settings (Song locations, Dungeon rewards, anywhere) typedef enum { RO_SONG_SHUFFLE_SONG_LOCATIONS, RO_SONG_SHUFFLE_DUNGEON_REWARDS, RO_SONG_SHUFFLE_ANYWHERE, } RandoOptionSongShuffle; -//Shuffle Merchants Settings (Off, Beans Only, All but Beans, All) +// Shuffle Merchants Settings (Off, Beans Only, All but Beans, All) typedef enum { RO_SHUFFLE_MERCHANTS_OFF, RO_SHUFFLE_MERCHANTS_BEANS_ONLY, @@ -5486,14 +6144,14 @@ typedef enum { RO_SHUFFLE_MERCHANTS_ALL } RandoOptionShuffleMerchants; -//Starting Ocarina Settings (off, fairy) +// Starting Ocarina Settings (off, fairy) typedef enum { RO_STARTING_OCARINA_OFF, RO_STARTING_OCARINA_FAIRY, RO_STARTING_OCARINA_TIME, } RandoOptionStartingOcarina; -//Item Pool Settings +// Item Pool Settings typedef enum { RO_ITEM_POOL_PLENTIFUL, RO_ITEM_POOL_BALANCED, @@ -5501,7 +6159,7 @@ typedef enum { RO_ITEM_POOL_MINIMAL, } RandoOptionItemPool; -//Ice Trap Settings +// Ice Trap Settings typedef enum { RO_ICE_TRAPS_OFF, RO_ICE_TRAPS_NORMAL, @@ -5510,8 +6168,8 @@ typedef enum { RO_ICE_TRAPS_ONSLAUGHT, } RandoOptionIceTraps; -//Gossip Stone Hint Settings (no hints, needs nothing, -//needs mask of truth, needs stone of agony) +// Gossip Stone Hint Settings (no hints, needs nothing, +// needs mask of truth, needs stone of agony) typedef enum { RO_GOSSIP_STONES_NONE, RO_GOSSIP_STONES_NEED_NOTHING, @@ -5519,14 +6177,14 @@ typedef enum { RO_GOSSIP_STONES_NEED_STONE, } RandoOptionGossipStones; -//Hint Clarity Settings (obscure, ambiguous, clear) +// Hint Clarity Settings (obscure, ambiguous, clear) typedef enum { RO_HINT_CLARITY_OBSCURE, RO_HINT_CLARITY_AMBIGUOUS, RO_HINT_CLARITY_CLEAR, } RandoOptionHintClarity; -//Hint Distribution Settings (useless, balanced, strong, very strong) +// Hint Distribution Settings (useless, balanced, strong, very strong) typedef enum { RO_HINT_DIST_USELESS, RO_HINT_DIST_BALANCED, @@ -5534,8 +6192,8 @@ typedef enum { RO_HINT_DIST_VERY_STRONG, } RandoOptionHintDistribution; -//Gerudo Fortress Key Settings (vanilla, any dungeon, overworld, -//anywhere) +// Gerudo Fortress Key Settings (vanilla, any dungeon, overworld, +// anywhere) typedef enum { RO_GERUDO_KEYS_VANILLA, RO_GERUDO_KEYS_ANY_DUNGEON, @@ -5543,7 +6201,7 @@ typedef enum { RO_GERUDO_KEYS_ANYWHERE, } RandoOptionGerudoKeys; -//Tokensanity settings (off, dungeons, overworld, all) +// Tokensanity settings (off, dungeons, overworld, all) typedef enum { RO_TOKENSANITY_OFF, RO_TOKENSANITY_DUNGEONS, @@ -5551,7 +6209,7 @@ typedef enum { RO_TOKENSANITY_ALL, } RandoOptionTokensanity; -//Freestanding Hearts/Rupees settings (off, dungeons, overworld, all) +// Freestanding Hearts/Rupees settings (off, dungeons, overworld, all) typedef enum { RO_SHUFFLE_FREESTANDING_OFF, RO_SHUFFLE_FREESTANDING_DUNGEONS, @@ -5567,7 +6225,23 @@ typedef enum { RO_SHUFFLE_POTS_ALL, } RandoOptionShufflePots; -//Link's Pocket Settings (dungeon reward, advancement, anything, nothing) +// Shuffle Grass settings (off, dungeons, overworld, all) +typedef enum { + RO_SHUFFLE_GRASS_OFF, + RO_SHUFFLE_GRASS_DUNGEONS, + RO_SHUFFLE_GRASS_OVERWORLD, + RO_SHUFFLE_GRASS_ALL, +} RandoOptionShuffleGrass; + +// Shuffle Crates settings (off, dungeons, overworld, all) +typedef enum { + RO_SHUFFLE_CRATES_OFF, + RO_SHUFFLE_CRATES_DUNGEONS, + RO_SHUFFLE_CRATES_OVERWORLD, + RO_SHUFFLE_CRATES_ALL, +} RandoOptionShuffleCrates; + +// Link's Pocket Settings (dungeon reward, advancement, anything, nothing) typedef enum { RO_LINKS_POCKET_DUNGEON_REWARD, RO_LINKS_POCKET_ADVANCEMENT, @@ -5662,14 +6336,29 @@ typedef struct FishIdentity { RandomizerCheck randomizerCheck; } FishIdentity; +typedef struct GrassIdentity { + RandomizerInf randomizerInf; + RandomizerCheck randomizerCheck; +} GrassIdentity; + +typedef struct CrateIdentity { + RandomizerInf randomizerInf; + RandomizerCheck randomizerCheck; +} CrateIdentity; + +typedef struct SmallCrateIdentity { + RandomizerInf randomizerInf; + RandomizerCheck randomizerCheck; +} SmallCrateIdentity; + typedef enum { TRACKER_WINDOW_FLOATING, - TRACKER_WINDOW_WINDOW + TRACKER_WINDOW_WINDOW, } TrackerWindowType; typedef enum { TRACKER_DISPLAY_ALWAYS, - TRACKER_DISPLAY_COMBO_BUTTON + TRACKER_DISPLAY_COMBO_BUTTON, } TrackerDisplayType; typedef enum { @@ -5752,13 +6441,13 @@ typedef enum { RE_OCTOROK, } RandomizerEnemy; -//RANDOTODO compare child long jumpslash range with adult short +// RANDOTODO compare child long jumpslash range with adult short typedef enum { ED_CLOSE, - //hammer or kokiri sword + // hammer or kokiri sword ED_SHORT_JUMPSLASH, ED_MASTER_SWORD_JUMPSLASH, - //sticks or BGS + // sticks or BGS ED_LONG_JUMPSLASH, ED_BOMB_THROW, ED_BOOMERANG, @@ -5772,7 +6461,7 @@ typedef enum { WL_MID, WL_HIGH, WL_LOW_OR_MID, - WL_HIGH_OR_MID + WL_HIGH_OR_MID, } RandoWaterLevel; #define ENTRANCE_GROTTO_LOAD_START 0x0700 diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp index b8d435fd8..4d7d7a59a 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp @@ -113,23 +113,20 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { (location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) && (location.GetQuest() == RCQUEST_BOTH || location.GetQuest() == RCQUEST_MQ && - ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_NONE) == RO_MQ_DUNGEONS_SET_NUMBER && + ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_NONE) == + RO_MQ_DUNGEONS_SET_NUMBER && (CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeonCount"), 12) > 0) || // at least one MQ dungeon - CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_NONE) == RO_MQ_DUNGEONS_RANDOM_NUMBER)) || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_NONE) == + RO_MQ_DUNGEONS_RANDOM_NUMBER)) || location.GetQuest() == RCQUEST_VANILLA && - (CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_NONE) != RO_MQ_DUNGEONS_SET_NUMBER || + (CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), RO_MQ_DUNGEONS_NONE) != + RO_MQ_DUNGEONS_SET_NUMBER || CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeonCount"), 12) < 12) // at least one vanilla dungeon ) && - ( - location.GetRCType() != RCTYPE_SHOP || - !( - ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF) || - ( - ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_SPECIFIC_COUNT) && - ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_ZERO_ITEMS) - ) - ) - ) && + (location.GetRCType() != RCTYPE_SHOP || + !(ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_OFF) || + (ctx->GetOption(RSK_SHOPSANITY).Is(RO_SHOPSANITY_SPECIFIC_COUNT) && + ctx->GetOption(RSK_SHOPSANITY_COUNT).Is(RO_SHOPSANITY_COUNT_ZERO_ITEMS)))) && (location.GetRCType() != RCTYPE_SCRUB || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleScrubs"), RO_SCRUBS_OFF) != RO_SCRUBS_OFF || location.GetRandomizerCheck() == RC_HF_DEKU_SCRUB_GROTTO || @@ -137,7 +134,8 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { location.GetRandomizerCheck() == RC_LW_DEKU_SCRUB_NEAR_BRIDGE) && // The 3 scrubs that are always randomized (location.GetRCType() != RCTYPE_MERCHANT || - CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), RO_SHUFFLE_MERCHANTS_OFF) != RO_SHUFFLE_MERCHANTS_OFF) && + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), RO_SHUFFLE_MERCHANTS_OFF) != + RO_SHUFFLE_MERCHANTS_OFF) && (location.GetRCType() != RCTYPE_SONG_LOCATION || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleSongs"), RO_SONG_SHUFFLE_SONG_LOCATIONS) != RO_SONG_SHUFFLE_SONG_LOCATIONS) && // song locations @@ -152,27 +150,45 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { (location.GetRCType() != RCTYPE_OCARINA || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), RO_GENERIC_NO)) && // ocarina locations (location.GetRandomizerCheck() != RC_HC_ZELDAS_LETTER) && // don't show until we support shuffling letter - (location.GetRCType() != RCTYPE_GOSSIP_STONE) && // don't show gossip stones (maybe gossipsanity will be a thing eventually?) - (location.GetRCType() != RCTYPE_STATIC_HINT) && // don't show static hints + (location.GetRCType() != + RCTYPE_GOSSIP_STONE) && // don't show gossip stones (maybe gossipsanity will be a thing eventually?) + (location.GetRCType() != RCTYPE_STATIC_HINT) && // don't show static hints (location.GetRCType() != RCTYPE_LINKS_POCKET) && // links pocket can be set to nothing if needed (location.GetRCType() != RCTYPE_CHEST_GAME) && // don't show non final reward chest game checks until we support shuffling them (location.GetRCType() != RCTYPE_SKULL_TOKEN || (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_OFF) == RO_TOKENSANITY_ALL) || - ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_OFF) == RO_TOKENSANITY_OVERWORLD) && + ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_OFF) == + RO_TOKENSANITY_OVERWORLD) && RandomizerCheckObjects::AreaIsOverworld(location.GetArea())) || - ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_OFF) == RO_TOKENSANITY_DUNGEONS) && + ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleTokens"), RO_TOKENSANITY_OFF) == + RO_TOKENSANITY_DUNGEONS) && RandomizerCheckObjects::AreaIsDungeon(location.GetArea()))) && (location.GetRCType() != RCTYPE_FREESTANDING || - (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), RO_SHUFFLE_FREESTANDING_OFF) == RO_SHUFFLE_FREESTANDING_ALL) || - ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), RO_SHUFFLE_FREESTANDING_OFF) == RO_SHUFFLE_FREESTANDING_OVERWORLD) && + (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), RO_SHUFFLE_FREESTANDING_OFF) == + RO_SHUFFLE_FREESTANDING_ALL) || + ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), RO_SHUFFLE_FREESTANDING_OFF) == + RO_SHUFFLE_FREESTANDING_OVERWORLD) && RandomizerCheckObjects::AreaIsOverworld(location.GetArea())) || - ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), RO_SHUFFLE_FREESTANDING_OFF) == RO_SHUFFLE_FREESTANDING_DUNGEONS) && + ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), RO_SHUFFLE_FREESTANDING_OFF) == + RO_SHUFFLE_FREESTANDING_DUNGEONS) && RandomizerCheckObjects::AreaIsDungeon(location.GetArea()))) && - (location.GetRCType() != RCTYPE_BEEHIVE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleBeehives"), RO_GENERIC_NO)) && - (location.GetRCType() != RCTYPE_COW || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCows"), RO_GENERIC_NO)) && - (location.GetRCType() != RCTYPE_POT || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShufflePots"), RO_GENERIC_NO)) && - (location.GetRCType() != RCTYPE_FISH || ctx->GetFishsanity()->GetFishLocationIncluded(&location, FSO_SOURCE_CVARS)) && + (location.GetRCType() != RCTYPE_BEEHIVE || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleBeehives"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_COW || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCows"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_POT || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShufflePots"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_GRASS || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGrass"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_CRATE || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCrates"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_NLCRATE || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCrates"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_SMALL_CRATE || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCrates"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_FISH || + ctx->GetFishsanity()->GetFishLocationIncluded(&location, FSO_SOURCE_CVARS)) && (location.GetRCType() != RCTYPE_ADULT_TRADE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), RO_GENERIC_NO)) && (location.GetRandomizerCheck() != RC_KF_KOKIRI_SWORD_CHEST || @@ -191,7 +207,8 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { CVarGetInteger(CVAR_RANDOMIZER_SETTING("StartingMapsCompasses"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) != RO_DUNGEON_ITEM_LOC_VANILLA) && (location.GetRCType() != RCTYPE_SMALL_KEY || - CVarGetInteger(CVAR_RANDOMIZER_SETTING("Keysanity"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) != RO_DUNGEON_ITEM_LOC_VANILLA) && + CVarGetInteger(CVAR_RANDOMIZER_SETTING("Keysanity"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) != + RO_DUNGEON_ITEM_LOC_VANILLA) && (location.GetRCType() != RCTYPE_BOSS_KEY || CVarGetInteger(CVAR_RANDOMIZER_SETTING("BossKeysanity"), RO_DUNGEON_ITEM_LOC_OWN_DUNGEON) != RO_DUNGEON_ITEM_LOC_VANILLA) && @@ -215,17 +232,22 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_VANILLA) != RO_GANON_BOSS_KEY_KAK_TOKENS) && // 100 skull reward ganon boss key (location.GetRCType() != RCTYPE_GF_KEY && location.GetRandomizerCheck() != RC_GF_GERUDO_MEMBERSHIP_CARD || - (CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) == RO_GF_CARPENTERS_FREE && + (CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) == + RO_GF_CARPENTERS_FREE && location.GetRCType() != RCTYPE_GF_KEY && location.GetRandomizerCheck() != RC_GF_GERUDO_MEMBERSHIP_CARD) || - (CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) == RO_GF_CARPENTERS_FAST && + (CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) == + RO_GF_CARPENTERS_FAST && ((location.GetRandomizerCheck() == RC_GF_GERUDO_MEMBERSHIP_CARD && CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), RO_GENERIC_NO) == RO_GENERIC_YES) || (location.GetRandomizerCheck() == RC_GF_NORTH_F1_CARPENTER && - CVarGetInteger(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_VANILLA) != RO_GERUDO_KEYS_VANILLA))) || - (CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) == RO_GF_CARPENTERS_NORMAL && + CVarGetInteger(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_VANILLA) != + RO_GERUDO_KEYS_VANILLA))) || + (CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) == + RO_GF_CARPENTERS_NORMAL && ((location.GetRandomizerCheck() == RC_GF_GERUDO_MEMBERSHIP_CARD && CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), RO_GENERIC_NO) == RO_GENERIC_YES) || (location.GetRCType() == RCTYPE_GF_KEY && - CVarGetInteger(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_VANILLA) != RO_GERUDO_KEYS_VANILLA))))); + CVarGetInteger(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_VANILLA) != + RO_GERUDO_KEYS_VANILLA))))); } } diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_objects.h b/soh/soh/Enhancements/randomizer/randomizer_check_objects.h index 6ab5b8314..7a7e605bb 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_objects.h +++ b/soh/soh/Enhancements/randomizer/randomizer_check_objects.h @@ -7,11 +7,11 @@ #include namespace RandomizerCheckObjects { - bool AreaIsDungeon(RandomizerCheckArea area); - bool AreaIsOverworld(RandomizerCheckArea area); - std::string GetRCAreaName(RandomizerCheckArea area); - std::map> GetAllRCObjectsByArea(); - std::map GetAllRCAreaBySceneID(); - RandomizerCheckArea GetRCAreaBySceneID(SceneID sceneId); - void UpdateImGuiVisibility(); -} +bool AreaIsDungeon(RandomizerCheckArea area); +bool AreaIsOverworld(RandomizerCheckArea area); +std::string GetRCAreaName(RandomizerCheckArea area); +std::map> GetAllRCObjectsByArea(); +std::map GetAllRCAreaBySceneID(); +RandomizerCheckArea GetRCAreaBySceneID(SceneID sceneId); +void UpdateImGuiVisibility(); +} // namespace RandomizerCheckObjects diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index c51650bbd..5eeabb99c 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -9,9 +9,13 @@ #include "soh/SohGui/UIWidgets.hpp" #include "soh/SohGui/SohGui.hpp" #include "dungeon.h" +#include "entrance.h" #include "location_access.h" +#include "3drando/fill.hpp" +#include "soh/Enhancements/debugger/performanceTimer.h" #include +#include #include #include #include @@ -59,6 +63,10 @@ bool showWeirdEgg; bool showGerudoCard; bool showOverworldPots; bool showDungeonPots; +bool showOverworldGrass; +bool showDungeonGrass; +bool showOverworldCrates; +bool showDungeonCrates; bool showFrogSongRupees; bool showFairies; bool showStartingMapsCompasses; @@ -80,30 +88,32 @@ bool fishsanityAgeSplit; bool initialized; bool doAreaScroll; bool previousShowHidden = false; -bool hideShopUnshuffledChecks = true; +bool hideShopUnshuffledChecks = false; bool alwaysShowGS = false; -std::map startingShopItem = { { SCENE_KOKIRI_SHOP, RC_KF_SHOP_ITEM_1 }, - { SCENE_BAZAAR, RC_MARKET_BAZAAR_ITEM_1 }, - { SCENE_POTION_SHOP_MARKET, RC_MARKET_POTION_SHOP_ITEM_1 }, - { SCENE_BOMBCHU_SHOP, RC_MARKET_BOMBCHU_SHOP_ITEM_1 }, - { SCENE_POTION_SHOP_KAKARIKO, RC_KAK_POTION_SHOP_ITEM_1 }, - { SCENE_ZORA_SHOP, RC_ZD_SHOP_ITEM_1 }, - { SCENE_GORON_SHOP, RC_GC_SHOP_ITEM_1 } }; +std::map startingShopItem = { + { SCENE_KOKIRI_SHOP, RC_KF_SHOP_ITEM_1 }, + { SCENE_BAZAAR, RC_MARKET_BAZAAR_ITEM_1 }, + { SCENE_POTION_SHOP_MARKET, RC_MARKET_POTION_SHOP_ITEM_1 }, + { SCENE_BOMBCHU_SHOP, RC_MARKET_BOMBCHU_SHOP_ITEM_1 }, + { SCENE_POTION_SHOP_KAKARIKO, RC_KAK_POTION_SHOP_ITEM_1 }, + { SCENE_ZORA_SHOP, RC_ZD_SHOP_ITEM_1 }, + { SCENE_GORON_SHOP, RC_GC_SHOP_ITEM_1 }, +}; std::map DungeonRCAreasBySceneID = { - {SCENE_DEKU_TREE, RCAREA_DEKU_TREE}, - {SCENE_DODONGOS_CAVERN, RCAREA_DODONGOS_CAVERN}, - {SCENE_JABU_JABU, RCAREA_JABU_JABUS_BELLY}, - {SCENE_FOREST_TEMPLE, RCAREA_FOREST_TEMPLE}, - {SCENE_FIRE_TEMPLE, RCAREA_FIRE_TEMPLE}, - {SCENE_WATER_TEMPLE, RCAREA_WATER_TEMPLE}, - {SCENE_SHADOW_TEMPLE, RCAREA_SHADOW_TEMPLE}, - {SCENE_SPIRIT_TEMPLE, RCAREA_SPIRIT_TEMPLE}, - {SCENE_BOTTOM_OF_THE_WELL, RCAREA_BOTTOM_OF_THE_WELL}, - {SCENE_ICE_CAVERN, RCAREA_ICE_CAVERN}, - {SCENE_GERUDO_TRAINING_GROUND, RCAREA_GERUDO_TRAINING_GROUND}, - {SCENE_INSIDE_GANONS_CASTLE, RCAREA_GANONS_CASTLE}, + { SCENE_DEKU_TREE, RCAREA_DEKU_TREE }, + { SCENE_DODONGOS_CAVERN, RCAREA_DODONGOS_CAVERN }, + { SCENE_JABU_JABU, RCAREA_JABU_JABUS_BELLY }, + { SCENE_FOREST_TEMPLE, RCAREA_FOREST_TEMPLE }, + { SCENE_FIRE_TEMPLE, RCAREA_FIRE_TEMPLE }, + { SCENE_WATER_TEMPLE, RCAREA_WATER_TEMPLE }, + { SCENE_SHADOW_TEMPLE, RCAREA_SHADOW_TEMPLE }, + { SCENE_SPIRIT_TEMPLE, RCAREA_SPIRIT_TEMPLE }, + { SCENE_BOTTOM_OF_THE_WELL, RCAREA_BOTTOM_OF_THE_WELL }, + { SCENE_ICE_CAVERN, RCAREA_ICE_CAVERN }, + { SCENE_GERUDO_TRAINING_GROUND, RCAREA_GERUDO_TRAINING_GROUND }, + { SCENE_INSIDE_GANONS_CASTLE, RCAREA_GANONS_CASTLE }, }; // Dungeon entrances with obvious visual differences between MQ and vanilla qualifying as spoiling on sight @@ -120,7 +130,7 @@ std::vector spoilingEntrances = { ENTR_SHADOW_TEMPLE_BOSS_DOOR, ENTR_ICE_CAVERN_ENTRANCE, ENTR_GERUDO_TRAINING_GROUND_ENTRANCE, - ENTR_INSIDE_GANONS_CASTLE_ENTRANCE + ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, }; std::map> checksByArea; @@ -128,11 +138,13 @@ bool areasFullyChecked[RCAREA_INVALID]; u32 areasSpoiled = 0; bool showVOrMQ; s8 areaChecksGotten[RCAREA_INVALID]; //| "Kokiri Forest (4/9)" +s8 areaChecksAvailable[RCAREA_INVALID]; s8 areaCheckTotals[RCAREA_INVALID]; uint16_t totalChecks = 0; +uint16_t totalChecksAvailable = 0; uint16_t totalChecksGotten = 0; bool optCollapseAll; // A bool that will collapse all checks once -bool optExpandAll; // A bool that will expand all checks once +bool optExpandAll; // A bool that will expand all checks once RandomizerCheck lastLocationChecked = RC_UNKNOWN_CHECK; RandomizerCheckArea previousArea = RCAREA_INVALID; RandomizerCheckArea currentArea = RCAREA_INVALID; @@ -162,58 +174,73 @@ bool hideCollected = false; bool showHidden = true; bool mystery = false; bool showLogicTooltip = false; +bool enableAvailableChecks = false; +bool onlyShowAvailable = false; SceneID DungeonSceneLookupByArea(RandomizerCheckArea area) { switch (area) { - case RCAREA_DEKU_TREE: return SCENE_DEKU_TREE; - case RCAREA_DODONGOS_CAVERN: return SCENE_DODONGOS_CAVERN; - case RCAREA_JABU_JABUS_BELLY: return SCENE_JABU_JABU; - case RCAREA_FOREST_TEMPLE: return SCENE_FOREST_TEMPLE; - case RCAREA_FIRE_TEMPLE: return SCENE_FIRE_TEMPLE; - case RCAREA_WATER_TEMPLE: return SCENE_WATER_TEMPLE; - case RCAREA_SPIRIT_TEMPLE: return SCENE_SPIRIT_TEMPLE; - case RCAREA_SHADOW_TEMPLE: return SCENE_SHADOW_TEMPLE; - case RCAREA_BOTTOM_OF_THE_WELL: return SCENE_BOTTOM_OF_THE_WELL; - case RCAREA_ICE_CAVERN: return SCENE_ICE_CAVERN; - case RCAREA_GERUDO_TRAINING_GROUND: return SCENE_GERUDO_TRAINING_GROUND; - case RCAREA_GANONS_CASTLE: return SCENE_INSIDE_GANONS_CASTLE; - default: return SCENE_ID_MAX; + case RCAREA_DEKU_TREE: + return SCENE_DEKU_TREE; + case RCAREA_DODONGOS_CAVERN: + return SCENE_DODONGOS_CAVERN; + case RCAREA_JABU_JABUS_BELLY: + return SCENE_JABU_JABU; + case RCAREA_FOREST_TEMPLE: + return SCENE_FOREST_TEMPLE; + case RCAREA_FIRE_TEMPLE: + return SCENE_FIRE_TEMPLE; + case RCAREA_WATER_TEMPLE: + return SCENE_WATER_TEMPLE; + case RCAREA_SPIRIT_TEMPLE: + return SCENE_SPIRIT_TEMPLE; + case RCAREA_SHADOW_TEMPLE: + return SCENE_SHADOW_TEMPLE; + case RCAREA_BOTTOM_OF_THE_WELL: + return SCENE_BOTTOM_OF_THE_WELL; + case RCAREA_ICE_CAVERN: + return SCENE_ICE_CAVERN; + case RCAREA_GERUDO_TRAINING_GROUND: + return SCENE_GERUDO_TRAINING_GROUND; + case RCAREA_GANONS_CASTLE: + return SCENE_INSIDE_GANONS_CASTLE; + default: + return SCENE_ID_MAX; } } -Color_RGBA8 Color_Bg_Default = { 0, 0, 0, 255 }; // Black -Color_RGBA8 Color_Main_Default = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Area_Incomplete_Extra_Default = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Area_Complete_Extra_Default = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Unchecked_Extra_Default = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Skipped_Main_Default = { 160, 160, 160, 255 }; // Grey -Color_RGBA8 Color_Skipped_Extra_Default = { 160, 160, 160, 255 }; // Grey -Color_RGBA8 Color_Seen_Extra_Default = { 255, 255, 255, 255 }; // TODO -Color_RGBA8 Color_Hinted_Extra_Default = { 255, 255, 255, 255 }; // TODO -Color_RGBA8 Color_Collected_Extra_Default = { 242, 101, 34, 255 }; // Orange -Color_RGBA8 Color_Scummed_Extra_Default = { 0, 174, 239, 255 }; // Blue -Color_RGBA8 Color_Saved_Extra_Default = { 0, 185, 0, 255 }; // Green +Color_RGBA8 Color_Bg_Default = { 0, 0, 0, 255 }; // Black +Color_RGBA8 Color_Main_Default = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Area_Incomplete_Extra_Default = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Area_Complete_Extra_Default = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Unchecked_Extra_Default = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Skipped_Main_Default = { 160, 160, 160, 255 }; // Grey +Color_RGBA8 Color_Skipped_Extra_Default = { 160, 160, 160, 255 }; // Grey +Color_RGBA8 Color_Seen_Extra_Default = { 255, 255, 255, 255 }; // TODO +Color_RGBA8 Color_Hinted_Extra_Default = { 255, 255, 255, 255 }; // TODO +Color_RGBA8 Color_Collected_Extra_Default = { 242, 101, 34, 255 }; // Orange +Color_RGBA8 Color_Scummed_Extra_Default = { 0, 174, 239, 255 }; // Blue +Color_RGBA8 Color_Saved_Extra_Default = { 0, 185, 0, 255 }; // Green Color_RGBA8 Color_Background = { 0, 0, 0, 255 }; -Color_RGBA8 Color_Area_Incomplete_Main = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Area_Incomplete_Main = { 255, 255, 255, 255 }; // White Color_RGBA8 Color_Area_Incomplete_Extra = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Area_Complete_Main = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Area_Complete_Extra = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Unchecked_Main = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Unchecked_Extra = { 255, 255, 255, 255 }; // Useless -Color_RGBA8 Color_Skipped_Main = { 160, 160, 160, 255 }; // Grey -Color_RGBA8 Color_Skipped_Extra = { 160, 160, 160, 255 }; // Grey -Color_RGBA8 Color_Seen_Main = { 255, 255, 255, 255 }; // TODO -Color_RGBA8 Color_Seen_Extra = { 160, 160, 160, 255 }; // TODO -Color_RGBA8 Color_Hinted_Main = { 255, 255, 255, 255 }; // TODO -Color_RGBA8 Color_Hinted_Extra = { 255, 255, 255, 255 }; // TODO -Color_RGBA8 Color_Collected_Main = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Collected_Extra = { 242, 101, 34, 255 }; // Orange -Color_RGBA8 Color_Scummed_Main = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Scummed_Extra = { 0, 174, 239, 255 }; // Blue -Color_RGBA8 Color_Saved_Main = { 255, 255, 255, 255 }; // White -Color_RGBA8 Color_Saved_Extra = { 0, 185, 0, 255 }; // Green +Color_RGBA8 Color_Area_Complete_Main = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Area_Complete_Extra = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Unchecked_Main = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Unchecked_Extra = { 255, 255, 255, 255 }; // Useless +Color_RGBA8 Color_Skipped_Main = { 160, 160, 160, 255 }; // Grey +Color_RGBA8 Color_Skipped_Extra = { 160, 160, 160, 255 }; // Grey +Color_RGBA8 Color_Seen_Main = { 255, 255, 255, 255 }; // TODO +Color_RGBA8 Color_Seen_Extra = { 160, 160, 160, 255 }; // TODO +Color_RGBA8 Color_Hinted_Main = { 255, 255, 255, 255 }; // TODO +Color_RGBA8 Color_Hinted_Extra = { 255, 255, 255, 255 }; // TODO +Color_RGBA8 Color_Collected_Main = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Collected_Extra = { 242, 101, 34, 255 }; // Orange +Color_RGBA8 Color_Scummed_Main = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Scummed_Extra = { 0, 174, 239, 255 }; // Blue +Color_RGBA8 Color_Saved_Main = { 255, 255, 255, 255 }; // White +Color_RGBA8 Color_Saved_Extra = { 0, 185, 0, 255 }; // Green std::vector buttons = { BTN_A, BTN_B, BTN_CUP, BTN_CDOWN, BTN_CLEFT, BTN_CRIGHT, BTN_L, BTN_Z, BTN_R, BTN_START, BTN_DUP, BTN_DDOWN, BTN_DLEFT, BTN_DRIGHT }; @@ -231,10 +258,12 @@ void TrySetAreas() { void CalculateTotals() { totalChecks = 0; + totalChecksAvailable = 0; totalChecksGotten = 0; for (uint8_t i = 0; i < RCAREA_INVALID; i++) { totalChecks += areaCheckTotals[i]; + totalChecksAvailable += areaChecksAvailable[i]; totalChecksGotten += areaChecksGotten[i]; } } @@ -247,23 +276,45 @@ uint16_t GetTotalChecksGotten() { return totalChecksGotten; } +bool IsCheckHidden(RandomizerCheck rc) { + Rando::ItemLocation* itemLocation = OTRGlobals::Instance->gRandoContext->GetItemLocation(rc); + RandomizerCheckStatus status = itemLocation->GetCheckStatus(); + bool available = itemLocation->IsAvailable(); + bool skipped = itemLocation->GetIsSkipped(); + bool obtained = itemLocation->HasObtained(); + bool seen = status == RCSHOW_SEEN || status == RCSHOW_IDENTIFIED; + bool scummed = status == RCSHOW_SCUMMED; + bool unchecked = status == RCSHOW_UNCHECKED; + + return !showHidden && + ((skipped && hideSkipped) || (seen && hideSeen) || (scummed && hideScummed) || (unchecked && hideUnchecked)); +} + void RecalculateAreaTotals(RandomizerCheckArea rcArea) { areaChecksGotten[rcArea] = 0; + areaChecksAvailable[rcArea] = 0; areaCheckTotals[rcArea] = 0; for (auto rc : checksByArea.at(rcArea)) { if (!IsVisibleInCheckTracker(rc)) { continue; } areaCheckTotals[rcArea]++; - if (OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->GetIsSkipped() || OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->HasObtained()) { + + Rando::ItemLocation* itemLoc = OTRGlobals::Instance->gRandoContext->GetItemLocation(rc); + + if (itemLoc->GetIsSkipped() || itemLoc->HasObtained()) { areaChecksGotten[rcArea]++; } + + if (itemLoc->IsAvailable() && !IsCheckHidden(rc)) { + areaChecksAvailable[rcArea]++; + } } CalculateTotals(); } std::map MapRGtoRandomizerCheckArea = { - { RG_DEKU_TREE_MAP, RCAREA_DEKU_TREE}, + { RG_DEKU_TREE_MAP, RCAREA_DEKU_TREE }, { RG_DODONGOS_CAVERN_MAP, RCAREA_DODONGOS_CAVERN }, { RG_JABU_JABUS_BELLY_MAP, RCAREA_JABU_JABUS_BELLY }, { RG_FOREST_TEMPLE_MAP, RCAREA_FOREST_TEMPLE }, @@ -304,6 +355,7 @@ void SetCheckCollected(RandomizerCheck rc) { if (IsVisibleInCheckTracker(rc)) { if (!OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->GetIsSkipped()) { areaChecksGotten[loc->GetArea()]++; + areaChecksAvailable[loc->GetArea()]--; } else { OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->SetIsSkipped(false); } @@ -365,33 +417,19 @@ bool IsAreaScene(SceneID sceneNum) { } RandomizerCheckArea AreaFromEntranceGroup[] = { - RCAREA_INVALID, - RCAREA_KOKIRI_FOREST, - RCAREA_LOST_WOODS, - RCAREA_SACRED_FOREST_MEADOW, - RCAREA_KAKARIKO_VILLAGE, - RCAREA_GRAVEYARD, - RCAREA_DEATH_MOUNTAIN_TRAIL, - RCAREA_DEATH_MOUNTAIN_CRATER, - RCAREA_GORON_CITY, - RCAREA_ZORAS_RIVER, - RCAREA_ZORAS_DOMAIN, - RCAREA_ZORAS_FOUNTAIN, - RCAREA_HYRULE_FIELD, - RCAREA_LON_LON_RANCH, - RCAREA_LAKE_HYLIA, - RCAREA_GERUDO_VALLEY, - RCAREA_GERUDO_FORTRESS, - RCAREA_WASTELAND, - RCAREA_DESERT_COLOSSUS, - RCAREA_MARKET, + RCAREA_INVALID, RCAREA_KOKIRI_FOREST, RCAREA_LOST_WOODS, RCAREA_SACRED_FOREST_MEADOW, + RCAREA_KAKARIKO_VILLAGE, RCAREA_GRAVEYARD, RCAREA_DEATH_MOUNTAIN_TRAIL, RCAREA_DEATH_MOUNTAIN_CRATER, + RCAREA_GORON_CITY, RCAREA_ZORAS_RIVER, RCAREA_ZORAS_DOMAIN, RCAREA_ZORAS_FOUNTAIN, + RCAREA_HYRULE_FIELD, RCAREA_LON_LON_RANCH, RCAREA_LAKE_HYLIA, RCAREA_GERUDO_VALLEY, + RCAREA_GERUDO_FORTRESS, RCAREA_WASTELAND, RCAREA_DESERT_COLOSSUS, RCAREA_MARKET, RCAREA_HYRULE_CASTLE, }; RandomizerCheckArea GetCheckArea() { auto scene = static_cast(gPlayState->sceneNum); bool grottoScene = (scene == SCENE_GROTTOS || scene == SCENE_FAIRYS_FOUNTAIN); - const EntranceData* ent = GetEntranceData(grottoScene ? ENTRANCE_GROTTO_EXIT_START + GetCurrentGrottoId() : gSaveContext.entranceIndex); + const EntranceData* ent = + GetEntranceData(grottoScene ? ENTRANCE_GROTTO_EXIT_START + GetCurrentGrottoId() : gSaveContext.entranceIndex); RandomizerCheckArea area = RCAREA_INVALID; if (ent != nullptr && !IsAreaScene(scene) && ent->type != ENTRANCE_TYPE_DUNGEON) { if (ent->source == "Desert Colossus" || ent->destination == "Desert Colossus") { @@ -401,7 +439,8 @@ RandomizerCheckArea GetCheckArea() { } } if (area == RCAREA_INVALID) { - if (grottoScene && (GetCurrentGrottoId() == -1) && (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) == RO_GENERIC_OFF)) { + if (grottoScene && (GetCurrentGrottoId() == -1) && + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) == RO_GENERIC_OFF)) { area = previousArea; } else { area = RandomizerCheckObjects::GetRCAreaBySceneID(scene); @@ -414,16 +453,24 @@ bool vector_contains_scene(std::vector vec, const int16_t scene) { return std::any_of(vec.begin(), vec.end(), [&](const auto& x) { return x == scene; }); } -std::vector skipScenes = {SCENE_GANON_BOSS, SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR, SCENE_GANON_BOSS, SCENE_INSIDE_GANONS_CASTLE_COLLAPSE, SCENE_GANONS_TOWER_COLLAPSE_INTERIOR}; +std::vector skipScenes = { + SCENE_GANON_BOSS, + SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR, + SCENE_GANON_BOSS, + SCENE_INSIDE_GANONS_CASTLE_COLLAPSE, + SCENE_GANONS_TOWER_COLLAPSE_INTERIOR, +}; void ClearAreaChecksAndTotals() { for (auto& [rcArea, vec] : checksByArea) { vec.clear(); areaChecksGotten[rcArea] = 0; + areaChecksAvailable[rcArea] = 0; areaCheckTotals[rcArea] = 0; } totalChecks = 0; totalChecksGotten = 0; + totalChecksAvailable = 0; } void SetShopSeen(uint32_t sceneNum, bool prices) { @@ -465,6 +512,9 @@ void CheckTrackerLoadGame(int32_t fileNum) { if (loc->GetCheckStatus() == RCSHOW_SAVED || loc->GetIsSkipped()) { areaChecksGotten[entry2->GetArea()]++; } + if (loc->IsAvailable()) { + areaChecksAvailable[entry2->GetArea()]++; + } } if (areaChecksGotten[entry2->GetArea()] != 0 || RandomizerCheckObjects::AreaIsOverworld(entry2->GetArea()) || @@ -473,7 +523,8 @@ void CheckTrackerLoadGame(int32_t fileNum) { } // Create check name overrides for child pond fish if age split is disabled - if (fishsanityMode != RO_FISHSANITY_OFF && fishsanityMode != RO_FISHSANITY_OVERWORLD && entry.GetRCType() == RCTYPE_FISH && entry.GetScene() == SCENE_FISHING_POND && + if (fishsanityMode != RO_FISHSANITY_OFF && fishsanityMode != RO_FISHSANITY_OVERWORLD && + entry.GetRCType() == RCTYPE_FISH && entry.GetScene() == SCENE_FISHING_POND && entry.GetActorParams() != 116 && !fishsanityAgeSplit) { if (entry.GetShortName().starts_with("Child")) { checkNameOverrides[rc] = entry.GetShortName().substr(6); @@ -481,15 +532,25 @@ void CheckTrackerLoadGame(int32_t fileNum) { } } for (int i = RCAREA_KOKIRI_FOREST; i < RCAREA_INVALID; i++) { - if (!IsAreaSpoiled(static_cast(i)) && (RandomizerCheckObjects::AreaIsOverworld(static_cast(i)) || !IS_RANDO || - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == RO_MQ_DUNGEONS_NONE || - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == RO_MQ_DUNGEONS_SELECTION || - (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == RO_MQ_DUNGEONS_SET_NUMBER && - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_COUNT) == 12))) { + if (!IsAreaSpoiled(static_cast(i)) && + (RandomizerCheckObjects::AreaIsOverworld(static_cast(i)) || !IS_RANDO || + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == RO_MQ_DUNGEONS_NONE || + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == + RO_MQ_DUNGEONS_SELECTION && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue( + static_cast(RSK_MQ_DEKU_TREE + (i - RCAREA_DEKU_TREE))) != RO_MQ_SET_RANDOM) || + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_SET) == RO_GENERIC_ON && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue( + static_cast(RSK_MQ_DEKU_TREE + (i - RCAREA_DEKU_TREE))) != RO_MQ_SET_RANDOM) || + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == + RO_MQ_DUNGEONS_SET_NUMBER && + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_COUNT) == 12 || + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_COUNT) == 0)))) { SetAreaSpoiled(static_cast(i)); } } - if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_LINKS_POCKET) != RO_LINKS_POCKET_NOTHING && IS_RANDO) { + if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_LINKS_POCKET) != RO_LINKS_POCKET_NOTHING && + IS_RANDO) { uint8_t startingAge = OTRGlobals::Instance->gRandoContext->GetOption(RSK_SELECTED_STARTING_AGE).Get(); RandomizerCheckArea startingArea; switch (startingAge) { @@ -509,13 +570,16 @@ void CheckTrackerLoadGame(int32_t fileNum) { areaCheckTotals[startingArea]++; } - showVOrMQ = (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == RO_MQ_DUNGEONS_RANDOM_NUMBER || - (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == RO_MQ_DUNGEONS_SET_NUMBER && - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_COUNT) < 12)); + showVOrMQ = + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == + RO_MQ_DUNGEONS_RANDOM_NUMBER || + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_RANDOM) == RO_MQ_DUNGEONS_SET_NUMBER && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_MQ_DUNGEON_COUNT) < 12)); initialized = true; UpdateAllOrdering(); UpdateInventoryChecks(); UpdateFilters(); + RecalculateAvailableChecks(); } void CheckTrackerShopSlotChange(uint8_t cursorSlot, int16_t basePrice) { @@ -531,6 +595,7 @@ void CheckTrackerShopSlotChange(uint8_t cursorSlot, int16_t basePrice) { if (status == RCSHOW_SEEN) { OTRGlobals::Instance->gRandoContext->GetItemLocation(slot)->SetCheckStatus(RCSHOW_IDENTIFIED); SaveManager::Instance->SaveSection(gSaveContext.fileNum, sectionId, true); + RecalculateAvailableChecks(); } } @@ -552,7 +617,9 @@ void CheckTrackerTransition(uint32_t sceneNum) { SetShopSeen(sceneNum, false); break; } - if (!IsAreaSpoiled(currentArea) && (RandomizerCheckObjects::AreaIsOverworld(currentArea) || std::find(spoilingEntrances.begin(), spoilingEntrances.end(), gPlayState->nextEntranceIndex) != spoilingEntrances.end())) { + if (!IsAreaSpoiled(currentArea) && (RandomizerCheckObjects::AreaIsOverworld(currentArea) || + std::find(spoilingEntrances.begin(), spoilingEntrances.end(), + gPlayState->nextEntranceIndex) != spoilingEntrances.end())) { SetAreaSpoiled(currentArea); } } @@ -567,7 +634,7 @@ void CheckTrackerItemReceive(GetItemEntry giEntry) { if (giEntry.itemId == ITEM_SHIELD_DEKU) { SetCheckCollected(RC_KF_SHOP_ITEM_1); return; - }else if (giEntry.itemId == ITEM_KOKIRI_EMERALD) { + } else if (giEntry.itemId == ITEM_KOKIRI_EMERALD) { SetCheckCollected(RC_QUEEN_GOHMA); return; } else if (giEntry.itemId == ITEM_GORON_RUBY) { @@ -606,34 +673,34 @@ void CheckTrackerItemReceive(GetItemEntry giEntry) { } else if (giEntry.itemId == ITEM_BRACELET) { SetCheckCollected(RC_GC_DARUNIAS_JOY); return; - }/* else if (giEntry.itemId == ITEM_SONG_SUN) { - SetCheckCollected(RC_SONG_FROM_ROYAL_FAMILYS_TOMB); - return; - } else if (giEntry.itemId == ITEM_SONG_TIME) { - SetCheckCollected(RC_SONG_FROM_OCARINA_OF_TIME); - return; - } else if (giEntry.itemId == ITEM_SONG_STORMS) { - SetCheckCollected(RC_SONG_FROM_WINDMILL); - return; - } else if (giEntry.itemId == ITEM_SONG_MINUET) { - SetCheckCollected(RC_SHEIK_IN_FOREST); - return; - } else if (giEntry.itemId == ITEM_SONG_BOLERO) { - SetCheckCollected(RC_SHEIK_IN_CRATER); - return; - } else if (giEntry.itemId == ITEM_SONG_SERENADE) { - SetCheckCollected(RC_SHEIK_IN_ICE_CAVERN); - return; - } else if (giEntry.itemId == ITEM_SONG_NOCTURNE) { - SetCheckCollected(RC_SHEIK_IN_KAKARIKO); - return; - } else if (giEntry.itemId == ITEM_SONG_REQUIEM) { - SetCheckCollected(RC_SHEIK_AT_COLOSSUS); - return; - } else if (giEntry.itemId == ITEM_SONG_PRELUDE) { - SetCheckCollected(RC_SHEIK_AT_TEMPLE); - return; - }*/ + } /* else if (giEntry.itemId == ITEM_SONG_SUN) { + SetCheckCollected(RC_SONG_FROM_ROYAL_FAMILYS_TOMB); + return; + } else if (giEntry.itemId == ITEM_SONG_TIME) { + SetCheckCollected(RC_SONG_FROM_OCARINA_OF_TIME); + return; + } else if (giEntry.itemId == ITEM_SONG_STORMS) { + SetCheckCollected(RC_SONG_FROM_WINDMILL); + return; + } else if (giEntry.itemId == ITEM_SONG_MINUET) { + SetCheckCollected(RC_SHEIK_IN_FOREST); + return; + } else if (giEntry.itemId == ITEM_SONG_BOLERO) { + SetCheckCollected(RC_SHEIK_IN_CRATER); + return; + } else if (giEntry.itemId == ITEM_SONG_SERENADE) { + SetCheckCollected(RC_SHEIK_IN_ICE_CAVERN); + return; + } else if (giEntry.itemId == ITEM_SONG_NOCTURNE) { + SetCheckCollected(RC_SHEIK_IN_KAKARIKO); + return; + } else if (giEntry.itemId == ITEM_SONG_REQUIEM) { + SetCheckCollected(RC_SHEIK_AT_COLOSSUS); + return; + } else if (giEntry.itemId == ITEM_SONG_PRELUDE) { + SetCheckCollected(RC_SHEIK_AT_TEMPLE); + return; + }*/ } } @@ -645,7 +712,8 @@ void CheckTrackerSceneFlagSet(int16_t sceneNum, int16_t flagType, int32_t flag) if (flagType != FLAG_SCENE_TREASURE && flagType != FLAG_SCENE_COLLECTIBLE) { return; } - if (sceneNum == SCENE_GRAVEYARD && flag == 0x19 && flagType == FLAG_SCENE_COLLECTIBLE) { // Gravedigging tour special case + if (sceneNum == SCENE_GRAVEYARD && flag == 0x19 && + flagType == FLAG_SCENE_COLLECTIBLE) { // Gravedigging tour special case SetCheckCollected(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR); return; } @@ -653,7 +721,9 @@ void CheckTrackerSceneFlagSet(int16_t sceneNum, int16_t flagType, int32_t flag) if (!IsVisibleInCheckTracker(loc.GetRandomizerCheck())) { continue; } - SpoilerCollectionCheckType checkMatchType = flagType == FLAG_SCENE_TREASURE ? SpoilerCollectionCheckType::SPOILER_CHK_CHEST : SpoilerCollectionCheckType::SPOILER_CHK_COLLECTABLE; + SpoilerCollectionCheckType checkMatchType = flagType == FLAG_SCENE_TREASURE + ? SpoilerCollectionCheckType::SPOILER_CHK_CHEST + : SpoilerCollectionCheckType::SPOILER_CHK_COLLECTABLE; Rando::SpoilerCollectionCheck scCheck = loc.GetCollectionCheck(); if (scCheck.scene == sceneNum && scCheck.flag == flag && scCheck.type == checkMatchType) { SetCheckCollected(loc.GetRandomizerCheck()); @@ -674,8 +744,8 @@ void CheckTrackerFlagSet(int16_t flagType, int32_t flag) { break; case FLAG_EVENT_CHECK_INF: if ((flag == EVENTCHKINF_CARPENTERS_FREE(0) || flag == EVENTCHKINF_CARPENTERS_FREE(1) || - flag == EVENTCHKINF_CARPENTERS_FREE(2) || flag == EVENTCHKINF_CARPENTERS_FREE(3)) - && GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) { + flag == EVENTCHKINF_CARPENTERS_FREE(2) || flag == EVENTCHKINF_CARPENTERS_FREE(3)) && + GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) { SetCheckCollected(RC_GF_GERUDO_MEMBERSHIP_CARD); return; } @@ -733,16 +803,18 @@ void CheckTrackerFlagSet(int16_t flagType, int32_t flag) { for (auto& loc : Rando::StaticData::GetLocationTable()) { if ((!IS_RANDO && ((loc.GetQuest() == RCQUEST_MQ && !IS_MASTER_QUEST) || (loc.GetQuest() == RCQUEST_VANILLA && IS_MASTER_QUEST))) || - (IS_RANDO && !(OTRGlobals::Instance->gRandoContext->GetDungeons()->GetDungeonFromScene(loc.GetScene()) == nullptr) && - ((OTRGlobals::Instance->gRandoContext->GetDungeons()->GetDungeonFromScene(loc.GetScene())->IsMQ() && - loc.GetQuest() == RCQUEST_VANILLA) || - OTRGlobals::Instance->gRandoContext->GetDungeons()->GetDungeonFromScene(loc.GetScene())->IsVanilla() && - loc.GetQuest() == RCQUEST_MQ))) { + (IS_RANDO && + !(OTRGlobals::Instance->gRandoContext->GetDungeons()->GetDungeonFromScene(loc.GetScene()) == nullptr) && + ((OTRGlobals::Instance->gRandoContext->GetDungeons()->GetDungeonFromScene(loc.GetScene())->IsMQ() && + loc.GetQuest() == RCQUEST_VANILLA) || + OTRGlobals::Instance->gRandoContext->GetDungeons()->GetDungeonFromScene(loc.GetScene())->IsVanilla() && + loc.GetQuest() == RCQUEST_MQ))) { continue; } Rando::SpoilerCollectionCheck scCheck = loc.GetCollectionCheck(); SpoilerCollectionCheckType scCheckType = scCheck.type; - if (checkMatchType == SpoilerCollectionCheckType::SPOILER_CHK_RANDOMIZER_INF && scCheckType == SpoilerCollectionCheckType::SPOILER_CHK_RANDOMIZER_INF) { + if (checkMatchType == SpoilerCollectionCheckType::SPOILER_CHK_RANDOMIZER_INF && + scCheckType == SpoilerCollectionCheckType::SPOILER_CHK_RANDOMIZER_INF) { if (flag == OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(loc.GetRandomizerCheck())) { SetCheckCollected(loc.GetRandomizerCheck()); return; @@ -775,15 +847,15 @@ void SaveTrackerData(SaveContext* saveContext, int sectionID, bool fullSave) { } SaveManager::Instance->SaveArray("checkStatus", checkCount.size(), [&](size_t i) { RandomizerCheck check = checkCount.at(i); - RandomizerCheckStatus savedStatus = OTRGlobals::Instance->gRandoContext->GetItemLocation(check)->GetCheckStatus(); + RandomizerCheckStatus savedStatus = + OTRGlobals::Instance->gRandoContext->GetItemLocation(check)->GetCheckStatus(); bool isSkipped = OTRGlobals::Instance->gRandoContext->GetItemLocation(check)->GetIsSkipped(); if (savedStatus == RCSHOW_COLLECTED) { if (fullSave) { OTRGlobals::Instance->gRandoContext->GetItemLocation(check)->SetCheckStatus(RCSHOW_SAVED); savedStatus = RCSHOW_SAVED; updateOrdering = true; - } - else { + } else { savedStatus = RCSHOW_SCUMMED; } } @@ -792,7 +864,7 @@ void SaveTrackerData(SaveContext* saveContext, int sectionID, bool fullSave) { SaveManager::Instance->SaveData("randomizerCheck", check); SaveManager::Instance->SaveData("status", savedStatus); SaveManager::Instance->SaveData("skipped", isSkipped); - }); + }); } }); SaveManager::Instance->SaveData("areasSpoiled", areasSpoiled); @@ -804,6 +876,9 @@ void SaveTrackerData(SaveContext* saveContext, int sectionID, bool fullSave) { void SaveFile(SaveContext* saveContext, int sectionID, bool fullSave) { SaveTrackerData(saveContext, sectionID, fullSave); + if (fullSave) { + RecalculateAvailableChecks(); + } } void LoadFile() { @@ -817,8 +892,8 @@ void LoadFile() { SaveManager::Instance->LoadData("skipped", skipped, false); OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->SetCheckStatus(status); OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->SetIsSkipped(skipped); - }); }); + }); SaveManager::Instance->LoadData("areasSpoiled", areasSpoiled, (uint32_t)0); UpdateAllOrdering(); UpdateAllAreas(); @@ -846,49 +921,57 @@ void SetAreaSpoiled(RandomizerCheckArea rcArea) { } void CheckTrackerWindow::DrawElement() { - Color_Background = CVarGetColor(CVAR_TRACKER_CHECK("BgColor.Value"), Color_Bg_Default); - Color_Area_Incomplete_Main = CVarGetColor(CVAR_TRACKER_CHECK("AreaIncomplete.MainColor.Value"), Color_Main_Default); - Color_Area_Incomplete_Extra = CVarGetColor(CVAR_TRACKER_CHECK("AreaIncomplete.ExtraColor.Value"), Color_Area_Incomplete_Extra_Default); - Color_Area_Complete_Main = CVarGetColor(CVAR_TRACKER_CHECK("AreaComplete.MainColor.Value"), Color_Main_Default); - Color_Area_Complete_Extra = CVarGetColor(CVAR_TRACKER_CHECK("AreaComplete.ExtraColor.Value"), Color_Area_Complete_Extra_Default); - Color_Unchecked_Main = CVarGetColor(CVAR_TRACKER_CHECK("Unchecked.MainColor.Value"), Color_Main_Default); - Color_Unchecked_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Unchecked.ExtraColor.Value"), Color_Unchecked_Extra_Default); - Color_Skipped_Main = CVarGetColor(CVAR_TRACKER_CHECK("Skipped.MainColor.Value"), Color_Main_Default); - Color_Skipped_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Skipped.ExtraColor.Value"), Color_Skipped_Extra_Default); - Color_Seen_Main = CVarGetColor(CVAR_TRACKER_CHECK("Seen.MainColor.Value"), Color_Main_Default); - Color_Seen_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Seen.ExtraColor.Value"), Color_Seen_Extra_Default); - Color_Hinted_Main = CVarGetColor(CVAR_TRACKER_CHECK("Hinted.MainColor.Value"), Color_Main_Default); - Color_Hinted_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Hinted.ExtraColor.Value"), Color_Hinted_Extra_Default); - Color_Collected_Main = CVarGetColor(CVAR_TRACKER_CHECK("Collected.MainColor.Value"), Color_Main_Default); - Color_Collected_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Collected.ExtraColor.Value"), Color_Collected_Extra_Default); - Color_Scummed_Main = CVarGetColor(CVAR_TRACKER_CHECK("Scummed.MainColor.Value"), Color_Main_Default); - Color_Scummed_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Scummed.ExtraColor.Value"), Color_Scummed_Extra_Default); - Color_Saved_Main = CVarGetColor(CVAR_TRACKER_CHECK("Saved.MainColor.Value"), Color_Main_Default); - Color_Saved_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Saved.ExtraColor.Value"), Color_Saved_Extra_Default); - hideUnchecked = CVarGetInteger(CVAR_TRACKER_CHECK("Unchecked.Hide"), 0); - hideScummed = CVarGetInteger(CVAR_TRACKER_CHECK("Scummed.Hide"), 0); - hideSeen = CVarGetInteger(CVAR_TRACKER_CHECK("Seen.Hide"), 0); - hideSkipped = CVarGetInteger(CVAR_TRACKER_CHECK("Skipped.Hide"), 0); - hideSaved = CVarGetInteger(CVAR_TRACKER_CHECK("Saved.Hide"), 0); - hideCollected = CVarGetInteger(CVAR_TRACKER_CHECK("Collected.Hide"), 0); - showHidden = CVarGetInteger(CVAR_TRACKER_CHECK("ShowHidden"), 0); - mystery = CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0); - showLogicTooltip = CVarGetInteger(CVAR_TRACKER_CHECK("ShowLogic"), 0); + Color_Background = CVarGetColor(CVAR_TRACKER_CHECK("BgColor.Value"), Color_Bg_Default); + Color_Area_Incomplete_Main = CVarGetColor(CVAR_TRACKER_CHECK("AreaIncomplete.MainColor.Value"), Color_Main_Default); + Color_Area_Incomplete_Extra = + CVarGetColor(CVAR_TRACKER_CHECK("AreaIncomplete.ExtraColor.Value"), Color_Area_Incomplete_Extra_Default); + Color_Area_Complete_Main = CVarGetColor(CVAR_TRACKER_CHECK("AreaComplete.MainColor.Value"), Color_Main_Default); + Color_Area_Complete_Extra = + CVarGetColor(CVAR_TRACKER_CHECK("AreaComplete.ExtraColor.Value"), Color_Area_Complete_Extra_Default); + Color_Unchecked_Main = CVarGetColor(CVAR_TRACKER_CHECK("Unchecked.MainColor.Value"), Color_Main_Default); + Color_Unchecked_Extra = + CVarGetColor(CVAR_TRACKER_CHECK("Unchecked.ExtraColor.Value"), Color_Unchecked_Extra_Default); + Color_Skipped_Main = CVarGetColor(CVAR_TRACKER_CHECK("Skipped.MainColor.Value"), Color_Main_Default); + Color_Skipped_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Skipped.ExtraColor.Value"), Color_Skipped_Extra_Default); + Color_Seen_Main = CVarGetColor(CVAR_TRACKER_CHECK("Seen.MainColor.Value"), Color_Main_Default); + Color_Seen_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Seen.ExtraColor.Value"), Color_Seen_Extra_Default); + Color_Hinted_Main = CVarGetColor(CVAR_TRACKER_CHECK("Hinted.MainColor.Value"), Color_Main_Default); + Color_Hinted_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Hinted.ExtraColor.Value"), Color_Hinted_Extra_Default); + Color_Collected_Main = CVarGetColor(CVAR_TRACKER_CHECK("Collected.MainColor.Value"), Color_Main_Default); + Color_Collected_Extra = + CVarGetColor(CVAR_TRACKER_CHECK("Collected.ExtraColor.Value"), Color_Collected_Extra_Default); + Color_Scummed_Main = CVarGetColor(CVAR_TRACKER_CHECK("Scummed.MainColor.Value"), Color_Main_Default); + Color_Scummed_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Scummed.ExtraColor.Value"), Color_Scummed_Extra_Default); + Color_Saved_Main = CVarGetColor(CVAR_TRACKER_CHECK("Saved.MainColor.Value"), Color_Main_Default); + Color_Saved_Extra = CVarGetColor(CVAR_TRACKER_CHECK("Saved.ExtraColor.Value"), Color_Saved_Extra_Default); + hideUnchecked = CVarGetInteger(CVAR_TRACKER_CHECK("Unchecked.Hide"), 0); + hideScummed = CVarGetInteger(CVAR_TRACKER_CHECK("Scummed.Hide"), 0); + hideSeen = CVarGetInteger(CVAR_TRACKER_CHECK("Seen.Hide"), 0); + hideSkipped = CVarGetInteger(CVAR_TRACKER_CHECK("Skipped.Hide"), 0); + hideSaved = CVarGetInteger(CVAR_TRACKER_CHECK("Saved.Hide"), 0); + hideCollected = CVarGetInteger(CVAR_TRACKER_CHECK("Collected.Hide"), 0); + showHidden = CVarGetInteger(CVAR_TRACKER_CHECK("ShowHidden"), 0); + mystery = CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0); + showLogicTooltip = CVarGetInteger(CVAR_TRACKER_CHECK("ShowLogic"), 0); + enableAvailableChecks = CVarGetInteger(CVAR_TRACKER_CHECK("EnableAvailableChecks"), 0); + onlyShowAvailable = CVarGetInteger(CVAR_TRACKER_CHECK("OnlyShowAvailable"), 0); - hideShopUnshuffledChecks = CVarGetInteger(CVAR_TRACKER_CHECK("HideUnshuffledShopChecks"), 1); + hideShopUnshuffledChecks = CVarGetInteger(CVAR_TRACKER_CHECK("HideUnshuffledShopChecks"), 0); alwaysShowGS = CVarGetInteger(CVAR_TRACKER_CHECK("AlwaysShowGSLocs"), 0); if (CVarGetInteger(CVAR_TRACKER_CHECK("WindowType"), TRACKER_WINDOW_WINDOW) == TRACKER_WINDOW_FLOATING) { - if (CVarGetInteger(CVAR_TRACKER_CHECK("ShowOnlyPaused"), 0) && (gPlayState == nullptr || gPlayState->pauseCtx.state == 0)) { + if (CVarGetInteger(CVAR_TRACKER_CHECK("ShowOnlyPaused"), 0) && + (gPlayState == nullptr || gPlayState->pauseCtx.state == 0)) { return; } if (CVarGetInteger(CVAR_TRACKER_CHECK("DisplayType"), TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_COMBO_BUTTON) { int comboButton1Mask = buttons[CVarGetInteger(CVAR_TRACKER_CHECK("ComboButton1"), TRACKER_COMBO_BUTTON_L)]; int comboButton2Mask = buttons[CVarGetInteger(CVAR_TRACKER_CHECK("ComboButton2"), TRACKER_COMBO_BUTTON_R)]; - OSContPad* trackerButtonsPressed = std::dynamic_pointer_cast(Ship::Context::GetInstance()->GetControlDeck())->GetPads(); + OSContPad* trackerButtonsPressed = + std::dynamic_pointer_cast(Ship::Context::GetInstance()->GetControlDeck())->GetPads(); bool comboButtonsHeld = trackerButtonsPressed != nullptr && - trackerButtonsPressed[0].button & comboButton1Mask && - trackerButtonsPressed[0].button & comboButton2Mask; + trackerButtonsPressed[0].button & comboButton1Mask && + trackerButtonsPressed[0].button & comboButton2Mask; if (!comboButtonsHeld) { return; } @@ -899,7 +982,7 @@ void CheckTrackerWindow::DrawElement() { BeginFloatWindows("Check Tracker", mIsVisible, ImGuiWindowFlags_NoScrollbar); if (!GameInteractor::IsSaveLoaded() || !initialized) { - ImGui::Text("Waiting for file load..."); //TODO Language + ImGui::Text("Waiting for file load..."); // TODO Language EndFloatWindows(); return; } @@ -909,7 +992,7 @@ void CheckTrackerWindow::DrawElement() { sceneId = (SceneID)gPlayState->sceneNum; } - //Quick Options + // Quick Options #ifdef __WIIU__ float headerHeight = 40.0f; #else @@ -924,9 +1007,24 @@ void CheckTrackerWindow::DrawElement() { ImGui::TableNextRow(0, headerHeight); ImGui::TableNextColumn(); - UIWidgets::CVarCheckbox( - "Show Hidden Items", CVAR_TRACKER_CHECK("ShowHidden"), UIWidgets::CheckboxOptions({{ .tooltip = "When active, items will show hidden checks by default when updated to this state." }}) - .Color(THEME_COLOR)); + if (UIWidgets::CVarCheckbox( + "Show Hidden Items", CVAR_TRACKER_CHECK("ShowHidden"), + UIWidgets::CheckboxOptions( + { { .tooltip = "When active, items will show hidden checks by default when updated to this state." } }) + .Color(THEME_COLOR))) { + doAreaScroll = true; + showHidden = CVarGetInteger(CVAR_TRACKER_CHECK("ShowHidden"), 0); + RecalculateAllAreaTotals(); + } + if (enableAvailableChecks) { + if (UIWidgets::CVarCheckbox( + "Only Show Available Checks", CVAR_TRACKER_CHECK("OnlyShowAvailable"), + UIWidgets::CheckboxOptions({ { .tooltip = "When active, unavailable checks will be hidden." } }) + .Color(THEME_COLOR))) { + doAreaScroll = true; + RecalculateAllAreaTotals(); + } + } UIWidgets::PaddedSeparator(); if (UIWidgets::Button("Expand All", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { optCollapseAll = false; @@ -934,12 +1032,15 @@ void CheckTrackerWindow::DrawElement() { doAreaScroll = true; } ImGui::SameLine(); - if (UIWidgets::Button("Collapse All", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { + if (UIWidgets::Button("Collapse All", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { optExpandAll = false; optCollapseAll = true; } ImGui::SameLine(); - if (UIWidgets::Button("Clear", UIWidgets::ButtonOptions({{ .tooltip = "Clear the search field" }}).Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { + if (UIWidgets::Button("Clear", UIWidgets::ButtonOptions({ { .tooltip = "Clear the search field" } }) + .Color(THEME_COLOR) + .Size(UIWidgets::Sizes::Inline))) { checkSearch.Clear(); UpdateFilters(); doAreaScroll = true; @@ -952,11 +1053,17 @@ void CheckTrackerWindow::DrawElement() { ImGui::Separator(); - ImGui::Text("Total Checks: %d / %d", totalChecksGotten, totalChecks); + std::ostringstream totalChecksSS; + totalChecksSS << "Total Checks: "; + if (enableAvailableChecks) { + totalChecksSS << totalChecksAvailable << " Available / "; + } + totalChecksSS << totalChecksGotten << " Checked / " << totalChecks << " Total"; + ImGui::Text(totalChecksSS.str().c_str()); UIWidgets::PaddedSeparator(); - //Checks Section Lead-in + // Checks Section Lead-in ImGui::TableNextRow(); ImGui::TableNextColumn(); size = ImGui::GetContentRegionAvail(); @@ -968,7 +1075,7 @@ void CheckTrackerWindow::DrawElement() { ImGui::TableNextRow(); ImGui::TableNextColumn(); - //Prep for loop + // Prep for loop RainbowTick(); bool doDraw = false; bool thisAreaFullyChecked = false; @@ -979,22 +1086,26 @@ void CheckTrackerWindow::DrawElement() { bool doingCollapseOrExpand = optExpandAll || optCollapseAll; bool isThisAreaSpoiled; RandomizerCheckArea lastArea = RCAREA_INVALID; - Color_RGBA8 areaCompleteColor = CVarGetColor(CVAR_TRACKER_CHECK("AreaComplete.MainColor.Value"), Color_Main_Default); - Color_RGBA8 areaIncompleteColor = CVarGetColor(CVAR_TRACKER_CHECK("AreaIncomplete.MainColor.Value"), Color_Main_Default); - Color_RGBA8 extraCompleteColor = CVarGetColor(CVAR_TRACKER_CHECK("AreaComplete.ExtraColor.Value"), Color_Area_Complete_Extra_Default); - Color_RGBA8 extraIncompleteColor = CVarGetColor(CVAR_TRACKER_CHECK("AreaIncomplete.ExtraColor.Value"), Color_Area_Incomplete_Extra_Default); + Color_RGBA8 areaCompleteColor = + CVarGetColor(CVAR_TRACKER_CHECK("AreaComplete.MainColor.Value"), Color_Main_Default); + Color_RGBA8 areaIncompleteColor = + CVarGetColor(CVAR_TRACKER_CHECK("AreaIncomplete.MainColor.Value"), Color_Main_Default); + Color_RGBA8 extraCompleteColor = + CVarGetColor(CVAR_TRACKER_CHECK("AreaComplete.ExtraColor.Value"), Color_Area_Complete_Extra_Default); + Color_RGBA8 extraIncompleteColor = + CVarGetColor(CVAR_TRACKER_CHECK("AreaIncomplete.ExtraColor.Value"), Color_Area_Incomplete_Extra_Default); Color_RGBA8 mainColor; Color_RGBA8 extraColor; std::string stemp; bool shouldHideFilteredAreas = CVarGetInteger(CVAR_TRACKER_CHECK("HideFilteredAreas"), 1); - + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(4.0f, 3.0f)); for (auto& [rcArea, checks] : checksByArea) { RandomizerCheckArea thisArea = currentArea; thisAreaFullyChecked = (areaChecksGotten[rcArea] == areaCheckTotals[rcArea]); - //Last Area needs to be cleaned up + // Last Area needs to be cleaned up if (lastArea != RCAREA_INVALID && doDraw) { UIWidgets::PaddedSeparator(); } @@ -1004,11 +1115,11 @@ void CheckTrackerWindow::DrawElement() { doAreaScroll = true; } if ((shouldHideFilteredAreas && filterAreasHidden[rcArea]) || - (!showHidden && ((hideComplete && thisAreaFullyChecked) || (hideIncomplete && !thisAreaFullyChecked))) - ) { + (!showHidden && ((hideComplete && thisAreaFullyChecked) || (hideIncomplete && !thisAreaFullyChecked))) || + (enableAvailableChecks && onlyShowAvailable && areaChecksAvailable[rcArea] == 0)) { doDraw = false; } else { - //Get the colour for the area + // Get the colour for the area if (thisAreaFullyChecked) { mainColor = areaCompleteColor; extraColor = extraCompleteColor; @@ -1017,7 +1128,7 @@ void CheckTrackerWindow::DrawElement() { extraColor = extraIncompleteColor; } - //Draw the area + // Draw the area collapseLogic = !thisAreaFullyChecked; if (doingCollapseOrExpand) { if (optExpandAll) { @@ -1043,21 +1154,37 @@ void CheckTrackerWindow::DrawElement() { isThisAreaSpoiled = IsAreaSpoiled(rcArea) || mqSpoilers; if (isThisAreaSpoiled) { - if (showVOrMQ && RandomizerCheckObjects::AreaIsDungeon(rcArea)) { - if (OTRGlobals::Instance->gRandoContext->GetDungeons()->GetDungeonFromScene(DungeonSceneLookupByArea(rcArea))->IsMQ()) - ImGui::Text("(%d/%d) - MQ", areaChecksGotten[rcArea], areaCheckTotals[rcArea]); - else - ImGui::Text("(%d/%d) - Vanilla", areaChecksGotten[rcArea], areaCheckTotals[rcArea]); - } else { - ImGui::Text("(%d/%d)", areaChecksGotten[rcArea], areaCheckTotals[rcArea]); + std::ostringstream areaTotalsSS; + std::ostringstream areaTotalsTooltipSS; + + areaTotalsSS << "("; + if (enableAvailableChecks) { + areaTotalsSS << static_cast(areaChecksAvailable[rcArea]) << " / "; + areaTotalsTooltipSS << "Available / "; } + areaTotalsSS << static_cast(areaChecksGotten[rcArea]) << " / " + << static_cast(areaCheckTotals[rcArea]) << ")"; + areaTotalsTooltipSS << "Checked / Total"; + + if (showVOrMQ && RandomizerCheckObjects::AreaIsDungeon(rcArea)) { + if (OTRGlobals::Instance->gRandoContext->GetDungeons() + ->GetDungeonFromScene(DungeonSceneLookupByArea(rcArea)) + ->IsMQ()) { + areaTotalsSS << " - MQ"; + } else { + areaTotalsSS << " - Vanilla"; + } + } + + ImGui::Text(areaTotalsSS.str().c_str()); + UIWidgets::Tooltip(areaTotalsTooltipSS.str().c_str()); } else { ImGui::Text("???"); } ImGui::PopStyleColor(); - //Keep areas loaded between transitions + // Keep areas loaded between transitions if (thisArea == rcArea && doAreaScroll) { ImGui::SetScrollHereY(0.0f); doAreaScroll = false; @@ -1075,8 +1202,8 @@ void CheckTrackerWindow::DrawElement() { } ImGui::PopStyleVar(); - ImGui::EndTable(); //Checks Lead-out - ImGui::EndTable(); //Quick Options Lead-out + ImGui::EndTable(); // Checks Lead-out + ImGui::EndTable(); // Quick Options Lead-out EndFloatWindows(); if (doingCollapseOrExpand) { optCollapseAll = false; @@ -1087,7 +1214,7 @@ void CheckTrackerWindow::DrawElement() { bool UpdateFilters() { for (auto& [rcArea, checks] : checksByArea) { filterAreasHidden[rcArea] = !checkSearch.PassFilter(RandomizerCheckObjects::GetRCAreaName(rcArea).c_str()); - for (auto check : checks) { + for (auto check : checks) { if (ShouldShowCheck(check)) { filterAreasHidden[rcArea] = false; filterChecksHidden[check] = false; @@ -1103,21 +1230,22 @@ bool UpdateFilters() { bool ShouldShowCheck(RandomizerCheck check) { auto itemLoc = Rando::Context::GetInstance()->GetItemLocation(check); std::string search = (Rando::StaticData::GetLocation(check)->GetShortName() + " " + - Rando::StaticData::GetLocation(check)->GetName() + " " + - RandomizerCheckObjects::GetRCAreaName(Rando::StaticData::GetLocation(check)->GetArea())); - if (itemLoc->HasObtained() || itemLoc->GetCheckStatus() == RCSHOW_SCUMMED || - (!mystery && (itemLoc->GetCheckStatus() == RCSHOW_IDENTIFIED || itemLoc->GetCheckStatus() == RCSHOW_SEEN) && itemLoc->GetPlacedRandomizerGet() != RG_ICE_TRAP)) { + Rando::StaticData::GetLocation(check)->GetName() + " " + + RandomizerCheckObjects::GetRCAreaName(Rando::StaticData::GetLocation(check)->GetArea())); + if (itemLoc->HasObtained() || itemLoc->GetCheckStatus() == RCSHOW_SCUMMED || + (!mystery && (itemLoc->GetCheckStatus() == RCSHOW_IDENTIFIED || itemLoc->GetCheckStatus() == RCSHOW_SEEN) && + itemLoc->GetPlacedRandomizerGet() != RG_ICE_TRAP)) { search += " " + itemLoc->GetPlacedItemName().GetForLanguage(gSaveContext.language); } else if (itemLoc->GetCheckStatus() == RCSHOW_IDENTIFIED && !mystery) { - search += OTRGlobals::Instance->gRandoContext->overrides[check].GetTrickName().GetForLanguage(gSaveContext.language); + search += + OTRGlobals::Instance->gRandoContext->overrides[check].GetTrickName().GetForLanguage(gSaveContext.language); } else if (itemLoc->GetCheckStatus() == RCSHOW_SEEN && !mystery) { - search += Rando::StaticData::RetrieveItem(OTRGlobals::Instance->gRandoContext->overrides[check].LooksLike()).GetName().GetForLanguage(gSaveContext.language); + search += Rando::StaticData::RetrieveItem(OTRGlobals::Instance->gRandoContext->overrides[check].LooksLike()) + .GetName() + .GetForLanguage(gSaveContext.language); } - return ( - IsVisibleInCheckTracker(check) && - (checkSearch.Filters.Size == 0 || - checkSearch.PassFilter(search.c_str())) - ); + return (IsVisibleInCheckTracker(check) && + (checkSearch.Filters.Size == 0 || checkSearch.PassFilter(search.c_str()))); } // Windowing stuff @@ -1125,8 +1253,7 @@ void BeginFloatWindows(std::string UniqueName, bool& open, ImGuiWindowFlags flag ImGuiWindowFlags windowFlags = flags; if (windowFlags == 0) { - windowFlags |= - ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_NoFocusOnAppearing; + windowFlags |= ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_NoFocusOnAppearing; } if (CVarGetInteger(CVAR_TRACKER_CHECK("WindowType"), TRACKER_WINDOW_WINDOW) == TRACKER_WINDOW_FLOATING) { @@ -1152,80 +1279,80 @@ void EndFloatWindows() { } void LoadSettings() { - //If in randomzer, then get the setting and check if in general we should be showing the settings - //If in vanilla, _try_ to show items that at least are needed for 100% + // If in randomzer, then get the setting and check if in general we should be showing the settings + // If in vanilla, _try_ to show items that at least are needed for 100% - showShops = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) != RO_SHOPSANITY_OFF - : false; - showBeans = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_BEANS_ONLY || - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL - : true; - showScrubs = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_SCRUBS) == RO_SCRUBS_ALL - : false; - showMajorScrubs = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_SCRUBS) != RO_SCRUBS_OFF - : false; - showMerchants = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS || - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MERCHANTS) == RO_SHUFFLE_MERCHANTS_ALL - : true; - showBeehives = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_BEEHIVES) == RO_GENERIC_YES - : false; - showCows = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_COWS) == RO_GENERIC_YES - : false; - showAdultTrade = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ADULT_TRADE) == RO_GENERIC_YES - : true; - showKokiriSword = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_KOKIRI_SWORD) == RO_GENERIC_YES - : true; - showMasterSword = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MASTER_SWORD) == RO_GENERIC_YES - : true; - showHyruleLoach = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY) == RO_FISHSANITY_HYRULE_LOACH - : false; - showWeirdEgg = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_WEIRD_EGG) == RO_GENERIC_YES - : true; - showGerudoCard = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) == RO_GENERIC_YES - : true; - showFrogSongRupees = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_FROG_SONG_RUPEES) == RO_GENERIC_YES - : false; - showFairies = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_FAIRIES) == RO_GENERIC_YES - : false; - showStartingMapsCompasses = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MAPANDCOMPASS) != RO_DUNGEON_ITEM_LOC_VANILLA - : false; - showKeysanity = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_KEYSANITY) != RO_DUNGEON_ITEM_LOC_VANILLA - : false; - showBossKeysanity = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_BOSS_KEYSANITY) != RO_DUNGEON_ITEM_LOC_VANILLA - : false; - showGerudoFortressKeys = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_GERUDO_KEYS) != RO_GERUDO_KEYS_VANILLA - : false; - showGanonBossKey = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_GANONS_BOSS_KEY) != RO_GANON_BOSS_KEY_VANILLA - : false; - showOcarinas = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_OCARINA) == RO_GENERIC_YES - : false; - show100SkullReward = IS_RANDO ? - OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_100_GS_REWARD) == RO_GENERIC_YES - : false; - 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; + showShops = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHOPSANITY) != RO_SHOPSANITY_OFF : false; + showBeans = IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MERCHANTS) == + RO_SHUFFLE_MERCHANTS_BEANS_ONLY || + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MERCHANTS) == + RO_SHUFFLE_MERCHANTS_ALL + : true; + showScrubs = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_SCRUBS) == RO_SCRUBS_ALL : false; + showMajorScrubs = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_SCRUBS) != RO_SCRUBS_OFF : false; + showMerchants = IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MERCHANTS) == + RO_SHUFFLE_MERCHANTS_ALL_BUT_BEANS || + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MERCHANTS) == + RO_SHUFFLE_MERCHANTS_ALL + : true; + showBeehives = IS_RANDO + ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_BEEHIVES) == RO_GENERIC_YES + : false; + showCows = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_COWS) == RO_GENERIC_YES : false; + showAdultTrade = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ADULT_TRADE) == RO_GENERIC_YES + : true; + showKokiriSword = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_KOKIRI_SWORD) == RO_GENERIC_YES + : true; + showMasterSword = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_MASTER_SWORD) == RO_GENERIC_YES + : true; + showHyruleLoach = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY) == RO_FISHSANITY_HYRULE_LOACH + : false; + showWeirdEgg = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_WEIRD_EGG) == RO_GENERIC_YES + : true; + showGerudoCard = IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue( + RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) == RO_GENERIC_YES + : true; + showFrogSongRupees = + IS_RANDO + ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_FROG_SONG_RUPEES) == RO_GENERIC_YES + : false; + showFairies = IS_RANDO + ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_FAIRIES) == RO_GENERIC_YES + : false; + showStartingMapsCompasses = IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue( + RSK_SHUFFLE_MAPANDCOMPASS) != RO_DUNGEON_ITEM_LOC_VANILLA + : false; + showKeysanity = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_KEYSANITY) != RO_DUNGEON_ITEM_LOC_VANILLA + : false; + showBossKeysanity = IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_BOSS_KEYSANITY) != + RO_DUNGEON_ITEM_LOC_VANILLA + : false; + showGerudoFortressKeys = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_GERUDO_KEYS) != RO_GERUDO_KEYS_VANILLA + : false; + showGanonBossKey = IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_GANONS_BOSS_KEY) != + RO_GANON_BOSS_KEY_VANILLA + : false; + showOcarinas = IS_RANDO + ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_OCARINA) == RO_GENERIC_YES + : false; + show100SkullReward = + IS_RANDO ? OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_100_GS_REWARD) == RO_GENERIC_YES + : false; + 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; if (IS_RANDO) { switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_TOKENS)) { @@ -1265,11 +1392,53 @@ void LoadSettings() { showDungeonPots = false; break; } + + switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_GRASS)) { + case RO_SHUFFLE_GRASS_ALL: + showOverworldGrass = true; + showDungeonGrass = true; + break; + case RO_SHUFFLE_GRASS_OVERWORLD: + showOverworldGrass = true; + showDungeonGrass = false; + break; + case RO_SHUFFLE_GRASS_DUNGEONS: + showOverworldGrass = false; + showDungeonGrass = true; + break; + default: + showOverworldGrass = false; + showDungeonGrass = false; + break; + } + + switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_CRATES)) { + case RO_SHUFFLE_CRATES_ALL: + showOverworldCrates = true; + showDungeonCrates = true; + break; + case RO_SHUFFLE_CRATES_OVERWORLD: + showOverworldCrates = true; + showDungeonCrates = false; + break; + case RO_SHUFFLE_CRATES_DUNGEONS: + showOverworldCrates = false; + showDungeonCrates = true; + break; + default: + showOverworldCrates = false; + showDungeonCrates = false; + break; + } } else { // Vanilla showOverworldTokens = true; showDungeonTokens = true; showOverworldPots = false; showDungeonPots = false; + showOverworldGrass = false; + showDungeonGrass = false; + showOverworldCrates = false; + showDungeonCrates = false; } fortressFast = false; @@ -1322,65 +1491,71 @@ bool IsCheckShuffled(RandomizerCheck rc) { auto identity = OTRGlobals::Instance->gRandomizer->IdentifyShopItem(loc->GetScene(), loc->GetActorParams() + 1); } if (IS_RANDO && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_LOGIC_RULES) != RO_LOGIC_VANILLA) { - return - (loc->GetArea() != RCAREA_INVALID) && // don't show Invalid locations - (loc->GetRCType() != RCTYPE_GOSSIP_STONE) && //TODO: Don't show hints until tracker supports them - (loc->GetRCType() != RCTYPE_STATIC_HINT) && //TODO: Don't show hints until tracker supports them - (loc->GetRCType() != RCTYPE_CHEST_GAME) && // don't show non final reward chest game checks until we support shuffling them - (rc != RC_HC_ZELDAS_LETTER) && // don't show zeldas letter until we support shuffling it - (rc != RC_LINKS_POCKET || showLinksPocket) && - 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) && - (rc != RC_GANON) && - (loc->GetRCType() != RCTYPE_SCRUB || - showScrubs || + return (loc->GetArea() != RCAREA_INVALID) && // don't show Invalid locations + (loc->GetRCType() != RCTYPE_GOSSIP_STONE) && // TODO: Don't show hints until tracker supports them + (loc->GetRCType() != RCTYPE_STATIC_HINT) && // TODO: Don't show hints until tracker supports them + (loc->GetRCType() != + RCTYPE_CHEST_GAME) && // don't show non final reward chest game checks until we support shuffling them + (rc != RC_HC_ZELDAS_LETTER) && // don't show zeldas letter until we support shuffling it + (rc != RC_LINKS_POCKET || showLinksPocket) && + 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) && (rc != RC_GANON) && + (loc->GetRCType() != RCTYPE_SCRUB || showScrubs || (showMajorScrubs && (rc == RC_LW_DEKU_SCRUB_NEAR_BRIDGE || // The 3 scrubs that are always randomized - rc == RC_HF_DEKU_SCRUB_GROTTO || - rc == RC_LW_DEKU_SCRUB_GROTTO_FRONT)) - ) && - (loc->GetRCType() != RCTYPE_MERCHANT || showMerchants) && - (loc->GetRCType() != RCTYPE_BEEHIVE || showBeehives) && - (loc->GetRCType() != RCTYPE_OCARINA || showOcarinas) && - (loc->GetRCType() != RCTYPE_SKULL_TOKEN || alwaysShowGS || + rc == RC_HF_DEKU_SCRUB_GROTTO || rc == RC_LW_DEKU_SCRUB_GROTTO_FRONT))) && + (loc->GetRCType() != RCTYPE_MERCHANT || showMerchants) && + (loc->GetRCType() != RCTYPE_BEEHIVE || showBeehives) && + (loc->GetRCType() != RCTYPE_OCARINA || showOcarinas) && + (loc->GetRCType() != RCTYPE_SKULL_TOKEN || alwaysShowGS || (showOverworldTokens && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || - (showDungeonTokens && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea())) - ) && - (loc->GetRCType() != RCTYPE_POT || + (showDungeonTokens && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_POT || (showOverworldPots && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || (showDungeonPots && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && - (loc->GetRCType() != RCTYPE_COW || showCows) && - (loc->GetRCType() != RCTYPE_FISH || OTRGlobals::Instance->gRandoContext->GetFishsanity()->GetFishLocationIncluded(loc)) && - (loc->GetRCType() != RCTYPE_FREESTANDING || + (loc->GetRCType() != RCTYPE_GRASS || + (showOverworldGrass && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || + (showDungeonGrass && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_CRATE || + (showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || + (showDungeonCrates && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_NLCRATE || + (showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea()) && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_LOGIC_RULES) == RO_LOGIC_NO_LOGIC) || + (showDungeonCrates && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_SMALL_CRATE || + (showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || + (showDungeonCrates && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_COW || showCows) && + (loc->GetRCType() != RCTYPE_FISH || + OTRGlobals::Instance->gRandoContext->GetFishsanity()->GetFishLocationIncluded(loc)) && + (loc->GetRCType() != RCTYPE_FREESTANDING || (showOverworldFreestanding && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || - (showDungeonFreestanding && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea())) - ) && - (loc->GetRCType() != RCTYPE_ADULT_TRADE || - showAdultTrade || + (showDungeonFreestanding && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_ADULT_TRADE || showAdultTrade || rc == RC_KAK_ANJU_AS_ADULT || // adult trade checks that are always shuffled rc == RC_DMT_TRADE_CLAIM_CHECK // even when shuffle adult trade is off ) && - (rc != RC_KF_KOKIRI_SWORD_CHEST || showKokiriSword) && - (rc != RC_TOT_MASTER_SWORD || showMasterSword) && - (rc != RC_LH_HYRULE_LOACH || showHyruleLoach) && - (rc != RC_ZR_MAGIC_BEAN_SALESMAN || showBeans) && - (rc != RC_HC_MALON_EGG || showWeirdEgg) && - (loc->GetRCType() != RCTYPE_FROG_SONG || showFrogSongRupees) && - ((loc->GetRCType() != RCTYPE_MAP && loc->GetRCType() != RCTYPE_COMPASS) || showStartingMapsCompasses) && - (loc->GetRCType() != RCTYPE_FAIRY || showFairies) && - (loc->GetRCType() != RCTYPE_SMALL_KEY || showKeysanity) && - (loc->GetRCType() != RCTYPE_BOSS_KEY || showBossKeysanity) && - (loc->GetRCType() != RCTYPE_GANON_BOSS_KEY || showGanonBossKey) && - (rc != RC_KAK_100_GOLD_SKULLTULA_REWARD || show100SkullReward) && - (loc->GetRCType() != RCTYPE_GF_KEY && rc != RC_GF_GERUDO_MEMBERSHIP_CARD || + (rc != RC_KF_KOKIRI_SWORD_CHEST || showKokiriSword) && (rc != RC_TOT_MASTER_SWORD || showMasterSword) && + (rc != RC_LH_HYRULE_LOACH || showHyruleLoach) && (rc != RC_ZR_MAGIC_BEAN_SALESMAN || showBeans) && + (rc != RC_HC_MALON_EGG || showWeirdEgg) && + (loc->GetRCType() != RCTYPE_FROG_SONG || showFrogSongRupees) && + ((loc->GetRCType() != RCTYPE_MAP && loc->GetRCType() != RCTYPE_COMPASS) || showStartingMapsCompasses) && + (loc->GetRCType() != RCTYPE_FAIRY || showFairies) && + (loc->GetRCType() != RCTYPE_SMALL_KEY || showKeysanity) && + (loc->GetRCType() != RCTYPE_BOSS_KEY || showBossKeysanity) && + (loc->GetRCType() != RCTYPE_GANON_BOSS_KEY || showGanonBossKey) && + (rc != RC_KAK_100_GOLD_SKULLTULA_REWARD || show100SkullReward) && + (loc->GetRCType() != RCTYPE_GF_KEY && rc != RC_GF_GERUDO_MEMBERSHIP_CARD || (showGerudoCard && rc == RC_GF_GERUDO_MEMBERSHIP_CARD) || (fortressNormal && showGerudoFortressKeys && loc->GetRCType() == RCTYPE_GF_KEY) || - (fortressFast && showGerudoFortressKeys && rc == RC_GF_NORTH_F1_CARPENTER) - ); - } - else if (loc->IsVanillaCompletion()) { - return (OTRGlobals::Instance->gRandoContext->IsQuestOfLocationActive(rc) || rc == RC_GIFT_FROM_RAURU) && rc != RC_LINKS_POCKET; + (fortressFast && showGerudoFortressKeys && rc == RC_GF_NORTH_F1_CARPENTER)); + } else if (loc->IsVanillaCompletion()) { + return (OTRGlobals::Instance->gRandoContext->IsQuestOfLocationActive(rc) || rc == RC_GIFT_FROM_RAURU) && + rc != RC_LINKS_POCKET; } return false; } @@ -1388,17 +1563,18 @@ bool IsCheckShuffled(RandomizerCheck rc) { bool IsVisibleInCheckTracker(RandomizerCheck rc) { auto loc = Rando::StaticData::GetLocation(rc); if (IS_RANDO) { - return IsCheckShuffled(rc) || (alwaysShowGS && - loc->GetRCType() == RCTYPE_SKULL_TOKEN && - OTRGlobals::Instance->gRandoContext->IsQuestOfLocationActive(rc) - ) || (loc->GetRCType() == RCTYPE_SHOP && showShops && !hideShopUnshuffledChecks); + return IsCheckShuffled(rc) || + (alwaysShowGS && loc->GetRCType() == RCTYPE_SKULL_TOKEN && + OTRGlobals::Instance->gRandoContext->IsQuestOfLocationActive(rc)) || + (loc->GetRCType() == RCTYPE_SHOP && showShops && !hideShopUnshuffledChecks); } else { - return loc->IsVanillaCompletion() && (!loc->IsDungeon() || (loc->IsDungeon() && loc->GetQuest() == gSaveContext.ship.quest.id)); + return loc->IsVanillaCompletion() && + (!loc->IsDungeon() || (loc->IsDungeon() && loc->GetQuest() == gSaveContext.ship.quest.id)); } } void UpdateInventoryChecks() { - //For all the areas with maps, if you have one, spoil the area + // For all the areas with maps, if you have one, spoil the area for (auto [scene, area] : DungeonRCAreasBySceneID) { if (CHECK_DUNGEON_ITEM(DUNGEON_MAP, scene)) { SetAreaSpoiled(area); @@ -1431,7 +1607,7 @@ void UpdateAllOrdering() { void UpdateOrdering(RandomizerCheckArea rcArea) { // Sort a single area - if(checksByArea.contains(rcArea)) { + if (checksByArea.contains(rcArea)) { std::sort(checksByArea.find(rcArea)->second.begin(), checksByArea.find(rcArea)->second.end(), CompareChecks); } RecalculateAllAreaTotals(); @@ -1497,6 +1673,12 @@ void DrawLocation(RandomizerCheck rc) { Rando::ItemLocation* itemLoc = OTRGlobals::Instance->gRandoContext->GetItemLocation(rc); RandomizerCheckStatus status = itemLoc->GetCheckStatus(); bool skipped = itemLoc->GetIsSkipped(); + bool available = itemLoc->IsAvailable(); + + if (enableAvailableChecks && onlyShowAvailable && !available) { + return; + } + if (status == RCSHOW_COLLECTED) { if (!showHidden && hideCollected) { return; @@ -1539,8 +1721,8 @@ void DrawLocation(RandomizerCheck rc) { } mainColor = !IsHeartPiece((GetItemID)Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetItemID()) && !IS_RANDO - ? Color_Scummed_Extra - : Color_Scummed_Main; + ? Color_Scummed_Extra + : Color_Scummed_Main; extraColor = Color_Scummed_Extra; } else if (status == RCSHOW_UNCHECKED) { if (!showHidden && hideUnchecked) { @@ -1553,30 +1735,40 @@ void DrawLocation(RandomizerCheck rc) { extraColor = Color_Unchecked_Extra; } - //Main Text + // Main Text if (checkNameOverrides.contains(loc->GetRandomizerCheck())) { txt = checkNameOverrides[loc->GetRandomizerCheck()]; } else { txt = loc->GetShortName(); } - + if (lastLocationChecked == loc->GetRandomizerCheck()) { txt = "* " + txt; } // Draw button - for Skipped/Seen/Scummed/Unchecked only - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {4.0f, 3.0f}); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, { 4.0f, 3.0f }); float sz = ImGui::GetFrameHeight(); - if (status == RCSHOW_UNCHECKED || status == RCSHOW_SEEN || status == RCSHOW_IDENTIFIED || status == RCSHOW_SCUMMED || skipped) { - if (UIWidgets::StateButton(std::to_string(rc).c_str(), skipped ? ICON_FA_PLUS : ICON_FA_TIMES, ImVec2(sz, sz), UIWidgets::ButtonOptions().Color(THEME_COLOR))) { + if (status == RCSHOW_UNCHECKED || status == RCSHOW_SEEN || status == RCSHOW_IDENTIFIED || + status == RCSHOW_SCUMMED || skipped) { + if (UIWidgets::StateButton(std::to_string(rc).c_str(), skipped ? ICON_FA_PLUS : ICON_FA_TIMES, ImVec2(sz, sz), + UIWidgets::ButtonOptions().Color(THEME_COLOR))) { if (skipped) { OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->SetIsSkipped(false); areaChecksGotten[loc->GetArea()]--; totalChecksGotten--; + if (available) { + areaChecksAvailable[loc->GetArea()]++; + totalChecksAvailable++; + } } else { OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->SetIsSkipped(true); areaChecksGotten[loc->GetArea()]++; totalChecksGotten++; + if (available) { + areaChecksAvailable[loc->GetArea()]--; + totalChecksAvailable--; + } } UpdateOrdering(loc->GetArea()); UpdateInventoryChecks(); @@ -1589,12 +1781,24 @@ void DrawLocation(RandomizerCheck rc) { ImGui::SameLine(); - //Draw - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(mainColor.r / 255.0f, mainColor.g / 255.0f, mainColor.b / 255.0f, mainColor.a / 255.0f)); + // Draw + ImVec4 styleColor(mainColor.r / 255.0f, mainColor.g / 255.0f, mainColor.b / 255.0f, mainColor.a / 255.0f); + if (enableAvailableChecks) { + if (itemLoc->HasObtained()) { + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0, 0, 0, 0)); + } else { + ImGui::PushStyleColor(ImGuiCol_Text, styleColor); + } + ImGui::Text("%s", available ? ICON_FA_UNLOCK : ICON_FA_LOCK); + ImGui::PopStyleColor(); + ImGui::SameLine(); + } + + ImGui::PushStyleColor(ImGuiCol_Text, styleColor); ImGui::Text("%s", txt.c_str()); ImGui::PopStyleColor(); - //Draw the extra info + // Draw the extra info txt = ""; if (status != RCSHOW_UNCHECKED) { @@ -1606,7 +1810,8 @@ void DrawLocation(RandomizerCheck rc) { txt = itemLoc->GetPlacedItem().GetName().GetForLanguage(gSaveContext.language); } else { if (IsHeartPiece((GetItemID)Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetItemID())) { - if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER) { + if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER || + gSaveContext.language == LANGUAGE_JPN) { txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetName().english; } else if (gSaveContext.language == LANGUAGE_FRA) { txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetName().french; @@ -1619,14 +1824,19 @@ void DrawLocation(RandomizerCheck rc) { if (IS_RANDO) { if (itemLoc->GetPlacedRandomizerGet() == RG_ICE_TRAP && !mystery && !itemLoc->IsAddedToPool()) { if (status == RCSHOW_IDENTIFIED) { - txt = OTRGlobals::Instance->gRandoContext->overrides[rc].GetTrickName().GetForLanguage(gSaveContext.language); + txt = OTRGlobals::Instance->gRandoContext->overrides[rc].GetTrickName().GetForLanguage( + gSaveContext.language); } else { - txt = Rando::StaticData::RetrieveItem(OTRGlobals::Instance->gRandoContext->overrides[rc].LooksLike()).GetName().GetForLanguage(gSaveContext.language); + txt = Rando::StaticData::RetrieveItem( + OTRGlobals::Instance->gRandoContext->overrides[rc].LooksLike()) + .GetName() + .GetForLanguage(gSaveContext.language); } } else if (!mystery && !itemLoc->IsAddedToPool()) { txt = itemLoc->GetPlacedItem().GetName().GetForLanguage(gSaveContext.language); } - if (IsVisibleInCheckTracker(rc) && status == RCSHOW_IDENTIFIED && !mystery && !itemLoc->IsAddedToPool()) { + if (IsVisibleInCheckTracker(rc) && status == RCSHOW_IDENTIFIED && !mystery && + !itemLoc->IsAddedToPool()) { auto price = OTRGlobals::Instance->gRandoContext->GetItemLocation(rc)->GetPrice(); if (price) { txt += fmt::format(" - {}", price); @@ -1634,27 +1844,29 @@ void DrawLocation(RandomizerCheck rc) { } } else { if (IsHeartPiece((GetItemID)Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetItemID())) { - if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER) { + if (gSaveContext.language == LANGUAGE_ENG || gSaveContext.language == LANGUAGE_GER || + gSaveContext.language == LANGUAGE_JPN) { txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetName().english; } else if (gSaveContext.language == LANGUAGE_FRA) { txt = Rando::StaticData::RetrieveItem(loc->GetVanillaItem()).GetName().french; } } } - break; + break; } } if (txt == "" && skipped) { txt = "Skipped"; // TODO language } - + if (txt != "") { - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(extraColor.r / 255.0f, extraColor.g / 255.0f, extraColor.b / 255.0f, extraColor.a / 255.0f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(extraColor.r / 255.0f, extraColor.g / 255.0f, extraColor.b / 255.0f, + extraColor.a / 255.0f)); ImGui::SameLine(); ImGui::Text(" (%s)", txt.c_str()); ImGui::PopStyleColor(); } - + if (showLogicTooltip) { for (auto& locationInRegion : areaTable[itemLoc->GetParentRegionKey()].locations) { if (locationInRegion.GetLocation() == rc) { @@ -1662,7 +1874,7 @@ void DrawLocation(RandomizerCheck rc) { if (conditionStr != "true") { UIWidgets::Tooltip(conditionStr.c_str()); } - return; + break; } } } @@ -1689,7 +1901,7 @@ void RainbowTick() { } Color_RGBA8 newColor; - newColor.r = sin(freqHue + 0) * 127 + 128; + newColor.r = sin(freqHue + 0) * 127 + 128; newColor.g = sin(freqHue + (2 * M_PI / 3)) * 127 + 128; newColor.b = sin(freqHue + (4 * M_PI / 3)) * 127 + 128; newColor.a = 255; @@ -1702,8 +1914,9 @@ void RainbowTick() { } void ImGuiDrawTwoColorPickerSection(const char* text, const char* cvarMainName, const char* cvarExtraName, - Color_RGBA8& main_color, Color_RGBA8& extra_color, Color_RGBA8& main_default_color, - Color_RGBA8& extra_default_color, const char* cvarHideName, const char* tooltip, UIWidgets::Colors theme) { + Color_RGBA8& main_color, Color_RGBA8& extra_color, Color_RGBA8& main_default_color, + Color_RGBA8& extra_default_color, const char* cvarHideName, const char* tooltip, + UIWidgets::Colors theme) { Color_RGBA8 cvarMainColor = CVarGetColor(cvarMainName, main_default_color); Color_RGBA8 cvarExtraColor = CVarGetColor(cvarExtraName, extra_default_color); main_color = cvarMainColor; @@ -1715,20 +1928,27 @@ void ImGuiDrawTwoColorPickerSection(const char* text, const char* cvarMainName, std::string label = cvarHideName; label += "##Hidden"; ImGui::PushID(label.c_str()); - UIWidgets::CVarCheckbox("Hidden", cvarHideName, - UIWidgets::CheckboxOptions({{ .tooltip = "When active, checks will hide by default when updated to this state. Can " - "be overriden with the \"Show Hidden Items\" option." }}).Color(theme)); + UIWidgets::CVarCheckbox( + "Hidden", cvarHideName, + UIWidgets::CheckboxOptions( + { { .tooltip = "When active, checks will hide by default when updated to this state. Can " + "be overriden with the \"Show Hidden Items\" option." } }) + .Color(theme)); ImGui::PopID(); } std::string mainLabel = "Name##" + std::string(cvarMainName); if (UIWidgets::CVarColorPicker(mainLabel.c_str(), cvarMainName, main_default_color, false, - UIWidgets::ColorPickerRandomButton | UIWidgets::ColorPickerResetButton | UIWidgets::ColorPickerRainbowCheck, theme)) { + UIWidgets::ColorPickerRandomButton | UIWidgets::ColorPickerResetButton | + UIWidgets::ColorPickerRainbowCheck, + theme)) { main_color = CVarGetColor(cvarMainName, main_default_color); } std::string extraLabel = "Details##" + std::string(cvarExtraName); if (UIWidgets::CVarColorPicker(extraLabel.c_str(), cvarExtraName, extra_default_color, false, - UIWidgets::ColorPickerRandomButton | UIWidgets::ColorPickerResetButton | UIWidgets::ColorPickerRainbowCheck, theme)) { + UIWidgets::ColorPickerRandomButton | UIWidgets::ColorPickerResetButton | + UIWidgets::ColorPickerRainbowCheck, + theme)) { extra_color = CVarGetColor(cvarExtraName, extra_default_color); } } @@ -1740,6 +1960,55 @@ void ImGuiDrawTwoColorPickerSection(const char* text, const char* cvarMainName, UIWidgets::PopStyleCombobox(); } +void RecalculateAvailableChecks() { + if (!enableAvailableChecks) { + return; + } + + ResetPerformanceTimer(PT_RECALCULATE_AVAILABLE_CHECKS); + StartPerformanceTimer(PT_RECALCULATE_AVAILABLE_CHECKS); + + std::vector targetLocations; + targetLocations.reserve(RR_MAX); + for (auto& location : Rando::StaticData::GetLocationTable()) { + RandomizerCheck rc = location.GetRandomizerCheck(); + Rando::ItemLocation* itemLocation = OTRGlobals::Instance->gRandoContext->GetItemLocation(rc); + itemLocation->SetAvailable(false); + if (!itemLocation->HasObtained()) { + targetLocations.emplace_back(rc); + } + } + + std::vector availableChecks = ReachabilitySearch(targetLocations, RG_NONE, true); + for (auto& rc : availableChecks) { + const auto& location = Rando::StaticData::GetLocation(rc); + const auto& itemLocation = OTRGlobals::Instance->gRandoContext->GetItemLocation(rc); + if (location->GetRCType() == RCTYPE_SHOP && itemLocation->GetCheckStatus() == RCSHOW_IDENTIFIED) { + if (CanBuyAnother(rc)) { + itemLocation->SetAvailable(true); + } + } else { + itemLocation->SetAvailable(true); + } + } + + totalChecksAvailable = 0; + for (auto& [rcArea, vec] : checksByArea) { + areaChecksAvailable[rcArea] = 0; + for (auto& rc : vec) { + Rando::ItemLocation* itemLocation = OTRGlobals::Instance->gRandoContext->GetItemLocation(rc); + if (itemLocation->IsAvailable() && IsVisibleInCheckTracker(rc) && !IsCheckHidden(rc)) { + areaChecksAvailable[rcArea]++; + } + } + totalChecksAvailable += areaChecksAvailable[rcArea]; + } + + StopPerformanceTimer(PT_RECALCULATE_AVAILABLE_CHECKS); + SPDLOG_INFO("Recalculate Available Checks Time: {}ms", + GetPerformanceTimer(PT_RECALCULATE_AVAILABLE_CHECKS).count()); +} + void CheckTrackerWindow::Draw() { if (!IsVisible()) { return; @@ -1749,14 +2018,18 @@ void CheckTrackerWindow::Draw() { SyncVisibilityConsoleVariable(); } -static std::unordered_map windowType = {{ TRACKER_WINDOW_FLOATING, "Floating" }, { TRACKER_WINDOW_WINDOW, "Window" }}; -static std::unordered_map displayType = {{ 0, "Always" }, { 1, "Combo Button Hold" }}; +static std::unordered_map windowType = { { TRACKER_WINDOW_FLOATING, "Floating" }, + { TRACKER_WINDOW_WINDOW, "Window" } }; +static std::unordered_map displayType = { { 0, "Always" }, { 1, "Combo Button Hold" } }; static std::unordered_map buttonStrings = { - { TRACKER_COMBO_BUTTON_A, "A Button" }, { TRACKER_COMBO_BUTTON_B, "B Button" }, { TRACKER_COMBO_BUTTON_C_UP, "C-Up" }, - { TRACKER_COMBO_BUTTON_C_DOWN, "C-Down" }, { TRACKER_COMBO_BUTTON_C_LEFT, "C-Left" }, { TRACKER_COMBO_BUTTON_C_RIGHT, "C-Right" }, - { TRACKER_COMBO_BUTTON_L, "L Button" }, { TRACKER_COMBO_BUTTON_Z, "Z Button" }, { TRACKER_COMBO_BUTTON_R, "R Button" }, - { TRACKER_COMBO_BUTTON_START, "Start" }, { TRACKER_COMBO_BUTTON_D_UP, "D-Up" }, { TRACKER_COMBO_BUTTON_D_DOWN, "D-Down" }, - { TRACKER_COMBO_BUTTON_D_LEFT, "D-Left" }, { TRACKER_COMBO_BUTTON_D_RIGHT, "D-Right" }}; + { TRACKER_COMBO_BUTTON_A, "A Button" }, { TRACKER_COMBO_BUTTON_B, "B Button" }, + { TRACKER_COMBO_BUTTON_C_UP, "C-Up" }, { TRACKER_COMBO_BUTTON_C_DOWN, "C-Down" }, + { TRACKER_COMBO_BUTTON_C_LEFT, "C-Left" }, { TRACKER_COMBO_BUTTON_C_RIGHT, "C-Right" }, + { TRACKER_COMBO_BUTTON_L, "L Button" }, { TRACKER_COMBO_BUTTON_Z, "Z Button" }, + { TRACKER_COMBO_BUTTON_R, "R Button" }, { TRACKER_COMBO_BUTTON_START, "Start" }, + { TRACKER_COMBO_BUTTON_D_UP, "D-Up" }, { TRACKER_COMBO_BUTTON_D_DOWN, "D-Down" }, + { TRACKER_COMBO_BUTTON_D_LEFT, "D-Left" }, { TRACKER_COMBO_BUTTON_D_RIGHT, "D-Right" } +}; void CheckTrackerSettingsWindow::DrawElement() { ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, { 8.0f, 8.0f }); @@ -1768,59 +2041,130 @@ void CheckTrackerSettingsWindow::DrawElement() { ImGui::TableNextColumn(); ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); UIWidgets::CVarColorPicker("BG Color", CVAR_TRACKER_CHECK("BgColor"), Color_Bg_Default, true, - UIWidgets::ColorPickerResetButton | UIWidgets::ColorPickerRandomButton, THEME_COLOR); + UIWidgets::ColorPickerResetButton | UIWidgets::ColorPickerRandomButton, THEME_COLOR); ImGui::PopItemWidth(); UIWidgets::CVarCombobox("Window Type", CVAR_TRACKER_CHECK("WindowType"), windowType, - UIWidgets::ComboboxOptions().LabelPosition(UIWidgets::LabelPositions::Far).ComponentAlignment(UIWidgets::ComponentAlignments::Right) - .Color(THEME_COLOR).DefaultIndex(TRACKER_WINDOW_WINDOW)); - + UIWidgets::ComboboxOptions() + .LabelPosition(UIWidgets::LabelPositions::Far) + .ComponentAlignment(UIWidgets::ComponentAlignments::Right) + .Color(THEME_COLOR) + .DefaultIndex(TRACKER_WINDOW_WINDOW)); + if (CVarGetInteger(CVAR_TRACKER_CHECK("WindowType"), TRACKER_WINDOW_WINDOW) == TRACKER_WINDOW_FLOATING) { - UIWidgets::CVarCheckbox("Enable Dragging", CVAR_TRACKER_CHECK("Draggable"), UIWidgets::CheckboxOptions().Color(THEME_COLOR)); - UIWidgets::CVarCheckbox("Only enable while paused", CVAR_TRACKER_CHECK("ShowOnlyPaused"), UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CVarCheckbox("Enable Dragging", CVAR_TRACKER_CHECK("Draggable"), + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); + UIWidgets::CVarCheckbox("Only enable while paused", CVAR_TRACKER_CHECK("ShowOnlyPaused"), + UIWidgets::CheckboxOptions().Color(THEME_COLOR)); UIWidgets::CVarCombobox("Display Mode", CVAR_TRACKER_CHECK("DisplayType"), displayType, - UIWidgets::ComboboxOptions().LabelPosition(UIWidgets::LabelPositions::Far).ComponentAlignment(UIWidgets::ComponentAlignments::Right) - .Color(THEME_COLOR).DefaultIndex(0)); - if (CVarGetInteger(CVAR_TRACKER_CHECK("DisplayType"), TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_COMBO_BUTTON) { + UIWidgets::ComboboxOptions() + .LabelPosition(UIWidgets::LabelPositions::Far) + .ComponentAlignment(UIWidgets::ComponentAlignments::Right) + .Color(THEME_COLOR) + .DefaultIndex(0)); + if (CVarGetInteger(CVAR_TRACKER_CHECK("DisplayType"), TRACKER_DISPLAY_ALWAYS) == + TRACKER_DISPLAY_COMBO_BUTTON) { UIWidgets::CVarCombobox("Combo Button 1", CVAR_TRACKER_CHECK("ComboButton1"), buttonStrings, - UIWidgets::ComboboxOptions().LabelPosition(UIWidgets::LabelPositions::Far).ComponentAlignment(UIWidgets::ComponentAlignments::Right) - .Color(THEME_COLOR).DefaultIndex(TRACKER_COMBO_BUTTON_L)); + UIWidgets::ComboboxOptions() + .LabelPosition(UIWidgets::LabelPositions::Far) + .ComponentAlignment(UIWidgets::ComponentAlignments::Right) + .Color(THEME_COLOR) + .DefaultIndex(TRACKER_COMBO_BUTTON_L)); UIWidgets::CVarCombobox("Combo Button 2", CVAR_TRACKER_CHECK("ComboButton2"), buttonStrings, - UIWidgets::ComboboxOptions().LabelPosition(UIWidgets::LabelPositions::Far).ComponentAlignment(UIWidgets::ComponentAlignments::Right) - .Color(THEME_COLOR).DefaultIndex(TRACKER_COMBO_BUTTON_L)); + UIWidgets::ComboboxOptions() + .LabelPosition(UIWidgets::LabelPositions::Far) + .ComponentAlignment(UIWidgets::ComponentAlignments::Right) + .Color(THEME_COLOR) + .DefaultIndex(TRACKER_COMBO_BUTTON_L)); } } - UIWidgets::CVarCheckbox("Vanilla/MQ Dungeon Spoilers", CVAR_TRACKER_CHECK("MQSpoilers"), UIWidgets::CheckboxOptions() - .Tooltip("If enabled, Vanilla/MQ dungeons will show on the tracker immediately. Otherwise, Vanilla/MQ dungeon locations must be unlocked.").Color(THEME_COLOR)); - if (UIWidgets::CVarCheckbox("Hide unshuffled shop item checks", CVAR_TRACKER_CHECK("HideUnshuffledShopChecks"), - UIWidgets::CheckboxOptions().Tooltip("If enabled, will prevent the tracker from displaying slots with non-shop-item shuffles.").Color(THEME_COLOR))) { - hideShopUnshuffledChecks = !hideShopUnshuffledChecks; + UIWidgets::CVarCheckbox("Vanilla/MQ Dungeon Spoilers", CVAR_TRACKER_CHECK("MQSpoilers"), + UIWidgets::CheckboxOptions() + .Tooltip("If enabled, Vanilla/MQ dungeons will show on the tracker immediately. " + "Otherwise, Vanilla/MQ dungeon locations must be unlocked.") + .Color(THEME_COLOR)); + if (UIWidgets::CVarCheckbox( + "Hide unshuffled shop item checks", CVAR_TRACKER_CHECK("HideUnshuffledShopChecks"), + UIWidgets::CheckboxOptions() + .Tooltip("If enabled, will prevent the tracker from displaying slots with non-shop-item shuffles.") + .Color(THEME_COLOR))) { + hideShopUnshuffledChecks = CVarGetInteger(CVAR_TRACKER_CHECK("HideUnshuffledShopChecks"), 0); UpdateFilters(); } - if (UIWidgets::CVarCheckbox("Always show gold skulltulas", CVAR_TRACKER_CHECK("AlwaysShowGSLocs"), - UIWidgets::CheckboxOptions().Tooltip("If enabled, will show GS locations in the tracker regardless of tokensanity settings.").Color(THEME_COLOR))) { + if (UIWidgets::CVarCheckbox( + "Always show gold skulltulas", CVAR_TRACKER_CHECK("AlwaysShowGSLocs"), + UIWidgets::CheckboxOptions() + .Tooltip("If enabled, will show GS locations in the tracker regardless of tokensanity settings.") + .Color(THEME_COLOR))) { alwaysShowGS = !alwaysShowGS; UpdateFilters(); } UIWidgets::CVarCheckbox("Show Logic", CVAR_TRACKER_CHECK("ShowLogic"), - UIWidgets::CheckboxOptions().Tooltip("If enabled, will show a check's logic when hovering over it.").Color(THEME_COLOR)); + UIWidgets::CheckboxOptions() + .Tooltip("If enabled, will show a check's logic when hovering over it.") + .Color(THEME_COLOR)); + if (UIWidgets::CVarCheckbox("Enable Available Checks", CVAR_TRACKER_CHECK("EnableAvailableChecks"), + UIWidgets::CheckboxOptions() + .Tooltip("If enabled, will show the checks that are available to be collected " + "with your current progress.") + .Color(THEME_COLOR))) { + enableAvailableChecks = CVarGetInteger(CVAR_TRACKER_CHECK("EnableAvailableChecks"), 0); + RecalculateAvailableChecks(); + } // Filtering settings UIWidgets::PaddedSeparator(); - UIWidgets::CVarCheckbox("Filter Empty Areas", CVAR_TRACKER_CHECK("HideFilteredAreas"), - UIWidgets::CheckboxOptions().Tooltip("If enabled, will hide area headers that have no locations matching filter").Color(THEME_COLOR).DefaultValue(true)); + UIWidgets::CVarCheckbox( + "Filter Empty Areas", CVAR_TRACKER_CHECK("HideFilteredAreas"), + UIWidgets::CheckboxOptions() + .Tooltip("If enabled, will hide area headers that have no locations matching filter") + .Color(THEME_COLOR) + .DefaultValue(true)); ImGui::TableNextColumn(); - CheckTracker::ImGuiDrawTwoColorPickerSection("Area Incomplete", CVAR_TRACKER_CHECK("AreaIncomplete.MainColor"), CVAR_TRACKER_CHECK("AreaIncomplete.ExtraColor"), Color_Area_Incomplete_Main, Color_Area_Incomplete_Extra, Color_Main_Default, Color_Area_Incomplete_Extra_Default, CVAR_TRACKER_CHECK("AreaIncomplete.Hide"), "", THEME_COLOR); - CheckTracker::ImGuiDrawTwoColorPickerSection("Area Complete", CVAR_TRACKER_CHECK("AreaComplete.MainColor"), CVAR_TRACKER_CHECK("AreaComplete.ExtraColor"), Color_Area_Complete_Main, Color_Area_Complete_Extra, Color_Main_Default, Color_Area_Complete_Extra_Default, CVAR_TRACKER_CHECK("AreaComplete.Hide"), "", THEME_COLOR); - CheckTracker::ImGuiDrawTwoColorPickerSection("Unchecked", CVAR_TRACKER_CHECK("Unchecked.MainColor"), CVAR_TRACKER_CHECK("Unchecked.ExtraColor"), Color_Unchecked_Main, Color_Unchecked_Extra, Color_Main_Default, Color_Unchecked_Extra_Default, CVAR_TRACKER_CHECK("Unchecked.Hide"), "Checks you have not interacted with at all.", THEME_COLOR); - CheckTracker::ImGuiDrawTwoColorPickerSection("Skipped", CVAR_TRACKER_CHECK("Skipped.MainColor"), CVAR_TRACKER_CHECK("Skipped.ExtraColor"), Color_Skipped_Main, Color_Skipped_Extra, Color_Main_Default, Color_Skipped_Extra_Default, CVAR_TRACKER_CHECK("Skipped.Hide"), "", THEME_COLOR); - CheckTracker::ImGuiDrawTwoColorPickerSection("Seen", CVAR_TRACKER_CHECK("Seen.MainColor"), CVAR_TRACKER_CHECK("Seen.ExtraColor"), Color_Seen_Main, Color_Seen_Extra, Color_Main_Default, Color_Seen_Extra_Default, CVAR_TRACKER_CHECK("Seen.Hide"), "Used for shops. Shows item names for shop slots when walking in, and prices when highlighting them in buy mode.", THEME_COLOR); - CheckTracker::ImGuiDrawTwoColorPickerSection("Scummed", CVAR_TRACKER_CHECK("Scummed.MainColor"), CVAR_TRACKER_CHECK("Scummed.ExtraColor"), Color_Scummed_Main, Color_Scummed_Extra, Color_Main_Default, Color_Scummed_Extra_Default, CVAR_TRACKER_CHECK("Scummed.Hide"), "Checks you collect, but then reload before saving so you no longer have them.", THEME_COLOR); - //CheckTracker::ImGuiDrawTwoColorPickerSection("Hinted (WIP)", CVAR_TRACKER_CHECK("Hinted.MainColor"), CVAR_TRACKER_CHECK("Hinted.ExtraColor"), Color_Hinted_Main, Color_Hinted_Extra, Color_Main_Default, Color_Hinted_Extra_Default, CVAR_TRACKER_CHECK("Hinted.Hide"), "", THEME_COLOR); - CheckTracker::ImGuiDrawTwoColorPickerSection("Collected", CVAR_TRACKER_CHECK("Collected.MainColor"), CVAR_TRACKER_CHECK("Collected.ExtraColor"), Color_Collected_Main, Color_Collected_Extra, Color_Main_Default, Color_Collected_Extra_Default, CVAR_TRACKER_CHECK("Collected.Hide"), "Checks you have collected without saving or reloading yet.", THEME_COLOR); - CheckTracker::ImGuiDrawTwoColorPickerSection("Saved", CVAR_TRACKER_CHECK("Saved.MainColor"), CVAR_TRACKER_CHECK("Saved.ExtraColor"), Color_Saved_Main, Color_Saved_Extra, Color_Main_Default, Color_Saved_Extra_Default, CVAR_TRACKER_CHECK("Saved.Hide"), "Checks that you saved the game while having collected.", THEME_COLOR); + CheckTracker::ImGuiDrawTwoColorPickerSection("Area Incomplete", CVAR_TRACKER_CHECK("AreaIncomplete.MainColor"), + CVAR_TRACKER_CHECK("AreaIncomplete.ExtraColor"), + Color_Area_Incomplete_Main, Color_Area_Incomplete_Extra, + Color_Main_Default, Color_Area_Incomplete_Extra_Default, + CVAR_TRACKER_CHECK("AreaIncomplete.Hide"), "", THEME_COLOR); + CheckTracker::ImGuiDrawTwoColorPickerSection("Area Complete", CVAR_TRACKER_CHECK("AreaComplete.MainColor"), + CVAR_TRACKER_CHECK("AreaComplete.ExtraColor"), + Color_Area_Complete_Main, Color_Area_Complete_Extra, + Color_Main_Default, Color_Area_Complete_Extra_Default, + CVAR_TRACKER_CHECK("AreaComplete.Hide"), "", THEME_COLOR); + CheckTracker::ImGuiDrawTwoColorPickerSection( + "Unchecked", CVAR_TRACKER_CHECK("Unchecked.MainColor"), CVAR_TRACKER_CHECK("Unchecked.ExtraColor"), + Color_Unchecked_Main, Color_Unchecked_Extra, Color_Main_Default, Color_Unchecked_Extra_Default, + CVAR_TRACKER_CHECK("Unchecked.Hide"), "Checks you have not interacted with at all.", THEME_COLOR); + CheckTracker::ImGuiDrawTwoColorPickerSection( + "Skipped", CVAR_TRACKER_CHECK("Skipped.MainColor"), CVAR_TRACKER_CHECK("Skipped.ExtraColor"), + Color_Skipped_Main, Color_Skipped_Extra, Color_Main_Default, Color_Skipped_Extra_Default, + CVAR_TRACKER_CHECK("Skipped.Hide"), "", THEME_COLOR); + CheckTracker::ImGuiDrawTwoColorPickerSection( + "Seen", CVAR_TRACKER_CHECK("Seen.MainColor"), CVAR_TRACKER_CHECK("Seen.ExtraColor"), Color_Seen_Main, + Color_Seen_Extra, Color_Main_Default, Color_Seen_Extra_Default, CVAR_TRACKER_CHECK("Seen.Hide"), + "Used for shops. Shows item names for shop slots when walking in, and prices when highlighting them in buy " + "mode.", + THEME_COLOR); + CheckTracker::ImGuiDrawTwoColorPickerSection( + "Scummed", CVAR_TRACKER_CHECK("Scummed.MainColor"), CVAR_TRACKER_CHECK("Scummed.ExtraColor"), + Color_Scummed_Main, Color_Scummed_Extra, Color_Main_Default, Color_Scummed_Extra_Default, + CVAR_TRACKER_CHECK("Scummed.Hide"), + "Checks you collect, but then reload before saving so you no longer have them.", THEME_COLOR); + // CheckTracker::ImGuiDrawTwoColorPickerSection("Hinted (WIP)", CVAR_TRACKER_CHECK("Hinted.MainColor"), + // CVAR_TRACKER_CHECK("Hinted.ExtraColor"), Color_Hinted_Main, Color_Hinted_Extra, + // Color_Main_Default, Color_Hinted_Extra_Default, CVAR_TRACKER_CHECK("Hinted.Hide"), "", + // THEME_COLOR); + CheckTracker::ImGuiDrawTwoColorPickerSection( + "Collected", CVAR_TRACKER_CHECK("Collected.MainColor"), CVAR_TRACKER_CHECK("Collected.ExtraColor"), + Color_Collected_Main, Color_Collected_Extra, Color_Main_Default, Color_Collected_Extra_Default, + CVAR_TRACKER_CHECK("Collected.Hide"), "Checks you have collected without saving or reloading yet.", + THEME_COLOR); + CheckTracker::ImGuiDrawTwoColorPickerSection( + "Saved", CVAR_TRACKER_CHECK("Saved.MainColor"), CVAR_TRACKER_CHECK("Saved.ExtraColor"), Color_Saved_Main, + Color_Saved_Extra, Color_Main_Default, Color_Saved_Extra_Default, CVAR_TRACKER_CHECK("Saved.Hide"), + "Checks that you saved the game while having collected.", THEME_COLOR); ImGui::PopStyleVar(1); } @@ -1832,9 +2176,7 @@ void CheckTrackerWindow::InitElement() { sectionId = SaveManager::Instance->AddSaveFunction("trackerData", 1, SaveFile, true, SECTION_PARENT_NONE); SaveManager::Instance->AddLoadFunction("trackerData", 1, LoadFile); GameInteractor::Instance->RegisterGameHook(CheckTrackerLoadGame); - GameInteractor::Instance->RegisterGameHook([](uint32_t fileNum) { - Teardown(); - }); + GameInteractor::Instance->RegisterGameHook([](uint32_t fileNum) { Teardown(); }); GameInteractor::Instance->RegisterGameHook(CheckTrackerItemReceive); GameInteractor::Instance->RegisterGameHook(CheckTrackerTransition); GameInteractor::Instance->RegisterGameHook(CheckTrackerShopSlotChange); diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.h b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.h index c5bcaa074..d6fd503b3 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.h +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.h @@ -11,19 +11,19 @@ namespace CheckTracker { class CheckTrackerSettingsWindow : public Ship::GuiWindow { public: using GuiWindow::GuiWindow; - ~CheckTrackerSettingsWindow() {}; + ~CheckTrackerSettingsWindow(){}; protected: - void InitElement() override {}; + void InitElement() override{}; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; class CheckTrackerWindow : public Ship::GuiWindow { public: using GuiWindow::GuiWindow; void Draw() override; - ~CheckTrackerWindow() {}; + ~CheckTrackerWindow(){}; protected: void InitElement() override; @@ -31,18 +31,18 @@ class CheckTrackerWindow : public Ship::GuiWindow { void UpdateElement() override; }; -//Converts an index into a Little Endian bitmask, as follows: -//00: 0000000100000000 -//01: 0000001000000000 +// Converts an index into a Little Endian bitmask, as follows: +// 00: 0000000100000000 +// 01: 0000001000000000 //... -//06: 0100000000000000 -//07: 1000000000000000 -//08: 0000000000000001 -//09: 0000000000000010 +// 06: 0100000000000000 +// 07: 1000000000000000 +// 08: 0000000000000001 +// 09: 0000000000000010 //... -//14: 0000000001000000 -//15: 0000000010000000 -//repeat... +// 14: 0000000001000000 +// 15: 0000000010000000 +// repeat... #define INDEX_TO_16BIT_LITTLE_ENDIAN_BITMASK(idx) (0x8000 >> (7 - (idx % 8) + ((idx % 16) / 8) * 8)) void Teardown(); @@ -61,4 +61,5 @@ void UpdateAllOrdering(); void UpdateAllAreas(); void RecalculateAllAreaTotals(); void SpoilAreaFromCheck(RandomizerCheck rc); +void RecalculateAvailableChecks(); } // namespace CheckTracker diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance.c b/soh/soh/Enhancements/randomizer/randomizer_entrance.c index 26592b0ce..3c7b433af 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance.c +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance.c @@ -1,7 +1,8 @@ /* * Much of the code here was borrowed from https://github.com/gamestabled/OoT3D_Randomizer/blob/main/code/src/entrance.c - * It's been adapted for SoH to use our gPlayState vs their gGlobalContext with slightly different named properties, and our enums for some scenes/entrances. - * + * It's been adapted for SoH to use our gPlayState vs their gGlobalContext with slightly different named properties, and + * our enums for some scenes/entrances. + * * Unlike 3DS rando, we need to be able to support the user loading up vanilla and rando saves, so the logic around * modifying the entrance table requires that we save the original table and reset whenever loading a vanilla save. * A modified dynamicExitList is manually included since we can't read it from addressing like 3ds rando. @@ -18,8 +19,8 @@ extern PlayState* gPlayState; -//Overwrite the dynamic exit for the OGC Fairy Fountain to be 0x3E8 instead -//of 0x340 (0x340 will stay as the exit for the HC Fairy Fountain -> Castle Grounds) +// Overwrite the dynamic exit for the OGC Fairy Fountain to be 0x3E8 instead +// of 0x340 (0x340 will stay as the exit for the HC Fairy Fountain -> Castle Grounds) s16 dynamicExitList[] = { ENTR_DEATH_MOUNTAIN_TRAIL_GREAT_FAIRY_EXIT, ENTR_DEATH_MOUNTAIN_CRATER_GREAT_FAIRY_EXIT, @@ -34,19 +35,23 @@ s16 dynamicExitList[] = { ENTR_MARKET_DAY_OUTSIDE_SHOOTING_GALLERY, ENTR_ZORAS_FOUNTAIN_OUTSIDE_GREAT_FAIRY, ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT, // HC Fairy - ENTR_DESERT_COLOSSUS_GREAT_FAIRY_EXIT + ENTR_DESERT_COLOSSUS_GREAT_FAIRY_EXIT, }; -// Warp Song indices array : 0x53C33C = { ENTR_SACRED_FOREST_MEADOW_WARP_PAD, ENTR_DEATH_MOUNTAIN_CRATER_WARP_PAD, ENTR_LAKE_HYLIA_WARP_PAD, ENTR_DESERT_COLOSSUS_WARP_PAD, ENTR_GRAVEYARD_WARP_PAD, ENTR_TEMPLE_OF_TIME_WARP_PAD } +// Warp Song indices array: +// 0x53C33C = { +// ENTR_SACRED_FOREST_MEADOW_WARP_PAD, ENTR_DEATH_MOUNTAIN_CRATER_WARP_PAD, ENTR_LAKE_HYLIA_WARP_PAD, +// ENTR_DESERT_COLOSSUS_WARP_PAD, ENTR_GRAVEYARD_WARP_PAD, ENTR_TEMPLE_OF_TIME_WARP_PAD +// } // Owl Flights : 0x492064 and 0x492080 -static s16 entranceOverrideTable[ENTRANCE_TABLE_SIZE] = {0}; +static s16 entranceOverrideTable[ENTRANCE_TABLE_SIZE] = { 0 }; // Boss scenes (normalize boss scene range to 0 on lookup) mapped to save/death warp entrance -static s16 bossSceneSaveDeathWarps[SHUFFLEABLE_BOSS_COUNT] = {0}; -static ActorEntry modifiedLinkActorEntry = {0}; +static s16 bossSceneSaveDeathWarps[SHUFFLEABLE_BOSS_COUNT] = { 0 }; +static ActorEntry modifiedLinkActorEntry = { 0 }; -EntranceInfo originalEntranceTable[ENTRANCE_TABLE_SIZE] = {0}; +EntranceInfo originalEntranceTable[ENTRANCE_TABLE_SIZE] = { 0 }; typedef struct { s16 entryway; @@ -59,6 +64,7 @@ typedef struct { } DungeonEntranceInfo; static DungeonEntranceInfo dungeons[] = { + // clang-format off //entryway exit, boss, reverse, bluewarp, dungeon scene, boss scene { ENTR_DEKU_TREE_ENTRANCE, ENTR_KOKIRI_FOREST_OUTSIDE_DEKU_TREE, ENTR_DEKU_TREE_BOSS_ENTRANCE, ENTR_DEKU_TREE_BOSS_DOOR, ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP, SCENE_DEKU_TREE, SCENE_DEKU_TREE_BOSS }, { ENTR_DODONGOS_CAVERN_ENTRANCE, ENTR_DEATH_MOUNTAIN_TRAIL_OUTSIDE_DODONGOS_CAVERN, ENTR_DODONGOS_CAVERN_BOSS_ENTRANCE, ENTR_DODONGOS_CAVERN_BOSS_DOOR, ENTR_DEATH_MOUNTAIN_TRAIL_DODONGO_BLUE_WARP, SCENE_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN_BOSS }, @@ -68,6 +74,8 @@ static DungeonEntranceInfo dungeons[] = { { ENTR_WATER_TEMPLE_ENTRANCE, ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE, ENTR_WATER_TEMPLE_BOSS_ENTRANCE, ENTR_WATER_TEMPLE_BOSS_DOOR, ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP, SCENE_WATER_TEMPLE, SCENE_WATER_TEMPLE_BOSS }, { ENTR_SPIRIT_TEMPLE_ENTRANCE, ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, ENTR_SPIRIT_TEMPLE_BOSS_ENTRANCE, ENTR_SPIRIT_TEMPLE_BOSS_DOOR, ENTR_DESERT_COLOSSUS_SPIRIT_TEMPLE_BLUE_WARP, SCENE_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE_BOSS }, { ENTR_SHADOW_TEMPLE_ENTRANCE, ENTR_GRAVEYARD_OUTSIDE_TEMPLE, ENTR_SHADOW_TEMPLE_BOSS_ENTRANCE, ENTR_SHADOW_TEMPLE_BOSS_DOOR, ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP, SCENE_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE_BOSS }, + + // clang-format on }; static s8 hasCopiedEntranceTable = 0; @@ -81,16 +89,16 @@ u8 Entrance_EntranceIsNull(EntranceOverride* entranceOverride) { } static void Entrance_SeparateOGCFairyFountainExit(void) { - //Overwrite unused entrance 0x03E8 (ENTR_POTION_SHOP_KAKARIKO_1) with values from 0x0340 (ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT) to use it as the - //exit from OGC Great Fairy Fountain -> Castle Grounds + // Overwrite unused entrance 0x03E8 (ENTR_POTION_SHOP_KAKARIKO_1) with values from 0x0340 + // (ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT) to use it as the exit from OGC Great Fairy Fountain -> Castle Grounds for (size_t i = 0; i < 4; ++i) { gEntranceTable[ENTR_POTION_SHOP_KAKARIKO_1 + i] = gEntranceTable[ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT + i]; } } static void Entrance_SeparateAdultSpawnAndPrelude() { - // Overwrite unused entrance 0x0282 (ENTR_HYRULE_FIELD_10) with values from 0x05F4 (ENTR_TEMPLE_OF_TIME_WARP_PAD) to use it as the - // Adult Spawn index and separate it from Prelude of Light + // Overwrite unused entrance 0x0282 (ENTR_HYRULE_FIELD_10) with values from 0x05F4 (ENTR_TEMPLE_OF_TIME_WARP_PAD) to + // use it as the Adult Spawn index and separate it from Prelude of Light for (size_t i = 0; i < 4; ++i) { gEntranceTable[ENTR_HYRULE_FIELD_10 + i] = gEntranceTable[ENTR_TEMPLE_OF_TIME_WARP_PAD + i]; } @@ -101,10 +109,12 @@ static void Entrance_ReplaceChildTempleWarps() { if (Randomizer_GetSettingValue(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF || Randomizer_GetSettingValue(RSK_SHUFFLE_BOSS_ENTRANCES) != RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF) { // Forest Temple - gEntranceTable[ENTR_SACRED_FOREST_MEADOW_FOREST_TEMPLE_BLUE_WARP] = gEntranceTable[ENTR_SACRED_FOREST_MEADOW_WARP_PAD]; + gEntranceTable[ENTR_SACRED_FOREST_MEADOW_FOREST_TEMPLE_BLUE_WARP] = + gEntranceTable[ENTR_SACRED_FOREST_MEADOW_WARP_PAD]; gEntranceTable[ENTR_SACRED_FOREST_MEADOW_3_1] = gEntranceTable[ENTR_SACRED_FOREST_MEADOW_2_1]; // Fire Temple - gEntranceTable[ENTR_DEATH_MOUNTAIN_CRATER_FIRE_TEMPLE_BLUE_WARP] = gEntranceTable[ENTR_DEATH_MOUNTAIN_CRATER_WARP_PAD]; + gEntranceTable[ENTR_DEATH_MOUNTAIN_CRATER_FIRE_TEMPLE_BLUE_WARP] = + gEntranceTable[ENTR_DEATH_MOUNTAIN_CRATER_WARP_PAD]; gEntranceTable[ENTR_DEATH_MOUNTAIN_CRATER_5_1] = gEntranceTable[ENTR_DEATH_MOUNTAIN_CRATER_4_1]; // Water Temple gEntranceTable[ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP] = gEntranceTable[ENTR_LAKE_HYLIA_WARP_PAD]; @@ -142,7 +152,8 @@ void Entrance_Init(void) { if (Randomizer_GetSettingValue(RSK_SKIP_CHILD_STEALTH)) { gEntranceTable[ENTR_CASTLE_COURTYARD_GUARDS_DAY_0].scene = SCENE_CASTLE_COURTYARD_ZELDA; gEntranceTable[ENTR_CASTLE_COURTYARD_GUARDS_DAY_0].spawn = 0; - gEntranceTable[ENTR_CASTLE_COURTYARD_GUARDS_DAY_0].field = ENTRANCE_INFO_FIELD(false, false, TRANS_TYPE_FADE_WHITE, TRANS_TYPE_FADE_WHITE); + gEntranceTable[ENTR_CASTLE_COURTYARD_GUARDS_DAY_0].field = + ENTRANCE_INFO_FIELD(false, false, TRANS_TYPE_FADE_WHITE, TRANS_TYPE_FADE_WHITE); } // Delete the title card and add a fade in for Hyrule Field from Ocarina of Time cutscene @@ -214,10 +225,10 @@ void Entrance_Init(void) { // Overwrite the indices which we want to shuffle, leaving the rest as they are entranceOverrideTable[originalIndex] = overrideIndex; - //Override both land and water entrances for Hyrule Field -> ZR Front and vice versa - if (originalIndex == ENTR_ZORAS_RIVER_WEST_EXIT) { //Hyrule Field -> ZR Front land entrance + // Override both land and water entrances for Hyrule Field -> ZR Front and vice versa + if (originalIndex == ENTR_ZORAS_RIVER_WEST_EXIT) { // Hyrule Field -> ZR Front land entrance entranceOverrideTable[ENTR_ZORAS_RIVER_3] = overrideIndex; - } else if (originalIndex == ENTR_HYRULE_FIELD_RIVER_EXIT) { //ZR Front -> Hyrule Field land entrance + } else if (originalIndex == ENTR_HYRULE_FIELD_RIVER_EXIT) { // ZR Front -> Hyrule Field land entrance entranceOverrideTable[ENTR_HYRULE_FIELD_14] = overrideIndex; } } @@ -269,7 +280,9 @@ s16 Entrance_PeekNextIndexOverride(int16_t nextEntranceIndex) { s16 Entrance_OverrideNextIndex(s16 nextEntranceIndex) { // Exiting through the crawl space from Hyrule Castle courtyard is the same exit as leaving Ganon's castle // Don't override the entrance if we came from the Castle courtyard (day and night scenes) - if (gPlayState != NULL && (gPlayState->sceneNum == SCENE_CASTLE_COURTYARD_GUARDS_DAY || gPlayState->sceneNum == SCENE_CASTLE_COURTYARD_GUARDS_NIGHT) && + if (gPlayState != NULL && + (gPlayState->sceneNum == SCENE_CASTLE_COURTYARD_GUARDS_DAY || + gPlayState->sceneNum == SCENE_CASTLE_COURTYARD_GUARDS_NIGHT) && nextEntranceIndex == ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT) { return nextEntranceIndex; } @@ -316,37 +329,38 @@ void Entrance_SetGameOverEntrance(void) { if (Randomizer_GetSettingValue(RSK_SHUFFLE_BOSS_ENTRANCES) != RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF && scene >= SCENE_DEKU_TREE_BOSS && scene <= SCENE_SHADOW_TEMPLE_BOSS) { // Normalize boss scene range to 0 on lookup and handle for grotto entrances - gSaveContext.entranceIndex = Grotto_OverrideSpecialEntrance(bossSceneSaveDeathWarps[scene - SCENE_DEKU_TREE_BOSS]); + gSaveContext.entranceIndex = + Grotto_OverrideSpecialEntrance(bossSceneSaveDeathWarps[scene - SCENE_DEKU_TREE_BOSS]); return; } - //Set the current entrance depending on which entrance the player last came through + // Set the current entrance depending on which entrance the player last came through switch (gSaveContext.entranceIndex) { - case ENTR_DEKU_TREE_BOSS_ENTRANCE : //Deku Tree Boss Room + case ENTR_DEKU_TREE_BOSS_ENTRANCE: // Deku Tree Boss Room gSaveContext.entranceIndex = ENTR_DEKU_TREE_ENTRANCE; return; - case ENTR_DODONGOS_CAVERN_BOSS_ENTRANCE : //Dodongos Cavern Boss Room + case ENTR_DODONGOS_CAVERN_BOSS_ENTRANCE: // Dodongos Cavern Boss Room gSaveContext.entranceIndex = ENTR_DODONGOS_CAVERN_ENTRANCE; return; - case ENTR_JABU_JABU_BOSS_ENTRANCE : //Jabu Jabus Belly Boss Room + case ENTR_JABU_JABU_BOSS_ENTRANCE: // Jabu Jabus Belly Boss Room gSaveContext.entranceIndex = ENTR_JABU_JABU_ENTRANCE; return; - case ENTR_FOREST_TEMPLE_BOSS_ENTRANCE : //Forest Temple Boss Room + case ENTR_FOREST_TEMPLE_BOSS_ENTRANCE: // Forest Temple Boss Room gSaveContext.entranceIndex = ENTR_FOREST_TEMPLE_ENTRANCE; return; - case ENTR_FIRE_TEMPLE_BOSS_ENTRANCE : //Fire Temple Boss Room + case ENTR_FIRE_TEMPLE_BOSS_ENTRANCE: // Fire Temple Boss Room gSaveContext.entranceIndex = ENTR_FIRE_TEMPLE_ENTRANCE; return; - case ENTR_WATER_TEMPLE_BOSS_ENTRANCE : //Water Temple Boss Room + case ENTR_WATER_TEMPLE_BOSS_ENTRANCE: // Water Temple Boss Room gSaveContext.entranceIndex = ENTR_WATER_TEMPLE_ENTRANCE; return; - case ENTR_SPIRIT_TEMPLE_BOSS_ENTRANCE : //Spirit Temple Boss Room + case ENTR_SPIRIT_TEMPLE_BOSS_ENTRANCE: // Spirit Temple Boss Room gSaveContext.entranceIndex = ENTR_SPIRIT_TEMPLE_ENTRANCE; return; - case ENTR_SHADOW_TEMPLE_BOSS_ENTRANCE : //Shadow Temple Boss Room + case ENTR_SHADOW_TEMPLE_BOSS_ENTRANCE: // Shadow Temple Boss Room gSaveContext.entranceIndex = ENTR_SHADOW_TEMPLE_ENTRANCE; return; - case ENTR_GANONDORF_BOSS_0 : //Ganondorf Boss Room + case ENTR_GANONDORF_BOSS_0: // Ganondorf Boss Room gSaveContext.entranceIndex = ENTR_GANONS_TOWER_0; // Inside Ganon's Castle -> Ganon's Tower Climb return; } @@ -361,7 +375,8 @@ void Entrance_SetSavewarpEntrance(void) { if (Randomizer_GetSettingValue(RSK_SHUFFLE_BOSS_ENTRANCES) != RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF && scene >= SCENE_DEKU_TREE_BOSS && scene <= SCENE_SHADOW_TEMPLE_BOSS) { // Normalize boss scene range to 0 on lookup and handle for grotto entrances - gSaveContext.entranceIndex = Grotto_OverrideSpecialEntrance(bossSceneSaveDeathWarps[scene - SCENE_DEKU_TREE_BOSS]); + gSaveContext.entranceIndex = + Grotto_OverrideSpecialEntrance(bossSceneSaveDeathWarps[scene - SCENE_DEKU_TREE_BOSS]); return; } @@ -371,15 +386,15 @@ void Entrance_SetSavewarpEntrance(void) { gSaveContext.entranceIndex = ENTR_DODONGOS_CAVERN_ENTRANCE; } else if (scene == SCENE_JABU_JABU || scene == SCENE_JABU_JABU_BOSS) { gSaveContext.entranceIndex = ENTR_JABU_JABU_ENTRANCE; - } else if (scene == SCENE_FOREST_TEMPLE || scene == SCENE_FOREST_TEMPLE_BOSS) { //Forest Temple Boss Room + } else if (scene == SCENE_FOREST_TEMPLE || scene == SCENE_FOREST_TEMPLE_BOSS) { // Forest Temple Boss Room gSaveContext.entranceIndex = ENTR_FOREST_TEMPLE_ENTRANCE; - } else if (scene == SCENE_FIRE_TEMPLE || scene == SCENE_FIRE_TEMPLE_BOSS) { //Fire Temple Boss Room + } else if (scene == SCENE_FIRE_TEMPLE || scene == SCENE_FIRE_TEMPLE_BOSS) { // Fire Temple Boss Room gSaveContext.entranceIndex = ENTR_FIRE_TEMPLE_ENTRANCE; - } else if (scene == SCENE_WATER_TEMPLE || scene == SCENE_WATER_TEMPLE_BOSS) { //Water Temple Boss Room + } else if (scene == SCENE_WATER_TEMPLE || scene == SCENE_WATER_TEMPLE_BOSS) { // Water Temple Boss Room gSaveContext.entranceIndex = ENTR_WATER_TEMPLE_ENTRANCE; - } else if (scene == SCENE_SPIRIT_TEMPLE || scene == SCENE_SPIRIT_TEMPLE_BOSS) { //Spirit Temple Boss Room + } else if (scene == SCENE_SPIRIT_TEMPLE || scene == SCENE_SPIRIT_TEMPLE_BOSS) { // Spirit Temple Boss Room gSaveContext.entranceIndex = ENTR_SPIRIT_TEMPLE_ENTRANCE; - } else if (scene == SCENE_SHADOW_TEMPLE || scene == SCENE_SHADOW_TEMPLE_BOSS) { //Shadow Temple Boss Room + } else if (scene == SCENE_SHADOW_TEMPLE || scene == SCENE_SHADOW_TEMPLE_BOSS) { // Shadow Temple Boss Room gSaveContext.entranceIndex = ENTR_SHADOW_TEMPLE_ENTRANCE; } else if (scene == SCENE_BOTTOM_OF_THE_WELL) { // BOTW gSaveContext.entranceIndex = ENTR_BOTTOM_OF_THE_WELL_ENTRANCE; @@ -389,24 +404,29 @@ void Entrance_SetSavewarpEntrance(void) { gSaveContext.entranceIndex = ENTR_ICE_CAVERN_ENTRANCE; } else if (scene == SCENE_INSIDE_GANONS_CASTLE) { gSaveContext.entranceIndex = ENTR_INSIDE_GANONS_CASTLE_ENTRANCE; - } else if (scene == SCENE_GANONS_TOWER || scene == SCENE_INSIDE_GANONS_CASTLE_COLLAPSE || scene == SCENE_GANONS_TOWER_COLLAPSE_INTERIOR || scene == SCENE_GANON_BOSS || scene == SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR) { - gSaveContext.entranceIndex = ENTR_GANONS_TOWER_0; // Inside Ganon's Castle -> Ganon's Tower Climb - } else if (scene == SCENE_THIEVES_HIDEOUT) { // Theives hideout + } else if (scene == SCENE_GANONS_TOWER || scene == SCENE_INSIDE_GANONS_CASTLE_COLLAPSE || + scene == SCENE_GANONS_TOWER_COLLAPSE_INTERIOR || scene == SCENE_GANON_BOSS || + scene == SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR) { + 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 && 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) { + } 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 // the entrance index is -1 (new save) return; } else if (LINK_IS_CHILD) { gSaveContext.entranceIndex = Entrance_OverrideNextIndex(ENTR_LINKS_HOUSE_CHILD_SPAWN); // Child Overworld Spawn } else { - gSaveContext.entranceIndex = Entrance_OverrideNextIndex(ENTR_HYRULE_FIELD_10); // Adult Overworld Spawn (Normally 0x5F4 (ENTR_TEMPLE_OF_TIME_WARP_PAD), but 0x282 (ENTR_HYRULE_FIELD_10) has been repurposed to differentiate from Prelude which also uses 0x5F4) + gSaveContext.entranceIndex = Entrance_OverrideNextIndex( + ENTR_HYRULE_FIELD_10); // Adult Overworld Spawn (Normally 0x5F4 (ENTR_TEMPLE_OF_TIME_WARP_PAD), but 0x282 + // (ENTR_HYRULE_FIELD_10) has been repurposed to differentiate from Prelude which + // also uses 0x5F4) } } @@ -464,14 +484,14 @@ void Entrance_OverrideBlueWarp(void) { } switch (gSaveContext.entranceIndex) { - case ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP: // Gohma blue warp - case ENTR_DEATH_MOUNTAIN_TRAIL_DODONGO_BLUE_WARP: // KD blue warp - case ENTR_ZORAS_FOUNTAIN_JABU_JABU_BLUE_WARP: // Barinade blue warp + case ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP: // Gohma blue warp + case ENTR_DEATH_MOUNTAIN_TRAIL_DODONGO_BLUE_WARP: // KD blue warp + case ENTR_ZORAS_FOUNTAIN_JABU_JABU_BLUE_WARP: // Barinade blue warp case ENTR_SACRED_FOREST_MEADOW_FOREST_TEMPLE_BLUE_WARP: // Phantom Ganon blue warp - case ENTR_DEATH_MOUNTAIN_CRATER_FIRE_TEMPLE_BLUE_WARP: // Volvagia blue warp - case ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP: // Morpha blue warp - case ENTR_DESERT_COLOSSUS_SPIRIT_TEMPLE_BLUE_WARP: // Bongo-Bongo blue warp - case ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP: // Twinrova blue warp + case ENTR_DEATH_MOUNTAIN_CRATER_FIRE_TEMPLE_BLUE_WARP: // Volvagia blue warp + case ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP: // Morpha blue warp + case ENTR_DESERT_COLOSSUS_SPIRIT_TEMPLE_BLUE_WARP: // Bongo-Bongo blue warp + case ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP: // Twinrova blue warp gSaveContext.entranceIndex = Entrance_OverrideNextIndex(gSaveContext.entranceIndex); return; } @@ -481,16 +501,18 @@ void Entrance_EnableFW(void) { Player* player = GET_PLAYER(gPlayState); // Leave restriction in Tower Collapse Interior, Castle Collapse, Treasure Box Shop, Tower Collapse Exterior, // Grottos area, Fishing Pond, Ganon Battle and for states that disable buttons. - if (!false /* farores wind anywhere */ || - gPlayState->sceneNum == SCENE_GANONS_TOWER_COLLAPSE_INTERIOR || gPlayState->sceneNum == SCENE_INSIDE_GANONS_CASTLE_COLLAPSE || + if (!false /* farores wind anywhere */ || gPlayState->sceneNum == SCENE_GANONS_TOWER_COLLAPSE_INTERIOR || + gPlayState->sceneNum == SCENE_INSIDE_GANONS_CASTLE_COLLAPSE || (gPlayState->sceneNum == SCENE_TREASURE_BOX_SHOP && !false /* shuffled chest mini game */) || gPlayState->sceneNum == SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR || gPlayState->sceneNum == SCENE_GROTTOS || gPlayState->sceneNum == SCENE_FISHING_POND || gPlayState->sceneNum == SCENE_GANON_BOSS || - gSaveContext.eventInf[0] & 0x1 || // Ingo's Minigame state - player->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LADDER | PLAYER_STATE1_ON_HORSE | PLAYER_STATE1_IN_WATER) || // Swimming, riding horse, Down A, hanging from a ledge - player->stateFlags2 & PLAYER_STATE2_CRAWLING // Blank A + gSaveContext.eventInf[0] & 0x1 || // Ingo's Minigame state + player->stateFlags1 & + (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LADDER | PLAYER_STATE1_ON_HORSE | + PLAYER_STATE1_IN_WATER) || // Swimming, riding horse, Down A, hanging from a ledge + player->stateFlags2 & PLAYER_STATE2_CRAWLING // Blank A // Shielding, spinning and getting skull tokens still disable buttons automatically - ) { + ) { return; } @@ -505,8 +527,8 @@ void Entrance_EnableFW(void) { void Entrance_HandleEponaState(void) { s32 entrance = gPlayState->nextEntranceIndex; Player* player = GET_PLAYER(gPlayState); - //If Link is riding Epona but he's about to go through an entrance where she can't spawn, - //unset the Epona flag to avoid Master glitch, and restore temp B. + // If Link is riding Epona but he's about to go through an entrance where she can't spawn, + // unset the Epona flag to avoid Master glitch, and restore temp B. if (Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_ENTRANCES) && (player->stateFlags1 & PLAYER_STATE1_ON_HORSE)) { // Allow Master glitch to be performed on the Thieves Hideout entrance if (entrance == Entrance_GetOverride(ENTR_THIEVES_HIDEOUT_4)) { // Gerudo Fortress -> Theives Hideout @@ -514,27 +536,27 @@ void Entrance_HandleEponaState(void) { } static const s16 validEponaEntrances[] = { - ENTR_LAKE_HYLIA_NORTH_EXIT, // Hyrule Field -> Lake Hylia - ENTR_HYRULE_FIELD_FENCE_EXIT, // Lake Hylia -> Hyrule Field - ENTR_LAKE_HYLIA_OUTSIDE_FISHING_POND, // LH Fishing Hole -> LH Fishing Island - ENTR_LAKE_HYLIA_OUTSIDE_LAB, // LH Lab -> Lake Hylia - ENTR_GERUDO_VALLEY_EAST_EXIT, // Hyrule Field -> Gerudo Valley - ENTR_HYRULE_FIELD_ROCKY_PATH, // Gerudo Valley -> Hyrule Field - ENTR_LON_LON_RANCH_ENTRANCE, // Hyrule Field -> Lon Lon Ranch - ENTR_HYRULE_FIELD_CENTER_EXIT, // Lon Lon Ranch -> Hyrule Field - ENTR_HYRULE_FIELD_ON_BRIDGE_SPAWN, // Market Entrance -> Hyrule Field - ENTR_HYRULE_FIELD_RIVER_EXIT, // ZR Front -> Hyrule Field - ENTR_HYRULE_FIELD_WOODED_EXIT, // LW Bridge -> Hyrule Field - ENTR_GERUDOS_FORTRESS_EAST_EXIT, // GV Fortress Side -> Gerudo Fortress - ENTR_GERUDO_VALLEY_WEST_EXIT, // Gerudo Fortress -> GV Fortress Side - ENTR_GERUDO_VALLEY_OUTSIDE_TENT, // GV Carpenter Tent -> GV Fortress Side - ENTR_LON_LON_RANCH_OUTSIDE_STABLES, // LLR Stables -> Lon Lon Ranch - ENTR_LON_LON_RANCH_OUTSIDE_TOWER, // LLR Tower -> Lon Lon Ranch - ENTR_LON_LON_RANCH_OUTSIDE_TALONS_HOUSE, // LLR Talons House -> Lon Lon Ranch - ENTR_HYRULE_FIELD_11, // LLR Southern Fence Jump - ENTR_HYRULE_FIELD_12, // LLR Western Fence Jump - ENTR_HYRULE_FIELD_13, // LLR Eastern Fence Jump - ENTR_HYRULE_FIELD_15, // LLR Front Gate Jump + ENTR_LAKE_HYLIA_NORTH_EXIT, // Hyrule Field -> Lake Hylia + ENTR_HYRULE_FIELD_FENCE_EXIT, // Lake Hylia -> Hyrule Field + ENTR_LAKE_HYLIA_OUTSIDE_FISHING_POND, // LH Fishing Hole -> LH Fishing Island + ENTR_LAKE_HYLIA_OUTSIDE_LAB, // LH Lab -> Lake Hylia + ENTR_GERUDO_VALLEY_EAST_EXIT, // Hyrule Field -> Gerudo Valley + ENTR_HYRULE_FIELD_ROCKY_PATH, // Gerudo Valley -> Hyrule Field + ENTR_LON_LON_RANCH_ENTRANCE, // Hyrule Field -> Lon Lon Ranch + ENTR_HYRULE_FIELD_CENTER_EXIT, // Lon Lon Ranch -> Hyrule Field + ENTR_HYRULE_FIELD_ON_BRIDGE_SPAWN, // Market Entrance -> Hyrule Field + ENTR_HYRULE_FIELD_RIVER_EXIT, // ZR Front -> Hyrule Field + ENTR_HYRULE_FIELD_WOODED_EXIT, // LW Bridge -> Hyrule Field + ENTR_GERUDOS_FORTRESS_EAST_EXIT, // GV Fortress Side -> Gerudo Fortress + ENTR_GERUDO_VALLEY_WEST_EXIT, // Gerudo Fortress -> GV Fortress Side + ENTR_GERUDO_VALLEY_OUTSIDE_TENT, // GV Carpenter Tent -> GV Fortress Side + ENTR_LON_LON_RANCH_OUTSIDE_STABLES, // LLR Stables -> Lon Lon Ranch + ENTR_LON_LON_RANCH_OUTSIDE_TOWER, // LLR Tower -> Lon Lon Ranch + ENTR_LON_LON_RANCH_OUTSIDE_TALONS_HOUSE, // LLR Talons House -> Lon Lon Ranch + ENTR_HYRULE_FIELD_11, // LLR Southern Fence Jump + ENTR_HYRULE_FIELD_12, // LLR Western Fence Jump + ENTR_HYRULE_FIELD_13, // LLR Eastern Fence Jump + ENTR_HYRULE_FIELD_15, // LLR Front Gate Jump // The following indices currently aren't randomized, but we'll list // them in case they ever are. They're all Theives Hideout -> Gerudo Fortress ENTR_GERUDOS_FORTRESS_1, @@ -577,9 +599,9 @@ void Entrance_OverrideWeatherState() { return; } // Lon Lon Ranch (No Epona) - if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED)){ // if you don't have Epona + if (!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED)) { // if you don't have Epona switch (gSaveContext.entranceIndex) { - case ENTR_LON_LON_RANCH_ENTRANCE: // Lon Lon Ranch from HF + case ENTR_LON_LON_RANCH_ENTRANCE: // Lon Lon Ranch from HF case ENTR_HYRULE_FIELD_CENTER_EXIT: // Hyrule Field from LLR gWeatherMode = 2; return; @@ -588,14 +610,14 @@ void Entrance_OverrideWeatherState() { // Water Temple if (!Flags_GetEventChkInf(EVENTCHKINF_USED_WATER_TEMPLE_BLUE_WARP)) { // have not beaten Water Temple switch (gSaveContext.entranceIndex) { - case ENTR_ZORAS_RIVER_WATERFALL_EXIT: // Zora River from behind waterfall + case ENTR_ZORAS_RIVER_WATERFALL_EXIT: // Zora River from behind waterfall case ENTR_ZORAS_RIVER_UNDERWATER_SHORTCUT: // Zora River from LW water shortcut - case ENTR_LOST_WOODS_UNDERWATER_SHORTCUT: // Lost Woods water shortcut from ZR + case ENTR_LOST_WOODS_UNDERWATER_SHORTCUT: // Lost Woods water shortcut from ZR gWeatherMode = 3; return; } switch (gPlayState->sceneNum) { - case SCENE_ZORAS_DOMAIN: // Zora's Domain + case SCENE_ZORAS_DOMAIN: // Zora's Domain case SCENE_ZORAS_FOUNTAIN: // Zora's Fountain gWeatherMode = 3; return; @@ -603,15 +625,15 @@ void Entrance_OverrideWeatherState() { } // Kakariko Thunderstorm if (((gSaveContext.inventory.questItems & 0x7) == 0x7) && // Have forest, fire, and water medallion - !(gSaveContext.sceneFlags[24].clear & 0x02)) { // have not beaten Bongo Bongo + !(gSaveContext.sceneFlags[24].clear & 0x02)) { // have not beaten Bongo Bongo switch (gPlayState->sceneNum) { case SCENE_KAKARIKO_VILLAGE: // Kakariko - case SCENE_GRAVEYARD: // Graveyard + case SCENE_GRAVEYARD: // Graveyard gPlayState->envCtx.gloomySkyMode = 2; switch (gSaveContext.entranceIndex) { case ENTR_KAKARIKO_VILLAGE_FRONT_GATE: // Kakariko from HF case ENTR_KAKARIKO_VILLAGE_GUARD_GATE: // Kakariko from Death Mountain Trail - case ENTR_GRAVEYARD_OUTSIDE_TEMPLE: // Graveyard from Shadow Temple + case ENTR_GRAVEYARD_OUTSIDE_TEMPLE: // Graveyard from Shadow Temple break; default: gWeatherMode = 5; @@ -620,21 +642,21 @@ void Entrance_OverrideWeatherState() { } } // Death Mountain Cloudy - if (!Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP)) { // have not beaten Fire Temple + if (!Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP)) { // have not beaten Fire Temple if (gPlayState->nextEntranceIndex == ENTR_LOST_WOODS_TUNNEL_SHORTCUT) { // Lost Woods Goron City Shortcut gWeatherMode = 2; return; } switch (gPlayState->sceneNum) { - case SCENE_KAKARIKO_VILLAGE: // Kakariko - case SCENE_GRAVEYARD: // Graveyard - case SCENE_DEATH_MOUNTAIN_TRAIL: // Death Mountain Trail + case SCENE_KAKARIKO_VILLAGE: // Kakariko + case SCENE_GRAVEYARD: // Graveyard + case SCENE_DEATH_MOUNTAIN_TRAIL: // Death Mountain Trail case SCENE_DEATH_MOUNTAIN_CRATER: // Death Mountain Crater if (!gPlayState->envCtx.gloomySkyMode) { gPlayState->envCtx.gloomySkyMode = 1; } switch (gSaveContext.entranceIndex) { - case ENTR_KAKARIKO_VILLAGE_FRONT_GATE: // Kakariko from HF + case ENTR_KAKARIKO_VILLAGE_FRONT_GATE: // Kakariko from HF case ENTR_KAKARIKO_VILLAGE_SOUTHEAST_EXIT: // Kakariko from Graveyard break; default: @@ -646,16 +668,17 @@ void Entrance_OverrideWeatherState() { } // Rectify the "Getting Caught By Gerudo" entrance index if necessary, based on the age and current scene -// In ER, Adult should be placed at the fortress entrance when getting caught in the fortress without a hookshot, instead of being thrown in the valley -// Child should always be thrown in the stream when caught in the valley, and placed at the fortress entrance from valley when caught in the fortress +// In ER, Adult should be placed at the fortress entrance when getting caught in the fortress without a hookshot, +// instead of being thrown in the valley Child should always be thrown in the stream when caught in the valley, and +// placed at the fortress entrance from valley when caught in the fortress void Entrance_OverrideGeurdoGuardCapture(void) { if (LINK_IS_CHILD) { gPlayState->nextEntranceIndex = ENTR_GERUDO_VALLEY_1; // Geurdo Valley thrown out } if ((LINK_IS_CHILD || Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_ENTRANCES)) && - gPlayState->nextEntranceIndex == ENTR_GERUDO_VALLEY_1) { // Geurdo Valley thrown out - if (gPlayState->sceneNum != SCENE_GERUDO_VALLEY) { // Geurdo Valley + gPlayState->nextEntranceIndex == ENTR_GERUDO_VALLEY_1) { // Geurdo Valley thrown out + if (gPlayState->sceneNum != SCENE_GERUDO_VALLEY) { // Geurdo Valley gPlayState->nextEntranceIndex = ENTR_GERUDOS_FORTRESS_EAST_EXIT; // Gerudo Fortress } } diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance.h b/soh/soh/Enhancements/randomizer/randomizer_entrance.h index d2c8c79cb..ca840f396 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance.h +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance.h @@ -3,8 +3,8 @@ #include -//Entrance Table Data: https://wiki.cloudmodding.com/oot/Entrance_Table_(Data) -//Accessed June 2021, published content date at the time was 14 March 2020, at 21:47 +// Entrance Table Data: https://wiki.cloudmodding.com/oot/Entrance_Table_(Data) +// Accessed June 2021, published content date at the time was 14 March 2020, at 21:47 #define ENTRANCE_TABLE_SIZE ENTR_MAX @@ -13,12 +13,12 @@ #define SHUFFLEABLE_BOSS_COUNT 8 #define SAVEFILE_ENTRANCES_DISCOVERED_IDX_COUNT 66 // Max entrance rando index is 0x0820, (2080 / 32 == 65) + 1 -#define SAVEFILE_SCENES_DISCOVERED_IDX_COUNT 4 // Max scene ID is 0x6E, (110 / 32 == 3) + 1 +#define SAVEFILE_SCENES_DISCOVERED_IDX_COUNT 4 // Max scene ID is 0x6E, (110 / 32 == 3) + 1 -#define ENTRANCE_INFO_FIELD(continueBgm, displayTitleCard, endTransType, startTransType) \ - (((continueBgm) ? ENTRANCE_INFO_CONTINUE_BGM_FLAG : 0) | \ - ((displayTitleCard) ? ENTRANCE_INFO_DISPLAY_TITLE_CARD_FLAG : 0) | \ - (((endTransType) << ENTRANCE_INFO_END_TRANS_TYPE_SHIFT) & ENTRANCE_INFO_END_TRANS_TYPE_MASK) | \ +#define ENTRANCE_INFO_FIELD(continueBgm, displayTitleCard, endTransType, startTransType) \ + (((continueBgm) ? ENTRANCE_INFO_CONTINUE_BGM_FLAG : 0) | \ + ((displayTitleCard) ? ENTRANCE_INFO_DISPLAY_TITLE_CARD_FLAG : 0) | \ + (((endTransType) << ENTRANCE_INFO_END_TRANS_TYPE_SHIFT) & ENTRANCE_INFO_END_TRANS_TYPE_MASK) | \ (((startTransType) << ENTRANCE_INFO_START_TRANS_TYPE_SHIFT) & ENTRANCE_INFO_START_TRANS_TYPE_MASK)) typedef struct { diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp index fab17acf1..c8e12f449 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp @@ -27,13 +27,13 @@ extern PlayState* gPlayState; #define COLOR_GREEN IM_COL32(0, 158, 115, 255) #define COLOR_GRAY IM_COL32(155, 155, 155, 255) -EntranceOverride srcListSortedByArea[ENTRANCE_OVERRIDES_MAX_COUNT] = {0}; -EntranceOverride destListSortedByArea[ENTRANCE_OVERRIDES_MAX_COUNT] = {0}; -EntranceOverride srcListSortedByType[ENTRANCE_OVERRIDES_MAX_COUNT] = {0}; -EntranceOverride destListSortedByType[ENTRANCE_OVERRIDES_MAX_COUNT] = {0}; -EntranceTrackingData gEntranceTrackingData = {0}; +EntranceOverride srcListSortedByArea[ENTRANCE_OVERRIDES_MAX_COUNT] = { 0 }; +EntranceOverride destListSortedByArea[ENTRANCE_OVERRIDES_MAX_COUNT] = { 0 }; +EntranceOverride srcListSortedByType[ENTRANCE_OVERRIDES_MAX_COUNT] = { 0 }; +EntranceOverride destListSortedByType[ENTRANCE_OVERRIDES_MAX_COUNT] = { 0 }; +EntranceTrackingData gEntranceTrackingData = { 0 }; -static const EntranceOverride emptyOverride = {0}; +static const EntranceOverride emptyOverride = { 0 }; static s16 lastEntranceIndex = -1; static s16 currentGrottoId = -1; @@ -64,16 +64,13 @@ static std::string spoilerEntranceGroupNames[] = { }; static std::string groupTypeNames[] = { - "One Way", - "Overworld", - "Interior", - "Grotto", - "Dungeon", + "One Way", "Overworld", "Interior", "Grotto", "Dungeon", }; -// Entrance data for the tracker taken from the 3ds rando entrance tracker, and supplemented with scene/spawn info and meta search tags -// ENTR_HYRULE_FIELD_10 and ENTR_POTION_SHOP_KAKARIKO_1 have been repurposed for entrance randomizer +// Entrance data for the tracker taken from the 3ds rando entrance tracker, and supplemented with scene/spawn info and +// meta search tags ENTR_HYRULE_FIELD_10 and ENTR_POTION_SHOP_KAKARIKO_1 have been repurposed for entrance randomizer const EntranceData entranceData[] = { + // clang-format off //index, reverse, scenes (and spawns), source name, destination name, source group, destination group, type, metaTag, oneExit { ENTR_LINKS_HOUSE_CHILD_SPAWN, -1, SINGLE_SCENE_INFO(SCENE_LINKS_HOUSE), "Child Spawn", "Link's House", ENTRANCE_GROUP_ONE_WAY, ENTRANCE_GROUP_ONE_WAY, ENTRANCE_TYPE_ONE_WAY}, { ENTR_HYRULE_FIELD_10, -1, SINGLE_SCENE_INFO(SCENE_TEMPLE_OF_TIME), "Adult Spawn", "Temple of Time", ENTRANCE_GROUP_ONE_WAY, ENTRANCE_GROUP_ONE_WAY, ENTRANCE_TYPE_ONE_WAY}, @@ -118,10 +115,10 @@ const EntranceData entranceData[] = { { ENTR_GORON_CITY_TUNNEL_SHORTCUT, ENTR_LOST_WOODS_TUNNEL_SHORTCUT, SINGLE_SCENE_INFO(SCENE_LOST_WOODS), "Lost Woods Tunnel Shortcut", "Goron City Tunnel Shortcut", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_GORON_CITY, ENTRANCE_TYPE_OVERWORLD, "lw,gc"}, { ENTR_ZORAS_RIVER_UNDERWATER_SHORTCUT, ENTR_LOST_WOODS_UNDERWATER_SHORTCUT, SINGLE_SCENE_INFO(SCENE_LOST_WOODS), "Lost Woods Underwater Shortcut", "Zora's River Underwater Shortcut", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_TYPE_OVERWORLD, "lw"}, { ENTR_SACRED_FOREST_MEADOW_SOUTH_EXIT, ENTR_LOST_WOODS_NORTH_EXIT, SINGLE_SCENE_INFO(SCENE_LOST_WOODS), "Lost Woods North Exit", "Sacred Forest Meadow South Exit", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_OVERWORLD, "lw"}, - { ENTRANCE_GROTTO_LOAD(GROTTO_LW_NEAR_SHORTCUTS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_LW_NEAR_SHORTCUTS_OFFSET), SINGLE_SCENE_INFO(SCENE_LOST_WOODS), "LW Shortcuts Grotto Entry", "LW Tunnel Grotto", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_GROTTO, "lw,chest", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_LW_NEAR_SHORTCUTS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_LW_NEAR_SHORTCUTS_OFFSET), SINGLE_SCENE_INFO(SCENE_LOST_WOODS), "LW Tunnel Grotto Entry", "LW Tunnel Grotto", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_GROTTO, "lw,chest", 1}, { ENTRANCE_GROTTO_LOAD(GROTTO_LW_SCRUBS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_LW_SCRUBS_OFFSET), SINGLE_SCENE_INFO(SCENE_LOST_WOODS), "LW North Grotto Entry", "LW Scrubs Grotto", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_GROTTO, "lw", 1}, { ENTRANCE_GROTTO_LOAD(GROTTO_LW_DEKU_THEATRE_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_LW_DEKU_THEATRE_OFFSET), SINGLE_SCENE_INFO(SCENE_LOST_WOODS), "LW Meadow Grotto Entry", "Deku Theater", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_GROTTO, "lw,mask,stage", 1}, - { ENTRANCE_GROTTO_EXIT(GROTTO_LW_NEAR_SHORTCUTS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_LW_NEAR_SHORTCUTS_OFFSET), {{ SCENE_GROTTOS, 0x00 }}, "LW Tunnel Grotto", "LW Shortcuts Grotto Entry", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_GROTTO, "lw,chest"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_LW_NEAR_SHORTCUTS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_LW_NEAR_SHORTCUTS_OFFSET), {{ SCENE_GROTTOS, 0x00 }}, "LW Tunnel Grotto", "LW Tunnel Grotto Entry", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_GROTTO, "lw,chest"}, { ENTRANCE_GROTTO_EXIT(GROTTO_LW_SCRUBS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_LW_SCRUBS_OFFSET), {{ SCENE_GROTTOS, 0x07 }}, "LW Scrubs Grotto", "LW North Grotto Entry", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_GROTTO, "lw"}, { ENTRANCE_GROTTO_EXIT(GROTTO_LW_DEKU_THEATRE_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_LW_DEKU_THEATRE_OFFSET), {{ SCENE_GROTTOS, 0x0C }}, "Deku Theater", "LW Meadow Grotto Entry", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_GROTTO, "lw,mask,stage"}, @@ -129,11 +126,11 @@ const EntranceData entranceData[] = { { ENTR_LOST_WOODS_NORTH_EXIT, ENTR_SACRED_FOREST_MEADOW_SOUTH_EXIT, SINGLE_SCENE_INFO(SCENE_SACRED_FOREST_MEADOW), "Sacred Forest Meadow South Exit", "Lost Woods North Exit", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_OVERWORLD, "lw"}, { ENTRANCE_GROTTO_LOAD(GROTTO_SFM_WOLFOS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_SFM_WOLFOS_OFFSET), SINGLE_SCENE_INFO(SCENE_SACRED_FOREST_MEADOW), "SFM Wolfos Grotto Entry", "SFM Wolfos Grotto", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_GROTTO, "chest", 1}, { ENTRANCE_GROTTO_LOAD(GROTTO_SFM_FAIRY_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_SFM_FAIRY_OFFSET), SINGLE_SCENE_INFO(SCENE_SACRED_FOREST_MEADOW), "SFM Fairy Grotto Entry", "SFM Fairy Grotto", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_GROTTO, "", 1}, - { ENTRANCE_GROTTO_LOAD(GROTTO_SFM_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_SFM_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_SACRED_FOREST_MEADOW), "SFM Storms Grotto Entry", "SFM Storms Grotto", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_SFM_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_SFM_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_SACRED_FOREST_MEADOW), "SFM Storms Grotto Entry", "SFM Deku Scrub Grotto", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, { ENTR_FOREST_TEMPLE_ENTRANCE, ENTR_SACRED_FOREST_MEADOW_OUTSIDE_TEMPLE, SINGLE_SCENE_INFO(SCENE_SACRED_FOREST_MEADOW), "Sacred Forest Meadow Outside Forest Temple", "Forest Temple Entrance", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_DUNGEON, "", 1}, { ENTRANCE_GROTTO_EXIT(GROTTO_SFM_WOLFOS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_SFM_WOLFOS_OFFSET), {{ SCENE_GROTTOS, 0x08 }}, "SFM Wolfos Grotto", "SFM Wolfos Grotto Entry", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_GROTTO}, { ENTRANCE_GROTTO_EXIT(GROTTO_SFM_FAIRY_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_SFM_FAIRY_OFFSET), {{ SCENE_FAIRYS_FOUNTAIN, 0x00 }}, "SFM Fairy Grotto", "SFM Fairy Grotto Entry", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_GROTTO}, - { ENTRANCE_GROTTO_EXIT(GROTTO_SFM_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_SFM_STORMS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "SFM Storms Grotto", "SFM Storms Grotto Entry", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_GROTTO, "scrubs"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_SFM_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_SFM_STORMS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "SFM Deku Scrub Grotto", "SFM Storms Grotto Entry", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_GROTTO, "scrubs"}, { ENTR_SACRED_FOREST_MEADOW_OUTSIDE_TEMPLE, ENTR_FOREST_TEMPLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Temple Entrance", "Sacred Forest Meadow Outside Forest Temple", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_DUNGEON}, { ENTR_FOREST_TEMPLE_BOSS_ENTRANCE, ENTR_FOREST_TEMPLE_BOSS_DOOR, SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Temple Boss Door", "Phantom Ganon", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_DUNGEON, "", 1}, { ENTR_FOREST_TEMPLE_BOSS_DOOR, ENTR_FOREST_TEMPLE_BOSS_ENTRANCE, SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE_BOSS), "Phantom Ganon", "Forest Temple Boss Door", ENTRANCE_GROUP_SFM, ENTRANCE_GROUP_SFM, ENTRANCE_TYPE_DUNGEON, "", 1}, @@ -232,10 +229,10 @@ const EntranceData entranceData[] = { { ENTR_HYRULE_FIELD_RIVER_EXIT, ENTR_ZORAS_RIVER_WEST_EXIT, SINGLE_SCENE_INFO(SCENE_ZORAS_RIVER), "Zora's River Lower Exit", "Hyrule Field River Exit", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_OVERWORLD, "hf"}, { ENTR_LOST_WOODS_UNDERWATER_SHORTCUT, ENTR_ZORAS_RIVER_UNDERWATER_SHORTCUT, SINGLE_SCENE_INFO(SCENE_ZORAS_RIVER), "Zora's River Underwater Shortcut", "Lost Woods Underwater Shortcut", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_OVERWORLD, "lw"}, { ENTR_ZORAS_DOMAIN_ENTRANCE, ENTR_ZORAS_RIVER_WATERFALL_EXIT, SINGLE_SCENE_INFO(SCENE_ZORAS_RIVER), "Zora's River Waterfall Exit", "Zora's Domain Entrance", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_TYPE_OVERWORLD}, - { ENTRANCE_GROTTO_LOAD(GROTTO_ZR_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_ZR_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_ZORAS_RIVER), "ZR Rock Circle Grotto Entry", "ZR Storms Grotto", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_ZR_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_ZR_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_ZORAS_RIVER), "ZR Rock Circle Grotto Entry", "ZR Deku SCrub Grotto", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, { ENTRANCE_GROTTO_LOAD(GROTTO_ZR_FAIRY_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_ZR_FAIRY_OFFSET), SINGLE_SCENE_INFO(SCENE_ZORAS_RIVER), "ZR Raised Boulder Grotto Entry", "ZR Fairy Grotto", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_TYPE_GROTTO, "", 1}, { ENTRANCE_GROTTO_LOAD(GROTTO_ZR_OPEN_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_ZR_OPEN_OFFSET), SINGLE_SCENE_INFO(SCENE_ZORAS_RIVER), "ZR Raised Open Grotto Entry", "ZR Open Grotto", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_TYPE_GROTTO, "chest", 1}, - { ENTRANCE_GROTTO_EXIT(GROTTO_ZR_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_ZR_STORMS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "ZR Storms Grotto", "ZR Rock Circle Grotto Entry", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_TYPE_GROTTO, "scrubs"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_ZR_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_ZR_STORMS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "ZR Deku Scrub Grotto", "ZR Rock Circle Grotto Entry", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_TYPE_GROTTO, "scrubs"}, { ENTRANCE_GROTTO_EXIT(GROTTO_ZR_FAIRY_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_ZR_FAIRY_OFFSET), {{ SCENE_FAIRYS_FOUNTAIN, 0x00 }}, "ZR Fairy Grotto", "ZR Raised Boulder Grotto Entry", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_TYPE_GROTTO}, { ENTRANCE_GROTTO_EXIT(GROTTO_ZR_OPEN_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_ZR_OPEN_OFFSET), {{ SCENE_GROTTOS, 0x00 }}, "ZR Open Grotto", "ZR Raised Open Grotto Entry", ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_GROUP_ZORAS_RIVER, ENTRANCE_TYPE_GROTTO, "chest"}, @@ -244,9 +241,9 @@ const EntranceData entranceData[] = { { ENTR_LAKE_HYLIA_UNDERWATER_SHORTCUT, ENTR_ZORAS_DOMAIN_UNDERWATER_SHORTCUT, SINGLE_SCENE_INFO(SCENE_ZORAS_DOMAIN), "Zora's Domain Underwater Shortcut", "Lake Hylia Underwater Shortcut", ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_OVERWORLD, "lh"}, { ENTR_ZORAS_FOUNTAIN_TUNNEL_EXIT, ENTR_ZORAS_DOMAIN_KING_ZORA_EXIT, SINGLE_SCENE_INFO(SCENE_ZORAS_DOMAIN), "Zora's Domain Behind King Zora", "Zora's Fountain Tunnel Exit", ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_OVERWORLD}, { ENTR_ZORA_SHOP_0, ENTR_ZORAS_DOMAIN_OUTSIDE_SHOP, SINGLE_SCENE_INFO(SCENE_ZORAS_DOMAIN), "ZD Shop Entry", "Zora Shop", ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_TYPE_INTERIOR, "", 1}, - { ENTRANCE_GROTTO_LOAD(GROTTO_ZD_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_ZD_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_ZORAS_DOMAIN), "ZD Island Grotto Entry", "ZD Storms Grotto", ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_TYPE_GROTTO, "fairy", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_ZD_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_ZD_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_ZORAS_DOMAIN), "ZD Island Grotto Entry", "ZD Fairy Grotto", ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_TYPE_GROTTO, "fairy", 1}, { ENTR_ZORAS_DOMAIN_OUTSIDE_SHOP, ENTR_ZORA_SHOP_0, SINGLE_SCENE_INFO(SCENE_ZORA_SHOP), "Zora Shop", "ZD Shop Entry", ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_TYPE_INTERIOR}, - { ENTRANCE_GROTTO_EXIT(GROTTO_ZD_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_ZD_STORMS_OFFSET), {{ SCENE_FAIRYS_FOUNTAIN, 0x00 }}, "ZD Storms Grotto", "ZD Island Grotto Entry", ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_TYPE_GROTTO, "fairy"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_ZD_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_ZD_STORMS_OFFSET), {{ SCENE_FAIRYS_FOUNTAIN, 0x00 }}, "ZD Fairy Grotto", "ZD Island Grotto Entry", ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_TYPE_GROTTO, "fairy"}, // Zora's Fountain { ENTR_ZORAS_DOMAIN_KING_ZORA_EXIT, ENTR_ZORAS_FOUNTAIN_TUNNEL_EXIT, SINGLE_SCENE_INFO(SCENE_ZORAS_FOUNTAIN), "Zora's Fountain Tunnel Exit", "Zora's Domain Behind King Zora", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_TYPE_OVERWORLD}, @@ -269,7 +266,7 @@ const EntranceData entranceData[] = { { ENTR_LAKE_HYLIA_NORTH_EXIT, ENTR_HYRULE_FIELD_FENCE_EXIT, SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "Hyrule Field Fence Exit", "Lake Hylia North Exit", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_OVERWORLD, "hf,lh"}, { ENTR_GERUDO_VALLEY_EAST_EXIT, ENTR_HYRULE_FIELD_ROCKY_PATH, SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "Hyrule Field Rocky Path", "Gerudo Valley East Exit", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_GERUDO_VALLEY, ENTRANCE_TYPE_OVERWORLD, "hf"}, { ENTRANCE_GROTTO_LOAD(GROTTO_HF_NEAR_MARKET_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HF_NEAR_MARKET_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "HF Near Market Boulder Grotto Entry", "HF Near Market Boulder Grotto", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "chest", 1}, - { ENTRANCE_GROTTO_LOAD(GROTTO_HF_NEAR_KAK_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HF_NEAR_KAK_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "HF Near Stairs Tree Grotto Entry", "HF Near Stairs Tree Grotto", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "spider", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_HF_NEAR_KAK_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HF_NEAR_KAK_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "HF Stone Bridge Tree Grotto Entry", "HF Stone Bridge Tree Grotto", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "spider", 1}, { ENTRANCE_GROTTO_LOAD(GROTTO_HF_TEKTITE_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HF_TEKTITE_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "HF Northwest Tree Grotto Entry", "HF Tektite Grotto", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "water", 1}, { ENTRANCE_GROTTO_LOAD(GROTTO_HF_FAIRY_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HF_FAIRY_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "HF Northwest Boulder Grotto Entry", "HF Fairy Grotto", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "", 1}, { ENTRANCE_GROTTO_LOAD(GROTTO_HF_COW_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HF_COW_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "HF West Rock Circle Grotto Entry", "HF Cow Grotto", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "webbed", 1}, @@ -277,7 +274,7 @@ const EntranceData entranceData[] = { { ENTRANCE_GROTTO_LOAD(GROTTO_HF_INSIDE_FENCE_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HF_INSIDE_FENCE_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "HF Fenced Grotto Entry", "HF Fenced Scrub Grotto", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, { ENTRANCE_GROTTO_LOAD(GROTTO_HF_SOUTHEAST_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HF_SOUTHEAST_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_FIELD), "HF Southeast Boulder Grotto Entry", "HF Southeast Grotto", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "chest", 1}, { ENTRANCE_GROTTO_EXIT(GROTTO_HF_NEAR_MARKET_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_HF_NEAR_MARKET_OFFSET), {{ SCENE_GROTTOS, 0x00 }}, "HF Near Market Boulder Grotto", "HF Near Market Boulder Grotto Entry", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO}, - { ENTRANCE_GROTTO_EXIT(GROTTO_HF_NEAR_KAK_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_HF_NEAR_KAK_OFFSET), {{ SCENE_GROTTOS, 0x01 }}, "HF Near Stairs Tree Grotto", "HF Near Stairs Tree Grotto Entry", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "spider"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_HF_NEAR_KAK_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_HF_NEAR_KAK_OFFSET), {{ SCENE_GROTTOS, 0x01 }}, "HF Stone Bridge Tree Grotto", "HF Stone Bridge Tree Grotto Entry", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "spider"}, { ENTRANCE_GROTTO_EXIT(GROTTO_HF_TEKTITE_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_HF_TEKTITE_OFFSET), {{ SCENE_GROTTOS, 0x0B }}, "HF Tektite Grotto", "HF Northwest Tree Grotto Entry", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "water"}, { ENTRANCE_GROTTO_EXIT(GROTTO_HF_FAIRY_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_HF_FAIRY_OFFSET), {{ SCENE_FAIRYS_FOUNTAIN, 0x00 }}, "HF Fairy Grotto", "HF Northwest Boulder Grotto Entry", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO}, { ENTRANCE_GROTTO_EXIT(GROTTO_HF_COW_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_HF_COW_OFFSET), {{ SCENE_GROTTOS, 0x05 }}, "HF Cow Grotto", "HF West Rock Circle Grotto Entry", ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_GROTTO, "webbed"}, @@ -290,22 +287,22 @@ const EntranceData entranceData[] = { { ENTR_LON_LON_BUILDINGS_TALONS_HOUSE, ENTR_LON_LON_RANCH_OUTSIDE_TALONS_HOUSE, SINGLE_SCENE_INFO(SCENE_LON_LON_RANCH), "LLR Talon's House Entry", "Talon's House", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_INTERIOR, "llr", 1}, { ENTR_STABLE_0, ENTR_LON_LON_RANCH_OUTSIDE_STABLES, SINGLE_SCENE_INFO(SCENE_LON_LON_RANCH), "LLR Stables Entry", "LLR Stables", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_INTERIOR, "cow", 1}, { ENTR_LON_LON_BUILDINGS_TOWER, ENTR_LON_LON_RANCH_OUTSIDE_TOWER, SINGLE_SCENE_INFO(SCENE_LON_LON_RANCH), "LLR Tower Entry", "LLR Tower", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_INTERIOR, "cow", 1}, - { ENTRANCE_GROTTO_LOAD(GROTTO_LLR_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_LLR_OFFSET), SINGLE_SCENE_INFO(SCENE_LON_LON_RANCH), "LLR Grotto Entry", "LLR Scrubs Grotto", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_LLR_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_LLR_OFFSET), SINGLE_SCENE_INFO(SCENE_LON_LON_RANCH), "LLR Grotto Entry", "LLR Deku Scrub Grotto", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, { ENTR_LON_LON_RANCH_OUTSIDE_TALONS_HOUSE, ENTR_LON_LON_BUILDINGS_TALONS_HOUSE, {{ SCENE_LON_LON_BUILDINGS, 0x00 }}, "Talon's House", "LLR Talon's House Entry", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_INTERIOR, "llr"}, { ENTR_LON_LON_RANCH_OUTSIDE_STABLES, ENTR_STABLE_0, SINGLE_SCENE_INFO(SCENE_STABLE), "LLR Stables", "LLR Stables Entry", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_INTERIOR, "cow"}, { ENTR_LON_LON_RANCH_OUTSIDE_TOWER, ENTR_LON_LON_BUILDINGS_TOWER, {{ SCENE_LON_LON_BUILDINGS, 0x01 }}, "LLR Tower", "LLR Tower Entry", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_INTERIOR, "cow"}, - { ENTRANCE_GROTTO_EXIT(GROTTO_LLR_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_LLR_OFFSET), {{ SCENE_GROTTOS, 0x04 }}, "LLR Scrubs Grotto", "LLR Grotto Entry", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_GROTTO, "scrubs"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_LLR_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_LLR_OFFSET), {{ SCENE_GROTTOS, 0x04 }}, "LLR Deku Scrub Grotto", "LLR Grotto Entry", ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_GROUP_LON_LON_RANCH, ENTRANCE_TYPE_GROTTO, "scrubs"}, // Lake Hylia { ENTR_HYRULE_FIELD_FENCE_EXIT, ENTR_LAKE_HYLIA_NORTH_EXIT, SINGLE_SCENE_INFO(SCENE_LAKE_HYLIA), "Lake Hylia North Exit", "Hyrule Field Fence Exit", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_HYRULE_FIELD, ENTRANCE_TYPE_OVERWORLD, "lh"}, { ENTR_ZORAS_DOMAIN_UNDERWATER_SHORTCUT, ENTR_LAKE_HYLIA_UNDERWATER_SHORTCUT, SINGLE_SCENE_INFO(SCENE_LAKE_HYLIA), "Lake Hylia Underwater Shortcut", "Zora's Domain Underwater Shortcut", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_ZORAS_DOMAIN, ENTRANCE_TYPE_OVERWORLD, "lh"}, { ENTR_LAKESIDE_LABORATORY_0, ENTR_LAKE_HYLIA_OUTSIDE_LAB, SINGLE_SCENE_INFO(SCENE_LAKE_HYLIA), "LH Lab Entry", "LH Lab", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_INTERIOR, "lh", 1}, { ENTR_FISHING_POND_0, ENTR_LAKE_HYLIA_OUTSIDE_FISHING_POND, SINGLE_SCENE_INFO(SCENE_LAKE_HYLIA), "LH Fishing Pond Entry", "Fishing Pond", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_INTERIOR, "lh", 1}, - { ENTRANCE_GROTTO_LOAD(GROTTO_LH_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_LH_OFFSET), SINGLE_SCENE_INFO(SCENE_LAKE_HYLIA), "LH Grave Grotto Entry", "LH Grotto", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, + { ENTRANCE_GROTTO_LOAD(GROTTO_LH_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_LH_OFFSET), SINGLE_SCENE_INFO(SCENE_LAKE_HYLIA), "LH Grave Grotto Entry", "LH Deku Scrub Grotto", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_GROTTO, "scrubs", 1}, { ENTR_WATER_TEMPLE_ENTRANCE, ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE, SINGLE_SCENE_INFO(SCENE_LAKE_HYLIA), "Lake Hylia Outside Temple", "Water Temple Entrance", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DUNGEON, "lh", 1}, { ENTR_LAKE_HYLIA_OUTSIDE_LAB, ENTR_LAKESIDE_LABORATORY_0, SINGLE_SCENE_INFO(SCENE_LAKESIDE_LABORATORY), "LH Lab", "LH Lab Entry", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_INTERIOR, "lh"}, { ENTR_LAKE_HYLIA_OUTSIDE_FISHING_POND, ENTR_FISHING_POND_0, SINGLE_SCENE_INFO(SCENE_FISHING_POND), "Fishing Pond", "LH Fishing Pond Entry", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_INTERIOR, "lh"}, - { ENTRANCE_GROTTO_EXIT(GROTTO_LH_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_LH_OFFSET), {{ SCENE_GROTTOS, 0x04 }}, "LH Grotto", "LH Grave Grotto Entry", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_GROTTO, "lh,scrubs"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_LH_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_LH_OFFSET), {{ SCENE_GROTTOS, 0x04 }}, "LH Deku Scrub Grotto", "LH Grave Grotto Entry", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_GROTTO, "lh,scrubs"}, { ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE, ENTR_WATER_TEMPLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Temple Entrance", "Lake Hylia Outside Temple", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DUNGEON, "lh"}, { ENTR_WATER_TEMPLE_BOSS_ENTRANCE, ENTR_WATER_TEMPLE_BOSS_DOOR, SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Temple Boss Door", "Morpha", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DUNGEON, "lh", 1}, { ENTR_WATER_TEMPLE_BOSS_DOOR, ENTR_WATER_TEMPLE_BOSS_ENTRANCE, SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE_BOSS), "Morpha", "Water Temple Boss Door", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DUNGEON, "lh", 1}, @@ -317,15 +314,15 @@ const EntranceData entranceData[] = { { 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}, + { 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 Deku Scrub 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"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_GV_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_GV_STORMS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "GV Deku Scrub 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}, + { 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 Fairy 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, ""}, + { ENTRANCE_GROTTO_EXIT(GROTTO_GF_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_GF_STORMS_OFFSET), {{ SCENE_FAIRYS_FOUNTAIN, 0x00 }}, "GF Fairy 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 @@ -333,42 +330,42 @@ const EntranceData entranceData[] = { { 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_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}, + { ENTRANCE_GROTTO_LOAD(GROTTO_COLOSSUS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_COLOSSUS_OFFSET), SINGLE_SCENE_INFO(SCENE_DESERT_COLOSSUS), "Colossus Grotto Entry", "Colossus Deku Scrub 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"}, + { ENTRANCE_GROTTO_EXIT(GROTTO_COLOSSUS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_COLOSSUS_OFFSET), {{ SCENE_GROTTOS, 0x0A }}, "Colossus Deku Scrub 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"}, - { ENTR_MARKET_SOUTH_EXIT, ENTR_MARKET_ENTRANCE_NORTH_EXIT, {SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_DAY), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_RUINS)}, "Market Entrance North Exit", "Market South Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD}, - { ENTR_MARKET_GUARD_HOUSE_0, ENTR_MARKET_ENTRANCE_OUTSIDE_GUARD_HOUSE, {SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_DAY), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_RUINS)}, "MK Entrance Guard House Entry", "Guard House", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "pots,poe", 1}, - { ENTR_MARKET_ENTRANCE_NORTH_EXIT, ENTR_MARKET_SOUTH_EXIT, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "Market South Exit", "Market Entrance North Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD}, - { ENTR_CASTLE_GROUNDS_SOUTH_EXIT, ENTR_MARKET_DAY_CASTLE_EXIT, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "Market Castle Exit", "Castle Grounds South Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_OVERWORLD, "outside ganon's castle"}, - { ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_GOSSIP_STONE_EXIT, ENTR_MARKET_DAY_TEMPLE_EXIT, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "Market Temple Exit", "Outside Temple of Time", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD}, - { ENTR_SHOOTING_GALLERY_1, ENTR_MARKET_DAY_OUTSIDE_SHOOTING_GALLERY, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Shooting Gallery Entry", "MK Shooting Gallery", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "child", 1}, - { ENTR_BOMBCHU_BOWLING_ALLEY_0, ENTR_MARKET_DAY_OUTSIDE_BOMBCHU_BOWLING, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Bombchu Bowling Entry", "Bombchu Bowling", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, - { ENTR_TREASURE_BOX_SHOP_0, ENTR_MARKET_DAY_OUTSIDE_TREASURE_BOX_SHOP, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Treasure Chest Game Entry", "Treasure Chest Game", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, - { ENTR_BACK_ALLEY_MAN_IN_GREEN_HOUSE, ENTR_BACK_ALLEY_DAY_OUTSIDE_MAN_IN_GREEN_HOUSE, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Man-in-Green House Entry", "Man-in-Green's House", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, - { ENTR_HAPPY_MASK_SHOP_0, ENTR_MARKET_DAY_OUTSIDE_HAPPY_MASK_SHOP, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Mask Shop Entry", "Mask Shop", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, - { ENTR_BAZAAR_1, ENTR_MARKET_DAY_OUTSIDE_BAZAAR, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Bazaar Entry", "MK Bazaar", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "shop", 1}, - { ENTR_POTION_SHOP_MARKET_0, ENTR_MARKET_DAY_OUTSIDE_POTION_SHOP, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Potion Shop Entry", "MK Potion Shop", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, - { ENTR_BOMBCHU_SHOP_1, ENTR_BACK_ALLEY_DAY_OUTSIDE_BOMBCHU_SHOP, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Bombchu Shop Entry", "Bombchu Shop", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, - { ENTR_MARKET_ENTRANCE_OUTSIDE_GUARD_HOUSE, ENTR_MARKET_GUARD_HOUSE_0, {{ SCENE_MARKET_GUARD_HOUSE }}, "Guard House", "MK Entrance Guard House Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "pots,poe"}, - { ENTR_MARKET_DAY_OUTSIDE_SHOOTING_GALLERY, ENTR_SHOOTING_GALLERY_1, {{ SCENE_SHOOTING_GALLERY, 0x01 }}, "MK Shooting Gallery", "MK Shooting Gallery Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, - { ENTR_MARKET_DAY_OUTSIDE_BOMBCHU_BOWLING, ENTR_BOMBCHU_BOWLING_ALLEY_0, SINGLE_SCENE_INFO(SCENE_BOMBCHU_BOWLING_ALLEY), "Bombchu Bowling", "MK Bombchu Bowling Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, - { ENTR_MARKET_DAY_OUTSIDE_TREASURE_BOX_SHOP, ENTR_TREASURE_BOX_SHOP_0, SINGLE_SCENE_INFO(SCENE_TREASURE_BOX_SHOP), "Treasure Chest Game", "MK Treasure Chest Game Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, - { ENTR_BACK_ALLEY_DAY_OUTSIDE_MAN_IN_GREEN_HOUSE, ENTR_BACK_ALLEY_MAN_IN_GREEN_HOUSE, SINGLE_SCENE_INFO(SCENE_BACK_ALLEY_HOUSE), "Man-in-Green's House", "MK Man-in-Green House Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, - { ENTR_MARKET_DAY_OUTSIDE_HAPPY_MASK_SHOP, ENTR_HAPPY_MASK_SHOP_0, SINGLE_SCENE_INFO(SCENE_HAPPY_MASK_SHOP), "Mask Shop", "MK Mask Shop Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, - { ENTR_MARKET_DAY_OUTSIDE_BAZAAR, ENTR_BAZAAR_1, {{ SCENE_BAZAAR, 0x01 }}, "MK Bazaar", "MK Bazaar Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "shop"}, - { ENTR_MARKET_DAY_OUTSIDE_POTION_SHOP, ENTR_POTION_SHOP_MARKET_0, SINGLE_SCENE_INFO(SCENE_POTION_SHOP_MARKET), "MK Potion Shop", "MK Potion Shop Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, - { ENTR_BACK_ALLEY_DAY_OUTSIDE_BOMBCHU_SHOP, ENTR_BOMBCHU_SHOP_1, SINGLE_SCENE_INFO(SCENE_BOMBCHU_SHOP), "Bombchu Shop", "MK Bombchu Shop Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, - { ENTR_MARKET_DAY_TEMPLE_EXIT, ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_GOSSIP_STONE_EXIT, {SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY), SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_NIGHT), SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS)}, "Outside Temple of Time", "Market Temple Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD, "tot"}, - { ENTR_TEMPLE_OF_TIME_ENTRANCE, ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_OUTSIDE_TEMPLE, {SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY), SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_NIGHT), SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS)}, "Outside Temple of Time", "Temple of Time Entrance", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "tot", 1}, - { ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_OUTSIDE_TEMPLE, ENTR_TEMPLE_OF_TIME_ENTRANCE, SINGLE_SCENE_INFO(SCENE_TEMPLE_OF_TIME), "Temple of Time Entrance", "Outside Temple of Time", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "tot"}, + { 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"}, + { ENTR_MARKET_SOUTH_EXIT, ENTR_MARKET_ENTRANCE_NORTH_EXIT, {SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_DAY), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_RUINS)}, "Market Entrance North Exit", "Market South Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD}, + { ENTR_MARKET_GUARD_HOUSE_0, ENTR_MARKET_ENTRANCE_OUTSIDE_GUARD_HOUSE, {SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_DAY), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_ENTRANCE_RUINS)}, "MK Entrance Guard House Entry", "Guard House", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "pots,poe", 1}, + { ENTR_MARKET_ENTRANCE_NORTH_EXIT, ENTR_MARKET_SOUTH_EXIT, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "Market South Exit", "Market Entrance North Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD}, + { ENTR_CASTLE_GROUNDS_SOUTH_EXIT, ENTR_MARKET_DAY_CASTLE_EXIT, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "Market Castle Exit", "Castle Grounds South Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_OVERWORLD, "outside ganon's castle"}, + { ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_GOSSIP_STONE_EXIT, ENTR_MARKET_DAY_TEMPLE_EXIT, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "Market Temple Exit", "ToT Courtyard Gossip Stones Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD}, + { ENTR_SHOOTING_GALLERY_1, ENTR_MARKET_DAY_OUTSIDE_SHOOTING_GALLERY, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Shooting Gallery Entry", "MK Shooting Gallery", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "child", 1}, + { ENTR_BOMBCHU_BOWLING_ALLEY_0, ENTR_MARKET_DAY_OUTSIDE_BOMBCHU_BOWLING, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Bombchu Bowling Entry", "Bombchu Bowling", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, + { ENTR_TREASURE_BOX_SHOP_0, ENTR_MARKET_DAY_OUTSIDE_TREASURE_BOX_SHOP, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Treasure Chest Game Entry", "Treasure Chest Game", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, + { ENTR_BACK_ALLEY_MAN_IN_GREEN_HOUSE, ENTR_BACK_ALLEY_DAY_OUTSIDE_MAN_IN_GREEN_HOUSE, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Man-in-Green House Entry", "Man-in-Green's House", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, + { ENTR_HAPPY_MASK_SHOP_0, ENTR_MARKET_DAY_OUTSIDE_HAPPY_MASK_SHOP, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Mask Shop Entry", "Mask Shop", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, + { ENTR_BAZAAR_1, ENTR_MARKET_DAY_OUTSIDE_BAZAAR, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Bazaar Entry", "MK Bazaar", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "shop", 1}, + { ENTR_POTION_SHOP_MARKET_0, ENTR_MARKET_DAY_OUTSIDE_POTION_SHOP, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Potion Shop Entry", "MK Potion Shop", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, + { ENTR_BOMBCHU_SHOP_1, ENTR_BACK_ALLEY_DAY_OUTSIDE_BOMBCHU_SHOP, {SCENE_NO_SPAWN(SCENE_MARKET_DAY), SCENE_NO_SPAWN(SCENE_MARKET_NIGHT), SCENE_NO_SPAWN(SCENE_MARKET_RUINS), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_DAY), SCENE_NO_SPAWN(SCENE_BACK_ALLEY_NIGHT)}, "MK Bombchu Shop Entry", "Bombchu Shop", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "", 1}, + { ENTR_MARKET_ENTRANCE_OUTSIDE_GUARD_HOUSE, ENTR_MARKET_GUARD_HOUSE_0, {{ SCENE_MARKET_GUARD_HOUSE }}, "Guard House", "MK Entrance Guard House Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "pots,poe"}, + { ENTR_MARKET_DAY_OUTSIDE_SHOOTING_GALLERY, ENTR_SHOOTING_GALLERY_1, {{ SCENE_SHOOTING_GALLERY, 0x01 }}, "MK Shooting Gallery", "MK Shooting Gallery Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, + { ENTR_MARKET_DAY_OUTSIDE_BOMBCHU_BOWLING, ENTR_BOMBCHU_BOWLING_ALLEY_0, SINGLE_SCENE_INFO(SCENE_BOMBCHU_BOWLING_ALLEY), "Bombchu Bowling", "MK Bombchu Bowling Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, + { ENTR_MARKET_DAY_OUTSIDE_TREASURE_BOX_SHOP, ENTR_TREASURE_BOX_SHOP_0, SINGLE_SCENE_INFO(SCENE_TREASURE_BOX_SHOP), "Treasure Chest Game", "MK Treasure Chest Game Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, + { ENTR_BACK_ALLEY_DAY_OUTSIDE_MAN_IN_GREEN_HOUSE, ENTR_BACK_ALLEY_MAN_IN_GREEN_HOUSE, SINGLE_SCENE_INFO(SCENE_BACK_ALLEY_HOUSE), "Man-in-Green's House", "MK Man-in-Green House Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, + { ENTR_MARKET_DAY_OUTSIDE_HAPPY_MASK_SHOP, ENTR_HAPPY_MASK_SHOP_0, SINGLE_SCENE_INFO(SCENE_HAPPY_MASK_SHOP), "Mask Shop", "MK Mask Shop Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, + { ENTR_MARKET_DAY_OUTSIDE_BAZAAR, ENTR_BAZAAR_1, {{ SCENE_BAZAAR, 0x01 }}, "MK Bazaar", "MK Bazaar Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "shop"}, + { ENTR_MARKET_DAY_OUTSIDE_POTION_SHOP, ENTR_POTION_SHOP_MARKET_0, SINGLE_SCENE_INFO(SCENE_POTION_SHOP_MARKET), "MK Potion Shop", "MK Potion Shop Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, + { ENTR_BACK_ALLEY_DAY_OUTSIDE_BOMBCHU_SHOP, ENTR_BOMBCHU_SHOP_1, SINGLE_SCENE_INFO(SCENE_BOMBCHU_SHOP), "Bombchu Shop", "MK Bombchu Shop Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR}, + { ENTR_MARKET_DAY_TEMPLE_EXIT, ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_GOSSIP_STONE_EXIT, {SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY), SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_NIGHT), SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS)}, "ToT Courtyard Gossip Stones Exit", "Market Temple Exit", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD, "tot"}, + { ENTR_TEMPLE_OF_TIME_ENTRANCE, ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_OUTSIDE_TEMPLE, {SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY), SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_NIGHT), SCENE_NO_SPAWN(SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS)}, "ToT Courtyard Temple Entry", "Temple of Time Entrance", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "tot", 1}, + { ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_OUTSIDE_TEMPLE, ENTR_TEMPLE_OF_TIME_ENTRANCE, SINGLE_SCENE_INFO(SCENE_TEMPLE_OF_TIME), "Temple of Time Entrance", "ToT Courtyard Temple Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "tot"}, // Hyrule Castle { ENTR_MARKET_DAY_CASTLE_EXIT, ENTR_CASTLE_GROUNDS_SOUTH_EXIT, {SCENE_NO_SPAWN(SCENE_HYRULE_CASTLE), SCENE_NO_SPAWN(SCENE_OUTSIDE_GANONS_CASTLE)}, "Castle Grounds South Exit", "Market Castle Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD, "outside ganon's castle"}, @@ -380,6 +377,8 @@ const EntranceData entranceData[] = { { ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Rainbow Bridge Exit", "Inside Ganon's Castle Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc", 1}, { ENTR_POTION_SHOP_KAKARIKO_1, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 0x02 }}, "OGC Great Fairy Fountain", "OGC Behind Pillar", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle"}, { ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "Inside Ganon's Castle Entrance", "OGC Rainbow Bridge Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc"} + + // clang-format on }; // Check if Link is in the area and return that scene/entrance for tracking @@ -425,9 +424,11 @@ bool IsEntranceDiscovered(s16 index) { if (!isDiscovered) { // If the pair included one of the hyrule field <-> zora's river entrances, // the randomizer will have also overriden the water-based entrances, so check those too - if ((index == ENTR_ZORAS_RIVER_WEST_EXIT && Entrance_GetIsEntranceDiscovered(ENTR_ZORAS_RIVER_3)) || (index == ENTR_ZORAS_RIVER_3 && Entrance_GetIsEntranceDiscovered(ENTR_ZORAS_RIVER_WEST_EXIT))) { + if ((index == ENTR_ZORAS_RIVER_WEST_EXIT && Entrance_GetIsEntranceDiscovered(ENTR_ZORAS_RIVER_3)) || + (index == ENTR_ZORAS_RIVER_3 && Entrance_GetIsEntranceDiscovered(ENTR_ZORAS_RIVER_WEST_EXIT))) { isDiscovered = true; - } else if ((index == ENTR_HYRULE_FIELD_RIVER_EXIT && Entrance_GetIsEntranceDiscovered(ENTR_HYRULE_FIELD_14)) || (index == ENTR_HYRULE_FIELD_14 && Entrance_GetIsEntranceDiscovered(ENTR_HYRULE_FIELD_RIVER_EXIT))) { + } else if ((index == ENTR_HYRULE_FIELD_RIVER_EXIT && Entrance_GetIsEntranceDiscovered(ENTR_HYRULE_FIELD_14)) || + (index == ENTR_HYRULE_FIELD_14 && Entrance_GetIsEntranceDiscovered(ENTR_HYRULE_FIELD_RIVER_EXIT))) { isDiscovered = true; } } @@ -444,16 +445,18 @@ const EntranceData* GetEntranceData(s16 index) { return nullptr; } -// Used for verifying the names on both sides of entrance pairs match. Keeping for ease of use for further name changes later +// Used for verifying the names on both sides of entrance pairs match. Keeping for ease of use for further name changes +// later // TODO: Figure out how to remove the need for duplicate entrance names so this is no longer necessary void CheckEntranceNames() { - SPDLOG_ERROR("Checking entrance names:"); + SPDLOG_ERROR("Checking entrance names:"); for (size_t i = 0; i < ARRAY_COUNT(entranceData); i++) { auto entrance = &entranceData[i]; auto reverse = GetEntranceData(entrance->reverseIndex); if (entrance != nullptr && reverse != nullptr) { if (entrance->source != reverse->destination) { - SPDLOG_ERROR("{}({}) -> {}({})", entrance->source, entrance->index, reverse->destination, reverse->reverseIndex); + SPDLOG_ERROR("{}({}) -> {}({})", entrance->source, entrance->index, reverse->destination, + reverse->reverseIndex); } } } @@ -587,12 +590,12 @@ void ClearEntranceTrackingData() { currentGrottoId = -1; lastEntranceIndex = -1; lastSceneOrEntranceDetected = -1; - gEntranceTrackingData = {0}; + gEntranceTrackingData = { 0 }; } void InitEntranceTrackingData() { auto entranceCtx = Rando::Context::GetInstance()->GetEntranceShuffler(); - gEntranceTrackingData = {0}; + gEntranceTrackingData = { 0 }; // Check if entrance randomization is disabled if (!OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_ENTRANCES)) { @@ -665,7 +668,8 @@ void EntranceTrackerSettingsWindow::DrawElement() { ImGui::TableNextColumn(); - if (ImGui::BeginTable("entranceTrackerSubSettings", 2, ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_SizingStretchProp)) { + if (ImGui::BeginTable("entranceTrackerSubSettings", 2, + ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_SizingStretchProp)) { ImGui::TableSetupColumn("column 1", ImGuiTableColumnFlags_WidthStretch, 150.0f); ImGui::TableSetupColumn("column 2", ImGuiTableColumnFlags_WidthStretch, 150.0f); @@ -673,26 +677,41 @@ void EntranceTrackerSettingsWindow::DrawElement() { ImGui::Text("Sort By"); UIWidgets::CVarRadioButton("To", CVAR_TRACKER_ENTRANCE("SortBy"), 0, - UIWidgets::RadioButtonsOptions() - .Color(THEME_COLOR).Tooltip("Sort entrances by the original source entrance")); - UIWidgets::CVarRadioButton("From", CVAR_TRACKER_ENTRANCE("SortBy"), 1, - UIWidgets::RadioButtonsOptions() - .Color(THEME_COLOR).Tooltip("Sort entrances by the overrided destination")); + UIWidgets::RadioButtonsOptions() + .Color(THEME_COLOR) + .Tooltip("Sort entrances by the original source entrance")); + UIWidgets::CVarRadioButton( + "From", CVAR_TRACKER_ENTRANCE("SortBy"), 1, + UIWidgets::RadioButtonsOptions().Color(THEME_COLOR).Tooltip("Sort entrances by the overrided destination")); ImGui::Text("List Items"); - UIWidgets::CVarCheckbox("Auto scroll", CVAR_TRACKER_ENTRANCE("AutoScroll"), - UIWidgets::CheckboxOptions().Tooltip("Automatically scroll to the first aviable entrance in the current scene").Color(THEME_COLOR)); + UIWidgets::CVarCheckbox( + "Auto scroll", CVAR_TRACKER_ENTRANCE("AutoScroll"), + UIWidgets::CheckboxOptions() + .Tooltip("Automatically scroll to the first available entrance in the current scene") + .Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Highlight previous", CVAR_TRACKER_ENTRANCE("HighlightPrevious"), - UIWidgets::CheckboxOptions().Tooltip("Highlight the previous entrance that Link came from").Color(THEME_COLOR)); + UIWidgets::CheckboxOptions() + .Tooltip("Highlight the previous entrance that Link came from") + .Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Highlight available", CVAR_TRACKER_ENTRANCE("HighlightAvailable"), - UIWidgets::CheckboxOptions().Tooltip("Highlight available entrances in the current scene").Color(THEME_COLOR)); + UIWidgets::CheckboxOptions() + .Tooltip("Highlight available entrances in the current scene") + .Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Hide undiscovered", CVAR_TRACKER_ENTRANCE("CollapseUndiscovered"), - UIWidgets::CheckboxOptions().Tooltip("Collapse undiscovered entrances towards the bottom of each group").Color(THEME_COLOR)); - bool disableHideReverseEntrances = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_DECOUPLED_ENTRANCES) == RO_GENERIC_ON; - static const char* disableHideReverseEntrancesText = "This option is disabled because \"Decouple Entrances\" is enabled."; + UIWidgets::CheckboxOptions() + .Tooltip("Collapse undiscovered entrances towards the bottom of each group") + .Color(THEME_COLOR)); + bool disableHideReverseEntrances = + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_DECOUPLED_ENTRANCES) == RO_GENERIC_ON; + static const char* disableHideReverseEntrancesText = + "This option is disabled because \"Decouple Entrances\" is enabled."; UIWidgets::CVarCheckbox("Hide reverse", CVAR_TRACKER_ENTRANCE("HideReverseEntrances"), - UIWidgets::CheckboxOptions({ {.disabled = disableHideReverseEntrances, .disabledTooltip = disableHideReverseEntrancesText }}) - .Tooltip("Hide reverse entrance transitions when Decouple Entrances is off").DefaultValue(true).Color(THEME_COLOR)); + UIWidgets::CheckboxOptions({ { .disabled = disableHideReverseEntrances, + .disabledTooltip = disableHideReverseEntrancesText } }) + .Tooltip("Hide reverse entrance transitions when Decouple Entrances is off") + .DefaultValue(true) + .Color(THEME_COLOR)); ImGui::TableNextColumn(); @@ -705,10 +724,13 @@ void EntranceTrackerSettingsWindow::DrawElement() { UIWidgets::RadioButtonsOptions().Color(THEME_COLOR).Tooltip("Group entrances by their entrance type")); ImGui::Text("Spoiler Reveal"); - UIWidgets::CVarCheckbox("Show Source", CVAR_TRACKER_ENTRANCE("ShowFrom"), - UIWidgets::CheckboxOptions().Tooltip("Reveal the sourcefor undiscovered entrances").Color(THEME_COLOR)); + UIWidgets::CVarCheckbox( + "Show Source", CVAR_TRACKER_ENTRANCE("ShowFrom"), + UIWidgets::CheckboxOptions().Tooltip("Reveal the sourcefor undiscovered entrances").Color(THEME_COLOR)); UIWidgets::CVarCheckbox("Show Destination", CVAR_TRACKER_ENTRANCE("ShowTo"), - UIWidgets::CheckboxOptions().Tooltip("Reveal the destination for undiscovered entrances").Color(THEME_COLOR)); + UIWidgets::CheckboxOptions() + .Tooltip("Reveal the destination for undiscovered entrances") + .Color(THEME_COLOR)); ImGui::EndTable(); } @@ -742,18 +764,21 @@ void EntranceTrackerWindow::DrawElement() { static ImGuiTextFilter locationSearch; uint8_t nextTreeState = 0; - if (UIWidgets::Button("Collapse All", UIWidgets::ButtonOptions({{ .tooltip = "Collapse all entrance groups" }}) - .Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { + if (UIWidgets::Button("Collapse All", UIWidgets::ButtonOptions({ { .tooltip = "Collapse all entrance groups" } }) + .Color(THEME_COLOR) + .Size(UIWidgets::Sizes::Inline))) { nextTreeState = 1; } ImGui::SameLine(); - if (UIWidgets::Button("Expand All", UIWidgets::ButtonOptions({{ .tooltip = "Expand all entrance groups" }}) - .Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { + if (UIWidgets::Button("Expand All", UIWidgets::ButtonOptions({ { .tooltip = "Expand all entrance groups" } }) + .Color(THEME_COLOR) + .Size(UIWidgets::Sizes::Inline))) { nextTreeState = 2; } ImGui::SameLine(); - if (UIWidgets::Button("Clear", UIWidgets::ButtonOptions({{ .tooltip = "Clear the search field" }}) - .Color(THEME_COLOR).Size(UIWidgets::Sizes::Inline))) { + if (UIWidgets::Button("Clear", UIWidgets::ButtonOptions({ { .tooltip = "Clear the search field" } }) + .Color(THEME_COLOR) + .Size(UIWidgets::Sizes::Inline))) { locationSearch.Clear(); } @@ -771,7 +796,7 @@ void EntranceTrackerWindow::DrawElement() { size_t groupCount = groupToggle ? ENTRANCE_TYPE_COUNT : SPOILER_ENTRANCE_GROUP_COUNT; auto groupNames = groupToggle ? groupTypeNames : spoilerEntranceGroupNames; - EntranceOverride *entranceList; + EntranceOverride* entranceList; switch (groupType) { case ENTRANCE_SOURCE_AREA: @@ -816,14 +841,17 @@ void EntranceTrackerWindow::DrawElement() { const EntranceData* original = GetEntranceData(entrance.index); const EntranceData* override = GetEntranceData(entrance.override); - // If entrance is a dungeon, grotto, or interior entrance, the transition into that area has oneExit set, which means we can filter the return transitions as redundant - // if entrances are not decoupled, as this is redundant information. Also checks a setting, enabled by default, for hiding them. - // If all of these conditions are met, we skip adding this entrance to any lists. - // However, if entrances are decoupled, then all transitions need to be displayed, so we proceed with the filtering - if ((original->type == ENTRANCE_TYPE_DUNGEON || original->type == ENTRANCE_TYPE_GROTTO || original->type == ENTRANCE_TYPE_INTERIOR) && - (original->oneExit != 1 && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_DECOUPLED_ENTRANCES) == RO_GENERIC_OFF) && + // If entrance is a dungeon, grotto, or interior entrance, the transition into that area has oneExit set, + // which means we can filter the return transitions as redundant if entrances are not decoupled, as this is + // redundant information. Also checks a setting, enabled by default, for hiding them. If all of these + // conditions are met, we skip adding this entrance to any lists. However, if entrances are decoupled, then + // all transitions need to be displayed, so we proceed with the filtering + if ((original->type == ENTRANCE_TYPE_DUNGEON || original->type == ENTRANCE_TYPE_GROTTO || + original->type == ENTRANCE_TYPE_INTERIOR) && + (original->oneExit != 1 && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_DECOUPLED_ENTRANCES) == RO_GENERIC_OFF) && hideReverse == 1) { - continue; + continue; } // RANDOTODO: Only show blue warps if bluewarp shuffle is on @@ -841,18 +869,21 @@ void EntranceTrackerWindow::DrawElement() { const char* rplcSrcAreaName = spoilerEntranceGroupNames[override->srcGroup].c_str(); const char* rplcTypeName = groupTypeNames[override->type].c_str(); - const char* origSrcName = showOriginal ? original->source.c_str() : ""; + const char* origSrcName = showOriginal ? original->source.c_str() : ""; const char* rplcDstName = showOverride ? override->destination.c_str() : ""; // Filter for entrances by group name, type, source/destination names, and meta tags if ((!locationSearch.IsActive() && (showOriginal || showOverride || !collapsUndiscovered)) || - ((showOriginal && (locationSearch.PassFilter(origSrcName) || locationSearch.PassFilter(origSrcAreaName) || - locationSearch.PassFilter(origTypeName) || locationSearch.PassFilter(original->metaTag.c_str()))) || - (showOverride && (locationSearch.PassFilter(rplcDstName) || locationSearch.PassFilter(rplcSrcAreaName) || - locationSearch.PassFilter(rplcTypeName) || locationSearch.PassFilter(override->metaTag.c_str()))))) { + ((showOriginal && + (locationSearch.PassFilter(origSrcName) || locationSearch.PassFilter(origSrcAreaName) || + locationSearch.PassFilter(origTypeName) || locationSearch.PassFilter(original->metaTag.c_str()))) || + (showOverride && + (locationSearch.PassFilter(rplcDstName) || locationSearch.PassFilter(rplcSrcAreaName) || + locationSearch.PassFilter(rplcTypeName) || locationSearch.PassFilter(override->metaTag.c_str()))))) { // Detect if a scroll should happen and remember the scene for that scroll - if (!doAreaScroll && (lastSceneOrEntranceDetected != LinkIsInArea(original) && LinkIsInArea(original) != -1)) { + if (!doAreaScroll && + (lastSceneOrEntranceDetected != LinkIsInArea(original) && LinkIsInArea(original) != -1)) { lastSceneOrEntranceDetected = LinkIsInArea(original); doAreaScroll = true; } @@ -886,16 +917,18 @@ void EntranceTrackerWindow::DrawElement() { const char* unknown = "???"; - const char* origSrcName = showOriginal ? original->source.c_str() : unknown; + const char* origSrcName = showOriginal ? original->source.c_str() : unknown; const char* rplcDstName = showOverride ? override->destination.c_str() : unknown; uint32_t color = isDiscovered ? IM_COL32_WHITE : COLOR_GRAY; // Handle highlighting and auto scroll if ((original->index == lastEntranceIndex || - (override->reverseIndex == lastEntranceIndex && OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_DECOUPLED_ENTRANCES) == RO_GENERIC_OFF)) && - highlightPrevious) { - color = COLOR_ORANGE; + (override->reverseIndex == lastEntranceIndex && + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_DECOUPLED_ENTRANCES) == + RO_GENERIC_OFF)) && + highlightPrevious) { + color = COLOR_ORANGE; } else if (LinkIsInArea(original) != -1) { if (highlightAvailable) { color = COLOR_GREEN; @@ -937,10 +970,8 @@ void EntranceTrackerWindow::DrawElement() { void EntranceTrackerWindow::InitElement() { // Setup hooks for loading and clearing the entrance tracker data - GameInteractor::Instance->RegisterGameHook([](int32_t fileNum) { - InitEntranceTrackingData(); - }); - GameInteractor::Instance->RegisterGameHook([](int32_t fileNum) { - ClearEntranceTrackingData(); - }); + GameInteractor::Instance->RegisterGameHook( + [](int32_t fileNum) { InitEntranceTrackingData(); }); + GameInteractor::Instance->RegisterGameHook( + [](int32_t fileNum) { ClearEntranceTrackingData(); }); } diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h index 0e1271e57..ff9462881 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h @@ -76,8 +76,12 @@ typedef struct { extern EntranceTrackingData gEntranceTrackingData; -#define SINGLE_SCENE_INFO(scene) {{ scene, -1 }} -#define SCENE_NO_SPAWN(scene) { scene, -1 } +#define SINGLE_SCENE_INFO(scene) \ + { \ + { scene, -1 } \ + } +#define SCENE_NO_SPAWN(scene) \ + { scene, -1 } void SetCurrentGrottoIDForTracker(int16_t entranceIndex); void SetLastEntranceOverrideForTracker(int16_t entranceIndex); @@ -92,9 +96,9 @@ class EntranceTrackerSettingsWindow : public Ship::GuiWindow { using GuiWindow::GuiWindow; protected: - void InitElement() override {}; + void InitElement() override{}; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; class EntranceTrackerWindow : public Ship::GuiWindow { @@ -104,5 +108,5 @@ class EntranceTrackerWindow : public Ship::GuiWindow { void InitElement() override; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; diff --git a/soh/soh/Enhancements/randomizer/randomizer_grotto.c b/soh/soh/Enhancements/randomizer/randomizer_grotto.c index 50cb093c8..042efadf4 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_grotto.c +++ b/soh/soh/Enhancements/randomizer/randomizer_grotto.c @@ -12,6 +12,7 @@ extern PlayState* gPlayState; // Information necessary for entering each grotto static const GrottoLoadInfo grottoLoadTable[NUM_GROTTOS] = { + // clang-format off {.entranceIndex = ENTR_GROTTOS_10, .content = 0xFD, .scene = SCENE_DESERT_COLOSSUS}, // Desert Colossus -> Colossus Grotto {.entranceIndex = ENTR_GROTTOS_4, .content = 0xEF, .scene = SCENE_LAKE_HYLIA}, // Lake Hylia -> LH Grotto {.entranceIndex = ENTR_GROTTOS_10, .content = 0xEB, .scene = SCENE_ZORAS_RIVER}, // Zora River -> ZR Storms Grotto @@ -45,10 +46,13 @@ static const GrottoLoadInfo grottoLoadTable[NUM_GROTTOS] = { {.entranceIndex = ENTR_GROTTOS_10, .content = 0xF0, .scene = SCENE_GERUDO_VALLEY}, // GV Fortress Side -> GV Storms Grotto {.entranceIndex = ENTR_GROTTOS_6, .content = 0xF2, .scene = SCENE_GERUDO_VALLEY}, // GV Grotto Ledge -> GV Octorok Grotto {.entranceIndex = ENTR_GROTTOS_12, .content = 0xF3, .scene = SCENE_LOST_WOODS}, // LW Beyond Mido -> Deku Theater + + // clang-format on }; // Information necessary for setting up returning from a grotto static const GrottoReturnInfo grottoReturnTable[NUM_GROTTOS] = { + // clang-format off {.entranceIndex = ENTR_DESERT_COLOSSUS_EAST_EXIT, .room = 0x00, .angle = 0xA71C, .pos = {.x = 62.5078f, .y = -32.0f, .z = -1296.2f}}, // Colossus Grotto -> Desert Colossus {.entranceIndex = ENTR_LAKE_HYLIA_NORTH_EXIT, .room = 0x00, .angle = 0x0000, .pos = {.x = -3039.34f, .y = -1033.0f, .z = 6080.74f}}, // LH Grotto -> Lake Hylia {.entranceIndex = ENTR_ZORAS_RIVER_WEST_EXIT, .room = 0x00, .angle = 0x0000, .pos = {.x = -1630.05f, .y = 100.0f, .z = -132.104f}}, // ZR Storms Grotto -> Zora River @@ -82,10 +86,12 @@ static const GrottoReturnInfo grottoReturnTable[NUM_GROTTOS] = { {.entranceIndex = ENTR_GERUDO_VALLEY_WEST_EXIT, .room = 0x00, .angle = 0x9555, .pos = {.x = -1326.34f, .y = 15.0f, .z = -983.994f}}, // GV Storms Grotto -> GV Fortress Side {.entranceIndex = ENTR_GERUDO_VALLEY_EAST_EXIT, .room = 0x00, .angle = 0x8000, .pos = {.x = 291.513f, .y = -555.0f, .z = 1478.39f}}, // GV Octorok Grotto -> GV Grotto Ledge {.entranceIndex = ENTR_LOST_WOODS_NORTH_EXIT, .room = 0x06, .angle = 0x4000, .pos = {.x = 109.281f, .y = -20.0f, .z = -1601.42f}}, // Deku Theater -> LW Beyond Mido + + // clang-format on }; -static s16 grottoExitList[NUM_GROTTOS] = {0}; -static s16 grottoLoadList[NUM_GROTTOS] = {0}; +static s16 grottoExitList[NUM_GROTTOS] = { 0 }; +static s16 grottoLoadList[NUM_GROTTOS] = { 0 }; static s8 grottoId = 0xFF; static s8 lastEntranceType = NOT_GROTTO; static u8 overridingNextEntrance = false; @@ -137,7 +143,9 @@ static void Grotto_SetupReturnInfo(GrottoReturnInfo grotto, RespawnMode respawnM // This method doesn't change player respawn data, so only use this if you are querying an entrance index. s16 Grotto_GetEntranceValueHandlingGrottoRando(s16 nextEntranceIndex) { // Don't change anything unless grotto shuffle has been enabled - if (!Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) && !Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) && !Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS)) { + if (!Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) && + !Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) && + !Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS)) { return nextEntranceIndex; } @@ -151,7 +159,8 @@ s16 Grotto_GetEntranceValueHandlingGrottoRando(s16 nextEntranceIndex) { s8 tempGrottoId = nextEntranceIndex & 0x00FF; // Grotto Returns - if (nextEntranceIndex >= ENTRANCE_GROTTO_EXIT_START && nextEntranceIndex < ENTRANCE_GROTTO_EXIT_START + NUM_GROTTOS) { + if (nextEntranceIndex >= ENTRANCE_GROTTO_EXIT_START && + nextEntranceIndex < ENTRANCE_GROTTO_EXIT_START + NUM_GROTTOS) { GrottoReturnInfo grotto = grottoReturnTable[tempGrottoId]; // When the nextEntranceIndex is determined by a dynamic exit, @@ -161,11 +170,11 @@ s16 Grotto_GetEntranceValueHandlingGrottoRando(s16 nextEntranceIndex) { nextEntranceIndex = grotto.entranceIndex; } else if (gPlayState == NULL) { // Handle spawn position when loading from a save file nextEntranceIndex = grotto.entranceIndex; - // Otherwise return 0x7FFF (ENTR_RETURN_GROTTO) and let the game handle it + // Otherwise return 0x7FFF (ENTR_RETURN_GROTTO) and let the game handle it } else { nextEntranceIndex = ENTR_RETURN_GROTTO; } - // Grotto Loads + // Grotto Loads } else if (nextEntranceIndex >= ENTRANCE_GROTTO_LOAD_START && nextEntranceIndex < ENTRANCE_GROTTO_EXIT_START) { GrottoLoadInfo grotto = grottoLoadTable[tempGrottoId]; nextEntranceIndex = grotto.entranceIndex; @@ -179,7 +188,9 @@ s16 Grotto_GetEntranceValueHandlingGrottoRando(s16 nextEntranceIndex) { s16 Grotto_OverrideSpecialEntrance(s16 nextEntranceIndex) { // Don't change anything unless grotto shuffle has been enabled - if (!Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) && !Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) && !Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS)) { + if (!Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) && + !Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) && + !Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS)) { return nextEntranceIndex; } @@ -195,7 +206,8 @@ s16 Grotto_OverrideSpecialEntrance(s16 nextEntranceIndex) { grottoId = nextEntranceIndex & 0x00FF; // Grotto Returns - if (nextEntranceIndex >= ENTRANCE_GROTTO_EXIT_START && nextEntranceIndex < ENTRANCE_GROTTO_EXIT_START + NUM_GROTTOS) { + if (nextEntranceIndex >= ENTRANCE_GROTTO_EXIT_START && + nextEntranceIndex < ENTRANCE_GROTTO_EXIT_START + NUM_GROTTOS) { GrottoReturnInfo grotto = grottoReturnTable[grottoId]; Grotto_SetupReturnInfo(grotto, RESPAWN_MODE_RETURN); @@ -213,13 +225,13 @@ s16 Grotto_OverrideSpecialEntrance(s16 nextEntranceIndex) { gSaveContext.respawnFlag = 2; nextEntranceIndex = grotto.entranceIndex; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; - // Otherwise return 0x7FFF (ENTR_RETURN_GROTTO) and let the game handle it + // Otherwise return 0x7FFF (ENTR_RETURN_GROTTO) and let the game handle it } else { nextEntranceIndex = ENTR_RETURN_GROTTO; } lastEntranceType = GROTTO_RETURN; - // Grotto Loads + // Grotto Loads } else if (nextEntranceIndex >= ENTRANCE_GROTTO_LOAD_START && nextEntranceIndex < ENTRANCE_GROTTO_EXIT_START) { // Set the respawn data to load the correct grotto @@ -230,7 +242,7 @@ s16 Grotto_OverrideSpecialEntrance(s16 nextEntranceIndex) { EntranceTracker_SetCurrentGrottoID(grottoId); lastEntranceType = NOT_GROTTO; - // Otherwise just unset the current grotto ID + // Otherwise just unset the current grotto ID } else { grottoId = 0xFF; lastEntranceType = NOT_GROTTO; @@ -245,7 +257,9 @@ s16 Grotto_OverrideSpecialEntrance(s16 nextEntranceIndex) { void Grotto_OverrideActorEntrance(Actor* thisx) { // Vanilla Behavior if there's no possibility of ending up in a grotto randomly - if (!Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) && !Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) && !Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS)) { + if (!Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) && + !Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) && + !Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS)) { return; } @@ -271,7 +285,9 @@ void Grotto_OverrideActorEntrance(Actor* thisx) { // Set necessary flags for when warp songs/overworld spawns are shuffled to grotto return points void Grotto_ForceGrottoReturnOnSpecialEntrance(void) { - if (lastEntranceType == GROTTO_RETURN && (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS))) { + if (lastEntranceType == GROTTO_RETURN && (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || + Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || + Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS))) { gSaveContext.respawnFlag = 2; gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams = 0x04FF; gSaveContext.respawn[RESPAWN_MODE_RETURN].pos = grottoReturnTable[grottoId].pos; @@ -284,11 +300,13 @@ void Grotto_ForceGrottoReturnOnSpecialEntrance(void) { // Set the respawn flag for when we want to return from a grotto entrance // Used for Sun's Song and Game Over, which usually don't restore saved position data void Grotto_ForceGrottoReturn(void) { - if (lastEntranceType == GROTTO_RETURN && (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS))) { + if (lastEntranceType == GROTTO_RETURN && (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || + Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || + Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS))) { gSaveContext.respawnFlag = 2; gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams = 0x0DFF; gSaveContext.respawn[RESPAWN_MODE_RETURN].pos = grottoReturnTable[grottoId].pos; - //Save the current temp flags in the grotto return point, so they'll properly keep their values. + // Save the current temp flags in the grotto return point, so they'll properly keep their values. gSaveContext.respawn[RESPAWN_MODE_RETURN].tempSwchFlags = gPlayState->actorCtx.flags.tempSwch; gSaveContext.respawn[RESPAWN_MODE_RETURN].tempCollectFlags = gPlayState->actorCtx.flags.tempCollect; } @@ -296,7 +314,9 @@ void Grotto_ForceGrottoReturn(void) { // Used for the DMT special voids, which usually don't restore saved position data void Grotto_ForceRegularVoidOut(void) { - if (lastEntranceType == GROTTO_RETURN && (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS))) { + if (lastEntranceType == GROTTO_RETURN && (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || + Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || + Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS))) { gSaveContext.respawn[RESPAWN_MODE_DOWN] = gSaveContext.respawn[RESPAWN_MODE_RETURN]; gSaveContext.respawn[RESPAWN_MODE_DOWN].playerParams = 0x0DFF; gSaveContext.respawn[RESPAWN_MODE_DOWN].pos = grottoReturnTable[grottoId].pos; @@ -307,8 +327,9 @@ void Grotto_ForceRegularVoidOut(void) { // If returning to a FW point saved at a grotto exit, copy the FW data to the Grotto Return Point // so that Sun's Song and Game Over will behave correctly void Grotto_SetupReturnInfoOnFWReturn(void) { - if (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS) && - gSaveContext.fw.playerParams == 0x04FF) { + if (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || + Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || + Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS) && gSaveContext.fw.playerParams == 0x04FF) { gSaveContext.respawn[RESPAWN_MODE_RETURN] = gSaveContext.respawn[RESPAWN_MODE_TOP]; gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams = 0x0DFF; lastEntranceType = GROTTO_RETURN; @@ -339,7 +360,9 @@ s16 Grotto_GetRenamedGrottoIndexFromOriginal(s8 content, s8 scene) { } s8 Grotto_CurrentGrotto() { - if (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS)) { + if (Randomizer_GetSettingValue(RSK_SHUFFLE_GROTTO_ENTRANCES) || + Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) || + Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS)) { return grottoId; } else { s16 entrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex; diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 8c4d05a4f..048fcc86c 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -144,7 +144,6 @@ typedef enum { RAND_INF_GREG_FOUND, - RAND_INF_TOT_MASTER_SWORD, RAND_INF_CHILD_FISHING, @@ -745,7 +744,261 @@ typedef enum { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, - + RAND_INF_GV_FREESTANDING_POH_CRATE, + RAND_INF_GV_NEAR_COW_CRATE, + RAND_INF_GV_CRATE_BRIDGE_1, + RAND_INF_GV_CRATE_BRIDGE_2, + RAND_INF_GV_CRATE_BRIDGE_3, + RAND_INF_GV_CRATE_BRIDGE_4, + RAND_INF_GF_ABOVE_JAIL_CRATE, + RAND_INF_GF_OUTSIDE_CENTER_CRATE_1, + RAND_INF_GF_OUTSIDE_CENTER_CRATE_2, + RAND_INF_GF_OUTSIDE_CENTER_CRATE_3, + RAND_INF_GF_OUTSIDE_CENTER_CRATE_4, + RAND_INF_GF_OUTSIDE_LEFT_CRATE_1, + RAND_INF_GF_OUTSIDE_LEFT_CRATE_2, + RAND_INF_GF_ARCHERY_RANGE_CRATE_1, + RAND_INF_GF_ARCHERY_RANGE_CRATE_2, + RAND_INF_GF_ARCHERY_RANGE_CRATE_3, + RAND_INF_GF_ARCHERY_RANGE_CRATE_4, + RAND_INF_GF_ARCHERY_RANGE_CRATE_5, + RAND_INF_GF_ARCHERY_RANGE_CRATE_6, + RAND_INF_GF_ARCHERY_RANGE_CRATE_7, + RAND_INF_GF_ARCHERY_START_CRATE_1, + RAND_INF_GF_ARCHERY_START_CRATE_2, + RAND_INF_GF_ARCHERY_LEFT_END_CRATE_1, + RAND_INF_GF_ARCHERY_LEFT_END_CRATE_2, + RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE, + RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_1, + RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2, + RAND_INF_GF_KITCHEN_CRATE_1, + RAND_INF_GF_KITCHEN_CRATE_2, + RAND_INF_GF_KITCHEN_CRATE_3, + RAND_INF_GF_KITCHEN_CRATE_4, + RAND_INF_GF_KITCHEN_CRATE_5, + RAND_INF_GF_BREAK_ROOM_CRATE_1, + RAND_INF_GF_BREAK_ROOM_CRATE_2, + RAND_INF_GF_BREAK_ROOM_CRATE_3, + RAND_INF_GF_BREAK_ROOM_CRATE_4, + RAND_INF_GF_NORTH_F1_CARPENTER_CRATE, + RAND_INF_GF_NORTH_F3_CARPENTER_CRATE, + RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_1, + RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2, + RAND_INF_HW_BEFORE_QUICKSAND_CRATE, + RAND_INF_HW_AFTER_QUICKSAND_CRATE_1, + RAND_INF_HW_AFTER_QUICKSAND_CRATE_2, + RAND_INF_HW_AFTER_QUICKSAND_CRATE_3, + RAND_INF_HW_NEAR_COLOSSUS_CRATE, + RAND_INF_MK_NEAR_BAZAAR_CRATE_1, + RAND_INF_MK_NEAR_BAZAAR_CRATE_2, + RAND_INF_MK_SHOOTING_GALLERY_CRATE_1, + RAND_INF_MK_SHOOTING_GALLERY_CRATE_2, + RAND_INF_MK_LOST_DOG_HOUSE_CRATE, + RAND_INF_MK_GUARD_HOUSE_CRATE_1, + RAND_INF_MK_GUARD_HOUSE_CRATE_2, + RAND_INF_MK_GUARD_HOUSE_CRATE_3, + RAND_INF_MK_GUARD_HOUSE_CRATE_4, + RAND_INF_MK_GUARD_HOUSE_CRATE_5, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, + RAND_INF_KAK_NEAR_POTION_SHOP_ADULT_CRATE, + RAND_INF_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, + RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_2, + RAND_INF_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, + RAND_INF_KAK_NEAR_GY_CHILD_CRATE, + RAND_INF_KAK_NEAR_WINDMILL_CHILD_CRATE, + RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE, + RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, + RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE, + RAND_INF_GRAVEYARD_CRATE, + RAND_INF_GC_MAZE_CRATE, + RAND_INF_DMC_CRATE, + RAND_INF_LLR_NEAR_TREE_CRATE, + RAND_INF_LH_LAB_CRATE, + + RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, + RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, + RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, + RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, + + RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, + RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, + RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, + RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, + RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, + RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, + + RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, + RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, + RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, + RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, + RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, + RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, + RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, + RAND_INF_CAUGHT_LOACH, RAND_INF_CAN_SWIM, @@ -1349,7 +1602,358 @@ typedef enum { 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) + // Overworld Grass + RAND_INF_KF_CHILD_GRASS_1, + RAND_INF_KF_CHILD_GRASS_2, + RAND_INF_KF_CHILD_GRASS_3, + RAND_INF_KF_CHILD_GRASS_4, + RAND_INF_KF_CHILD_GRASS_5, + RAND_INF_KF_CHILD_GRASS_6, + RAND_INF_KF_CHILD_GRASS_7, + RAND_INF_KF_CHILD_GRASS_8, + RAND_INF_KF_CHILD_GRASS_9, + RAND_INF_KF_CHILD_GRASS_10, + RAND_INF_KF_CHILD_GRASS_11, + RAND_INF_KF_CHILD_GRASS_12, + RAND_INF_KF_CHILD_GRASS_MAZE_1, + RAND_INF_KF_CHILD_GRASS_MAZE_2, + RAND_INF_KF_CHILD_GRASS_MAZE_3, + RAND_INF_KF_ADULT_GRASS_1, + RAND_INF_KF_ADULT_GRASS_2, + RAND_INF_KF_ADULT_GRASS_3, + RAND_INF_KF_ADULT_GRASS_4, + RAND_INF_KF_ADULT_GRASS_5, + RAND_INF_KF_ADULT_GRASS_6, + RAND_INF_KF_ADULT_GRASS_7, + RAND_INF_KF_ADULT_GRASS_8, + RAND_INF_KF_ADULT_GRASS_9, + RAND_INF_KF_ADULT_GRASS_10, + RAND_INF_KF_ADULT_GRASS_11, + RAND_INF_KF_ADULT_GRASS_12, + RAND_INF_KF_ADULT_GRASS_13, + RAND_INF_KF_ADULT_GRASS_14, + RAND_INF_KF_ADULT_GRASS_15, + RAND_INF_KF_ADULT_GRASS_16, + RAND_INF_KF_ADULT_GRASS_17, + RAND_INF_KF_ADULT_GRASS_18, + RAND_INF_KF_ADULT_GRASS_19, + RAND_INF_KF_ADULT_GRASS_20, + RAND_INF_LW_GRASS_1, + RAND_INF_LW_GRASS_2, + RAND_INF_LW_GRASS_3, + RAND_INF_LW_GRASS_4, + RAND_INF_LW_GRASS_5, + RAND_INF_LW_GRASS_6, + RAND_INF_LW_GRASS_7, + RAND_INF_LW_GRASS_8, + RAND_INF_LW_GRASS_9, + RAND_INF_MARKET_GRASS_1, + RAND_INF_MARKET_GRASS_2, + RAND_INF_MARKET_GRASS_3, + RAND_INF_MARKET_GRASS_4, + RAND_INF_MARKET_GRASS_5, + RAND_INF_MARKET_GRASS_6, + RAND_INF_MARKET_GRASS_7, + RAND_INF_MARKET_GRASS_8, + RAND_INF_HC_GRASS_1, + RAND_INF_HC_GRASS_2, + RAND_INF_KAK_GRASS_1, + RAND_INF_KAK_GRASS_2, + RAND_INF_KAK_GRASS_3, + RAND_INF_KAK_GRASS_4, + RAND_INF_KAK_GRASS_5, + RAND_INF_KAK_GRASS_6, + RAND_INF_KAK_GRASS_7, + RAND_INF_KAK_GRASS_8, + RAND_INF_GY_GRASS_1, + RAND_INF_GY_GRASS_2, + RAND_INF_GY_GRASS_3, + RAND_INF_GY_GRASS_4, + RAND_INF_GY_GRASS_5, + RAND_INF_GY_GRASS_6, + RAND_INF_GY_GRASS_7, + RAND_INF_GY_GRASS_8, + RAND_INF_GY_GRASS_9, + RAND_INF_GY_GRASS_10, + RAND_INF_GY_GRASS_11, + RAND_INF_GY_GRASS_12, + RAND_INF_LH_GRASS_1, + RAND_INF_LH_GRASS_2, + RAND_INF_LH_GRASS_3, + RAND_INF_LH_GRASS_4, + RAND_INF_LH_GRASS_5, + RAND_INF_LH_GRASS_6, + RAND_INF_LH_GRASS_7, + RAND_INF_LH_GRASS_8, + RAND_INF_LH_GRASS_9, + RAND_INF_LH_GRASS_10, + RAND_INF_LH_GRASS_11, + RAND_INF_LH_GRASS_12, + RAND_INF_LH_GRASS_13, + RAND_INF_LH_GRASS_14, + RAND_INF_LH_GRASS_15, + RAND_INF_LH_GRASS_16, + RAND_INF_LH_GRASS_17, + RAND_INF_LH_GRASS_18, + RAND_INF_LH_GRASS_19, + RAND_INF_LH_GRASS_20, + RAND_INF_LH_GRASS_21, + RAND_INF_LH_GRASS_22, + RAND_INF_LH_GRASS_23, + RAND_INF_LH_GRASS_24, + RAND_INF_LH_GRASS_25, + RAND_INF_LH_GRASS_26, + RAND_INF_LH_GRASS_27, + RAND_INF_LH_GRASS_28, + RAND_INF_LH_GRASS_29, + RAND_INF_LH_GRASS_30, + RAND_INF_LH_GRASS_31, + RAND_INF_LH_GRASS_32, + RAND_INF_LH_GRASS_33, + RAND_INF_LH_GRASS_34, + RAND_INF_LH_GRASS_35, + RAND_INF_LH_GRASS_36, + RAND_INF_LH_CHILD_GRASS_1, + RAND_INF_LH_CHILD_GRASS_2, + RAND_INF_LH_CHILD_GRASS_3, + RAND_INF_LH_CHILD_GRASS_4, + RAND_INF_LH_WARP_PAD_GRASS_1, + RAND_INF_LH_WARP_PAD_GRASS_2, + RAND_INF_HF_NEAR_KF_GRASS_1, + RAND_INF_HF_NEAR_KF_GRASS_2, + RAND_INF_HF_NEAR_KF_GRASS_3, + RAND_INF_HF_NEAR_KF_GRASS_4, + RAND_INF_HF_NEAR_KF_GRASS_5, + RAND_INF_HF_NEAR_KF_GRASS_6, + RAND_INF_HF_NEAR_KF_GRASS_7, + RAND_INF_HF_NEAR_KF_GRASS_8, + RAND_INF_HF_NEAR_KF_GRASS_9, + RAND_INF_HF_NEAR_KF_GRASS_10, + RAND_INF_HF_NEAR_KF_GRASS_11, + RAND_INF_HF_NEAR_KF_GRASS_12, + RAND_INF_HF_NEAR_MARKET_GRASS_1, + RAND_INF_HF_NEAR_MARKET_GRASS_2, + RAND_INF_HF_NEAR_MARKET_GRASS_3, + RAND_INF_HF_NEAR_MARKET_GRASS_4, + RAND_INF_HF_NEAR_MARKET_GRASS_5, + RAND_INF_HF_NEAR_MARKET_GRASS_6, + RAND_INF_HF_NEAR_MARKET_GRASS_7, + RAND_INF_HF_NEAR_MARKET_GRASS_8, + RAND_INF_HF_NEAR_MARKET_GRASS_9, + RAND_INF_HF_NEAR_MARKET_GRASS_10, + RAND_INF_HF_NEAR_MARKET_GRASS_11, + RAND_INF_HF_NEAR_MARKET_GRASS_12, + RAND_INF_HF_SOUTH_GRASS_1, + RAND_INF_HF_SOUTH_GRASS_2, + RAND_INF_HF_SOUTH_GRASS_3, + RAND_INF_HF_SOUTH_GRASS_4, + RAND_INF_HF_SOUTH_GRASS_5, + RAND_INF_HF_SOUTH_GRASS_6, + RAND_INF_HF_SOUTH_GRASS_7, + RAND_INF_HF_SOUTH_GRASS_8, + RAND_INF_HF_SOUTH_GRASS_9, + RAND_INF_HF_SOUTH_GRASS_10, + RAND_INF_HF_SOUTH_GRASS_11, + RAND_INF_HF_SOUTH_GRASS_12, + RAND_INF_HF_CENTRAL_GRASS_1, + RAND_INF_HF_CENTRAL_GRASS_2, + RAND_INF_HF_CENTRAL_GRASS_3, + RAND_INF_HF_CENTRAL_GRASS_4, + RAND_INF_HF_CENTRAL_GRASS_5, + RAND_INF_HF_CENTRAL_GRASS_6, + RAND_INF_HF_CENTRAL_GRASS_7, + RAND_INF_HF_CENTRAL_GRASS_8, + RAND_INF_HF_CENTRAL_GRASS_9, + RAND_INF_HF_CENTRAL_GRASS_10, + RAND_INF_HF_CENTRAL_GRASS_11, + RAND_INF_HF_CENTRAL_GRASS_12, + RAND_INF_ZR_GRASS_1, + RAND_INF_ZR_GRASS_2, + RAND_INF_ZR_GRASS_3, + RAND_INF_ZR_GRASS_4, + RAND_INF_ZR_GRASS_5, + RAND_INF_ZR_GRASS_6, + RAND_INF_ZR_GRASS_7, + RAND_INF_ZR_GRASS_8, + RAND_INF_ZR_GRASS_9, + RAND_INF_ZR_GRASS_10, + RAND_INF_ZR_GRASS_11, + RAND_INF_ZR_GRASS_12, + RAND_INF_ZR_NEAR_FREESTANDING_POH_GRASS, + // Grotto Grass + RAND_INF_KF_STORMS_GROTTO_GRASS_1, + RAND_INF_KF_STORMS_GROTTO_GRASS_2, + RAND_INF_KF_STORMS_GROTTO_GRASS_3, + RAND_INF_KF_STORMS_GROTTO_GRASS_4, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, + RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_1, + RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_2, + RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_3, + RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_4, + RAND_INF_HF_OPEN_GROTTO_GRASS_1, + RAND_INF_HF_OPEN_GROTTO_GRASS_2, + RAND_INF_HF_OPEN_GROTTO_GRASS_3, + RAND_INF_HF_OPEN_GROTTO_GRASS_4, + RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_1, + RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_2, + RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_3, + RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_4, + RAND_INF_HF_COW_GROTTO_GRASS_1, + RAND_INF_HF_COW_GROTTO_GRASS_2, + RAND_INF_KAK_OPEN_GROTTO_GRASS_1, + RAND_INF_KAK_OPEN_GROTTO_GRASS_2, + RAND_INF_KAK_OPEN_GROTTO_GRASS_3, + RAND_INF_KAK_OPEN_GROTTO_GRASS_4, + RAND_INF_DMT_STORMS_GROTTO_GRASS_1, + RAND_INF_DMT_STORMS_GROTTO_GRASS_2, + RAND_INF_DMT_STORMS_GROTTO_GRASS_3, + RAND_INF_DMT_STORMS_GROTTO_GRASS_4, + RAND_INF_DMT_COW_GROTTO_GRASS_1, + RAND_INF_DMT_COW_GROTTO_GRASS_2, + RAND_INF_DMC_UPPER_GROTTO_GRASS_1, + RAND_INF_DMC_UPPER_GROTTO_GRASS_2, + RAND_INF_DMC_UPPER_GROTTO_GRASS_3, + RAND_INF_DMC_UPPER_GROTTO_GRASS_4, + RAND_INF_ZR_OPEN_GROTTO_GRASS_1, + RAND_INF_ZR_OPEN_GROTTO_GRASS_2, + RAND_INF_ZR_OPEN_GROTTO_GRASS_3, + RAND_INF_ZR_OPEN_GROTTO_GRASS_4, + // Dungeon Grass + RAND_INF_DEKU_TREE_LOBBY_GRASS_1, + RAND_INF_DEKU_TREE_LOBBY_GRASS_2, + RAND_INF_DEKU_TREE_LOBBY_GRASS_3, + RAND_INF_DEKU_TREE_LOBBY_GRASS_4, + RAND_INF_DEKU_TREE_LOBBY_GRASS_5, + RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_1, + RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_2, + RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_3, + RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_4, + RAND_INF_DEKU_TREE_COMPASS_GRASS_1, + RAND_INF_DEKU_TREE_COMPASS_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, + RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, + RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, + RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_1, + RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_2, + RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_3, + RAND_INF_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, + RAND_INF_DODONGOS_CAVERN_BLADE_GRASS, + RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_GRASS, + RAND_INF_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, + // MQ Dungeon Grass + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_1, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_2, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_3, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_4, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_5, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_6, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_7, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, + RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_1, + RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_2, + RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_3, + RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, + RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, + RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, + RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, + RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, + RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, + RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_GRASS, + RAND_INF_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, + RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, + RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, + RAND_INF_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, + RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, + RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, + RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, + // Shared Dungeon Grass + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_1, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_2, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_3, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_4, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_5, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_6, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_7, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_8, + // End Grass + // 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, } RandomizerInf; diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index 92c7491fc..8d9d2559a 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -43,45 +43,65 @@ bool shouldUpdateVectors = true; std::vector mainWindowItems = {}; std::vector inventoryItems = { - ITEM_TRACKER_ITEM(ITEM_STICK, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_NUT, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_BOMB, 0, DrawItem), - ITEM_TRACKER_ITEM(ITEM_BOW, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_ARROW_FIRE, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_DINS_FIRE, 0, DrawItem), - ITEM_TRACKER_ITEM(ITEM_SLINGSHOT, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_OCARINA_FAIRY, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_BOMBCHU, 0, DrawItem), - ITEM_TRACKER_ITEM(ITEM_HOOKSHOT, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_ARROW_ICE, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_FARORES_WIND, 0, DrawItem), - ITEM_TRACKER_ITEM(ITEM_BOOMERANG, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_LENS, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_BEAN, 0, DrawItem), - ITEM_TRACKER_ITEM(ITEM_HAMMER, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_ARROW_LIGHT, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_NAYRUS_LOVE, 0, DrawItem), - ITEM_TRACKER_ITEM(ITEM_BOTTLE, 0, DrawBottle), ITEM_TRACKER_ITEM(ITEM_BOTTLE, 1, DrawBottle), ITEM_TRACKER_ITEM(ITEM_BOTTLE, 2, DrawBottle), - ITEM_TRACKER_ITEM(ITEM_BOTTLE, 3, DrawBottle), ITEM_TRACKER_ITEM(ITEM_POCKET_EGG, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_MASK_KEATON, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_STICK, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_NUT, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_BOMB, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_BOW, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_ARROW_FIRE, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_DINS_FIRE, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_SLINGSHOT, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_OCARINA_FAIRY, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_BOMBCHU, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_HOOKSHOT, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_ARROW_ICE, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_FARORES_WIND, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_BOOMERANG, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_LENS, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_BEAN, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_HAMMER, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_ARROW_LIGHT, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_NAYRUS_LOVE, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_BOTTLE, 0, DrawBottle), ITEM_TRACKER_ITEM(ITEM_BOTTLE, 1, DrawBottle), + ITEM_TRACKER_ITEM(ITEM_BOTTLE, 2, DrawBottle), ITEM_TRACKER_ITEM(ITEM_BOTTLE, 3, DrawBottle), + ITEM_TRACKER_ITEM(ITEM_POCKET_EGG, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_MASK_KEATON, 0, DrawItem), }; std::vector equipmentItems = { - ITEM_TRACKER_ITEM(ITEM_SWORD_KOKIRI, 1 << 0, DrawEquip), ITEM_TRACKER_ITEM(ITEM_SWORD_MASTER, 1 << 1, DrawEquip), ITEM_TRACKER_ITEM(ITEM_SWORD_BGS, 1 << 2, DrawEquip), - ITEM_TRACKER_ITEM(ITEM_TUNIC_KOKIRI, 1 << 8, DrawEquip), ITEM_TRACKER_ITEM(ITEM_TUNIC_GORON, 1 << 9, DrawEquip), ITEM_TRACKER_ITEM(ITEM_TUNIC_ZORA, 1 << 10, DrawEquip), - ITEM_TRACKER_ITEM(ITEM_SHIELD_DEKU, 1 << 4, DrawEquip), ITEM_TRACKER_ITEM(ITEM_SHIELD_HYLIAN, 1 << 5, DrawEquip), ITEM_TRACKER_ITEM(ITEM_SHIELD_MIRROR, 1 << 6, DrawEquip), - ITEM_TRACKER_ITEM(ITEM_BOOTS_KOKIRI, 1 << 12, DrawEquip), ITEM_TRACKER_ITEM(ITEM_BOOTS_IRON, 1 << 13, DrawEquip), ITEM_TRACKER_ITEM(ITEM_BOOTS_HOVER, 1 << 14, DrawEquip), + ITEM_TRACKER_ITEM(ITEM_SWORD_KOKIRI, 1 << 0, DrawEquip), ITEM_TRACKER_ITEM(ITEM_SWORD_MASTER, 1 << 1, DrawEquip), + ITEM_TRACKER_ITEM(ITEM_SWORD_BGS, 1 << 2, DrawEquip), ITEM_TRACKER_ITEM(ITEM_TUNIC_KOKIRI, 1 << 8, DrawEquip), + ITEM_TRACKER_ITEM(ITEM_TUNIC_GORON, 1 << 9, DrawEquip), ITEM_TRACKER_ITEM(ITEM_TUNIC_ZORA, 1 << 10, DrawEquip), + ITEM_TRACKER_ITEM(ITEM_SHIELD_DEKU, 1 << 4, DrawEquip), ITEM_TRACKER_ITEM(ITEM_SHIELD_HYLIAN, 1 << 5, DrawEquip), + ITEM_TRACKER_ITEM(ITEM_SHIELD_MIRROR, 1 << 6, DrawEquip), ITEM_TRACKER_ITEM(ITEM_BOOTS_KOKIRI, 1 << 12, DrawEquip), + ITEM_TRACKER_ITEM(ITEM_BOOTS_IRON, 1 << 13, DrawEquip), ITEM_TRACKER_ITEM(ITEM_BOOTS_HOVER, 1 << 14, DrawEquip), }; std::vector miscItems = { - ITEM_TRACKER_ITEM(ITEM_BRACELET, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_SCALE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_WALLET_ADULT, 0, DrawItem), - ITEM_TRACKER_ITEM(ITEM_HEART_CONTAINER, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_HEART_PIECE, 0, DrawItem), ITEM_TRACKER_ITEM(ITEM_MAGIC_SMALL, 0, DrawItem), - ITEM_TRACKER_ITEM(QUEST_GERUDO_CARD, 1 << 22, DrawQuest), ITEM_TRACKER_ITEM(QUEST_SKULL_TOKEN, 1 << 23, DrawQuest), ITEM_TRACKER_ITEM(QUEST_STONE_OF_AGONY, 1 << 21, DrawQuest), + ITEM_TRACKER_ITEM(ITEM_BRACELET, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_SCALE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_WALLET_ADULT, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_HEART_CONTAINER, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_HEART_PIECE, 0, DrawItem), + ITEM_TRACKER_ITEM(ITEM_MAGIC_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM(QUEST_GERUDO_CARD, 1 << 22, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_SKULL_TOKEN, 1 << 23, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_STONE_OF_AGONY, 1 << 21, DrawQuest), }; std::vector dungeonRewardStones = { - ITEM_TRACKER_ITEM(QUEST_KOKIRI_EMERALD, 1 << 18, DrawQuest), ITEM_TRACKER_ITEM(QUEST_GORON_RUBY, 1 << 19, DrawQuest), ITEM_TRACKER_ITEM(QUEST_ZORA_SAPPHIRE, 1 << 20, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_KOKIRI_EMERALD, 1 << 18, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_GORON_RUBY, 1 << 19, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_ZORA_SAPPHIRE, 1 << 20, DrawQuest), }; std::vector dungeonRewardMedallions = { - ITEM_TRACKER_ITEM(QUEST_MEDALLION_FOREST, 1 << 0, DrawQuest), ITEM_TRACKER_ITEM(QUEST_MEDALLION_FIRE, 1 << 1, DrawQuest), ITEM_TRACKER_ITEM(QUEST_MEDALLION_WATER, 1 << 2, DrawQuest), - ITEM_TRACKER_ITEM(QUEST_MEDALLION_SPIRIT, 1 << 3, DrawQuest), ITEM_TRACKER_ITEM(QUEST_MEDALLION_SHADOW, 1 << 4, DrawQuest), ITEM_TRACKER_ITEM(QUEST_MEDALLION_LIGHT, 1 << 5, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_MEDALLION_FOREST, 1 << 0, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_MEDALLION_FIRE, 1 << 1, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_MEDALLION_WATER, 1 << 2, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_MEDALLION_SPIRIT, 1 << 3, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_MEDALLION_SHADOW, 1 << 4, DrawQuest), + ITEM_TRACKER_ITEM(QUEST_MEDALLION_LIGHT, 1 << 5, DrawQuest), }; std::vector dungeonRewards = {}; std::vector songItems = { - ITEM_TRACKER_ITEM(QUEST_SONG_LULLABY, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_EPONA, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_SARIA, 0, DrawSong), - ITEM_TRACKER_ITEM(QUEST_SONG_SUN, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_TIME, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_STORMS, 0, DrawSong), - ITEM_TRACKER_ITEM(QUEST_SONG_MINUET, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_BOLERO, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_SERENADE, 0, DrawSong), - ITEM_TRACKER_ITEM(QUEST_SONG_REQUIEM, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_NOCTURNE, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_PRELUDE, 0, DrawSong), + ITEM_TRACKER_ITEM(QUEST_SONG_LULLABY, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_EPONA, 0, DrawSong), + ITEM_TRACKER_ITEM(QUEST_SONG_SARIA, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_SUN, 0, DrawSong), + ITEM_TRACKER_ITEM(QUEST_SONG_TIME, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_STORMS, 0, DrawSong), + ITEM_TRACKER_ITEM(QUEST_SONG_MINUET, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_BOLERO, 0, DrawSong), + ITEM_TRACKER_ITEM(QUEST_SONG_SERENADE, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_REQUIEM, 0, DrawSong), + ITEM_TRACKER_ITEM(QUEST_SONG_NOCTURNE, 0, DrawSong), ITEM_TRACKER_ITEM(QUEST_SONG_PRELUDE, 0, DrawSong), }; std::vector gregItems = { @@ -93,31 +113,54 @@ std::vector triforcePieces = { }; std::vector bossSoulItems = { - ITEM_TRACKER_ITEM(RG_GOHMA_SOUL, 0, DrawItem), - ITEM_TRACKER_ITEM(RG_KING_DODONGO_SOUL, 0, DrawItem ), - ITEM_TRACKER_ITEM(RG_BARINADE_SOUL, 0, DrawItem ), - ITEM_TRACKER_ITEM(RG_PHANTOM_GANON_SOUL, 0, DrawItem ), - ITEM_TRACKER_ITEM(RG_VOLVAGIA_SOUL, 0, DrawItem ), - ITEM_TRACKER_ITEM(RG_MORPHA_SOUL, 0, DrawItem ), - ITEM_TRACKER_ITEM(RG_BONGO_BONGO_SOUL, 0, DrawItem ), - ITEM_TRACKER_ITEM(RG_TWINROVA_SOUL, 0, DrawItem ), - ITEM_TRACKER_ITEM(RG_GANON_SOUL, 0, DrawItem ), + ITEM_TRACKER_ITEM(RG_GOHMA_SOUL, 0, DrawItem), ITEM_TRACKER_ITEM(RG_KING_DODONGO_SOUL, 0, DrawItem), + ITEM_TRACKER_ITEM(RG_BARINADE_SOUL, 0, DrawItem), ITEM_TRACKER_ITEM(RG_PHANTOM_GANON_SOUL, 0, DrawItem), + ITEM_TRACKER_ITEM(RG_VOLVAGIA_SOUL, 0, DrawItem), ITEM_TRACKER_ITEM(RG_MORPHA_SOUL, 0, DrawItem), + ITEM_TRACKER_ITEM(RG_BONGO_BONGO_SOUL, 0, DrawItem), ITEM_TRACKER_ITEM(RG_TWINROVA_SOUL, 0, DrawItem), + ITEM_TRACKER_ITEM(RG_GANON_SOUL, 0, DrawItem), }; std::vector ocarinaButtonItems = { - //Hack for right now, just gonna draw ocarina buttons as ocarinas. - //Will replace with other macro once we have a custom texture - ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_A_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem ), - ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_C_UP_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem ), - ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_C_DOWN_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem ), - ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_C_LEFT_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem ), - ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_C_RIGHT_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem ), + // Hack for right now, just gonna draw ocarina buttons as ocarinas. + // Will replace with other macro once we have a custom texture + ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_A_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_C_UP_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_C_DOWN_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_C_LEFT_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_OCARINA_C_RIGHT_BUTTON, ITEM_OCARINA_TIME, ITEM_OCARINA_TIME, 0, DrawItem), }; -std::vector fishingPoleItems = { - ITEM_TRACKER_ITEM(ITEM_FISHING_POLE, 0, DrawItem) +std::vector overworldKeyItems = { + // Hack for right now, just gonna overworld keys as dungeon keys. + // Will replace with other macro once we have a custom texture + ITEM_TRACKER_ITEM_CUSTOM(RG_GUARD_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_MARKET_BAZAAR_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_MARKET_POTION_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_MASK_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_MARKET_SHOOTING_GALLERY_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_BOMBCHU_BOWLING_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_TREASURE_CHEST_GAME_BUILDING_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_BOMBCHU_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_RICHARDS_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_ALLEY_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_KAK_BAZAAR_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_KAK_POTION_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_BOSS_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GRANNYS_POTION_SHOP_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SKULLTULA_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_IMPAS_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_WINDMILL_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_KAK_SHOOTING_GALLERY_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_DAMPES_HUT_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_TALONS_HOUSE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_STABLES_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_BACK_TOWER_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_HYLIA_LAB_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_FISHING_HOLE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), }; +std::vector fishingPoleItems = { ITEM_TRACKER_ITEM(ITEM_FISHING_POLE, 0, DrawItem) }; + std::vector itemTrackerDungeonsWithMapsHorizontal = { { SCENE_DEKU_TREE, { ITEM_DUNGEON_MAP, ITEM_COMPASS } }, { SCENE_DODONGOS_CAVERN, { ITEM_DUNGEON_MAP, ITEM_COMPASS } }, @@ -144,7 +187,6 @@ std::vector itemTrackerDungeonsHorizontal = { { SCENE_GERUDO_TRAINING_GROUND, { ITEM_KEY_SMALL } }, }; - std::vector itemTrackerDungeonsWithMapsCompact = { { SCENE_FOREST_TEMPLE, { ITEM_KEY_SMALL, ITEM_KEY_BOSS, ITEM_DUNGEON_MAP, ITEM_COMPASS } }, { SCENE_FIRE_TEMPLE, { ITEM_KEY_SMALL, ITEM_KEY_BOSS, ITEM_DUNGEON_MAP, ITEM_COMPASS } }, @@ -173,143 +215,141 @@ std::vector itemTrackerDungeonsCompact = { }; std::map itemTrackerDungeonShortNames = { - { SCENE_FOREST_TEMPLE, "FRST" }, - { SCENE_FIRE_TEMPLE, "FIRE" }, - { SCENE_WATER_TEMPLE, "WATR" }, - { SCENE_SPIRIT_TEMPLE, "SPRT" }, - { SCENE_SHADOW_TEMPLE, "SHDW" }, - { SCENE_BOTTOM_OF_THE_WELL, "BOTW" }, - { SCENE_DEKU_TREE, "DEKU" }, - { SCENE_DODONGOS_CAVERN, "DCVN" }, - { SCENE_JABU_JABU, "JABU" }, - { SCENE_ICE_CAVERN, "ICE" }, - { SCENE_INSIDE_GANONS_CASTLE, "GANON" }, - { SCENE_GERUDO_TRAINING_GROUND, "GTG" }, + { SCENE_FOREST_TEMPLE, "FRST" }, { SCENE_FIRE_TEMPLE, "FIRE" }, { SCENE_WATER_TEMPLE, "WATR" }, + { SCENE_SPIRIT_TEMPLE, "SPRT" }, { SCENE_SHADOW_TEMPLE, "SHDW" }, { SCENE_BOTTOM_OF_THE_WELL, "BOTW" }, + { SCENE_DEKU_TREE, "DEKU" }, { SCENE_DODONGOS_CAVERN, "DCVN" }, { SCENE_JABU_JABU, "JABU" }, + { SCENE_ICE_CAVERN, "ICE" }, { SCENE_INSIDE_GANONS_CASTLE, "GANON" }, { SCENE_GERUDO_TRAINING_GROUND, "GTG" }, { SCENE_THIEVES_HIDEOUT, "HIDE" }, }; std::map itemTrackerBossShortNames = { - { RG_GOHMA_SOUL, "GOHMA" }, - { RG_KING_DODONGO_SOUL, "KD" }, - { RG_BARINADE_SOUL, "BARI" }, - { RG_PHANTOM_GANON_SOUL, "PG"}, - { RG_VOLVAGIA_SOUL, "VOLV"}, - { RG_MORPHA_SOUL, "MORPH"}, - { RG_BONGO_BONGO_SOUL, "BONGO"}, - { RG_TWINROVA_SOUL, "TWIN"}, - { RG_GANON_SOUL, "GANON"}, + { RG_GOHMA_SOUL, "GOHMA" }, { RG_KING_DODONGO_SOUL, "KD" }, { RG_BARINADE_SOUL, "BARI" }, + { RG_PHANTOM_GANON_SOUL, "PG" }, { RG_VOLVAGIA_SOUL, "VOLV" }, { RG_MORPHA_SOUL, "MORPH" }, + { RG_BONGO_BONGO_SOUL, "BONGO" }, { RG_TWINROVA_SOUL, "TWIN" }, { RG_GANON_SOUL, "GANON" }, }; std::map itemTrackerOcarinaButtonShortNames = { - { RG_OCARINA_A_BUTTON, "A" }, - { RG_OCARINA_C_UP_BUTTON, "C-U" }, - { RG_OCARINA_C_DOWN_BUTTON, "C-D" }, - { RG_OCARINA_C_LEFT_BUTTON, "C-L"}, - { RG_OCARINA_C_RIGHT_BUTTON, "C-R"}, + { RG_OCARINA_A_BUTTON, "A" }, { RG_OCARINA_C_UP_BUTTON, "C-U" }, { RG_OCARINA_C_DOWN_BUTTON, "C-D" }, + { RG_OCARINA_C_LEFT_BUTTON, "C-L" }, { RG_OCARINA_C_RIGHT_BUTTON, "C-R" }, +}; + +std::map itemTrackerOverworldKeyShortNames = { + { RG_GUARD_HOUSE_KEY, "GUARD" }, + { RG_MARKET_BAZAAR_KEY, "MKBAZ" }, + { RG_MARKET_POTION_SHOP_KEY, "MKPOT" }, + { RG_MASK_SHOP_KEY, "MASK" }, + { RG_MARKET_SHOOTING_GALLERY_KEY, "MKSHO" }, + { RG_BOMBCHU_BOWLING_KEY, "BOWL" }, + { RG_TREASURE_CHEST_GAME_BUILDING_KEY, "TREASU" }, + { RG_BOMBCHU_SHOP_KEY, "CHUSHO" }, + { RG_RICHARDS_HOUSE_KEY, "RICH" }, + { RG_ALLEY_HOUSE_KEY, "ALLEY" }, + { RG_KAK_BAZAAR_KEY, "KAKBAZ" }, + { RG_KAK_POTION_SHOP_KEY, "KAKPO" }, + { RG_BOSS_HOUSE_KEY, "BOSS" }, + { RG_GRANNYS_POTION_SHOP_KEY, "GRANNY" }, + { RG_SKULLTULA_HOUSE_KEY, "SKULL" }, + { RG_IMPAS_HOUSE_KEY, "IMPAS" }, + { RG_WINDMILL_KEY, "WIND" }, + { RG_KAK_SHOOTING_GALLERY_KEY, "KAKSHO" }, + { RG_DAMPES_HUT_KEY, "DAMPES" }, + { RG_TALONS_HOUSE_KEY, "TALONS" }, + { RG_STABLES_KEY, "STABLE" }, + { RG_BACK_TOWER_KEY, "TOWER" }, + { RG_HYLIA_LAB_KEY, "LAB" }, + { RG_FISHING_HOLE_KEY, "FISH" }, }; std::vector dungeonItems = {}; std::unordered_map actualItemTrackerItemMap = { - { ITEM_BOTTLE, ITEM_TRACKER_ITEM(ITEM_BOTTLE, 0, DrawItem) }, - { ITEM_BIG_POE, ITEM_TRACKER_ITEM(ITEM_BIG_POE, 0, DrawItem) }, - { ITEM_BLUE_FIRE, ITEM_TRACKER_ITEM(ITEM_BLUE_FIRE, 0, DrawItem) }, - { ITEM_BUG, ITEM_TRACKER_ITEM(ITEM_BUG, 0, DrawItem) }, - { ITEM_FAIRY, ITEM_TRACKER_ITEM(ITEM_FAIRY, 0, DrawItem) }, - { ITEM_FISH, ITEM_TRACKER_ITEM(ITEM_FISH, 0, DrawItem) }, - { ITEM_POTION_GREEN, ITEM_TRACKER_ITEM(ITEM_POTION_GREEN, 0, DrawItem) }, - { ITEM_POE, ITEM_TRACKER_ITEM(ITEM_POE, 0, DrawItem) }, - { ITEM_POTION_RED, ITEM_TRACKER_ITEM(ITEM_POTION_RED, 0, DrawItem) }, - { ITEM_POTION_BLUE, ITEM_TRACKER_ITEM(ITEM_POTION_BLUE, 0, DrawItem) }, - { ITEM_MILK_BOTTLE, ITEM_TRACKER_ITEM(ITEM_MILK_BOTTLE, 0, DrawItem) }, - { ITEM_MILK_HALF, ITEM_TRACKER_ITEM(ITEM_MILK_HALF, 0, DrawItem) }, - { ITEM_LETTER_RUTO, ITEM_TRACKER_ITEM(ITEM_LETTER_RUTO, 0, DrawItem) }, + { ITEM_BOTTLE, ITEM_TRACKER_ITEM(ITEM_BOTTLE, 0, DrawItem) }, + { ITEM_BIG_POE, ITEM_TRACKER_ITEM(ITEM_BIG_POE, 0, DrawItem) }, + { ITEM_BLUE_FIRE, ITEM_TRACKER_ITEM(ITEM_BLUE_FIRE, 0, DrawItem) }, + { ITEM_BUG, ITEM_TRACKER_ITEM(ITEM_BUG, 0, DrawItem) }, + { ITEM_FAIRY, ITEM_TRACKER_ITEM(ITEM_FAIRY, 0, DrawItem) }, + { ITEM_FISH, ITEM_TRACKER_ITEM(ITEM_FISH, 0, DrawItem) }, + { ITEM_POTION_GREEN, ITEM_TRACKER_ITEM(ITEM_POTION_GREEN, 0, DrawItem) }, + { ITEM_POE, ITEM_TRACKER_ITEM(ITEM_POE, 0, DrawItem) }, + { ITEM_POTION_RED, ITEM_TRACKER_ITEM(ITEM_POTION_RED, 0, DrawItem) }, + { ITEM_POTION_BLUE, ITEM_TRACKER_ITEM(ITEM_POTION_BLUE, 0, DrawItem) }, + { ITEM_MILK_BOTTLE, ITEM_TRACKER_ITEM(ITEM_MILK_BOTTLE, 0, DrawItem) }, + { ITEM_MILK_HALF, ITEM_TRACKER_ITEM(ITEM_MILK_HALF, 0, DrawItem) }, + { ITEM_LETTER_RUTO, ITEM_TRACKER_ITEM(ITEM_LETTER_RUTO, 0, DrawItem) }, - { ITEM_HOOKSHOT, ITEM_TRACKER_ITEM(ITEM_HOOKSHOT, 0, DrawItem) }, - { ITEM_LONGSHOT, ITEM_TRACKER_ITEM(ITEM_LONGSHOT, 0, DrawItem) }, + { ITEM_HOOKSHOT, ITEM_TRACKER_ITEM(ITEM_HOOKSHOT, 0, DrawItem) }, + { ITEM_LONGSHOT, ITEM_TRACKER_ITEM(ITEM_LONGSHOT, 0, DrawItem) }, - { ITEM_OCARINA_FAIRY, ITEM_TRACKER_ITEM(ITEM_OCARINA_FAIRY, 0, DrawItem) }, - { ITEM_OCARINA_TIME, ITEM_TRACKER_ITEM(ITEM_OCARINA_TIME, 0, DrawItem) }, + { ITEM_OCARINA_FAIRY, ITEM_TRACKER_ITEM(ITEM_OCARINA_FAIRY, 0, DrawItem) }, + { ITEM_OCARINA_TIME, ITEM_TRACKER_ITEM(ITEM_OCARINA_TIME, 0, DrawItem) }, - { ITEM_MAGIC_SMALL, ITEM_TRACKER_ITEM(ITEM_MAGIC_SMALL, 0, DrawItem) }, - { ITEM_MAGIC_LARGE, ITEM_TRACKER_ITEM(ITEM_MAGIC_LARGE, 0, DrawItem) }, + { ITEM_MAGIC_SMALL, ITEM_TRACKER_ITEM(ITEM_MAGIC_SMALL, 0, DrawItem) }, + { ITEM_MAGIC_LARGE, ITEM_TRACKER_ITEM(ITEM_MAGIC_LARGE, 0, DrawItem) }, - { ITEM_WALLET_ADULT, ITEM_TRACKER_ITEM(ITEM_WALLET_ADULT, 0, DrawItem) }, - { ITEM_WALLET_GIANT, ITEM_TRACKER_ITEM(ITEM_WALLET_GIANT, 0, DrawItem) }, + { ITEM_WALLET_ADULT, ITEM_TRACKER_ITEM(ITEM_WALLET_ADULT, 0, DrawItem) }, + { ITEM_WALLET_GIANT, ITEM_TRACKER_ITEM(ITEM_WALLET_GIANT, 0, DrawItem) }, - { ITEM_BRACELET, ITEM_TRACKER_ITEM(ITEM_BRACELET, 0, DrawItem) }, + { ITEM_BRACELET, ITEM_TRACKER_ITEM(ITEM_BRACELET, 0, DrawItem) }, { ITEM_GAUNTLETS_SILVER, ITEM_TRACKER_ITEM(ITEM_GAUNTLETS_SILVER, 0, DrawItem) }, - { ITEM_GAUNTLETS_GOLD, ITEM_TRACKER_ITEM(ITEM_GAUNTLETS_GOLD, 0, DrawItem) }, + { ITEM_GAUNTLETS_GOLD, ITEM_TRACKER_ITEM(ITEM_GAUNTLETS_GOLD, 0, DrawItem) }, - { ITEM_SCALE_SILVER, ITEM_TRACKER_ITEM(ITEM_SCALE_SILVER, 0, DrawItem) }, - { ITEM_SCALE_GOLDEN, ITEM_TRACKER_ITEM(ITEM_SCALE_GOLDEN, 0, DrawItem) }, + { ITEM_SCALE_SILVER, ITEM_TRACKER_ITEM(ITEM_SCALE_SILVER, 0, DrawItem) }, + { ITEM_SCALE_GOLDEN, ITEM_TRACKER_ITEM(ITEM_SCALE_GOLDEN, 0, DrawItem) }, - { ITEM_WEIRD_EGG, ITEM_TRACKER_ITEM(ITEM_WEIRD_EGG, 0, DrawItem) }, - { ITEM_CHICKEN, ITEM_TRACKER_ITEM(ITEM_CHICKEN, 0, DrawItem) }, - { ITEM_LETTER_ZELDA, ITEM_TRACKER_ITEM(ITEM_LETTER_ZELDA, 0, DrawItem) }, - { ITEM_MASK_KEATON, ITEM_TRACKER_ITEM(ITEM_MASK_KEATON, 0, DrawItem) }, - { ITEM_MASK_SKULL, ITEM_TRACKER_ITEM(ITEM_MASK_SKULL, 0, DrawItem) }, - { ITEM_MASK_SPOOKY, ITEM_TRACKER_ITEM(ITEM_MASK_SPOOKY, 0, DrawItem) }, - { ITEM_MASK_BUNNY, ITEM_TRACKER_ITEM(ITEM_MASK_BUNNY, 0, DrawItem) }, - { ITEM_MASK_GORON, ITEM_TRACKER_ITEM(ITEM_MASK_GORON, 0, DrawItem) }, - { ITEM_MASK_ZORA, ITEM_TRACKER_ITEM(ITEM_MASK_ZORA, 0, DrawItem) }, - { ITEM_MASK_GERUDO, ITEM_TRACKER_ITEM(ITEM_MASK_GERUDO, 0, DrawItem) }, - { ITEM_MASK_TRUTH, ITEM_TRACKER_ITEM(ITEM_MASK_TRUTH, 0, DrawItem) }, - { ITEM_SOLD_OUT, ITEM_TRACKER_ITEM(ITEM_SOLD_OUT, 0, DrawItem) }, + { ITEM_WEIRD_EGG, ITEM_TRACKER_ITEM(ITEM_WEIRD_EGG, 0, DrawItem) }, + { ITEM_CHICKEN, ITEM_TRACKER_ITEM(ITEM_CHICKEN, 0, DrawItem) }, + { ITEM_LETTER_ZELDA, ITEM_TRACKER_ITEM(ITEM_LETTER_ZELDA, 0, DrawItem) }, + { ITEM_MASK_KEATON, ITEM_TRACKER_ITEM(ITEM_MASK_KEATON, 0, DrawItem) }, + { ITEM_MASK_SKULL, ITEM_TRACKER_ITEM(ITEM_MASK_SKULL, 0, DrawItem) }, + { ITEM_MASK_SPOOKY, ITEM_TRACKER_ITEM(ITEM_MASK_SPOOKY, 0, DrawItem) }, + { ITEM_MASK_BUNNY, ITEM_TRACKER_ITEM(ITEM_MASK_BUNNY, 0, DrawItem) }, + { ITEM_MASK_GORON, ITEM_TRACKER_ITEM(ITEM_MASK_GORON, 0, DrawItem) }, + { ITEM_MASK_ZORA, ITEM_TRACKER_ITEM(ITEM_MASK_ZORA, 0, DrawItem) }, + { ITEM_MASK_GERUDO, ITEM_TRACKER_ITEM(ITEM_MASK_GERUDO, 0, DrawItem) }, + { ITEM_MASK_TRUTH, ITEM_TRACKER_ITEM(ITEM_MASK_TRUTH, 0, DrawItem) }, + { ITEM_SOLD_OUT, ITEM_TRACKER_ITEM(ITEM_SOLD_OUT, 0, DrawItem) }, - { ITEM_POCKET_EGG, ITEM_TRACKER_ITEM(ITEM_POCKET_EGG, 0, DrawItem) }, - { ITEM_POCKET_CUCCO, ITEM_TRACKER_ITEM(ITEM_POCKET_CUCCO, 0, DrawItem) }, - { ITEM_COJIRO, ITEM_TRACKER_ITEM(ITEM_COJIRO, 0, DrawItem) }, - { ITEM_ODD_MUSHROOM, ITEM_TRACKER_ITEM(ITEM_ODD_MUSHROOM, 0, DrawItem) }, - { ITEM_ODD_POTION, ITEM_TRACKER_ITEM(ITEM_ODD_POTION, 0, DrawItem) }, - { ITEM_SAW, ITEM_TRACKER_ITEM(ITEM_SAW, 0, DrawItem) }, - { ITEM_SWORD_BROKEN, ITEM_TRACKER_ITEM(ITEM_SWORD_BROKEN, 0, DrawItem) }, - { ITEM_PRESCRIPTION, ITEM_TRACKER_ITEM(ITEM_PRESCRIPTION, 0, DrawItem) }, - { ITEM_FROG, ITEM_TRACKER_ITEM(ITEM_FROG, 0, DrawItem) }, - { ITEM_EYEDROPS, ITEM_TRACKER_ITEM(ITEM_EYEDROPS, 0, DrawItem) }, - { ITEM_CLAIM_CHECK, ITEM_TRACKER_ITEM(ITEM_CLAIM_CHECK, 0, DrawItem) }, + { ITEM_POCKET_EGG, ITEM_TRACKER_ITEM(ITEM_POCKET_EGG, 0, DrawItem) }, + { ITEM_POCKET_CUCCO, ITEM_TRACKER_ITEM(ITEM_POCKET_CUCCO, 0, DrawItem) }, + { ITEM_COJIRO, ITEM_TRACKER_ITEM(ITEM_COJIRO, 0, DrawItem) }, + { ITEM_ODD_MUSHROOM, ITEM_TRACKER_ITEM(ITEM_ODD_MUSHROOM, 0, DrawItem) }, + { ITEM_ODD_POTION, ITEM_TRACKER_ITEM(ITEM_ODD_POTION, 0, DrawItem) }, + { ITEM_SAW, ITEM_TRACKER_ITEM(ITEM_SAW, 0, DrawItem) }, + { ITEM_SWORD_BROKEN, ITEM_TRACKER_ITEM(ITEM_SWORD_BROKEN, 0, DrawItem) }, + { ITEM_PRESCRIPTION, ITEM_TRACKER_ITEM(ITEM_PRESCRIPTION, 0, DrawItem) }, + { ITEM_FROG, ITEM_TRACKER_ITEM(ITEM_FROG, 0, DrawItem) }, + { ITEM_EYEDROPS, ITEM_TRACKER_ITEM(ITEM_EYEDROPS, 0, DrawItem) }, + { ITEM_CLAIM_CHECK, ITEM_TRACKER_ITEM(ITEM_CLAIM_CHECK, 0, DrawItem) }, }; std::vector buttonMap = { - BTN_A, - BTN_B, - BTN_CUP, - BTN_CDOWN, - BTN_CLEFT, - BTN_CRIGHT, - BTN_L, - BTN_Z, - BTN_R, - BTN_START, - BTN_DUP, - BTN_DDOWN, - BTN_DLEFT, - BTN_DRIGHT + BTN_A, BTN_B, BTN_CUP, BTN_CDOWN, BTN_CLEFT, BTN_CRIGHT, BTN_L, + BTN_Z, BTN_R, BTN_START, BTN_DUP, BTN_DDOWN, BTN_DLEFT, BTN_DRIGHT, }; typedef enum { - ITEM_TRACKER_NUMBER_NONE, - ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY, - ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY, - ITEM_TRACKER_NUMBER_CAPACITY, - ITEM_TRACKER_NUMBER_AMMO, + ITEM_TRACKER_NUMBER_NONE, + ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY, + ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY, + ITEM_TRACKER_NUMBER_CAPACITY, + ITEM_TRACKER_NUMBER_AMMO, } ItemTrackerNumberOption; typedef enum { KEYS_COLLECTED_MAX, KEYS_CURRENT_COLLECTED_MAX, - KEYS_CURRENT_MAX + KEYS_CURRENT_MAX, } ItemTrackerKeysNumberOption; typedef enum { TRIFORCE_PIECE_COLLECTED_REQUIRED, - TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX + TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX, } ItemTrackerTriforcePieceNumberOption; typedef enum { SECTION_DISPLAY_HIDDEN, SECTION_DISPLAY_MAIN_WINDOW, - SECTION_DISPLAY_SEPARATE + SECTION_DISPLAY_SEPARATE, } ItemTrackerDisplayType; typedef enum { @@ -321,13 +361,13 @@ typedef enum { typedef enum { SECTION_DISPLAY_MINIMAL_HIDDEN, - SECTION_DISPLAY_MINIMAL_SEPARATE + SECTION_DISPLAY_MINIMAL_SEPARATE, } ItemTrackerMinimalDisplayType; struct ItemTrackerNumbers { - int currentCapacity; - int maxCapacity; - int currentAmmo; + int currentCapacity; + int maxCapacity; + int currentAmmo; }; static ImVector itemTrackerNotes; @@ -392,8 +432,10 @@ ItemTrackerNumbers GetItemCurrentAndMax(ItemTrackerItem item) { break; case ITEM_WALLET_ADULT: case ITEM_WALLET_GIANT: - result.currentCapacity = IS_RANDO && !Flags_GetRandomizerInf(RAND_INF_HAS_WALLET) ? 0 : CUR_CAPACITY(UPG_WALLET); - result.maxCapacity = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_INCLUDE_TYCOON_WALLET) ? 999 : 500; + result.currentCapacity = + IS_RANDO && !Flags_GetRandomizerInf(RAND_INF_HAS_WALLET) ? 0 : CUR_CAPACITY(UPG_WALLET); + result.maxCapacity = + OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_INCLUDE_TYCOON_WALLET) ? 999 : 500; result.currentAmmo = gSaveContext.rupees; break; case ITEM_BOMBCHU: @@ -473,7 +515,8 @@ void DrawItemCount(ItemTrackerItem item, bool hideMax) { int textSize = CVarGetInteger(CVAR_TRACKER_ITEM("TextSize"), 13); ItemTrackerNumbers currentAndMax = GetItemCurrentAndMax(item); ImVec2 p = ImGui::GetCursorScreenPos(); - int32_t trackerNumberDisplayMode = CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY); + int32_t trackerNumberDisplayMode = + CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY); int32_t trackerKeyNumberDisplayMode = CVarGetInteger(CVAR_TRACKER_ITEM("KeyCounts"), KEYS_COLLECTED_MAX); float textScalingFactor = static_cast(iconSize) / 36.0f; uint32_t actualItemId = INV_CONTENT(item.id); @@ -483,8 +526,11 @@ void DrawItemCount(ItemTrackerItem item, bool hideMax) { if ((actualItemId == ITEM_HOOKSHOT || actualItemId == ITEM_LONGSHOT) && hasItem) { // Calculate the scaled position for the text - ImVec2 textPos = ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(item.id == ITEM_HOOKSHOT ? "H" : "L").x * - textScalingFactor / 2) + 8 * textScalingFactor, p.y - 22 * textScalingFactor); + ImVec2 textPos = + ImVec2(p.x + (iconSize / 2) - + (ImGui::CalcTextSize(item.id == ITEM_HOOKSHOT ? "H" : "L").x * textScalingFactor / 2) + + 8 * textScalingFactor, + p.y - 22 * textScalingFactor); ImGui::SetCursorScreenPos(textPos); ImGui::SetWindowFontScale(textScalingFactor); @@ -502,16 +548,19 @@ void DrawItemCount(ItemTrackerItem item, bool hideMax) { ImU32 currentColor = IM_COL_WHITE; ImU32 maxColor = IM_COL_GREEN; // "Collected / Max", "Current / Collected / Max", "Current / Max" - if (trackerKeyNumberDisplayMode == KEYS_CURRENT_COLLECTED_MAX || trackerKeyNumberDisplayMode == KEYS_CURRENT_MAX) { - currentString+= std::to_string(currentAndMax.currentAmmo); - currentString+= "/"; + if (trackerKeyNumberDisplayMode == KEYS_CURRENT_COLLECTED_MAX || + trackerKeyNumberDisplayMode == KEYS_CURRENT_MAX) { + currentString += std::to_string(currentAndMax.currentAmmo); + currentString += "/"; } - if (trackerKeyNumberDisplayMode == KEYS_COLLECTED_MAX || trackerKeyNumberDisplayMode == KEYS_CURRENT_COLLECTED_MAX) { - currentString+= std::to_string(currentAndMax.currentCapacity); - currentString+= "/"; + if (trackerKeyNumberDisplayMode == KEYS_COLLECTED_MAX || + trackerKeyNumberDisplayMode == KEYS_CURRENT_COLLECTED_MAX) { + currentString += std::to_string(currentAndMax.currentCapacity); + currentString += "/"; } - ImGui::SetCursorScreenPos(ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize((currentString + maxString).c_str()).x / 2), p.y - 14)); + ImGui::SetCursorScreenPos( + ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize((currentString + maxString).c_str()).x / 2), p.y - 14)); ImGui::PushStyleColor(ImGuiCol_Text, currentColor); ImGui::Text("%s", currentString.c_str()); ImGui::PopStyleColor(); @@ -519,26 +568,25 @@ void DrawItemCount(ItemTrackerItem item, bool hideMax) { ImGui::PushStyleColor(ImGuiCol_Text, maxColor); ImGui::Text("%s", maxString.c_str()); ImGui::PopStyleColor(); - } else if (currentAndMax.currentCapacity > 0 && trackerNumberDisplayMode != ITEM_TRACKER_NUMBER_NONE && IsValidSaveFile()) { + } else if (currentAndMax.currentCapacity > 0 && trackerNumberDisplayMode != ITEM_TRACKER_NUMBER_NONE && + IsValidSaveFile()) { std::string currentString = ""; std::string maxString = ""; ImU32 currentColor = IM_COL_WHITE; ImU32 maxColor = item.id == QUEST_SKULL_TOKEN ? IM_COL_RED : IM_COL_GREEN; bool shouldAlignToLeft = CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountAlignLeft"), 0) && - trackerNumberDisplayMode != ITEM_TRACKER_NUMBER_CAPACITY && - trackerNumberDisplayMode != ITEM_TRACKER_NUMBER_AMMO; + trackerNumberDisplayMode != ITEM_TRACKER_NUMBER_CAPACITY && + trackerNumberDisplayMode != ITEM_TRACKER_NUMBER_AMMO; bool shouldDisplayAmmo = trackerNumberDisplayMode == ITEM_TRACKER_NUMBER_AMMO || - trackerNumberDisplayMode == ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY || - // These items have a static capacity, so display ammo instead - item.id == ITEM_BOMBCHU || - item.id == ITEM_BEAN || - item.id == QUEST_SKULL_TOKEN || - item.id == ITEM_HEART_CONTAINER || - item.id == ITEM_HEART_PIECE; + trackerNumberDisplayMode == ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY || + // These items have a static capacity, so display ammo instead + item.id == ITEM_BOMBCHU || item.id == ITEM_BEAN || item.id == QUEST_SKULL_TOKEN || + item.id == ITEM_HEART_CONTAINER || item.id == ITEM_HEART_PIECE; - bool shouldDisplayMax = !(trackerNumberDisplayMode == ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY || trackerNumberDisplayMode == ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY); + bool shouldDisplayMax = !(trackerNumberDisplayMode == ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY || + trackerNumberDisplayMode == ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY); if (shouldDisplayAmmo) { currentString = std::to_string(currentAndMax.currentAmmo); @@ -566,7 +614,9 @@ void DrawItemCount(ItemTrackerItem item, bool hideMax) { } } - float x = shouldAlignToLeft ? p.x : p.x + (iconSize / 2) - (ImGui::CalcTextSize((currentString + maxString).c_str()).x / 2); + float x = shouldAlignToLeft + ? p.x + : p.x + (iconSize / 2) - (ImGui::CalcTextSize((currentString + maxString).c_str()).x / 2); ImGui::SetCursorScreenPos(ImVec2(x, p.y - 14)); ImGui::PushStyleColor(ImGuiCol_Text, currentColor); @@ -581,11 +631,16 @@ void DrawItemCount(ItemTrackerItem item, bool hideMax) { std::string currentString = ""; std::string requiredString = ""; std::string maxString = ""; - uint8_t piecesRequired = (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED) + 1); - uint8_t piecesTotal = (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_TOTAL) + 1); - ImU32 currentColor = gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected >= piecesRequired ? IM_COL_GREEN : IM_COL_WHITE; + uint8_t piecesRequired = + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_REQUIRED) + 1); + uint8_t piecesTotal = + (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_TRIFORCE_HUNT_PIECES_TOTAL) + 1); + ImU32 currentColor = gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected >= piecesRequired + ? IM_COL_GREEN + : IM_COL_WHITE; ImU32 maxColor = IM_COL_GREEN; - int32_t trackerTriforcePieceNumberDisplayMode = CVarGetInteger(CVAR_TRACKER_ITEM("TriforcePieceCounts"), TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX); + int32_t trackerTriforcePieceNumberDisplayMode = + CVarGetInteger(CVAR_TRACKER_ITEM("TriforcePieceCounts"), TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX); currentString += std::to_string(gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected); currentString += "/"; @@ -616,7 +671,8 @@ void DrawItemCount(ItemTrackerItem item, bool hideMax) { void DrawEquip(ItemTrackerItem item) { bool hasEquip = HasEquipment(item); int iconSize = CVarGetInteger(CVAR_TRACKER_ITEM("IconSize"), 36); - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasEquip && IsValidSaveFile() ? item.name : item.nameFaded), + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasEquip && IsValidSaveFile() ? item.name : item.nameFaded), ImVec2(iconSize, iconSize), ImVec2(0, 0), ImVec2(1, 1)); Tooltip(SohUtils::GetItemName(item.id).c_str()); @@ -626,7 +682,8 @@ void DrawQuest(ItemTrackerItem item) { bool hasQuestItem = HasQuestItem(item); int iconSize = CVarGetInteger(CVAR_TRACKER_ITEM("IconSize"), 36); ImGui::BeginGroup(); - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasQuestItem && IsValidSaveFile() ? item.name : item.nameFaded), + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasQuestItem && IsValidSaveFile() ? item.name : item.nameFaded), ImVec2(iconSize, iconSize), ImVec2(0, 0), ImVec2(1, 1)); if (item.id == QUEST_SKULL_TOKEN) { @@ -645,7 +702,9 @@ void DrawItem(ItemTrackerItem item) { bool hasItem = actualItemId != ITEM_NONE; std::string itemName = ""; - if (item.id == ITEM_NONE) { + // Hack fix as RG_MARKET_SHOOTING_GALLERY_KEY is RandomizerGet #255 which collides + // with ITEM_NONE (ItemId #255) due to the lack of a modid to separate them + if (item.name != "ITEM_KEY_SMALL" && item.id == ITEM_NONE) { return; } @@ -671,7 +730,9 @@ void DrawItem(ItemTrackerItem item) { case ITEM_BRACELET: case ITEM_GAUNTLETS_SILVER: case ITEM_GAUNTLETS_GOLD: - actualItemId = CUR_UPG_VALUE(UPG_STRENGTH) == 3 ? ITEM_GAUNTLETS_GOLD : CUR_UPG_VALUE(UPG_STRENGTH) == 2 ? ITEM_GAUNTLETS_SILVER : ITEM_BRACELET; + actualItemId = CUR_UPG_VALUE(UPG_STRENGTH) == 3 ? ITEM_GAUNTLETS_GOLD + : CUR_UPG_VALUE(UPG_STRENGTH) == 2 ? ITEM_GAUNTLETS_SILVER + : ITEM_BRACELET; hasItem = CUR_UPG_VALUE(UPG_STRENGTH) > 0; break; case ITEM_SCALE_SILVER: @@ -730,9 +791,10 @@ void DrawItem(ItemTrackerItem item) { break; case RG_GANON_SOUL: actualItemId = item.id; - hasItem = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_BOSS_SOULS) == RO_BOSS_SOULS_ON_PLUS_GANON ? - Flags_GetRandomizerInf(RAND_INF_GANON_SOUL) : true; - + hasItem = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_BOSS_SOULS) == + RO_BOSS_SOULS_ON_PLUS_GANON + ? Flags_GetRandomizerInf(RAND_INF_GANON_SOUL) + : true; itemName = "Ganon's Soul"; break; @@ -766,23 +828,148 @@ void DrawItem(ItemTrackerItem item) { hasItem = IS_RANDO && Flags_GetRandomizerInf(RAND_INF_FISHING_POLE_FOUND); itemName = "Fishing Pole"; break; + + case RG_GUARD_HOUSE_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_GUARD_HOUSE_KEY_OBTAINED); + itemName = "Guard House Key"; + break; + case RG_MARKET_BAZAAR_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_MARKET_BAZAAR_KEY_OBTAINED); + itemName = "Market Bazaar Key"; + break; + case RG_MARKET_POTION_SHOP_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_MARKET_POTION_SHOP_KEY_OBTAINED); + itemName = "Market Potion Shop Key"; + break; + case RG_MASK_SHOP_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_MASK_SHOP_KEY_OBTAINED); + itemName = "Mask Shop Key"; + break; + case RG_MARKET_SHOOTING_GALLERY_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_MARKET_SHOOTING_GALLERY_KEY_OBTAINED); + itemName = "Market Shooting Gallery Key"; + break; + case RG_BOMBCHU_BOWLING_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_BOMBCHU_BOWLING_KEY_OBTAINED); + itemName = "Bombchu Bowling Key"; + break; + case RG_TREASURE_CHEST_GAME_BUILDING_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_TREASURE_CHEST_GAME_BUILDING_KEY_OBTAINED); + itemName = "Treasure Chest Game Building Key"; + break; + case RG_BOMBCHU_SHOP_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_BOMBCHU_SHOP_KEY_OBTAINED); + itemName = "Bombchu Shop Key"; + break; + case RG_RICHARDS_HOUSE_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_RICHARDS_HOUSE_KEY_OBTAINED); + itemName = "Richards House Key"; + break; + case RG_ALLEY_HOUSE_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_ALLEY_HOUSE_KEY_OBTAINED); + itemName = "Alley House Key"; + break; + case RG_KAK_BAZAAR_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_KAK_BAZAAR_KEY_OBTAINED); + itemName = "Kak Bazaar Key"; + break; + case RG_KAK_POTION_SHOP_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_KAK_POTION_SHOP_KEY_OBTAINED); + itemName = "Kak Potion Shop Key"; + break; + case RG_BOSS_HOUSE_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_BOSS_HOUSE_KEY_OBTAINED); + itemName = "Boss House Key"; + break; + case RG_GRANNYS_POTION_SHOP_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_GRANNYS_POTION_SHOP_KEY_OBTAINED); + itemName = "Granny's Potion Shop Key"; + break; + case RG_SKULLTULA_HOUSE_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_SKULLTULA_HOUSE_KEY_OBTAINED); + itemName = "Skulltula House Key"; + break; + case RG_IMPAS_HOUSE_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_IMPAS_HOUSE_KEY_OBTAINED); + itemName = "Impa's House Key"; + break; + case RG_WINDMILL_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_WINDMILL_KEY_OBTAINED); + itemName = "Windmill Key"; + break; + case RG_KAK_SHOOTING_GALLERY_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_KAK_SHOOTING_GALLERY_KEY_OBTAINED); + itemName = "Kak Shooting Gallery Key"; + break; + case RG_DAMPES_HUT_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_DAMPES_HUT_KEY_OBTAINED); + itemName = "Dampé's Hut Key"; + break; + case RG_TALONS_HOUSE_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_TALONS_HOUSE_KEY_OBTAINED); + itemName = "Talon's House Key"; + break; + case RG_STABLES_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_STABLES_KEY_OBTAINED); + itemName = "Stables Key"; + break; + case RG_BACK_TOWER_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_BACK_TOWER_KEY_OBTAINED); + itemName = "Back Tower Key"; + break; + case RG_HYLIA_LAB_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_HYLIA_LAB_KEY_OBTAINED); + itemName = "Hylia Lab Key"; + break; + case RG_FISHING_HOLE_KEY: + actualItemId = item.id; + hasItem = Flags_GetRandomizerInf(RAND_INF_FISHING_HOLE_KEY_OBTAINED); + itemName = "Fishing Hole Key"; + break; } - if (GameInteractor::IsSaveLoaded() && (hasItem && item.id != actualItemId && actualItemTrackerItemMap.find(actualItemId) != actualItemTrackerItemMap.end())) { + if (GameInteractor::IsSaveLoaded() && + (hasItem && item.id != actualItemId && + actualItemTrackerItemMap.find(actualItemId) != actualItemTrackerItemMap.end())) { item = actualItemTrackerItemMap[actualItemId]; } - + ImGui::BeginGroup(); - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasItem && IsValidSaveFile() ? item.name : item.nameFaded), + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasItem && IsValidSaveFile() ? item.name : item.nameFaded), ImVec2(iconSize, iconSize), ImVec2(0, 0), ImVec2(1, 1)); - + DrawItemCount(item, false); if (item.id >= RG_GOHMA_SOUL && item.id <= RG_GANON_SOUL) { ImVec2 p = ImGui::GetCursorScreenPos(); std::string bossName = itemTrackerBossShortNames[item.id]; - ImGui::SetCursorScreenPos(ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(bossName.c_str()).x / 2), p.y - (iconSize + 13))); + ImGui::SetCursorScreenPos( + ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(bossName.c_str()).x / 2), p.y - (iconSize + 13))); ImGui::PushStyleColor(ImGuiCol_Text, IM_COL_WHITE); ImGui::Text("%s", bossName.c_str()); ImGui::PopStyleColor(); @@ -791,12 +978,23 @@ void DrawItem(ItemTrackerItem item) { if (item.id >= RG_OCARINA_A_BUTTON && item.id <= RG_OCARINA_C_RIGHT_BUTTON) { ImVec2 p = ImGui::GetCursorScreenPos(); std::string ocarinaButtonName = itemTrackerOcarinaButtonShortNames[item.id]; - ImGui::SetCursorScreenPos(ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(ocarinaButtonName.c_str()).x / 2), p.y - (iconSize + 13))); + ImGui::SetCursorScreenPos(ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(ocarinaButtonName.c_str()).x / 2), + p.y - (iconSize + 13))); ImGui::PushStyleColor(ImGuiCol_Text, IM_COL_WHITE); ImGui::Text("%s", ocarinaButtonName.c_str()); ImGui::PopStyleColor(); } + if (item.id >= RG_GUARD_HOUSE_KEY && item.id <= RG_FISHING_HOLE_KEY) { + ImVec2 p = ImGui::GetCursorScreenPos(); + std::string overworldKeyName = itemTrackerOverworldKeyShortNames[item.id]; + ImGui::SetCursorScreenPos(ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(overworldKeyName.c_str()).x / 2), + p.y - (iconSize + 13))); + ImGui::PushStyleColor(ImGuiCol_Text, IM_COL_WHITE); + ImGui::Text("%s", overworldKeyName.c_str()); + ImGui::PopStyleColor(); + } + ImGui::EndGroup(); if (itemName == "") { @@ -807,15 +1005,19 @@ void DrawItem(ItemTrackerItem item) { } void DrawBottle(ItemTrackerItem item) { - uint32_t actualItemId = GameInteractor::IsSaveLoaded() ? (gSaveContext.inventory.items[SLOT(item.id) + item.data]) : false; + uint32_t actualItemId = + GameInteractor::IsSaveLoaded() ? (gSaveContext.inventory.items[SLOT(item.id) + item.data]) : false; bool hasItem = actualItemId != ITEM_NONE; - if (GameInteractor::IsSaveLoaded() && (hasItem && item.id != actualItemId && actualItemTrackerItemMap.find(actualItemId) != actualItemTrackerItemMap.end())) { + if (GameInteractor::IsSaveLoaded() && + (hasItem && item.id != actualItemId && + actualItemTrackerItemMap.find(actualItemId) != actualItemTrackerItemMap.end())) { item = actualItemTrackerItemMap[actualItemId]; } int iconSize = CVarGetInteger(CVAR_TRACKER_ITEM("IconSize"), 36); - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasItem && IsValidSaveFile() ? item.name : item.nameFaded), + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasItem && IsValidSaveFile() ? item.name : item.nameFaded), ImVec2(iconSize, iconSize), ImVec2(0, 0), ImVec2(1, 1)); Tooltip(SohUtils::GetItemName(item.id).c_str()); @@ -827,40 +1029,45 @@ void DrawDungeonItem(ItemTrackerItem item) { uint32_t bitMask = 1 << (item.id - ITEM_KEY_BOSS); // Bitset starts at ITEM_KEY_BOSS == 0. the rest are sequential int iconSize = CVarGetInteger(CVAR_TRACKER_ITEM("IconSize"), 36); bool hasItem = GameInteractor::IsSaveLoaded() ? (bitMask & gSaveContext.inventory.dungeonItems[item.data]) : false; - bool hasSmallKey = GameInteractor::IsSaveLoaded() ? ((gSaveContext.inventory.dungeonKeys[item.data]) >= 0) : false; + bool hasSmallKey = GameInteractor::IsSaveLoaded() ? ((gSaveContext.inventory.dungeonKeys[item.data]) >= 0) : false; ImGui::BeginGroup(); if (itemId == ITEM_KEY_SMALL) { - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasSmallKey && IsValidSaveFile() ? item.name : item.nameFaded), + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasSmallKey && IsValidSaveFile() ? item.name : item.nameFaded), ImVec2(iconSize, iconSize), ImVec2(0, 0), ImVec2(1, 1)); - } - else { - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasItem && IsValidSaveFile() ? item.name : item.nameFaded), + } else { + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasItem && IsValidSaveFile() ? item.name : item.nameFaded), ImVec2(iconSize, iconSize), ImVec2(0, 0), ImVec2(1, 1)); } - if (CheckTracker::IsAreaSpoiled(RandomizerCheckObjects::GetRCAreaBySceneID(static_cast(item.data))) && GameInteractor::IsSaveLoaded()) { + if (CheckTracker::IsAreaSpoiled(RandomizerCheckObjects::GetRCAreaBySceneID(static_cast(item.data))) && + GameInteractor::IsSaveLoaded()) { dungeonColor = (ResourceMgr_IsSceneMasterQuest(item.data) ? IM_COL_PURPLE : IM_COL_LIGHT_YELLOW); } if (itemId == ITEM_KEY_SMALL) { - DrawItemCount(item, !CheckTracker::IsAreaSpoiled(RandomizerCheckObjects::GetRCAreaBySceneID(static_cast(item.data)))); + DrawItemCount(item, !CheckTracker::IsAreaSpoiled( + RandomizerCheckObjects::GetRCAreaBySceneID(static_cast(item.data)))); ImVec2 p = ImGui::GetCursorScreenPos(); - // offset puts the text at the correct level. for some reason, if the save is loaded, the margin is 3 pixels higher only for small keys, so we use 16 then. Otherwise, 13 is where everything else is + // offset puts the text at the correct level. for some reason, if the save is loaded, the margin is 3 pixels + // higher only for small keys, so we use 16 then. Otherwise, 13 is where everything else is int offset = GameInteractor::IsSaveLoaded() ? 16 : 13; std::string dungeonName = itemTrackerDungeonShortNames[item.data]; - ImGui::SetCursorScreenPos(ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(dungeonName.c_str()).x / 2), p.y - (iconSize + offset))); + ImGui::SetCursorScreenPos( + ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(dungeonName.c_str()).x / 2), p.y - (iconSize + offset))); ImGui::PushStyleColor(ImGuiCol_Text, dungeonColor); ImGui::Text("%s", dungeonName.c_str()); ImGui::PopStyleColor(); } - if (itemId == ITEM_DUNGEON_MAP && - (item.data == SCENE_DEKU_TREE || item.data == SCENE_DODONGOS_CAVERN || item.data == SCENE_JABU_JABU || item.data == SCENE_ICE_CAVERN) - ) { + if (itemId == ITEM_DUNGEON_MAP && (item.data == SCENE_DEKU_TREE || item.data == SCENE_DODONGOS_CAVERN || + item.data == SCENE_JABU_JABU || item.data == SCENE_ICE_CAVERN)) { ImVec2 p = ImGui::GetCursorScreenPos(); std::string dungeonName = itemTrackerDungeonShortNames[item.data]; - ImGui::SetCursorScreenPos(ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(dungeonName.c_str()).x / 2), p.y - (iconSize + 13))); + ImGui::SetCursorScreenPos( + ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(dungeonName.c_str()).x / 2), p.y - (iconSize + 13))); ImGui::PushStyleColor(ImGuiCol_Text, dungeonColor); ImGui::Text("%s", dungeonName.c_str()); ImGui::PopStyleColor(); @@ -875,7 +1082,8 @@ void DrawSong(ItemTrackerItem item) { ImVec2 p = ImGui::GetCursorScreenPos(); bool hasSong = HasSong(item); ImGui::SetCursorScreenPos(ImVec2(p.x + 6, p.y)); - ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(hasSong && IsValidSaveFile() ? item.name : item.nameFaded), + ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName( + hasSong && IsValidSaveFile() ? item.name : item.nameFaded), ImVec2(iconSize / 1.5, iconSize), ImVec2(0, 0), ImVec2(1, 1)); Tooltip(SohUtils::GetQuestItemName(item.id).c_str()); } @@ -896,22 +1104,24 @@ void DrawNotes(bool resizeable = false) { } return 0; } - static bool TrackerNotesInputTextMultiline(const char* label, ImVector* itemTrackerNotes, const ImVec2& size = ImVec2(0, 0), - ImGuiInputTextFlags flags = 0) { + static bool TrackerNotesInputTextMultiline(const char* label, ImVector* itemTrackerNotes, + const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0) { IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); - return ImGui::InputTextMultiline(label, itemTrackerNotes->begin(), (size_t)itemTrackerNotes->size(), - size, flags | ImGuiInputTextFlags_CallbackResize, - ItemTrackerNotes::TrackerNotesResizeCallback, - (void*)itemTrackerNotes); + return ImGui::InputTextMultiline(label, itemTrackerNotes->begin(), (size_t)itemTrackerNotes->size(), size, + flags | ImGuiInputTextFlags_CallbackResize, + ItemTrackerNotes::TrackerNotesResizeCallback, (void*)itemTrackerNotes); } }; - ImVec2 size = resizeable ? ImVec2(-FLT_MIN, ImGui::GetContentRegionAvail().y) : ImVec2(((iconSize + iconSpacing) * 6) - 8, 200); + ImVec2 size = resizeable ? ImVec2(-FLT_MIN, ImGui::GetContentRegionAvail().y) + : ImVec2(((iconSize + iconSpacing) * 6) - 8, 200); if (GameInteractor::IsSaveLoaded()) { - if (ItemTrackerNotes::TrackerNotesInputTextMultiline("##ItemTrackerNotes", &itemTrackerNotes, size, ImGuiInputTextFlags_AllowTabInput)) { + if (ItemTrackerNotes::TrackerNotesInputTextMultiline("##ItemTrackerNotes", &itemTrackerNotes, size, + ImGuiInputTextFlags_AllowTabInput)) { notesNeedSave = true; notesIdleFrames = 0; } - if ((ImGui::IsItemDeactivatedAfterEdit() || (notesNeedSave && notesIdleFrames > notesMaxIdleFrames)) && IsValidSaveFile()) { + if ((ImGui::IsItemDeactivatedAfterEdit() || (notesNeedSave && notesIdleFrames > notesMaxIdleFrames)) && + IsValidSaveFile()) { notesNeedSave = false; SaveManager::Instance->SaveSection(gSaveContext.fileNum, itemTrackerSectionId, true); } @@ -938,18 +1148,21 @@ void BeginFloatingWindows(std::string UniqueName, ImGuiWindowFlags flags = 0) { ImGuiWindowFlags windowFlags = flags; if (windowFlags == 0) { - windowFlags |= ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoResize; + windowFlags |= + ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoResize; } if (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_FLOATING) { ImGui::SetNextWindowViewport(ImGui::GetMainViewport()->ID); - windowFlags |= ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar; + windowFlags |= ImGuiWindowFlags_NoDocking | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoTitleBar | + ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_NoScrollbar; if (!CVarGetInteger(CVAR_TRACKER_ITEM("Draggable"), 0)) { windowFlags |= ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoMove; } } - ImGui::PushStyleColor(ImGuiCol_WindowBg, VecFromRGBA8(CVarGetColor(CVAR_TRACKER_ITEM("BgColor.Value"), {0, 0, 0, 0}))); + ImGui::PushStyleColor(ImGuiCol_WindowBg, + VecFromRGBA8(CVarGetColor(CVAR_TRACKER_ITEM("BgColor.Value"), { 0, 0, 0, 0 }))); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0)); ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f); ImGui::Begin(UniqueName.c_str(), nullptr, windowFlags); @@ -968,12 +1181,14 @@ void EndFloatingWindows() { void DrawItemsInRows(std::vector items, int columns = 6) { int iconSize = CVarGetInteger(CVAR_TRACKER_ITEM("IconSize"), 36); int iconSpacing = CVarGetInteger(CVAR_TRACKER_ITEM("IconSpacing"), 12); - int topPadding = (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_WINDOW) ? 20 : 0; + int topPadding = + (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_WINDOW) ? 20 : 0; for (int i = 0; i < items.size(); i++) { int row = i / columns; int column = i % columns; - ImGui::SetCursorPos(ImVec2((column * (iconSize + iconSpacing) + 8), (row * (iconSize + iconSpacing)) + 8 + topPadding)); + ImGui::SetCursorPos( + ImVec2((column * (iconSize + iconSpacing) + 8), (row * (iconSize + iconSpacing)) + 8 + topPadding)); items[i].drawFunc(items[i]); } } @@ -1000,7 +1215,7 @@ void DrawItemsInACircle(std::vector items) { /** * GetDungeonItemsVector - * Loops over dungeons and creates vectors of items in the correct order + * Loops over dungeons and creates vectors of items in the correct order * to then call DrawItemsInRows */ std::vector GetDungeonItemsVector(std::vector dungeons, int columns = 6) { @@ -1010,7 +1225,8 @@ std::vector GetDungeonItemsVector(std::vector rowCount) rowCount = dungeons[i].items.size(); + if (dungeons[i].items.size() > rowCount) + rowCount = dungeons[i].items.size(); } for (int i = 0; i < rowCount; i++) { @@ -1023,7 +1239,8 @@ std::vector GetDungeonItemsVector(std::vector GetDungeonItemsVector(std::vector columns) { - std::vector nextDungeonItems = GetDungeonItemsVector(std::vector(dungeons.begin() + columns, dungeons.end()), columns); + std::vector nextDungeonItems = + GetDungeonItemsVector(std::vector(dungeons.begin() + columns, dungeons.end()), columns); dungeonItems.insert(dungeonItems.end(), nextDungeonItems.begin(), nextDungeonItems.end()); } @@ -1051,7 +1269,7 @@ std::vector GetDungeonItemsVector(std::vectorSaveData("personalNotes", std::string(std::begin(itemTrackerNotes), std::end(itemTrackerNotes)).c_str()); + SaveManager::Instance->SaveData("personalNotes", + std::string(std::begin(itemTrackerNotes), std::end(itemTrackerNotes)).c_str()); } void ItemTrackerLoadFile() { @@ -1230,51 +1489,73 @@ void ItemTrackerWindow::DrawElement() { int iconSpacing = CVarGetInteger(CVAR_TRACKER_ITEM("IconSpacing"), 12); int comboButton1Mask = buttonMap[CVarGetInteger(CVAR_TRACKER_ITEM("ComboButton1"), TRACKER_COMBO_BUTTON_L)]; int comboButton2Mask = buttonMap[CVarGetInteger(CVAR_TRACKER_ITEM("ComboButton2"), TRACKER_COMBO_BUTTON_R)]; - OSContPad* buttonsPressed = std::dynamic_pointer_cast(Ship::Context::GetInstance()->GetControlDeck())->GetPads(); - bool comboButtonsHeld = buttonsPressed != nullptr && buttonsPressed[0].button & comboButton1Mask && buttonsPressed[0].button & comboButton2Mask; - bool isPaused = CVarGetInteger(CVAR_TRACKER_ITEM("ShowOnlyPaused"), 0) == 0 || gPlayState != nullptr && gPlayState->pauseCtx.state > 0; + OSContPad* buttonsPressed = + std::dynamic_pointer_cast(Ship::Context::GetInstance()->GetControlDeck())->GetPads(); + bool comboButtonsHeld = buttonsPressed != nullptr && buttonsPressed[0].button & comboButton1Mask && + buttonsPressed[0].button & comboButton2Mask; + bool isPaused = CVarGetInteger(CVAR_TRACKER_ITEM("ShowOnlyPaused"), 0) == 0 || + gPlayState != nullptr && gPlayState->pauseCtx.state > 0; - if (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_WINDOW || isPaused && (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_ALWAYS ? CVarGetInteger(CVAR_WINDOW("ItemTracker"), 0) : comboButtonsHeld)) { - if ( - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Inventory"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_MAIN_WINDOW) || - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Equipment"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_MAIN_WINDOW) || - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Misc"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_MAIN_WINDOW) || - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_MAIN_WINDOW) || - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Songs"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_MAIN_WINDOW) || - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW) || - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Greg"), SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_MAIN_WINDOW) || - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW) || - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.FishingPole"), SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_MAIN_WINDOW) || - (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Notes"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW) - ) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("WindowType"), TRACKER_WINDOW_FLOATING) == TRACKER_WINDOW_WINDOW || + isPaused && + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_ALWAYS + ? CVarGetInteger(CVAR_WINDOW("ItemTracker"), 0) + : comboButtonsHeld)) { + if ((CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Inventory"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_MAIN_WINDOW) || + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Equipment"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_MAIN_WINDOW) || + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Misc"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_MAIN_WINDOW) || + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_MAIN_WINDOW) || + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Songs"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_MAIN_WINDOW) || + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_MAIN_WINDOW) || + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Greg"), SECTION_DISPLAY_EXTENDED_HIDDEN) == + SECTION_DISPLAY_EXTENDED_MAIN_WINDOW) || + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_MAIN_WINDOW) || + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.FishingPole"), SECTION_DISPLAY_EXTENDED_HIDDEN) == + SECTION_DISPLAY_EXTENDED_MAIN_WINDOW) || + (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Notes"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_MAIN_WINDOW)) { BeginFloatingWindows("Item Tracker##main window"); DrawItemsInRows(mainWindowItems, 6); - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Notes"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_MAIN_WINDOW && CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_ALWAYS) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Notes"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_MAIN_WINDOW && + CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) == + TRACKER_DISPLAY_ALWAYS) { DrawNotes(); } EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Inventory"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Inventory"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_SEPARATE) { BeginFloatingWindows("Inventory Items Tracker"); DrawItemsInRows(inventoryItems); EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Equipment"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Equipment"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_SEPARATE) { BeginFloatingWindows("Equipment Items Tracker"); DrawItemsInRows(equipmentItems, 3); EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Misc"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Misc"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_SEPARATE) { BeginFloatingWindows("Misc Items Tracker"); DrawItemsInRows(miscItems, 4); EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_SEPARATE) { BeginFloatingWindows("Dungeon Rewards Tracker"); if (CVarGetInteger(CVAR_TRACKER_ITEM("DungeonRewardsLayout"), 0)) { ImGui::BeginGroup(); @@ -1289,13 +1570,15 @@ void ItemTrackerWindow::DrawElement() { EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Songs"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Songs"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_SEPARATE) { BeginFloatingWindows("Songs Tracker"); DrawItemsInRows(songItems); EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_SEPARATE) { BeginFloatingWindows("Dungeon Items Tracker"); if (CVarGetInteger(CVAR_TRACKER_ITEM("DungeonItems.Layout"), 1)) { if (CVarGetInteger(CVAR_TRACKER_ITEM("DungeonItems.DisplayMaps"), 1)) { @@ -1309,38 +1592,52 @@ void ItemTrackerWindow::DrawElement() { EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Greg"), SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Greg"), SECTION_DISPLAY_EXTENDED_HIDDEN) == + SECTION_DISPLAY_EXTENDED_SEPARATE) { BeginFloatingWindows("Greg Tracker"); DrawItemsInRows(gregItems); EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_SEPARATE) { BeginFloatingWindows("Triforce Piece Tracker"); DrawItemsInRows(triforcePieces); EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.BossSouls"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.BossSouls"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_SEPARATE) { BeginFloatingWindows("Boss Soul Tracker"); DrawItemsInRows(bossSoulItems); EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.OcarinaButtons"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.OcarinaButtons"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_SEPARATE) { BeginFloatingWindows("Ocarina Button Tracker"); DrawItemsInRows(ocarinaButtonItems); EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.FishingPole"), SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.OverworldKeys"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_SEPARATE) { + BeginFloatingWindows("Overworld Key Tracker"); + DrawItemsInRows(overworldKeyItems); + EndFloatingWindows(); + } + + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.FishingPole"), SECTION_DISPLAY_EXTENDED_HIDDEN) == + SECTION_DISPLAY_EXTENDED_SEPARATE) { BeginFloatingWindows("Fishing Pole Tracker"); DrawItemsInRows(fishingPoleItems); EndFloatingWindows(); } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Notes"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_SEPARATE && CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_ALWAYS) { - ImGui::SetNextWindowSize(ImVec2(400,300), ImGuiCond_FirstUseEver); + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Notes"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_SEPARATE && + CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_ALWAYS) { + ImGui::SetNextWindowSize(ImVec2(400, 300), ImGuiCond_FirstUseEver); BeginFloatingWindows("Personal Notes", ImGuiWindowFlags_NoFocusOnAppearing); DrawNotes(true); EndFloatingWindows(); @@ -1357,22 +1654,52 @@ void ItemTrackerWindow::DrawElement() { } static std::unordered_map itemTrackerCapacityTrackOptions = { - { ITEM_TRACKER_NUMBER_NONE, "No Numbers" }, { ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY, "Current Capacity" }, { ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY, "Current Ammo" }, - { ITEM_TRACKER_NUMBER_CAPACITY, "Current Capacity / Max Capacity" }, { ITEM_TRACKER_NUMBER_AMMO, "Current Ammo / Current Capacity" }}; + { ITEM_TRACKER_NUMBER_NONE, "No Numbers" }, + { ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY, "Current Capacity" }, + { ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY, "Current Ammo" }, + { ITEM_TRACKER_NUMBER_CAPACITY, "Current Capacity / Max Capacity" }, + { ITEM_TRACKER_NUMBER_AMMO, "Current Ammo / Current Capacity" }, +}; static std::unordered_map itemTrackerKeyTrackOptions = { - { KEYS_COLLECTED_MAX, "Collected / Max" }, { KEYS_CURRENT_COLLECTED_MAX, "Current / Collected / Max" }, { KEYS_CURRENT_MAX, "Current / Max" }}; + { KEYS_COLLECTED_MAX, "Collected / Max" }, + { KEYS_CURRENT_COLLECTED_MAX, "Current / Collected / Max" }, + { KEYS_CURRENT_MAX, "Current / Max" }, +}; static std::unordered_map itemTrackerTriforcePieceTrackOptions = { - { TRIFORCE_PIECE_COLLECTED_REQUIRED, "Collected / Required" }, { TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX, "Collected / Required / Max" }}; -static std::unordered_map windowTypes = {{ TRACKER_WINDOW_FLOATING, "Floating" }, { TRACKER_WINDOW_WINDOW, "Window" }}; -static std::unordered_map displayModes = {{ TRACKER_DISPLAY_ALWAYS, "Always" }, { TRACKER_DISPLAY_COMBO_BUTTON, "Combo Button Hold" }}; -static std::unordered_map buttons = {{ TRACKER_COMBO_BUTTON_A, "A" }, { TRACKER_COMBO_BUTTON_B, "B"}, { TRACKER_COMBO_BUTTON_C_UP, "C-Up"}, - { TRACKER_COMBO_BUTTON_C_DOWN, "C-Down" }, { TRACKER_COMBO_BUTTON_C_LEFT, "C-Left" }, { TRACKER_COMBO_BUTTON_C_RIGHT, "C-Right" }, { TRACKER_COMBO_BUTTON_L, "L" }, - { TRACKER_COMBO_BUTTON_Z, "Z" }, { TRACKER_COMBO_BUTTON_R, "R" }, { TRACKER_COMBO_BUTTON_START, "Start" }, { TRACKER_COMBO_BUTTON_D_UP, "D-Up" }, - { TRACKER_COMBO_BUTTON_D_DOWN, "D-Down" }, { TRACKER_COMBO_BUTTON_D_LEFT, "D-Left" }, { TRACKER_COMBO_BUTTON_D_RIGHT, "D-Right" }}; -static std::unordered_map displayTypes = {{ SECTION_DISPLAY_HIDDEN, "Hidden" }, { SECTION_DISPLAY_MAIN_WINDOW, "Main Window" }, { SECTION_DISPLAY_SEPARATE, "Separate" }}; -static std::unordered_map extendedDisplayTypes = {{ SECTION_DISPLAY_EXTENDED_HIDDEN, "Hidden" }, - { SECTION_DISPLAY_EXTENDED_MAIN_WINDOW, "Main Window" }, { SECTION_DISPLAY_EXTENDED_MISC_WINDOW, "Misc Window" }, { SECTION_DISPLAY_EXTENDED_SEPARATE, "Separate" }}; -static std::unordered_map minimalDisplayTypes = {{ SECTION_DISPLAY_MINIMAL_HIDDEN, "Hidden" }, { SECTION_DISPLAY_MINIMAL_SEPARATE, "Separate" }}; + { TRIFORCE_PIECE_COLLECTED_REQUIRED, "Collected / Required" }, + { TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX, "Collected / Required / Max" }, +}; +static std::unordered_map windowTypes = { + { TRACKER_WINDOW_FLOATING, "Floating" }, + { TRACKER_WINDOW_WINDOW, "Window" }, +}; +static std::unordered_map displayModes = { + { TRACKER_DISPLAY_ALWAYS, "Always" }, + { TRACKER_DISPLAY_COMBO_BUTTON, "Combo Button Hold" }, +}; +static std::unordered_map buttons = { + { TRACKER_COMBO_BUTTON_A, "A" }, { TRACKER_COMBO_BUTTON_B, "B" }, + { TRACKER_COMBO_BUTTON_C_UP, "C-Up" }, { TRACKER_COMBO_BUTTON_C_DOWN, "C-Down" }, + { TRACKER_COMBO_BUTTON_C_LEFT, "C-Left" }, { TRACKER_COMBO_BUTTON_C_RIGHT, "C-Right" }, + { TRACKER_COMBO_BUTTON_L, "L" }, { TRACKER_COMBO_BUTTON_Z, "Z" }, + { TRACKER_COMBO_BUTTON_R, "R" }, { TRACKER_COMBO_BUTTON_START, "Start" }, + { TRACKER_COMBO_BUTTON_D_UP, "D-Up" }, { TRACKER_COMBO_BUTTON_D_DOWN, "D-Down" }, + { TRACKER_COMBO_BUTTON_D_LEFT, "D-Left" }, { TRACKER_COMBO_BUTTON_D_RIGHT, "D-Right" }, +}; +static std::unordered_map displayTypes = { + { SECTION_DISPLAY_HIDDEN, "Hidden" }, + { SECTION_DISPLAY_MAIN_WINDOW, "Main Window" }, + { SECTION_DISPLAY_SEPARATE, "Separate" }, +}; +static std::unordered_map extendedDisplayTypes = { + { SECTION_DISPLAY_EXTENDED_HIDDEN, "Hidden" }, + { SECTION_DISPLAY_EXTENDED_MAIN_WINDOW, "Main Window" }, + { SECTION_DISPLAY_EXTENDED_MISC_WINDOW, "Misc Window" }, + { SECTION_DISPLAY_EXTENDED_SEPARATE, "Separate" }, +}; +static std::unordered_map minimalDisplayTypes = { + { SECTION_DISPLAY_MINIMAL_HIDDEN, "Hidden" }, { SECTION_DISPLAY_MINIMAL_SEPARATE, "Separate" } +}; void ItemTrackerSettingsWindow::DrawElement() { ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, { 8.0f, 8.0f }); @@ -1384,12 +1711,15 @@ void ItemTrackerSettingsWindow::DrawElement() { ImGui::TableNextColumn(); ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); CVarColorPicker("Background Color##gItemTrackerBgColor", CVAR_TRACKER_ITEM("BgColor"), { 0, 0, 0, 0 }, true, - ColorPickerRandomButton | ColorPickerResetButton, THEME_COLOR); + ColorPickerRandomButton | ColorPickerResetButton, THEME_COLOR); ImGui::PopItemWidth(); - if (CVarCombobox("Window Type", CVAR_TRACKER_ITEM("WindowType"), windowTypes, ComboboxOptions() - .DefaultIndex(TRACKER_WINDOW_FLOATING).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Window Type", CVAR_TRACKER_ITEM("WindowType"), windowTypes, + ComboboxOptions() + .DefaultIndex(TRACKER_WINDOW_FLOATING) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } @@ -1397,146 +1727,229 @@ void ItemTrackerSettingsWindow::DrawElement() { if (CVarCheckbox("Enable Dragging", CVAR_TRACKER_ITEM("Draggable"), CheckboxOptions().Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCheckbox("Only enable while paused", CVAR_TRACKER_ITEM("ShowOnlyPaused"), CheckboxOptions().Color(THEME_COLOR))) { + if (CVarCheckbox("Only enable while paused", CVAR_TRACKER_ITEM("ShowOnlyPaused"), + CheckboxOptions().Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Display Mode", CVAR_TRACKER_ITEM("DisplayType.Main"), displayModes, ComboboxOptions() - .DefaultIndex(TRACKER_DISPLAY_ALWAYS).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Display Mode", CVAR_TRACKER_ITEM("DisplayType.Main"), displayModes, + ComboboxOptions() + .DefaultIndex(TRACKER_DISPLAY_ALWAYS) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_COMBO_BUTTON) { - if (CVarCombobox("Combo Button 1", CVAR_TRACKER_ITEM("ComboButton1"), buttons, ComboboxOptions() - .DefaultIndex(TRACKER_COMBO_BUTTON_L).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) == + TRACKER_DISPLAY_COMBO_BUTTON) { + if (CVarCombobox("Combo Button 1", CVAR_TRACKER_ITEM("ComboButton1"), buttons, + ComboboxOptions() + .DefaultIndex(TRACKER_COMBO_BUTTON_L) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Combo Button 2", CVAR_TRACKER_ITEM("ComboButton2"), buttons, ComboboxOptions() - .DefaultIndex(TRACKER_COMBO_BUTTON_R).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Combo Button 2", CVAR_TRACKER_ITEM("ComboButton2"), buttons, + ComboboxOptions() + .DefaultIndex(TRACKER_COMBO_BUTTON_R) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } } } ImGui::Separator(); - CVarSliderInt("Icon size : %dpx", CVAR_TRACKER_ITEM("IconSize"), IntSliderOptions().Min(25).Max(128).DefaultValue(36).Color(THEME_COLOR)); - CVarSliderInt("Icon margins : %dpx", CVAR_TRACKER_ITEM("IconSpacing"), IntSliderOptions().Min(-5).Max(50).DefaultValue(12).Color(THEME_COLOR)); - CVarSliderInt("Text size : %dpx", CVAR_TRACKER_ITEM("TextSize"), IntSliderOptions().Min(1).Max(30).DefaultValue(13).Color(THEME_COLOR)); - + CVarSliderInt("Icon size : %dpx", CVAR_TRACKER_ITEM("IconSize"), + IntSliderOptions().Min(25).Max(128).DefaultValue(36).Color(THEME_COLOR)); + CVarSliderInt("Icon margins : %dpx", CVAR_TRACKER_ITEM("IconSpacing"), + IntSliderOptions().Min(-5).Max(50).DefaultValue(12).Color(THEME_COLOR)); + CVarSliderInt("Text size : %dpx", CVAR_TRACKER_ITEM("TextSize"), + IntSliderOptions().Min(1).Max(30).DefaultValue(13).Color(THEME_COLOR)); + ImGui::NewLine(); - CVarCombobox("Ammo/Capacity Tracking", CVAR_TRACKER_ITEM("ItemCountType"), itemTrackerCapacityTrackOptions, ComboboxOptions() - .DefaultIndex(ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY).ComponentAlignment(ComponentAlignments::Left) - .LabelPosition(LabelPositions::Above).Color(THEME_COLOR) - .Tooltip("Customize what the numbers under each item are tracking." - "\n\nNote: items without capacity upgrades will track ammo even in capacity mode")); - if (CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY) == ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY || CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY) == ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY) { - if (CVarCheckbox("Align count to left side", CVAR_TRACKER_ITEM("ItemCountAlignLeft"), CheckboxOptions().Color(THEME_COLOR))) { + CVarCombobox("Ammo/Capacity Tracking", CVAR_TRACKER_ITEM("ItemCountType"), itemTrackerCapacityTrackOptions, + ComboboxOptions() + .DefaultIndex(ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY) + .ComponentAlignment(ComponentAlignments::Left) + .LabelPosition(LabelPositions::Above) + .Color(THEME_COLOR) + .Tooltip("Customize what the numbers under each item are tracking." + "\n\nNote: items without capacity upgrades will track ammo even in capacity mode")); + if (CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY) == + ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY || + CVarGetInteger(CVAR_TRACKER_ITEM("ItemCountType"), ITEM_TRACKER_NUMBER_CURRENT_CAPACITY_ONLY) == + ITEM_TRACKER_NUMBER_CURRENT_AMMO_ONLY) { + if (CVarCheckbox("Align count to left side", CVAR_TRACKER_ITEM("ItemCountAlignLeft"), + CheckboxOptions().Color(THEME_COLOR))) { shouldUpdateVectors = true; } } - CVarCombobox("Key Count Tracking", CVAR_TRACKER_ITEM("KeyCounts"), itemTrackerKeyTrackOptions, ComboboxOptions() - .DefaultIndex(KEYS_COLLECTED_MAX).ComponentAlignment(ComponentAlignments::Left) - .LabelPosition(LabelPositions::Above).Color(THEME_COLOR) - .Tooltip("Customize what numbers are shown for key tracking.")); + CVarCombobox("Key Count Tracking", CVAR_TRACKER_ITEM("KeyCounts"), itemTrackerKeyTrackOptions, + ComboboxOptions() + .DefaultIndex(KEYS_COLLECTED_MAX) + .ComponentAlignment(ComponentAlignments::Left) + .LabelPosition(LabelPositions::Above) + .Color(THEME_COLOR) + .Tooltip("Customize what numbers are shown for key tracking.")); - CVarCombobox("Triforce Piece Count Tracking", CVAR_TRACKER_ITEM("TriforcePieceCounts"), itemTrackerTriforcePieceTrackOptions, ComboboxOptions() - .DefaultIndex(TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX).ComponentAlignment(ComponentAlignments::Left) - .LabelPosition(LabelPositions::Above).Color(THEME_COLOR) - .Tooltip("Customize what numbers are shown for triforce piece tracking.")); + CVarCombobox("Triforce Piece Count Tracking", CVAR_TRACKER_ITEM("TriforcePieceCounts"), + itemTrackerTriforcePieceTrackOptions, + ComboboxOptions() + .DefaultIndex(TRIFORCE_PIECE_COLLECTED_REQUIRED_MAX) + .ComponentAlignment(ComponentAlignments::Left) + .LabelPosition(LabelPositions::Above) + .Color(THEME_COLOR) + .Tooltip("Customize what numbers are shown for triforce piece tracking.")); ImGui::TableNextColumn(); - if (CVarCombobox("Inventory", CVAR_TRACKER_ITEM("DisplayType.Inventory"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Inventory", CVAR_TRACKER_ITEM("DisplayType.Inventory"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Equipment", CVAR_TRACKER_ITEM("DisplayType.Equipment"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Equipment", CVAR_TRACKER_ITEM("DisplayType.Equipment"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Misc", CVAR_TRACKER_ITEM("DisplayType.Misc"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Misc", CVAR_TRACKER_ITEM("DisplayType.Misc"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Dungeon Rewards", CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Dungeon Rewards", CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), SECTION_DISPLAY_MAIN_WINDOW) == SECTION_DISPLAY_SEPARATE) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonRewards"), SECTION_DISPLAY_MAIN_WINDOW) == + SECTION_DISPLAY_SEPARATE) { if (CVarCheckbox("Circle display", CVAR_TRACKER_ITEM("DungeonRewardsLayout"))) { shouldUpdateVectors = true; } } - if (CVarCombobox("Songs", CVAR_TRACKER_ITEM("DisplayType.Songs"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Songs", CVAR_TRACKER_ITEM("DisplayType.Songs"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_MAIN_WINDOW) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Dungeon Items", CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_HIDDEN).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Dungeon Items", CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) != SECTION_DISPLAY_HIDDEN) { - if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_SEPARATE) { - if (CVarCheckbox("Horizontal display", CVAR_TRACKER_ITEM("DungeonItems.Layout"), CheckboxOptions().DefaultValue(true).Color(THEME_COLOR))) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) != + SECTION_DISPLAY_HIDDEN) { + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.DungeonItems"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_SEPARATE) { + if (CVarCheckbox("Horizontal display", CVAR_TRACKER_ITEM("DungeonItems.Layout"), + CheckboxOptions().DefaultValue(true).Color(THEME_COLOR))) { shouldUpdateVectors = true; } } - if (CVarCheckbox("Maps and compasses", CVAR_TRACKER_ITEM("DungeonItems.DisplayMaps"), CheckboxOptions().DefaultValue(true).Color(THEME_COLOR))) { + if (CVarCheckbox("Maps and compasses", CVAR_TRACKER_ITEM("DungeonItems.DisplayMaps"), + CheckboxOptions().DefaultValue(true).Color(THEME_COLOR))) { shouldUpdateVectors = true; } } - if (CVarCombobox("Greg", CVAR_TRACKER_ITEM("DisplayType.Greg"), extendedDisplayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_EXTENDED_HIDDEN).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Greg", CVAR_TRACKER_ITEM("DisplayType.Greg"), extendedDisplayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_EXTENDED_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Triforce Pieces", CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_HIDDEN).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Triforce Pieces", CVAR_TRACKER_ITEM("DisplayType.TriforcePieces"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Boss Souls", CVAR_TRACKER_ITEM("DisplayType.BossSouls"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_HIDDEN).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Boss Souls", CVAR_TRACKER_ITEM("DisplayType.BossSouls"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Ocarina Buttons", CVAR_TRACKER_ITEM("DisplayType.OcarinaButtons"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_HIDDEN).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Ocarina Buttons", CVAR_TRACKER_ITEM("DisplayType.OcarinaButtons"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Fishing Pole", CVAR_TRACKER_ITEM("DisplayType.FishingPole"), extendedDisplayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_EXTENDED_HIDDEN).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Overworld Keys", CVAR_TRACKER_ITEM("DisplayType.OverworldKeys"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCombobox("Total Checks", "gTrackers.ItemTracker.TotalChecks.DisplayType", minimalDisplayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_MINIMAL_HIDDEN).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Fishing Pole", CVAR_TRACKER_ITEM("DisplayType.FishingPole"), extendedDisplayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_EXTENDED_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { + shouldUpdateVectors = true; + } + + if (CVarCombobox("Total Checks", "gTrackers.ItemTracker.TotalChecks.DisplayType", minimalDisplayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_MINIMAL_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.Main"), TRACKER_DISPLAY_ALWAYS) == TRACKER_DISPLAY_ALWAYS) { - if (CVarCombobox("Personal notes", CVAR_TRACKER_ITEM("DisplayType.Notes"), displayTypes, ComboboxOptions() - .DefaultIndex(SECTION_DISPLAY_HIDDEN).ComponentAlignment(ComponentAlignments::Right) - .LabelPosition(LabelPositions::Far).Color(THEME_COLOR))) { + if (CVarCombobox("Personal notes", CVAR_TRACKER_ITEM("DisplayType.Notes"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { shouldUpdateVectors = true; } } - CVarCheckbox("Show Hookshot Identifiers", CVAR_TRACKER_ITEM("HookshotIdentifier"), CheckboxOptions() - .Tooltip("Shows an 'H' or an 'L' to more easiely distinguish between Hookshot and Longshot.").Color(THEME_COLOR)); + CVarCheckbox("Show Hookshot Identifiers", CVAR_TRACKER_ITEM("HookshotIdentifier"), + CheckboxOptions() + .Tooltip("Shows an 'H' or an 'L' to more easiely distinguish between Hookshot and Longshot.") + .Color(THEME_COLOR)); ImGui::PopStyleVar(1); ImGui::EndTable(); diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.h b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.h index 5405b1ea2..55f7b8974 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.h +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.h @@ -19,15 +19,11 @@ bool HasSong(ItemTrackerItem); bool HasQuestItem(ItemTrackerItem); bool HasEquipment(ItemTrackerItem); -#define ITEM_TRACKER_ITEM(id, data, drawFunc) \ - { \ - id, #id, #id "_Faded", data, drawFunc \ - } +#define ITEM_TRACKER_ITEM(id, data, drawFunc) \ + { id, #id, #id "_Faded", data, drawFunc } -#define ITEM_TRACKER_ITEM_CUSTOM(id, name, nameFaded, data, drawFunc)\ - { \ - id, #name, #nameFaded "_Faded", data, drawFunc \ - } +#define ITEM_TRACKER_ITEM_CUSTOM(id, name, nameFaded, data, drawFunc) \ + { id, #name, #nameFaded "_Faded", data, drawFunc } typedef struct ItemTrackerDungeon { uint32_t id; @@ -39,9 +35,9 @@ class ItemTrackerSettingsWindow : public Ship::GuiWindow { using GuiWindow::GuiWindow; protected: - void InitElement() override {}; + void InitElement() override{}; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; class ItemTrackerWindow : public Ship::GuiWindow { @@ -49,8 +45,8 @@ class ItemTrackerWindow : public Ship::GuiWindow { using GuiWindow::GuiWindow; void Draw() override; -protected: + protected: void InitElement() override; void DrawElement() override; - void UpdateElement() override {}; + void UpdateElement() override{}; }; \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/savefile.cpp b/soh/soh/Enhancements/randomizer/savefile.cpp index fba7c688b..4753bb4b4 100644 --- a/soh/soh/Enhancements/randomizer/savefile.cpp +++ b/soh/soh/Enhancements/randomizer/savefile.cpp @@ -32,9 +32,9 @@ void StartingItemGive(GetItemEntry getItemEntry, RandomizerCheck randomizerCheck } } -// RANDOTODO replace most of these GiveLink functions with calls to +// RANDOTODO: Replace most of these GiveLink functions with calls to // Item_Give in z_parameter, we'll need to update Item_Give to ensure -// nothing breaks when calling it without a valid play first +// nothing breaks when calling it without a valid play first. void GiveLinkRupees(int numOfRupees) { int maxRupeeCount = 0; if (CUR_UPG_VALUE(UPG_WALLET) == 0) { @@ -101,12 +101,11 @@ void GiveLinksPocketItem() { if (Randomizer_GetSettingValue(RSK_LINKS_POCKET) != RO_LINKS_POCKET_NOTHING) { GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_LINKS_POCKET, (GetItemID)RG_NONE); StartingItemGive(getItemEntry, RC_LINKS_POCKET); - // If we re-add the above, we'll get the item on save creation, now it's given on first load + // If we re-add the above, we'll get the item on save creation, now it's given on first load. Flags_SetRandomizerInf(RAND_INF_LINKS_POCKET); } } - void SetStartingItems() { if (Randomizer_GetSettingValue(RSK_STARTING_KOKIRI_SWORD)) Item_Give(NULL, ITEM_SWORD_KOKIRI); @@ -174,40 +173,40 @@ void SetStartingItems() { } if (Randomizer_GetSettingValue(RSK_KEYSANITY) == RO_DUNGEON_ITEM_LOC_STARTWITH) { - gSaveContext.inventory.dungeonKeys[SCENE_FOREST_TEMPLE] = FOREST_TEMPLE_SMALL_KEY_MAX; // Forest - gSaveContext.ship.stats.dungeonKeys[SCENE_FOREST_TEMPLE] = FOREST_TEMPLE_SMALL_KEY_MAX; // Forest - gSaveContext.inventory.dungeonKeys[SCENE_FIRE_TEMPLE] = FIRE_TEMPLE_SMALL_KEY_MAX; // Fire - gSaveContext.ship.stats.dungeonKeys[SCENE_FIRE_TEMPLE] = FIRE_TEMPLE_SMALL_KEY_MAX; // Fire - gSaveContext.inventory.dungeonKeys[SCENE_WATER_TEMPLE] = WATER_TEMPLE_SMALL_KEY_MAX; // Water - gSaveContext.ship.stats.dungeonKeys[SCENE_WATER_TEMPLE] = WATER_TEMPLE_SMALL_KEY_MAX; // Water - gSaveContext.inventory.dungeonKeys[SCENE_SPIRIT_TEMPLE] = SPIRIT_TEMPLE_SMALL_KEY_MAX; // Spirit - gSaveContext.ship.stats.dungeonKeys[SCENE_SPIRIT_TEMPLE] = SPIRIT_TEMPLE_SMALL_KEY_MAX; // Spirit - gSaveContext.inventory.dungeonKeys[SCENE_SHADOW_TEMPLE] = SHADOW_TEMPLE_SMALL_KEY_MAX; // Shadow - gSaveContext.ship.stats.dungeonKeys[SCENE_SHADOW_TEMPLE] = SHADOW_TEMPLE_SMALL_KEY_MAX; // Shadow - gSaveContext.inventory.dungeonKeys[SCENE_BOTTOM_OF_THE_WELL] = BOTTOM_OF_THE_WELL_SMALL_KEY_MAX; // BotW - gSaveContext.ship.stats.dungeonKeys[SCENE_BOTTOM_OF_THE_WELL] = BOTTOM_OF_THE_WELL_SMALL_KEY_MAX; // BotW + gSaveContext.inventory.dungeonKeys[SCENE_FOREST_TEMPLE] = FOREST_TEMPLE_SMALL_KEY_MAX; // Forest + gSaveContext.ship.stats.dungeonKeys[SCENE_FOREST_TEMPLE] = FOREST_TEMPLE_SMALL_KEY_MAX; // Forest + gSaveContext.inventory.dungeonKeys[SCENE_FIRE_TEMPLE] = FIRE_TEMPLE_SMALL_KEY_MAX; // Fire + gSaveContext.ship.stats.dungeonKeys[SCENE_FIRE_TEMPLE] = FIRE_TEMPLE_SMALL_KEY_MAX; // Fire + gSaveContext.inventory.dungeonKeys[SCENE_WATER_TEMPLE] = WATER_TEMPLE_SMALL_KEY_MAX; // Water + gSaveContext.ship.stats.dungeonKeys[SCENE_WATER_TEMPLE] = WATER_TEMPLE_SMALL_KEY_MAX; // Water + gSaveContext.inventory.dungeonKeys[SCENE_SPIRIT_TEMPLE] = SPIRIT_TEMPLE_SMALL_KEY_MAX; // Spirit + gSaveContext.ship.stats.dungeonKeys[SCENE_SPIRIT_TEMPLE] = SPIRIT_TEMPLE_SMALL_KEY_MAX; // Spirit + gSaveContext.inventory.dungeonKeys[SCENE_SHADOW_TEMPLE] = SHADOW_TEMPLE_SMALL_KEY_MAX; // Shadow + gSaveContext.ship.stats.dungeonKeys[SCENE_SHADOW_TEMPLE] = SHADOW_TEMPLE_SMALL_KEY_MAX; // Shadow + gSaveContext.inventory.dungeonKeys[SCENE_BOTTOM_OF_THE_WELL] = BOTTOM_OF_THE_WELL_SMALL_KEY_MAX; // BotW + gSaveContext.ship.stats.dungeonKeys[SCENE_BOTTOM_OF_THE_WELL] = BOTTOM_OF_THE_WELL_SMALL_KEY_MAX; // BotW gSaveContext.inventory.dungeonKeys[SCENE_GERUDO_TRAINING_GROUND] = GERUDO_TRAINING_GROUND_SMALL_KEY_MAX; // GTG gSaveContext.ship.stats.dungeonKeys[SCENE_GERUDO_TRAINING_GROUND] = GERUDO_TRAINING_GROUND_SMALL_KEY_MAX; // GTG - gSaveContext.inventory.dungeonKeys[SCENE_INSIDE_GANONS_CASTLE] = GANONS_CASTLE_SMALL_KEY_MAX; // Ganon - gSaveContext.ship.stats.dungeonKeys[SCENE_INSIDE_GANONS_CASTLE] = GANONS_CASTLE_SMALL_KEY_MAX; // Ganon + gSaveContext.inventory.dungeonKeys[SCENE_INSIDE_GANONS_CASTLE] = GANONS_CASTLE_SMALL_KEY_MAX; // Ganon + gSaveContext.ship.stats.dungeonKeys[SCENE_INSIDE_GANONS_CASTLE] = GANONS_CASTLE_SMALL_KEY_MAX; // Ganon } else if (Randomizer_GetSettingValue(RSK_KEYSANITY) == RO_DUNGEON_ITEM_LOC_VANILLA) { // Logic cannot handle vanilla key layout in some dungeons // this is because vanilla expects the dungeon major item to be // locked behind the keys, which is not always true in rando. - // We can resolve this by starting with some extra keys + // We can resolve this by starting with some extra keys. if (ResourceMgr_IsSceneMasterQuest(SCENE_SPIRIT_TEMPLE)) { - // MQ Spirit needs 3 keys + // MQ Spirit needs 3 keys. gSaveContext.inventory.dungeonKeys[SCENE_SPIRIT_TEMPLE] = 3; gSaveContext.ship.stats.dungeonKeys[SCENE_SPIRIT_TEMPLE] = 3; } } if (Randomizer_GetSettingValue(RSK_BOSS_KEYSANITY) == RO_DUNGEON_ITEM_LOC_STARTWITH) { - gSaveContext.inventory.dungeonItems[SCENE_FOREST_TEMPLE] |= 1; // Forest - gSaveContext.inventory.dungeonItems[SCENE_FIRE_TEMPLE] |= 1; // Fire - gSaveContext.inventory.dungeonItems[SCENE_WATER_TEMPLE] |= 1; // Water + gSaveContext.inventory.dungeonItems[SCENE_FOREST_TEMPLE] |= 1; // Forest + gSaveContext.inventory.dungeonItems[SCENE_FIRE_TEMPLE] |= 1; // Fire + gSaveContext.inventory.dungeonItems[SCENE_WATER_TEMPLE] |= 1; // Water gSaveContext.inventory.dungeonItems[SCENE_SPIRIT_TEMPLE] |= 1; // Spirit - gSaveContext.inventory.dungeonItems[SCENE_SHADOW_TEMPLE] |= 1; // Shadow + gSaveContext.inventory.dungeonItems[SCENE_SHADOW_TEMPLE] |= 1; // Shadow } if (Randomizer_GetSettingValue(RSK_GANONS_BOSS_KEY) == RO_GANON_BOSS_KEY_STARTWITH) { @@ -222,10 +221,10 @@ extern "C" void Randomizer_InitSaveFile() { // Starts pending ice traps out at 0 before potentially incrementing them down the line. gSaveContext.ship.pendingIceTrapCount = 0; - // Reset triforce pieces collected + // Reset triforce pieces collected. gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected = 0; - // Set Cutscene flags and texts to skip them + // Set Cutscene flags and texts to skip them. Flags_SetEventChkInf(EVENTCHKINF_FIRST_SPOKE_TO_MIDO); Flags_SetInfTable(INFTABLE_SPOKE_TO_KAEPORA_IN_LAKE_HYLIA); Flags_SetEventChkInf(EVENTCHKINF_SHEIK_SPAWNED_AT_MASTER_SWORD_PEDESTAL); @@ -234,7 +233,7 @@ extern "C" void Randomizer_InitSaveFile() { Flags_SetEventChkInf(EVENTCHKINF_WATCHED_GANONS_CASTLE_COLLAPSE_CAUGHT_BY_GERUDO); Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_NABOORU_IN_SPIRIT_TEMPLE); - // Go away ruto (water temple first cutscene) + // Go away Ruto (Water Temple first cutscene). gSaveContext.sceneFlags[SCENE_WATER_TEMPLE].swch |= (1 << 0x10); if (Randomizer_GetSettingValue(RSK_SHUFFLE_OCARINA_BUTTONS) == RO_GENERIC_OFF) { @@ -260,7 +259,7 @@ extern "C" void Randomizer_InitSaveFile() { // Give Link's pocket item GiveLinksPocketItem(); - // remove One Time scrubs with scrubsanity off + // 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); Flags_SetRandomizerInf(RAND_INF_SCRUBS_PURCHASED_LW_DEKU_SCRUB_GROTTO_FRONT); @@ -272,7 +271,7 @@ extern "C" void Randomizer_InitSaveFile() { case RO_AGE_ADULT: // Adult gSaveContext.linkAge = LINK_AGE_ADULT; gSaveContext.entranceIndex = ENTR_TEMPLE_OF_TIME_WARP_PAD; - gSaveContext.savedSceneNum = SCENE_LON_LON_RANCH; // Set scene num manually to ToT + gSaveContext.savedSceneNum = SCENE_LON_LON_RANCH; // Set scene num manually to ToT. break; case RO_AGE_CHILD: // Child gSaveContext.linkAge = LINK_AGE_CHILD; @@ -284,17 +283,13 @@ extern "C" void Randomizer_InitSaveFile() { if (Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS)) { // Override the spawn entrance so entrance rando can take control, - // and to prevent remember save location from breaking inital spawn + // and to prevent remember save location from breaking initial spawn. gSaveContext.entranceIndex = -1; } - for (auto trialFlag : { EVENTCHKINF_COMPLETED_LIGHT_TRIAL, - EVENTCHKINF_COMPLETED_FOREST_TRIAL, - EVENTCHKINF_COMPLETED_FIRE_TRIAL, - EVENTCHKINF_COMPLETED_WATER_TRIAL, - EVENTCHKINF_COMPLETED_SPIRIT_TRIAL, - EVENTCHKINF_COMPLETED_SHADOW_TRIAL } - ) { + for (auto trialFlag : { EVENTCHKINF_COMPLETED_LIGHT_TRIAL, EVENTCHKINF_COMPLETED_FOREST_TRIAL, + EVENTCHKINF_COMPLETED_FIRE_TRIAL, EVENTCHKINF_COMPLETED_WATER_TRIAL, + EVENTCHKINF_COMPLETED_SPIRIT_TRIAL, EVENTCHKINF_COMPLETED_SHADOW_TRIAL }) { if (!OTRGlobals::Instance->gRandomizer->IsTrialRequired(trialFlag)) { Flags_SetEventChkInf(trialFlag); } @@ -304,24 +299,25 @@ extern "C" void Randomizer_InitSaveFile() { GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_SONG_FROM_IMPA, (GetItemID)RG_ZELDAS_LULLABY); StartingItemGive(getItemEntry, RC_SONG_FROM_IMPA); - // malon/talon back at ranch + // Malon/Talon back at ranch. Flags_SetEventChkInf(EVENTCHKINF_OBTAINED_POCKET_EGG); + Flags_SetRandomizerInf(RAND_INF_WEIRD_EGG); Flags_SetEventChkInf(EVENTCHKINF_TALON_WOKEN_IN_CASTLE); Flags_SetEventChkInf(EVENTCHKINF_TALON_RETURNED_FROM_CASTLE); // Set "Got Zelda's Letter" flag. Also ensures Saria is back at SFM. Flags_SetEventChkInf(EVENTCHKINF_OBTAINED_ZELDAS_LETTER); + Flags_SetRandomizerInf(RAND_INF_ZELDAS_LETTER); Flags_SetRandomizerInf(RAND_INF_CHILD_TRADES_HAS_LETTER_ZELDA); - // Got item from impa + // Got item from Impa. Flags_SetEventChkInf(EVENTCHKINF_LEARNED_ZELDAS_LULLABY); - gSaveContext.sceneFlags[SCENE_HYRULE_CASTLE].swch |= (1 << 0x4); // move milk crates in hyrule castle to moat + gSaveContext.sceneFlags[SCENE_HYRULE_CASTLE].swch |= (1 << 0x4); // Move milk crates in Hyrule Castle to moat. - // 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) + // 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) { @@ -336,8 +332,8 @@ extern "C" void Randomizer_InitSaveFile() { Flags_SetEventChkInf(EVENTCHKINF_EPONA_OBTAINED); } - // Open lowest Vanilla Fire Temple locked door (to prevent key logic lockouts) - // Not done on keysanity since this lockout is a non issue when Fire keys can be found outside the temple + // Open lowest Vanilla Fire Temple locked door (to prevent key logic lockouts). + // Not done on Keysanity since this lockout is a non-issue when Fire Keys can be found outside the temple. u8 keysanity = Randomizer_GetSettingValue(RSK_KEYSANITY) == RO_DUNGEON_ITEM_LOC_ANYWHERE || Randomizer_GetSettingValue(RSK_KEYSANITY) == RO_DUNGEON_ITEM_LOC_OVERWORLD || Randomizer_GetSettingValue(RSK_KEYSANITY) == RO_DUNGEON_ITEM_LOC_ANY_DUNGEON; @@ -345,14 +341,14 @@ extern "C" void Randomizer_InitSaveFile() { gSaveContext.sceneFlags[SCENE_FIRE_TEMPLE].swch |= (1 << 0x17); } - // Opens locked Water Temple door in vanilla to prevent softlocks - // West door on the middle level that leads to the water raising thing - // Happens in 3DS rando and N64 rando as well + // Opens locked Water Temple door in vanilla to prevent softlocks. + // West door on the middle level that leads to the water raising thing. + // Happens in 3DS rando and N64 rando as well. if (!ResourceMgr_IsSceneMasterQuest(SCENE_WATER_TEMPLE)) { gSaveContext.sceneFlags[SCENE_WATER_TEMPLE].swch |= (1 << 0x15); } - // Now handled on the fly + // Now handled on the fly. // int openForest = Randomizer_GetSettingValue(RSK_FOREST); // switch (openForest) { // case RO_CLOSED_FOREST_OFF: @@ -423,7 +419,7 @@ extern "C" void Randomizer_InitSaveFile() { gSaveContext.itemGetInf[3] |= 0x100; // Sold Keaton Mask gSaveContext.itemGetInf[3] |= 0x200; // Sold Skull Mask gSaveContext.itemGetInf[3] |= 0x400; // Sold Spooky Mask - gSaveContext.itemGetInf[3] |= 0x800; // bunny hood related + gSaveContext.itemGetInf[3] |= 0x800; // Bunny Hood related gSaveContext.itemGetInf[3] |= 0x8000; // Obtained Mask of Truth } diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index a2bf3660d..c40f99168 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -13,7 +13,8 @@ namespace Rando { std::shared_ptr Settings::mInstance; -std::vector NumOpts(const int min, const int max, const int step = 1, const std::string& textBefore = {}, const std::string& textAfter = {}) { +std::vector NumOpts(const int min, const int max, const int step = 1, const std::string& textBefore = {}, + const std::string& textAfter = {}) { std::vector options; options.reserve((max - min) / step + 1); for (int i = min; i <= max; i += step) { @@ -24,7 +25,7 @@ std::vector NumOpts(const int min, const int max, const int step = std::vector MultiVecOpts(const std::vector>& optionsVector) { uint32_t totalSize = 0; - for (const auto& vector: optionsVector) { + for (const auto& vector : optionsVector) { totalSize += vector.size(); } std::vector options; @@ -37,11 +38,11 @@ std::vector MultiVecOpts(const std::vector return options; } -void Settings::HandleShopsanityPriceUI(){ +void Settings::HandleShopsanityPriceUI() { bool isTycoon = CVarGetInteger(CVAR_RANDOMIZER_SETTING("IncludeTycoonWallet"), RO_GENERIC_OFF); mOptions[RSK_SHOPSANITY].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM); mOptions[RSK_SHOPSANITY_PRICES].Unhide(); - switch (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), RO_PRICE_VANILLA)){ + switch (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShopsanityPrices"), RO_PRICE_VANILLA)) { case RO_PRICE_FIXED: mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE].Unhide(); mOptions[RSK_SHOPSANITY_PRICES_RANGE_1].Hide(); @@ -51,7 +52,8 @@ void Settings::HandleShopsanityPriceUI(){ mOptions[RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT].Hide(); mOptions[RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT].Hide(); mOptions[RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT].Hide(); - if (isTycoon ? mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE].GetOptionCount() == 501 : mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE].GetOptionCount() == 1000) { + if (isTycoon ? mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE].GetOptionCount() == 501 + : mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE].GetOptionCount() == 1000) { mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE].ChangeOptions(isTycoon ? NumOpts(0, 999) : NumOpts(0, 500)); } mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE].Hide(); @@ -65,9 +67,12 @@ void Settings::HandleShopsanityPriceUI(){ mOptions[RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT].Hide(); mOptions[RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT].Hide(); mOptions[RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT].Hide(); - if (isTycoon ? mOptions[RSK_SHOPSANITY_PRICES_RANGE_1].GetOptionCount() == 101 : mOptions[RSK_SHOPSANITY_PRICES_RANGE_1].GetOptionCount() == 200) { - mOptions[RSK_SHOPSANITY_PRICES_RANGE_1].ChangeOptions(isTycoon ? NumOpts(0, 995, 5) : NumOpts(0, 500, 5)); - mOptions[RSK_SHOPSANITY_PRICES_RANGE_2].ChangeOptions(isTycoon ? NumOpts(0, 995, 5) : NumOpts(0, 500, 5)); + if (isTycoon ? mOptions[RSK_SHOPSANITY_PRICES_RANGE_1].GetOptionCount() == 101 + : mOptions[RSK_SHOPSANITY_PRICES_RANGE_1].GetOptionCount() == 200) { + mOptions[RSK_SHOPSANITY_PRICES_RANGE_1].ChangeOptions(isTycoon ? NumOpts(0, 995, 5) + : NumOpts(0, 500, 5)); + mOptions[RSK_SHOPSANITY_PRICES_RANGE_2].ChangeOptions(isTycoon ? NumOpts(0, 995, 5) + : NumOpts(0, 500, 5)); } mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE].Unhide(); break; @@ -79,7 +84,7 @@ void Settings::HandleShopsanityPriceUI(){ mOptions[RSK_SHOPSANITY_PRICES_CHILD_WALLET_WEIGHT].Unhide(); mOptions[RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT].Unhide(); mOptions[RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT].Unhide(); - if (isTycoon){ + if (isTycoon) { mOptions[RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT].Unhide(); } else { mOptions[RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT].Hide(); @@ -209,6 +214,8 @@ void Settings::CreateOptions() { OPT_BOOL(RSK_SHUFFLE_WEIRD_EGG, "Shuffle Weird Egg", CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG]); OPT_BOOL(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD, "Shuffle Gerudo Membership Card", CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]); OPT_U8(RSK_SHUFFLE_POTS, "Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShufflePots"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF); + OPT_U8(RSK_SHUFFLE_GRASS, "Shuffle Grass", {"Off", "Dungeons", "Overworld", "All Grass/Bushes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleGrass"), mOptionDescriptions[RSK_SHUFFLE_GRASS], WidgetType::Combobox, RO_SHUFFLE_GRASS_OFF); + OPT_U8(RSK_SHUFFLE_CRATES, "Shuffle Crates", {"Off", "Dungeons", "Overworld", "All Crates"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleCrates"), mOptionDescriptions[RSK_SHUFFLE_CRATES], WidgetType::Combobox, RO_SHUFFLE_CRATES_OFF); OPT_BOOL(RSK_SHUFFLE_FISHING_POLE, "Shuffle Fishing Pole", CVAR_RANDOMIZER_SETTING("ShuffleFishingPole"), mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE]); OPT_U8(RSK_SHUFFLE_MERCHANTS, "Shuffle Merchants", {"Off", "Bean Merchant Only", "All But Beans", "All"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), mOptionDescriptions[RSK_SHUFFLE_MERCHANTS], WidgetType::Combobox, RO_SHUFFLE_MERCHANTS_OFF, IMFLAG_NONE); OPT_U8(RSK_MERCHANT_PRICES, "Merchant Prices", {"Vanilla", "Cheap Balanced", "Balanced", "Fixed", "Range", "Set By Wallet"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MerchantPrices"), mOptionDescriptions[RSK_MERCHANT_PRICES], WidgetType::Combobox, RO_PRICE_VANILLA, false, IMFLAG_NONE); @@ -333,211 +340,796 @@ void Settings::CreateOptions() { mExcludeLocationsOptionsAreas.reserve(RCAREA_INVALID); // the following are glitches and are currently disabled - // OPT_TRICK(RT_ACUTE_ANGLE_CLIP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Acute angle clip", "Enables locations requiring jumpslash clips through walls which meet at an acute angle."); - // OPT_TRICK(RT_ADVANCED_CLIPS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Advanced clips", "Enables locations requiring clips through walls and objects requiring precise jumps or other tricks."); - // OPT_TRICK(RT_BLANK_A, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Blank A", "Enables locations requiring blank A button; NOTE: this requires the 'Quick Putaway' restoration."); - // OPT_TRICK(RT_DOOM_JUMP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Doom Jump", "Enables locations requiring doom jumps."); - // OPT_TRICK(RT_EPG, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "EPG", "Enables locations requiring use of the Entrance Point Glitch."); - // OPT_TRICK(RT_EQUIP_SWAP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Equip Swap", "Enables locations requiring use of equip swap; NOTE: this may expect the 'Allow cursor to be over any slot' enhancement to be turned off."); - // OPT_TRICK(RT_EQUIP_SWAP_EXPECTS_DINS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Equip Swap Require's Din's Fire", "Enables locations requiring use of equip swap once Din's Fire is found."); - // OPT_TRICK(RT_FLAME_STORAGE, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Flame Storage", "Enables locations requiring flame storage."); - // OPT_TRICK(RT_GROUND_CLIP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Ground Clip", "Enables locations requiring ground clips."); - // OPT_TRICK(RT_GROUND_JUMP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Ground Jump", "Enables locations requiring ground jumps."); - // OPT_TRICK(RT_HESS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "HESS", "Enables locations requiring a Hyper Extended Super Slide."); - // OPT_TRICK(RT_HOOKSHOT_CLIP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Hookshot Clip", "Enables locations requiring hookshot clips."); - // OPT_TRICK(RT_HOOKSHOT_JUMP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Hookshot Jump", "Enables locations requiring hookshot jumps."); - // OPT_TRICK(RT_ISG, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "ISG", "Enables locations requiring use of the infinite sword glitch."); + // OPT_TRICK(RT_ACUTE_ANGLE_CLIP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, + // Tricks::Tag::GLITCH}, "Acute angle clip", "Enables locations requiring jumpslash clips through walls which meet + // at an acute angle."); OPT_TRICK(RT_ADVANCED_CLIPS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, + // Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Advanced clips", "Enables locations requiring clips through + // walls and objects requiring precise jumps or other tricks."); OPT_TRICK(RT_BLANK_A, RCQUEST_BOTH, RA_NONE, + // {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Blank A", "Enables locations requiring + // blank A button; NOTE: this requires the 'Quick Putaway' restoration."); OPT_TRICK(RT_DOOM_JUMP, RCQUEST_BOTH, + // RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Doom Jump", "Enables locations + // requiring doom jumps."); OPT_TRICK(RT_EPG, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, + // Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "EPG", "Enables locations requiring use of the Entrance Point + // Glitch."); OPT_TRICK(RT_EQUIP_SWAP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, + // Tricks::Tag::GLITCH}, "Equip Swap", "Enables locations requiring use of equip swap; NOTE: this may expect the + // 'Allow cursor to be over any slot' enhancement to be turned off."); OPT_TRICK(RT_EQUIP_SWAP_EXPECTS_DINS, + // RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Equip Swap + // Require's Din's Fire", "Enables locations requiring use of equip swap once Din's Fire is found."); + // OPT_TRICK(RT_FLAME_STORAGE, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, + // Tricks::Tag::GLITCH}, "Flame Storage", "Enables locations requiring flame storage."); OPT_TRICK(RT_GROUND_CLIP, + // RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Ground Clip", + // "Enables locations requiring ground clips."); OPT_TRICK(RT_GROUND_JUMP, RCQUEST_BOTH, RA_NONE, + // {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "Ground Jump", "Enables locations + // requiring ground jumps."); OPT_TRICK(RT_HESS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, + // Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "HESS", "Enables locations requiring a Hyper Extended Super + // Slide."); OPT_TRICK(RT_HOOKSHOT_CLIP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, + // Tricks::Tag::GLITCH}, "Hookshot Clip", "Enables locations requiring Hookshot clips."); + // OPT_TRICK(RT_HOOKSHOT_JUMP, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, + // Tricks::Tag::GLITCH}, "Hookshot Jump", "Enables locations requiring Hookshot jumps."); OPT_TRICK(RT_ISG, + // RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL, Tricks::Tag::GLITCH}, "ISG", "Enables + // locations requiring use of the infinite sword glitch."); - OPT_TRICK(RT_VISIBLE_COLLISION, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::NOVICE}, "Pass Through Visible One-Way Collision", "Allows climbing through the platform to reach Impa's House Back as adult with no items and going through the Kakariko Village Gate as child when coming from the Mountain Trail side."); - OPT_TRICK(RT_GROTTOS_WITHOUT_AGONY, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::NOVICE}, "Hidden Grottos without Stone of Agony", "Allows entering hidden grottos without the Stone of Agony."); - OPT_TRICK(RT_FEWER_TUNIC_REQUIREMENTS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::INTERMEDIATE}, "Fewer Tunic Requirements", "Allows the following possible without Tunics:\n- Enter Water Temple. The area below the center pillar still requires Zora Tunic. Applies to MQ also.\n- Enter Fire Temple. Volvagia still requires Goron tunic. Applies to MQ also, and includes child access to first floor with dungeon shuffle."); - OPT_TRICK(RT_RUSTED_SWITCHES, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::NOVICE}, "Hammer Rusted Switches Through Walls", "Applies to:\n- Fire Temple Highest Goron Chest.\n- MQ Fire Temple Lizalfos Maze.\n- MQ Spirit Trial."); - OPT_TRICK(RT_FLAMING_CHESTS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::INTERMEDIATE}, "Flaming Chests", "The chests encircled in flames in Gerudo Training Ground and in Spirit Temple can be opened by running into the flames while Link is invincible after taking damage."); - // disabled for now, can't check for being able to use bunny hood & bunny hood speedup is currently completely decoupled from rando - // OPT_TRICK(RT_BUNNY_HOOD_JUMPS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED}, "Bunny Hood Jumps", "Allows reaching locations using Bunny Hood's extended jumps."); - OPT_TRICK(RT_DAMAGE_BOOST_SIMPLE, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL}, "Simple damage boosts", "Allows damage boosts in order to reach further locations. Can be combined with \"Simple hover boosts\" for reaching far distances."); - OPT_TRICK(RT_HOVER_BOOST_SIMPLE, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL}, "Simple hover boosts", "Allows equipping of hover boots when link is moving at high speeds to extend distance covered. Can be combined with \"Simple damage boosts\" for greater uses."); - OPT_TRICK(RT_BOMBCHU_BEEHIVES, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::NOVICE}, "Bombchu Beehives", "Allows exploding beehives with bombchus."); - OPT_TRICK(RT_BLUE_FIRE_MUD_WALLS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::NOVICE}, "Break Mud Walls with Blue Fire", "Use Blue Fire to break mud walls."); - OPT_TRICK(RT_KF_ADULT_GS, RCQUEST_BOTH, RA_KOKIRI_FOREST, {Tricks::Tag::NOVICE}, "Adult Kokiri Forest GS with Hover Boots", "Can be obtained without Hookshot by using the Hover Boots off of one of the roots."); - OPT_TRICK(RT_LW_BRIDGE, RCQUEST_BOTH, RA_THE_LOST_WOODS, {Tricks::Tag::EXPERT}, "Jump onto the Lost Woods Bridge as Adult with Nothing", "With very precise movement it's possible for adult to jump onto the bridge without needing Longshot, Hover Boots, or Bean."); - OPT_TRICK(RT_LW_MIDO_BACKFLIP, RCQUEST_BOTH, RA_THE_LOST_WOODS, {Tricks::Tag::NOVICE}, "Backflip over Mido as Adult", "With a specific position and angle, you can backflip over Mido."); - OPT_TRICK(RT_LW_GS_BEAN, RCQUEST_BOTH, RA_THE_LOST_WOODS, {Tricks::Tag::INTERMEDIATE}, "Lost Woods Adult GS without Bean", "You can collect the token with a precise Hookshot use, as long as you can kill the Skulltula somehow first. It can be killed using Longshot, Bow, Bombchus or Din's Fire."); - OPT_TRICK(RT_HC_STORMS_GS, RCQUEST_BOTH, RA_HYRULE_CASTLE, {Tricks::Tag::INTERMEDIATE}, "Hyrule Castle Storms Grotto GS with Just Boomerang", "With precise throws, the Boomerang alone can kill the Skulltula and collect the token, without first needing to blow up the wall."); - OPT_TRICK(RT_KAK_MAN_ON_ROOF, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, {Tricks::Tag::NOVICE}, "Man on Roof without Hookshot", "Can be reached by side-hopping off the watchtower as either age, or by jumping onto the potion shop's roof from the ledge as adult."); - OPT_TRICK(RT_KAK_TOWER_GS, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, {Tricks::Tag::INTERMEDIATE}, "Kakariko Tower GS with Jump Slash", "Climb the tower as high as you can without touching the Gold Skulltula, then let go and jump slash immediately. By jump-slashing from as low on the ladder as possible to still hit the Skulltula, this trick can be done without taking fall damage."); - OPT_TRICK(RT_KAK_ADULT_WINDMILL_POH, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, {Tricks::Tag::NOVICE}, "Windmill PoH as Adult with Nothing", "Can jump up to the spinning platform from below as adult."); - OPT_TRICK(RT_KAK_CHILD_WINDMILL_POH, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, {Tricks::Tag::EXTREME}, "Windmill PoH as Child with Precise Jump Slash", "Can jump up to the spinning platform from below as child with a precise jumpslash timed with the platforms rotation."); - OPT_TRICK(RT_KAK_ROOFTOP_GS, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, {Tricks::Tag::ADVANCED}, "Kakariko Rooftop GS with Hover Boots", "Take the Hover Boots from the entrance to Impa's House over to the rooftop of Skulltula House. From there, a precise Hover Boots backwalk with backflip can be used to get onto a hill above the side of the village. And then from there you can Hover onto Impa's rooftop to kill the Skulltula and backflip into the token."); - OPT_TRICK(RT_GY_POH, RCQUEST_BOTH, RA_THE_GRAVEYARD, {Tricks::Tag::INTERMEDIATE}, "Graveyard Freestanding PoH with Boomerang", "Using a precise moving setup you can obtain the Piece of Heart by having the Boomerang interact with it along the return path."); - OPT_TRICK(RT_GY_CHILD_DAMPE_RACE_POH, RCQUEST_BOTH, RA_THE_GRAVEYARD, {Tricks::Tag::NOVICE}, "Second Dampe Race as Child", "It is possible to complete the second dampe race as child in under a minute, but it is a strict time limit."); - OPT_TRICK(RT_GY_SHADOW_FIRE_ARROWS, RCQUEST_BOTH, RA_THE_GRAVEYARD, {Tricks::Tag::EXPERT}, "Shadow Temple Entry with Fire Arrows", "It is possible to light all of the torches to open the Shadow Temple entrance with just Fire Arrows, but you must be very quick, precise, and strategic with how you take your shots."); - OPT_TRICK(RT_DMT_SOIL_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::INTERMEDIATE}, "Death Mountain Trail Soil GS without Destroying Boulder", "Bugs will go into the soft soil even while the boulder is still blocking the entrance. Then, using a precise moving setup you can kill the Gold Skulltula and obtain the token by having the Boomerang interact with it along the return path."); - OPT_TRICK(RT_DMT_BOMBABLE, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::INTERMEDIATE}, "Death Mountain Trail Chest with Strength", "Child Link can blow up the wall using a nearby bomb flower. You must backwalk with the flower and then quickly throw it toward the wall."); - OPT_TRICK(RT_DMT_HOOKSHOT_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::INTERMEDIATE}, "Death Mountain Trail Lower Red Rock GS with Hookshot", "After killing the Skulltula, the token can be fished out of the rock without needing to destroy it, by using the Hookshot in the correct way."); - OPT_TRICK(RT_DMT_HOVERS_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::ADVANCED}, "Death Mountain Trail Lower Red Rock GS with Hover Boots", "After killing the Skulltula, the token can be collected without needing to destroy the rock by backflipping down onto it with the Hover Boots. First use the Hover Boots to stand on a nearby fence, and go for the Skulltula Token from there."); - OPT_TRICK(RT_DMT_BEAN_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::EXPERT}, "Death Mountain Trail Lower Red Rock GS with Magic Bean", "After killing the Skulltula, the token can be collected without needing to destroy the rock by jumping down onto it from the bean plant, midflight, with precise timing and positioning."); - OPT_TRICK(RT_DMT_JS_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::INTERMEDIATE}, "Death Mountain Trail Lower Red Rock GS with Jump Slash", "After killing the Skulltula, the token can be collected without needing to destroy the rock by jump slashing from a precise angle."); - OPT_TRICK(RT_DMT_CLIMB_HOVERS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::ADVANCED}, "Death Mountain Trail Climb with Hover Boots", "It is possible to use the Hover Boots to bypass needing to destroy the boulders blocking the path to the top of Death Mountain."); - OPT_TRICK(RT_DMT_UPPER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::NOVICE}, "Death Mountain Trail Upper Red Rock GS without Hammer", "After killing the Skulltula, the token can be collected by backflipping into the rock at the correct angle."); - // disabled for now, only applies when trade quest is not shuffled so there's a timer (currently not considered in logic) - // OPT_TRICK(RT_DMT_BOLERO_BIGGORON, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::INTERMEDIATE}, "Deliver Eye Drops with Bolero of Fire", "Playing a warp song normally causes a trade item to spoil immediately, however, it is possible use Bolero to reach Biggoron and still deliver the Eye Drops before they spoil. If you do not wear the Goron Tunic, the heat timer inside the crater will override the trade item\'s timer. When you exit to Death Mountain Trail you will have one second to show the Eye Drops before they expire. You can get extra time to show the Eye Drops if you warp immediately upon receiving them. If you don't have many hearts, you may have to reset the heat timer by quickly dipping in and out of Darunia\'s chamber or quickly equipping and unequipping the Goron Tunic. This trick does not apply if \"Randomize Warp Song Destinations\" is enabled, or if the settings are such that trade items do not need to be delivered within a time limit."); - OPT_TRICK(RT_GC_POT, RCQUEST_BOTH, RA_GORON_CITY, {Tricks::Tag::ADVANCED}, "Goron City Spinning Pot PoH with Bombchu", "A Bombchu can be used to stop the spinning pot, but it can be quite finicky to get it to work."); - OPT_TRICK(RT_GC_POT_STRENGTH, RCQUEST_BOTH, RA_GORON_CITY, {Tricks::Tag::INTERMEDIATE}, "Goron City Spinning Pot PoH with Strength", "Allows for stopping the Goron City Spinning Pot using a bomb flower alone, requiring strength in lieu of inventory explosives."); - OPT_TRICK(RT_GC_ROLLING_STRENGTH, RCQUEST_BOTH, RA_GORON_CITY, {Tricks::Tag::INTERMEDIATE}, "Rolling Goron (Hot Rodder Goron) as Child with Strength", "Use the bombflower on the stairs or near Medigoron. Timing is tight, especially without backwalking."); - OPT_TRICK(RT_GC_LEFTMOST, RCQUEST_BOTH, RA_GORON_CITY, {Tricks::Tag::ADVANCED}, "Goron City Maze Left Chest with Hover Boots", "A precise backwalk starting from on top of the crate and ending with a precisely-timed backflip can reach this chest without needing either the Hammer or Silver Gauntlets."); - OPT_TRICK(RT_GC_GROTTO, RCQUEST_BOTH, RA_GORON_CITY, {Tricks::Tag::ADVANCED}, "Goron City Grotto with Hookshot While Taking Damage", "It is possible to reach the Goron City Grotto by quickly using the Hookshot while in the midst of taking damage from the lava floor."); - OPT_TRICK(RT_GC_LINK_GORON_DINS, RCQUEST_BOTH, RA_GORON_CITY, {Tricks::Tag::NOVICE}, "Stop Link the Goron with Din\'s Fire", "The timing is quite awkward."); - OPT_TRICK(RT_DMC_HOVER_BEAN_POH, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, {Tricks::Tag::NOVICE}, "Crater\'s Bean PoH with Hover Boots", "Hover from the base of the bridge near Goron City and walk up the very steep slope."); - OPT_TRICK(RT_DMC_BOLERO_JUMP, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, {Tricks::Tag::EXTREME}, "Death Mountain Crater Jump to Bolero", "As Adult, using a shield to drop a pot while you have the perfect speed and position, the pot can push you that little extra distance you need to jump across the gap in the bridge."); - OPT_TRICK(RT_DMC_BOULDER_JS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, {Tricks::Tag::NOVICE}, "Death Mountain Crater Upper to Lower with Hammer", "With the Hammer, you can jump slash the rock twice in the same jump in order to destroy it before you fall into the lava."); - OPT_TRICK(RT_DMC_BOULDER_SKIP, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, {Tricks::Tag::INTERMEDIATE}, "Death Mountain Crater Upper to Lower Boulder Skip", "As adult, With careful positioning, you can jump to the ledge where the boulder is, then use repeated ledge grabs to shimmy to a climbable ledge. This trick supersedes \"Death Mountain Crater Upper to Lower with Hammer\"."); - OPT_TRICK(RT_ZR_LOWER, RCQUEST_BOTH, RA_ZORAS_RIVER, {Tricks::Tag::INTERMEDIATE}, "Zora\'s River Lower Freestanding PoH as Adult with Nothing", "Adult can reach this PoH with a precise jump, no Hover Boots required."); - OPT_TRICK(RT_ZR_UPPER, RCQUEST_BOTH, RA_ZORAS_RIVER, {Tricks::Tag::INTERMEDIATE}, "Zora\'s River Upper Freestanding PoH as Adult with Nothing", "Adult can reach this PoH with a precise jump, no Hover Boots required."); - OPT_TRICK(RT_ZR_HOVERS, RCQUEST_BOTH, RA_ZORAS_RIVER, {Tricks::Tag::NOVICE}, "Zora\'s Domain Entry with Hover Boots", "Can hover behind the waterfall as adult."); - OPT_TRICK(RT_ZR_CUCCO, RCQUEST_BOTH, RA_ZORAS_RIVER, {Tricks::Tag::NOVICE}, "Zora\'s Domain Entry with Cucco", "You can fly behind the waterfall with a Cucco as child."); - OPT_TRICK(RT_ZD_KING_ZORA_SKIP, RCQUEST_BOTH, RA_ZORAS_DOMAIN, {Tricks::Tag::INTERMEDIATE}, "Skip King Zora as Adult with Nothing", "With a precise jump as adult, it is possible to get on the fence next to King Zora from the front to access Zora's Fountain."); - OPT_TRICK(RT_ZD_GS, RCQUEST_BOTH, RA_ZORAS_DOMAIN, {Tricks::Tag::INTERMEDIATE}, "Zora\'s Domain GS with No Additional Items", "A precise jump slash can kill the Skulltula and recoil back onto the top of the frozen waterfall. To kill it, the logic normally guarantees one of Hookshot, Bow, or Magic."); - OPT_TRICK(RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES, RCQUEST_BOTH, RA_ZORAS_FOUNTAIN, {Tricks::Tag::NOVICE}, "Zora\'s Fountain Great Fairy Without Explosives", "It's possible to use silver gauntlets to pick up the silver rock and hammer to break the rock below it, allowing you to ledge grab the edge of the hole and get past the breakable wall (hammer can't break the wall itself)."); - OPT_TRICK(RT_LH_LAB_WALL_GS, RCQUEST_BOTH, RA_LAKE_HYLIA, {Tricks::Tag::NOVICE}, "Lake Hylia Lab Wall GS with Jump Slash", "The jump slash to actually collect the token is somewhat precise."); - OPT_TRICK(RT_LH_LAB_DIVING, RCQUEST_BOTH, RA_LAKE_HYLIA, {Tricks::Tag::NOVICE}, "Lake Hylia Lab Dive without Gold Scale", "Remove the Iron Boots in the midst of Hookshotting the underwater crate."); - OPT_TRICK(RT_LH_WATER_HOOKSHOT, RCQUEST_BOTH, RA_LAKE_HYLIA, {Tricks::Tag::INTERMEDIATE}, "Water Temple Entry without Iron Boots using Hookshot", "When entering Water Temple using Gold Scale instead of Iron Boots, the Longshot is usually used to be able to hit the switch and open the gate. But, by standing in a particular spot, the switch can be hit with only the reach of the Hookshot."); - OPT_TRICK(RT_GV_CRATE_HOVERS, RCQUEST_BOTH, RA_GERUDO_VALLEY, {Tricks::Tag::INTERMEDIATE}, "Gerudo Valley Crate PoH as Adult with Hover Boots", "From the far side of Gerudo Valley, a precise Hover Boots movement and jump-slash recoil can allow adult to reach the ledge with the crate PoH without needing Longshot. You will take fall damage."); - OPT_TRICK(RT_GF_KITCHEN, RCQUEST_BOTH, RA_GERUDO_FORTRESS, {Tricks::Tag::NOVICE}, "Thieves\' Hideout \"Kitchen\" with No Additional Items", "Allows passing through the kitchen by avoiding being seen by the guards. The logic normally guarantees Bow or Hookshot to stun them from a distance, or Hover Boots to cross the room without needing to deal with the guards."); - OPT_TRICK(RT_GF_JUMP, RCQUEST_BOTH, RA_GERUDO_FORTRESS, {Tricks::Tag::NOVICE}, "Gerudo\'s Fortress Ledge Jumps", "Adult can jump onto the top roof of the fortress without going through the interior of the hideout."); - OPT_TRICK(RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON, RCQUEST_BOTH, RA_GERUDO_FORTRESS, {Tricks::Tag::NOVICE}, "Gerudo\'s Fortress Warriors with Difficult Weapons", "Warriors can be defeated with slingshot or bombchus."); - // disabled for now, can't check for being able to use bunny hood & bunny hood speedup is currently completely decoupled from rando - // OPT_TRICK(RT_HW_BUNNY_CROSSING, RCQUEST_BOTH, RA_HAUNTED_WASTELAND, {Tricks::Tag::NOVICE}, "Wasteland Crossing with Bunny Hood", "You can beat the quicksand by using the increased speed of the Bunny Hood. Note that jumping to the carpet merchant as child typically requires a fairly precise jump slash."); - OPT_TRICK(RT_HW_CROSSING, RCQUEST_BOTH, RA_HAUNTED_WASTELAND, {Tricks::Tag::INTERMEDIATE}, "Wasteland Crossing without Hover Boots or Longshot", "You can beat the quicksand by backwalking across it in a specific way. Note that jumping to the carpet merchant as child typically requires a fairly precise jump slash."); - OPT_TRICK(RT_LENS_HW, RCQUEST_BOTH, RA_HAUNTED_WASTELAND, {Tricks::Tag::INTERMEDIATE}, "Lensless Wasteland", "By memorizing the path, you can travel through the Wasteland without using the Lens of Truth to see the Poe. The equivalent trick for going in reverse through the Wasteland is \"Reverse Wasteland\"."); - OPT_TRICK(RT_HW_REVERSE, RCQUEST_BOTH, RA_HAUNTED_WASTELAND, {Tricks::Tag::INTERMEDIATE}, "Reverse Wasteland", "By memorizing the path, you can travel through the Wasteland in reverse. Note that jumping to the carpet merchant as child typically requires a fairly precise jump slash. The equivalent trick for going forward through the Wasteland is \"Lensless Wasteland\". To cross the river of sand with no additional items, be sure to also enable \"Wasteland Crossing without Hover Boots or Longshot\". Unless all overworld entrances are randomized, child Link will not be expected to do anything at Gerudo's Fortress."); - OPT_TRICK(RT_COLOSSUS_GS, RCQUEST_BOTH, RA_DESERT_COLOSSUS, {Tricks::Tag::NOVICE}, "Colossus Hill GS with Hookshot", "Somewhat precise. If you kill enough Leevers you can get enough of a break to take some time to aim more carefully."); - OPT_TRICK(RT_DEKU_BASEMENT_GS, RCQUEST_VANILLA, RA_DEKU_TREE, {Tricks::Tag::NOVICE}, "Deku Tree Basement Vines GS with Jump Slash", "Can be defeated by doing a precise jump slash."); - OPT_TRICK(RT_DEKU_B1_SKIP, RCQUEST_BOTH, RA_DEKU_TREE, {Tricks::Tag::INTERMEDIATE}, "Deku Tree Basement without Slingshot", "A precise jump can be used to skip needing to use the Slingshot to go around B1 of the Deku Tree. If used with the \"Closed Forest\" setting, a Slingshot will not be guaranteed to exist somewhere inside the Forest. This trick applies to both Vanilla and Master Quest."); - OPT_TRICK(RT_DEKU_B1_BOW_WEBS, RCQUEST_VANILLA, RA_DEKU_TREE, {Tricks::Tag::NOVICE}, "Deku Tree Basement Web to Gohma with Bow", "All spider web walls in the Deku Tree basement can be burnt as adult with just a bow by shooting through torches. This trick only applies to the circular web leading to Gohma; the two vertical webs are always in logic. Backflip onto the chest near the torch at the bottom of the vine wall. With precise positioning you can shoot through the torch to the right edge of the circular web. This allows completion of adult Deku Tree with no fire source."); - OPT_TRICK(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG, RCQUEST_VANILLA, RA_DEKU_TREE, {Tricks::Tag::NOVICE}, "Deku Tree Basement Backflip over Spiked Log", "Allows backflipping over the spiked log in the Deku Tree basement in vanilla. Only relevant if \"Shuffle Swim\" is enabled."); - OPT_TRICK(RT_DEKU_MQ_COMPASS_GS, RCQUEST_MQ, RA_DEKU_TREE, {Tricks::Tag::NOVICE}, "Deku Tree MQ Compass Room GS Boulders with Just Hammer", "Climb to the top of the vines, then let go and jump slash immediately to destroy the boulders using the Hammer, without needing to spawn a Song of Time block."); - OPT_TRICK(RT_DEKU_MQ_LOG, RCQUEST_MQ, RA_DEKU_TREE, {Tricks::Tag::NOVICE}, "Deku Tree MQ Roll Under the Spiked Log", "You can get past the spiked log by rolling to briefly shrink your hitbox. As adult, the timing is a bit more precise."); - OPT_TRICK(RT_DC_SCARECROW_GS, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, {Tricks::Tag::NOVICE}, "Dodongo\'s Cavern Scarecrow GS with Armos Statue", "You can jump off an Armos Statue to reach the alcove with the Gold Skulltula. It takes quite a long time to pull the statue the entire way. The jump to the alcove can be a bit picky when done as child."); - OPT_TRICK(RT_DC_VINES_GS, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, {Tricks::Tag::NOVICE}, "Dodongo\'s Cavern Vines GS from Below with Longshot", "The vines upon which this Skulltula rests are one-sided collision. You can use the Longshot to get it from below, by shooting it through the vines, bypassing the need to lower the staircase."); - OPT_TRICK(RT_DC_STAIRCASE, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, {Tricks::Tag::NOVICE}, "Dodongo\'s Cavern Staircase with Bow", "The Bow can be used to knock down the stairs with two well-timed shots."); - OPT_TRICK(RT_DC_SLINGSHOT_SKIP, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, {Tricks::Tag::EXPERT}, "Dodongo\'s Cavern Child Slingshot Skips", "With precise platforming, child can cross the platforms while the flame circles are there. When enabling this trick, it's recommended that you also enable the Adult variant: \"Dodongo's Cavern Spike Trap Room Jump without Hover Boots\"."); - OPT_TRICK(RT_DC_SCRUB_ROOM, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, {Tricks::Tag::NOVICE}, "Dodongo\'s Cavern Two Scrub Room with Strength", "With help from a conveniently-positioned block, Adult can quickly carry a bomb flower over to destroy the mud wall blocking the room with two Deku Scrubs."); - OPT_TRICK(RT_DC_JUMP, RCQUEST_BOTH, RA_DODONGOS_CAVERN, {Tricks::Tag::NOVICE}, "Dodongo\'s Cavern Spike Trap Room Jump without Hover Boots", "The jump is adult Link only. Applies to both Vanilla and MQ."); - OPT_TRICK(RT_DC_HAMMER_FLOOR, RCQUEST_BOTH, RA_DODONGOS_CAVERN, {Tricks::Tag::NOVICE}, "Dodongo\'s Cavern Smash the Boss Lobby Floor", "The bombable floor before King Dodongo can be destroyed with Hammer if hit in the very center. This is only relevant with Shuffle Boss Entrances or if Dodongo's Cavern is MQ and either variant of \"Dodongo's Cavern MQ Light the Eyes with Strength\" is on."); - OPT_TRICK(RT_DC_MQ_CHILD_BOMBS, RCQUEST_MQ, RA_DODONGOS_CAVERN, {Tricks::Tag::ADVANCED}, "Dodongo\'s Cavern MQ Early Bomb Bag Area as Child", "With a precise jump slash from above, you can reach the Bomb Bag area as only child without needing a Slingshot. You will take fall damage."); - OPT_TRICK(RT_DC_MQ_CHILD_EYES, RCQUEST_MQ, RA_DODONGOS_CAVERN, {Tricks::Tag::EXPERT}, "Dodongo\'s Cavern MQ Light the Eyes with Strength as Child", "If you move very quickly, it is possible to use the bomb flower at the top of the room to light the eyes. To perform this trick as child is significantly more difficult than adult. The player is also expected to complete the DC back area without explosives, including getting past the Armos wall to the switch for the boss door."); - OPT_TRICK(RT_DC_MQ_ADULT_EYES, RCQUEST_MQ, RA_DODONGOS_CAVERN, {Tricks::Tag::ADVANCED}, "Dodongo\'s Cavern MQ Light the Eyes with Strength as Adult", "If you move very quickly, it is possible to use the bomb flower at the top of the room to light the eyes."); - OPT_TRICK(RT_JABU_ALCOVE_JUMP_DIVE, RCQUEST_BOTH, RA_JABU_JABUS_BELLY, {Tricks::Tag::NOVICE}, "Jabu Underwater Alcove as Adult with Jump Dive", "Standing above the underwater tunnel leading to the scrub, jump down and swim through the tunnel. This allows adult to access the alcove with no Scale or Iron Boots. In vanilla Jabu, this alcove has a business scrub. In MQ Jabu, it has the compass chest and a door switch for the main floor."); - OPT_TRICK(RT_JABU_BOSS_HOVER, RCQUEST_VANILLA, RA_JABU_JABUS_BELLY, {Tricks::Tag::INTERMEDIATE}, "Jabu Near Boss Room with Hover Boots", "A box for the blue switch can be carried over by backwalking with one while the elevator is at its peak. Alternatively, you can skip transporting a box by quickly rolling from the switch and opening the door before it closes. However, the timing for this is very tight."); - OPT_TRICK(RT_JABU_NEAR_BOSS_RANGED, RCQUEST_BOTH, RA_JABU_JABUS_BELLY, {Tricks::Tag::NOVICE}, "Jabu Near Boss Ceiling Switch/GS without Boomerang or Explosives", "Vanilla Jabu: From near the entrance into the room, you can hit the switch that opens the door to the boss room using a precisely-aimed use of the Slingshot, Bow, or Longshot. As well, if you climb to the top of the vines you can stand on the right edge of the platform and shoot around the glass. From this distance, even the Hookshot can reach the switch. This trick is only relevant if \"Shuffle Boss Entrances\" is enabled. MQ Jabu: A Gold Skulltula Token can be collected with the Hookshot or Longshot using the same methods as hitting the switch in vanilla. This MQ trick is not currently relevant in logic."); - OPT_TRICK(RT_JABU_NEAR_BOSS_EXPLOSIVES, RCQUEST_VANILLA, RA_JABU_JABUS_BELLY, {Tricks::Tag::INTERMEDIATE}, "Jabu Near Boss Ceiling Switch with Explosives", "You can hit the switch that opens the door to the boss room using a precisely-aimed Bombchu. Also, using the Hover Boots, adult can throw a Bomb at the switch. This trick is only relevant if \"Shuffle Boss Entrances\" is enabled."); - OPT_TRICK(RT_LENS_JABU_MQ, RCQUEST_MQ, RA_JABU_JABUS_BELLY, {Tricks::Tag::NOVICE}, "Jabu MQ without Lens of Truth", "Removes the requirements for the Lens of Truth in Jabu MQ."); - OPT_TRICK(RT_JABU_MQ_RANG_JUMP, RCQUEST_MQ, RA_JABU_JABUS_BELLY, {Tricks::Tag::ADVANCED}, "Jabu MQ Compass Chest with Boomerang", "Boomerang can reach the cow switch to spawn the chest by targeting the cow, jumping off of the ledge where the chest spawns, and throwing the Boomerang in midair."); - OPT_TRICK(RT_JABU_MQ_SOT_GS, RCQUEST_MQ, RA_JABU_JABUS_BELLY, {Tricks::Tag::INTERMEDIATE}, "Jabu MQ Song of Time Block GS with Boomerang", "Allow the Boomerang to return to you through the Song of Time block to grab the token."); - OPT_TRICK(RT_LENS_BOTW, RCQUEST_VANILLA, RA_BOTTOM_OF_THE_WELL, {Tricks::Tag::NOVICE}, "Bottom of the Well without Lens of Truth", "Removes the requirements for the Lens of Truth in Bottom of the Well."); - OPT_TRICK(RT_BOTW_CHILD_DEADHAND, RCQUEST_BOTH, RA_BOTTOM_OF_THE_WELL, {Tricks::Tag::NOVICE}, "Child Dead Hand without Kokiri Sword", "Requires 9 sticks or 5 jump slashes."); - OPT_TRICK(RT_BOTW_BASEMENT, RCQUEST_VANILLA, RA_BOTTOM_OF_THE_WELL, {Tricks::Tag::NOVICE}, "Bottom of the Well Map Chest with Strength & Sticks", "The chest in the basement can be reached with strength by doing a jump slash with a lit stick to access the bomb flowers."); - OPT_TRICK(RT_BOTW_MQ_PITS, RCQUEST_MQ, RA_BOTTOM_OF_THE_WELL, {Tricks::Tag::NOVICE}, "Bottom of the Well MQ Jump Over the Pits", "While the pits in Bottom of the Well don't allow you to jump just by running straight at them, you can still get over them by side-hopping or backflipping across. With explosives, this allows you to access the central areas without Zelda's Lullaby. With Zelda's Lullaby, it allows you to access the west inner room without explosives."); - OPT_TRICK(RT_BOTW_MQ_DEADHAND_KEY, RCQUEST_MQ, RA_BOTTOM_OF_THE_WELL, {Tricks::Tag::NOVICE}, "Bottom of the Well MQ Dead Hand Freestanding Key with Boomerang", "Boomerang can fish the item out of the rubble without needing explosives to blow it up."); - OPT_TRICK(RT_FOREST_FIRST_GS, RCQUEST_VANILLA, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, "Forest Temple First Room GS with Difficult-to-Use Weapons", "Allows killing this Skulltula with Sword or Sticks by jump slashing it as you let go from the vines. You can avoid taking fall damage by recoiling onto the tree. Also allows killing it as Child with a Bomb throw. It's much more difficult to use a Bomb as child due to Child Link's shorter height."); - OPT_TRICK(RT_FOREST_OUTDOORS_EAST_GS, RCQUEST_VANILLA, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, "Forest Temple East Courtyard GS with Boomerang", "Precise Boomerang throws can allow child to kill the Skulltula and collect the token."); - OPT_TRICK(RT_FOREST_VINES, RCQUEST_BOTH, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, "Forest Temple East Courtyard Vines with Hookshot", "The vines in Forest Temple leading to where the well drain switch is in the standard form can be barely reached with just the Hookshot. Applies to MQ also."); - OPT_TRICK(RT_FOREST_OUTDOORS_LEDGE, RCQUEST_BOTH, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, "Forest Temple NE Outdoors Ledge with Hover Boots", "With precise Hover Boots movement you can fall down to this ledge from upper balconies. If done precisely enough, it is not necessary to take fall damage. In MQ, this skips a Longshot requirement. In Vanilla, this can skip a Hookshot requirement in entrance randomizer."); - OPT_TRICK(RT_FOREST_DOORFRAME, RCQUEST_BOTH, RA_FOREST_TEMPLE, {Tricks::Tag::ADVANCED}, "Forest Temple East Courtyard Door Frame with Hover Boots", "A precise Hover Boots movement from the upper balconies in this courtyard can be used to get on top of the door frame. Applies to both Vanilla and Master Quest. In Vanilla, from on top the door frame you can summon Pierre, allowing you to access the falling ceiling room early. In Master Quest, this allows you to obtain the GS on the door frame as adult without Hookshot or Song of Time."); - OPT_TRICK(RT_FOREST_OUTSIDE_BACKDOOR, RCQUEST_BOTH, RA_FOREST_TEMPLE, {Tricks::Tag::ADVANCED}, "Forest Temple Outside Backdoor with Jump Slash", "A jump slash recoil can be used to reach the ledge in the block puzzle room that leads to the west courtyard. This skips a potential Hover Boots requirement in vanilla, and it can sometimes apply in MQ as well. This trick can be performed as both ages."); - OPT_TRICK(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG, RCQUEST_BOTH, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, "Forest Temple Outside Hearts with Boomerang", "A well aimed boomerang from the water's edge can reach the hearts from ground level. If unable to swim, you can back away from the water while the boomerang is returning so the hearts land on the ground."); - OPT_TRICK(RT_FOREST_MQ_WELL_SWIM, RCQUEST_MQ, RA_FOREST_TEMPLE, {Tricks::Tag::ADVANCED}, "Swim Through Forest Temple MQ Well with Hookshot", "Shoot the vines in the well as low and as far to the right as possible, and then immediately swim under the ceiling to the right. This can only be required if Forest Temple is in its Master Quest form."); - OPT_TRICK(RT_FOREST_MQ_BLOCK_PUZZLE, RCQUEST_MQ, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, "Skip Forest Temple MQ Block Puzzle with Bombchu", "Send the Bombchu straight up the center of the wall directly to the left upon entering the room."); - //Child with hovers cannot do this from the lower floor, and most go to the upper floor which needs goron bracelet. Adult can do this with hammer and KSword, But child cannot. - OPT_TRICK(RT_FOREST_MQ_JS_HALLWAY_SWITCH, RCQUEST_MQ, RA_FOREST_TEMPLE, {Tricks::Tag::NOVICE}, "Forest Temple MQ Twisted Hallway Switch with Jump Slash", "The switch to twist the hallway can be hit with a jump slash through the glass block. To get in front of the switch, either use the Hover Boots or hit the shortcut switch at the top of the room and jump from the glass blocks that spawn. Sticks can be used as child, but the Kokiri Sword is too short to reach through the glass."); - OPT_TRICK(RT_FOREST_MQ_HOOKSHOT_HALLWAY_SWITCH, RCQUEST_MQ, RA_FOREST_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Forest Temple MQ Twisted Hallway Switch with Hookshot", "There's a very small gap between the glass block and the wall. Through that gap you can hookshot the target on the ceiling."); - OPT_TRICK(RT_FOREST_MQ_RANG_HALLWAY_SWITCH, RCQUEST_MQ, RA_FOREST_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Forest Temple MQ Twisted Hallway Switch with Boomerang", "The Boomerang can return to Link through walls, allowing child to hit the hallway switch. This can be used to allow adult to pass through later, or in conjuction with \"Forest Temple Outside Backdoor with Jump Slash\"."); - OPT_TRICK(RT_FIRE_BOSS_DOOR_JUMP, RCQUEST_BOTH, RA_FIRE_TEMPLE, {Tricks::Tag::NOVICE}, "Fire Temple Boss Door without Hover Boots or Pillar", "The Fire Temple Boss Door can be reached as adult with a precise jump. You must be touching the side wall of the room so that Link will grab the ledge from farther away than is normally possible."); - //Is also used in MQ logic, but has no practical effect there as of now - OPT_TRICK(RT_FIRE_SOT, RCQUEST_VANILLA, RA_FIRE_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Fire Temple Song of Time Room GS without Song of Time", "A precise jump can be used to reach this room."); - OPT_TRICK(RT_FIRE_STRENGTH, RCQUEST_VANILLA, RA_FIRE_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Fire Temple Climb without Strength", "A precise jump can be used to skip pushing the block."); - OPT_TRICK(RT_FIRE_SCARECROW, RCQUEST_VANILLA, RA_FIRE_TEMPLE, {Tricks::Tag::EXPERT}, "Fire Temple East Tower without Scarecrow\'s Song", "Also known as \"Pixelshot\". The Longshot can reach the target on the elevator itself, allowing you to skip needing to spawn the scarecrow."); - OPT_TRICK(RT_FIRE_FLAME_MAZE, RCQUEST_VANILLA, RA_FIRE_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Fire Temple Flame Wall Maze Skip", "If you move quickly you can sneak past the edge of a flame wall before it can rise up to block you. To do it without taking damage is more precise. Allows you to progress without needing either a Small Key or Hover Boots."); - OPT_TRICK(RT_FIRE_MQ_NEAR_BOSS, RCQUEST_MQ, RA_FIRE_TEMPLE, {Tricks::Tag::NOVICE}, "Fire Temple MQ Chest Near Boss without Breaking Crate", "The hitbox for the torch extends a bit outside of the crate. Shoot a flaming arrow at the side of the crate to light the torch without needing to get over there and break the crate."); - OPT_TRICK(RT_FIRE_MQ_BLOCKED_CHEST, RCQUEST_MQ, RA_FIRE_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Fire Temple MQ Big Lava Room Blocked Door without Hookshot", "There is a gap between the hitboxes of the flame wall in the big lava room. If you know where this gap is located, you can jump through it and skip needing to use the Hookshot. To do this without taking damage is more precise."); - OPT_TRICK(RT_FIRE_MQ_BK_CHEST, RCQUEST_MQ, RA_FIRE_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Fire Temple MQ Boss Key Chest without Bow", "It is possible to light both of the timed torches to unbar the door to the boss key chest's room with just Din's Fire if you move very quickly between the two torches. It is also possible to unbar the door with just Din's by abusing an oversight in the way the game counts how many torches have been lit."); - OPT_TRICK(RT_FIRE_MQ_CLIMB, RCQUEST_MQ, RA_FIRE_TEMPLE, {Tricks::Tag::NOVICE}, "Fire Temple MQ Climb without Fire Source", "You can use the Hover Boots to hover around to the climbable wall, skipping the need to use a fire source and spawn a Hookshot target."); - OPT_TRICK(RT_FIRE_MQ_MAZE_SIDE_ROOM, RCQUEST_MQ, RA_FIRE_TEMPLE, {Tricks::Tag::NOVICE}, "Fire Temple MQ Lizalfos Maze Side Room without Box", "You can walk from the blue switch to the door and quickly open the door before the bars reclose. This skips needing to reach the upper sections of the maze to get a box to place on the switch."); - OPT_TRICK(RT_FIRE_MQ_MAZE_HOVERS, RCQUEST_MQ, RA_FIRE_TEMPLE, {Tricks::Tag::NOVICE}, "Fire Temple MQ Lower to Upper Lizalfos Maze with Hover Boots", "Use the Hover Boots off of a crate to climb to the upper maze without needing to spawn and use the Hookshot targets."); - OPT_TRICK(RT_FIRE_MQ_MAZE_JUMP, RCQUEST_MQ, RA_FIRE_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Fire Temple MQ Lower to Upper Lizalfos Maze with Precise Jump", "A precise jump off of a crate can be used to climb to the upper maze without needing to spawn and use the Hookshot targets. This trick supersedes both \"Fire Temple MQ Lower to Upper Lizalfos Maze with Hover Boots\" and \"Fire Temple MQ Lizalfos Maze Side Room without Box\"."); - OPT_TRICK(RT_FIRE_MQ_ABOVE_MAZE_GS, RCQUEST_MQ, RA_FIRE_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Fire Temple MQ Above Flame Wall Maze GS from Below with Longshot", "The floor of the room that contains this Skulltula is only solid from above. From the maze below, the Longshot can be shot through the ceiling to obtain the token with two fewer small keys than normal."); - OPT_TRICK(RT_FIRE_MQ_FLAME_MAZE, RCQUEST_MQ, RA_FIRE_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Fire Temple MQ Flame Wall Maze Skip", "If you move quickly you can sneak past the edge of a flame wall before it can rise up to block you. To do it without taking damage is more precise. Allows you to reach the side room GS without needing Song of Time or Hover Boots. If either of \"Fire Temple MQ Lower to Upper Lizalfos Maze with Hover Boots\" or \"with Precise Jump\" are enabled, this also allows you to progress deeper into the dungeon without Hookshot."); - OPT_TRICK(RT_WATER_LONGSHOT_TORCH, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple Torch Longshot", "Stand on the eastern side of the central pillar and longshot the torches on the bottom level. Swim through the corridor and float up to the top level. This allows access to this area and lower water levels without Iron Boots. The majority of the tricks that allow you to skip Iron Boots in the Water Temple are not going to be relevant unless this trick is first enabled."); - OPT_TRICK(RT_WATER_CRACKED_WALL_HOVERS, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple Cracked Wall with Hover Boots", "With a midair side-hop while wearing the Hover Boots, you can reach the cracked wall without needing to raise the water up to the middle level."); - OPT_TRICK(RT_WATER_CRACKED_WALL, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Water Temple Cracked Wall with No Additional Items", "A precise jump slash (among other methods) will get you to the cracked wall without needing the Hover Boots or to raise the water to the middle level. This trick supersedes \"Water Temple Cracked Wall with Hover Boots\"."); - OPT_TRICK(RT_WATER_BK_REGION, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Water Temple Boss Key Region with Hover Boots", "With precise Hover Boots movement it is possible to reach the boss key chest's region without needing the Longshot. It is not necessary to take damage from the spikes. The Gold Skulltula Token in the following room can also be obtained with just the Hover Boots."); - OPT_TRICK(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP, RCQUEST_BOTH, RA_WATER_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Water Temple North Basement Ledge with Precise Jump", "In the northern basement there's a ledge from where, in vanilla Water Temple, boulders roll out into the room. Normally to jump directly to this ledge logically requires the Hover Boots, but with precise jump, it can be done without them. This trick applies to both Vanilla and Master Quest."); - OPT_TRICK(RT_WATER_BK_JUMP_DIVE, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple Boss Key Jump Dive", "Stand on the very edge of the raised corridor leading from the push block room to the rolling boulder corridor. Face the Gold Skulltula on the waterfall and jump over the boulder corridor floor into the pool of water, swimming right once underwater. This allows access to the boss key room without Iron boots."); - //Also used in MQ logic, but won't be relevent unless a way to enter tower without irons exists (likely a clip + swim) - OPT_TRICK(RT_WATER_FW_CENTRAL_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple Central Pillar GS with Farore\'s Wind", "If you set Farore's Wind inside the central pillar and then return to that warp point after raising the water to the highest level, you can obtain this Skulltula Token with Hookshot or Boomerang."); - OPT_TRICK(RT_WATER_IRONS_CENTRAL_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple Central Pillar GS with Iron Boots", "After opening the middle water level door into the central pillar, the door will stay unbarred so long as you do not leave the room -- even if you were to raise the water up to the highest level. With the Iron Boots to go through the door after the water has been raised, you can obtain the Skulltula Token with the Hookshot."); - OPT_TRICK(RT_WATER_CENTRAL_BOW, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::ADVANCED}, "Water Temple Central Bow Target without Longshot or Hover Boots", "A very precise Bow shot can hit the eye switch from the floor above. Then, you can jump down into the hallway and make through it before the gate closes. It can also be done as child, using the Slingshot instead of the Bow."); - OPT_TRICK(RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple Falling Platform Room GS with Hookshot", "If you stand on the very edge of the platform, this Gold Skulltula can be obtained with only the Hookshot."); - OPT_TRICK(RT_WATER_RANG_FALLING_PLATFORM_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Water Temple Falling Platform Room GS with Boomerang", "If you stand on the very edge of the platform, this Gold Skulltula can be obtained with only the Boomerang."); - OPT_TRICK(RT_WATER_RIVER_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Water Temple River GS without Iron Boots", "Standing on the exposed ground toward the end of the river, a precise Longshot use can obtain the token. The Longshot cannot normally reach far enough to kill the Skulltula, however. You'll first have to find some other way of killing it."); - OPT_TRICK(RT_WATER_DRAGON_JUMP_DIVE, RCQUEST_BOTH, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple Dragon Statue Jump Dive", "If you come into the dragon statue room from the serpent river, you can jump down from above and get into the tunnel without needing either Iron Boots or a Scale. This trick applies to both Vanilla and Master Quest. In Vanilla, you must shoot the switch from above with the Bow, and then quickly get through the tunnel before the gate closes."); - OPT_TRICK(RT_WATER_ADULT_DRAGON, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple Dragon Statue Switch from Above the Water as Adult", "Normally you need both Hookshot and Iron Boots to hit the switch and swim through the tunnel to get to the chest. But by hitting the switch from dry land, using one of Bombchus, Hookshot, or Bow, it is possible to skip one or both of those requirements. After the gate has been opened, besides just using the Iron Boots, a well-timed dive with at least the Silver Scale could be used to swim through the tunnel. If coming from the serpent river, a jump dive can also be used to get into the tunnel."); - OPT_TRICK(RT_WATER_CHILD_DRAGON, RCQUEST_VANILLA, RA_WATER_TEMPLE, {Tricks::Tag::ADVANCED}, "Water Temple Dragon Statue Switch from Above the Water as Child", "It is possible for child to hit the switch from dry land using one of Bombchus, Slingshot or Boomerang. Then, to get to the chest, child can dive through the tunnel using at least the Silver Scale. The timing and positioning of this dive needs to be perfect to actually make it under the gate, and it all needs to be done very quickly to be able to get through before the gate closes. Be sure to enable \"Water Temple Dragon Statue Switch from Above the Water as Adult\" for adult's variant of this trick."); - OPT_TRICK(RT_WATER_MQ_CENTRAL_PILLAR, RCQUEST_MQ, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple MQ Central Pillar with Fire Arrows", "Slanted torches have misleading hitboxes. Whenever you see a slanted torch jutting out of the wall, you can expect most or all of its hitbox is actually on the other side that wall. This can make slanted torches very finicky to light when using arrows. The torches in the central pillar of MQ Water Temple are a particularly egregious example. Logic normally expects Din's Fire and Song of Time."); - OPT_TRICK(RT_WATER_MQ_LOCKED_GS, RCQUEST_MQ, RA_WATER_TEMPLE, {Tricks::Tag::NOVICE}, "Water Temple MQ North Basement GS without Small Key", "There is an invisible Hookshot target that can be used to get over the gate that blocks you from going to this Skulltula early, skipping a small key as well as needing Hovers or Scarecrow to reach the locked door."); - OPT_TRICK(RT_LENS_SHADOW, RCQUEST_VANILLA, RA_SHADOW_TEMPLE, {Tricks::Tag::NOVICE}, "Shadow Temple Stationary Objects without Lens of Truth", "Removes the requirements for the Lens of Truth in Shadow Temple for most areas in the dungeon except for crossing the moving platform in the huge pit room and for fighting Bongo Bongo."); - OPT_TRICK(RT_LENS_SHADOW_PLATFORM, RCQUEST_VANILLA, RA_SHADOW_TEMPLE, {Tricks::Tag::NOVICE}, "Shadow Temple Invisible Moving Platform without Lens of Truth", "Removes the requirements for the Lens of Truth in Shadow Temple to cross the invisible moving platform in the huge pit room in either direction."); - OPT_TRICK(RT_LENS_BONGO, RCQUEST_BOTH, RA_SHADOW_TEMPLE, {Tricks::Tag::NOVICE}, "Shadow Temple Bongo Bongo without Lens of Truth", "Bongo Bongo can be defeated without the use of Lens of Truth, as the hands give a pretty good idea of where the eye is."); - OPT_TRICK(RT_SHADOW_UMBRELLA, RCQUEST_BOTH, RA_SHADOW_TEMPLE, {Tricks::Tag::EXPERT}, "Shadow Temple Stone Umbrella Skip", "A very precise Hover Boots movement from off of the lower chest can get you on top of the crushing spikes without needing to pull the block. Applies to both Vanilla and Master Quest."); - OPT_TRICK(RT_SHADOW_UMBRELLA_GS, RCQUEST_BOTH, RA_SHADOW_TEMPLE, {Tricks::Tag::EXPERT}, "Shadow Temple Falling Spikes GS with Hover Boots", "After killing the Skulltula, a very precise Hover Boots movement from off of the lower chest can get you on top of the crushing spikes without needing to pull the block. From there, another very precise Hover Boots movement can be used to obtain the token without needing the Hookshot. Applies to both Vanilla and Master Quest. For obtaining the chests in this room with just Hover Boots, be sure to enable \"Shadow Temple Stone Umbrella Skip\"."); - OPT_TRICK(RT_SHADOW_FREESTANDING_KEY, RCQUEST_VANILLA, RA_SHADOW_TEMPLE, {Tricks::Tag::NOVICE}, "Shadow Temple Freestanding Key with Bombchu", "Release the Bombchu with good timing so that it explodes near the bottom of the pot."); - OPT_TRICK(RT_SHADOW_STATUE, RCQUEST_BOTH, RA_SHADOW_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Shadow Temple River Statue with Bombchu", "By sending a Bombchu around the edge of the gorge, you can knock down the statue without needing a Bow. Applies in both vanilla and MQ Shadow."); - OPT_TRICK(RT_SHADOW_BONGO, RCQUEST_BOTH, RA_SHADOW_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Shadow Temple Bongo Bongo without projectiles", "Using precise sword slashes, Bongo Bongo can be defeated without using projectiles. This is only relevant in conjunction with Shadow Temple dungeon shortcuts or shuffled boss entrances."); - OPT_TRICK(RT_LENS_SHADOW_MQ, RCQUEST_MQ, RA_SHADOW_TEMPLE, {Tricks::Tag::NOVICE}, "Shadow Temple MQ Stationary Objects without Lens of Truth", "Removes the requirements for the Lens of Truth in Shadow Temple MQ for most areas in the dungeon. See \"Shadow Temple MQ Invisible Moving Platform without Lens of Truth\", \"Shadow Temple MQ Invisible Blades Silver Rupees without Lens of Truth\", \"Shadow Temple MQ 2nd Dead Hand without Lens of Truth\", and \"Shadow Temple Bongo Bongo without Lens of Truth\" for exceptions."); - OPT_TRICK(RT_LENS_SHADOW_MQ_INVISIBLE_BLADES, RCQUEST_MQ, RA_SHADOW_TEMPLE, {Tricks::Tag::NOVICE}, "Shadow Temple MQ Invisible Blades Silver Rupees without Lens of Truth", "Removes the requirement for the Lens of Truth or Nayru's Love in Shadow Temple MQ for the Invisible Blades room silver rupee collection."); - OPT_TRICK(RT_LENS_SHADOW_MQ_PLATFORM, RCQUEST_MQ, RA_SHADOW_TEMPLE, {Tricks::Tag::NOVICE}, "Shadow Temple MQ Invisible Moving Platform without Lens of Truth", "Removes the requirements for the Lens of Truth in Shadow Temple MQ to cross the invisible moving platform in the huge pit room in either direction."); - OPT_TRICK(RT_LENS_SHADOW_MQ_DEADHAND, RCQUEST_MQ, RA_SHADOW_TEMPLE, {Tricks::Tag::NOVICE}, "Shadow Temple MQ 2nd Dead Hand without Lens of Truth", "Dead Hand spawns in a random spot within the room. Having Lens removes the hassle of having to comb the room looking for his spawn location."); - OPT_TRICK(RT_SHADOW_MQ_GAP, RCQUEST_MQ, RA_SHADOW_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Shadow Temple MQ Truth Spinner Gap with Longshot", "You can Longshot a torch and jump-slash recoil onto the tongue. It works best if you Longshot the right torch from the left side of the room."); - OPT_TRICK(RT_SHADOW_MQ_INVISIBLE_BLADES, RCQUEST_MQ, RA_SHADOW_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Shadow Temple MQ Invisible Blades without Song of Time", "The Like Like can be used to boost you into the silver rupee or recovery hearts that normally require Song of Time. This cannot be performed on OHKO since the Like Like does not boost you high enough if you die."); - OPT_TRICK(RT_SHADOW_MQ_HUGE_PIT, RCQUEST_MQ, RA_SHADOW_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Shadow Temple MQ Lower Huge Pit without Fire Source", "Normally a frozen eye switch spawns some platforms that you can use to climb down, but there's actually a small piece of ground that you can stand on that you can just jump down to."); - OPT_TRICK(RT_SHADOW_MQ_WINDY_WALKWAY, RCQUEST_MQ, RA_SHADOW_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Shadow Temple MQ Windy Walkway Reverse without Hover Boots", "It is possible to jump from the alcove in the windy hallway to the middle platform. There are two methods: wait out the fan opposite the door and hold forward, or jump to the right to be pushed by the fan there towards the platform ledge. Note that jumps of this distance are inconsistent, but still possible."); - OPT_TRICK(RT_LENS_SPIRIT, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, {Tricks::Tag::NOVICE}, "Spirit Temple without Lens of Truth", "Removes the requirements for the Lens of Truth in Spirit Temple."); - OPT_TRICK(RT_SPIRIT_CHILD_CHU, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, {Tricks::Tag::NOVICE}, "Spirit Temple Child Side Bridge with Bombchu", "A carefully-timed Bombchu can hit the switch."); - OPT_TRICK(RT_SPIRIT_LOBBY_GS, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, {Tricks::Tag::NOVICE}, "Spirit Temple Main Room GS with Boomerang", "Standing on the highest part of the arm of the statue, a precise Boomerang throw can kill and obtain this Gold Skulltula. You must throw the Boomerang slightly off to the side so that it curves into the Skulltula, as aiming directly at it will clank off of the wall in front."); - OPT_TRICK(RT_SPIRIT_LOWER_ADULT_SWITCH, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, {Tricks::Tag::ADVANCED}, "Spirit Temple Lower Adult Switch with Bombs", "A bomb can be used to hit the switch on the ceiling, but it must be thrown from a particular distance away and with precise timing."); - OPT_TRICK(RT_SPIRIT_LOBBY_JUMP, RCQUEST_BOTH, RA_SPIRIT_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Spirit Temple Main Room Jump from Hands to Upper Ledges", "A precise jump to obtain the following as adult without needing one of Hover Boots, or Hookshot (in vanilla) or Song of Time (in MQ): - Spirit Temple Statue Room Northeast Chest - Spirit Temple GS Lobby - Spirit Temple MQ Central Chamber Top Left Pot (Left) - Spirit Temple MQ Central Chamber Top Left Pot (Right)"); - // disabled since "Spirit Temple boss shortcuts" (pre-lowers the platform where you break the statues face) isn't a setting in ship - // OPT_TRICK(RT_SPIRIT_PLATFORM_HOOKSHOT, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Spirit Temple Main Room Hookshot to Boss Platform", "Precise hookshot aiming at the platform chains can be used to reach the boss platform from the middle landings. Using a jump slash immediately after reaching a chain makes aiming more lenient. Relevant only when Spirit Temple boss shortcuts are on."); - OPT_TRICK(RT_SPIRIT_MAP_CHEST, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, {Tricks::Tag::NOVICE}, "Spirit Temple Map Chest with Bow", "To get a line of sight from the upper torch to the map chest torches, you must pull an Armos statue all the way up the stairs."); - OPT_TRICK(RT_SPIRIT_SUN_CHEST, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, {Tricks::Tag::ADVANCED}, "Spirit Temple Sun Block Room Chest with Bow", "Using the blocks in the room as platforms you can get lines of sight to all three torches. The timer on the torches is quite short so you must move quickly in order to light all three."); - OPT_TRICK(RT_SPIRIT_WALL, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Spirit Temple Shifting Wall with No Additional Items", "Logic normally guarantees a way of dealing with both the Beamos and the Walltula before climbing the wall."); - OPT_TRICK(RT_LENS_SPIRIT_MQ, RCQUEST_MQ, RA_SPIRIT_TEMPLE, {Tricks::Tag::NOVICE}, "Spirit Temple MQ without Lens of Truth", "Removes the requirements for the Lens of Truth in Spirit Temple MQ."); - OPT_TRICK(RT_SPIRIT_MQ_SUN_BLOCK_SOT, RCQUEST_MQ, RA_SPIRIT_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Spirit Temple MQ Sun Block Room as Child without Song of Time", "While adult can easily jump directly to the switch that unbars the door to the sun block room, child Link cannot make the jump without spawning a Song of Time block to jump from. You can skip this by throwing the crate down onto the switch from above, which does unbar the door, however the crate immediately breaks, so you must move quickly to get through the door before it closes back up."); - OPT_TRICK(RT_SPIRIT_MQ_SUN_BLOCK_GS, RCQUEST_MQ, RA_SPIRIT_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Spirit Temple MQ Sun Block Room GS with Boomerang", "Throw the Boomerang in such a way that it curves through the side of the glass block to hit the Gold Skulltula."); - OPT_TRICK(RT_SPIRIT_MQ_LOWER_ADULT, RCQUEST_MQ, RA_SPIRIT_TEMPLE, {Tricks::Tag::INTERMEDIATE}, "Spirit Temple MQ Lower Adult without Fire Arrows", "By standing in a precise position it is possible to light two of the torches with a single use of Din\'s Fire. This saves enough time to be able to light all three torches with only Din\'s."); - OPT_TRICK(RT_SPIRIT_MQ_FROZEN_EYE, RCQUEST_MQ, RA_SPIRIT_TEMPLE, {Tricks::Tag::NOVICE}, "Spirit Temple MQ Frozen Eye Switch without Fire", "You can melt the ice by shooting an arrow through a torch. The only way to find a line of sight for this shot is to first spawn a Song of Time block, and then stand on the very edge of it."); - OPT_TRICK(RT_ICE_BLOCK_GS, RCQUEST_VANILLA, RA_ICE_CAVERN, {Tricks::Tag::INTERMEDIATE}, "Ice Cavern Block Room GS with Hover Boots", "The Hover Boots can be used to get in front of the Skulltula to kill it with a jump slash. Then, the Hover Boots can again be used to obtain the Token, all without Hookshot or Boomerang."); - OPT_TRICK(RT_ICE_MQ_RED_ICE_GS, RCQUEST_MQ, RA_ICE_CAVERN, {Tricks::Tag::INTERMEDIATE}, "Ice Cavern MQ Red Ice GS without Song of Time", "If you side-hop into the perfect position, you can briefly stand on the platform with the red ice just long enough to dump some blue fire."); - OPT_TRICK(RT_ICE_MQ_SCARECROW, RCQUEST_MQ, RA_ICE_CAVERN, {Tricks::Tag::INTERMEDIATE}, "Ice Cavern MQ Scarecrow GS with No Additional Items", "As adult a precise jump can be used to reach this alcove."); - OPT_TRICK(RT_LENS_GTG, RCQUEST_VANILLA, RA_GERUDO_TRAINING_GROUND, {Tricks::Tag::NOVICE}, "Gerudo Training Ground without Lens of Truth", "Removes the requirements for the Lens of Truth in Gerudo Training Ground."); - OPT_TRICK(RT_GTG_WITHOUT_HOOKSHOT, RCQUEST_VANILLA, RA_GERUDO_TRAINING_GROUND, {Tricks::Tag::INTERMEDIATE}, "Gerudo Training Ground Left Side Silver Rupees without Hookshot", "After collecting the rest of the silver rupees in the room, you can reach the final silver rupee on the ceiling by being pulled up into it after getting grabbed by the Wallmaster. Then, you must also reach the exit of the room without the use of the Hookshot. If you move quickly you can sneak past the edge of a flame wall before it can rise up to block you. To do so without taking damage is more precise."); - OPT_TRICK(RT_GTG_FAKE_WALL, RCQUEST_BOTH, RA_GERUDO_TRAINING_GROUND, {Tricks::Tag::NOVICE}, "Reach Gerudo Training Ground Fake Wall Ledge with Hover Boots", "A precise Hover Boots use from the top of the chest can allow you to grab the ledge without needing the usual requirements. In Master Quest, this always skips a Song of Time requirement. In Vanilla, this skips a Hookshot requirement, but is only relevant if \"Gerudo Training Ground Left Side Silver Rupees without Hookshot\" is enabled."); - OPT_TRICK(RT_LENS_GTG_MQ, RCQUEST_MQ, RA_GERUDO_TRAINING_GROUND, {Tricks::Tag::NOVICE}, "Gerudo Training Ground MQ without Lens of Truth", "Removes the requirements for the Lens of Truth in Gerudo Training Ground MQ."); - OPT_TRICK(RT_GTG_MQ_WITH_HOOKSHOT, RCQUEST_MQ, RA_GERUDO_TRAINING_GROUND, {Tricks::Tag::NOVICE}, "Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot", "The highest silver rupee can be obtained by hookshotting the target and then immediately jump slashing toward the rupee."); - OPT_TRICK(RT_GTG_MQ_WIHTOUT_HOOKSHOT, RCQUEST_MQ, RA_GERUDO_TRAINING_GROUND, {Tricks::Tag::INTERMEDIATE}, "Gerudo Training Ground MQ Left Side Silver Rupees without Hookshot", "After collecting the rest of the silver rupees in the room, you can reach the final silver rupee on the ceiling by being pulled up into it after getting grabbed by the Wallmaster. The Wallmaster will not track you to directly underneath the rupee. You should take the last step to be under the rupee after the Wallmaster has begun its attempt to grab you. Also included with this trick is that fact that the switch that unbars the door to the final chest of GTG can be hit without a projectile, using a precise jump slash. This trick supersedes \"Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot\"."); - OPT_TRICK(RT_LENS_GANON, RCQUEST_VANILLA, RA_GANONS_CASTLE, {Tricks::Tag::NOVICE}, "Ganon\'s Castle without Lens of Truth", "Removes the requirements for the Lens of Truth in Ganon's Castle."); - OPT_TRICK(RT_GANON_SPIRIT_TRIAL_HOOKSHOT, RCQUEST_VANILLA, RA_GANONS_CASTLE, {Tricks::Tag::NOVICE}, "Spirit Trial without Hookshot", "The highest rupee can be obtained as either age by performing a precise jump and a well-timed jumpslash off of an Armos."); - OPT_TRICK(RT_LENS_GANON_MQ, RCQUEST_MQ, RA_GANONS_CASTLE, {Tricks::Tag::NOVICE}, "Ganon\'s Castle MQ without Lens of Truth", "Removes the requirements for the Lens of Truth in Ganon's Castle MQ."); - OPT_TRICK(RT_GANON_MQ_FIRE_TRIAL, RCQUEST_MQ, RA_GANONS_CASTLE, {Tricks::Tag::ADVANCED}, "Fire Trial MQ with Hookshot", "It's possible to hook the target at the end of fire trial with just Hookshot, but it requires precise aim and perfect positioning. The main difficulty comes from getting on the very corner of the obelisk without falling into the lava."); - OPT_TRICK(RT_GANON_MQ_SHADOW_TRIAL, RCQUEST_MQ, RA_GANONS_CASTLE, {Tricks::Tag::NOVICE}, "Shadow Trial MQ Torch with Bow", "You can light the torch in this room without a fire source by shooting an arrow through the lit torch at the beginning of the room. Because the room is so dark and the unlit torch is so far away, it can be difficult to aim the shot correctly."); - OPT_TRICK(RT_GANON_MQ_LIGHT_TRIAL, RCQUEST_MQ, RA_GANONS_CASTLE, {Tricks::Tag::INTERMEDIATE}, "Light Trial MQ without Hookshot", "If you move quickly you can sneak past the edge of a flame wall before it can rise up to block you. In this case to do it without taking damage is especially precise."); + OPT_TRICK(RT_VISIBLE_COLLISION, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, + "Pass Through Visible One-Way Collision", + "Allows climbing through the platform to reach Impa's House Back as adult with no items and going " + "through the Kakariko Village Gate as child when coming from the Mountain Trail side."); + OPT_TRICK(RT_GROTTOS_WITHOUT_AGONY, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, + "Hidden Grottos without Stone of Agony", "Allows entering hidden grottos without the Stone of Agony."); + OPT_TRICK(RT_FEWER_TUNIC_REQUIREMENTS, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::INTERMEDIATE }, + "Fewer Tunic Requirements", + "Allows the following possible without Tunics:\n- Enter Water Temple. The area below the center pillar " + "still requires Zora Tunic. Applies to MQ also.\n- Enter Fire Temple. Volvagia still requires Goron " + "Tunic. Applies to MQ also, and includes child access to first floor with dungeon shuffle."); + OPT_TRICK(RT_RUSTED_SWITCHES, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, + "Hammer Rusted Switches Through Walls", + "Applies to:\n- Fire Temple Highest Goron Chest.\n- MQ Fire Temple Lizalfos Maze.\n- MQ Spirit Trial."); + OPT_TRICK(RT_FLAMING_CHESTS, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::INTERMEDIATE }, "Flaming Chests", + "The chests encircled in flames in Gerudo Training Ground and in Spirit Temple can be opened by running " + "into the flames while Link is invincible after taking damage."); + // disabled for now, can't check for being able to use bunny hood & bunny hood speedup is currently completely + // decoupled from rando OPT_TRICK(RT_BUNNY_HOOD_JUMPS, RCQUEST_BOTH, RA_NONE, {Tricks::Tag::ADVANCED}, "Bunny Hood + // Jumps", "Allows reaching locations using Bunny Hood's extended jumps."); + OPT_TRICK(RT_DAMAGE_BOOST_SIMPLE, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL }, + "Simple damage boosts", + "Allows damage boosts in order to reach further locations. Can be combined with \"Simple hover boosts\" " + "for reaching far distances."); + OPT_TRICK(RT_HOVER_BOOST_SIMPLE, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::ADVANCED, Tricks::Tag::EXPERIMENTAL }, + "Simple hover boosts", + "Allows equipping of hover boots when link is moving at high speeds to extend distance covered. Can be " + "combined with \"Simple damage boosts\" for greater uses."); + OPT_TRICK(RT_BOMBCHU_BEEHIVES, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "Bombchu Beehives", + "Allows exploding beehives with Bombchus."); + OPT_TRICK(RT_BLUE_FIRE_MUD_WALLS, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "Break Mud Walls with Blue Fire", + "Use Blue Fire to break mud walls."); + OPT_TRICK(RT_KF_ADULT_GS, RCQUEST_BOTH, RA_KOKIRI_FOREST, { Tricks::Tag::NOVICE }, + "Adult Kokiri Forest GS with Hover Boots", + "Can be obtained without Hookshot by using the Hover Boots off of one of the roots."); + OPT_TRICK(RT_LW_BRIDGE, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::EXPERT }, + "Jump onto the Lost Woods Bridge as Adult with Nothing", + "With very precise movement it's possible for adult to jump onto the bridge without needing Longshot, " + "Hover Boots, or Bean."); + OPT_TRICK(RT_LW_MIDO_BACKFLIP, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::NOVICE }, + "Backflip over Mido as Adult", "With a specific position and angle, you can backflip over Mido."); + OPT_TRICK(RT_LW_GS_BEAN, RCQUEST_BOTH, RA_THE_LOST_WOODS, { Tricks::Tag::INTERMEDIATE }, + "Lost Woods Adult GS without Bean", + "You can collect the token with a precise Hookshot use, as long as you can kill the Skulltula somehow " + "first. It can be killed using Longshot, Bow, Bombchus or Din's Fire."); + OPT_TRICK(RT_HC_STORMS_GS, RCQUEST_BOTH, RA_HYRULE_CASTLE, { Tricks::Tag::INTERMEDIATE }, + "Hyrule Castle Storms Grotto GS with Just Boomerang", + "With precise throws, the Boomerang alone can kill the Skulltula and collect the token, without first " + "needing to blow up the wall."); + OPT_TRICK(RT_KAK_MAN_ON_ROOF, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::NOVICE }, + "Man on Roof without Hookshot", + "Can be reached by side-hopping off the watchtower as either age, or by jumping onto the potion shop's " + "roof from the ledge as adult."); + OPT_TRICK(RT_KAK_TOWER_GS, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::INTERMEDIATE }, + "Kakariko Tower GS with Jump Slash", + "Climb the tower as high as you can without touching the Gold Skulltula, then let go and jump slash " + "immediately. By jump-slashing from as low on the ladder as possible to still hit the Skulltula, this " + "trick can be done without taking fall damage."); + OPT_TRICK(RT_KAK_ADULT_WINDMILL_POH, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::NOVICE }, + "Windmill PoH as Adult with Nothing", "Can jump up to the spinning platform from below as adult."); + OPT_TRICK(RT_KAK_CHILD_WINDMILL_POH, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::EXTREME }, + "Windmill PoH as Child with Precise Jump Slash", + "Can jump up to the spinning platform from below as child with a precise jumpslash timed with the " + "platforms rotation."); + OPT_TRICK( + RT_KAK_ROOFTOP_GS, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::ADVANCED }, + "Kakariko Rooftop GS with Hover Boots", + "Take the Hover Boots from the entrance to Impa's House over to the rooftop of Skulltula House. From there, a " + "precise Hover Boots backwalk with backflip can be used to get onto a hill above the side of the village. And " + "then from there you can Hover onto Impa's rooftop to kill the Skulltula and backflip into the token."); + OPT_TRICK(RT_GY_POH, RCQUEST_BOTH, RA_THE_GRAVEYARD, { Tricks::Tag::INTERMEDIATE }, + "Graveyard Freestanding PoH with Boomerang", + "Using a precise moving setup you can obtain the Piece of Heart by having the Boomerang interact with it " + "along the return path."); + OPT_TRICK( + RT_GY_CHILD_DAMPE_RACE_POH, RCQUEST_BOTH, RA_THE_GRAVEYARD, { Tricks::Tag::NOVICE }, + "Second Dampe Race as Child", + "It is possible to complete the second dampe race as child in under a minute, but it is a strict time limit."); + OPT_TRICK(RT_GY_SHADOW_FIRE_ARROWS, RCQUEST_BOTH, RA_THE_GRAVEYARD, { Tricks::Tag::EXPERT }, + "Shadow Temple Entry with Fire Arrows", + "It is possible to light all of the torches to open the Shadow Temple entrance with just Fire Arrows, " + "but you must be very quick, precise, and strategic with how you take your shots."); + OPT_TRICK(RT_DMT_SOIL_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::INTERMEDIATE }, + "Death Mountain Trail Soil GS without Destroying Boulder", + "Bugs will go into the soft soil even while the boulder is still blocking the entrance. Then, using a " + "precise moving setup you can kill the Gold Skulltula and obtain the token by having the Boomerang " + "interact with it along the return path."); + OPT_TRICK(RT_DMT_BOMBABLE, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::INTERMEDIATE }, + "Death Mountain Trail Chest with Strength", + "Child Link can blow up the wall using a nearby bomb flower. You must backwalk with the flower and then " + "quickly throw it toward the wall."); + OPT_TRICK(RT_DMT_HOOKSHOT_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::INTERMEDIATE }, + "Death Mountain Trail Lower Red Rock GS with Hookshot", + "After killing the Skulltula, the token can be fished out of the rock without needing to destroy it, by " + "using the Hookshot in the correct way."); + OPT_TRICK(RT_DMT_HOVERS_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::ADVANCED }, + "Death Mountain Trail Lower Red Rock GS with Hover Boots", + "After killing the Skulltula, the token can be collected without needing to destroy the rock by " + "backflipping down onto it with the Hover Boots. First use the Hover Boots to stand on a nearby fence, " + "and go for the Skulltula Token from there."); + OPT_TRICK(RT_DMT_BEAN_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::EXPERT }, + "Death Mountain Trail Lower Red Rock GS with Magic Bean", + "After killing the Skulltula, the token can be collected without needing to destroy the rock by jumping " + "down onto it from the bean plant, midflight, with precise timing and positioning."); + OPT_TRICK(RT_DMT_JS_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::INTERMEDIATE }, + "Death Mountain Trail Lower Red Rock GS with Jump Slash", + "After killing the Skulltula, the token can be collected without needing to destroy the rock by jump " + "slashing from a precise angle."); + OPT_TRICK(RT_DMT_CLIMB_HOVERS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::ADVANCED }, + "Death Mountain Trail Climb with Hover Boots", + "It is possible to use the Hover Boots to bypass needing to destroy the boulders blocking the path to " + "the top of Death Mountain."); + OPT_TRICK( + RT_DMT_UPPER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::NOVICE }, + "Death Mountain Trail Upper Red Rock GS without Hammer", + "After killing the Skulltula, the token can be collected by backflipping into the rock at the correct angle."); + // disabled for now, only applies when trade quest is not shuffled so there's a timer (currently not considered in + // logic) OPT_TRICK(RT_DMT_BOLERO_BIGGORON, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, {Tricks::Tag::INTERMEDIATE}, + // "Deliver Eye Drops with Bolero of Fire", "Playing a warp song normally causes a trade item to spoil immediately, + // however, it is possible use Bolero to reach Biggoron and still deliver the Eye Drops before they spoil. If you do + // not wear the Goron Tunic, the heat timer inside the crater will override the trade item\'s timer. When you exit + // to Death Mountain Trail you will have one second to show the Eye Drops before they expire. You can get extra time + // to show the Eye Drops if you warp immediately upon receiving them. If you don't have many hearts, you may have to + // reset the heat timer by quickly dipping in and out of Darunia\'s chamber or quickly equipping and unequipping the + // Goron Tunic. This trick does not apply if \"Randomize Warp Song Destinations\" is enabled, or if the settings are + // such that trade items do not need to be delivered within a time limit."); + OPT_TRICK(RT_GC_POT, RCQUEST_BOTH, RA_GORON_CITY, { Tricks::Tag::ADVANCED }, + "Goron City Spinning Pot PoH with Bombchu", + "A Bombchu can be used to stop the spinning pot, but it can be quite finicky to get it to work."); + OPT_TRICK(RT_GC_POT_STRENGTH, RCQUEST_BOTH, RA_GORON_CITY, { Tricks::Tag::INTERMEDIATE }, + "Goron City Spinning Pot PoH with Strength", + "Allows for stopping the Goron City Spinning Pot using a Bomb Flower alone, requiring strength in lieu " + "of inventory explosives."); + OPT_TRICK(RT_GC_ROLLING_STRENGTH, RCQUEST_BOTH, RA_GORON_CITY, { Tricks::Tag::INTERMEDIATE }, + "Rolling Goron (Hot Rodder Goron) as Child with Strength", + "Use the Bomb Flower on the stairs or near Medigoron. Timing is tight, especially without backwalking."); + OPT_TRICK(RT_GC_LEFTMOST, RCQUEST_BOTH, RA_GORON_CITY, { Tricks::Tag::ADVANCED }, + "Goron City Maze Left Chest with Hover Boots", + "A precise backwalk starting from on top of the crate and ending with a precisely-timed backflip can " + "reach this chest without needing either the Hammer or Silver Gauntlets."); + OPT_TRICK(RT_GC_GROTTO, RCQUEST_BOTH, RA_GORON_CITY, { Tricks::Tag::ADVANCED }, + "Goron City Grotto with Hookshot While Taking Damage", + "It is possible to reach the Goron City Grotto by quickly using the Hookshot while in the midst of " + "taking damage from the lava floor."); + OPT_TRICK(RT_GC_LINK_GORON_DINS, RCQUEST_BOTH, RA_GORON_CITY, { Tricks::Tag::NOVICE }, + "Stop Link the Goron with Din\'s Fire", "The timing is quite awkward."); + OPT_TRICK(RT_DMC_HOVER_BEAN_POH, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, { Tricks::Tag::NOVICE }, + "Crater\'s Bean PoH with Hover Boots", + "Hover from the base of the bridge near Goron City and walk up the very steep slope."); + OPT_TRICK(RT_DMC_BOLERO_JUMP, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, { Tricks::Tag::EXTREME }, + "Death Mountain Crater Jump to Bolero", + "As Adult, using a shield to drop a pot while you have the perfect speed and position, the pot can push " + "you that little extra distance you need to jump across the gap in the bridge."); + OPT_TRICK(RT_DMC_BOULDER_JS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, { Tricks::Tag::NOVICE }, + "Death Mountain Crater Upper to Lower with Hammer", + "With the Hammer, you can jump slash the rock twice in the same jump in order to destroy it before you " + "fall into the lava."); + OPT_TRICK(RT_DMC_BOULDER_SKIP, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, { Tricks::Tag::INTERMEDIATE }, + "Death Mountain Crater Upper to Lower Boulder Skip", + "As adult, With careful positioning, you can jump to the ledge where the boulder is, then use repeated " + "ledge grabs to shimmy to a climbable ledge. This trick supersedes \"Death Mountain Crater Upper to " + "Lower with Hammer\"."); + OPT_TRICK(RT_ZR_LOWER, RCQUEST_BOTH, RA_ZORAS_RIVER, { Tricks::Tag::INTERMEDIATE }, + "Zora\'s River Lower Freestanding PoH as Adult with Nothing", + "Adult can reach this PoH with a precise jump, no Hover Boots required."); + OPT_TRICK(RT_ZR_UPPER, RCQUEST_BOTH, RA_ZORAS_RIVER, { Tricks::Tag::INTERMEDIATE }, + "Zora\'s River Upper Freestanding PoH as Adult with Nothing", + "Adult can reach this PoH with a precise jump, no Hover Boots required."); + OPT_TRICK(RT_ZR_HOVERS, RCQUEST_BOTH, RA_ZORAS_RIVER, { Tricks::Tag::NOVICE }, + "Zora\'s Domain Entry with Hover Boots", "Can hover behind the waterfall as adult."); + OPT_TRICK(RT_ZR_CUCCO, RCQUEST_BOTH, RA_ZORAS_RIVER, { Tricks::Tag::NOVICE }, "Zora\'s Domain Entry with Cucco", + "You can fly behind the waterfall with a Cucco as child."); + OPT_TRICK(RT_ZD_KING_ZORA_SKIP, RCQUEST_BOTH, RA_ZORAS_DOMAIN, { Tricks::Tag::INTERMEDIATE }, + "Skip King Zora as Adult with Nothing", + "With a precise jump as adult, it is possible to get on the fence next to King Zora from the front to " + "access Zora's Fountain."); + OPT_TRICK(RT_ZD_GS, RCQUEST_BOTH, RA_ZORAS_DOMAIN, { Tricks::Tag::INTERMEDIATE }, + "Zora\'s Domain GS with No Additional Items", + "A precise jump slash can kill the Skulltula and recoil back onto the top of the frozen waterfall. To " + "kill it, the logic normally guarantees one of Hookshot, Bow, or Magic."); + OPT_TRICK(RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES, RCQUEST_BOTH, RA_ZORAS_FOUNTAIN, { Tricks::Tag::NOVICE }, + "Zora\'s Fountain Great Fairy Without Explosives", + "It's possible to use silver gauntlets to pick up the silver rock and hammer to break the rock below it, " + "allowing you to ledge grab the edge of the hole and get past the breakable wall (hammer can't break the " + "wall itself)."); + OPT_TRICK(RT_LH_LAB_WALL_GS, RCQUEST_BOTH, RA_LAKE_HYLIA, { Tricks::Tag::NOVICE }, + "Lake Hylia Lab Wall GS with Jump Slash", + "The jump slash to actually collect the token is somewhat precise."); + OPT_TRICK(RT_LH_LAB_DIVING, RCQUEST_BOTH, RA_LAKE_HYLIA, { Tricks::Tag::NOVICE }, + "Lake Hylia Lab Dive without Gold Scale", + "Remove the Iron Boots in the midst of Hookshotting the underwater crate."); + OPT_TRICK(RT_LH_WATER_HOOKSHOT, RCQUEST_BOTH, RA_LAKE_HYLIA, { Tricks::Tag::INTERMEDIATE }, + "Water Temple Entry without Iron Boots using Hookshot", + "When entering Water Temple using Gold Scale instead of Iron Boots, the Longshot is usually used to be " + "able to hit the switch and open the gate. But, by standing in a particular spot, the switch can be hit " + "with only the reach of the Hookshot."); + OPT_TRICK(RT_GV_CRATE_HOVERS, RCQUEST_BOTH, RA_GERUDO_VALLEY, { Tricks::Tag::INTERMEDIATE }, + "Gerudo Valley Crate PoH as Adult with Hover Boots", + "From the far side of Gerudo Valley, a precise Hover Boots movement and jump-slash recoil can allow " + "adult to reach the ledge with the crate PoH without needing Longshot. You will take fall damage."); + OPT_TRICK(RT_GF_KITCHEN, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE }, + "Thieves\' Hideout \"Kitchen\" with No Additional Items", + "Allows passing through the kitchen by avoiding being seen by the guards. The logic normally guarantees " + "Bow or Hookshot to stun them from a distance, or Hover Boots to cross the room without needing to deal " + "with the guards."); + OPT_TRICK(RT_GF_JUMP, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE }, "Gerudo\'s Fortress Ledge Jumps", + "Adult can jump onto the top roof of the fortress without going through the interior of the hideout."); + OPT_TRICK(RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE }, + "Gerudo\'s Fortress Warriors with Difficult Weapons", + "Warriors can be defeated with Slingshot or Bombchus."); + // disabled for now, can't check for being able to use bunny hood & bunny hood speedup is currently completely + // decoupled from rando OPT_TRICK(RT_HW_BUNNY_CROSSING, RCQUEST_BOTH, RA_HAUNTED_WASTELAND, {Tricks::Tag::NOVICE}, + // "Wasteland Crossing with Bunny Hood", "You can beat the quicksand by using the increased speed of the Bunny Hood. + // Note that jumping to the carpet merchant as child typically requires a fairly precise jump slash."); + OPT_TRICK(RT_HW_CROSSING, RCQUEST_BOTH, RA_HAUNTED_WASTELAND, { Tricks::Tag::INTERMEDIATE }, + "Wasteland Crossing without Hover Boots or Longshot", + "You can beat the quicksand by backwalking across it in a specific way. Note that jumping to the carpet " + "merchant as child typically requires a fairly precise jump slash."); + OPT_TRICK(RT_LENS_HW, RCQUEST_BOTH, RA_HAUNTED_WASTELAND, { Tricks::Tag::INTERMEDIATE }, "Lensless Wasteland", + "By memorizing the path, you can travel through the Wasteland without using the Lens of Truth to see the " + "Poe. The equivalent trick for going in reverse through the Wasteland is \"Reverse Wasteland\"."); + OPT_TRICK( + RT_HW_REVERSE, RCQUEST_BOTH, RA_HAUNTED_WASTELAND, { Tricks::Tag::INTERMEDIATE }, "Reverse Wasteland", + "By memorizing the path, you can travel through the Wasteland in reverse. Note that jumping to the carpet " + "merchant as child typically requires a fairly precise jump slash. The equivalent trick for going forward " + "through the Wasteland is \"Lensless Wasteland\". To cross the river of sand with no additional items, be sure " + "to also enable \"Wasteland Crossing without Hover Boots or Longshot\". Unless all overworld entrances are " + "randomized, Child Link will not be expected to do anything at Gerudo's Fortress."); + OPT_TRICK(RT_COLOSSUS_GS, RCQUEST_BOTH, RA_DESERT_COLOSSUS, { Tricks::Tag::NOVICE }, + "Colossus Hill GS with Hookshot", + "Somewhat precise. If you kill enough Leevers you can get enough of a break to take some time to aim " + "more carefully."); + OPT_TRICK(RT_DEKU_BASEMENT_GS, RCQUEST_VANILLA, RA_DEKU_TREE, { Tricks::Tag::NOVICE }, + "Deku Tree Basement Vines GS with Jump Slash", "Can be defeated by doing a precise jump slash."); + OPT_TRICK(RT_DEKU_B1_SKIP, RCQUEST_BOTH, RA_DEKU_TREE, { Tricks::Tag::INTERMEDIATE }, + "Deku Tree Basement without Slingshot", + "A precise jump can be used to skip needing to use the Slingshot to go around B1 of the Deku Tree. If " + "used with the \"Closed Forest\" setting, a Slingshot will not be guaranteed to exist somewhere inside " + "the Forest. This trick applies to both Vanilla and Master Quest."); + OPT_TRICK(RT_DEKU_B1_BOW_WEBS, RCQUEST_VANILLA, RA_DEKU_TREE, { Tricks::Tag::NOVICE }, + "Deku Tree Basement Web to Gohma with Bow", + "All spider web walls in the Deku Tree basement can be burnt as adult with just a bow by shooting " + "through torches. This trick only applies to the circular web leading to Gohma; the two vertical webs " + "are always in logic. Backflip onto the chest near the torch at the bottom of the vine wall. With " + "precise positioning you can shoot through the torch to the right edge of the circular web. This allows " + "completion of adult Deku Tree with no fire source."); + OPT_TRICK(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG, RCQUEST_VANILLA, RA_DEKU_TREE, { Tricks::Tag::NOVICE }, + "Deku Tree Basement Backflip over Spiked Log", + "Allows backflipping over the spiked log in the Deku Tree basement in Vanilla. Only relevant if " + "\"Shuffle Swim\" is enabled."); + OPT_TRICK(RT_DEKU_MQ_COMPASS_GS, RCQUEST_MQ, RA_DEKU_TREE, { Tricks::Tag::NOVICE }, + "Deku Tree MQ Compass Room GS Boulders with Just Hammer", + "Climb to the top of the vines, then let go and jump slash immediately to destroy the boulders using the " + "Hammer, without needing to spawn a Song of Time block."); + OPT_TRICK(RT_DEKU_MQ_LOG, RCQUEST_MQ, RA_DEKU_TREE, { Tricks::Tag::NOVICE }, + "Deku Tree MQ Roll Under the Spiked Log", + "You can get past the spiked log by rolling to briefly shrink your hitbox. As adult, the timing is a bit " + "more precise."); + OPT_TRICK(RT_DC_SCARECROW_GS, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE }, + "Dodongo\'s Cavern Scarecrow GS with Armos Statue", + "You can jump off an Armos Statue to reach the alcove with the Gold Skulltula. It takes quite a long " + "time to pull the statue the entire way. The jump to the alcove can be a bit picky when done as child."); + OPT_TRICK(RT_DC_VINES_GS, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE }, + "Dodongo\'s Cavern Vines GS from Below with Longshot", + "The vines upon which this Skulltula rests are one-sided collision. You can use the Longshot to get it " + "from below, by shooting it through the vines, bypassing the need to lower the staircase."); + OPT_TRICK(RT_DC_STAIRCASE, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE }, + "Dodongo\'s Cavern Staircase with Bow", + "The Bow can be used to knock down the stairs with two well-timed shots."); + OPT_TRICK(RT_DC_SLINGSHOT_SKIP, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, { Tricks::Tag::EXPERT }, + "Dodongo\'s Cavern Child Slingshot Skips", + "With precise platforming, child can cross the platforms while the flame circles are there. When " + "enabling this trick, it's recommended that you also enable the Adult variant: \"Dodongo's Cavern Spike " + "Trap Room Jump without Hover Boots\"."); + OPT_TRICK(RT_DC_SCRUB_ROOM, RCQUEST_VANILLA, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE }, + "Dodongo\'s Cavern Two Scrub Room with Strength", + "With help from a conveniently-positioned block, Adult can quickly carry a Bomb Flower over to destroy " + "the mud wall blocking the room with two Deku Scrubs."); + OPT_TRICK(RT_DC_JUMP, RCQUEST_BOTH, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE }, + "Dodongo\'s Cavern Spike Trap Room Jump without Hover Boots", + "The jump is Adult Link only. Applies to both Vanilla and MQ."); + OPT_TRICK(RT_DC_HAMMER_FLOOR, RCQUEST_BOTH, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE }, + "Dodongo\'s Cavern Smash the Boss Lobby Floor", + "The bombable floor before King Dodongo can be destroyed with Hammer if hit in the very center. This is " + "only relevant with Shuffle Boss Entrances or if Dodongo's Cavern is MQ and either variant of " + "\"Dodongo's Cavern MQ Light the Eyes with Strength\" is on."); + OPT_TRICK(RT_DC_MQ_CHILD_BOMBS, RCQUEST_MQ, RA_DODONGOS_CAVERN, { Tricks::Tag::ADVANCED }, + "Dodongo\'s Cavern MQ Early Bomb Bag Area as Child", + "With a precise jump slash from above, you can reach the Bomb Bag area as only child without needing a " + "Slingshot. You will take fall damage."); + OPT_TRICK(RT_DC_MQ_CHILD_EYES, RCQUEST_MQ, RA_DODONGOS_CAVERN, { Tricks::Tag::EXPERT }, + "Dodongo\'s Cavern MQ Light the Eyes with Strength as Child", + "If you move very quickly, it is possible to use the bomb flower at the top of the room to light the " + "eyes. To perform this trick as child is significantly more difficult than adult. The player is also " + "expected to complete the DC back area without explosives, including getting past the Armos wall to the " + "switch for the boss door."); + OPT_TRICK( + RT_DC_MQ_ADULT_EYES, RCQUEST_MQ, RA_DODONGOS_CAVERN, { Tricks::Tag::ADVANCED }, + "Dodongo\'s Cavern MQ Light the Eyes with Strength as Adult", + "If you move very quickly, it is possible to use the bomb flower at the top of the room to light the eyes."); + OPT_TRICK(RT_JABU_ALCOVE_JUMP_DIVE, RCQUEST_BOTH, RA_JABU_JABUS_BELLY, { Tricks::Tag::NOVICE }, + "Jabu Underwater Alcove as Adult with Jump Dive", + "Standing above the underwater tunnel leading to the scrub, jump down and swim through the tunnel. This " + "allows adult to access the alcove with no Scale or Iron Boots. In Vanilla Jabu, this alcove has a " + "business scrub. In MQ Jabu, it has the compass chest and a door switch for the main floor."); + OPT_TRICK(RT_JABU_BOSS_HOVER, RCQUEST_VANILLA, RA_JABU_JABUS_BELLY, { Tricks::Tag::INTERMEDIATE }, + "Jabu Near Boss Room with Hover Boots", + "A box for the blue switch can be carried over by backwalking with one while the elevator is at its " + "peak. Alternatively, you can skip transporting a box by quickly rolling from the switch and opening the " + "door before it closes. However, the timing for this is very tight."); + OPT_TRICK( + RT_JABU_NEAR_BOSS_RANGED, RCQUEST_BOTH, RA_JABU_JABUS_BELLY, { Tricks::Tag::NOVICE }, + "Jabu Near Boss Ceiling Switch/GS without Boomerang or Explosives", + "Vanilla Jabu: From near the entrance into the room, you can hit the switch that opens the door to the boss " + "room using a precisely-aimed use of the Slingshot, Bow, or Longshot. As well, if you climb to the top of the " + "vines you can stand on the right edge of the platform and shoot around the glass. From this distance, even " + "the Hookshot can reach the switch. This trick is only relevant if \"Shuffle Boss Entrances\" is enabled. MQ " + "Jabu: A Gold Skulltula Token can be collected with the Hookshot or Longshot using the same methods as hitting " + "the switch in Vanilla. This MQ trick is not currently relevant in logic."); + OPT_TRICK(RT_JABU_NEAR_BOSS_EXPLOSIVES, RCQUEST_VANILLA, RA_JABU_JABUS_BELLY, { Tricks::Tag::INTERMEDIATE }, + "Jabu Near Boss Ceiling Switch with Explosives", + "You can hit the switch that opens the door to the boss room using a precisely-aimed Bombchu. Also, " + "using the Hover Boots, adult can throw a Bomb at the switch. This trick is only relevant if \"Shuffle " + "Boss Entrances\" is enabled."); + OPT_TRICK(RT_LENS_JABU_MQ, RCQUEST_MQ, RA_JABU_JABUS_BELLY, { Tricks::Tag::NOVICE }, + "Jabu MQ without Lens of Truth", "Removes the requirements for the Lens of Truth in Jabu MQ."); + OPT_TRICK(RT_JABU_MQ_RANG_JUMP, RCQUEST_MQ, RA_JABU_JABUS_BELLY, { Tricks::Tag::ADVANCED }, + "Jabu MQ Compass Chest with Boomerang", + "Boomerang can reach the cow switch to spawn the chest by targeting the cow, jumping off of the ledge " + "where the chest spawns, and throwing the Boomerang in midair."); + OPT_TRICK(RT_JABU_MQ_SOT_GS, RCQUEST_MQ, RA_JABU_JABUS_BELLY, { Tricks::Tag::INTERMEDIATE }, + "Jabu MQ Song of Time Block GS with Boomerang", + "Allow the Boomerang to return to you through the Song of Time block to grab the token."); + OPT_TRICK(RT_LENS_BOTW, RCQUEST_VANILLA, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE }, + "Bottom of the Well without Lens of Truth", + "Removes the requirements for the Lens of Truth in Bottom of the Well."); + OPT_TRICK(RT_BOTW_CHILD_DEADHAND, RCQUEST_BOTH, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE }, + "Child Dead Hand without Kokiri Sword", "Requires 9 sticks or 5 jump slashes."); + OPT_TRICK(RT_BOTW_BASEMENT, RCQUEST_VANILLA, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE }, + "Bottom of the Well Map Chest with Strength & Sticks", + "The chest in the basement can be reached with strength by doing a jump slash with a lit stick to access " + "the Bomb Flowers."); + OPT_TRICK(RT_BOTW_MQ_PITS, RCQUEST_MQ, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE }, + "Bottom of the Well MQ Jump Over the Pits", + "While the pits in Bottom of the Well don't allow you to jump just by running straight at them, you can " + "still get over them by side-hopping or backflipping across. With explosives, this allows you to access " + "the central areas without Zelda's Lullaby. With Zelda's Lullaby, it allows you to access the west inner " + "room without explosives."); + OPT_TRICK(RT_BOTW_MQ_DEADHAND_KEY, RCQUEST_MQ, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE }, + "Bottom of the Well MQ Dead Hand Freestanding Key with Boomerang", + "Boomerang can fish the item out of the rubble without needing explosives to blow it up."); + OPT_TRICK(RT_FOREST_FIRST_GS, RCQUEST_VANILLA, RA_FOREST_TEMPLE, { Tricks::Tag::NOVICE }, + "Forest Temple First Room GS with Difficult-to-Use Weapons", + "Allows killing this Skulltula with Sword or Sticks by jump slashing it as you let go from the vines. " + "You can avoid taking fall damage by recoiling onto the tree. Also allows killing it as Child with a " + "Bomb throw. It's much more difficult to use a Bomb as child due to Child Link's shorter height."); + OPT_TRICK(RT_FOREST_OUTDOORS_EAST_GS, RCQUEST_VANILLA, RA_FOREST_TEMPLE, { Tricks::Tag::NOVICE }, + "Forest Temple East Courtyard GS with Boomerang", + "Precise Boomerang throws can allow child to kill the Skulltula and collect the token."); + OPT_TRICK(RT_FOREST_VINES, RCQUEST_BOTH, RA_FOREST_TEMPLE, { Tricks::Tag::NOVICE }, + "Forest Temple East Courtyard Vines with Hookshot", + "The vines in Forest Temple leading to where the well drain switch is in the standard form can be barely " + "reached with just the Hookshot. Applies to MQ also."); + OPT_TRICK(RT_FOREST_OUTDOORS_LEDGE, RCQUEST_BOTH, RA_FOREST_TEMPLE, { Tricks::Tag::NOVICE }, + "Forest Temple NE Outdoors Ledge with Hover Boots", + "With precise Hover Boots movement you can fall down to this ledge from upper balconies. If done " + "precisely enough, it is not necessary to take fall damage. In MQ, this skips a Longshot requirement. In " + "Vanilla, this can skip a Hookshot requirement in entrance randomizer."); + OPT_TRICK(RT_FOREST_DOORFRAME, RCQUEST_BOTH, RA_FOREST_TEMPLE, { Tricks::Tag::ADVANCED }, + "Forest Temple East Courtyard Door Frame with Hover Boots", + "A precise Hover Boots movement from the upper balconies in this courtyard can be used to get on top of " + "the door frame. Applies to both Vanilla and Master Quest. In Vanilla, from on top the door frame you " + "can summon Pierre, allowing you to access the falling ceiling room early. In Master Quest, this allows " + "you to obtain the GS on the door frame as adult without Hookshot or Song of Time."); + OPT_TRICK(RT_FOREST_OUTSIDE_BACKDOOR, RCQUEST_BOTH, RA_FOREST_TEMPLE, { Tricks::Tag::ADVANCED }, + "Forest Temple Outside Backdoor with Jump Slash", + "A jump slash recoil can be used to reach the ledge in the block puzzle room that leads to the west " + "courtyard. This skips a potential Hover Boots requirement in Vanilla, and it can sometimes apply in MQ " + "as well. This trick can be performed as both ages."); + OPT_TRICK(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG, RCQUEST_BOTH, RA_FOREST_TEMPLE, { Tricks::Tag::NOVICE }, + "Forest Temple Outside Hearts with Boomerang", + "A well aimed boomerang from the water's edge can reach the hearts from ground level. If unable to swim, " + "you can back away from the water while the boomerang is returning so the hearts land on the ground."); + OPT_TRICK(RT_FOREST_MQ_WELL_SWIM, RCQUEST_MQ, RA_FOREST_TEMPLE, { Tricks::Tag::ADVANCED }, + "Swim Through Forest Temple MQ Well with Hookshot", + "Shoot the vines in the well as low and as far to the right as possible, and then immediately swim under " + "the ceiling to the right. This can only be required if Forest Temple is in its Master Quest form."); + OPT_TRICK(RT_FOREST_MQ_BLOCK_PUZZLE, RCQUEST_MQ, RA_FOREST_TEMPLE, { Tricks::Tag::NOVICE }, + "Skip Forest Temple MQ Block Puzzle with Bombchu", + "Send the Bombchu straight up the center of the wall directly to the left upon entering the room."); + // Child with hovers cannot do this from the lower floor, and most go to the upper floor which needs goron bracelet. + // Adult can do this with hammer and KSword, But child cannot. + OPT_TRICK(RT_FOREST_MQ_JS_HALLWAY_SWITCH, RCQUEST_MQ, RA_FOREST_TEMPLE, { Tricks::Tag::NOVICE }, + "Forest Temple MQ Twisted Hallway Switch with Jump Slash", + "The switch to twist the hallway can be hit with a jump slash through the glass block. To get in front " + "of the switch, either use the Hover Boots or hit the shortcut switch at the top of the room and jump " + "from the glass blocks that spawn. Sticks can be used as child, but the Kokiri Sword is too short to " + "reach through the glass."); + OPT_TRICK(RT_FOREST_MQ_HOOKSHOT_HALLWAY_SWITCH, RCQUEST_MQ, RA_FOREST_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Forest Temple MQ Twisted Hallway Switch with Hookshot", + "There's a very small gap between the glass block and the wall. Through that gap you can hookshot the " + "target on the ceiling."); + OPT_TRICK(RT_FOREST_MQ_RANG_HALLWAY_SWITCH, RCQUEST_MQ, RA_FOREST_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Forest Temple MQ Twisted Hallway Switch with Boomerang", + "The Boomerang can return to Link through walls, allowing child to hit the hallway switch. This can be " + "used to allow adult to pass through later, or in conjunction with \"Forest Temple Outside Backdoor with " + "Jump Slash\"."); + OPT_TRICK(RT_FIRE_BOSS_DOOR_JUMP, RCQUEST_BOTH, RA_FIRE_TEMPLE, { Tricks::Tag::NOVICE }, + "Fire Temple Boss Door without Hover Boots or Pillar", + "The Fire Temple Boss Door can be reached as adult with a precise jump. You must be touching the side " + "wall of the room so that Link will grab the ledge from farther away than is normally possible."); + // Is also used in MQ logic, but has no practical effect there as of now + OPT_TRICK(RT_FIRE_SOT, RCQUEST_VANILLA, RA_FIRE_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Fire Temple Song of Time Room GS without Song of Time", + "A precise jump can be used to reach this room."); + OPT_TRICK(RT_FIRE_STRENGTH, RCQUEST_VANILLA, RA_FIRE_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Fire Temple Climb without Strength", "A precise jump can be used to skip pushing the block."); + OPT_TRICK(RT_FIRE_SCARECROW, RCQUEST_VANILLA, RA_FIRE_TEMPLE, { Tricks::Tag::EXPERT }, + "Fire Temple East Tower without Scarecrow\'s Song", + "Also known as \"Pixelshot\". The Longshot can reach the target on the elevator itself, allowing you to " + "skip needing to spawn the scarecrow."); + OPT_TRICK(RT_FIRE_FLAME_MAZE, RCQUEST_VANILLA, RA_FIRE_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Fire Temple Flame Wall Maze Skip", + "If you move quickly you can sneak past the edge of a flame wall before it can rise up to block you. To " + "do it without taking damage is more precise. Allows you to progress without needing either a Small Key " + "or Hover Boots."); + OPT_TRICK(RT_FIRE_MQ_NEAR_BOSS, RCQUEST_MQ, RA_FIRE_TEMPLE, { Tricks::Tag::NOVICE }, + "Fire Temple MQ Chest Near Boss without Breaking Crate", + "The hitbox for the torch extends a bit outside of the crate. Shoot a flaming arrow at the side of the " + "crate to light the torch without needing to get over there and break the crate."); + OPT_TRICK(RT_FIRE_MQ_BLOCKED_CHEST, RCQUEST_MQ, RA_FIRE_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Fire Temple MQ Big Lava Room Blocked Door without Hookshot", + "There is a gap between the hitboxes of the flame wall in the big lava room. If you know where this gap " + "is located, you can jump through it and skip needing to use the Hookshot. To do this without taking " + "damage is more precise."); + OPT_TRICK( + RT_FIRE_MQ_BK_CHEST, RCQUEST_MQ, RA_FIRE_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Fire Temple MQ Boss Key Chest without Bow", + "It is possible to light both of the timed torches to unbar the door to the boss key chest's room with just " + "Din's Fire if you move very quickly between the two torches. It is also possible to unbar the door with just " + "Din's Fire by abusing an oversight in the way the game counts how many torches have been lit."); + OPT_TRICK(RT_FIRE_MQ_CLIMB, RCQUEST_MQ, RA_FIRE_TEMPLE, { Tricks::Tag::NOVICE }, + "Fire Temple MQ Climb without Fire Source", + "You can use the Hover Boots to hover around to the climbable wall, skipping the need to use a fire " + "source and spawn a Hookshot target."); + OPT_TRICK(RT_FIRE_MQ_MAZE_SIDE_ROOM, RCQUEST_MQ, RA_FIRE_TEMPLE, { Tricks::Tag::NOVICE }, + "Fire Temple MQ Lizalfos Maze Side Room without Box", + "You can walk from the blue switch to the door and quickly open the door before the bars reclose. This " + "skips needing to reach the upper sections of the maze to get a box to place on the switch."); + OPT_TRICK(RT_FIRE_MQ_MAZE_HOVERS, RCQUEST_MQ, RA_FIRE_TEMPLE, { Tricks::Tag::NOVICE }, + "Fire Temple MQ Lower to Upper Lizalfos Maze with Hover Boots", + "Use the Hover Boots off of a crate to climb to the upper maze without needing to spawn and use the " + "Hookshot targets."); + OPT_TRICK(RT_FIRE_MQ_MAZE_JUMP, RCQUEST_MQ, RA_FIRE_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Fire Temple MQ Lower to Upper Lizalfos Maze with Precise Jump", + "A precise jump off of a crate can be used to climb to the upper maze without needing to spawn and use " + "the Hookshot targets. This trick supersedes both \"Fire Temple MQ Lower to Upper Lizalfos Maze with " + "Hover Boots\" and \"Fire Temple MQ Lizalfos Maze Side Room without Box\"."); + OPT_TRICK(RT_FIRE_MQ_ABOVE_MAZE_GS, RCQUEST_MQ, RA_FIRE_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Fire Temple MQ Above Flame Wall Maze GS from Below with Longshot", + "The floor of the room that contains this Skulltula is only solid from above. From the maze below, the " + "Longshot can be shot through the ceiling to obtain the token with two fewer small keys than normal."); + OPT_TRICK( + RT_FIRE_MQ_FLAME_MAZE, RCQUEST_MQ, RA_FIRE_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Fire Temple MQ Flame Wall Maze Skip", + "If you move quickly you can sneak past the edge of a flame wall before it can rise up to block you. To do it " + "without taking damage is more precise. Allows you to reach the side room GS without needing Song of Time or " + "Hover Boots. If either of \"Fire Temple MQ Lower to Upper Lizalfos Maze with Hover Boots\" or \"with Precise " + "Jump\" are enabled, this also allows you to progress deeper into the dungeon without Hookshot."); + OPT_TRICK(RT_WATER_LONGSHOT_TORCH, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple Torch Longshot", + "Stand on the eastern side of the central pillar and longshot the torches on the bottom level. Swim " + "through the corridor and float up to the top level. This allows access to this area and lower water " + "levels without Iron Boots. The majority of the tricks that allow you to skip Iron Boots in the Water " + "Temple are not going to be relevant unless this trick is first enabled."); + OPT_TRICK(RT_WATER_CRACKED_WALL_HOVERS, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple Cracked Wall with Hover Boots", + "With a midair side-hop while wearing the Hover Boots, you can reach the cracked wall without needing to " + "raise the water up to the middle level."); + OPT_TRICK(RT_WATER_CRACKED_WALL, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Water Temple Cracked Wall with No Additional Items", + "A precise jump slash (among other methods) will get you to the cracked wall without needing the Hover " + "Boots or to raise the water to the middle level. This trick supersedes \"Water Temple Cracked Wall with " + "Hover Boots\"."); + OPT_TRICK(RT_WATER_BK_REGION, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Water Temple Boss Key Region with Hover Boots", + "With precise Hover Boots movement it is possible to reach the boss key chest's region without needing " + "the Longshot. It is not necessary to take damage from the spikes. The Gold Skulltula Token in the " + "following room can also be obtained with just the Hover Boots."); + OPT_TRICK(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP, RCQUEST_BOTH, RA_WATER_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Water Temple North Basement Ledge with Precise Jump", + "In the northern basement there's a ledge from where, in Vanilla Water Temple, boulders roll out into " + "the room. Normally to jump directly to this ledge logically requires the Hover Boots, but with precise " + "jump, it can be done without them. This trick applies to both Vanilla and Master Quest."); + OPT_TRICK( + RT_WATER_BK_JUMP_DIVE, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple Boss Key Jump Dive", + "Stand on the very edge of the raised corridor leading from the push block room to the rolling boulder " + "corridor. Face the Gold Skulltula on the waterfall and jump over the boulder corridor floor into the pool of " + "water, swimming right once underwater. This allows access to the boss key room without Iron boots."); + // Also used in MQ logic, but won't be relevent unless a way to enter tower without irons exists (likely a clip + + // swim) + OPT_TRICK(RT_WATER_FW_CENTRAL_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple Central Pillar GS with Farore\'s Wind", + "If you set Farore's Wind inside the central pillar and then return to that warp point after raising the " + "water to the highest level, you can obtain this Skulltula Token with Hookshot or Boomerang."); + OPT_TRICK( + RT_WATER_IRONS_CENTRAL_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple Central Pillar GS with Iron Boots", + "After opening the middle water level door into the central pillar, the door will stay unbarred so long as you " + "do not leave the room, even if you were to raise the water up to the highest level. With the Iron Boots to go " + "through the door after the water has been raised, you can obtain the Skulltula Token with the Hookshot."); + OPT_TRICK(RT_WATER_CENTRAL_BOW, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::ADVANCED }, + "Water Temple Central Bow Target without Longshot or Hover Boots", + "A very precise Bow shot can hit the eye switch from the floor above. Then, you can jump down into the " + "hallway and make through it before the gate closes. It can also be done as child, using the Slingshot " + "instead of the Bow."); + OPT_TRICK( + RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple Falling Platform Room GS with Hookshot", + "If you stand on the very edge of the platform, this Gold Skulltula can be obtained with only the Hookshot."); + OPT_TRICK( + RT_WATER_RANG_FALLING_PLATFORM_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Water Temple Falling Platform Room GS with Boomerang", + "If you stand on the very edge of the platform, this Gold Skulltula can be obtained with only the Boomerang."); + OPT_TRICK(RT_WATER_RIVER_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Water Temple River GS without Iron Boots", + "Standing on the exposed ground toward the end of the river, a precise Longshot use can obtain the " + "token. The Longshot cannot normally reach far enough to kill the Skulltula, however. You'll first have " + "to find some other way of killing it."); + OPT_TRICK(RT_WATER_DRAGON_JUMP_DIVE, RCQUEST_BOTH, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple Dragon Statue Jump Dive", + "If you come into the dragon statue room from the serpent river, you can jump down from above and get " + "into the tunnel without needing either Iron Boots or a Scale. This trick applies to both Vanilla and " + "Master Quest. In Vanilla, you must shoot the switch from above with the Bow, and then quickly get " + "through the tunnel before the gate closes."); + OPT_TRICK(RT_WATER_ADULT_DRAGON, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple Dragon Statue Switch from Above the Water as Adult", + "Normally you need both Hookshot and Iron Boots to hit the switch and swim through the tunnel to get to " + "the chest. But by hitting the switch from dry land, using one of Bombchus, Hookshot, or Bow, it is " + "possible to skip one or both of those requirements. After the gate has been opened, besides just using " + "the Iron Boots, a well-timed dive with at least the Silver Scale could be used to swim through the " + "tunnel. If coming from the serpent river, a jump dive can also be used to get into the tunnel."); + OPT_TRICK(RT_WATER_CHILD_DRAGON, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::ADVANCED }, + "Water Temple Dragon Statue Switch from Above the Water as Child", + "It is possible for child to hit the switch from dry land using one of Bombchus, Slingshot or Boomerang. " + "Then, to get to the chest, child can dive through the tunnel using at least the Silver Scale. The " + "timing and positioning of this dive needs to be perfect to actually make it under the gate, and it all " + "needs to be done very quickly to be able to get through before the gate closes. Be sure to enable " + "\"Water Temple Dragon Statue Switch from Above the Water as Adult\" for adult's variant of this trick."); + OPT_TRICK(RT_WATER_MQ_CENTRAL_PILLAR, RCQUEST_MQ, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple MQ Central Pillar with Fire Arrows", + "Slanted torches have misleading hitboxes. Whenever you see a slanted torch jutting out of the wall, you " + "can expect most or all of its hitbox is actually on the other side that wall. This can make slanted " + "torches very finicky to light when using arrows. The torches in the central pillar of MQ Water Temple " + "are a particularly egregious example. Logic normally expects Din's Fire and Song of Time."); + OPT_TRICK( + RT_WATER_MQ_LOCKED_GS, RCQUEST_MQ, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE }, + "Water Temple MQ North Basement GS without Small Key", + "There is an invisible Hookshot target that can be used to get over the gate that blocks you from going to " + "this Skulltula early, skipping a small key as well as needing Hovers or Scarecrow to reach the locked door."); + OPT_TRICK(RT_LENS_SHADOW, RCQUEST_VANILLA, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE }, + "Shadow Temple Stationary Objects without Lens of Truth", + "Removes the requirements for the Lens of Truth in Shadow Temple for most areas in the dungeon except " + "for crossing the moving platform in the huge pit room and for fighting Bongo Bongo."); + OPT_TRICK(RT_LENS_SHADOW_PLATFORM, RCQUEST_VANILLA, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE }, + "Shadow Temple Invisible Moving Platform without Lens of Truth", + "Removes the requirements for the Lens of Truth in Shadow Temple to cross the invisible moving platform " + "in the huge pit room in either direction."); + OPT_TRICK(RT_LENS_BONGO, RCQUEST_BOTH, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE }, + "Shadow Temple Bongo Bongo without Lens of Truth", + "Bongo Bongo can be defeated without the use of Lens of Truth, as the hands give a pretty good idea of " + "where the eye is."); + OPT_TRICK(RT_SHADOW_UMBRELLA, RCQUEST_BOTH, RA_SHADOW_TEMPLE, { Tricks::Tag::EXPERT }, + "Shadow Temple Stone Umbrella Skip", + "A very precise Hover Boots movement from off of the lower chest can get you on top of the crushing " + "spikes without needing to pull the block. Applies to both Vanilla and Master Quest."); + OPT_TRICK(RT_SHADOW_UMBRELLA_GS, RCQUEST_BOTH, RA_SHADOW_TEMPLE, { Tricks::Tag::EXPERT }, + "Shadow Temple Falling Spikes GS with Hover Boots", + "After killing the Skulltula, a very precise Hover Boots movement from off of the lower chest can get " + "you on top of the crushing spikes without needing to pull the block. From there, another very precise " + "Hover Boots movement can be used to obtain the token without needing the Hookshot. Applies to both " + "Vanilla and Master Quest. For obtaining the chests in this room with just Hover Boots, be sure to " + "enable \"Shadow Temple Stone Umbrella Skip\"."); + OPT_TRICK(RT_SHADOW_FREESTANDING_KEY, RCQUEST_VANILLA, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE }, + "Shadow Temple Freestanding Key with Bombchu", + "Release the Bombchu with good timing so that it explodes near the bottom of the pot."); + OPT_TRICK(RT_SHADOW_STATUE, RCQUEST_BOTH, RA_SHADOW_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Shadow Temple River Statue with Bombchu", + "By sending a Bombchu around the edge of the gorge, you can knock down the statue without needing a Bow. " + "Applies in both Vanilla and MQ Shadow."); + OPT_TRICK(RT_SHADOW_BONGO, RCQUEST_BOTH, RA_SHADOW_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Shadow Temple Bongo Bongo without projectiles", + "Using precise sword slashes, Bongo Bongo can be defeated without using projectiles. This is only " + "relevant in conjunction with Shadow Temple dungeon shortcuts or shuffled boss entrances."); + OPT_TRICK(RT_LENS_SHADOW_MQ, RCQUEST_MQ, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE }, + "Shadow Temple MQ Stationary Objects without Lens of Truth", + "Removes the requirements for the Lens of Truth in Shadow Temple MQ for most areas in the dungeon. See " + "\"Shadow Temple MQ Invisible Moving Platform without Lens of Truth\", \"Shadow Temple MQ Invisible " + "Blades Silver Rupees without Lens of Truth\", \"Shadow Temple MQ 2nd Dead Hand without Lens of Truth\", " + "and \"Shadow Temple Bongo Bongo without Lens of Truth\" for exceptions."); + OPT_TRICK(RT_LENS_SHADOW_MQ_INVISIBLE_BLADES, RCQUEST_MQ, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE }, + "Shadow Temple MQ Invisible Blades Silver Rupees without Lens of Truth", + "Removes the requirement for the Lens of Truth or Nayru's Love in Shadow Temple MQ for the Invisible " + "Blades room Silver Rupee collection."); + OPT_TRICK(RT_LENS_SHADOW_MQ_PLATFORM, RCQUEST_MQ, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE }, + "Shadow Temple MQ Invisible Moving Platform without Lens of Truth", + "Removes the requirements for the Lens of Truth in Shadow Temple MQ to cross the invisible moving " + "platform in the huge pit room in either direction."); + OPT_TRICK(RT_LENS_SHADOW_MQ_DEADHAND, RCQUEST_MQ, RA_SHADOW_TEMPLE, { Tricks::Tag::NOVICE }, + "Shadow Temple MQ 2nd Dead Hand without Lens of Truth", + "Dead Hand spawns in a random spot within the room. Having Lens removes the hassle of having to comb the " + "room looking for his spawn location."); + OPT_TRICK(RT_SHADOW_MQ_GAP, RCQUEST_MQ, RA_SHADOW_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Shadow Temple MQ Truth Spinner Gap with Longshot", + "You can Longshot a torch and jump-slash recoil onto the tongue. It works best if you Longshot the right " + "torch from the left side of the room."); + OPT_TRICK( + RT_SHADOW_MQ_INVISIBLE_BLADES, RCQUEST_MQ, RA_SHADOW_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Shadow Temple MQ Invisible Blades without Song of Time", + "The Like Like can be used to boost you into the Silver Rupee or Recovery Hearts that normally require Song of " + "Time. This cannot be performed on OHKO since the Like Like does not boost you high enough if you die."); + OPT_TRICK(RT_SHADOW_MQ_HUGE_PIT, RCQUEST_MQ, RA_SHADOW_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Shadow Temple MQ Lower Huge Pit without Fire Source", + "Normally a frozen eye switch spawns some platforms that you can use to climb down, but there's actually " + "a small piece of ground that you can stand on that you can just jump down to."); + OPT_TRICK( + RT_SHADOW_MQ_WINDY_WALKWAY, RCQUEST_MQ, RA_SHADOW_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Shadow Temple MQ Windy Walkway Reverse without Hover Boots", + "It is possible to jump from the alcove in the windy hallway to the middle platform. There are two methods: " + "wait out the fan opposite the door and hold forward, or jump to the right to be pushed by the fan there " + "towards the platform ledge. Note that jumps of this distance are inconsistent, but still possible."); + OPT_TRICK(RT_LENS_SPIRIT, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, { Tricks::Tag::NOVICE }, + "Spirit Temple without Lens of Truth", + "Removes the requirements for the Lens of Truth in Spirit Temple."); + OPT_TRICK(RT_SPIRIT_CHILD_CHU, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, { Tricks::Tag::NOVICE }, + "Spirit Temple Child Side Bridge with Bombchu", "A carefully-timed Bombchu can hit the switch."); + OPT_TRICK(RT_SPIRIT_LOBBY_GS, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, { Tricks::Tag::NOVICE }, + "Spirit Temple Main Room GS with Boomerang", + "Standing on the highest part of the arm of the statue, a precise Boomerang throw can kill and obtain " + "this Gold Skulltula. You must throw the Boomerang slightly off to the side so that it curves into the " + "Skulltula, as aiming directly at it will clank off of the wall in front."); + OPT_TRICK(RT_SPIRIT_LOWER_ADULT_SWITCH, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, { Tricks::Tag::ADVANCED }, + "Spirit Temple Lower Adult Switch with Bombs", + "A bomb can be used to hit the switch on the ceiling, but it must be thrown from a particular distance " + "away and with precise timing."); + OPT_TRICK( + RT_SPIRIT_LOBBY_JUMP, RCQUEST_BOTH, RA_SPIRIT_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Spirit Temple Main Room Jump from Hands to Upper Ledges", + "A precise jump to obtain the following as adult without needing one of Hover Boots, or Hookshot (in Vanilla) " + "or Song of Time (in MQ): - Spirit Temple Statue Room Northeast Chest - Spirit Temple GS Lobby - Spirit Temple " + "MQ Central Chamber Top Left Pot (Left) - Spirit Temple MQ Central Chamber Top Left Pot (Right)"); + // disabled since "Spirit Temple boss shortcuts" (pre-lowers the platform where you break the statues face) isn't a + // setting in ship OPT_TRICK(RT_SPIRIT_PLATFORM_HOOKSHOT, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, + // {Tricks::Tag::INTERMEDIATE}, "Spirit Temple Main Room Hookshot to Boss Platform", "Precise hookshot aiming at the + // platform chains can be used to reach the boss platform from the middle landings. Using a jump slash immediately + // after reaching a chain makes aiming more lenient. Relevant only when Spirit Temple boss shortcuts are on."); + OPT_TRICK(RT_SPIRIT_MAP_CHEST, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, { Tricks::Tag::NOVICE }, + "Spirit Temple Map Chest with Bow", + "To get a line of sight from the upper torch to the map chest torches, you must pull an Armos statue all " + "the way up the stairs."); + OPT_TRICK(RT_SPIRIT_SUN_CHEST, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, { Tricks::Tag::ADVANCED }, + "Spirit Temple Sun Block Room Chest with Bow", + "Using the blocks in the room as platforms you can get lines of sight to all three torches. The timer on " + "the torches is quite short so you must move quickly in order to light all three."); + OPT_TRICK( + RT_SPIRIT_WALL, RCQUEST_VANILLA, RA_SPIRIT_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Spirit Temple Shifting Wall with No Additional Items", + "Logic normally guarantees a way of dealing with both the Beamos and the Walltula before climbing the wall."); + OPT_TRICK(RT_LENS_SPIRIT_MQ, RCQUEST_MQ, RA_SPIRIT_TEMPLE, { Tricks::Tag::NOVICE }, + "Spirit Temple MQ without Lens of Truth", + "Removes the requirements for the Lens of Truth in Spirit Temple MQ."); + OPT_TRICK(RT_SPIRIT_MQ_SUN_BLOCK_SOT, RCQUEST_MQ, RA_SPIRIT_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Spirit Temple MQ Sun Block Room as Child without Song of Time", + "While adult can easily jump directly to the switch that unbars the door to the sun block room, child " + "Link cannot make the jump without spawning a Song of Time block to jump from. You can skip this by " + "throwing the crate down onto the switch from above, which does unbar the door, however the crate " + "immediately breaks, so you must move quickly to get through the door before it closes back up."); + OPT_TRICK(RT_SPIRIT_MQ_SUN_BLOCK_GS, RCQUEST_MQ, RA_SPIRIT_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Spirit Temple MQ Sun Block Room GS with Boomerang", + "Throw the Boomerang in such a way that it curves through the side of the glass block to hit the Gold " + "Skulltula."); + OPT_TRICK(RT_SPIRIT_MQ_LOWER_ADULT, RCQUEST_MQ, RA_SPIRIT_TEMPLE, { Tricks::Tag::INTERMEDIATE }, + "Spirit Temple MQ Lower Adult without Fire Arrows", + "By standing in a precise position it is possible to light two of the torches with a single use of " + "Din\'s Fire. This saves enough time to be able to light all three torches with only Din\'s Fire."); + OPT_TRICK(RT_SPIRIT_MQ_FROZEN_EYE, RCQUEST_MQ, RA_SPIRIT_TEMPLE, { Tricks::Tag::NOVICE }, + "Spirit Temple MQ Frozen Eye Switch without Fire", + "You can melt the ice by shooting an arrow through a torch. The only way to find a line of sight for " + "this shot is to first spawn a Song of Time block, and then stand on the very edge of it."); + OPT_TRICK(RT_ICE_BLOCK_GS, RCQUEST_VANILLA, RA_ICE_CAVERN, { Tricks::Tag::INTERMEDIATE }, + "Ice Cavern Block Room GS with Hover Boots", + "The Hover Boots can be used to get in front of the Skulltula to kill it with a jump slash. Then, the " + "Hover Boots can again be used to obtain the Token, all without Hookshot or Boomerang."); + OPT_TRICK(RT_ICE_MQ_RED_ICE_GS, RCQUEST_MQ, RA_ICE_CAVERN, { Tricks::Tag::INTERMEDIATE }, + "Ice Cavern MQ Red Ice GS without Song of Time", + "If you side-hop into the perfect position, you can briefly stand on the platform with the red ice just " + "long enough to dump some blue fire."); + OPT_TRICK(RT_ICE_MQ_SCARECROW, RCQUEST_MQ, RA_ICE_CAVERN, { Tricks::Tag::INTERMEDIATE }, + "Ice Cavern MQ Scarecrow GS with No Additional Items", + "As adult a precise jump can be used to reach this alcove."); + OPT_TRICK(RT_LENS_GTG, RCQUEST_VANILLA, RA_GERUDO_TRAINING_GROUND, { Tricks::Tag::NOVICE }, + "Gerudo Training Ground without Lens of Truth", + "Removes the requirements for the Lens of Truth in Gerudo Training Ground."); + OPT_TRICK(RT_GTG_WITHOUT_HOOKSHOT, RCQUEST_VANILLA, RA_GERUDO_TRAINING_GROUND, { Tricks::Tag::INTERMEDIATE }, + "Gerudo Training Ground Left Side Silver Rupees without Hookshot", + "After collecting the rest of the Silver Rupees in the room, you can reach the final Silver Rupee on the " + "ceiling by being pulled up into it after getting grabbed by the Wallmaster. Then, you must also reach " + "the exit of the room without the use of the Hookshot. If you move quickly you can sneak past the edge " + "of a flame wall before it can rise up to block you. To do so without taking damage is more precise."); + OPT_TRICK(RT_GTG_FAKE_WALL, RCQUEST_BOTH, RA_GERUDO_TRAINING_GROUND, { Tricks::Tag::NOVICE }, + "Reach Gerudo Training Ground Fake Wall Ledge with Hover Boots", + "A precise Hover Boots use from the top of the chest can allow you to grab the ledge without needing the " + "usual requirements. In Master Quest, this always skips a Song of Time requirement. In Vanilla, this " + "skips a Hookshot requirement, but is only relevant if \"Gerudo Training Ground Left Side Silver Rupees " + "without Hookshot\" is enabled."); + OPT_TRICK(RT_LENS_GTG_MQ, RCQUEST_MQ, RA_GERUDO_TRAINING_GROUND, { Tricks::Tag::NOVICE }, + "Gerudo Training Ground MQ without Lens of Truth", + "Removes the requirements for the Lens of Truth in Gerudo Training Ground MQ."); + OPT_TRICK(RT_GTG_MQ_WITH_HOOKSHOT, RCQUEST_MQ, RA_GERUDO_TRAINING_GROUND, { Tricks::Tag::NOVICE }, + "Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot", + "The highest Silver Rupee can be obtained by hookshooting the target and then immediately jump slashing " + "toward the Rupee."); + OPT_TRICK(RT_GTG_MQ_WIHTOUT_HOOKSHOT, RCQUEST_MQ, RA_GERUDO_TRAINING_GROUND, { Tricks::Tag::INTERMEDIATE }, + "Gerudo Training Ground MQ Left Side Silver Rupees without Hookshot", + "After collecting the rest of the Silver Rupees in the room, you can reach the final Silver Rupee on the " + "ceiling by being pulled up into it after getting grabbed by the Wallmaster. The Wallmaster will not " + "track you to directly underneath the rupee. You should take the last step to be under the rupee after " + "the Wallmaster has begun its attempt to grab you. Also included with this trick is that fact that the " + "switch that unbars the door to the final chest of GTG can be hit without a projectile, using a precise " + "jump slash. This trick supersedes \"Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot\"."); + OPT_TRICK(RT_LENS_GANON, RCQUEST_VANILLA, RA_GANONS_CASTLE, { Tricks::Tag::NOVICE }, + "Ganon\'s Castle without Lens of Truth", + "Removes the requirements for the Lens of Truth in Ganon's Castle."); + OPT_TRICK(RT_GANON_SPIRIT_TRIAL_HOOKSHOT, RCQUEST_VANILLA, RA_GANONS_CASTLE, { Tricks::Tag::NOVICE }, + "Spirit Trial without Hookshot", + "The highest rupee can be obtained as either age by performing a precise jump and a well-timed jumpslash " + "off of an Armos."); + OPT_TRICK(RT_LENS_GANON_MQ, RCQUEST_MQ, RA_GANONS_CASTLE, { Tricks::Tag::NOVICE }, + "Ganon\'s Castle MQ without Lens of Truth", + "Removes the requirements for the Lens of Truth in Ganon's Castle MQ."); + OPT_TRICK(RT_GANON_MQ_FIRE_TRIAL, RCQUEST_MQ, RA_GANONS_CASTLE, { Tricks::Tag::ADVANCED }, + "Fire Trial MQ with Hookshot", + "It's possible to hook the target at the end of fire trial with just Hookshot, but it requires precise " + "aim and perfect positioning. The main difficulty comes from getting on the very corner of the obelisk " + "without falling into the lava."); + OPT_TRICK(RT_GANON_MQ_SHADOW_TRIAL, RCQUEST_MQ, RA_GANONS_CASTLE, { Tricks::Tag::NOVICE }, + "Shadow Trial MQ Torch with Bow", + "You can light the torch in this room without a fire source by shooting an arrow through the lit torch " + "at the beginning of the room. Because the room is so dark and the unlit torch is so far away, it can be " + "difficult to aim the shot correctly."); + OPT_TRICK(RT_GANON_MQ_LIGHT_TRIAL, RCQUEST_MQ, RA_GANONS_CASTLE, { Tricks::Tag::INTERMEDIATE }, + "Light Trial MQ without Hookshot", + "If you move quickly you can sneak past the edge of a flame wall before it can rise up to block you. In " + "this case to do it without taking damage is especially precise."); mOptionGroups[RSG_LOGIC] = OptionGroup::SubGroup("Logic Options", { - &mOptions[RSK_LOGIC_RULES], - &mOptions[RSK_ALL_LOCATIONS_REACHABLE], - &mOptions[RSK_SKULLS_SUNS_SONG], - }); + &mOptions[RSK_LOGIC_RULES], + &mOptions[RSK_ALL_LOCATIONS_REACHABLE], + &mOptions[RSK_SKULLS_SUNS_SONG], + }); // TODO: Exclude Locations Menus mTricksByArea.clear(); std::vector tricksOption; @@ -552,560 +1144,586 @@ void Settings::CreateOptions() { } mOptionGroups[RSG_TRICKS] = OptionGroup::SubGroup("Logical Tricks", tricksOption); // TODO: Glitches - mOptionGroups[RSG_AREA_ACCESS_IMGUI] = OptionGroup::SubGroup("Area Access", { - &mOptions[RSK_FOREST], - &mOptions[RSK_KAK_GATE], - &mOptions[RSK_DOOR_OF_TIME], - &mOptions[RSK_ZORAS_FOUNTAIN], - &mOptions[RSK_SLEEPING_WATERFALL], - &mOptions[RSK_LOCK_OVERWORLD_DOORS], - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_WORLD_IMGUI] = OptionGroup::SubGroup("World Settings", { - &mOptions[RSK_STARTING_AGE], - &mOptions[RSK_GERUDO_FORTRESS], - &mOptions[RSK_RAINBOW_BRIDGE], - &mOptions[RSK_BRIDGE_OPTIONS], - &mOptions[RSK_RAINBOW_BRIDGE_STONE_COUNT], - &mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT], - &mOptions[RSK_RAINBOW_BRIDGE_REWARD_COUNT], - &mOptions[RSK_RAINBOW_BRIDGE_DUNGEON_COUNT], - &mOptions[RSK_RAINBOW_BRIDGE_TOKEN_COUNT], - &mOptions[RSK_GANONS_TRIALS], - &mOptions[RSK_TRIAL_COUNT], - &mOptions[RSK_MQ_DUNGEON_RANDOM], - &mOptions[RSK_MQ_DUNGEON_COUNT], - &mOptions[RSK_MQ_DUNGEON_SET], - &mOptions[RSK_MQ_DEKU_TREE], - &mOptions[RSK_MQ_DODONGOS_CAVERN], - &mOptions[RSK_MQ_JABU_JABU], - &mOptions[RSK_MQ_FOREST_TEMPLE], - &mOptions[RSK_MQ_FIRE_TEMPLE], - &mOptions[RSK_MQ_WATER_TEMPLE], - &mOptions[RSK_MQ_SPIRIT_TEMPLE], - &mOptions[RSK_MQ_SHADOW_TEMPLE], - &mOptions[RSK_MQ_BOTTOM_OF_THE_WELL], - &mOptions[RSK_MQ_ICE_CAVERN], - &mOptions[RSK_MQ_GTG], - &mOptions[RSK_MQ_GANONS_CASTLE], - &mOptions[RSK_TRIFORCE_HUNT], - &mOptions[RSK_TRIFORCE_HUNT_PIECES_TOTAL], - &mOptions[RSK_TRIFORCE_HUNT_PIECES_REQUIRED] - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_SHUFFLE_ENTRANCES_IMGUI] = OptionGroup::SubGroup("Shuffle Entrances", { - &mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES], - &mOptions[RSK_SHUFFLE_BOSS_ENTRANCES], - &mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES], - &mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES], - &mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES], - &mOptions[RSK_SHUFFLE_OWL_DROPS], - &mOptions[RSK_SHUFFLE_WARP_SONGS], - &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS], - &mOptions[RSK_DECOUPLED_ENTRANCES], - &mOptions[RSK_MIXED_ENTRANCE_POOLS], - &mOptions[RSK_MIX_DUNGEON_ENTRANCES], - &mOptions[RSK_MIX_BOSS_ENTRANCES], - &mOptions[RSK_MIX_OVERWORLD_ENTRANCES], - &mOptions[RSK_MIX_INTERIOR_ENTRANCES], - &mOptions[RSK_MIX_GROTTO_ENTRANCES] - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_WORLD_IMGUI_TABLE] = OptionGroup::SubGroup("World", { - &mOptionGroups[RSG_AREA_ACCESS_IMGUI], - &mOptionGroups[RSG_WORLD_IMGUI], - &mOptionGroups[RSG_SHUFFLE_ENTRANCES_IMGUI], - }, WidgetContainerType::TABLE); - mOptionGroups[RSG_SHUFFLE_ITEMS_IMGUI] = OptionGroup::SubGroup("Shuffle Items", { - &mOptions[RSK_SHUFFLE_SONGS], - &mOptions[RSK_SHUFFLE_TOKENS], - &mOptions[RSK_SKULLS_SUNS_SONG], - &mOptions[RSK_SHUFFLE_KOKIRI_SWORD], - &mOptions[RSK_SHUFFLE_MASTER_SWORD], - &mOptions[RSK_SHUFFLE_CHILD_WALLET], - &mOptions[RSK_INCLUDE_TYCOON_WALLET], - &mOptions[RSK_SHUFFLE_OCARINA], - &mOptions[RSK_SHUFFLE_OCARINA_BUTTONS], - &mOptions[RSK_SHUFFLE_SWIM], - &mOptions[RSK_SHUFFLE_WEIRD_EGG], - &mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD], - &mOptions[RSK_SHUFFLE_FISHING_POLE], - &mOptions[RSK_SHUFFLE_DEKU_STICK_BAG], - &mOptions[RSK_SHUFFLE_DEKU_NUT_BAG], - &mOptions[RSK_SHUFFLE_FREESTANDING], - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_SHUFFLE_NPCS_IMGUI] = OptionGroup::SubGroup("Shuffle NPCs & Merchants", { - &mOptions[RSK_SHOPSANITY], - &mOptions[RSK_SHOPSANITY_COUNT], - &mOptions[RSK_SHOPSANITY_PRICES], - &mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE], - &mOptions[RSK_SHOPSANITY_PRICES_RANGE_1], - &mOptions[RSK_SHOPSANITY_PRICES_RANGE_2], - &mOptions[RSK_SHOPSANITY_PRICES_NO_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_CHILD_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE], - &mOptions[RSK_FISHSANITY], - &mOptions[RSK_FISHSANITY_POND_COUNT], - &mOptions[RSK_FISHSANITY_AGE_SPLIT], - &mOptions[RSK_SHUFFLE_SCRUBS], - &mOptions[RSK_SCRUBS_PRICES], - &mOptions[RSK_SCRUBS_PRICES_FIXED_PRICE], - &mOptions[RSK_SCRUBS_PRICES_RANGE_1], - &mOptions[RSK_SCRUBS_PRICES_RANGE_2], - &mOptions[RSK_SCRUBS_PRICES_NO_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_CHILD_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_ADULT_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_GIANT_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_TYCOON_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_AFFORDABLE], - &mOptions[RSK_SHUFFLE_BEEHIVES], - &mOptions[RSK_SHUFFLE_COWS], - &mOptions[RSK_SHUFFLE_POTS], - &mOptions[RSK_SHUFFLE_MERCHANTS], - &mOptions[RSK_MERCHANT_PRICES], - &mOptions[RSK_MERCHANT_PRICES_FIXED_PRICE], - &mOptions[RSK_MERCHANT_PRICES_RANGE_1], - &mOptions[RSK_MERCHANT_PRICES_RANGE_2], - &mOptions[RSK_MERCHANT_PRICES_NO_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_CHILD_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_ADULT_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_GIANT_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_TYCOON_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_AFFORDABLE], - &mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES], - &mOptions[RSK_SHUFFLE_ADULT_TRADE], - &mOptions[RSK_SHUFFLE_100_GS_REWARD], - &mOptions[RSK_SHUFFLE_BOSS_SOULS], - &mOptions[RSK_SHUFFLE_FAIRIES], - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS_IMGUI] = OptionGroup::SubGroup("Shuffle Dungeon Items", { - &mOptions[RSK_SHUFFLE_DUNGEON_REWARDS], - &mOptions[RSK_SHUFFLE_MAPANDCOMPASS], - &mOptions[RSK_KEYSANITY], - &mOptions[RSK_GERUDO_KEYS], - &mOptions[RSK_BOSS_KEYSANITY], - &mOptions[RSK_GANONS_BOSS_KEY], - &mOptions[RSK_LACS_STONE_COUNT], - &mOptions[RSK_LACS_MEDALLION_COUNT], - &mOptions[RSK_LACS_DUNGEON_COUNT], - &mOptions[RSK_LACS_REWARD_COUNT], - &mOptions[RSK_LACS_TOKEN_COUNT], - &mOptions[RSK_LACS_OPTIONS], - &mOptions[RSK_KEYRINGS], - &mOptions[RSK_KEYRINGS_RANDOM_COUNT], - &mOptions[RSK_KEYRINGS_GERUDO_FORTRESS], - &mOptions[RSK_KEYRINGS_FOREST_TEMPLE], - &mOptions[RSK_KEYRINGS_FIRE_TEMPLE], - &mOptions[RSK_KEYRINGS_WATER_TEMPLE], - &mOptions[RSK_KEYRINGS_SPIRIT_TEMPLE], - &mOptions[RSK_KEYRINGS_SHADOW_TEMPLE], - &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], - &mOptions[RSK_KEYRINGS_GTG], - &mOptions[RSK_KEYRINGS_GANONS_CASTLE], - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_ITEMS_IMGUI_TABLE] = OptionGroup::SubGroup("Items", { - &mOptionGroups[RSG_SHUFFLE_ITEMS_IMGUI], - &mOptionGroups[RSG_SHUFFLE_NPCS_IMGUI], - &mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS_IMGUI], - }, WidgetContainerType::TABLE); - mOptionGroups[RSG_TIMESAVERS_IMGUI] = OptionGroup::SubGroup("Timesavers", { - &mOptions[RSK_CUCCO_COUNT], - &mOptions[RSK_BIG_POE_COUNT], - &mOptions[RSK_SKIP_CHILD_ZELDA], - &mOptions[RSK_SKIP_EPONA_RACE], - &mOptions[RSK_COMPLETE_MASK_QUEST], - &mOptions[RSK_SKIP_SCARECROWS_SONG] - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_ITEM_POOL_HINTS_IMGUI] = OptionGroup::SubGroup("", { - &mOptions[RSK_ITEM_POOL], - &mOptions[RSK_ICE_TRAPS], - &mOptions[RSK_GOSSIP_STONE_HINTS], - &mOptions[RSK_HINT_CLARITY], - &mOptions[RSK_HINT_DISTRIBUTION], - }, WidgetContainerType::SECTION); - mOptionGroups[RSG_EXTRA_HINTS_IMGUI] = OptionGroup::SubGroup("Extra Hints", { - &mOptions[RSK_TOT_ALTAR_HINT], - &mOptions[RSK_GANONDORF_HINT], - &mOptions[RSK_SHEIK_LA_HINT], - &mOptions[RSK_DAMPES_DIARY_HINT], - &mOptions[RSK_GREG_HINT], - &mOptions[RSK_LOACH_HINT], - &mOptions[RSK_SARIA_HINT], - &mOptions[RSK_FROGS_HINT], - &mOptions[RSK_OOT_HINT], - &mOptions[RSK_BIGGORON_HINT], - &mOptions[RSK_BIG_POES_HINT], - &mOptions[RSK_CHICKENS_HINT], - &mOptions[RSK_MALON_HINT], - &mOptions[RSK_HBA_HINT], - &mOptions[RSK_FISHING_POLE_HINT], - &mOptions[RSK_WARP_SONG_HINTS], - &mOptions[RSK_SCRUB_TEXT_HINT], - &mOptions[RSK_MERCHANT_TEXT_HINT], - &mOptions[RSK_KAK_10_SKULLS_HINT], - &mOptions[RSK_KAK_20_SKULLS_HINT], - &mOptions[RSK_KAK_30_SKULLS_HINT], - &mOptions[RSK_KAK_40_SKULLS_HINT], - &mOptions[RSK_KAK_50_SKULLS_HINT], - &mOptions[RSK_KAK_100_SKULLS_HINT], - &mOptions[RSK_MASK_SHOP_HINT] - }, WidgetContainerType::SECTION, "This setting adds some hints at locations other than Gossip Stones."); - mOptionGroups[RSG_ITEM_POOL_HINTS_IMGUI_COLUMN] = OptionGroup::SubGroup("Item Pool & Hints", std::initializer_list{ - &mOptionGroups[RSG_ITEM_POOL_HINTS_IMGUI], - &mOptionGroups[RSG_EXTRA_HINTS_IMGUI], - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_ADDITIONAL_FEATURES_IMGUI] = OptionGroup::SubGroup("Additional Features", { - &mOptions[RSK_FULL_WALLETS], - &mOptions[RSK_BOMBCHU_BAG], - &mOptions[RSK_ENABLE_BOMBCHU_DROPS], - &mOptions[RSK_BLUE_FIRE_ARROWS], - &mOptions[RSK_SUNLIGHT_ARROWS], - &mOptions[RSK_INFINITE_UPGRADES], - &mOptions[RSK_SKELETON_KEY], - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_GAMEPLAY_IMGUI_TABLE] = OptionGroup::SubGroup("Gameplay", { - &mOptionGroups[RSG_TIMESAVERS_IMGUI], - &mOptionGroups[RSG_ITEM_POOL_HINTS_IMGUI_COLUMN], - &mOptionGroups[RSG_ADDITIONAL_FEATURES_IMGUI] - }, WidgetContainerType::TABLE); - mOptionGroups[RSG_STARTING_EQUIPMENT_IMGUI] = OptionGroup::SubGroup("Starting Equipment", { - &mOptions[RSK_LINKS_POCKET], - &mOptions[RSK_STARTING_KOKIRI_SWORD], - &mOptions[RSK_STARTING_MASTER_SWORD], - &mOptions[RSK_STARTING_DEKU_SHIELD] - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_STARTING_ITEMS_IMGUI] = OptionGroup::SubGroup("Starting Items", { - &mOptions[RSK_STARTING_OCARINA], - &mOptions[RSK_STARTING_STICKS], - &mOptions[RSK_STARTING_NUTS], - &mOptions[RSK_STARTING_SKULLTULA_TOKEN], - &mOptions[RSK_STARTING_HEARTS], - }, WidgetContainerType::COLUMN); - mOptionGroups[RSG_STARTING_NORMAL_SONGS_IMGUI] = OptionGroup::SubGroup("Normal Songs", { - &mOptions[RSK_STARTING_ZELDAS_LULLABY], - &mOptions[RSK_STARTING_EPONAS_SONG], - &mOptions[RSK_STARTING_SARIAS_SONG], - &mOptions[RSK_STARTING_SUNS_SONG], - &mOptions[RSK_STARTING_SONG_OF_TIME], - &mOptions[RSK_STARTING_SONG_OF_STORMS], - }, WidgetContainerType::SECTION); - mOptionGroups[RSG_STARTING_WARP_SONGS_IMGUI] = OptionGroup::SubGroup("Warp Songs", { - &mOptions[RSK_STARTING_MINUET_OF_FOREST], - &mOptions[RSK_STARTING_BOLERO_OF_FIRE], - &mOptions[RSK_STARTING_SERENADE_OF_WATER], - &mOptions[RSK_STARTING_REQUIEM_OF_SPIRIT], - &mOptions[RSK_STARTING_NOCTURNE_OF_SHADOW], - &mOptions[RSK_STARTING_PRELUDE_OF_LIGHT] - }, WidgetContainerType::SECTION); - mOptionGroups[RSG_STARTING_SONGS_IMGUI] = OptionGroup::SubGroup("Starting Songs", std::initializer_list({ - &mOptionGroups[RSG_STARTING_NORMAL_SONGS_IMGUI], - &mOptionGroups[RSG_STARTING_WARP_SONGS_IMGUI], - }), WidgetContainerType::COLUMN); - mOptionGroups[RSG_STARTING_INVENTORY_IMGUI_TABLE] = OptionGroup::SubGroup("Starting Inventory", { - &mOptionGroups[RSG_STARTING_EQUIPMENT_IMGUI], - &mOptionGroups[RSG_STARTING_ITEMS_IMGUI], - &mOptionGroups[RSG_STARTING_SONGS_IMGUI] - }, WidgetContainerType::TABLE); + mOptionGroups[RSG_AREA_ACCESS_IMGUI] = OptionGroup::SubGroup("Area Access", + { + &mOptions[RSK_FOREST], + &mOptions[RSK_KAK_GATE], + &mOptions[RSK_DOOR_OF_TIME], + &mOptions[RSK_ZORAS_FOUNTAIN], + &mOptions[RSK_SLEEPING_WATERFALL], + &mOptions[RSK_LOCK_OVERWORLD_DOORS], + }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_WORLD_IMGUI] = OptionGroup::SubGroup("World Settings", + { &mOptions[RSK_STARTING_AGE], + &mOptions[RSK_GERUDO_FORTRESS], + &mOptions[RSK_RAINBOW_BRIDGE], + &mOptions[RSK_BRIDGE_OPTIONS], + &mOptions[RSK_RAINBOW_BRIDGE_STONE_COUNT], + &mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT], + &mOptions[RSK_RAINBOW_BRIDGE_REWARD_COUNT], + &mOptions[RSK_RAINBOW_BRIDGE_DUNGEON_COUNT], + &mOptions[RSK_RAINBOW_BRIDGE_TOKEN_COUNT], + &mOptions[RSK_GANONS_TRIALS], + &mOptions[RSK_TRIAL_COUNT], + &mOptions[RSK_MQ_DUNGEON_RANDOM], + &mOptions[RSK_MQ_DUNGEON_COUNT], + &mOptions[RSK_MQ_DUNGEON_SET], + &mOptions[RSK_MQ_DEKU_TREE], + &mOptions[RSK_MQ_DODONGOS_CAVERN], + &mOptions[RSK_MQ_JABU_JABU], + &mOptions[RSK_MQ_FOREST_TEMPLE], + &mOptions[RSK_MQ_FIRE_TEMPLE], + &mOptions[RSK_MQ_WATER_TEMPLE], + &mOptions[RSK_MQ_SPIRIT_TEMPLE], + &mOptions[RSK_MQ_SHADOW_TEMPLE], + &mOptions[RSK_MQ_BOTTOM_OF_THE_WELL], + &mOptions[RSK_MQ_ICE_CAVERN], + &mOptions[RSK_MQ_GTG], + &mOptions[RSK_MQ_GANONS_CASTLE], + &mOptions[RSK_TRIFORCE_HUNT], + &mOptions[RSK_TRIFORCE_HUNT_PIECES_TOTAL], + &mOptions[RSK_TRIFORCE_HUNT_PIECES_REQUIRED] }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_SHUFFLE_ENTRANCES_IMGUI] = OptionGroup::SubGroup( + "Shuffle Entrances", + { &mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES], &mOptions[RSK_SHUFFLE_BOSS_ENTRANCES], + &mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES], &mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES], + &mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES], &mOptions[RSK_SHUFFLE_OWL_DROPS], &mOptions[RSK_SHUFFLE_WARP_SONGS], + &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS], &mOptions[RSK_DECOUPLED_ENTRANCES], + &mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES], &mOptions[RSK_MIX_BOSS_ENTRANCES], + &mOptions[RSK_MIX_OVERWORLD_ENTRANCES], &mOptions[RSK_MIX_INTERIOR_ENTRANCES], + &mOptions[RSK_MIX_GROTTO_ENTRANCES] }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_WORLD_IMGUI_TABLE] = OptionGroup::SubGroup("World", + { + &mOptionGroups[RSG_AREA_ACCESS_IMGUI], + &mOptionGroups[RSG_WORLD_IMGUI], + &mOptionGroups[RSG_SHUFFLE_ENTRANCES_IMGUI], + }, + WidgetContainerType::TABLE); + mOptionGroups[RSG_SHUFFLE_ITEMS_IMGUI] = OptionGroup::SubGroup("Shuffle Items", + { + &mOptions[RSK_SHUFFLE_SONGS], + &mOptions[RSK_SHUFFLE_TOKENS], + &mOptions[RSK_SKULLS_SUNS_SONG], + &mOptions[RSK_SHUFFLE_KOKIRI_SWORD], + &mOptions[RSK_SHUFFLE_MASTER_SWORD], + &mOptions[RSK_SHUFFLE_CHILD_WALLET], + &mOptions[RSK_INCLUDE_TYCOON_WALLET], + &mOptions[RSK_SHUFFLE_OCARINA], + &mOptions[RSK_SHUFFLE_OCARINA_BUTTONS], + &mOptions[RSK_SHUFFLE_SWIM], + &mOptions[RSK_SHUFFLE_WEIRD_EGG], + &mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD], + &mOptions[RSK_SHUFFLE_FISHING_POLE], + &mOptions[RSK_SHUFFLE_DEKU_STICK_BAG], + &mOptions[RSK_SHUFFLE_DEKU_NUT_BAG], + &mOptions[RSK_SHUFFLE_FREESTANDING], + }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_SHUFFLE_NPCS_IMGUI] = + OptionGroup::SubGroup("Shuffle NPCs & Merchants", + { + &mOptions[RSK_SHOPSANITY], + &mOptions[RSK_SHOPSANITY_COUNT], + &mOptions[RSK_SHOPSANITY_PRICES], + &mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE], + &mOptions[RSK_SHOPSANITY_PRICES_RANGE_1], + &mOptions[RSK_SHOPSANITY_PRICES_RANGE_2], + &mOptions[RSK_SHOPSANITY_PRICES_NO_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_CHILD_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE], + &mOptions[RSK_FISHSANITY], + &mOptions[RSK_FISHSANITY_POND_COUNT], + &mOptions[RSK_FISHSANITY_AGE_SPLIT], + &mOptions[RSK_SHUFFLE_SCRUBS], + &mOptions[RSK_SCRUBS_PRICES], + &mOptions[RSK_SCRUBS_PRICES_FIXED_PRICE], + &mOptions[RSK_SCRUBS_PRICES_RANGE_1], + &mOptions[RSK_SCRUBS_PRICES_RANGE_2], + &mOptions[RSK_SCRUBS_PRICES_NO_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_CHILD_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_ADULT_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_GIANT_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_TYCOON_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_AFFORDABLE], + &mOptions[RSK_SHUFFLE_BEEHIVES], + &mOptions[RSK_SHUFFLE_COWS], + &mOptions[RSK_SHUFFLE_POTS], + &mOptions[RSK_SHUFFLE_CRATES], + &mOptions[RSK_SHUFFLE_MERCHANTS], + &mOptions[RSK_MERCHANT_PRICES], + &mOptions[RSK_MERCHANT_PRICES_FIXED_PRICE], + &mOptions[RSK_MERCHANT_PRICES_RANGE_1], + &mOptions[RSK_MERCHANT_PRICES_RANGE_2], + &mOptions[RSK_MERCHANT_PRICES_NO_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_CHILD_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_ADULT_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_GIANT_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_TYCOON_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_AFFORDABLE], + &mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES], + &mOptions[RSK_SHUFFLE_ADULT_TRADE], + &mOptions[RSK_SHUFFLE_100_GS_REWARD], + &mOptions[RSK_SHUFFLE_BOSS_SOULS], + &mOptions[RSK_SHUFFLE_FAIRIES], + &mOptions[RSK_SHUFFLE_GRASS], + }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS_IMGUI] = + OptionGroup::SubGroup("Shuffle Dungeon Items", + { + &mOptions[RSK_SHUFFLE_DUNGEON_REWARDS], + &mOptions[RSK_SHUFFLE_MAPANDCOMPASS], + &mOptions[RSK_KEYSANITY], + &mOptions[RSK_GERUDO_KEYS], + &mOptions[RSK_BOSS_KEYSANITY], + &mOptions[RSK_GANONS_BOSS_KEY], + &mOptions[RSK_LACS_STONE_COUNT], + &mOptions[RSK_LACS_MEDALLION_COUNT], + &mOptions[RSK_LACS_DUNGEON_COUNT], + &mOptions[RSK_LACS_REWARD_COUNT], + &mOptions[RSK_LACS_TOKEN_COUNT], + &mOptions[RSK_LACS_OPTIONS], + &mOptions[RSK_KEYRINGS], + &mOptions[RSK_KEYRINGS_RANDOM_COUNT], + &mOptions[RSK_KEYRINGS_GERUDO_FORTRESS], + &mOptions[RSK_KEYRINGS_FOREST_TEMPLE], + &mOptions[RSK_KEYRINGS_FIRE_TEMPLE], + &mOptions[RSK_KEYRINGS_WATER_TEMPLE], + &mOptions[RSK_KEYRINGS_SPIRIT_TEMPLE], + &mOptions[RSK_KEYRINGS_SHADOW_TEMPLE], + &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], + &mOptions[RSK_KEYRINGS_GTG], + &mOptions[RSK_KEYRINGS_GANONS_CASTLE], + }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_ITEMS_IMGUI_TABLE] = OptionGroup::SubGroup("Items", + { + &mOptionGroups[RSG_SHUFFLE_ITEMS_IMGUI], + &mOptionGroups[RSG_SHUFFLE_NPCS_IMGUI], + &mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS_IMGUI], + }, + WidgetContainerType::TABLE); + mOptionGroups[RSG_TIMESAVERS_IMGUI] = OptionGroup::SubGroup( + "Timesavers", + { &mOptions[RSK_CUCCO_COUNT], &mOptions[RSK_BIG_POE_COUNT], &mOptions[RSK_SKIP_CHILD_ZELDA], + &mOptions[RSK_SKIP_EPONA_RACE], &mOptions[RSK_COMPLETE_MASK_QUEST], &mOptions[RSK_SKIP_SCARECROWS_SONG] }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_ITEM_POOL_HINTS_IMGUI] = OptionGroup::SubGroup("", + { + &mOptions[RSK_ITEM_POOL], + &mOptions[RSK_ICE_TRAPS], + &mOptions[RSK_GOSSIP_STONE_HINTS], + &mOptions[RSK_HINT_CLARITY], + &mOptions[RSK_HINT_DISTRIBUTION], + }, + WidgetContainerType::SECTION); + mOptionGroups[RSG_EXTRA_HINTS_IMGUI] = OptionGroup::SubGroup( + "Extra Hints", + { &mOptions[RSK_TOT_ALTAR_HINT], &mOptions[RSK_GANONDORF_HINT], &mOptions[RSK_SHEIK_LA_HINT], + &mOptions[RSK_DAMPES_DIARY_HINT], &mOptions[RSK_GREG_HINT], &mOptions[RSK_LOACH_HINT], + &mOptions[RSK_SARIA_HINT], &mOptions[RSK_FROGS_HINT], &mOptions[RSK_OOT_HINT], + &mOptions[RSK_BIGGORON_HINT], &mOptions[RSK_BIG_POES_HINT], &mOptions[RSK_CHICKENS_HINT], + &mOptions[RSK_MALON_HINT], &mOptions[RSK_HBA_HINT], &mOptions[RSK_FISHING_POLE_HINT], + &mOptions[RSK_WARP_SONG_HINTS], &mOptions[RSK_SCRUB_TEXT_HINT], &mOptions[RSK_MERCHANT_TEXT_HINT], + &mOptions[RSK_KAK_10_SKULLS_HINT], &mOptions[RSK_KAK_20_SKULLS_HINT], &mOptions[RSK_KAK_30_SKULLS_HINT], + &mOptions[RSK_KAK_40_SKULLS_HINT], &mOptions[RSK_KAK_50_SKULLS_HINT], &mOptions[RSK_KAK_100_SKULLS_HINT], + &mOptions[RSK_MASK_SHOP_HINT] }, + WidgetContainerType::SECTION, "This setting adds some hints at locations other than Gossip Stones."); + mOptionGroups[RSG_ITEM_POOL_HINTS_IMGUI_COLUMN] = + OptionGroup::SubGroup("Item Pool & Hints", + std::initializer_list{ + &mOptionGroups[RSG_ITEM_POOL_HINTS_IMGUI], + &mOptionGroups[RSG_EXTRA_HINTS_IMGUI], + }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_ADDITIONAL_FEATURES_IMGUI] = OptionGroup::SubGroup("Additional Features", + { + &mOptions[RSK_FULL_WALLETS], + &mOptions[RSK_BOMBCHU_BAG], + &mOptions[RSK_ENABLE_BOMBCHU_DROPS], + &mOptions[RSK_BLUE_FIRE_ARROWS], + &mOptions[RSK_SUNLIGHT_ARROWS], + &mOptions[RSK_INFINITE_UPGRADES], + &mOptions[RSK_SKELETON_KEY], + }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_GAMEPLAY_IMGUI_TABLE] = + OptionGroup::SubGroup("Gameplay", + { &mOptionGroups[RSG_TIMESAVERS_IMGUI], &mOptionGroups[RSG_ITEM_POOL_HINTS_IMGUI_COLUMN], + &mOptionGroups[RSG_ADDITIONAL_FEATURES_IMGUI] }, + WidgetContainerType::TABLE); + mOptionGroups[RSG_STARTING_EQUIPMENT_IMGUI] = + OptionGroup::SubGroup("Starting Equipment", + { &mOptions[RSK_LINKS_POCKET], &mOptions[RSK_STARTING_KOKIRI_SWORD], + &mOptions[RSK_STARTING_MASTER_SWORD], &mOptions[RSK_STARTING_DEKU_SHIELD] }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_STARTING_ITEMS_IMGUI] = OptionGroup::SubGroup("Starting Items", + { + &mOptions[RSK_STARTING_OCARINA], + &mOptions[RSK_STARTING_STICKS], + &mOptions[RSK_STARTING_NUTS], + &mOptions[RSK_STARTING_SKULLTULA_TOKEN], + &mOptions[RSK_STARTING_HEARTS], + }, + WidgetContainerType::COLUMN); + mOptionGroups[RSG_STARTING_NORMAL_SONGS_IMGUI] = OptionGroup::SubGroup("Normal Songs", + { + &mOptions[RSK_STARTING_ZELDAS_LULLABY], + &mOptions[RSK_STARTING_EPONAS_SONG], + &mOptions[RSK_STARTING_SARIAS_SONG], + &mOptions[RSK_STARTING_SUNS_SONG], + &mOptions[RSK_STARTING_SONG_OF_TIME], + &mOptions[RSK_STARTING_SONG_OF_STORMS], + }, + WidgetContainerType::SECTION); + mOptionGroups[RSG_STARTING_WARP_SONGS_IMGUI] = + OptionGroup::SubGroup("Warp Songs", + { &mOptions[RSK_STARTING_MINUET_OF_FOREST], &mOptions[RSK_STARTING_BOLERO_OF_FIRE], + &mOptions[RSK_STARTING_SERENADE_OF_WATER], &mOptions[RSK_STARTING_REQUIEM_OF_SPIRIT], + &mOptions[RSK_STARTING_NOCTURNE_OF_SHADOW], &mOptions[RSK_STARTING_PRELUDE_OF_LIGHT] }, + WidgetContainerType::SECTION); + mOptionGroups[RSG_STARTING_SONGS_IMGUI] = OptionGroup::SubGroup("Starting Songs", + std::initializer_list({ + &mOptionGroups[RSG_STARTING_NORMAL_SONGS_IMGUI], + &mOptionGroups[RSG_STARTING_WARP_SONGS_IMGUI], + }), + WidgetContainerType::COLUMN); + mOptionGroups[RSG_STARTING_INVENTORY_IMGUI_TABLE] = + OptionGroup::SubGroup("Starting Inventory", + { &mOptionGroups[RSG_STARTING_EQUIPMENT_IMGUI], &mOptionGroups[RSG_STARTING_ITEMS_IMGUI], + &mOptionGroups[RSG_STARTING_SONGS_IMGUI] }, + WidgetContainerType::TABLE); mOptionGroups[RSG_OPEN] = OptionGroup("Open Settings", { - &mOptions[RSK_FOREST], - &mOptions[RSK_KAK_GATE], - &mOptions[RSK_DOOR_OF_TIME], - &mOptions[RSK_ZORAS_FOUNTAIN], - &mOptions[RSK_SLEEPING_WATERFALL], - &mOptions[RSK_LOCK_OVERWORLD_DOORS], - &mOptions[RSK_GERUDO_FORTRESS], - &mOptions[RSK_RAINBOW_BRIDGE], - &mOptions[RSK_RAINBOW_BRIDGE_STONE_COUNT], - &mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT], - &mOptions[RSK_RAINBOW_BRIDGE_REWARD_COUNT], - &mOptions[RSK_RAINBOW_BRIDGE_DUNGEON_COUNT], - &mOptions[RSK_RAINBOW_BRIDGE_TOKEN_COUNT], - &mOptions[RSK_BRIDGE_OPTIONS], - &mOptions[RSK_GANONS_TRIALS], - &mOptions[RSK_TRIAL_COUNT], - }); + &mOptions[RSK_FOREST], + &mOptions[RSK_KAK_GATE], + &mOptions[RSK_DOOR_OF_TIME], + &mOptions[RSK_ZORAS_FOUNTAIN], + &mOptions[RSK_SLEEPING_WATERFALL], + &mOptions[RSK_LOCK_OVERWORLD_DOORS], + &mOptions[RSK_GERUDO_FORTRESS], + &mOptions[RSK_RAINBOW_BRIDGE], + &mOptions[RSK_RAINBOW_BRIDGE_STONE_COUNT], + &mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT], + &mOptions[RSK_RAINBOW_BRIDGE_REWARD_COUNT], + &mOptions[RSK_RAINBOW_BRIDGE_DUNGEON_COUNT], + &mOptions[RSK_RAINBOW_BRIDGE_TOKEN_COUNT], + &mOptions[RSK_BRIDGE_OPTIONS], + &mOptions[RSK_GANONS_TRIALS], + &mOptions[RSK_TRIAL_COUNT], + }); mOptionGroups[RSG_WORLD] = OptionGroup("World Settings", { - &mOptions[RSK_STARTING_AGE], - &mOptions[RSK_SHUFFLE_ENTRANCES], - &mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES], - &mOptions[RSK_SHUFFLE_BOSS_ENTRANCES], - &mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES], - &mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES], - &mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES], - &mOptions[RSK_SHUFFLE_OWL_DROPS], - &mOptions[RSK_SHUFFLE_WARP_SONGS], - &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS], - &mOptions[RSK_MIXED_ENTRANCE_POOLS], - &mOptions[RSK_MIX_DUNGEON_ENTRANCES], - &mOptions[RSK_MIX_BOSS_ENTRANCES], - &mOptions[RSK_MIX_OVERWORLD_ENTRANCES], - &mOptions[RSK_MIX_INTERIOR_ENTRANCES], - &mOptions[RSK_MIX_GROTTO_ENTRANCES], - &mOptions[RSK_DECOUPLED_ENTRANCES], - &mOptions[RSK_BOMBCHU_BAG], - &mOptions[RSK_ENABLE_BOMBCHU_DROPS], - &mOptions[RSK_TRIFORCE_HUNT], - &mOptions[RSK_TRIFORCE_HUNT_PIECES_TOTAL], - &mOptions[RSK_TRIFORCE_HUNT_PIECES_REQUIRED], - &mOptions[RSK_MQ_DUNGEON_RANDOM], - &mOptions[RSK_MQ_DUNGEON_COUNT], - &mOptions[RSK_MQ_DUNGEON_SET], - }); - mOptionGroups[RSG_SHUFFLE_DUNGEON_QUESTS] = OptionGroup::SubGroup("Shuffle Dungeon Quest", { - &mOptions[RSK_MQ_DEKU_TREE], - &mOptions[RSK_MQ_DODONGOS_CAVERN], - &mOptions[RSK_MQ_JABU_JABU], - &mOptions[RSK_MQ_FOREST_TEMPLE], - &mOptions[RSK_MQ_FIRE_TEMPLE], - &mOptions[RSK_MQ_WATER_TEMPLE], - &mOptions[RSK_MQ_SPIRIT_TEMPLE], - &mOptions[RSK_MQ_SHADOW_TEMPLE], - &mOptions[RSK_MQ_BOTTOM_OF_THE_WELL], - &mOptions[RSK_MQ_ICE_CAVERN], - &mOptions[RSK_MQ_GTG], - &mOptions[RSK_MQ_GANONS_CASTLE] - }); - mOptionGroups[RSG_SHUFFLE] = OptionGroup("Shuffle Settings", { - &mOptions[RSK_SHUFFLE_DUNGEON_REWARDS], - &mOptions[RSK_LINKS_POCKET], - &mOptions[RSK_SHUFFLE_SONGS], - &mOptions[RSK_SHOPSANITY], - &mOptions[RSK_SHOPSANITY_COUNT], - &mOptions[RSK_SHOPSANITY_PRICES], - &mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE], - &mOptions[RSK_SHOPSANITY_PRICES_RANGE_1], - &mOptions[RSK_SHOPSANITY_PRICES_RANGE_2], - &mOptions[RSK_SHOPSANITY_PRICES_NO_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_CHILD_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT], - &mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE], - &mOptions[RSK_FISHSANITY], - &mOptions[RSK_FISHSANITY_POND_COUNT], - &mOptions[RSK_FISHSANITY_AGE_SPLIT], - &mOptions[RSK_SHUFFLE_FISHING_POLE], - &mOptions[RSK_SHUFFLE_TOKENS], - &mOptions[RSK_SHUFFLE_SCRUBS], - &mOptions[RSK_SCRUBS_PRICES], - &mOptions[RSK_SCRUBS_PRICES_FIXED_PRICE], - &mOptions[RSK_SCRUBS_PRICES_RANGE_1], - &mOptions[RSK_SCRUBS_PRICES_RANGE_2], - &mOptions[RSK_SCRUBS_PRICES_NO_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_CHILD_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_ADULT_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_GIANT_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_TYCOON_WALLET_WEIGHT], - &mOptions[RSK_SCRUBS_PRICES_AFFORDABLE], - &mOptions[RSK_SHUFFLE_BEEHIVES], - &mOptions[RSK_SHUFFLE_COWS], - &mOptions[RSK_SHUFFLE_POTS], - &mOptions[RSK_SHUFFLE_KOKIRI_SWORD], - &mOptions[RSK_SHUFFLE_OCARINA], - &mOptions[RSK_SHUFFLE_OCARINA_BUTTONS], - &mOptions[RSK_SHUFFLE_SWIM], - &mOptions[RSK_SHUFFLE_WEIRD_EGG], - &mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD], - &mOptions[RSK_SHUFFLE_MERCHANTS], - &mOptions[RSK_MERCHANT_PRICES], - &mOptions[RSK_MERCHANT_PRICES_FIXED_PRICE], - &mOptions[RSK_MERCHANT_PRICES_RANGE_1], - &mOptions[RSK_MERCHANT_PRICES_RANGE_2], - &mOptions[RSK_MERCHANT_PRICES_NO_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_CHILD_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_ADULT_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_GIANT_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_TYCOON_WALLET_WEIGHT], - &mOptions[RSK_MERCHANT_PRICES_AFFORDABLE], - &mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES], - &mOptions[RSK_SHUFFLE_ADULT_TRADE], - &mOptions[RSK_SHUFFLE_CHEST_MINIGAME], - &mOptions[RSK_SHUFFLE_100_GS_REWARD], - &mOptions[RSK_SHUFFLE_BOSS_SOULS], - &mOptions[RSK_SHUFFLE_DEKU_STICK_BAG], - &mOptions[RSK_SHUFFLE_DEKU_NUT_BAG], - &mOptions[RSK_SHUFFLE_FREESTANDING], - &mOptions[RSK_SHUFFLE_FAIRIES], - }); - mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS] = OptionGroup("Shuffle Dungeon Items", { - &mOptions[RSK_SHUFFLE_MAPANDCOMPASS], - &mOptions[RSK_KEYSANITY], - &mOptions[RSK_GERUDO_KEYS], - &mOptions[RSK_BOSS_KEYSANITY], - &mOptions[RSK_GANONS_BOSS_KEY], - &mOptions[RSK_LACS_STONE_COUNT], - &mOptions[RSK_LACS_MEDALLION_COUNT], - &mOptions[RSK_LACS_DUNGEON_COUNT], - &mOptions[RSK_LACS_REWARD_COUNT], - &mOptions[RSK_LACS_TOKEN_COUNT], - &mOptions[RSK_LACS_OPTIONS], - &mOptions[RSK_KEYRINGS], - &mOptions[RSK_KEYRINGS_RANDOM_COUNT], - &mOptions[RSK_KEYRINGS_GERUDO_FORTRESS], - &mOptions[RSK_KEYRINGS_FOREST_TEMPLE], - &mOptions[RSK_KEYRINGS_FIRE_TEMPLE], - &mOptions[RSK_KEYRINGS_WATER_TEMPLE], - &mOptions[RSK_KEYRINGS_SPIRIT_TEMPLE], - &mOptions[RSK_KEYRINGS_SHADOW_TEMPLE], - &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], - &mOptions[RSK_KEYRINGS_GTG], - &mOptions[RSK_KEYRINGS_GANONS_CASTLE], - }); - mOptionGroups[RSG_STARTING_ITEMS] = OptionGroup::SubGroup("Items", { - &mOptions[RSK_STARTING_OCARINA], - &mOptions[RSK_STARTING_KOKIRI_SWORD], - &mOptions[RSK_STARTING_DEKU_SHIELD] - }); - mOptionGroups[RSG_STARTING_SONGS] = OptionGroup::SubGroup("Ocarina Songs", { - &mOptions[RSK_STARTING_ZELDAS_LULLABY], - &mOptions[RSK_STARTING_EPONAS_SONG], - &mOptions[RSK_STARTING_SARIAS_SONG], - &mOptions[RSK_STARTING_SUNS_SONG], - &mOptions[RSK_STARTING_SONG_OF_TIME], - &mOptions[RSK_STARTING_SONG_OF_STORMS], - &mOptions[RSK_STARTING_SONG_OF_TIME], - &mOptions[RSK_STARTING_MINUET_OF_FOREST], - &mOptions[RSK_STARTING_BOLERO_OF_FIRE], - &mOptions[RSK_STARTING_SERENADE_OF_WATER], - &mOptions[RSK_STARTING_REQUIEM_OF_SPIRIT], - &mOptions[RSK_STARTING_NOCTURNE_OF_SHADOW], - &mOptions[RSK_STARTING_PRELUDE_OF_LIGHT], - }); + &mOptions[RSK_STARTING_AGE], + &mOptions[RSK_SHUFFLE_ENTRANCES], + &mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES], + &mOptions[RSK_SHUFFLE_BOSS_ENTRANCES], + &mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES], + &mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES], + &mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES], + &mOptions[RSK_SHUFFLE_OWL_DROPS], + &mOptions[RSK_SHUFFLE_WARP_SONGS], + &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS], + &mOptions[RSK_MIXED_ENTRANCE_POOLS], + &mOptions[RSK_MIX_DUNGEON_ENTRANCES], + &mOptions[RSK_MIX_BOSS_ENTRANCES], + &mOptions[RSK_MIX_OVERWORLD_ENTRANCES], + &mOptions[RSK_MIX_INTERIOR_ENTRANCES], + &mOptions[RSK_MIX_GROTTO_ENTRANCES], + &mOptions[RSK_DECOUPLED_ENTRANCES], + &mOptions[RSK_BOMBCHU_BAG], + &mOptions[RSK_ENABLE_BOMBCHU_DROPS], + &mOptions[RSK_TRIFORCE_HUNT], + &mOptions[RSK_TRIFORCE_HUNT_PIECES_TOTAL], + &mOptions[RSK_TRIFORCE_HUNT_PIECES_REQUIRED], + &mOptions[RSK_MQ_DUNGEON_RANDOM], + &mOptions[RSK_MQ_DUNGEON_COUNT], + &mOptions[RSK_MQ_DUNGEON_SET], + }); + mOptionGroups[RSG_SHUFFLE_DUNGEON_QUESTS] = OptionGroup::SubGroup( + "Shuffle Dungeon Quest", + { &mOptions[RSK_MQ_DEKU_TREE], &mOptions[RSK_MQ_DODONGOS_CAVERN], &mOptions[RSK_MQ_JABU_JABU], + &mOptions[RSK_MQ_FOREST_TEMPLE], &mOptions[RSK_MQ_FIRE_TEMPLE], &mOptions[RSK_MQ_WATER_TEMPLE], + &mOptions[RSK_MQ_SPIRIT_TEMPLE], &mOptions[RSK_MQ_SHADOW_TEMPLE], &mOptions[RSK_MQ_BOTTOM_OF_THE_WELL], + &mOptions[RSK_MQ_ICE_CAVERN], &mOptions[RSK_MQ_GTG], &mOptions[RSK_MQ_GANONS_CASTLE] }); + mOptionGroups[RSG_SHUFFLE] = + OptionGroup("Shuffle Settings", { + &mOptions[RSK_SHUFFLE_DUNGEON_REWARDS], + &mOptions[RSK_LINKS_POCKET], + &mOptions[RSK_SHUFFLE_SONGS], + &mOptions[RSK_SHOPSANITY], + &mOptions[RSK_SHOPSANITY_COUNT], + &mOptions[RSK_SHOPSANITY_PRICES], + &mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE], + &mOptions[RSK_SHOPSANITY_PRICES_RANGE_1], + &mOptions[RSK_SHOPSANITY_PRICES_RANGE_2], + &mOptions[RSK_SHOPSANITY_PRICES_NO_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_CHILD_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT], + &mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE], + &mOptions[RSK_FISHSANITY], + &mOptions[RSK_FISHSANITY_POND_COUNT], + &mOptions[RSK_FISHSANITY_AGE_SPLIT], + &mOptions[RSK_SHUFFLE_FISHING_POLE], + &mOptions[RSK_SHUFFLE_TOKENS], + &mOptions[RSK_SHUFFLE_SCRUBS], + &mOptions[RSK_SCRUBS_PRICES], + &mOptions[RSK_SCRUBS_PRICES_FIXED_PRICE], + &mOptions[RSK_SCRUBS_PRICES_RANGE_1], + &mOptions[RSK_SCRUBS_PRICES_RANGE_2], + &mOptions[RSK_SCRUBS_PRICES_NO_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_CHILD_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_ADULT_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_GIANT_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_TYCOON_WALLET_WEIGHT], + &mOptions[RSK_SCRUBS_PRICES_AFFORDABLE], + &mOptions[RSK_SHUFFLE_BEEHIVES], + &mOptions[RSK_SHUFFLE_COWS], + &mOptions[RSK_SHUFFLE_POTS], + &mOptions[RSK_SHUFFLE_CRATES], + &mOptions[RSK_SHUFFLE_KOKIRI_SWORD], + &mOptions[RSK_SHUFFLE_OCARINA], + &mOptions[RSK_SHUFFLE_OCARINA_BUTTONS], + &mOptions[RSK_SHUFFLE_SWIM], + &mOptions[RSK_SHUFFLE_WEIRD_EGG], + &mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD], + &mOptions[RSK_SHUFFLE_MERCHANTS], + &mOptions[RSK_MERCHANT_PRICES], + &mOptions[RSK_MERCHANT_PRICES_FIXED_PRICE], + &mOptions[RSK_MERCHANT_PRICES_RANGE_1], + &mOptions[RSK_MERCHANT_PRICES_RANGE_2], + &mOptions[RSK_MERCHANT_PRICES_NO_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_CHILD_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_ADULT_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_GIANT_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_TYCOON_WALLET_WEIGHT], + &mOptions[RSK_MERCHANT_PRICES_AFFORDABLE], + &mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES], + &mOptions[RSK_SHUFFLE_ADULT_TRADE], + &mOptions[RSK_SHUFFLE_CHEST_MINIGAME], + &mOptions[RSK_SHUFFLE_100_GS_REWARD], + &mOptions[RSK_SHUFFLE_BOSS_SOULS], + &mOptions[RSK_SHUFFLE_DEKU_STICK_BAG], + &mOptions[RSK_SHUFFLE_DEKU_NUT_BAG], + &mOptions[RSK_SHUFFLE_FREESTANDING], + &mOptions[RSK_SHUFFLE_FAIRIES], + }); + mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS] = + OptionGroup("Shuffle Dungeon Items", { + &mOptions[RSK_SHUFFLE_MAPANDCOMPASS], + &mOptions[RSK_KEYSANITY], + &mOptions[RSK_GERUDO_KEYS], + &mOptions[RSK_BOSS_KEYSANITY], + &mOptions[RSK_GANONS_BOSS_KEY], + &mOptions[RSK_LACS_STONE_COUNT], + &mOptions[RSK_LACS_MEDALLION_COUNT], + &mOptions[RSK_LACS_DUNGEON_COUNT], + &mOptions[RSK_LACS_REWARD_COUNT], + &mOptions[RSK_LACS_TOKEN_COUNT], + &mOptions[RSK_LACS_OPTIONS], + &mOptions[RSK_KEYRINGS], + &mOptions[RSK_KEYRINGS_RANDOM_COUNT], + &mOptions[RSK_KEYRINGS_GERUDO_FORTRESS], + &mOptions[RSK_KEYRINGS_FOREST_TEMPLE], + &mOptions[RSK_KEYRINGS_FIRE_TEMPLE], + &mOptions[RSK_KEYRINGS_WATER_TEMPLE], + &mOptions[RSK_KEYRINGS_SPIRIT_TEMPLE], + &mOptions[RSK_KEYRINGS_SHADOW_TEMPLE], + &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], + &mOptions[RSK_KEYRINGS_GTG], + &mOptions[RSK_KEYRINGS_GANONS_CASTLE], + }); + mOptionGroups[RSG_STARTING_ITEMS] = + OptionGroup::SubGroup("Items", { &mOptions[RSK_STARTING_OCARINA], &mOptions[RSK_STARTING_KOKIRI_SWORD], + &mOptions[RSK_STARTING_DEKU_SHIELD] }); + mOptionGroups[RSG_STARTING_SONGS] = + OptionGroup::SubGroup("Ocarina Songs", { + &mOptions[RSK_STARTING_ZELDAS_LULLABY], + &mOptions[RSK_STARTING_EPONAS_SONG], + &mOptions[RSK_STARTING_SARIAS_SONG], + &mOptions[RSK_STARTING_SUNS_SONG], + &mOptions[RSK_STARTING_SONG_OF_TIME], + &mOptions[RSK_STARTING_SONG_OF_STORMS], + &mOptions[RSK_STARTING_SONG_OF_TIME], + &mOptions[RSK_STARTING_MINUET_OF_FOREST], + &mOptions[RSK_STARTING_BOLERO_OF_FIRE], + &mOptions[RSK_STARTING_SERENADE_OF_WATER], + &mOptions[RSK_STARTING_REQUIEM_OF_SPIRIT], + &mOptions[RSK_STARTING_NOCTURNE_OF_SHADOW], + &mOptions[RSK_STARTING_PRELUDE_OF_LIGHT], + }); mOptionGroups[RSG_STARTING_OTHER] = OptionGroup::SubGroup("Other", { - &mOptions[RSK_STARTING_STICKS], - &mOptions[RSK_STARTING_NUTS], - &mOptions[RSK_FULL_WALLETS], - &mOptions[RSK_STARTING_SKULLTULA_TOKEN], - &mOptions[RSK_STARTING_HEARTS], - }); - mOptionGroups[RSG_STARTING_INVENTORY] = OptionGroup("Starting Inventory", { - &mOptionGroups[RSG_STARTING_ITEMS], - &mOptionGroups[RSG_STARTING_SONGS], - &mOptionGroups[RSG_STARTING_OTHER], - }, OptionGroupType::DEFAULT); + &mOptions[RSK_STARTING_STICKS], + &mOptions[RSK_STARTING_NUTS], + &mOptions[RSK_FULL_WALLETS], + &mOptions[RSK_STARTING_SKULLTULA_TOKEN], + &mOptions[RSK_STARTING_HEARTS], + }); + mOptionGroups[RSG_STARTING_INVENTORY] = OptionGroup("Starting Inventory", + { + &mOptionGroups[RSG_STARTING_ITEMS], + &mOptionGroups[RSG_STARTING_SONGS], + &mOptionGroups[RSG_STARTING_OTHER], + }, + OptionGroupType::DEFAULT); mOptionGroups[RSG_TIMESAVERS] = OptionGroup("Timesaver Settings", { - &mOptions[RSK_SKIP_CHILD_ZELDA], - &mOptions[RSK_SKIP_EPONA_RACE], - &mOptions[RSK_SKIP_SCARECROWS_SONG], - &mOptions[RSK_BIG_POE_COUNT], - &mOptions[RSK_CUCCO_COUNT], - &mOptions[RSK_COMPLETE_MASK_QUEST], - }); - mOptionGroups[RSG_MISC] = OptionGroup("Miscellaneous Settings", { - &mOptions[RSK_GOSSIP_STONE_HINTS], - &mOptions[RSK_HINT_CLARITY], - &mOptions[RSK_HINT_DISTRIBUTION], - &mOptions[RSK_TOT_ALTAR_HINT], - &mOptions[RSK_GANONDORF_HINT], - &mOptions[RSK_SHEIK_LA_HINT], - &mOptions[RSK_DAMPES_DIARY_HINT], - &mOptions[RSK_GREG_HINT], - &mOptions[RSK_LOACH_HINT], - &mOptions[RSK_SARIA_HINT], - &mOptions[RSK_FROGS_HINT], - &mOptions[RSK_OOT_HINT], - &mOptions[RSK_WARP_SONG_HINTS], - &mOptions[RSK_BIGGORON_HINT], - &mOptions[RSK_BIG_POES_HINT], - &mOptions[RSK_CHICKENS_HINT], - &mOptions[RSK_MALON_HINT], - &mOptions[RSK_HBA_HINT], - &mOptions[RSK_KAK_10_SKULLS_HINT], - &mOptions[RSK_KAK_20_SKULLS_HINT], - &mOptions[RSK_KAK_30_SKULLS_HINT], - &mOptions[RSK_KAK_40_SKULLS_HINT], - &mOptions[RSK_KAK_50_SKULLS_HINT], - &mOptions[RSK_KAK_100_SKULLS_HINT], - &mOptions[RSK_MASK_SHOP_HINT], - &mOptions[RSK_SCRUB_TEXT_HINT], - &mOptions[RSK_MERCHANT_TEXT_HINT], - &mOptions[RSK_FISHING_POLE_HINT], - // TODO: Compasses show Reward/WOTH, Maps show Dungeon Mode, Starting Time - &mOptions[RSK_DAMAGE_MULTIPLIER], - &mOptions[RSK_BLUE_FIRE_ARROWS], - &mOptions[RSK_SUNLIGHT_ARROWS], - &mOptions[RSK_INFINITE_UPGRADES], - &mOptions[RSK_SKELETON_KEY], - }); - mOptionGroups[RSG_ITEM_POOL] = OptionGroup("Item Pool Settings", std::initializer_list({ - &mOptions[RSK_ITEM_POOL], - &mOptions[RSK_ICE_TRAPS] - })); + &mOptions[RSK_SKIP_CHILD_ZELDA], + &mOptions[RSK_SKIP_EPONA_RACE], + &mOptions[RSK_SKIP_SCARECROWS_SONG], + &mOptions[RSK_BIG_POE_COUNT], + &mOptions[RSK_CUCCO_COUNT], + &mOptions[RSK_COMPLETE_MASK_QUEST], + }); + mOptionGroups[RSG_MISC] = OptionGroup("Miscellaneous Settings", + { + &mOptions[RSK_GOSSIP_STONE_HINTS], + &mOptions[RSK_HINT_CLARITY], + &mOptions[RSK_HINT_DISTRIBUTION], + &mOptions[RSK_TOT_ALTAR_HINT], + &mOptions[RSK_GANONDORF_HINT], + &mOptions[RSK_SHEIK_LA_HINT], + &mOptions[RSK_DAMPES_DIARY_HINT], + &mOptions[RSK_GREG_HINT], + &mOptions[RSK_LOACH_HINT], + &mOptions[RSK_SARIA_HINT], + &mOptions[RSK_FROGS_HINT], + &mOptions[RSK_OOT_HINT], + &mOptions[RSK_WARP_SONG_HINTS], + &mOptions[RSK_BIGGORON_HINT], + &mOptions[RSK_BIG_POES_HINT], + &mOptions[RSK_CHICKENS_HINT], + &mOptions[RSK_MALON_HINT], + &mOptions[RSK_HBA_HINT], + &mOptions[RSK_KAK_10_SKULLS_HINT], + &mOptions[RSK_KAK_20_SKULLS_HINT], + &mOptions[RSK_KAK_30_SKULLS_HINT], + &mOptions[RSK_KAK_40_SKULLS_HINT], + &mOptions[RSK_KAK_50_SKULLS_HINT], + &mOptions[RSK_KAK_100_SKULLS_HINT], + &mOptions[RSK_MASK_SHOP_HINT], + &mOptions[RSK_SCRUB_TEXT_HINT], + &mOptions[RSK_MERCHANT_TEXT_HINT], + &mOptions[RSK_FISHING_POLE_HINT], + // TODO: Compasses show Reward/WOTH, Maps show Dungeon Mode, Starting Time + &mOptions[RSK_DAMAGE_MULTIPLIER], + &mOptions[RSK_BLUE_FIRE_ARROWS], + &mOptions[RSK_SUNLIGHT_ARROWS], + &mOptions[RSK_INFINITE_UPGRADES], + &mOptions[RSK_SKELETON_KEY], + }); + mOptionGroups[RSG_ITEM_POOL] = OptionGroup( + "Item Pool Settings", std::initializer_list({ &mOptions[RSK_ITEM_POOL], &mOptions[RSK_ICE_TRAPS] })); // TODO: Progressive Goron Sword, Remove Double Defense - mOptionGroups[RSG_EXCLUDES_KOKIRI_FOREST] = OptionGroup::SubGroup("Kokiri Forest", mExcludeLocationsOptionsAreas[RCAREA_KOKIRI_FOREST]); - mOptionGroups[RSG_EXCLUDES_LOST_WOODS] = OptionGroup::SubGroup("Lost Woods", mExcludeLocationsOptionsAreas[RCAREA_LOST_WOODS]); - mOptionGroups[RSG_EXCLUDES_SACRED_FOREST_MEADOW] = OptionGroup::SubGroup("Sacred Forest Meadow", mExcludeLocationsOptionsAreas[RCAREA_SACRED_FOREST_MEADOW]); - mOptionGroups[RSG_EXCLUDES_DEKU_TREE] = OptionGroup::SubGroup("Deku Tree", mExcludeLocationsOptionsAreas[RCAREA_DEKU_TREE]); - mOptionGroups[RSG_EXCLUDES_FOREST_TEMPLE] = OptionGroup::SubGroup("Forest Temple", mExcludeLocationsOptionsAreas[RCAREA_FOREST_TEMPLE]); - mOptionGroups[RSG_EXCLUDES_KAKARIKO_VILLAGE] = OptionGroup::SubGroup("Kakariko Village", mExcludeLocationsOptionsAreas[RCAREA_KAKARIKO_VILLAGE]); - mOptionGroups[RSG_EXCLUDES_GRAVEYARD] = OptionGroup::SubGroup("Graveyard", mExcludeLocationsOptionsAreas[RCAREA_GRAVEYARD]); - mOptionGroups[RSG_EXCLUDES_BOTTOM_OF_THE_WELL] = OptionGroup::SubGroup("Bottom of the Well", mExcludeLocationsOptionsAreas[RCAREA_BOTTOM_OF_THE_WELL]); - mOptionGroups[RSG_EXCLUDES_SHADOW_TEMPLE] = OptionGroup::SubGroup("Shadow Temple", mExcludeLocationsOptionsAreas[RCAREA_SHADOW_TEMPLE]); - mOptionGroups[RSG_EXCLUDES_DEATH_MOUNTAIN_TRAIL] = OptionGroup::SubGroup("Death Mountain Trail", mExcludeLocationsOptionsAreas[RCAREA_DEATH_MOUNTAIN_TRAIL]); - mOptionGroups[RSG_EXCLUDES_DEATH_MOUNTAIN_CRATER] = OptionGroup::SubGroup("Death Mountain Crater", mExcludeLocationsOptionsAreas[RCAREA_DEATH_MOUNTAIN_CRATER]); - mOptionGroups[RSG_EXCLUDES_GORON_CITY] = OptionGroup::SubGroup("Goron City", mExcludeLocationsOptionsAreas[RCAREA_GORON_CITY]); - mOptionGroups[RSG_EXCLUDES_DODONGOS_CAVERN] = OptionGroup::SubGroup("Dodongo's Cavern", mExcludeLocationsOptionsAreas[RCAREA_DODONGOS_CAVERN]); - mOptionGroups[RSG_EXCLUDES_FIRE_TEMPLE] = OptionGroup::SubGroup("Fire Temple", mExcludeLocationsOptionsAreas[RCAREA_FIRE_TEMPLE]); - mOptionGroups[RSG_EXCLUDES_ZORAS_RIVER] = OptionGroup::SubGroup("Zora's River", mExcludeLocationsOptionsAreas[RCAREA_ZORAS_RIVER]); - mOptionGroups[RSG_EXCLUDES_ZORAS_DOMAIN] = OptionGroup::SubGroup("Zora's Domain", mExcludeLocationsOptionsAreas[RCAREA_ZORAS_DOMAIN]); - mOptionGroups[RSG_EXCLUDES_ZORAS_FOUNTAIN] = OptionGroup::SubGroup("Zora's Fountain", mExcludeLocationsOptionsAreas[RCAREA_ZORAS_FOUNTAIN]); - mOptionGroups[RSG_EXCLUDES_JABU_JABU] = OptionGroup::SubGroup("Jabu Jabu's Belly", mExcludeLocationsOptionsAreas[RCAREA_JABU_JABUS_BELLY]); - mOptionGroups[RSG_EXCLUDES_ICE_CAVERN] = OptionGroup::SubGroup("Ice Cavern", mExcludeLocationsOptionsAreas[RCAREA_ICE_CAVERN]); - mOptionGroups[RSG_EXCLUDES_HYRULE_FIELD] = OptionGroup::SubGroup("Hyrule Field", mExcludeLocationsOptionsAreas[RCAREA_HYRULE_FIELD]); - mOptionGroups[RSG_EXCLUDES_LON_LON_RANCH] = OptionGroup::SubGroup("Lon Lon Ranch", mExcludeLocationsOptionsAreas[RCAREA_LON_LON_RANCH]); - mOptionGroups[RSG_EXCLUDES_LAKE_HYLIA] = OptionGroup::SubGroup("Lake Hylia", mExcludeLocationsOptionsAreas[RCAREA_LAKE_HYLIA]); - mOptionGroups[RSG_EXCLUDES_WATER_TEMPLE] = OptionGroup::SubGroup("Water Temple", mExcludeLocationsOptionsAreas[RCAREA_WATER_TEMPLE]); - mOptionGroups[RSG_EXCLUDES_GERUDO_VALLEY] = OptionGroup::SubGroup("Gerudo Valley", mExcludeLocationsOptionsAreas[RCAREA_GERUDO_VALLEY]); - mOptionGroups[RSG_EXCLUDES_GERUDO_FORTRESS] = OptionGroup::SubGroup("Gerudo Fortress", mExcludeLocationsOptionsAreas[RCAREA_GERUDO_FORTRESS]); - mOptionGroups[RSG_EXCLUDES_HAUNTED_WASTELAND] = OptionGroup::SubGroup("Haunted Wasteland", mExcludeLocationsOptionsAreas[RCAREA_WASTELAND]); - mOptionGroups[RSG_EXCLUDES_DESERT_COLOSSUS] = OptionGroup::SubGroup("Desert Colossus", mExcludeLocationsOptionsAreas[RCAREA_DESERT_COLOSSUS]); - mOptionGroups[RSG_EXCLUDES_GERUDO_TRAINING_GROUND] = OptionGroup::SubGroup("Gerudo Training Ground", mExcludeLocationsOptionsAreas[RCAREA_GERUDO_TRAINING_GROUND]); - mOptionGroups[RSG_EXCLUDES_SPIRIT_TEMPLE] = OptionGroup::SubGroup("Spirit Temple", mExcludeLocationsOptionsAreas[RCAREA_SPIRIT_TEMPLE]); - mOptionGroups[RSG_EXCLUDES_HYRULE_CASTLE] = OptionGroup::SubGroup("Hyrule Castle", mExcludeLocationsOptionsAreas[RCAREA_HYRULE_CASTLE]); + mOptionGroups[RSG_EXCLUDES_KOKIRI_FOREST] = + OptionGroup::SubGroup("Kokiri Forest", mExcludeLocationsOptionsAreas[RCAREA_KOKIRI_FOREST]); + mOptionGroups[RSG_EXCLUDES_LOST_WOODS] = + OptionGroup::SubGroup("Lost Woods", mExcludeLocationsOptionsAreas[RCAREA_LOST_WOODS]); + mOptionGroups[RSG_EXCLUDES_SACRED_FOREST_MEADOW] = + OptionGroup::SubGroup("Sacred Forest Meadow", mExcludeLocationsOptionsAreas[RCAREA_SACRED_FOREST_MEADOW]); + mOptionGroups[RSG_EXCLUDES_DEKU_TREE] = + OptionGroup::SubGroup("Deku Tree", mExcludeLocationsOptionsAreas[RCAREA_DEKU_TREE]); + mOptionGroups[RSG_EXCLUDES_FOREST_TEMPLE] = + OptionGroup::SubGroup("Forest Temple", mExcludeLocationsOptionsAreas[RCAREA_FOREST_TEMPLE]); + mOptionGroups[RSG_EXCLUDES_KAKARIKO_VILLAGE] = + OptionGroup::SubGroup("Kakariko Village", mExcludeLocationsOptionsAreas[RCAREA_KAKARIKO_VILLAGE]); + mOptionGroups[RSG_EXCLUDES_GRAVEYARD] = + OptionGroup::SubGroup("Graveyard", mExcludeLocationsOptionsAreas[RCAREA_GRAVEYARD]); + mOptionGroups[RSG_EXCLUDES_BOTTOM_OF_THE_WELL] = + OptionGroup::SubGroup("Bottom of the Well", mExcludeLocationsOptionsAreas[RCAREA_BOTTOM_OF_THE_WELL]); + mOptionGroups[RSG_EXCLUDES_SHADOW_TEMPLE] = + OptionGroup::SubGroup("Shadow Temple", mExcludeLocationsOptionsAreas[RCAREA_SHADOW_TEMPLE]); + mOptionGroups[RSG_EXCLUDES_DEATH_MOUNTAIN_TRAIL] = + OptionGroup::SubGroup("Death Mountain Trail", mExcludeLocationsOptionsAreas[RCAREA_DEATH_MOUNTAIN_TRAIL]); + mOptionGroups[RSG_EXCLUDES_DEATH_MOUNTAIN_CRATER] = + OptionGroup::SubGroup("Death Mountain Crater", mExcludeLocationsOptionsAreas[RCAREA_DEATH_MOUNTAIN_CRATER]); + mOptionGroups[RSG_EXCLUDES_GORON_CITY] = + OptionGroup::SubGroup("Goron City", mExcludeLocationsOptionsAreas[RCAREA_GORON_CITY]); + mOptionGroups[RSG_EXCLUDES_DODONGOS_CAVERN] = + OptionGroup::SubGroup("Dodongo's Cavern", mExcludeLocationsOptionsAreas[RCAREA_DODONGOS_CAVERN]); + mOptionGroups[RSG_EXCLUDES_FIRE_TEMPLE] = + OptionGroup::SubGroup("Fire Temple", mExcludeLocationsOptionsAreas[RCAREA_FIRE_TEMPLE]); + mOptionGroups[RSG_EXCLUDES_ZORAS_RIVER] = + OptionGroup::SubGroup("Zora's River", mExcludeLocationsOptionsAreas[RCAREA_ZORAS_RIVER]); + mOptionGroups[RSG_EXCLUDES_ZORAS_DOMAIN] = + OptionGroup::SubGroup("Zora's Domain", mExcludeLocationsOptionsAreas[RCAREA_ZORAS_DOMAIN]); + mOptionGroups[RSG_EXCLUDES_ZORAS_FOUNTAIN] = + OptionGroup::SubGroup("Zora's Fountain", mExcludeLocationsOptionsAreas[RCAREA_ZORAS_FOUNTAIN]); + mOptionGroups[RSG_EXCLUDES_JABU_JABU] = + OptionGroup::SubGroup("Jabu Jabu's Belly", mExcludeLocationsOptionsAreas[RCAREA_JABU_JABUS_BELLY]); + mOptionGroups[RSG_EXCLUDES_ICE_CAVERN] = + OptionGroup::SubGroup("Ice Cavern", mExcludeLocationsOptionsAreas[RCAREA_ICE_CAVERN]); + mOptionGroups[RSG_EXCLUDES_HYRULE_FIELD] = + OptionGroup::SubGroup("Hyrule Field", mExcludeLocationsOptionsAreas[RCAREA_HYRULE_FIELD]); + mOptionGroups[RSG_EXCLUDES_LON_LON_RANCH] = + OptionGroup::SubGroup("Lon Lon Ranch", mExcludeLocationsOptionsAreas[RCAREA_LON_LON_RANCH]); + mOptionGroups[RSG_EXCLUDES_LAKE_HYLIA] = + OptionGroup::SubGroup("Lake Hylia", mExcludeLocationsOptionsAreas[RCAREA_LAKE_HYLIA]); + mOptionGroups[RSG_EXCLUDES_WATER_TEMPLE] = + OptionGroup::SubGroup("Water Temple", mExcludeLocationsOptionsAreas[RCAREA_WATER_TEMPLE]); + mOptionGroups[RSG_EXCLUDES_GERUDO_VALLEY] = + OptionGroup::SubGroup("Gerudo Valley", mExcludeLocationsOptionsAreas[RCAREA_GERUDO_VALLEY]); + mOptionGroups[RSG_EXCLUDES_GERUDO_FORTRESS] = + OptionGroup::SubGroup("Gerudo Fortress", mExcludeLocationsOptionsAreas[RCAREA_GERUDO_FORTRESS]); + mOptionGroups[RSG_EXCLUDES_HAUNTED_WASTELAND] = + OptionGroup::SubGroup("Haunted Wasteland", mExcludeLocationsOptionsAreas[RCAREA_WASTELAND]); + mOptionGroups[RSG_EXCLUDES_DESERT_COLOSSUS] = + OptionGroup::SubGroup("Desert Colossus", mExcludeLocationsOptionsAreas[RCAREA_DESERT_COLOSSUS]); + mOptionGroups[RSG_EXCLUDES_GERUDO_TRAINING_GROUND] = + OptionGroup::SubGroup("Gerudo Training Ground", mExcludeLocationsOptionsAreas[RCAREA_GERUDO_TRAINING_GROUND]); + mOptionGroups[RSG_EXCLUDES_SPIRIT_TEMPLE] = + OptionGroup::SubGroup("Spirit Temple", mExcludeLocationsOptionsAreas[RCAREA_SPIRIT_TEMPLE]); + mOptionGroups[RSG_EXCLUDES_HYRULE_CASTLE] = + OptionGroup::SubGroup("Hyrule Castle", mExcludeLocationsOptionsAreas[RCAREA_HYRULE_CASTLE]); mOptionGroups[RSG_EXCLUDES_MARKET] = OptionGroup::SubGroup("Market", mExcludeLocationsOptionsAreas[RCAREA_MARKET]); - mOptionGroups[RSG_EXCLUDES_GANONS_CASTLE] = OptionGroup::SubGroup("Ganon's Castle", mExcludeLocationsOptionsAreas[RCAREA_GANONS_CASTLE]); - mOptionGroups[RSG_EXCLUDES] = OptionGroup::SubGroup("Exclude Locations", { - &mOptionGroups[RSG_EXCLUDES_KOKIRI_FOREST], - &mOptionGroups[RSG_EXCLUDES_LOST_WOODS], - &mOptionGroups[RSG_EXCLUDES_SACRED_FOREST_MEADOW], - &mOptionGroups[RSG_EXCLUDES_DEKU_TREE], - &mOptionGroups[RSG_EXCLUDES_FOREST_TEMPLE], - &mOptionGroups[RSG_EXCLUDES_KAKARIKO_VILLAGE], - &mOptionGroups[RSG_EXCLUDES_GRAVEYARD], - &mOptionGroups[RSG_EXCLUDES_BOTTOM_OF_THE_WELL], - &mOptionGroups[RSG_EXCLUDES_SHADOW_TEMPLE], - &mOptionGroups[RSG_EXCLUDES_DEATH_MOUNTAIN_TRAIL], - &mOptionGroups[RSG_EXCLUDES_DEATH_MOUNTAIN_CRATER], - &mOptionGroups[RSG_EXCLUDES_GORON_CITY], - &mOptionGroups[RSG_EXCLUDES_DODONGOS_CAVERN], - &mOptionGroups[RSG_EXCLUDES_FIRE_TEMPLE], - &mOptionGroups[RSG_EXCLUDES_ZORAS_RIVER], - &mOptionGroups[RSG_EXCLUDES_ZORAS_DOMAIN], - &mOptionGroups[RSG_EXCLUDES_ZORAS_FOUNTAIN], - &mOptionGroups[RSG_EXCLUDES_JABU_JABU], - &mOptionGroups[RSG_EXCLUDES_ICE_CAVERN], - &mOptionGroups[RSG_EXCLUDES_HYRULE_FIELD], - &mOptionGroups[RSG_EXCLUDES_LON_LON_RANCH], - &mOptionGroups[RSG_EXCLUDES_LAKE_HYLIA], - &mOptionGroups[RSG_EXCLUDES_WATER_TEMPLE], - &mOptionGroups[RSG_EXCLUDES_GERUDO_VALLEY], - &mOptionGroups[RSG_EXCLUDES_GERUDO_FORTRESS], - &mOptionGroups[RSG_EXCLUDES_HAUNTED_WASTELAND], - &mOptionGroups[RSG_EXCLUDES_DESERT_COLOSSUS], - &mOptionGroups[RSG_EXCLUDES_GERUDO_TRAINING_GROUND], - &mOptionGroups[RSG_EXCLUDES_SPIRIT_TEMPLE], - &mOptionGroups[RSG_EXCLUDES_HYRULE_CASTLE], - &mOptionGroups[RSG_EXCLUDES_MARKET], - &mOptionGroups[RSG_EXCLUDES_GANONS_CASTLE], - }); - mOptionGroups[RSG_DETAILED_LOGIC] = OptionGroup("Detailed Logic Settings", { - &mOptionGroups[RSG_LOGIC], - &mOptionGroups[RSG_TRICKS], - &mOptionGroups[RSG_EXCLUDES] - }); + mOptionGroups[RSG_EXCLUDES_GANONS_CASTLE] = + OptionGroup::SubGroup("Ganon's Castle", mExcludeLocationsOptionsAreas[RCAREA_GANONS_CASTLE]); + mOptionGroups[RSG_EXCLUDES] = + OptionGroup::SubGroup("Exclude Locations", { + &mOptionGroups[RSG_EXCLUDES_KOKIRI_FOREST], + &mOptionGroups[RSG_EXCLUDES_LOST_WOODS], + &mOptionGroups[RSG_EXCLUDES_SACRED_FOREST_MEADOW], + &mOptionGroups[RSG_EXCLUDES_DEKU_TREE], + &mOptionGroups[RSG_EXCLUDES_FOREST_TEMPLE], + &mOptionGroups[RSG_EXCLUDES_KAKARIKO_VILLAGE], + &mOptionGroups[RSG_EXCLUDES_GRAVEYARD], + &mOptionGroups[RSG_EXCLUDES_BOTTOM_OF_THE_WELL], + &mOptionGroups[RSG_EXCLUDES_SHADOW_TEMPLE], + &mOptionGroups[RSG_EXCLUDES_DEATH_MOUNTAIN_TRAIL], + &mOptionGroups[RSG_EXCLUDES_DEATH_MOUNTAIN_CRATER], + &mOptionGroups[RSG_EXCLUDES_GORON_CITY], + &mOptionGroups[RSG_EXCLUDES_DODONGOS_CAVERN], + &mOptionGroups[RSG_EXCLUDES_FIRE_TEMPLE], + &mOptionGroups[RSG_EXCLUDES_ZORAS_RIVER], + &mOptionGroups[RSG_EXCLUDES_ZORAS_DOMAIN], + &mOptionGroups[RSG_EXCLUDES_ZORAS_FOUNTAIN], + &mOptionGroups[RSG_EXCLUDES_JABU_JABU], + &mOptionGroups[RSG_EXCLUDES_ICE_CAVERN], + &mOptionGroups[RSG_EXCLUDES_HYRULE_FIELD], + &mOptionGroups[RSG_EXCLUDES_LON_LON_RANCH], + &mOptionGroups[RSG_EXCLUDES_LAKE_HYLIA], + &mOptionGroups[RSG_EXCLUDES_WATER_TEMPLE], + &mOptionGroups[RSG_EXCLUDES_GERUDO_VALLEY], + &mOptionGroups[RSG_EXCLUDES_GERUDO_FORTRESS], + &mOptionGroups[RSG_EXCLUDES_HAUNTED_WASTELAND], + &mOptionGroups[RSG_EXCLUDES_DESERT_COLOSSUS], + &mOptionGroups[RSG_EXCLUDES_GERUDO_TRAINING_GROUND], + &mOptionGroups[RSG_EXCLUDES_SPIRIT_TEMPLE], + &mOptionGroups[RSG_EXCLUDES_HYRULE_CASTLE], + &mOptionGroups[RSG_EXCLUDES_MARKET], + &mOptionGroups[RSG_EXCLUDES_GANONS_CASTLE], + }); + mOptionGroups[RSG_DETAILED_LOGIC] = + OptionGroup("Detailed Logic Settings", + { &mOptionGroups[RSG_LOGIC], &mOptionGroups[RSG_TRICKS], &mOptionGroups[RSG_EXCLUDES] }); } -std::unordered_map Settings::PopulateOptionNameToEnum(){ +std::unordered_map Settings::PopulateOptionNameToEnum() { std::unordered_map output = {}; for (size_t count = 0; count < RSK_MAX; count++) { output[mOptions[count].GetName()] = static_cast(count); @@ -1122,8 +1740,8 @@ TrickOption& Settings::GetTrickOption(const RandomizerTrick key) { } void Context::ResetTrickOptions() { - for (int count = 0; count < RT_MAX; count++){ - mTrickOptions[count].Set(0); //RANDOTODO this can probably be done better + for (int count = 0; count < RT_MAX; count++) { + mTrickOptions[count].Set(0); // RANDOTODO this can probably be done better }; } @@ -1131,11 +1749,11 @@ const std::array& Settings::GetAllOptions() const { return mOptions; } -std::vector