mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-01-31 07:20:14 -05:00
Merge branch 'develop' into Custom-DLists
This commit is contained in:
commit
23dde1e26a
2
.github/workflows/apt-deps.txt
vendored
2
.github/workflows/apt-deps.txt
vendored
@ -1 +1 @@
|
|||||||
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build
|
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build
|
||||||
|
70
.github/workflows/generate-builds.yml
vendored
70
.github/workflows/generate-builds.yml
vendored
@ -22,7 +22,7 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt)
|
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) libzip-dev zipcmp zipmerge ziptool
|
||||||
- name: Cache build folders
|
- name: Cache build folders
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
@ -32,15 +32,16 @@ jobs:
|
|||||||
${{ runner.os }}-otr-build-
|
${{ runner.os }}-otr-build-
|
||||||
path: |
|
path: |
|
||||||
build-cmake
|
build-cmake
|
||||||
SDL2-2.28.5
|
SDL2-2.30.3
|
||||||
|
tinyxml2-10.0.0
|
||||||
- name: Install latest SDL
|
- name: Install latest SDL
|
||||||
run: |
|
run: |
|
||||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||||
if [ ! -d "SDL2-2.28.5" ]; then
|
if [ ! -d "SDL2-2.30.3" ]; then
|
||||||
wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz
|
wget https://www.libsdl.org/release/SDL2-2.30.3.tar.gz
|
||||||
tar -xzf SDL2-2.28.5.tar.gz
|
tar -xzf SDL2-2.30.3.tar.gz
|
||||||
fi
|
fi
|
||||||
cd SDL2-2.28.5
|
cd SDL2-2.30.3
|
||||||
./configure --enable-hidapi-libusb
|
./configure --enable-hidapi-libusb
|
||||||
make -j 10
|
make -j 10
|
||||||
sudo make install
|
sudo make install
|
||||||
@ -54,7 +55,7 @@ jobs:
|
|||||||
tar -xzf 10.0.0.tar.gz
|
tar -xzf 10.0.0.tar.gz
|
||||||
fi
|
fi
|
||||||
cd tinyxml2-10.0.0
|
cd tinyxml2-10.0.0
|
||||||
mkdir build
|
mkdir -p build
|
||||||
cd build
|
cd build
|
||||||
cmake ..
|
cmake ..
|
||||||
make
|
make
|
||||||
@ -157,34 +158,22 @@ jobs:
|
|||||||
linux-build-${{ github.ref }}
|
linux-build-${{ github.ref }}
|
||||||
linux-build-
|
linux-build-
|
||||||
path: |
|
path: |
|
||||||
SDL2-2.28.5
|
SDL2-2.30.3
|
||||||
SDL2_net-2.2.0
|
SDL2_net-2.2.0
|
||||||
|
tinyxml2-10.0.0
|
||||||
|
libzip-1.10.1
|
||||||
- name: Install latest SDL
|
- name: Install latest SDL
|
||||||
run: |
|
run: |
|
||||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||||
if [ ! -d "SDL2-2.28.5" ]; then
|
if [ ! -d "SDL2-2.30.3" ]; then
|
||||||
wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz
|
wget https://www.libsdl.org/release/SDL2-2.30.3.tar.gz
|
||||||
tar -xzf SDL2-2.28.5.tar.gz
|
tar -xzf SDL2-2.30.3.tar.gz
|
||||||
fi
|
fi
|
||||||
cd SDL2-2.28.5
|
cd SDL2-2.30.3
|
||||||
./configure --enable-hidapi-libusb
|
./configure --enable-hidapi-libusb
|
||||||
make -j 10
|
make -j 10
|
||||||
sudo make install
|
sudo make install
|
||||||
sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
|
sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
|
||||||
- name: Install latest tinyxml2
|
|
||||||
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
|
|
||||||
wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz
|
|
||||||
tar -xzf 10.0.0.tar.gz
|
|
||||||
fi
|
|
||||||
cd tinyxml2-10.0.0
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
cmake ..
|
|
||||||
make
|
|
||||||
sudo make install
|
|
||||||
- name: Install latest SDL_net
|
- name: Install latest SDL_net
|
||||||
run: |
|
run: |
|
||||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||||
@ -197,6 +186,34 @@ jobs:
|
|||||||
make -j 10
|
make -j 10
|
||||||
sudo make install
|
sudo make install
|
||||||
sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
|
sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
|
||||||
|
- name: Install latest tinyxml2
|
||||||
|
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
|
||||||
|
wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz
|
||||||
|
tar -xzf 10.0.0.tar.gz
|
||||||
|
fi
|
||||||
|
cd tinyxml2-10.0.0
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake ..
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
- name: Install libzip without crypto
|
||||||
|
run: |
|
||||||
|
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||||
|
if [ ! -d "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
|
||||||
|
fi
|
||||||
|
cd libzip-1.10.1
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake .. -DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
sudo cp -av /usr/local/lib/libzip* /lib/x86_64-linux-gnu/
|
||||||
- name: Download soh.otr
|
- name: Download soh.otr
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
@ -244,7 +261,6 @@ jobs:
|
|||||||
- name: Cache build folder
|
- name: Cache build folder
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
save-always: true
|
|
||||||
key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }}
|
key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-build-${{ github.ref }}
|
${{ runner.os }}-build-${{ github.ref }}
|
||||||
|
13
.github/workflows/pr-artifacts.yml
vendored
13
.github/workflows/pr-artifacts.yml
vendored
@ -12,7 +12,7 @@ jobs:
|
|||||||
if: ${{ github.event.workflow_run.event == 'pull_request' }}
|
if: ${{ github.event.workflow_run.event == 'pull_request' }}
|
||||||
steps:
|
steps:
|
||||||
- id: 'pr-number'
|
- id: 'pr-number'
|
||||||
uses: actions/github-script@v6
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
result-encoding: string
|
result-encoding: string
|
||||||
script: |
|
script: |
|
||||||
@ -20,8 +20,9 @@ jobs:
|
|||||||
const pullHeadSHA = '${{github.event.workflow_run.head_sha}}';
|
const pullHeadSHA = '${{github.event.workflow_run.head_sha}}';
|
||||||
const pullUserId = ${{github.event.sender.id}};
|
const pullUserId = ${{github.event.sender.id}};
|
||||||
const prNumber = await (async () => {
|
const prNumber = await (async () => {
|
||||||
const pulls = await github.rest.pulls.list({owner, repo});
|
for await (const { data } of github.paginate.iterator(
|
||||||
for await (const {data} of github.paginate.iterator(pulls)) {
|
github.rest.pulls.list, { owner, repo }
|
||||||
|
)) {
|
||||||
for (const pull of data) {
|
for (const pull of data) {
|
||||||
if (pull.head.sha === pullHeadSHA && pull.user.id === pullUserId) {
|
if (pull.head.sha === pullHeadSHA && pull.user.id === pullUserId) {
|
||||||
return pull.number;
|
return pull.number;
|
||||||
@ -36,7 +37,7 @@ jobs:
|
|||||||
|
|
||||||
return prNumber;
|
return prNumber;
|
||||||
- id: 'artifacts-text'
|
- id: 'artifacts-text'
|
||||||
uses: actions/github-script@v6
|
uses: actions/github-script@v7
|
||||||
with:
|
with:
|
||||||
result-encoding: string
|
result-encoding: string
|
||||||
script: |
|
script: |
|
||||||
@ -47,13 +48,13 @@ jobs:
|
|||||||
});
|
});
|
||||||
|
|
||||||
return allArtifacts.data.artifacts.reduce((acc, item) => {
|
return allArtifacts.data.artifacts.reduce((acc, item) => {
|
||||||
if (item.name === "assets") return acc;
|
if (item.name === "soh.otr") return acc;
|
||||||
acc += `
|
acc += `
|
||||||
- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip)`;
|
- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip)`;
|
||||||
return acc;
|
return acc;
|
||||||
}, '### Build Artifacts');
|
}, '### Build Artifacts');
|
||||||
- id: 'add-to-pr'
|
- id: 'add-to-pr'
|
||||||
uses: garrettjoecox/pr-section@3.1.0
|
uses: garrettjoecox/pr-section@4.0.0
|
||||||
with:
|
with:
|
||||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||||
pr-number: ${{ steps.pr-number.outputs.result }}
|
pr-number: ${{ steps.pr-number.outputs.result }}
|
||||||
|
@ -9,6 +9,18 @@ project(Ship VERSION 8.0.6 LANGUAGES C CXX)
|
|||||||
include(CMake/soh-cvars.cmake)
|
include(CMake/soh-cvars.cmake)
|
||||||
include(CMake/lus-cvars.cmake)
|
include(CMake/lus-cvars.cmake)
|
||||||
|
|
||||||
|
option(SUPPRESS_WARNINGS "Suppress warnings in LUS and src (decomp)" ON)
|
||||||
|
if(SUPPRESS_WARNINGS)
|
||||||
|
MESSAGE("Suppressing warnings in LUS and src")
|
||||||
|
if(MSVC)
|
||||||
|
set(WARNING_OVERRIDE /w)
|
||||||
|
else()
|
||||||
|
set(WARNING_OVERRIDE -w)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
MESSAGE("Skipping warning suppression")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(NATO_PHONETIC_ALPHABET
|
set(NATO_PHONETIC_ALPHABET
|
||||||
"Alfa" "Bravo" "Charlie" "Delta" "Echo" "Foxtrot" "Golf" "Hotel"
|
"Alfa" "Bravo" "Charlie" "Delta" "Echo" "Foxtrot" "Golf" "Hotel"
|
||||||
"India" "Juliett" "Kilo" "Lima" "Mike" "November" "Oscar" "Papa"
|
"India" "Juliett" "Kilo" "Lima" "Mike" "November" "Oscar" "Papa"
|
||||||
@ -148,6 +160,7 @@ add_compile_definitions(CONTROLLERBUTTONS_T=uint32_t)
|
|||||||
# Sub-projects
|
# Sub-projects
|
||||||
################################################################################
|
################################################################################
|
||||||
add_subdirectory(libultraship ${CMAKE_BINARY_DIR}/libultraship)
|
add_subdirectory(libultraship ${CMAKE_BINARY_DIR}/libultraship)
|
||||||
|
target_compile_options(libultraship PRIVATE "${WARNING_OVERRIDE}")
|
||||||
add_subdirectory(ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
|
add_subdirectory(ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
|
||||||
add_subdirectory(OTRExporter)
|
add_subdirectory(OTRExporter)
|
||||||
add_subdirectory(soh)
|
add_subdirectory(soh)
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 467f36589b0d6fe6c7f9d248945650a459bce768
|
Subproject commit 8f71672901987bc3dbf6256e64e228db36a686f5
|
@ -9,7 +9,7 @@ Official Website: https://www.shipofharkinian.com/
|
|||||||
|
|
||||||
Official Discord: https://discord.com/invite/shipofharkinian
|
Official Discord: https://discord.com/invite/shipofharkinian
|
||||||
|
|
||||||
If you're having any trouble after reading through this `README`, feel free ask for help in the Support text channels. Please keep in mind that we do not condone piracy.
|
If you're having any trouble after reading through this `README`, feel free to ask for help in the Support text channels. Please keep in mind that we do not condone piracy.
|
||||||
|
|
||||||
# Quick Start
|
# Quick Start
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ Congratulations, you are now sailing with the Ship of Harkinian! Have fun!
|
|||||||
# Project Overview
|
# Project Overview
|
||||||
Ship of Harkinian (SOH) is built atop a custom library dubbed libultraship (LUS). Back in the N64 days, there was an SDK distributed to developers named libultra; LUS is designed to mimic the functionality of libultra on modern hardware. In addition, we are dependant on the source code provided by the OOT decompilation project.
|
Ship of Harkinian (SOH) is built atop a custom library dubbed libultraship (LUS). Back in the N64 days, there was an SDK distributed to developers named libultra; LUS is designed to mimic the functionality of libultra on modern hardware. In addition, we are dependant on the source code provided by the OOT decompilation project.
|
||||||
|
|
||||||
In order for the game to function, you will require a **legally aquired** ROM for Ocarina of Time. Click [here](https://ship.equipment/) to check the compatability of your specific rom. Any copyrighted assets are extracted from the ROM and reformated as a .otr archive file which the code uses.
|
In order for the game to function, you will require a **legally acquired** ROM for Ocarina of Time. Click [here](https://ship.equipment/) to check the compatibility of your specific rom. Any copyrighted assets are extracted from the ROM and reformatted as a .otr archive file which the code uses.
|
||||||
|
|
||||||
### Graphics Backends
|
### Graphics Backends
|
||||||
Currently, there are three rendering APIs supported: DirectX11 (Windows), OpenGL (all platforms), and Metal (MacOS). You can change which API to use in the `Settings` menu of the menubar, which requires a restart. If you're having an issue with crashing, you can change the API in the `shipofharkinian.json` file by finding the line `gfxbackend:""` and changing the value to `sdl` for OpenGL. DirectX 11 is the default on Windows.
|
Currently, there are three rendering APIs supported: DirectX11 (Windows), OpenGL (all platforms), and Metal (MacOS). You can change which API to use in the `Settings` menu of the menubar, which requires a restart. If you're having an issue with crashing, you can change the API in the `shipofharkinian.json` file by finding the line `gfxbackend:""` and changing the value to `sdl` for OpenGL. DirectX 11 is the default on Windows.
|
||||||
@ -99,11 +99,11 @@ If you want to playtest a continuous integration build, you can find them at the
|
|||||||
* [Linux](https://nightly.link/HarbourMasters/Shipwright/workflows/generate-builds/develop/soh-linux.zip)
|
* [Linux](https://nightly.link/HarbourMasters/Shipwright/workflows/generate-builds/develop/soh-linux.zip)
|
||||||
|
|
||||||
### Further Reading
|
### Further Reading
|
||||||
More detailed documentation can be found in the 'docs' directory, including the afformentioned [building instructions](docs/BUILDING.md).
|
More detailed documentation can be found in the 'docs' directory, including the aforementioned [building instructions](docs/BUILDING.md).
|
||||||
|
|
||||||
* [Credits](docs/CREDITS.md)
|
* [Credits](docs/CREDITS.md)
|
||||||
* [Custom Music](docs/CUSTOM_MUSIC.md)
|
* [Custom Music](docs/CUSTOM_MUSIC.md)
|
||||||
*[Controler Maping](docs/GAME_CONTROLLER_DB.md)
|
* [Controller Mapping](docs/GAME_CONTROLLER_DB.md)
|
||||||
* [Modding](docs/MODDING.md)
|
* [Modding](docs/MODDING.md)
|
||||||
* [Versioning](docs/VERSIONING.md)
|
* [Versioning](docs/VERSIONING.md)
|
||||||
|
|
||||||
|
100
docs/BUILDING.md
100
docs/BUILDING.md
@ -3,7 +3,7 @@
|
|||||||
## Windows
|
## Windows
|
||||||
|
|
||||||
Requires:
|
Requires:
|
||||||
* At least 8GB of RAM (machines with 4GB have seen complier failures)
|
* At least 8GB of RAM (machines with 4GB have seen compiler failures)
|
||||||
* Visual Studio 2022 Community Edition with the C++ feature set
|
* Visual Studio 2022 Community Edition with the C++ feature set
|
||||||
* One of the Windows SDKs that comes with Visual Studio, for example the current Windows 10 version 10.0.19041.0
|
* One of the Windows SDKs that comes with Visual Studio, for example the current Windows 10 version 10.0.19041.0
|
||||||
* The `MSVC v143 - VS 2022 C++ build tools` component of Visual Studio
|
* The `MSVC v143 - VS 2022 C++ build tools` component of Visual Studio
|
||||||
@ -22,7 +22,7 @@ It is recommended that you install Python and Git standalone, the install proces
|
|||||||
|
|
||||||
_Note: Be sure to either clone with the ``--recursive`` flag or do ``git submodule update --init`` after cloning to pull in the libultraship submodule!_
|
_Note: Be sure to either clone with the ``--recursive`` flag or do ``git submodule update --init`` after cloning to pull in the libultraship submodule!_
|
||||||
|
|
||||||
2. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
|
2. After setup and initial build, use the built-in OTR extraction to make your oot.otr/oot-mq.otr files.
|
||||||
|
|
||||||
_Note: Instructions assume using powershell_
|
_Note: Instructions assume using powershell_
|
||||||
```powershell
|
```powershell
|
||||||
@ -30,22 +30,18 @@ _Note: Instructions assume using powershell_
|
|||||||
cd Shipwright
|
cd Shipwright
|
||||||
|
|
||||||
# Setup cmake project
|
# Setup cmake project
|
||||||
& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v143 -A x64 # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging)
|
# Add `-DCMAKE_BUILD_TYPE:STRING=Release` if you're packaging
|
||||||
# Extract assets & generate OTR (run this anytime you need to regenerate OTR)
|
# Add `-DSUPPRESS_WARNINGS=0` to prevent suppression of warnings from LUS and decomp (src) files. set to 1 to re-enable suppression
|
||||||
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target ExtractAssets # --config Release (if you're packaging)
|
& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v143 -A x64
|
||||||
# Compile project
|
|
||||||
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 # --config Release (if you're packaging)
|
|
||||||
|
|
||||||
# Now you can run the executable in .\build\x64
|
# Generate soh.otr
|
||||||
|
|
||||||
# If you need to clean the project you can run
|
|
||||||
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target clean
|
|
||||||
|
|
||||||
# If you need to regenerate the asset headers to check them into source
|
|
||||||
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target ExtractAssetHeaders
|
|
||||||
|
|
||||||
# If you need a newer soh.otr only
|
|
||||||
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target GenerateSohOtr
|
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target GenerateSohOtr
|
||||||
|
|
||||||
|
# Compile project
|
||||||
|
# Add `--config Release` if you're packaging
|
||||||
|
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64
|
||||||
|
|
||||||
|
# Now you can run the executable in .\build\x64 or run in Visual Studio
|
||||||
```
|
```
|
||||||
|
|
||||||
### Developing SoH
|
### Developing SoH
|
||||||
@ -76,6 +72,19 @@ cd "build/x64"
|
|||||||
& 'C:\Program Files\CMake\bin\cpack.exe' -G ZIP
|
& 'C:\Program Files\CMake\bin\cpack.exe' -G ZIP
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Additional CMake Targets
|
||||||
|
#### Clean
|
||||||
|
```powershell
|
||||||
|
# If you need to clean the project you can run
|
||||||
|
C:\Program Files\CMake\bin\cmake.exe --build build-cmake --target clean
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Regenerate Asset Headers
|
||||||
|
```powershell
|
||||||
|
# If you need to regenerate the asset headers to check them into source
|
||||||
|
C:\Program Files\CMake\bin\cmake.exe --build build-cmake --target ExtractAssetHeaders
|
||||||
|
```
|
||||||
|
|
||||||
## Linux
|
## Linux
|
||||||
### Install dependencies
|
### Install dependencies
|
||||||
#### Debian/Ubuntu
|
#### Debian/Ubuntu
|
||||||
@ -124,13 +133,17 @@ cd Shipwright
|
|||||||
git submodule update --init
|
git submodule update --init
|
||||||
|
|
||||||
# Generate Ninja project
|
# Generate Ninja project
|
||||||
cmake -H. -Bbuild-cmake -GNinja # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging) -DPython3_EXECUTABLE=$(which python3) (if you are using non-standard Python installations such as PyEnv)
|
# Add `-DCMAKE_BUILD_TYPE:STRING=Release` if you're packaging
|
||||||
|
# Add `-DSUPPRESS_WARNINGS=0` to prevent suppression of warnings from LUS and decomp (src) files. set to 1 to re-enable suppression
|
||||||
|
# Add `-DPython3_EXECUTABLE=$(which python3)` if you are using non-standard Python installations such as PyEnv
|
||||||
|
cmake -H. -Bbuild-cmake -GNinja
|
||||||
|
|
||||||
# Generate soh.otr
|
# Generate soh.otr
|
||||||
cmake --build build-cmake --target GenerateSohOtr
|
cmake --build build-cmake --target GenerateSohOtr
|
||||||
|
|
||||||
# Compile the project
|
# Compile the project
|
||||||
cmake --build build-cmake # --config Release (if you're packaging)
|
# Add `--config Release` if you're packaging
|
||||||
|
cmake --build build-cmake
|
||||||
|
|
||||||
# Now you can run the executable in ./build-cmake/soh/soh.elf
|
# Now you can run the executable in ./build-cmake/soh/soh.elf
|
||||||
# To develop the project open the repository in VSCode (or your preferred editor)
|
# To develop the project open the repository in VSCode (or your preferred editor)
|
||||||
@ -153,16 +166,14 @@ cpack -G External (creates appimage)
|
|||||||
# If you need to clean the project you can run
|
# If you need to clean the project you can run
|
||||||
cmake --build build-cmake --target clean
|
cmake --build build-cmake --target clean
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Regenerate Asset Headers
|
#### Regenerate Asset Headers
|
||||||
```bash
|
```bash
|
||||||
# If you need to regenerate the asset headers to check them into source
|
# If you need to regenerate the asset headers to check them into source
|
||||||
cp <path to your ROM> OTRExporter
|
|
||||||
cmake --build build-cmake --target ExtractAssetHeaders
|
cmake --build build-cmake --target ExtractAssetHeaders
|
||||||
```
|
```
|
||||||
|
|
||||||
## macOS
|
## macOS
|
||||||
Requires Xcode (or xcode-tools) && `sdl2, libpng, glew, ninja, cmake` (can be installed via homebrew, macports, etc)
|
Requires Xcode (or xcode-tools) && `sdl2, libpng, glew, ninja, cmake, tinyxml2, nlohmann-json, libzip` (can be installed via [homebrew](https://brew.sh/), macports, etc)
|
||||||
|
|
||||||
**Important: For maximum performance make sure you have ninja build tools installed!**
|
**Important: For maximum performance make sure you have ninja build tools installed!**
|
||||||
|
|
||||||
@ -172,32 +183,28 @@ _Note: If you're using Visual Studio Code, the [cpack plugin](https://marketplac
|
|||||||
# Clone the repo
|
# Clone the repo
|
||||||
git clone https://github.com/HarbourMasters/Shipwright.git
|
git clone https://github.com/HarbourMasters/Shipwright.git
|
||||||
cd ShipWright
|
cd ShipWright
|
||||||
|
|
||||||
# Clone the submodule libultraship
|
# Clone the submodule libultraship
|
||||||
git submodule update --init
|
git submodule update --init
|
||||||
# Copy the baserom to the OTRExporter folder
|
|
||||||
cp <path to your ROM> OTRExporter
|
|
||||||
# Generate Ninja project
|
|
||||||
cmake -H. -Bbuild-cmake -GNinja # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging)
|
|
||||||
# Extract assets & generate OTR (run this anytime you need to regenerate OTR)
|
|
||||||
cmake --build build-cmake --target ExtractAssets
|
|
||||||
# Compile the project
|
|
||||||
cmake --build build-cmake # --config Release (if you're packaging)
|
|
||||||
|
|
||||||
# Copy oot.otr into the Application Support directory
|
# Install development dependencies (assuming homebrew)
|
||||||
cp build-cmake/soh/oot.otr ~/Library/Application\ Support/com.shipofharkinian.soh/
|
brew install sdl2 libpng glew ninja cmake tinyxml2 nlohmann-json libzip
|
||||||
|
|
||||||
|
# Generate Ninja project
|
||||||
|
# Add `-DCMAKE_BUILD_TYPE:STRING=Release` if you're packaging
|
||||||
|
# Add `-DSUPPRESS_WARNINGS=0` to prevent suppression of warnings from LUS and decomp (src) files. set to 1 to re-enable suppression
|
||||||
|
cmake -H. -Bbuild-cmake -GNinja
|
||||||
|
|
||||||
|
# Generate soh.otr
|
||||||
|
cmake --build build-cmake --target GenerateSohOtr
|
||||||
|
|
||||||
|
# Compile the project
|
||||||
|
# Add `--config Release` if you're packaging
|
||||||
|
cmake --build build-cmake
|
||||||
|
|
||||||
# Now you can run the executable file:
|
# Now you can run the executable file:
|
||||||
./build-cmake/soh/soh-macos
|
./build-cmake/soh/soh-macos
|
||||||
# To develop the project open the repository in VSCode (or your preferred editor)
|
# To develop the project open the repository in VSCode (or your preferred editor)
|
||||||
|
|
||||||
# If you need to clean the project you can run
|
|
||||||
cmake --build build-cmake --target clean
|
|
||||||
|
|
||||||
# If you need to regenerate the asset headers to check them into source
|
|
||||||
cmake --build build-cmake --target ExtractAssetHeaders
|
|
||||||
|
|
||||||
# If you need a newer soh.otr only
|
|
||||||
cmake --build build-cmake --target GenerateSohOtr
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Generating a distributable
|
### Generating a distributable
|
||||||
@ -209,6 +216,19 @@ cd build-cmake
|
|||||||
cpack
|
cpack
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Additional CMake Targets
|
||||||
|
#### Clean
|
||||||
|
```bash
|
||||||
|
# If you need to clean the project you can run
|
||||||
|
cmake --build build-cmake --target clean
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Regenerate Asset Headers
|
||||||
|
```bash
|
||||||
|
# If you need to regenerate the asset headers to check them into source
|
||||||
|
cmake --build build-cmake --target ExtractAssetHeaders
|
||||||
|
```
|
||||||
|
|
||||||
## Switch
|
## Switch
|
||||||
1. Requires that your build machine is setup with the tools necessary for your platform above
|
1. Requires that your build machine is setup with the tools necessary for your platform above
|
||||||
2. Requires that you have the switch build tools installed
|
2. Requires that you have the switch build tools installed
|
||||||
|
@ -29,3 +29,10 @@ This file is pulled from https://github.com/gabomdq/SDL_GameControllerDB during
|
|||||||
| Spock Charlie 7.0.2 | [c5b4df0](https://github.com/gabomdq/SDL_GameControllerDB/tree/c5b4df0e1061175cb11e3ebbf8045178339864a5) | [+3](https://github.com/gabomdq/SDL_GameControllerDB/compare/228d980...c5b4df0) |
|
| Spock Charlie 7.0.2 | [c5b4df0](https://github.com/gabomdq/SDL_GameControllerDB/tree/c5b4df0e1061175cb11e3ebbf8045178339864a5) | [+3](https://github.com/gabomdq/SDL_GameControllerDB/compare/228d980...c5b4df0) |
|
||||||
| Sulu Alfa 7.1.0 | [a2cf171](https://github.com/gabomdq/SDL_GameControllerDB/tree/a2cf1711b4ebc646a3814705d2fb6aac5707bcae) | [+4/-1](https://github.com/gabomdq/SDL_GameControllerDB/compare/c5b4df0...a2cf171) |
|
| Sulu Alfa 7.1.0 | [a2cf171](https://github.com/gabomdq/SDL_GameControllerDB/tree/a2cf1711b4ebc646a3814705d2fb6aac5707bcae) | [+4/-1](https://github.com/gabomdq/SDL_GameControllerDB/compare/c5b4df0...a2cf171) |
|
||||||
| Sulu Bravo 7.1.1 | [cc9f777](https://github.com/gabomdq/SDL_GameControllerDB/tree/cc9f777721f0cb30058d9eef52a295130b734a4a) | [+29/-9](https://github.com/gabomdq/SDL_GameControllerDB/compare/a2cf171...cc9f777) |
|
| Sulu Bravo 7.1.1 | [cc9f777](https://github.com/gabomdq/SDL_GameControllerDB/tree/cc9f777721f0cb30058d9eef52a295130b734a4a) | [+29/-9](https://github.com/gabomdq/SDL_GameControllerDB/compare/a2cf171...cc9f777) |
|
||||||
|
| MacReady Alfa 8.0.0 | [c56329f](https://github.com/gabomdq/SDL_GameControllerDB/tree/c56329f4df93fc7a780bdbeae47a9c91447b629c) | [+67/-23](https://github.com/gabomdq/SDL_GameControllerDB/compare/cc9f777...c56329f) |
|
||||||
|
| MacReady Bravo 8.0.1 | [721b575](https://github.com/gabomdq/SDL_GameControllerDB/tree/721b575d3053b21d6d30419bf74afb5b1d0fa7a4) | [+5/-5](https://github.com/gabomdq/SDL_GameControllerDB/compare/c56329f...721b575) |
|
||||||
|
| MacReady Charlie 8.0.2 | [721b575](https://github.com/gabomdq/SDL_GameControllerDB/tree/721b575d3053b21d6d30419bf74afb5b1d0fa7a4) | [+0/-0](https://github.com/gabomdq/SDL_GameControllerDB/compare/721b575...721b575) |
|
||||||
|
| MacReady Delta 8.0.3 | [d4ab609](https://github.com/gabomdq/SDL_GameControllerDB/tree/d4ab609121ee6e687bc3d3a7e80244b3b26d1164) | [+5/-3](https://github.com/gabomdq/SDL_GameControllerDB/compare/721b575...d4ab609) |
|
||||||
|
| MacReady Echo 8.0.4 | [6555d47](https://github.com/gabomdq/SDL_GameControllerDB/tree/6555d47ecb5d9eebac0e3d8cd19a545e9d946c40) | [+2/-0](https://github.com/gabomdq/SDL_GameControllerDB/compare/d4ab609...6555d47) |
|
||||||
|
| MacReady Foxtrot 8.0.5 | [037d6a1](https://github.com/gabomdq/SDL_GameControllerDB/tree/037d6a1533ed94fbc6a8c71e6f1f9aff1e46208a) | [+47/-14](https://github.com/gabomdq/SDL_GameControllerDB/compare/6555d47...037d6a1) |
|
||||||
|
| MacReady Golf 8.0.6 | [075c154](https://github.com/gabomdq/SDL_GameControllerDB/tree/075c1549075ef89a397fd7e0663d21e53a2485fd) | [+340/-301](https://github.com/gabomdq/SDL_GameControllerDB/compare/037d6a1...075c154) |
|
||||||
|
@ -59,7 +59,7 @@ if (IS_DAY || gTimeIncrement >= 0x190) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
We can make a quick change to this code to verify this is indeed what we are looking for, lets multiply the the gTimeIncrement by 10:
|
We can make a quick change to this code to verify this is indeed what we are looking for, lets multiply the gTimeIncrement by 10:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
if (IS_DAY || gTimeIncrement >= 0x190) {
|
if (IS_DAY || gTimeIncrement >= 0x190) {
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 0302eab051a7e0e5a8dc208aca5b00899a91808c
|
Subproject commit 3e46fe77a4581a84f9c0edfab9c3a69a5320fe01
|
1
soh/.gitignore
vendored
1
soh/.gitignore
vendored
@ -7,7 +7,6 @@ __pycache__/
|
|||||||
.vscode/
|
.vscode/
|
||||||
.vs/
|
.vs/
|
||||||
.idea/
|
.idea/
|
||||||
CMakeLists.txt
|
|
||||||
cmake-build-debug
|
cmake-build-debug
|
||||||
venv/
|
venv/
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.26.0 FATAL_ERROR)
|
||||||
|
|
||||||
set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE)
|
set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE)
|
||||||
|
|
||||||
@ -173,6 +173,7 @@ endif()
|
|||||||
|
|
||||||
# src (decomp) {{{
|
# src (decomp) {{{
|
||||||
file(GLOB_RECURSE src__ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.c" "src/*.h")
|
file(GLOB_RECURSE src__ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.c" "src/*.h")
|
||||||
|
set_source_files_properties(${src__} PROPERTIES COMPILE_OPTIONS "${WARNING_OVERRIDE}")
|
||||||
|
|
||||||
list(APPEND src__ ${CMAKE_CURRENT_SOURCE_DIR}/Resource.rc)
|
list(APPEND src__ ${CMAKE_CURRENT_SOURCE_DIR}/Resource.rc)
|
||||||
list(FILTER src__ EXCLUDE REGEX "src/dmadata/*")
|
list(FILTER src__ EXCLUDE REGEX "src/dmadata/*")
|
||||||
@ -606,18 +607,22 @@ endif()
|
|||||||
################################################################################
|
################################################################################
|
||||||
# Pre build events
|
# Pre build events
|
||||||
################################################################################
|
################################################################################
|
||||||
|
if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
|
set(VS_COPY_ASSETS_CMD ${CMAKE_COMMAND} -E copy_directory_if_different $<TARGET_FILE_DIR:soh>/assets ${CMAKE_BINARY_DIR}/soh/assets)
|
||||||
|
endif()
|
||||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
|
if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
TARGET ${PROJECT_NAME}
|
TARGET ${PROJECT_NAME}
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMENT "Copying asset xmls..."
|
COMMENT "Copying asset xmls..."
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/soh/assets/extractor $<TARGET_FILE_DIR:soh>/assets/extractor
|
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/extractor $<TARGET_FILE_DIR:soh>/assets/extractor
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/soh/assets/xml $<TARGET_FILE_DIR:soh>/assets/extractor/xmls
|
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/xml $<TARGET_FILE_DIR:soh>/assets/extractor/xmls
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists $<TARGET_FILE_DIR:soh>/assets/extractor/filelists
|
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/filelists $<TARGET_FILE_DIR:soh>/assets/extractor/filelists
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ActorList_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/ObjectList_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/OTRExporter/CFG/SymbolMap_OoTMqDbg.txt $<TARGET_FILE_DIR:soh>/assets/extractor/symbols
|
||||||
|
COMMAND ${VS_COPY_ASSETS_CMD}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
################################################################################
|
################################################################################
|
||||||
|
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotBaseNoise_8
Normal file
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotBaseNoise_8
Normal file
Binary file not shown.
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFaceNoise_16
Normal file
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFaceNoise_16
Normal file
Binary file not shown.
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFaceYellow_16
Normal file
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFaceYellow_16
Normal file
Binary file not shown.
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFace_32
Normal file
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFace_32
Normal file
Binary file not shown.
19
soh/assets/custom/objects/gameplay_dangeon_keep/gRandoPotDL
Normal file
19
soh/assets/custom/objects/gameplay_dangeon_keep/gRandoPotDL
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potrim"/>
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_0"/>
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potface"/>
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_1"/>
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potbase"/>
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_2"/>
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potbottom"/>
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_3"/>
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/mat_gRandoPotDL_f3dlite_potvoid"/>
|
||||||
|
<CallDisplayList Path="objects/gameplay_dangeon_keep/gRandoPotDL_tri_4"/>
|
||||||
|
<PipeSync/>
|
||||||
|
<SetGeometryMode G_LIGHTING="1" />
|
||||||
|
<ClearGeometryMode G_TEXTURE_GEN="1" />
|
||||||
|
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_ENVIRONMENT" A1="G_CCMUX_0" B1="G_CCMUX_0" C1="G_CCMUX_0" D1="G_CCMUX_SHADE" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_ENVIRONMENT"/>
|
||||||
|
<Texture S="65535" T="65535" Level="0" Tile="0" On="0"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,69 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||||
|
<Triangle1 V00="3" V01="2" V02="4"/>
|
||||||
|
<Triangle1 V00="3" V01="4" V02="5"/>
|
||||||
|
<Triangle1 V00="5" V01="4" V02="6"/>
|
||||||
|
<Triangle1 V00="5" V01="6" V02="7"/>
|
||||||
|
<Triangle1 V00="8" V01="7" V02="6"/>
|
||||||
|
<Triangle1 V00="8" V01="9" V02="7"/>
|
||||||
|
<Triangle1 V00="9" V01="8" V02="10"/>
|
||||||
|
<Triangle1 V00="9" V01="10" V02="11"/>
|
||||||
|
<Triangle1 V00="12" V01="13" V02="14"/>
|
||||||
|
<Triangle1 V00="12" V01="14" V02="15"/>
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_0" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||||
|
<Triangle1 V00="3" V01="2" V02="4"/>
|
||||||
|
<Triangle1 V00="3" V01="4" V02="5"/>
|
||||||
|
<Triangle1 V00="6" V01="5" V02="4"/>
|
||||||
|
<Triangle1 V00="6" V01="7" V02="5"/>
|
||||||
|
<Triangle1 V00="7" V01="6" V02="8"/>
|
||||||
|
<Triangle1 V00="7" V01="8" V02="9"/>
|
||||||
|
<Triangle1 V00="10" V01="11" V02="12"/>
|
||||||
|
<Triangle1 V00="10" V01="12" V02="13"/>
|
||||||
|
<Triangle1 V00="13" V01="12" V02="14"/>
|
||||||
|
<Triangle1 V00="13" V01="14" V02="15"/>
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_0" VertexBufferIndex="0" VertexOffset="32" Count="16"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||||
|
<Triangle1 V00="4" V01="3" V02="2"/>
|
||||||
|
<Triangle1 V00="4" V01="5" V02="3"/>
|
||||||
|
<Triangle1 V00="5" V01="4" V02="6"/>
|
||||||
|
<Triangle1 V00="5" V01="6" V02="7"/>
|
||||||
|
<Triangle1 V00="8" V01="9" V02="10"/>
|
||||||
|
<Triangle1 V00="8" V01="10" V02="11"/>
|
||||||
|
<Triangle1 V00="11" V01="10" V02="12"/>
|
||||||
|
<Triangle1 V00="11" V01="12" V02="13"/>
|
||||||
|
<Triangle1 V00="13" V01="12" V02="14"/>
|
||||||
|
<Triangle1 V00="13" V01="14" V02="15"/>
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_0" VertexBufferIndex="0" VertexOffset="48" Count="16"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||||
|
<Triangle1 V00="3" V01="0" V02="4"/>
|
||||||
|
<Triangle1 V00="3" V01="4" V02="5"/>
|
||||||
|
<Triangle1 V00="6" V01="7" V02="8"/>
|
||||||
|
<Triangle1 V00="6" V01="8" V02="9"/>
|
||||||
|
<Triangle1 V00="9" V01="8" V02="10"/>
|
||||||
|
<Triangle1 V00="9" V01="10" V02="11"/>
|
||||||
|
<Triangle1 V00="11" V01="10" V02="12"/>
|
||||||
|
<Triangle1 V00="11" V01="12" V02="13"/>
|
||||||
|
<Triangle1 V00="14" V01="13" V02="12"/>
|
||||||
|
<Triangle1 V00="14" V01="15" V02="13"/>
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_0" VertexBufferIndex="0" VertexOffset="64" Count="16"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||||
|
<Triangle1 V00="4" V01="5" V02="6"/>
|
||||||
|
<Triangle1 V00="4" V01="6" V02="7"/>
|
||||||
|
<Triangle1 V00="7" V01="6" V02="8"/>
|
||||||
|
<Triangle1 V00="7" V01="8" V02="9"/>
|
||||||
|
<Triangle1 V00="9" V01="8" V02="10"/>
|
||||||
|
<Triangle1 V00="9" V01="10" V02="11"/>
|
||||||
|
<Triangle1 V00="12" V01="11" V02="10"/>
|
||||||
|
<Triangle1 V00="12" V01="13" V02="11"/>
|
||||||
|
<Triangle1 V00="13" V01="12" V02="14"/>
|
||||||
|
<Triangle1 V00="13" V01="14" V02="15"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||||
|
<Triangle1 V00="3" V01="4" V02="1"/>
|
||||||
|
<Triangle1 V00="3" V01="5" V02="4"/>
|
||||||
|
<Triangle1 V00="6" V01="7" V02="8"/>
|
||||||
|
<Triangle1 V00="6" V01="8" V02="9"/>
|
||||||
|
<Triangle1 V00="10" V01="9" V02="8"/>
|
||||||
|
<Triangle1 V00="10" V01="8" V02="11"/>
|
||||||
|
<Triangle1 V00="12" V01="13" V02="14"/>
|
||||||
|
<Triangle1 V00="12" V01="15" V02="13"/>
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_1" VertexBufferIndex="0" VertexOffset="16" Count="16"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="3" V02="1"/>
|
||||||
|
<Triangle1 V00="4" V01="5" V02="6"/>
|
||||||
|
<Triangle1 V00="4" V01="6" V02="7"/>
|
||||||
|
<Triangle1 V00="8" V01="7" V02="6"/>
|
||||||
|
<Triangle1 V00="8" V01="6" V02="9"/>
|
||||||
|
<Triangle1 V00="10" V01="11" V02="12"/>
|
||||||
|
<Triangle1 V00="10" V01="12" V02="13"/>
|
||||||
|
<Triangle1 V00="14" V01="13" V02="12"/>
|
||||||
|
<Triangle1 V00="14" V01="12" V02="15"/>
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_1" VertexBufferIndex="0" VertexOffset="32" Count="6"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||||
|
<Triangle1 V00="4" V01="0" V02="3"/>
|
||||||
|
<Triangle1 V00="4" V01="3" V02="5"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,18 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_2" VertexBufferIndex="0" VertexOffset="0" Count="16"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||||
|
<Triangle1 V00="4" V01="5" V02="6"/>
|
||||||
|
<Triangle1 V00="4" V01="6" V02="7"/>
|
||||||
|
<Triangle1 V00="8" V01="9" V02="10"/>
|
||||||
|
<Triangle1 V00="8" V01="10" V02="11"/>
|
||||||
|
<Triangle1 V00="12" V01="13" V02="14"/>
|
||||||
|
<Triangle1 V00="12" V01="14" V02="15"/>
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_2" VertexBufferIndex="0" VertexOffset="16" Count="8"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||||
|
<Triangle1 V00="4" V01="5" V02="6"/>
|
||||||
|
<Triangle1 V00="4" V01="6" V02="7"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,9 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_3" VertexBufferIndex="0" VertexOffset="0" Count="8"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||||
|
<Triangle1 V00="4" V01="5" V02="6"/>
|
||||||
|
<Triangle1 V00="4" V01="6" V02="7"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,9 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<LoadVertices Path="objects/gameplay_dangeon_keep/gRandoPotDL_vtx_4" VertexBufferIndex="0" VertexOffset="0" Count="8"/>
|
||||||
|
<Triangle1 V00="0" V01="1" V02="2"/>
|
||||||
|
<Triangle1 V00="0" V01="2" V02="3"/>
|
||||||
|
<Triangle1 V00="4" V01="5" V02="6"/>
|
||||||
|
<Triangle1 V00="4" V01="6" V02="7"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,82 @@
|
|||||||
|
<Vertex Version="0">
|
||||||
|
<Vtx X="-35" Y="133" Z="-20" S="546" T="573" R="159" G="61" B="200" A="255"/>
|
||||||
|
<Vtx X="-35" Y="133" Z="20" S="305" T="573" R="159" G="61" B="56" A="255"/>
|
||||||
|
<Vtx X="-35" Y="146" Z="20" S="305" T="654" R="196" G="149" B="34" A="255"/>
|
||||||
|
<Vtx X="-35" Y="146" Z="-20" S="546" T="654" R="196" G="149" B="222" A="255"/>
|
||||||
|
<Vtx X="-43" Y="146" Z="25" S="278" T="699" R="169" G="178" B="50" A="255"/>
|
||||||
|
<Vtx X="-43" Y="146" Z="-25" S="572" T="699" R="169" G="178" B="206" A="255"/>
|
||||||
|
<Vtx X="-43" Y="160" Z="25" S="278" T="778" R="169" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="-43" Y="160" Z="-25" S="572" T="778" R="169" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="-29" Y="160" Z="17" S="325" T="858" R="60" G="107" B="222" A="255"/>
|
||||||
|
<Vtx X="-29" Y="160" Z="-17" S="526" T="858" R="60" G="107" B="34" A="255"/>
|
||||||
|
<Vtx X="-29" Y="134" Z="17" S="325" T="1008" R="87" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="-29" Y="134" Z="-17" S="526" T="1008" R="87" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="-35" Y="133" Z="20" S="10" T="1008" R="159" G="61" B="56" A="255"/>
|
||||||
|
<Vtx X="0" Y="133" Z="41" S="252" T="1008" R="0" G="61" B="112" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="41" S="252" T="927" R="0" G="149" B="69" A="255"/>
|
||||||
|
<Vtx X="-35" Y="146" Z="20" S="10" T="927" R="196" G="149" B="34" A="255"/>
|
||||||
|
<Vtx X="-35" Y="146" Z="20" S="10" T="927" R="196" G="149" B="34" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="41" S="252" T="927" R="0" G="149" B="69" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="49" S="278" T="882" R="0" G="178" B="101" A="255"/>
|
||||||
|
<Vtx X="-43" Y="146" Z="25" S="-16" T="882" R="169" G="178" B="50" A="255"/>
|
||||||
|
<Vtx X="0" Y="160" Z="49" S="278" T="803" R="0" G="78" B="101" A="255"/>
|
||||||
|
<Vtx X="-43" Y="160" Z="25" S="-16" T="803" R="169" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="0" Y="160" Z="34" S="232" T="723" R="0" G="107" B="187" A="255"/>
|
||||||
|
<Vtx X="-29" Y="160" Z="17" S="30" T="723" R="60" G="107" B="222" A="255"/>
|
||||||
|
<Vtx X="0" Y="134" Z="34" S="232" T="573" R="0" G="78" B="155" A="255"/>
|
||||||
|
<Vtx X="-29" Y="134" Z="17" S="30" T="573" R="87" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="0" Y="133" Z="-41" S="573" T="740" R="0" G="61" B="144" A="255"/>
|
||||||
|
<Vtx X="-35" Y="133" Z="-20" S="573" T="982" R="159" G="61" B="200" A="255"/>
|
||||||
|
<Vtx X="-35" Y="146" Z="-20" S="654" T="982" R="196" G="149" B="222" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="-41" S="654" T="740" R="0" G="149" B="187" A="255"/>
|
||||||
|
<Vtx X="-43" Y="146" Z="-25" S="699" T="1008" R="169" G="178" B="206" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="-49" S="699" T="714" R="0" G="178" B="155" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="-49" S="699" T="714" R="0" G="178" B="155" A="255"/>
|
||||||
|
<Vtx X="-43" Y="146" Z="-25" S="699" T="1008" R="169" G="178" B="206" A="255"/>
|
||||||
|
<Vtx X="-43" Y="160" Z="-25" S="778" T="1008" R="169" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="0" Y="160" Z="-49" S="778" T="714" R="0" G="78" B="155" A="255"/>
|
||||||
|
<Vtx X="-29" Y="160" Z="-17" S="858" T="962" R="60" G="107" B="34" A="255"/>
|
||||||
|
<Vtx X="0" Y="160" Z="-34" S="858" T="760" R="0" G="107" B="69" A="255"/>
|
||||||
|
<Vtx X="-29" Y="134" Z="-17" S="1008" T="962" R="87" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="0" Y="134" Z="-34" S="1008" T="760" R="0" G="78" B="101" A="255"/>
|
||||||
|
<Vtx X="35" Y="133" Z="20" S="687" T="137" R="97" G="61" B="56" A="255"/>
|
||||||
|
<Vtx X="35" Y="133" Z="-20" S="446" T="137" R="97" G="61" B="200" A="255"/>
|
||||||
|
<Vtx X="35" Y="146" Z="-20" S="446" T="218" R="60" G="149" B="222" A="255"/>
|
||||||
|
<Vtx X="35" Y="146" Z="20" S="687" T="218" R="60" G="149" B="34" A="255"/>
|
||||||
|
<Vtx X="43" Y="146" Z="-25" S="420" T="263" R="87" G="178" B="206" A="255"/>
|
||||||
|
<Vtx X="43" Y="146" Z="25" S="714" T="263" R="87" G="178" B="50" A="255"/>
|
||||||
|
<Vtx X="43" Y="160" Z="-25" S="420" T="342" R="87" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="43" Y="160" Z="25" S="714" T="342" R="87" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="29" Y="160" Z="-17" S="466" T="422" R="196" G="107" B="34" A="255"/>
|
||||||
|
<Vtx X="43" Y="160" Z="25" S="714" T="342" R="87" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="43" Y="160" Z="-25" S="420" T="342" R="87" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="29" Y="160" Z="17" S="667" T="422" R="196" G="107" B="222" A="255"/>
|
||||||
|
<Vtx X="29" Y="134" Z="-17" S="466" T="572" R="169" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="29" Y="134" Z="17" S="667" T="572" R="169" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="35" Y="133" Z="-20" S="-16" T="305" R="97" G="61" B="200" A="255"/>
|
||||||
|
<Vtx X="0" Y="133" Z="-41" S="-16" T="546" R="0" G="61" B="144" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="-41" S="65" T="546" R="0" G="149" B="187" A="255"/>
|
||||||
|
<Vtx X="35" Y="146" Z="-20" S="65" T="305" R="60" G="149" B="222" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="-49" S="110" T="572" R="0" G="178" B="155" A="255"/>
|
||||||
|
<Vtx X="43" Y="146" Z="-25" S="110" T="278" R="87" G="178" B="206" A="255"/>
|
||||||
|
<Vtx X="0" Y="160" Z="-49" S="189" T="572" R="0" G="78" B="155" A="255"/>
|
||||||
|
<Vtx X="43" Y="160" Z="-25" S="189" T="278" R="87" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="0" Y="160" Z="-34" S="269" T="526" R="0" G="107" B="69" A="255"/>
|
||||||
|
<Vtx X="29" Y="160" Z="-17" S="269" T="325" R="196" G="107" B="34" A="255"/>
|
||||||
|
<Vtx X="29" Y="160" Z="-17" S="269" T="325" R="196" G="107" B="34" A="255"/>
|
||||||
|
<Vtx X="0" Y="160" Z="-34" S="269" T="526" R="0" G="107" B="69" A="255"/>
|
||||||
|
<Vtx X="0" Y="134" Z="-34" S="419" T="526" R="0" G="78" B="101" A="255"/>
|
||||||
|
<Vtx X="29" Y="134" Z="-17" S="419" T="325" R="169" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="0" Y="133" Z="41" S="419" T="252" R="0" G="61" B="112" A="255"/>
|
||||||
|
<Vtx X="35" Y="133" Z="20" S="419" T="10" R="97" G="61" B="56" A="255"/>
|
||||||
|
<Vtx X="35" Y="146" Z="20" S="338" T="10" R="60" G="149" B="34" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="41" S="338" T="252" R="0" G="149" B="69" A="255"/>
|
||||||
|
<Vtx X="43" Y="146" Z="25" S="293" T="-16" R="87" G="178" B="50" A="255"/>
|
||||||
|
<Vtx X="0" Y="146" Z="49" S="293" T="278" R="0" G="178" B="101" A="255"/>
|
||||||
|
<Vtx X="43" Y="160" Z="25" S="214" T="-16" R="87" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="0" Y="160" Z="49" S="214" T="278" R="0" G="78" B="101" A="255"/>
|
||||||
|
<Vtx X="29" Y="160" Z="17" S="134" T="30" R="196" G="107" B="222" A="255"/>
|
||||||
|
<Vtx X="0" Y="160" Z="34" S="134" T="232" R="0" G="107" B="187" A="255"/>
|
||||||
|
<Vtx X="29" Y="134" Z="17" S="-16" T="30" R="169" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="0" Y="134" Z="34" S="-16" T="232" R="0" G="78" B="155" A="255"/>
|
||||||
|
</Vertex>
|
@ -0,0 +1,40 @@
|
|||||||
|
<Vertex Version="0">
|
||||||
|
<Vtx X="0" Y="43" Z="-82" S="1008" T="1008" R="0" G="220" B="134" A="255"/>
|
||||||
|
<Vtx X="71" Y="97" Z="-41" S="-16" T="368" R="102" G="47" B="197" A="255"/>
|
||||||
|
<Vtx X="71" Y="43" Z="-41" S="-16" T="1008" R="106" G="220" B="195" A="255"/>
|
||||||
|
<Vtx X="0" Y="97" Z="-82" S="1008" T="368" R="0" G="47" B="138" A="255"/>
|
||||||
|
<Vtx X="35" Y="133" Z="-20" S="-16" T="-16" R="97" G="61" B="200" A="255"/>
|
||||||
|
<Vtx X="0" Y="133" Z="-41" S="1008" T="-16" R="0" G="61" B="144" A="255"/>
|
||||||
|
<Vtx X="0" Y="133" Z="41" S="1008" T="-16" R="0" G="61" B="112" A="255"/>
|
||||||
|
<Vtx X="-35" Y="133" Z="20" S="-16" T="-16" R="159" G="61" B="56" A="255"/>
|
||||||
|
<Vtx X="-71" Y="97" Z="41" S="-16" T="368" R="154" G="47" B="59" A="255"/>
|
||||||
|
<Vtx X="0" Y="97" Z="82" S="1008" T="368" R="0" G="47" B="118" A="255"/>
|
||||||
|
<Vtx X="0" Y="43" Z="82" S="1008" T="1008" R="0" G="220" B="122" A="255"/>
|
||||||
|
<Vtx X="-71" Y="43" Z="41" S="-16" T="1008" R="150" G="220" B="61" A="255"/>
|
||||||
|
<Vtx X="71" Y="43" Z="-41" S="1008" T="1008" R="106" G="220" B="195" A="255"/>
|
||||||
|
<Vtx X="71" Y="97" Z="41" S="-16" T="368" R="102" G="47" B="59" A="255"/>
|
||||||
|
<Vtx X="71" Y="43" Z="41" S="-16" T="1008" R="106" G="220" B="61" A="255"/>
|
||||||
|
<Vtx X="71" Y="97" Z="-41" S="1008" T="368" R="102" G="47" B="197" A="255"/>
|
||||||
|
<Vtx X="35" Y="133" Z="-20" S="1008" T="-16" R="97" G="61" B="200" A="255"/>
|
||||||
|
<Vtx X="71" Y="97" Z="41" S="-16" T="368" R="102" G="47" B="59" A="255"/>
|
||||||
|
<Vtx X="71" Y="97" Z="-41" S="1008" T="368" R="102" G="47" B="197" A="255"/>
|
||||||
|
<Vtx X="35" Y="133" Z="20" S="-16" T="-16" R="97" G="61" B="56" A="255"/>
|
||||||
|
<Vtx X="35" Y="133" Z="20" S="1008" T="-16" R="97" G="61" B="56" A="255"/>
|
||||||
|
<Vtx X="0" Y="133" Z="41" S="-16" T="-16" R="0" G="61" B="112" A="255"/>
|
||||||
|
<Vtx X="0" Y="97" Z="82" S="-16" T="368" R="0" G="47" B="118" A="255"/>
|
||||||
|
<Vtx X="71" Y="97" Z="41" S="1008" T="368" R="102" G="47" B="59" A="255"/>
|
||||||
|
<Vtx X="71" Y="43" Z="41" S="1008" T="1008" R="106" G="220" B="61" A="255"/>
|
||||||
|
<Vtx X="0" Y="43" Z="82" S="-16" T="1008" R="0" G="220" B="122" A="255"/>
|
||||||
|
<Vtx X="-35" Y="133" Z="20" S="1008" T="-16" R="159" G="61" B="56" A="255"/>
|
||||||
|
<Vtx X="-35" Y="133" Z="-20" S="-16" T="-16" R="159" G="61" B="200" A="255"/>
|
||||||
|
<Vtx X="-71" Y="97" Z="-41" S="-16" T="368" R="154" G="47" B="197" A="255"/>
|
||||||
|
<Vtx X="-71" Y="97" Z="41" S="1008" T="368" R="154" G="47" B="59" A="255"/>
|
||||||
|
<Vtx X="-71" Y="43" Z="41" S="1008" T="1008" R="150" G="220" B="61" A="255"/>
|
||||||
|
<Vtx X="-71" Y="43" Z="-41" S="-16" T="1008" R="150" G="220" B="195" A="255"/>
|
||||||
|
<Vtx X="-71" Y="97" Z="-41" S="1008" T="368" R="154" G="47" B="197" A="255"/>
|
||||||
|
<Vtx X="-35" Y="133" Z="-20" S="1008" T="-16" R="159" G="61" B="200" A="255"/>
|
||||||
|
<Vtx X="0" Y="133" Z="-41" S="-16" T="-16" R="0" G="61" B="144" A="255"/>
|
||||||
|
<Vtx X="0" Y="97" Z="-82" S="-16" T="368" R="0" G="47" B="138" A="255"/>
|
||||||
|
<Vtx X="-71" Y="43" Z="-41" S="1008" T="1008" R="150" G="220" B="195" A="255"/>
|
||||||
|
<Vtx X="0" Y="43" Z="-82" S="-16" T="1008" R="0" G="220" B="134" A="255"/>
|
||||||
|
</Vertex>
|
@ -0,0 +1,26 @@
|
|||||||
|
<Vertex Version="0">
|
||||||
|
<Vtx X="0" Y="0" Z="-51" S="240" T="240" R="0" G="150" B="185" A="255"/>
|
||||||
|
<Vtx X="0" Y="43" Z="-82" S="240" T="-16" R="0" G="220" B="134" A="255"/>
|
||||||
|
<Vtx X="71" Y="43" Z="-41" S="-16" T="-16" R="106" G="220" B="195" A="255"/>
|
||||||
|
<Vtx X="44" Y="0" Z="-25" S="-16" T="240" R="61" G="150" B="221" A="255"/>
|
||||||
|
<Vtx X="44" Y="0" Z="-25" S="240" T="240" R="61" G="150" B="221" A="255"/>
|
||||||
|
<Vtx X="71" Y="43" Z="-41" S="240" T="-16" R="106" G="220" B="195" A="255"/>
|
||||||
|
<Vtx X="71" Y="43" Z="41" S="-16" T="-16" R="106" G="220" B="61" A="255"/>
|
||||||
|
<Vtx X="44" Y="0" Z="25" S="-16" T="240" R="61" G="150" B="35" A="255"/>
|
||||||
|
<Vtx X="44" Y="0" Z="25" S="240" T="240" R="61" G="150" B="35" A="255"/>
|
||||||
|
<Vtx X="71" Y="43" Z="41" S="240" T="-16" R="106" G="220" B="61" A="255"/>
|
||||||
|
<Vtx X="0" Y="43" Z="82" S="-16" T="-16" R="0" G="220" B="122" A="255"/>
|
||||||
|
<Vtx X="0" Y="0" Z="51" S="-16" T="240" R="0" G="150" B="71" A="255"/>
|
||||||
|
<Vtx X="0" Y="0" Z="51" S="240" T="240" R="0" G="150" B="71" A="255"/>
|
||||||
|
<Vtx X="0" Y="43" Z="82" S="240" T="-16" R="0" G="220" B="122" A="255"/>
|
||||||
|
<Vtx X="-71" Y="43" Z="41" S="-16" T="-16" R="150" G="220" B="61" A="255"/>
|
||||||
|
<Vtx X="-44" Y="0" Z="25" S="-16" T="240" R="195" G="150" B="35" A="255"/>
|
||||||
|
<Vtx X="-44" Y="0" Z="25" S="240" T="240" R="195" G="150" B="35" A="255"/>
|
||||||
|
<Vtx X="-71" Y="43" Z="41" S="240" T="-16" R="150" G="220" B="61" A="255"/>
|
||||||
|
<Vtx X="-71" Y="43" Z="-41" S="-16" T="-16" R="150" G="220" B="195" A="255"/>
|
||||||
|
<Vtx X="-44" Y="0" Z="-25" S="-16" T="240" R="195" G="150" B="221" A="255"/>
|
||||||
|
<Vtx X="-44" Y="0" Z="-25" S="240" T="240" R="195" G="150" B="221" A="255"/>
|
||||||
|
<Vtx X="-71" Y="43" Z="-41" S="240" T="-16" R="150" G="220" B="195" A="255"/>
|
||||||
|
<Vtx X="0" Y="43" Z="-82" S="-16" T="-16" R="0" G="220" B="134" A="255"/>
|
||||||
|
<Vtx X="0" Y="0" Z="-51" S="-16" T="240" R="0" G="150" B="185" A="255"/>
|
||||||
|
</Vertex>
|
@ -0,0 +1,10 @@
|
|||||||
|
<Vertex Version="0">
|
||||||
|
<Vtx X="0" Y="0" Z="-51" S="357" T="900" R="0" G="150" B="185" A="255"/>
|
||||||
|
<Vtx X="44" Y="0" Z="-25" S="357" T="685" R="61" G="150" B="221" A="255"/>
|
||||||
|
<Vtx X="44" Y="0" Z="25" S="171" T="577" R="61" G="150" B="35" A="255"/>
|
||||||
|
<Vtx X="-44" Y="0" Z="-25" S="171" T="1008" R="195" G="150" B="221" A="255"/>
|
||||||
|
<Vtx X="0" Y="0" Z="51" S="-16" T="685" R="0" G="150" B="71" A="255"/>
|
||||||
|
<Vtx X="-44" Y="0" Z="25" S="-16" T="900" R="195" G="150" B="35" A="255"/>
|
||||||
|
<Vtx X="-44" Y="0" Z="-25" S="171" T="1008" R="195" G="150" B="221" A="255"/>
|
||||||
|
<Vtx X="44" Y="0" Z="25" S="171" T="577" R="61" G="150" B="35" A="255"/>
|
||||||
|
</Vertex>
|
@ -0,0 +1,10 @@
|
|||||||
|
<Vertex Version="0">
|
||||||
|
<Vtx X="29" Y="134" Z="-17" S="428" T="240" R="169" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="0" Y="134" Z="-34" S="428" T="752" R="0" G="78" B="101" A="255"/>
|
||||||
|
<Vtx X="-29" Y="134" Z="-17" S="871" T="1008" R="87" G="78" B="50" A="255"/>
|
||||||
|
<Vtx X="29" Y="134" Z="17" S="871" T="-16" R="169" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="-29" Y="134" Z="17" S="-16" T="240" R="87" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="0" Y="134" Z="34" S="-16" T="752" R="0" G="78" B="155" A="255"/>
|
||||||
|
<Vtx X="29" Y="134" Z="17" S="427" T="1008" R="169" G="78" B="206" A="255"/>
|
||||||
|
<Vtx X="-29" Y="134" Z="-17" S="427" T="-16" R="87" G="78" B="50" A="255"/>
|
||||||
|
</Vertex>
|
@ -0,0 +1,21 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<PipeSync/>
|
||||||
|
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_SHADE" D0="G_CCMUX_0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
|
||||||
|
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
|
||||||
|
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||||
|
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
|
||||||
|
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||||
|
<TileSync/>
|
||||||
|
<SetTextureImage Path="objects/gameplay_dangeon_keep/PotBaseNoise_8" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||||
|
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_MIRROR" MaskS="3" ShiftS="0" MaskT="3" ShiftT="0"/>
|
||||||
|
<LoadSync/>
|
||||||
|
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="63" Dxt="1024"/>
|
||||||
|
<PipeSync/>
|
||||||
|
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="2" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_MIRROR" MaskS="3" ShiftS="0" MaskT="3" ShiftT="0"/>
|
||||||
|
<SetTileSize T="0" Uls="0" Ult="0" Lrs="28" Lrt="28"/>
|
||||||
|
<SetPrimColor M="0" L="0" R="255" G="255" B="255" A="255"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,12 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<PipeSync/>
|
||||||
|
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
|
||||||
|
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
|
||||||
|
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||||
|
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
|
||||||
|
<SetPrimColor M="0" L="0" R="69" G="38" B="33" A="255"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,21 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<PipeSync/>
|
||||||
|
<SetCombineLERP A0="G_CCMUX_TEXEL0" B0="G_CCMUX_0" C0="G_CCMUX_SHADE" D0="G_CCMUX_0" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
|
||||||
|
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
|
||||||
|
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||||
|
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
|
||||||
|
<SetTextureLUT Mode="G_TT_NONE"/>
|
||||||
|
<TileSync/>
|
||||||
|
<SetTextureImage Path="objects/gameplay_dangeon_keep/PotFace_32" Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Width="1"/>
|
||||||
|
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b_LOAD_BLOCK" Line="0" TMem="0" Tile="7" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_MIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||||
|
<LoadSync/>
|
||||||
|
<LoadBlock Tile="7" Uls="0" Ult="0" Lrs="1023" Dxt="256"/>
|
||||||
|
<PipeSync/>
|
||||||
|
<SetTile Format="G_IM_FMT_RGBA" Size="G_IM_SIZ_16b" Line="8" TMem="0" Tile="0" Palette="0" Cms0="G_TX_WRAP" Cms1="G_TX_NOMIRROR" Cmt0="G_TX_WRAP" Cmt1="G_TX_MIRROR" MaskS="5" ShiftS="0" MaskT="5" ShiftT="0"/>
|
||||||
|
<SetTileSize T="0" Uls="0" Ult="0" Lrs="124" Lrt="124"/>
|
||||||
|
<SetPrimColor M="0" L="0" R="255" G="255" B="255" A="255"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,12 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<PipeSync/>
|
||||||
|
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
|
||||||
|
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
|
||||||
|
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||||
|
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
|
||||||
|
<SetPrimColor M="0" L="0" R="218" G="179" B="131" A="255"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
@ -0,0 +1,12 @@
|
|||||||
|
<DisplayList Version="0">
|
||||||
|
<PipeSync/>
|
||||||
|
<SetCombineLERP A0="G_CCMUX_0" B0="G_CCMUX_0" C0="G_CCMUX_0" D0="G_CCMUX_SHADE" Aa0="G_ACMUX_0" Ab0="G_ACMUX_0" Ac0="G_ACMUX_0" Ad0="G_ACMUX_1" A1="G_CCMUX_COMBINED" B1="G_CCMUX_0" C1="G_CCMUX_PRIMITIVE" D1="G_CCMUX_0" Aa1="G_ACMUX_0" Ab1="G_ACMUX_0" Ac1="G_ACMUX_0" Ad1="G_ACMUX_COMBINED"/>
|
||||||
|
<SetGeometryMode G_ZBUFFER="1" G_SHADE="1" G_CULL_BACK="1" G_FOG="1" G_LIGHTING="1" G_SHADING_SMOOTH="1" />
|
||||||
|
<ClearGeometryMode G_CULL_FRONT="1" G_TEXTURE_GEN="1" G_TEXTURE_GEN_LINEAR="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_H" Sft="4" Length="20" G_AD_NOISE="1" G_CD_MAGICSQ="1" G_CK_NONE="1" G_TC_FILT="1" G_TF_BILERP="1" G_TL_TILE="1" G_TD_CLAMP="1" G_TP_PERSP="1" G_CYC_2CYCLE="1" G_PM_NPRIMITIVE="1" />
|
||||||
|
<SetOtherMode Cmd="G_SETOTHERMODE_L" Sft="0" Length="32" G_AC_NONE="1" G_ZS_PIXEL="1" G_RM_FOG_SHADE_A="1" G_RM_AA_ZB_OPA_SURF2="1" />
|
||||||
|
<Texture S="65535" T="65535" Level="0" Tile="0" On="1"/>
|
||||||
|
<SetPrimColor M="0" L="0" R="0" G="0" B="0" A="255"/>
|
||||||
|
<EndDisplayList/>
|
||||||
|
</DisplayList>
|
||||||
|
|
BIN
soh/assets/custom/textures/parameter_static/gMoon.rgba32.png
Normal file
BIN
soh/assets/custom/textures/parameter_static/gMoon.rgba32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.0 KiB |
BIN
soh/assets/custom/textures/parameter_static/gNavi.rgba32.png
Normal file
BIN
soh/assets/custom/textures/parameter_static/gNavi.rgba32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.1 KiB |
BIN
soh/assets/custom/textures/parameter_static/gSun.rgba32.png
Normal file
BIN
soh/assets/custom/textures/parameter_static/gSun.rgba32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
@ -220,7 +220,7 @@ static const ALIGN_ASSET(2) char gLinkChildDL_18580[] = dgLinkChildDL_18580;
|
|||||||
static const ALIGN_ASSET(2) char gLinkChildBottle2DL[] = dgLinkChildBottle2DL;
|
static const ALIGN_ASSET(2) char gLinkChildBottle2DL[] = dgLinkChildBottle2DL;
|
||||||
|
|
||||||
#define dgLinkChildSlinghotStringDL "__OTR__objects/object_link_child/gLinkChildSlinghotStringDL"
|
#define dgLinkChildSlinghotStringDL "__OTR__objects/object_link_child/gLinkChildSlinghotStringDL"
|
||||||
static const ALIGN_ASSET(2) char gLinkChildSlinghotStringDL[] = dgLinkChildSlinghotStringDL;
|
static const ALIGN_ASSET(2) char gLinkChildSlingshotStringDL[] = dgLinkChildSlinghotStringDL;
|
||||||
|
|
||||||
#define dgLinkChildDekuShieldDL "__OTR__objects/object_link_child/gLinkChildDekuShieldDL"
|
#define dgLinkChildDekuShieldDL "__OTR__objects/object_link_child/gLinkChildDekuShieldDL"
|
||||||
static const ALIGN_ASSET(2) char gLinkChildDekuShieldDL[] = dgLinkChildDekuShieldDL;
|
static const ALIGN_ASSET(2) char gLinkChildDekuShieldDL[] = dgLinkChildDekuShieldDL;
|
||||||
|
@ -74,6 +74,9 @@ static const ALIGN_ASSET(2) char gTriforcePieceCompletedDL[] = dgTriforcePieceCo
|
|||||||
#define dgBossSoulSkullDL "__OTR__objects/object_boss_soul/gGIBossSoulSkullDL"
|
#define dgBossSoulSkullDL "__OTR__objects/object_boss_soul/gGIBossSoulSkullDL"
|
||||||
static const ALIGN_ASSET(2) char gBossSoulSkullDL[] = dgBossSoulSkullDL;
|
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 dgFishingPoleGiDL "__OTR__objects/object_gi_fishing_pole/gFishingPoleGiDL"
|
#define dgFishingPoleGiDL "__OTR__objects/object_gi_fishing_pole/gFishingPoleGiDL"
|
||||||
static const ALIGN_ASSET(2) char gFishingPoleGiDL[] = dgFishingPoleGiDL;
|
static const ALIGN_ASSET(2) char gFishingPoleGiDL[] = dgFishingPoleGiDL;
|
||||||
|
|
||||||
@ -106,6 +109,15 @@ static const ALIGN_ASSET(2) char gSplitEntranceTex[] = dgSplitEntrance;
|
|||||||
#define dgBossSoul "__OTR__textures/parameter_static/gBossSoul"
|
#define dgBossSoul "__OTR__textures/parameter_static/gBossSoul"
|
||||||
static const ALIGN_ASSET(2) char gBossSoulTex[] = dgBossSoul;
|
static const ALIGN_ASSET(2) char gBossSoulTex[] = dgBossSoul;
|
||||||
|
|
||||||
|
#define dgMoonIcon "__OTR__textures/parameter_static/gMoon"
|
||||||
|
static const ALIGN_ASSET(2) char gMoonIconTex[] = dgMoonIcon;
|
||||||
|
|
||||||
|
#define dgSunIcon "__OTR__textures/parameter_static/gSun"
|
||||||
|
static const ALIGN_ASSET(2) char gSunIconTex[] = dgSunIcon;
|
||||||
|
|
||||||
|
#define dgNaviIcon "__OTR__textures/parameter_static/gNavi"
|
||||||
|
static const ALIGN_ASSET(2) char gNaviIconTex[] = dgNaviIcon;
|
||||||
|
|
||||||
#define dgFileSelMQButtonTex "__OTR__textures/title_static/gFileSelMQButtonTex"
|
#define dgFileSelMQButtonTex "__OTR__textures/title_static/gFileSelMQButtonTex"
|
||||||
static const ALIGN_ASSET(2) char gFileSelMQButtonTex[] = dgFileSelMQButtonTex;
|
static const ALIGN_ASSET(2) char gFileSelMQButtonTex[] = dgFileSelMQButtonTex;
|
||||||
|
|
||||||
@ -150,3 +162,22 @@ static const ALIGN_ASSET(2) char gFileSelLanguageGERTex[] = dgFileSelLanguageGER
|
|||||||
|
|
||||||
#define dgEmptyTexture "__OTR__textures/virtual/gEmptyTexture"
|
#define dgEmptyTexture "__OTR__textures/virtual/gEmptyTexture"
|
||||||
static const ALIGN_ASSET(2) char gEmptyTexture[] = dgEmptyTexture;
|
static const ALIGN_ASSET(2) char gEmptyTexture[] = dgEmptyTexture;
|
||||||
|
|
||||||
|
// Custom Tunic Models
|
||||||
|
#define dgLinkChildKokiriTunicSkel "__OTR__objects/object_link_child_kokiri/gLinkChildKokiriTunicSkel"
|
||||||
|
static const ALIGN_ASSET(2) char gLinkChildKokiriTunicSkel[] = dgLinkChildKokiriTunicSkel;
|
||||||
|
|
||||||
|
#define dgLinkChildGoronTunicSkel "__OTR__objects/object_link_child_goron/gLinkChildGoronTunicSkel"
|
||||||
|
static const ALIGN_ASSET(2) char gLinkChildGoronTunicSkel[] = dgLinkChildGoronTunicSkel;
|
||||||
|
|
||||||
|
#define dgLinkChildZoraTunicSkel "__OTR__objects/object_link_child_zora/gLinkChildZoraTunicSkel"
|
||||||
|
static const ALIGN_ASSET(2) char gLinkChildZoraTunicSkel[] = dgLinkChildZoraTunicSkel;
|
||||||
|
|
||||||
|
#define dgLinkAdultKokiriTunicSkel "__OTR__objects/object_link_boy_kokiri/gLinkAdultKokiriTunicSkel"
|
||||||
|
static const ALIGN_ASSET(2) char gLinkAdultKokiriTunicSkel[] = dgLinkAdultKokiriTunicSkel;
|
||||||
|
|
||||||
|
#define dgLinkAdultGoronTunicSkel "__OTR__objects/object_link_boy_goron/gLinkAdultGoronTunicSkel"
|
||||||
|
static const ALIGN_ASSET(2) char gLinkAdultGoronTunicSkel[] = dgLinkAdultGoronTunicSkel;
|
||||||
|
|
||||||
|
#define dgLinkAdultZoraTunicSkel "__OTR__objects/object_link_boy_zora/gLinkAdultZoraTunicSkel"
|
||||||
|
static const ALIGN_ASSET(2) char gLinkAdultZoraTunicSkel[] = dgLinkAdultZoraTunicSkel;
|
||||||
|
BIN
soh/assets/sources/potshuffle/MysteryPot.blend
Normal file
BIN
soh/assets/sources/potshuffle/MysteryPot.blend
Normal file
Binary file not shown.
BIN
soh/assets/sources/potshuffle/PotBaseNoise_8.png
Normal file
BIN
soh/assets/sources/potshuffle/PotBaseNoise_8.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 283 B |
BIN
soh/assets/sources/potshuffle/PotFace_32.png
Normal file
BIN
soh/assets/sources/potshuffle/PotFace_32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
12
soh/include/attributes.h
Normal file
12
soh/include/attributes.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef ATTRIBUTES_H
|
||||||
|
#define ATTRIBUTES_H
|
||||||
|
|
||||||
|
#if !defined(__GNUC__) && !defined(__attribute__)
|
||||||
|
#define __attribute__(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define UNUSED __attribute__((unused))
|
||||||
|
#define FALLTHROUGH __attribute__((fallthrough))
|
||||||
|
#define NORETURN __attribute__((noreturn))
|
||||||
|
|
||||||
|
#endif
|
@ -398,12 +398,12 @@ void Actor_Kill(Actor* actor);
|
|||||||
void Actor_SetFocus(Actor* actor, f32 offset);
|
void Actor_SetFocus(Actor* actor, f32 offset);
|
||||||
void Actor_SetScale(Actor* actor, f32 scale);
|
void Actor_SetScale(Actor* actor, f32 scale);
|
||||||
void Actor_SetObjectDependency(PlayState* play, Actor* actor);
|
void Actor_SetObjectDependency(PlayState* play, Actor* actor);
|
||||||
void func_8002D7EC(Actor* actor);
|
void Actor_UpdatePos(Actor* actor);
|
||||||
void func_8002D868(Actor* actor);
|
void Actor_UpdateVelocityXZGravity(Actor* actor);
|
||||||
void Actor_MoveForward(Actor* actor);
|
void Actor_MoveXZGravity(Actor* actor);
|
||||||
void func_8002D908(Actor* actor);
|
void Actor_UpdateVelocityXYZ(Actor* actor);
|
||||||
void func_8002D97C(Actor* actor);
|
void Actor_MoveXYZ(Actor* actor);
|
||||||
void func_8002D9A4(Actor* actor, f32 arg1);
|
void Actor_SetProjectileSpeed(Actor* actor, f32 arg1);
|
||||||
s16 Actor_WorldYawTowardActor(Actor* actorA, Actor* actorB);
|
s16 Actor_WorldYawTowardActor(Actor* actorA, Actor* actorB);
|
||||||
s16 Actor_WorldYawTowardPoint(Actor* actor, Vec3f* refPoint);
|
s16 Actor_WorldYawTowardPoint(Actor* actor, Vec3f* refPoint);
|
||||||
f32 Actor_WorldDistXYZToActor(Actor* actorA, Actor* actorB);
|
f32 Actor_WorldDistXYZToActor(Actor* actorA, Actor* actorB);
|
||||||
@ -412,7 +412,7 @@ s16 Actor_WorldPitchTowardActor(Actor* actorA, Actor* actorB);
|
|||||||
s16 Actor_WorldPitchTowardPoint(Actor* actor, Vec3f* refPoint);
|
s16 Actor_WorldPitchTowardPoint(Actor* actor, Vec3f* refPoint);
|
||||||
f32 Actor_WorldDistXZToActor(Actor* actorA, Actor* actorB);
|
f32 Actor_WorldDistXZToActor(Actor* actorA, Actor* actorB);
|
||||||
f32 Actor_WorldDistXZToPoint(Actor* actor, Vec3f* refPoint);
|
f32 Actor_WorldDistXZToPoint(Actor* actor, Vec3f* refPoint);
|
||||||
void func_8002DBD0(Actor* actor, Vec3f* result, Vec3f* arg2);
|
void Actor_WorldToActorCoords(Actor* actor, Vec3f* result, Vec3f* arg2);
|
||||||
f32 Actor_HeightDiff(Actor* actorA, Actor* actorB);
|
f32 Actor_HeightDiff(Actor* actorA, Actor* actorB);
|
||||||
f32 Player_GetHeight(Player* player);
|
f32 Player_GetHeight(Player* player);
|
||||||
s32 Player_ActionHandler_2(Player* player, PlayState* play);
|
s32 Player_ActionHandler_2(Player* player, PlayState* play);
|
||||||
@ -455,13 +455,13 @@ u32 Actor_TextboxIsClosing(Actor* actor, PlayState* play);
|
|||||||
s8 func_8002F368(PlayState* play);
|
s8 func_8002F368(PlayState* play);
|
||||||
void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* x, s16* y);
|
void Actor_GetScreenPos(PlayState* play, Actor* actor, s16* x, s16* y);
|
||||||
u32 Actor_HasParent(Actor* actor, PlayState* play);
|
u32 Actor_HasParent(Actor* actor, PlayState* play);
|
||||||
// TODO: Rename the follwing 3 functions using whatever scheme we use when we rename Actor_OfferGetItem and func_8002F554.
|
// TODO: Rename the follwing 3 functions using whatever scheme we use when we rename Actor_OfferGetItem and Actor_OfferGetItemNearby.
|
||||||
s32 GiveItemEntryWithoutActor(PlayState* play, GetItemEntry getItemEntry);
|
s32 GiveItemEntryWithoutActor(PlayState* play, GetItemEntry getItemEntry);
|
||||||
s32 GiveItemEntryFromActor(Actor* actor, PlayState* play, GetItemEntry getItemEntry, f32 xzRange, f32 yRange);
|
s32 GiveItemEntryFromActor(Actor* actor, PlayState* play, GetItemEntry getItemEntry, f32 xzRange, f32 yRange);
|
||||||
s32 GiveItemEntryFromActorWithFixedRange(Actor* actor, PlayState* play, GetItemEntry getItemEntry);
|
s32 GiveItemEntryFromActorWithFixedRange(Actor* actor, PlayState* play, GetItemEntry getItemEntry);
|
||||||
s32 Actor_OfferGetItem(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 yRange);
|
s32 Actor_OfferGetItem(Actor* actor, PlayState* play, s32 getItemId, f32 xzRange, f32 yRange);
|
||||||
void func_8002F554(Actor* actor, PlayState* play, s32 getItemId);
|
void Actor_OfferGetItemNearby(Actor* actor, PlayState* play, s32 getItemId);
|
||||||
void func_8002F580(Actor* actor, PlayState* play);
|
void Actor_OfferCarry(Actor* actor, PlayState* play);
|
||||||
u32 Actor_HasNoParent(Actor* actor, PlayState* play);
|
u32 Actor_HasNoParent(Actor* actor, PlayState* play);
|
||||||
void func_8002F5C4(Actor* actorA, Actor* actorB, PlayState* play);
|
void func_8002F5C4(Actor* actorA, Actor* actorB, PlayState* play);
|
||||||
void func_8002F5F0(Actor* actor, PlayState* play);
|
void func_8002F5F0(Actor* actor, PlayState* play);
|
||||||
@ -537,7 +537,7 @@ void func_80034BA0(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overr
|
|||||||
PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
|
PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
|
||||||
void func_80034CC4(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw,
|
void func_80034CC4(PlayState* play, SkelAnime* skelAnime, OverrideLimbDraw overrideLimbDraw,
|
||||||
PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
|
PostLimbDraw postLimbDraw, Actor* actor, s16 alpha);
|
||||||
s16 func_80034DD4(Actor* actor, PlayState* play, s16 arg2, f32 arg3);
|
s16 Actor_UpdateAlphaByDistance(Actor* actor, PlayState* play, s16 arg2, f32 arg3);
|
||||||
void Animation_ChangeByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 index);
|
void Animation_ChangeByInfo(SkelAnime* skelAnime, AnimationInfo* animationInfo, s32 index);
|
||||||
void func_80034F54(PlayState* play, s16* arg1, s16* arg2, s32 arg3);
|
void func_80034F54(PlayState* play, s16* arg1, s16* arg2, s32 arg3);
|
||||||
void Actor_Noop(Actor* actor, PlayState* play);
|
void Actor_Noop(Actor* actor, PlayState* play);
|
||||||
@ -717,15 +717,15 @@ void BgCheck_DrawStaticCollision(PlayState*, CollisionContext*);
|
|||||||
void func_80043334(CollisionContext* colCtx, Actor* actor, s32 bgId);
|
void func_80043334(CollisionContext* colCtx, Actor* actor, s32 bgId);
|
||||||
s32 func_800433A4(CollisionContext* colCtx, s32 bgId, Actor* actor);
|
s32 func_800433A4(CollisionContext* colCtx, s32 bgId, Actor* actor);
|
||||||
void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 flags);
|
void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 flags);
|
||||||
void func_800434A0(DynaPolyActor* dynaActor);
|
void DynaPolyActor_UnsetAllInteractFlags(DynaPolyActor* dynaActor);
|
||||||
void func_800434A8(DynaPolyActor* dynaActor);
|
void DynaPolyActor_SetActorOnTop(DynaPolyActor* dynaActor);
|
||||||
void func_800434C8(CollisionContext* colCtx, s32 floorBgId);
|
void DynaPoly_SetPlayerOnTop(CollisionContext* colCtx, s32 floorBgId);
|
||||||
void func_80043508(CollisionContext* colCtx, s32 floorBgId);
|
void DynaPoly_SetPlayerAbove(CollisionContext* colCtx, s32 floorBgId);
|
||||||
void func_80043538(DynaPolyActor* dynaActor);
|
void DynaPolyActor_SetSwitchPressed(DynaPolyActor* dynaActor);
|
||||||
s32 func_80043548(DynaPolyActor* dynaActor);
|
s32 DynaPolyActor_IsActorOnTop(DynaPolyActor* dynaActor);
|
||||||
s32 func_8004356C(DynaPolyActor* dynaActor);
|
s32 DynaPolyActor_IsPlayerOnTop(DynaPolyActor* dynaActor);
|
||||||
s32 func_80043590(DynaPolyActor* dynaActor);
|
s32 DynaPolyActor_IsPlayerAbove(DynaPolyActor* dynaActor);
|
||||||
s32 func_800435B4(DynaPolyActor* dynaActor);
|
s32 DynaPolyActor_IsSwitchPressed(DynaPolyActor* dynaActor);
|
||||||
s32 func_800435D8(PlayState* play, DynaPolyActor* dynaActor, s16 arg2, s16 arg3, s16 arg4);
|
s32 func_800435D8(PlayState* play, DynaPolyActor* dynaActor, s16 arg2, s16 arg3, s16 arg4);
|
||||||
void Camera_Init(Camera* camera, View* view, CollisionContext* colCtx, PlayState* play);
|
void Camera_Init(Camera* camera, View* view, CollisionContext* colCtx, PlayState* play);
|
||||||
void Camera_InitPlayerSettings(Camera* camera, Player* player);
|
void Camera_InitPlayerSettings(Camera* camera, Player* player);
|
||||||
@ -980,9 +980,9 @@ f32 Math_SmoothStepToDegF(f32* pValue, f32 target, f32 fraction, f32 step, f32 m
|
|||||||
s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep);
|
s16 Math_SmoothStepToS(s16* pValue, s16 target, s16 scale, s16 step, s16 minStep);
|
||||||
void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 step);
|
void Math_ApproachS(s16* pValue, s16 target, s16 scale, s16 step);
|
||||||
void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src);
|
void Color_RGBA8_Copy(Color_RGBA8* dst, Color_RGBA8* src);
|
||||||
void func_80078884(u16 sfxId);
|
void Sfx_PlaySfxCentered(u16 sfxId);
|
||||||
void func_800788CC(u16 sfxId);
|
void Sfx_PlaySfxCentered2(u16 sfxId);
|
||||||
void func_80078914(Vec3f* arg0, u16 sfxId);
|
void Sfx_PlaySfxAtPos(Vec3f* arg0, u16 sfxId);
|
||||||
s16 getHealthMeterXOffset();
|
s16 getHealthMeterXOffset();
|
||||||
s16 getHealthMeterYOffset();
|
s16 getHealthMeterYOffset();
|
||||||
void HealthMeter_Init(PlayState* play);
|
void HealthMeter_Init(PlayState* play);
|
||||||
@ -1419,18 +1419,6 @@ void ViMode_Init(ViMode* viMode);
|
|||||||
void ViMode_Destroy(ViMode* viMode);
|
void ViMode_Destroy(ViMode* viMode);
|
||||||
void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures);
|
void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures);
|
||||||
void ViMode_Update(ViMode* viMode, Input* input);
|
void ViMode_Update(ViMode* viMode, Input* input);
|
||||||
void func_800ACE70(struct_801664F0* this);
|
|
||||||
void func_800ACE90(struct_801664F0* this);
|
|
||||||
void func_800ACE98(struct_801664F0* this, Gfx** gfxp);
|
|
||||||
void VisMono_Init(VisMono* this);
|
|
||||||
void VisMono_Destroy(VisMono* this);
|
|
||||||
void VisMono_UpdateTexture(VisMono* this, u16* tex);
|
|
||||||
Gfx* VisMono_DrawTexture(VisMono* this, Gfx* gfx);
|
|
||||||
void VisMono_Draw(VisMono* this, Gfx** gfxp);
|
|
||||||
void VisMono_DrawOld(VisMono* this);
|
|
||||||
void func_800AD920(struct_80166500* this);
|
|
||||||
void func_800AD950(struct_80166500* this);
|
|
||||||
void func_800AD958(struct_80166500* this, Gfx** gfxp);
|
|
||||||
void Skybox_Init(GameState* state, SkyboxContext* skyboxCtx, s16 skyboxId);
|
void Skybox_Init(GameState* state, SkyboxContext* skyboxCtx, s16 skyboxId);
|
||||||
Mtx* SkyboxDraw_UpdateMatrix(SkyboxContext* skyboxCtx, f32 x, f32 y, f32 z);
|
Mtx* SkyboxDraw_UpdateMatrix(SkyboxContext* skyboxCtx, f32 x, f32 y, f32 z);
|
||||||
void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z);
|
void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z);
|
||||||
@ -1536,9 +1524,9 @@ void KaleidoScopeCall_Init(PlayState* play);
|
|||||||
void KaleidoScopeCall_Destroy(PlayState* play);
|
void KaleidoScopeCall_Destroy(PlayState* play);
|
||||||
void KaleidoScopeCall_Update(PlayState* play);
|
void KaleidoScopeCall_Update(PlayState* play);
|
||||||
void KaleidoScopeCall_Draw(PlayState* play);
|
void KaleidoScopeCall_Draw(PlayState* play);
|
||||||
void func_800BC490(PlayState* play, s16 point);
|
void Play_SetViewpoint(PlayState* play, s16 viewpoint);
|
||||||
s32 func_800BC56C(PlayState* play, s16 arg1);
|
s32 Play_CheckViewpoint(PlayState* play, s16 viewpoint);
|
||||||
void func_800BC590(PlayState* play);
|
void Play_SetShopBrowsingViewpoint(PlayState* play);
|
||||||
void Gameplay_SetupTransition(PlayState* play, s32 arg1);
|
void Gameplay_SetupTransition(PlayState* play, s32 arg1);
|
||||||
Gfx* Play_SetFog(PlayState* play, Gfx* gfx);
|
Gfx* Play_SetFog(PlayState* play, Gfx* gfx);
|
||||||
void Play_Destroy(GameState* thisx);
|
void Play_Destroy(GameState* thisx);
|
||||||
@ -1552,7 +1540,7 @@ u8 CheckLACSRewardCount();
|
|||||||
s32 Play_InCsMode(PlayState* play);
|
s32 Play_InCsMode(PlayState* play);
|
||||||
f32 func_800BFCB8(PlayState* play, MtxF* mf, Vec3f* vec);
|
f32 func_800BFCB8(PlayState* play, MtxF* mf, Vec3f* vec);
|
||||||
void* Play_LoadFile(PlayState* play, RomFile* file);
|
void* Play_LoadFile(PlayState* play, RomFile* file);
|
||||||
void Play_SpawnScene(PlayState* play, s32 sceneNum, s32 spawn);
|
void Play_SpawnScene(PlayState* play, s32 sceneId, s32 spawn);
|
||||||
void func_800C016C(PlayState* play, Vec3f* src, Vec3f* dest);
|
void func_800C016C(PlayState* play, Vec3f* src, Vec3f* dest);
|
||||||
s16 Play_CreateSubCamera(PlayState* play);
|
s16 Play_CreateSubCamera(PlayState* play);
|
||||||
s16 Play_GetActiveCamId(PlayState* play);
|
s16 Play_GetActiveCamId(PlayState* play);
|
||||||
@ -2279,7 +2267,7 @@ void __osMallocInit(Arena* arena, void* start, size_t size);
|
|||||||
void __osMallocAddBlock(Arena* arena, void* start, ptrdiff_t size);
|
void __osMallocAddBlock(Arena* arena, void* start, ptrdiff_t size);
|
||||||
void ArenaImpl_RemoveAllBlocks(Arena* arena);
|
void ArenaImpl_RemoveAllBlocks(Arena* arena);
|
||||||
void __osMallocCleanup(Arena* arena);
|
void __osMallocCleanup(Arena* arena);
|
||||||
u8 __osMallocIsInitalized(Arena* arena);
|
s32 __osMallocIsInitialized(Arena* arena);
|
||||||
void __osMalloc_FreeBlockTest(Arena* arena, ArenaNode* node);
|
void __osMalloc_FreeBlockTest(Arena* arena, ArenaNode* node);
|
||||||
void* __osMalloc_NoLockDebug(Arena* arena, size_t size, const char* file, s32 line);
|
void* __osMalloc_NoLockDebug(Arena* arena, size_t size, const char* file, s32 line);
|
||||||
void* __osMallocDebug(Arena* arena, size_t size, const char* file, s32 line);
|
void* __osMallocDebug(Arena* arena, size_t size, const char* file, s32 line);
|
||||||
@ -2296,7 +2284,7 @@ void* __osReallocDebug(Arena* arena, void* ptr, size_t newSize, const char* file
|
|||||||
void ArenaImpl_GetSizes(Arena* arena, u32* outMaxFree, u32* outFree, u32* outAlloc);
|
void ArenaImpl_GetSizes(Arena* arena, u32* outMaxFree, u32* outFree, u32* outAlloc);
|
||||||
void __osDisplayArena(Arena* arena);
|
void __osDisplayArena(Arena* arena);
|
||||||
void ArenaImpl_FaultClient(Arena* arena);
|
void ArenaImpl_FaultClient(Arena* arena);
|
||||||
u32 __osCheckArena(Arena* arena);
|
s32 __osCheckArena(Arena* arena);
|
||||||
u8 func_800FF334(Arena* arena);
|
u8 func_800FF334(Arena* arena);
|
||||||
s32 PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args);
|
s32 PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args);
|
||||||
s32 PrintUtils_Printf(PrintCallback* pfn, const char* fmt, ...);
|
s32 PrintUtils_Printf(PrintCallback* pfn, const char* fmt, ...);
|
||||||
@ -2420,7 +2408,7 @@ OSThread* __osGetCurrFaultedThread(void);
|
|||||||
u32* osViGetCurrentFramebuffer(void);
|
u32* osViGetCurrentFramebuffer(void);
|
||||||
s32 __osSpSetPc(void* pc);
|
s32 __osSpSetPc(void* pc);
|
||||||
f32 absf(f32);
|
f32 absf(f32);
|
||||||
void* func_801068B0(void* dst, void* src, size_t size);
|
void* oot_memmove(void* dest, const void* src, size_t len);
|
||||||
void Message_UpdateOcarinaGame(PlayState* play);
|
void Message_UpdateOcarinaGame(PlayState* play);
|
||||||
u8 Message_ShouldAdvance(PlayState* play);
|
u8 Message_ShouldAdvance(PlayState* play);
|
||||||
u8 Message_ShouldAdvanceSilent(PlayState* play);
|
u8 Message_ShouldAdvanceSilent(PlayState* play);
|
||||||
|
9
soh/include/gfx.h
Normal file
9
soh/include/gfx.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#ifndef GFX_H
|
||||||
|
#define GFX_H
|
||||||
|
|
||||||
|
// Texture memory size, 4 KiB
|
||||||
|
#define TMEM_SIZE 0x1000
|
||||||
|
|
||||||
|
// Upstream TODO: Rest of this file
|
||||||
|
|
||||||
|
#endif
|
@ -8,7 +8,7 @@
|
|||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "variables.h"
|
#include "variables.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/cvar_prefixes.h"
|
||||||
#include "soh/Enhancements/gameconsole.h"
|
#include "soh/Enhancements/gameconsole.h"
|
||||||
#include "soh/Enhancements/gameplaystats.h"
|
#include "soh/Enhancements/gameplaystats.h"
|
||||||
#include <libultraship/bridge.h>
|
#include <libultraship/bridge.h>
|
||||||
|
@ -3,9 +3,15 @@
|
|||||||
|
|
||||||
#include <libultraship/libultra.h>
|
#include <libultraship/libultra.h>
|
||||||
|
|
||||||
|
#ifndef M_PI
|
||||||
#define M_PI 3.14159265358979323846f
|
#define M_PI 3.14159265358979323846f
|
||||||
|
#endif
|
||||||
|
#ifndef M_SQRT2
|
||||||
#define M_SQRT2 1.41421356237309504880f
|
#define M_SQRT2 1.41421356237309504880f
|
||||||
|
#endif
|
||||||
|
#ifndef FLT_MAX
|
||||||
#define FLT_MAX 340282346638528859811704183484516925440.0f
|
#define FLT_MAX 340282346638528859811704183484516925440.0f
|
||||||
|
#endif
|
||||||
#define SHT_MAX 32767.0f
|
#define SHT_MAX 32767.0f
|
||||||
#define SHT_MINV (1.0f / SHT_MAX)
|
#define SHT_MINV (1.0f / SHT_MAX)
|
||||||
#define DEGTORAD(x) (x * M_PI / 180.0f)
|
#define DEGTORAD(x) (x * M_PI / 180.0f)
|
||||||
|
@ -32,8 +32,12 @@
|
|||||||
//#define SEGMENTED_TO_VIRTUAL(addr) PHYSICAL_TO_VIRTUAL(gSegments[SEGMENT_NUMBER(addr)] + SEGMENT_OFFSET(addr))
|
//#define SEGMENTED_TO_VIRTUAL(addr) PHYSICAL_TO_VIRTUAL(gSegments[SEGMENT_NUMBER(addr)] + SEGMENT_OFFSET(addr))
|
||||||
#define SEGMENTED_TO_VIRTUAL(addr) addr
|
#define SEGMENTED_TO_VIRTUAL(addr) addr
|
||||||
|
|
||||||
|
#ifndef SQ
|
||||||
#define SQ(x) ((x)*(x))
|
#define SQ(x) ((x)*(x))
|
||||||
|
#endif
|
||||||
|
#ifndef ABS
|
||||||
#define ABS(x) ((x) >= 0 ? (x) : -(x))
|
#define ABS(x) ((x) >= 0 ? (x) : -(x))
|
||||||
|
#endif
|
||||||
#define DECR(x) ((x) == 0 ? 0 : --(x))
|
#define DECR(x) ((x) == 0 ? 0 : --(x))
|
||||||
#define CLAMP(x, min, max) ((x) < (min) ? (min) : (x) > (max) ? (max) : (x))
|
#define CLAMP(x, min, max) ((x) < (min) ? (min) : (x) > (max) ? (max) : (x))
|
||||||
#define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x))
|
#define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x))
|
||||||
@ -295,6 +299,10 @@ extern GraphicsContext* __gfxCtx;
|
|||||||
#define BGCHECK_POS_ERROR_CHECK(vec3f) BgCheck_PosErrorCheck(vec3f, __FILE__, __LINE__)
|
#define BGCHECK_POS_ERROR_CHECK(vec3f) BgCheck_PosErrorCheck(vec3f, __FILE__, __LINE__)
|
||||||
|
|
||||||
#define SEG_ADDR(seg, addr) (addr | (seg << 24) | 1)
|
#define SEG_ADDR(seg, addr) (addr | (seg << 24) | 1)
|
||||||
|
|
||||||
|
// Upstream TODO: Bring back decomp file/line macro use in src (but ignore the args for our needs)
|
||||||
|
#define SYSTEM_ARENA_MALLOC(size, file, line) SystemArena_MallocDebug(size, __FILE__, __LINE__)
|
||||||
|
#define SYSTEM_ARENA_FREE(ptr, file, line) SystemArena_FreeDebug(ptr, __FILE__, __LINE__)
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
#define DPAD_ITEM(button) ((gSaveContext.buttonStatus[(button) + 5] != BTN_DISABLED) \
|
#define DPAD_ITEM(button) ((gSaveContext.buttonStatus[(button) + 5] != BTN_DISABLED) \
|
||||||
@ -312,7 +320,7 @@ extern GraphicsContext* __gfxCtx;
|
|||||||
#define SPIRIT_TEMPLE_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_SPIRIT_TEMPLE) ? 7 : 5)
|
#define SPIRIT_TEMPLE_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_SPIRIT_TEMPLE) ? 7 : 5)
|
||||||
#define SHADOW_TEMPLE_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_SHADOW_TEMPLE) ? 6 : 5)
|
#define SHADOW_TEMPLE_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_SHADOW_TEMPLE) ? 6 : 5)
|
||||||
#define BOTTOM_OF_THE_WELL_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_BOTTOM_OF_THE_WELL) ? 2 : 3)
|
#define BOTTOM_OF_THE_WELL_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_BOTTOM_OF_THE_WELL) ? 2 : 3)
|
||||||
#define GERUDO_TRAINING_GROUNDS_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_GERUDO_TRAINING_GROUND) ? 3 : 9)
|
#define GERUDO_TRAINING_GROUND_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_GERUDO_TRAINING_GROUND) ? 3 : 9)
|
||||||
#define GERUDO_FORTRESS_SMALL_KEY_MAX 4
|
#define GERUDO_FORTRESS_SMALL_KEY_MAX 4
|
||||||
#define GANONS_CASTLE_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_INSIDE_GANONS_CASTLE) ? 3 : 2)
|
#define GANONS_CASTLE_SMALL_KEY_MAX (ResourceMgr_IsSceneMasterQuest(SCENE_INSIDE_GANONS_CASTLE) ? 3 : 2)
|
||||||
#define TREASURE_GAME_SMALL_KEY_MAX 6
|
#define TREASURE_GAME_SMALL_KEY_MAX 6
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -120,7 +120,7 @@ extern "C"
|
|||||||
extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[KALEIDO_OVL_MAX];
|
extern KaleidoMgrOverlay gKaleidoMgrOverlayTable[KALEIDO_OVL_MAX];
|
||||||
extern KaleidoMgrOverlay* gKaleidoMgrCurOvl;
|
extern KaleidoMgrOverlay* gKaleidoMgrCurOvl;
|
||||||
extern u8 gBossMarkState;
|
extern u8 gBossMarkState;
|
||||||
extern void* D_8012D1F0;
|
extern void* gDebugCutsceneScript;
|
||||||
extern s32 gScreenWidth;
|
extern s32 gScreenWidth;
|
||||||
extern s32 gScreenHeight;
|
extern s32 gScreenHeight;
|
||||||
extern Mtx gMtxClear;
|
extern Mtx gMtxClear;
|
||||||
@ -158,9 +158,9 @@ extern "C"
|
|||||||
extern char D_80133398[];
|
extern char D_80133398[];
|
||||||
extern SoundBankEntry* gSoundBanks[7];
|
extern SoundBankEntry* gSoundBanks[7];
|
||||||
extern u8 gSfxChannelLayout;
|
extern u8 gSfxChannelLayout;
|
||||||
extern Vec3f D_801333D4;
|
extern Vec3f gSfxDefaultPos;
|
||||||
extern f32 D_801333E0;
|
extern f32 gSfxDefaultFreqAndVolScale;
|
||||||
extern s8 D_801333E8;
|
extern s8 gSfxDefaultReverb;
|
||||||
extern u8 D_801333F0;
|
extern u8 D_801333F0;
|
||||||
extern u8 gAudioSfxSwapOff;
|
extern u8 gAudioSfxSwapOff;
|
||||||
extern u8 D_80133408;
|
extern u8 D_80133408;
|
||||||
@ -203,7 +203,7 @@ extern "C"
|
|||||||
extern f32 gBossMarkScale;
|
extern f32 gBossMarkScale;
|
||||||
extern PauseMapMarksData* gLoadedPauseMarkDataTable;
|
extern PauseMapMarksData* gLoadedPauseMarkDataTable;
|
||||||
extern s32 gTrnsnUnkState;
|
extern s32 gTrnsnUnkState;
|
||||||
extern Color_RGBA8_u32 D_801614B0;
|
extern Color_RGBA8_u32 gVisMonoColor;
|
||||||
extern PreNmiBuff* gAppNmiBufferPtr;
|
extern PreNmiBuff* gAppNmiBufferPtr;
|
||||||
extern SchedContext gSchedContext;
|
extern SchedContext gSchedContext;
|
||||||
extern PadMgr gPadMgr;
|
extern PadMgr gPadMgr;
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <libultraship/libultra.h>
|
#include <libultraship/libultra.h>
|
||||||
#include "unk.h" // this used to get pulled in via ultra64.h
|
#include "unk.h" // this used to get pulled in via ultra64.h
|
||||||
|
#include "attributes.h"
|
||||||
#include "z64save.h"
|
#include "z64save.h"
|
||||||
#include "z64light.h"
|
#include "z64light.h"
|
||||||
#include "z64bgcheck.h"
|
#include "z64bgcheck.h"
|
||||||
@ -24,12 +25,14 @@
|
|||||||
#include "z64skin.h"
|
#include "z64skin.h"
|
||||||
#include "z64transition.h"
|
#include "z64transition.h"
|
||||||
#include "z64interface.h"
|
#include "z64interface.h"
|
||||||
|
#include "z64vis.h"
|
||||||
#include "alignment.h"
|
#include "alignment.h"
|
||||||
#include "sequence.h"
|
#include "sequence.h"
|
||||||
#include "sfx.h"
|
#include "sfx.h"
|
||||||
#include <libultraship/color.h>
|
#include <libultraship/color.h>
|
||||||
#include "ichain.h"
|
#include "ichain.h"
|
||||||
#include "regs.h"
|
#include "regs.h"
|
||||||
|
#include "gfx.h"
|
||||||
|
|
||||||
#if defined(__LP64__)
|
#if defined(__LP64__)
|
||||||
#define _SOH64
|
#define _SOH64
|
||||||
@ -43,6 +46,8 @@ namespace LUS
|
|||||||
{
|
{
|
||||||
class IResource;
|
class IResource;
|
||||||
class Scene;
|
class Scene;
|
||||||
|
};
|
||||||
|
namespace Fast {
|
||||||
class DisplayList;
|
class DisplayList;
|
||||||
};
|
};
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -1592,6 +1597,9 @@ typedef struct {
|
|||||||
uint8_t bossRushOffset;
|
uint8_t bossRushOffset;
|
||||||
int16_t bossRushUIAlpha;
|
int16_t bossRushUIAlpha;
|
||||||
uint16_t bossRushArrowOffset;
|
uint16_t bossRushArrowOffset;
|
||||||
|
uint8_t randomizerIndex;
|
||||||
|
int16_t randomizerUIAlpha;
|
||||||
|
uint16_t randomizerArrowOffset;
|
||||||
} FileChooseContext; // size = 0x1CAE0
|
} FileChooseContext; // size = 0x1CAE0
|
||||||
|
|
||||||
// Macros for `EntranceInfo.field`
|
// Macros for `EntranceInfo.field`
|
||||||
@ -2041,7 +2049,7 @@ typedef struct ArenaNode {
|
|||||||
// /* 0x1C */ Arena* arena;
|
// /* 0x1C */ Arena* arena;
|
||||||
// /* 0x20 */ OSTime time;
|
// /* 0x20 */ OSTime time;
|
||||||
// /* 0x28 */ u8 unk_28[0x30-0x28]; // probably padding
|
// /* 0x28 */ u8 unk_28[0x30-0x28]; // probably padding
|
||||||
} ArenaNode; // size = 0x10
|
} ArenaNode; // size = 0x30
|
||||||
|
|
||||||
typedef struct OverlayRelocationSection {
|
typedef struct OverlayRelocationSection {
|
||||||
/* 0x00 */ u32 textSize;
|
/* 0x00 */ u32 textSize;
|
||||||
@ -2224,31 +2232,6 @@ typedef struct {
|
|||||||
/* 0x0084 */ u32 unk_84;
|
/* 0x0084 */ u32 unk_84;
|
||||||
} ViMode;
|
} ViMode;
|
||||||
|
|
||||||
// Vis...
|
|
||||||
typedef struct {
|
|
||||||
/* 0x00 */ u32 type;
|
|
||||||
/* 0x04 */ u32 setScissor;
|
|
||||||
/* 0x08 */ Color_RGBA8_u32 color;
|
|
||||||
/* 0x0C */ Color_RGBA8_u32 envColor;
|
|
||||||
} struct_801664F0; // size = 0x10
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
/* 0x00 */ u32 unk_00;
|
|
||||||
/* 0x04 */ u32 setScissor;
|
|
||||||
/* 0x08 */ Color_RGBA8_u32 primColor;
|
|
||||||
/* 0x0C */ Color_RGBA8_u32 envColor;
|
|
||||||
/* 0x10 */ u16* tlut;
|
|
||||||
/* 0x14 */ Gfx* monoDl;
|
|
||||||
} VisMono; // size = 0x18
|
|
||||||
|
|
||||||
// Vis...
|
|
||||||
typedef struct {
|
|
||||||
/* 0x00 */ u32 useRgba;
|
|
||||||
/* 0x04 */ u32 setScissor;
|
|
||||||
/* 0x08 */ Color_RGBA8_u32 primColor;
|
|
||||||
/* 0x08 */ Color_RGBA8_u32 envColor;
|
|
||||||
} struct_80166500; // size = 0x10
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* 0x000 */ u8 rumbleEnable[4];
|
/* 0x000 */ u8 rumbleEnable[4];
|
||||||
/* 0x004 */ u8 unk_04[0x40];
|
/* 0x004 */ u8 unk_04[0x40];
|
||||||
|
@ -214,6 +214,13 @@ if neither of the above are set : blue
|
|||||||
0x2000 : translucent, else opaque
|
0x2000 : translucent, else opaque
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define DYNA_INTERACT_ACTOR_ON_TOP (1 << 0) // There is an actor standing on the collision of the dynapoly actor
|
||||||
|
#define DYNA_INTERACT_PLAYER_ON_TOP (1 << 1) // The player actor is standing on the collision of the dynapoly actor
|
||||||
|
#define DYNA_INTERACT_PLAYER_ABOVE \
|
||||||
|
(1 << 2) // The player is directly above the collision of the dynapoly actor (any distance above)
|
||||||
|
#define DYNA_INTERACT_ACTOR_SWITCH_PRESSED \
|
||||||
|
(1 << 3) // An actor that is capable of pressing switches is on top of the dynapoly actor
|
||||||
|
|
||||||
typedef struct DynaPolyActor {
|
typedef struct DynaPolyActor {
|
||||||
/* 0x000 */ struct Actor actor;
|
/* 0x000 */ struct Actor actor;
|
||||||
/* 0x14C */ s32 bgId;
|
/* 0x14C */ s32 bgId;
|
||||||
@ -221,8 +228,8 @@ typedef struct DynaPolyActor {
|
|||||||
/* 0x154 */ f32 unk_154;
|
/* 0x154 */ f32 unk_154;
|
||||||
/* 0x158 */ s16 unk_158; // y rotation?
|
/* 0x158 */ s16 unk_158; // y rotation?
|
||||||
/* 0x15A */ u16 unk_15A;
|
/* 0x15A */ u16 unk_15A;
|
||||||
/* 0x15C */ u32 unk_15C;
|
/* 0x15C */ u32 transformFlags;
|
||||||
/* 0x160 */ u8 unk_160;
|
/* 0x160 */ u8 interactFlags;
|
||||||
/* 0x162 */ s16 unk_162;
|
/* 0x162 */ s16 unk_162;
|
||||||
} DynaPolyActor; // size = 0x164
|
} DynaPolyActor; // size = 0x164
|
||||||
|
|
||||||
@ -290,7 +297,6 @@ typedef struct EnItem00 {
|
|||||||
/* 0x15C */ f32 scale;
|
/* 0x15C */ f32 scale;
|
||||||
/* 0x160 */ ColliderCylinder collider;
|
/* 0x160 */ ColliderCylinder collider;
|
||||||
// #region SOH [Randomizer]
|
// #region SOH [Randomizer]
|
||||||
GetItemEntry randoGiEntry;
|
|
||||||
RandomizerCheck randoCheck;
|
RandomizerCheck randoCheck;
|
||||||
RandomizerInf randoInf;
|
RandomizerInf randoInf;
|
||||||
/* */ s16 ogParams;
|
/* */ s16 ogParams;
|
||||||
|
@ -284,7 +284,7 @@ typedef struct {
|
|||||||
// #endregion
|
// #endregion
|
||||||
// #region SOH [Randomizer]
|
// #region SOH [Randomizer]
|
||||||
// Upstream TODO: Move these to their own struct or name to more obviously specific to Randomizer
|
// Upstream TODO: Move these to their own struct or name to more obviously specific to Randomizer
|
||||||
/* */ u16 randomizerInf[17];
|
/* */ u16 randomizerInf[(RAND_INF_MAX + 15) / 16];
|
||||||
/* */ u8 mqDungeonCount;
|
/* */ u8 mqDungeonCount;
|
||||||
/* */ u16 adultTradeItems;
|
/* */ u16 adultTradeItems;
|
||||||
/* */ u8 triforcePiecesCollected;
|
/* */ u8 triforcePiecesCollected;
|
||||||
@ -361,7 +361,7 @@ typedef enum {
|
|||||||
/* 4 */ SCENE_LAYER_CUTSCENE_FIRST
|
/* 4 */ SCENE_LAYER_CUTSCENE_FIRST
|
||||||
} SceneLayer;
|
} SceneLayer;
|
||||||
|
|
||||||
#define IS_CUTSCENE_LAYER (gSaveContext.sceneLayer >= SCENE_LAYER_CUTSCENE_FIRST)
|
#define IS_CUTSCENE_LAYER (gSaveContext.sceneSetupIndex >= SCENE_LAYER_CUTSCENE_FIRST)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* 0 */ LINK_AGE_ADULT,
|
/* 0 */ LINK_AGE_ADULT,
|
||||||
@ -735,14 +735,14 @@ typedef enum {
|
|||||||
#define INFTABLE_12A 0x12A
|
#define INFTABLE_12A 0x12A
|
||||||
#define INFTABLE_138 0x138
|
#define INFTABLE_138 0x138
|
||||||
#define INFTABLE_139 0x139
|
#define INFTABLE_139 0x139
|
||||||
#define INFTABLE_140 0x140
|
#define INFTABLE_140 0x140 // Left her on blue switch in fork room (causes her to spawn in fork room)
|
||||||
#define INFTABLE_RUTO_IN_JJ_MEET_RUTO 0x141
|
#define INFTABLE_RUTO_IN_JJ_MEET_RUTO 0x141 // Jumped down hole from hole room
|
||||||
#define INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME 0x142
|
#define INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME 0x142 // in the basement
|
||||||
#define INFTABLE_143 0x143
|
#define INFTABLE_143 0x143 // Sat down in basement (causes her to get upset if this is set when actor is spawned)
|
||||||
#define INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE 0x144
|
#define INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE 0x144 // Entered the room with the sapphire
|
||||||
#define INFTABLE_145 0x145
|
#define INFTABLE_145 0x145 // Thrown to sapphire (not kidnapped yet)
|
||||||
#define INFTABLE_146 0x146
|
#define INFTABLE_146 0x146 // Kidnapped
|
||||||
#define INFTABLE_147 0x147
|
#define INFTABLE_147 0x147 // Brought ruto back up to holes room, causes her to spawn in holes room instead of basement
|
||||||
#define INFTABLE_160 0x160
|
#define INFTABLE_160 0x160
|
||||||
#define INFTABLE_161 0x161
|
#define INFTABLE_161 0x161
|
||||||
#define INFTABLE_162 0x162
|
#define INFTABLE_162 0x162
|
||||||
|
101
soh/include/z64vis.h
Normal file
101
soh/include/z64vis.h
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
#ifndef Z64_VIS_H
|
||||||
|
#define Z64_VIS_H
|
||||||
|
|
||||||
|
// #include "ultra64.h"
|
||||||
|
// #include "color.h"
|
||||||
|
#include <libultraship/libultra.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define this thisx
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum FramebufferFilterType {
|
||||||
|
/* 0 */ FB_FILTER_NONE,
|
||||||
|
/* 1 */ FB_FILTER_CVG_RGB,
|
||||||
|
/* 2 */ FB_FILTER_CVG_RGB_UNIFORM,
|
||||||
|
/* 3 */ FB_FILTER_CVG_ONLY,
|
||||||
|
/* 4 */ FB_FILTER_CVG_RGB_FOG, // Not recommended, easily overflows blender
|
||||||
|
/* 5 */ FB_FILTER_ZBUF_IA,
|
||||||
|
/* 6 */ FB_FILTER_ZBUF_RGBA,
|
||||||
|
/* 7 */ FB_FILTER_MONO
|
||||||
|
} FramebufferFilterType;
|
||||||
|
|
||||||
|
typedef enum VisScissorType {
|
||||||
|
/* 0 */ VIS_NO_SETSCISSOR,
|
||||||
|
/* 1 */ VIS_SETSCISSOR
|
||||||
|
} VisScissorType;
|
||||||
|
|
||||||
|
typedef struct Vis {
|
||||||
|
/* 0x00 */ u32 type;
|
||||||
|
/* 0x04 */ u32 scissorType;
|
||||||
|
/* 0x08 */ Color_RGBA8_u32 primColor;
|
||||||
|
/* 0x0C */ Color_RGBA8_u32 envColor;
|
||||||
|
} Vis; // size = 0x10
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Cvg: Coverage */
|
||||||
|
|
||||||
|
#define FB_FILTER_TO_CVG_TYPE(filter) (filter)
|
||||||
|
|
||||||
|
typedef enum VisCvgType {
|
||||||
|
/* 0 */ VIS_CVG_TYPE_NONE = FB_FILTER_TO_CVG_TYPE(FB_FILTER_NONE),
|
||||||
|
/* 1 */ VIS_CVG_TYPE_CVG_RGB = FB_FILTER_TO_CVG_TYPE(FB_FILTER_CVG_RGB),
|
||||||
|
/* 2 */ VIS_CVG_TYPE_CVG_RGB_UNIFORM = FB_FILTER_TO_CVG_TYPE(FB_FILTER_CVG_RGB_UNIFORM),
|
||||||
|
/* 3 */ VIS_CVG_TYPE_CVG_ONLY = FB_FILTER_TO_CVG_TYPE(FB_FILTER_CVG_ONLY),
|
||||||
|
/* 4 */ VIS_CVG_TYPE_CVG_RGB_FOG = FB_FILTER_TO_CVG_TYPE(FB_FILTER_CVG_RGB_FOG)
|
||||||
|
} VisCvgType;
|
||||||
|
|
||||||
|
typedef struct VisCvg {
|
||||||
|
/* 0x00 */ Vis vis;
|
||||||
|
} VisCvg; // size = 0x10
|
||||||
|
|
||||||
|
void VisCvg_Init(VisCvg* this);
|
||||||
|
void VisCvg_Destroy(VisCvg* this);
|
||||||
|
void VisCvg_Draw(VisCvg* this, Gfx** gfxP);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Mono: Desaturation */
|
||||||
|
|
||||||
|
// Only one type
|
||||||
|
|
||||||
|
typedef struct VisMono {
|
||||||
|
/* 0x00 */ Vis vis;
|
||||||
|
/* 0x10 */ u16* tlut;
|
||||||
|
/* 0x14 */ Gfx* dList;
|
||||||
|
} VisMono; // size = 0x18
|
||||||
|
|
||||||
|
void VisMono_Init(VisMono* this);
|
||||||
|
void VisMono_Destroy(VisMono* this);
|
||||||
|
void VisMono_Draw(VisMono* this, Gfx** gfxP);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ZBuf: Z-Buffer */
|
||||||
|
|
||||||
|
#define FB_FILTER_TO_ZBUF_TYPE(filter) ((filter) - FB_FILTER_ZBUF_IA)
|
||||||
|
|
||||||
|
typedef enum VisZBufType {
|
||||||
|
/* 0 */ VIS_ZBUF_TYPE_IA = FB_FILTER_TO_ZBUF_TYPE(FB_FILTER_ZBUF_IA),
|
||||||
|
/* 1 */ VIS_ZBUF_TYPE_RGBA = FB_FILTER_TO_ZBUF_TYPE(FB_FILTER_ZBUF_RGBA)
|
||||||
|
} VisZBufType;
|
||||||
|
|
||||||
|
typedef struct VisZBuf {
|
||||||
|
/* 0x00 */ Vis vis;
|
||||||
|
} VisZBuf; // size = 0x10
|
||||||
|
|
||||||
|
void VisZBuf_Init(VisZBuf* this);
|
||||||
|
void VisZBuf_Destroy(VisZBuf* this);
|
||||||
|
void VisZBuf_Draw(VisZBuf* this, Gfx** gfxP);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#undef this
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -453,7 +453,7 @@ static constexpr std::pair<u16, const char*> actorDescriptionData[] = {
|
|||||||
{ ACTOR_EN_KAKASI3, "Bonooru the Scarecrow" },
|
{ ACTOR_EN_KAKASI3, "Bonooru the Scarecrow" },
|
||||||
{ ACTOR_OCEFF_WIPE4, "Scarecrow's Song Ocarina Effect" },
|
{ ACTOR_OCEFF_WIPE4, "Scarecrow's Song Ocarina Effect" },
|
||||||
{ ACTOR_EN_EG, "Void-out Trigger (Tower Collapse)" },
|
{ ACTOR_EN_EG, "Void-out Trigger (Tower Collapse)" },
|
||||||
{ ACTOR_BG_MENKURI_NISEKABE, "False Stone Walls (Gerudo Training Grounds)" },
|
{ ACTOR_BG_MENKURI_NISEKABE, "False Stone Walls (Gerudo Training Ground)" },
|
||||||
{ ACTOR_EN_ZO, "Zora" },
|
{ ACTOR_EN_ZO, "Zora" },
|
||||||
{ ACTOR_OBJ_MAKEKINSUTA, "Skulltula Sprouting from Bean Spot" },
|
{ ACTOR_OBJ_MAKEKINSUTA, "Skulltula Sprouting from Bean Spot" },
|
||||||
{ ACTOR_EN_GE3, "Gerudo Fortress Leader" },
|
{ ACTOR_EN_GE3, "Gerudo Fortress Leader" },
|
||||||
|
26
soh/soh/Enhancements/Cheats/MoonJump.cpp
Normal file
26
soh/soh/Enhancements/Cheats/MoonJump.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#include <libultraship/bridge.h>
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "macros.h"
|
||||||
|
extern PlayState* gPlayState;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CVAR_MOON_JUMP_NAME "gCheats.MoonJumpOnL"
|
||||||
|
#define CVAR_MOON_JUMP_DEFAULT 0
|
||||||
|
#define CVAR_MOON_JUMP_VALUE CVarGetInteger(CVAR_MOON_JUMP_NAME, CVAR_MOON_JUMP_DEFAULT)
|
||||||
|
|
||||||
|
void OnPlayerUpdateMoonJump() {
|
||||||
|
Player* player = GET_PLAYER(gPlayState);
|
||||||
|
|
||||||
|
if (player != nullptr && CHECK_BTN_ANY(gPlayState->state.input[0].cur.button, BTN_L)) {
|
||||||
|
player->actor.velocity.y = 6.34375f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterMoonJump() {
|
||||||
|
COND_HOOK(OnPlayerUpdate, CVAR_MOON_JUMP_VALUE, OnPlayerUpdateMoonJump);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterMoonJump, { CVAR_MOON_JUMP_NAME });
|
69
soh/soh/Enhancements/FileSelectEnhancements.cpp
Normal file
69
soh/soh/Enhancements/FileSelectEnhancements.cpp
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
#include "FileSelectEnhancements.h"
|
||||||
|
|
||||||
|
#include "soh/OTRGlobals.h"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
std::array<std::string, LANGUAGE_MAX> RandomizerSettingsMenuText[RSM_MAX] = {
|
||||||
|
{
|
||||||
|
// English
|
||||||
|
"Start Randomizer",
|
||||||
|
// German
|
||||||
|
"Start Randomizer",
|
||||||
|
// French
|
||||||
|
"Start Randomizer",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// English
|
||||||
|
"Generate New Randomizer Seed",
|
||||||
|
// German
|
||||||
|
"Generate New Randomizer Seed",
|
||||||
|
// French
|
||||||
|
"Generate New Randomizer Seed",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// English
|
||||||
|
"Open Randomizer Settings",
|
||||||
|
// German
|
||||||
|
"Open Randomizer Settings",
|
||||||
|
// French
|
||||||
|
"Open Randomizer Settings",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// English
|
||||||
|
"Generating...",
|
||||||
|
// German
|
||||||
|
"Generating...",
|
||||||
|
// French
|
||||||
|
"Generating...",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// 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
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const char* SohFileSelect_GetSettingText(uint8_t optionIndex, uint8_t language) {
|
||||||
|
return RandomizerSettingsMenuText[optionIndex][language].c_str();
|
||||||
|
}
|
23
soh/soh/Enhancements/FileSelectEnhancements.h
Normal file
23
soh/soh/Enhancements/FileSelectEnhancements.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#ifndef FILE_SELECT_ENHANCEMENTS_H
|
||||||
|
#define FILE_SELECT_ENHANCEMENTS_H
|
||||||
|
|
||||||
|
#include "z64.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
const char* SohFileSelect_GetSettingText(u8 optionIndex, u8 language);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
RSM_START_RANDOMIZER,
|
||||||
|
RSM_GENERATE_RANDOMIZER,
|
||||||
|
RSM_OPEN_RANDOMIZER_SETTINGS,
|
||||||
|
RSM_GENERATING,
|
||||||
|
RSM_NO_RANDOMIZER_GENERATED,
|
||||||
|
RSM_MAX,
|
||||||
|
} RandomizerSettingsMenuEnums;
|
||||||
|
|
||||||
|
#endif
|
262
soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp
Normal file
262
soh/soh/Enhancements/TimeDisplay/TimeDisplay.cpp
Normal file
@ -0,0 +1,262 @@
|
|||||||
|
#include "TimeDisplay.h"
|
||||||
|
#include "soh/Enhancements/gameplaystats.h"
|
||||||
|
#include <global.h>
|
||||||
|
|
||||||
|
#include "assets/textures/parameter_static/parameter_static.h"
|
||||||
|
#include "assets/soh_assets.h"
|
||||||
|
#include "soh/ImGuiUtils.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "macros.h"
|
||||||
|
#include "functions.h"
|
||||||
|
#include "variables.h"
|
||||||
|
extern PlayState* gPlayState;
|
||||||
|
uint64_t GetUnixTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
|
float fontScale = 1.0f;
|
||||||
|
std::string timeDisplayTime = "";
|
||||||
|
ImTextureID textureDisplay = 0;
|
||||||
|
ImVec4 windowBG = ImVec4(0, 0, 0, 0.5f);
|
||||||
|
ImVec4 textColor = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
|
||||||
|
// ImVec4 Colors
|
||||||
|
#define COLOR_WHITE ImVec4(1.0f, 1.0f, 1.0f, 1.0f)
|
||||||
|
#define COLOR_LIGHT_RED ImVec4(1.0f, 0.05f, 0, 1.0f)
|
||||||
|
#define COLOR_LIGHT_BLUE ImVec4(0, 0.88f, 1.0f, 1.0f)
|
||||||
|
#define COLOR_LIGHT_GREEN ImVec4(0.52f, 1.0f, 0.23f, 1.0f)
|
||||||
|
#define COLOR_GREY ImVec4(0.78f, 0.78f, 0.78f, 1.0f)
|
||||||
|
|
||||||
|
const static std::vector<std::pair<std::string, const char*>> digitList = {
|
||||||
|
{ "DIGIT_0_TEXTURE", gCounterDigit0Tex }, { "DIGIT_1_TEXTURE", gCounterDigit1Tex },
|
||||||
|
{ "DIGIT_2_TEXTURE", gCounterDigit2Tex }, { "DIGIT_3_TEXTURE", gCounterDigit3Tex },
|
||||||
|
{ "DIGIT_4_TEXTURE", gCounterDigit4Tex }, { "DIGIT_5_TEXTURE", gCounterDigit5Tex },
|
||||||
|
{ "DIGIT_6_TEXTURE", gCounterDigit6Tex }, { "DIGIT_7_TEXTURE", gCounterDigit7Tex },
|
||||||
|
{ "DIGIT_8_TEXTURE", gCounterDigit8Tex }, { "DIGIT_9_TEXTURE", gCounterDigit9Tex },
|
||||||
|
{ "COLON_TEXTURE", gCounterColonTex },
|
||||||
|
};
|
||||||
|
|
||||||
|
const std::vector<TimeObject> 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") }
|
||||||
|
};
|
||||||
|
|
||||||
|
static std::vector<TimeObject> activeTimers;
|
||||||
|
|
||||||
|
std::string convertDayTime(uint32_t dayTime) {
|
||||||
|
uint32_t totalSeconds = 24 * 60 * 60;
|
||||||
|
uint32_t ss = static_cast<uint32_t>(static_cast<double>(dayTime) * (totalSeconds - 1) / 65535);
|
||||||
|
uint32_t hh = ss / 3600;
|
||||||
|
uint32_t mm = (ss % 3600) / 60;
|
||||||
|
return fmt::format("{:0>2}:{:0>2}", hh, mm);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string convertNaviTime(uint32_t value) {
|
||||||
|
uint32_t totalSeconds = value * 0.05;
|
||||||
|
uint32_t ss = totalSeconds % 60;
|
||||||
|
uint32_t mm = totalSeconds / 60;
|
||||||
|
return fmt::format("{:0>2}:{:0>2}", mm, ss);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string formatHotWaterDisplay(uint32_t value) {
|
||||||
|
uint32_t ss = value % 60;
|
||||||
|
uint32_t mm = value / 60;
|
||||||
|
return fmt::format("{:0>2}:{:0>2}", mm, ss);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string formatTimeDisplay(uint32_t value) {
|
||||||
|
uint32_t sec = value / 10;
|
||||||
|
uint32_t hh = sec / 3600;
|
||||||
|
uint32_t mm = (sec - hh * 3600) / 60;
|
||||||
|
uint32_t ss = sec - hh * 3600 - mm * 60;
|
||||||
|
uint32_t ds = value % 10;
|
||||||
|
return fmt::format("{}:{:0>2}:{:0>2}.{}", hh, mm, ss, ds);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void TimeDisplayGetTimer(uint32_t timeID) {
|
||||||
|
timeDisplayTime = "";
|
||||||
|
textureDisplay = 0;
|
||||||
|
textColor = COLOR_WHITE;
|
||||||
|
|
||||||
|
Player* player = GET_PLAYER(gPlayState);
|
||||||
|
uint32_t timer1 = gSaveContext.timer1Value;
|
||||||
|
|
||||||
|
switch (timeID) {
|
||||||
|
case DISPLAY_IN_GAME_TIMER:
|
||||||
|
textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("GAMEPLAY_TIMER");
|
||||||
|
timeDisplayTime = formatTimeDisplay(GAMEPLAYSTAT_TOTAL_TIME).c_str();
|
||||||
|
break;
|
||||||
|
case DISPLAY_TIME_OF_DAY:
|
||||||
|
if (gSaveContext.dayTime >= DAY_BEGINS && gSaveContext.dayTime < NIGHT_BEGINS) {
|
||||||
|
textureDisplay =
|
||||||
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("DAY_TIME_TIMER");
|
||||||
|
} else {
|
||||||
|
textureDisplay =
|
||||||
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("NIGHT_TIME_TIMER");
|
||||||
|
}
|
||||||
|
timeDisplayTime = convertDayTime(gSaveContext.dayTime).c_str();
|
||||||
|
break;
|
||||||
|
case DISPLAY_CONDITIONAL_TIMER:
|
||||||
|
if (gSaveContext.timer1State > 0) {
|
||||||
|
timeDisplayTime = formatHotWaterDisplay(gSaveContext.timer1Value).c_str();
|
||||||
|
textColor =
|
||||||
|
gSaveContext.timer1State <= 4
|
||||||
|
? (gPlayState->roomCtx.curRoom.behaviorType2 == ROOM_BEHAVIOR_TYPE2_3 ? COLOR_LIGHT_RED
|
||||||
|
: COLOR_LIGHT_BLUE)
|
||||||
|
: COLOR_WHITE;
|
||||||
|
if (gSaveContext.timer1State <= 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) {
|
||||||
|
textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(
|
||||||
|
itemMapping[ITEM_SWORD_MASTER].name);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(
|
||||||
|
itemMapping[ITEM_TUNIC_KOKIRI].name);
|
||||||
|
timeDisplayTime = "-:--";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DISPLAY_NAVI_TIMER:
|
||||||
|
if (gSaveContext.naviTimer <= NAVI_PREPARE) {
|
||||||
|
timeDisplayTime = convertNaviTime(NAVI_PREPARE - gSaveContext.naviTimer).c_str();
|
||||||
|
} else if (gSaveContext.naviTimer <= NAVI_ACTIVE) {
|
||||||
|
timeDisplayTime = convertNaviTime(NAVI_ACTIVE - gSaveContext.naviTimer).c_str();
|
||||||
|
textColor = COLOR_LIGHT_GREEN;
|
||||||
|
} else {
|
||||||
|
timeDisplayTime = convertNaviTime(NAVI_COOLDOWN - gSaveContext.naviTimer).c_str();
|
||||||
|
textColor = COLOR_GREY;
|
||||||
|
}
|
||||||
|
textureDisplay = Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName("NAVI_TIMER");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TimeDisplayUpdateDisplayOptions() {
|
||||||
|
activeTimers.clear();
|
||||||
|
for (auto& timer : timeDisplayList) {
|
||||||
|
if (CVarGetInteger(timer.timeEnable, 0)) {
|
||||||
|
activeTimers.push_back(timer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//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() {
|
||||||
|
if (!gPlayState) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!CVarGetInteger(CVAR_WINDOW("TimeDisplayEnabled"), 0)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_WindowBg, windowBG);
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0, 0, 0, 0));
|
||||||
|
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);
|
||||||
|
ImGui::SetWindowFontScale(fontScale);
|
||||||
|
if (activeTimers.size() == 0) {
|
||||||
|
ImGui::Text("No Enabled Timers...");
|
||||||
|
} else {
|
||||||
|
ImGui::BeginTable("Timer List", 2, ImGuiTableFlags_NoClip);
|
||||||
|
for (auto& timers : activeTimers) {
|
||||||
|
ImGui::PushID(timers.timeID);
|
||||||
|
TimeDisplayGetTimer(timers.timeID);
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
ImGui::Image(textureDisplay, ImVec2(16.0f * fontScale, 16.0f * fontScale));
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
|
||||||
|
if (timeDisplayTime != "-:--") {
|
||||||
|
char* textToDecode = new char[timeDisplayTime.size() + 1];
|
||||||
|
textToDecode = std::strcpy(textToDecode, timeDisplayTime.c_str());
|
||||||
|
size_t textLength = timeDisplayTime.length();
|
||||||
|
uint16_t textureIndex = 0;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < textLength; i++) {
|
||||||
|
ImVec2 originalCursorPos = ImGui::GetCursorPos();
|
||||||
|
if (textToDecode[i] == ':' || textToDecode[i] == '.') {
|
||||||
|
textureIndex = 10;
|
||||||
|
} else {
|
||||||
|
textureIndex = textToDecode[i] - '0';
|
||||||
|
}
|
||||||
|
if (textToDecode[i] == '.') {
|
||||||
|
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + (8.0f * fontScale));
|
||||||
|
ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(
|
||||||
|
digitList[textureIndex].first),
|
||||||
|
ImVec2(8.0f * fontScale, 8.0f * fontScale), ImVec2(0, 0.5f), ImVec2(1, 1),
|
||||||
|
textColor, ImVec4(0, 0, 0, 0));
|
||||||
|
} else {
|
||||||
|
ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(
|
||||||
|
digitList[textureIndex].first),
|
||||||
|
ImVec2(8.0f * fontScale, 16.0f * fontScale), ImVec2(0, 0), ImVec2(1, 1), textColor,
|
||||||
|
ImVec4(0, 0, 0, 0));
|
||||||
|
}
|
||||||
|
ImGui::SameLine(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::PopID();
|
||||||
|
}
|
||||||
|
ImGui::EndTable();
|
||||||
|
}
|
||||||
|
ImGui::End();
|
||||||
|
|
||||||
|
ImGui::PopStyleColor(2);
|
||||||
|
ImGui::PopStyleVar(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TimeDisplayInitSettings() {
|
||||||
|
fontScale = CVarGetFloat(CVAR_ENHANCEMENT("TimeDisplay.FontScale"), 1.0f);
|
||||||
|
if (fontScale < 1.0f) {
|
||||||
|
fontScale = 1.0f;
|
||||||
|
}
|
||||||
|
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeDisplay.ShowWindowBG"), 0)) {
|
||||||
|
windowBG = ImVec4(0, 0, 0, 0);
|
||||||
|
} else {
|
||||||
|
windowBG = ImVec4(0, 0, 0, 0.5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void TimeDisplayInitTimers() {
|
||||||
|
for (auto& update : timeDisplayList) {
|
||||||
|
if (CVarGetInteger(update.timeEnable, 0)) {
|
||||||
|
activeTimers.push_back(update);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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("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));
|
||||||
|
}
|
||||||
|
|
||||||
|
TimeDisplayInitSettings();
|
||||||
|
TimeDisplayInitTimers();
|
||||||
|
}
|
37
soh/soh/Enhancements/TimeDisplay/TimeDisplay.h
Normal file
37
soh/soh/Enhancements/TimeDisplay/TimeDisplay.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#include <libultraship/libultraship.h>
|
||||||
|
|
||||||
|
class TimeDisplayWindow : public Ship::GuiWindow {
|
||||||
|
public:
|
||||||
|
using GuiWindow::GuiWindow;
|
||||||
|
|
||||||
|
void InitElement() override;
|
||||||
|
void DrawElement() override {};
|
||||||
|
void Draw() override;
|
||||||
|
void UpdateElement() override {};
|
||||||
|
};
|
||||||
|
|
||||||
|
void TimeDisplayUpdateDisplayOptions();
|
||||||
|
void TimeDisplayInitSettings();
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DISPLAY_IN_GAME_TIMER,
|
||||||
|
DISPLAY_TIME_OF_DAY,
|
||||||
|
DISPLAY_CONDITIONAL_TIMER,
|
||||||
|
DISPLAY_NAVI_TIMER
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NAVI_PREPARE = 600,
|
||||||
|
NAVI_ACTIVE = 3000,
|
||||||
|
NAVI_COOLDOWN = 25800,
|
||||||
|
DAY_BEGINS = 17759,
|
||||||
|
NIGHT_BEGINS = 49155
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t timeID;
|
||||||
|
std::string timeLabel;
|
||||||
|
const char* timeEnable;
|
||||||
|
} TimeObject;
|
||||||
|
|
||||||
|
extern const std::vector<TimeObject> timeDisplayList;
|
47
soh/soh/Enhancements/TimeSavers/FasterRupeeAccumulator.cpp
Normal file
47
soh/soh/Enhancements/TimeSavers/FasterRupeeAccumulator.cpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "spdlog/spdlog.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "z64save.h"
|
||||||
|
#include "macros.h"
|
||||||
|
#include "variables.h"
|
||||||
|
#include "functions.h"
|
||||||
|
extern PlayState* gPlayState;
|
||||||
|
extern SaveContext gSaveContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FasterRupeeAccumulator_Register() {
|
||||||
|
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnInterfaceUpdate>([]() {
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.FasterRupeeAccumulator"), 0)) return;
|
||||||
|
|
||||||
|
if (gSaveContext.rupeeAccumulator == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gaining rupees
|
||||||
|
if (gSaveContext.rupeeAccumulator > 0) {
|
||||||
|
// Wallet is full
|
||||||
|
if (gSaveContext.rupees >= CUR_CAPACITY(UPG_WALLET)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gSaveContext.rupeeAccumulator >= 10 && gSaveContext.rupees + 10 < CUR_CAPACITY(UPG_WALLET)) {
|
||||||
|
gSaveContext.rupeeAccumulator-= 10;
|
||||||
|
gSaveContext.rupees += 10;
|
||||||
|
}
|
||||||
|
// Losing rupees
|
||||||
|
} else if (gSaveContext.rupeeAccumulator < 0) {
|
||||||
|
// No rupees to lose
|
||||||
|
if (gSaveContext.rupees == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gSaveContext.rupeeAccumulator <= -10 && gSaveContext.rupees > 10) {
|
||||||
|
gSaveContext.rupeeAccumulator += 10;
|
||||||
|
gSaveContext.rupees -= 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
@ -20,17 +20,17 @@ void SkipIntro_Register() {
|
|||||||
(IS_RANDO && (adultStart || shuffleEntrances))) &&
|
(IS_RANDO && (adultStart || shuffleEntrances))) &&
|
||||||
gSaveContext.cutsceneIndex == 0xFFF1) {
|
gSaveContext.cutsceneIndex == 0xFFF1) {
|
||||||
// Calculate spawn location. Start with vanilla, Link's house.
|
// Calculate spawn location. Start with vanilla, Link's house.
|
||||||
int32_t spawnEntrance = ENTR_LINKS_HOUSE_0;
|
int32_t spawnEntrance = ENTR_LINKS_HOUSE_CHILD_SPAWN;
|
||||||
// If we're not in rando, we can skip all of the below.
|
// If we're not in rando, we can skip all of the below.
|
||||||
if (IS_RANDO) {
|
if (IS_RANDO) {
|
||||||
// If starting age is shuffled, use vanilla adult spawn/prelude warp.
|
// If starting age is shuffled, use vanilla adult spawn/prelude warp.
|
||||||
if (adultStart) {
|
if (adultStart) {
|
||||||
spawnEntrance = ENTR_TEMPLE_OF_TIME_7;
|
spawnEntrance = ENTR_TEMPLE_OF_TIME_WARP_PAD;
|
||||||
}
|
}
|
||||||
// If we're shuffling any entrances we'll need to get the Entrance Override
|
// If we're shuffling any entrances we'll need to get the Entrance Override
|
||||||
if (shuffleEntrances) {
|
if (shuffleEntrances) {
|
||||||
// If we're shuffling any entrances, the adult spawn is ENTR_HYRULE_FIELD_10 instead of
|
// If we're shuffling any entrances, the adult spawn is ENTR_HYRULE_FIELD_10 instead of
|
||||||
// ENTR_TEMPLE_OF_TIME_7, so that spawn and Prelude don't share an entrance.
|
// ENTR_TEMPLE_OF_TIME_WARP_PAD, so that spawn and Prelude don't share an entrance.
|
||||||
if (adultStart) {
|
if (adultStart) {
|
||||||
spawnEntrance = ENTR_HYRULE_FIELD_10;
|
spawnEntrance = ENTR_HYRULE_FIELD_10;
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,9 @@ extern "C" {
|
|||||||
#include "variables.h"
|
#include "variables.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).GetSelectedOptionIndex()
|
#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).GetContextOptionIndex()
|
||||||
|
|
||||||
|
static bool sEnteredBlueWarp = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This will override the transitions into the blue warp cutscenes, set any appropriate flags, and
|
* This will override the transitions into the blue warp cutscenes, set any appropriate flags, and
|
||||||
@ -18,59 +20,65 @@ extern "C" {
|
|||||||
* should also account for the difference between your first and following visits to the blue warp.
|
* should also account for the difference between your first and following visits to the blue warp.
|
||||||
*/
|
*/
|
||||||
void SkipBlueWarp_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_list originalArgs) {
|
void SkipBlueWarp_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_list originalArgs) {
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
bool overrideBlueWarpDestinations =
|
||||||
uint8_t isBlueWarpCutscene = 0;
|
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);
|
||||||
|
|
||||||
|
// Force blue warp skip on when ER needs to place Link somewhere else.
|
||||||
|
// This is preferred over having story cutscenes play in the overworld and then reloading Link somewhere else after.
|
||||||
|
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO) || overrideBlueWarpDestinations) {
|
||||||
|
bool isBlueWarpCutscene = false;
|
||||||
// Deku Tree Blue warp
|
// Deku Tree Blue warp
|
||||||
if (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0 && gSaveContext.cutsceneIndex == 0xFFF1) {
|
if (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0 && gSaveContext.cutsceneIndex == 0xFFF1) {
|
||||||
gSaveContext.entranceIndex = ENTR_KOKIRI_FOREST_11;
|
gSaveContext.entranceIndex = ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP;
|
||||||
isBlueWarpCutscene = 1;
|
isBlueWarpCutscene = true;
|
||||||
// Dodongo's Cavern Blue warp
|
// Dodongo's Cavern Blue warp
|
||||||
} else if (gSaveContext.entranceIndex == ENTR_DEATH_MOUNTAIN_TRAIL_0 && gSaveContext.cutsceneIndex == 0xFFF1) {
|
} else if (gSaveContext.entranceIndex == ENTR_DEATH_MOUNTAIN_TRAIL_BOTTOM_EXIT && gSaveContext.cutsceneIndex == 0xFFF1) {
|
||||||
gSaveContext.entranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_5;
|
gSaveContext.entranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_DODONGO_BLUE_WARP;
|
||||||
isBlueWarpCutscene = 1;
|
isBlueWarpCutscene = true;
|
||||||
// Jabu Jabu's Blue warp
|
// Jabu Jabu's Blue warp
|
||||||
} else if (gSaveContext.entranceIndex == ENTR_ZORAS_FOUNTAIN_0 && gSaveContext.cutsceneIndex == 0xFFF0) {
|
} else if (gSaveContext.entranceIndex == ENTR_ZORAS_FOUNTAIN_JABU_JABU_BLUE_WARP && gSaveContext.cutsceneIndex == 0xFFF0) {
|
||||||
gSaveContext.entranceIndex = ENTR_ZORAS_FOUNTAIN_0;
|
gSaveContext.entranceIndex = ENTR_ZORAS_FOUNTAIN_JABU_JABU_BLUE_WARP;
|
||||||
isBlueWarpCutscene = 1;
|
isBlueWarpCutscene = true;
|
||||||
// Forest Temple Blue warp
|
// Forest Temple Blue warp
|
||||||
} else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_FOREST) {
|
} 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
|
// Normally set in the blue warp cutscene
|
||||||
Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_DEKU_TREE_SPROUT);
|
Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_DEKU_TREE_SPROUT);
|
||||||
|
|
||||||
if (IS_RANDO) {
|
if (IS_RANDO) {
|
||||||
gSaveContext.entranceIndex = ENTR_SACRED_FOREST_MEADOW_3;
|
gSaveContext.entranceIndex = ENTR_SACRED_FOREST_MEADOW_FOREST_TEMPLE_BLUE_WARP;
|
||||||
} else {
|
} else {
|
||||||
gSaveContext.entranceIndex = ENTR_KOKIRI_FOREST_12;
|
gSaveContext.entranceIndex = ENTR_KOKIRI_FOREST_12;
|
||||||
}
|
}
|
||||||
|
|
||||||
isBlueWarpCutscene = 1;
|
isBlueWarpCutscene = true;
|
||||||
// Fire Temple Blue warp
|
// Fire Temple Blue warp
|
||||||
} else if (gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_0 && gSaveContext.cutsceneIndex == 0xFFF3) {
|
} else if (gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_FRONT_GATE && gSaveContext.cutsceneIndex == 0xFFF3) {
|
||||||
// Normally set in the blue warp cutscene
|
// Normally set in the blue warp cutscene
|
||||||
Flags_SetEventChkInf(EVENTCHKINF_DEATH_MOUNTAIN_ERUPTED);
|
Flags_SetEventChkInf(EVENTCHKINF_DEATH_MOUNTAIN_ERUPTED);
|
||||||
|
|
||||||
gSaveContext.entranceIndex = ENTR_DEATH_MOUNTAIN_CRATER_5;
|
gSaveContext.entranceIndex = ENTR_DEATH_MOUNTAIN_CRATER_FIRE_TEMPLE_BLUE_WARP;
|
||||||
isBlueWarpCutscene = 1;
|
isBlueWarpCutscene = true;
|
||||||
// Water Temple Blue warp
|
// Water Temple Blue warp
|
||||||
} else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_WATER) {
|
} 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
|
// Normally set in the blue warp cutscene
|
||||||
gSaveContext.dayTime = gSaveContext.skyboxTime = 0x4800;
|
gSaveContext.dayTime = gSaveContext.skyboxTime = 0x4800;
|
||||||
Flags_SetEventChkInf(EVENTCHKINF_RAISED_LAKE_HYLIA_WATER);
|
Flags_SetEventChkInf(EVENTCHKINF_RAISED_LAKE_HYLIA_WATER);
|
||||||
|
|
||||||
gSaveContext.entranceIndex = ENTR_LAKE_HYLIA_9;
|
gSaveContext.entranceIndex = ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP;
|
||||||
isBlueWarpCutscene = 1;
|
isBlueWarpCutscene = true;
|
||||||
// Spirit Temple Blue warp
|
// Spirit Temple Blue warp
|
||||||
} else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_SPIRIT) {
|
} else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_SPIRIT) {
|
||||||
gSaveContext.entranceIndex = ENTR_DESERT_COLOSSUS_8;
|
gSaveContext.entranceIndex = ENTR_DESERT_COLOSSUS_SPIRIT_TEMPLE_BLUE_WARP;
|
||||||
isBlueWarpCutscene = 1;
|
isBlueWarpCutscene = true;
|
||||||
// Shadow Temple Blue warp
|
// Shadow Temple Blue warp
|
||||||
} else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_SHADOW) {
|
} else if (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0 && gSaveContext.cutsceneIndex == 0x0 && gSaveContext.chamberCutsceneNum == CHAMBER_CS_SHADOW) {
|
||||||
gSaveContext.entranceIndex = ENTR_GRAVEYARD_8;
|
gSaveContext.entranceIndex = ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP;
|
||||||
isBlueWarpCutscene = 1;
|
isBlueWarpCutscene = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isBlueWarpCutscene) {
|
if (isBlueWarpCutscene) {
|
||||||
if (gSaveContext.entranceIndex != ENTR_LAKE_HYLIA_9) {
|
if (gSaveContext.entranceIndex != ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP) {
|
||||||
// Normally set in the blue warp cutscene
|
// Normally set in the blue warp cutscene
|
||||||
gSaveContext.dayTime = gSaveContext.skyboxTime = 0x8000;
|
gSaveContext.dayTime = gSaveContext.skyboxTime = 0x8000;
|
||||||
}
|
}
|
||||||
@ -80,10 +88,20 @@ void SkipBlueWarp_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_l
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 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 (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)) {
|
if (sEnteredBlueWarp && overrideBlueWarpDestinations) {
|
||||||
Entrance_OverrideBlueWarp();
|
Entrance_OverrideBlueWarp();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sEnteredBlueWarp = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Using this hook to simply observe that Link has entered a bluewarp
|
||||||
|
* This way we know to allow entrance rando overrides to be processed on the next tranisition hook
|
||||||
|
*/
|
||||||
|
void SkipBlueWarp_ShouldPlayBlueWarpCS(GIVanillaBehavior _, bool* should, va_list originalArgs) {
|
||||||
|
sEnteredBlueWarp = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -134,7 +152,7 @@ void SkipBlueWarp_OnActorUpdate(void* actorPtr) {
|
|||||||
*/
|
*/
|
||||||
void SkipBlueWarp_ShouldDekuJrConsiderForestTempleFinished(GIVanillaBehavior _, bool* should, va_list originalArgs) {
|
void SkipBlueWarp_ShouldDekuJrConsiderForestTempleFinished(GIVanillaBehavior _, bool* should, va_list originalArgs) {
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
||||||
if (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_11 && 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);
|
*should = Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -143,6 +161,7 @@ void SkipBlueWarp_ShouldDekuJrConsiderForestTempleFinished(GIVanillaBehavior _,
|
|||||||
void SkipBlueWarp_Register() {
|
void SkipBlueWarp_Register() {
|
||||||
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnActorUpdate>(ACTOR_EN_KO, SkipBlueWarp_OnActorUpdate);
|
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnActorUpdate>(ACTOR_EN_KO, SkipBlueWarp_OnActorUpdate);
|
||||||
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnVanillaBehavior>(VB_PLAY_TRANSITION_CS, SkipBlueWarp_ShouldPlayTransitionCS);
|
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnVanillaBehavior>(VB_PLAY_TRANSITION_CS, SkipBlueWarp_ShouldPlayTransitionCS);
|
||||||
|
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnVanillaBehavior>(VB_PLAY_BLUE_WARP_CS, SkipBlueWarp_ShouldPlayBlueWarpCS);
|
||||||
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnVanillaBehavior>(VB_DEKU_JR_CONSIDER_FOREST_TEMPLE_FINISHED, SkipBlueWarp_ShouldDekuJrConsiderForestTempleFinished);
|
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnVanillaBehavior>(VB_DEKU_JR_CONSIDER_FOREST_TEMPLE_FINISHED, SkipBlueWarp_ShouldDekuJrConsiderForestTempleFinished);
|
||||||
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnVanillaBehavior>(VB_GIVE_ITEM_FROM_BLUE_WARP, SkipBlueWarp_ShouldGiveItem);
|
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnVanillaBehavior>(VB_GIVE_ITEM_FROM_BLUE_WARP, SkipBlueWarp_ShouldGiveItem);
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ void SkipDekuTreeIntro_Register() {
|
|||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
||||||
BgTreemouth* treeMouth = va_arg(args, BgTreemouth*);
|
BgTreemouth* treeMouth = va_arg(args, BgTreemouth*);
|
||||||
Flags_SetEventChkInf(EVENTCHKINF_DEKU_TREE_OPENED_MOUTH);
|
Flags_SetEventChkInf(EVENTCHKINF_DEKU_TREE_OPENED_MOUTH);
|
||||||
Audio_PlaySoundGeneral(NA_SE_EV_WOODDOOR_OPEN, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
Audio_PlaySoundGeneral(NA_SE_EV_WOODDOOR_OPEN, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||||
BgTreemouth_SetupAction(treeMouth, func_808BC6F8);
|
BgTreemouth_SetupAction(treeMouth, func_808BC6F8);
|
||||||
*should = false;
|
*should = false;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ void SkipLostWoodsBridge_Register() {
|
|||||||
*/
|
*/
|
||||||
REGISTER_VB_SHOULD(VB_PLAY_TRANSITION_CS, {
|
REGISTER_VB_SHOULD(VB_PLAY_TRANSITION_CS, {
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
||||||
if ((gSaveContext.entranceIndex == ENTR_LOST_WOODS_9) && !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);
|
Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_SARIA_ON_BRIDGE);
|
||||||
if (GameInteractor_Should(VB_GIVE_ITEM_FAIRY_OCARINA, true)) {
|
if (GameInteractor_Should(VB_GIVE_ITEM_FAIRY_OCARINA, true)) {
|
||||||
Item_Give(gPlayState, ITEM_OCARINA_FAIRY);
|
Item_Give(gPlayState, ITEM_OCARINA_FAIRY);
|
||||||
|
@ -10,7 +10,7 @@ extern "C" {
|
|||||||
|
|
||||||
void SkipZeldaFleeingCastle_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_list originalArgs) {
|
void SkipZeldaFleeingCastle_ShouldPlayTransitionCS(GIVanillaBehavior _, bool* should, va_list originalArgs) {
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
||||||
if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_0 && gSaveContext.cutsceneIndex == 0xFFF1) {
|
if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_PAST_BRIDGE_SPAWN && gSaveContext.cutsceneIndex == 0xFFF1) {
|
||||||
// Normally set in the cutscene
|
// Normally set in the cutscene
|
||||||
gSaveContext.dayTime = gSaveContext.skyboxTime = 0x4AAA;
|
gSaveContext.dayTime = gSaveContext.skyboxTime = 0x4AAA;
|
||||||
|
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/OTRGlobals.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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<GameInteractor::OnActorInit>(ACTOR_BG_BDAN_OBJECTS, [](void* actorRef) {
|
||||||
|
Player* player = GET_PLAYER(gPlayState);
|
||||||
|
BgBdanObjects* bgBdanObjects = static_cast<BgBdanObjects*>(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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
@ -21,7 +21,8 @@ void MoveMidoInKokiriForest_Register() {
|
|||||||
CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO) &&
|
CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO) &&
|
||||||
!Flags_GetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD) &&
|
!Flags_GetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD) &&
|
||||||
(CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SHIELD_DEKU) &&
|
(CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) == EQUIP_VALUE_SHIELD_DEKU) &&
|
||||||
(CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_KOKIRI)
|
(CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_KOKIRI) &&
|
||||||
|
gSaveContext.cutsceneIndex == 0
|
||||||
) {
|
) {
|
||||||
Flags_SetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD);
|
Flags_SetEventChkInf(EVENTCHKINF_SHOWED_MIDO_SWORD_SHIELD);
|
||||||
*should = true;
|
*should = true;
|
||||||
|
@ -0,0 +1,93 @@
|
|||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/OTRGlobals.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "overlays/actors/ovl_En_Ru1/z_en_ru1.h"
|
||||||
|
#include "assets/objects/object_ru1/object_ru1.h"
|
||||||
|
|
||||||
|
Actor* func_80AEB124(PlayState* play);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SkipChildRutoInteractions_Register() {
|
||||||
|
// Skips the Child Ruto introduction cutscene, where she drops down into the hole in Jabu-Jabu's Belly
|
||||||
|
REGISTER_VB_SHOULD(VB_PLAY_CHILD_RUTO_INTRO, {
|
||||||
|
EnRu1* enRu1 = va_arg(args, EnRu1*);
|
||||||
|
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_MEET_RUTO);
|
||||||
|
Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME);
|
||||||
|
Flags_SetInfTable(INFTABLE_143);
|
||||||
|
enRu1->drawConfig = 1;
|
||||||
|
enRu1->actor.world.pos.x = 127.0f;
|
||||||
|
enRu1->actor.world.pos.y = -340.0f;
|
||||||
|
enRu1->actor.world.pos.z = -3041.0f;
|
||||||
|
enRu1->actor.shape.rot.y = enRu1->actor.world.rot.y = -5098;
|
||||||
|
|
||||||
|
if (*should) {
|
||||||
|
Animation_Change(&enRu1->skelAnime, (AnimationHeader*)&gRutoChildTurnAroundAnim, 1.0f, 0,
|
||||||
|
Animation_GetLastFrame((void*)&gRutoChildTurnAroundAnim), ANIMMODE_ONCE, -8.0f);
|
||||||
|
enRu1->action = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
*should = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Skips a short dialogue sequence where Ruto tells you to throw her to the Sapphire
|
||||||
|
REGISTER_VB_SHOULD(VB_RUTO_WANT_TO_BE_TOSSED_TO_SAPPHIRE, {
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*should) {
|
||||||
|
Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE);
|
||||||
|
*should = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 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*);
|
||||||
|
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*should) {
|
||||||
|
enRu1->unk_28C = (BgBdanObjects*)dynaPolyActor;
|
||||||
|
Flags_SetInfTable(INFTABLE_145);
|
||||||
|
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);
|
||||||
|
enRu1->unk_28C->cameraSetting = 1;
|
||||||
|
Actor* sapphire = func_80AEB124(gPlayState);
|
||||||
|
if (sapphire != NULL) {
|
||||||
|
Actor_Kill(sapphire);
|
||||||
|
}
|
||||||
|
enRu1->actor.room = gPlayState->roomCtx.curRoom.num;
|
||||||
|
*should = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 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<GameInteractor::OnActorInit>(ACTOR_EN_RU1, [](void* actorRef) {
|
||||||
|
EnRu1* enRu1 = static_cast<EnRu1*>(actorRef);
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enRu1->action == 22) {
|
||||||
|
enRu1->action = 27;
|
||||||
|
enRu1->drawConfig = 1;
|
||||||
|
enRu1->actor.flags |= ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY;
|
||||||
|
Animation_Change(&enRu1->skelAnime, (AnimationHeader*)&gRutoChildSittingAnim, 1.0f, 0.0f,
|
||||||
|
Animation_GetLastFrame((void*)&gRutoChildSittingAnim), ANIMMODE_LOOP, 0.0f);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
@ -10,6 +10,9 @@ void TimeSavers_Register() {
|
|||||||
SkipZeldaFleeingCastle_Register();
|
SkipZeldaFleeingCastle_Register();
|
||||||
SkipIntro_Register();
|
SkipIntro_Register();
|
||||||
// SkipMiscInteractions
|
// SkipMiscInteractions
|
||||||
|
MoveJabuJabuElevator_Register();
|
||||||
MoveMidoInKokiriForest_Register();
|
MoveMidoInKokiriForest_Register();
|
||||||
|
SkipChildRutoInteractions_Register();
|
||||||
FasterHeavyBlockLift_Register();
|
FasterHeavyBlockLift_Register();
|
||||||
|
FasterRupeeAccumulator_Register();
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,10 @@ void TimeSavers_Register();
|
|||||||
void SkipZeldaFleeingCastle_Register();
|
void SkipZeldaFleeingCastle_Register();
|
||||||
void SkipIntro_Register();
|
void SkipIntro_Register();
|
||||||
// SkipMiscInteractions
|
// SkipMiscInteractions
|
||||||
|
void MoveJabuJabuElevator_Register();
|
||||||
void MoveMidoInKokiriForest_Register();
|
void MoveMidoInKokiriForest_Register();
|
||||||
|
void SkipChildRutoInteractions_Register();
|
||||||
void FasterHeavyBlockLift_Register();
|
void FasterHeavyBlockLift_Register();
|
||||||
|
void FasterRupeeAccumulator_Register();
|
||||||
|
|
||||||
#endif // TIME_SAVERS_H
|
#endif // TIME_SAVERS_H
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "AudioCollection.h"
|
#include "AudioCollection.h"
|
||||||
#include "sequence.h"
|
#include "sequence.h"
|
||||||
#include "sfx.h"
|
#include "sfx.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <utils/StringHelper.h>
|
#include <utils/StringHelper.h>
|
||||||
#include <libultraship/bridge.h>
|
#include <libultraship/bridge.h>
|
||||||
@ -388,7 +389,7 @@ void AudioCollection::RemoveFromShufflePool(SequenceInfo* seqInfo) {
|
|||||||
excludedSequences.insert(seqInfo);
|
excludedSequences.insert(seqInfo);
|
||||||
includedSequences.erase(seqInfo);
|
includedSequences.erase(seqInfo);
|
||||||
CVarSetInteger(cvarKey.c_str(), 1);
|
CVarSetInteger(cvarKey.c_str(), 1);
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioCollection::AddToShufflePool(SequenceInfo* seqInfo) {
|
void AudioCollection::AddToShufflePool(SequenceInfo* seqInfo) {
|
||||||
@ -396,7 +397,7 @@ void AudioCollection::AddToShufflePool(SequenceInfo* seqInfo) {
|
|||||||
includedSequences.insert(seqInfo);
|
includedSequences.insert(seqInfo);
|
||||||
excludedSequences.erase(seqInfo);
|
excludedSequences.erase(seqInfo);
|
||||||
CVarClear(cvarKey.c_str());
|
CVarClear(cvarKey.c_str());
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioCollection::InitializeShufflePool() {
|
void AudioCollection::InitializeShufflePool() {
|
||||||
|
@ -8,9 +8,10 @@
|
|||||||
#include <libultraship/libultraship.h>
|
#include <libultraship/libultraship.h>
|
||||||
#include <functions.h>
|
#include <functions.h>
|
||||||
#include "../randomizer/3drando/random.hpp"
|
#include "../randomizer/3drando/random.hpp"
|
||||||
#include "../../OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
#include <utils/StringHelper.h>
|
#include <utils/StringHelper.h>
|
||||||
#include "../../UIWidgets.hpp"
|
#include "soh/UIWidgets.hpp"
|
||||||
#include "AudioCollection.h"
|
#include "AudioCollection.h"
|
||||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
|
|
||||||
@ -203,7 +204,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
|
|||||||
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
||||||
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
||||||
ResetGroup(map, type);
|
ResetGroup(map, type);
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
||||||
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
|
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
|
||||||
ReplayCurrentBGM();
|
ReplayCurrentBGM();
|
||||||
@ -214,7 +215,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
|
|||||||
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
||||||
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
||||||
RandomizeGroup(type);
|
RandomizeGroup(type);
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
||||||
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
|
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
|
||||||
ReplayCurrentBGM();
|
ReplayCurrentBGM();
|
||||||
@ -225,7 +226,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
|
|||||||
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
||||||
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
||||||
LockGroup(map, type);
|
LockGroup(map, type);
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
||||||
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
|
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
|
||||||
ReplayCurrentBGM();
|
ReplayCurrentBGM();
|
||||||
@ -236,7 +237,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
|
|||||||
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
|
||||||
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
||||||
UnlockGroup(map, type);
|
UnlockGroup(map, type);
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
|
||||||
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
|
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
|
||||||
ReplayCurrentBGM();
|
ReplayCurrentBGM();
|
||||||
@ -281,7 +282,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
|
|||||||
|
|
||||||
if (ImGui::Selectable(seqData.label.c_str())) {
|
if (ImGui::Selectable(seqData.label.c_str())) {
|
||||||
CVarSetInteger(cvarKey.c_str(), value);
|
CVarSetInteger(cvarKey.c_str(), value);
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
UpdateCurrentBGM(defaultValue, type);
|
UpdateCurrentBGM(defaultValue, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,7 +302,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
|
|||||||
if (ImGui::Button(resetButton.c_str())) {
|
if (ImGui::Button(resetButton.c_str())) {
|
||||||
CVarClear(cvarKey.c_str());
|
CVarClear(cvarKey.c_str());
|
||||||
CVarClear(cvarLockKey.c_str());
|
CVarClear(cvarLockKey.c_str());
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
UpdateCurrentBGM(defaultValue, seqData.category);
|
UpdateCurrentBGM(defaultValue, seqData.category);
|
||||||
}
|
}
|
||||||
UIWidgets::Tooltip("Reset to default");
|
UIWidgets::Tooltip("Reset to default");
|
||||||
@ -322,7 +323,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
|
|||||||
if (locked) {
|
if (locked) {
|
||||||
CVarClear(cvarLockKey.c_str());
|
CVarClear(cvarLockKey.c_str());
|
||||||
}
|
}
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
UpdateCurrentBGM(defaultValue, type);
|
UpdateCurrentBGM(defaultValue, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -335,7 +336,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
|
|||||||
} else {
|
} else {
|
||||||
CVarSetInteger(cvarLockKey.c_str(), 1);
|
CVarSetInteger(cvarLockKey.c_str(), 1);
|
||||||
}
|
}
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
}
|
}
|
||||||
UIWidgets::Tooltip(locked ? "Sound locked" : "Sound unlocked");
|
UIWidgets::Tooltip(locked ? "Sound locked" : "Sound unlocked");
|
||||||
}
|
}
|
||||||
@ -515,7 +516,7 @@ void AudioEditor::DrawElement() {
|
|||||||
const std::string resetButton = "Reset##linkVoiceFreqMultiplier";
|
const std::string resetButton = "Reset##linkVoiceFreqMultiplier";
|
||||||
if (ImGui::Button(resetButton.c_str())) {
|
if (ImGui::Button(resetButton.c_str())) {
|
||||||
CVarSetFloat(CVAR_AUDIO("LinkVoiceFreqMultiplier"), 1.0f);
|
CVarSetFloat(CVAR_AUDIO("LinkVoiceFreqMultiplier"), 1.0f);
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::NewLine();
|
ImGui::NewLine();
|
||||||
@ -703,14 +704,14 @@ void AudioEditor_RandomizeAll() {
|
|||||||
RandomizeGroup(type);
|
RandomizeGroup(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
ReplayCurrentBGM();
|
ReplayCurrentBGM();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioEditor_RandomizeGroup(SeqType group) {
|
void AudioEditor_RandomizeGroup(SeqType group) {
|
||||||
RandomizeGroup(group);
|
RandomizeGroup(group);
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
ReplayCurrentBGM();
|
ReplayCurrentBGM();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -719,14 +720,14 @@ void AudioEditor_ResetAll() {
|
|||||||
ResetGroup(AudioCollection::Instance->GetAllSequences(), type);
|
ResetGroup(AudioCollection::Instance->GetAllSequences(), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
ReplayCurrentBGM();
|
ReplayCurrentBGM();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioEditor_ResetGroup(SeqType group) {
|
void AudioEditor_ResetGroup(SeqType group) {
|
||||||
ResetGroup(AudioCollection::Instance->GetAllSequences(), group);
|
ResetGroup(AudioCollection::Instance->GetAllSequences(), group);
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
ReplayCurrentBGM();
|
ReplayCurrentBGM();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -735,7 +736,7 @@ void AudioEditor_LockAll() {
|
|||||||
LockGroup(AudioCollection::Instance->GetAllSequences(), type);
|
LockGroup(AudioCollection::Instance->GetAllSequences(), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioEditor_UnlockAll() {
|
void AudioEditor_UnlockAll() {
|
||||||
@ -743,5 +744,5 @@ void AudioEditor_UnlockAll() {
|
|||||||
UnlockGroup(AudioCollection::Instance->GetAllSequences(), type);
|
UnlockGroup(AudioCollection::Instance->GetAllSequences(), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <z64.h>
|
#include <z64.h>
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
|
|
||||||
uint8_t gLoadFileSelect = 0, gSkipLogoTest = 0;
|
uint8_t gLoadFileSelect = 0, gSkipLogoTest = 0;
|
||||||
|
|
||||||
|
@ -225,30 +225,30 @@ void BossRush_HandleBlueWarp(PlayState* play, f32 warpPosX, f32 warpPosZ) {
|
|||||||
// Gohma & Phantom Ganon
|
// Gohma & Phantom Ganon
|
||||||
if (warpPosX == -100 && warpPosZ == -170) {
|
if (warpPosX == -100 && warpPosZ == -170) {
|
||||||
if (gSaveContext.linkAge == LINK_AGE_CHILD) {
|
if (gSaveContext.linkAge == LINK_AGE_CHILD) {
|
||||||
play->nextEntranceIndex = ENTR_DEKU_TREE_BOSS_0;
|
play->nextEntranceIndex = ENTR_DEKU_TREE_BOSS_ENTRANCE;
|
||||||
} else {
|
} else {
|
||||||
play->nextEntranceIndex = ENTR_FOREST_TEMPLE_BOSS_0;
|
play->nextEntranceIndex = ENTR_FOREST_TEMPLE_BOSS_ENTRANCE;
|
||||||
}
|
}
|
||||||
// King Dodongo & Volvagia
|
// King Dodongo & Volvagia
|
||||||
} else if (warpPosX == 100 && warpPosZ == -170) {
|
} else if (warpPosX == 100 && warpPosZ == -170) {
|
||||||
if (gSaveContext.linkAge == LINK_AGE_CHILD) {
|
if (gSaveContext.linkAge == LINK_AGE_CHILD) {
|
||||||
play->nextEntranceIndex = ENTR_DODONGOS_CAVERN_BOSS_0;
|
play->nextEntranceIndex = ENTR_DODONGOS_CAVERN_BOSS_ENTRANCE;
|
||||||
} else {
|
} else {
|
||||||
play->nextEntranceIndex = ENTR_FIRE_TEMPLE_BOSS_0;
|
play->nextEntranceIndex = ENTR_FIRE_TEMPLE_BOSS_ENTRANCE;
|
||||||
}
|
}
|
||||||
// Barinade & Morb
|
// Barinade & Morb
|
||||||
} else if (warpPosX == 199 && warpPosZ == 0) {
|
} else if (warpPosX == 199 && warpPosZ == 0) {
|
||||||
if (gSaveContext.linkAge == LINK_AGE_CHILD) {
|
if (gSaveContext.linkAge == LINK_AGE_CHILD) {
|
||||||
play->nextEntranceIndex = ENTR_JABU_JABU_BOSS_0;
|
play->nextEntranceIndex = ENTR_JABU_JABU_BOSS_ENTRANCE;
|
||||||
} else {
|
} else {
|
||||||
play->nextEntranceIndex = ENTR_WATER_TEMPLE_BOSS_0;
|
play->nextEntranceIndex = ENTR_WATER_TEMPLE_BOSS_ENTRANCE;
|
||||||
}
|
}
|
||||||
// Twinrova
|
// Twinrova
|
||||||
} else if (warpPosX == 100 && warpPosZ == 170) {
|
} else if (warpPosX == 100 && warpPosZ == 170) {
|
||||||
play->nextEntranceIndex = ENTR_SPIRIT_TEMPLE_BOSS_2;
|
play->nextEntranceIndex = ENTR_SPIRIT_TEMPLE_BOSS_2;
|
||||||
// Bongo Bongo
|
// Bongo Bongo
|
||||||
} else if (warpPosX == -100 && warpPosZ == 170) {
|
} else if (warpPosX == -100 && warpPosZ == 170) {
|
||||||
play->nextEntranceIndex = ENTR_SHADOW_TEMPLE_BOSS_0;
|
play->nextEntranceIndex = ENTR_SHADOW_TEMPLE_BOSS_ENTRANCE;
|
||||||
// Ganondork
|
// Ganondork
|
||||||
} else if (warpPosX == -199 && warpPosZ == 0) {
|
} else if (warpPosX == -199 && warpPosZ == 0) {
|
||||||
play->nextEntranceIndex = ENTR_GANONDORF_BOSS_0;
|
play->nextEntranceIndex = ENTR_GANONDORF_BOSS_0;
|
||||||
|
@ -41,6 +41,8 @@ void CheatsOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include "libultraship/libultra/controller.h"
|
#include "libultraship/libultra/controller.h"
|
||||||
#include "Context.h"
|
#include "Context.h"
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
#ifndef IMGUI_DEFINE_MATH_OPERATORS
|
#ifndef IMGUI_DEFINE_MATH_OPERATORS
|
||||||
#define IMGUI_DEFINE_MATH_OPERATORS
|
#define IMGUI_DEFINE_MATH_OPERATORS
|
||||||
#endif
|
#endif
|
||||||
@ -169,7 +170,7 @@ void InputViewer::DrawElement() {
|
|||||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0, 0, 0, 0));
|
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0, 0, 0, 0));
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f));
|
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f));
|
||||||
|
|
||||||
OSContPad* pads = Ship::Context::GetInstance()->GetControlDeck()->GetPads();
|
OSContPad* pads = std::dynamic_pointer_cast<LUS::ControlDeck>(Ship::Context::GetInstance()->GetControlDeck())->GetPads();
|
||||||
|
|
||||||
ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar |
|
ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar |
|
||||||
ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBackground |
|
ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoBackground |
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
#include "../../UIWidgets.hpp"
|
#include "../../UIWidgets.hpp"
|
||||||
#include "z64.h"
|
#include "z64.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
#ifndef __WIIU__
|
#ifndef __WIIU__
|
||||||
#include "controller/controldevice/controller/mapping/sdl/SDLAxisDirectionToButtonMapping.h"
|
#include "controller/controldevice/controller/mapping/sdl/SDLAxisDirectionToButtonMapping.h"
|
||||||
#endif
|
#endif
|
||||||
@ -83,7 +84,7 @@ void SohInputEditorWindow::UpdateElement() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->BlockImGuiGamepadNavigation();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->BlockGamepadNavigation();
|
||||||
} else {
|
} else {
|
||||||
if (mGameInputBlockTimer != INT32_MAX) {
|
if (mGameInputBlockTimer != INT32_MAX) {
|
||||||
mGameInputBlockTimer--;
|
mGameInputBlockTimer--;
|
||||||
@ -94,13 +95,13 @@ void SohInputEditorWindow::UpdateElement() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Ship::Context::GetInstance()->GetWindow()->GetGui()->ImGuiGamepadNavigationEnabled()) {
|
if (Ship::Context::GetInstance()->GetWindow()->GetGui()->GamepadNavigationEnabled()) {
|
||||||
mMappingInputBlockTimer = ImGui::GetIO().Framerate / 3;
|
mMappingInputBlockTimer = ImGui::GetIO().Framerate / 3;
|
||||||
} else {
|
} else {
|
||||||
mMappingInputBlockTimer = INT32_MAX;
|
mMappingInputBlockTimer = INT32_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->UnblockImGuiGamepadNavigation();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->UnblockGamepadNavigation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,7 +298,7 @@ void SohInputEditorWindow::DrawButtonLineEditMappingButton(uint8_t port, N64Butt
|
|||||||
ImGui::OpenPopup(popupId.c_str());
|
ImGui::OpenPopup(popupId.c_str());
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayNormal | ImGuiHoveredFlags_NoSharedDelay)) {
|
if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayNormal | ImGuiHoveredFlags_NoSharedDelay)) {
|
||||||
ImGui::SetTooltip(mapping->GetPhysicalDeviceName().c_str());
|
ImGui::SetTooltip("%s", mapping->GetPhysicalDeviceName().c_str());
|
||||||
}
|
}
|
||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
@ -571,7 +572,7 @@ void SohInputEditorWindow::DrawStickDirectionLineEditMappingButton(uint8_t port,
|
|||||||
ImGui::OpenPopup(popupId.c_str());
|
ImGui::OpenPopup(popupId.c_str());
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayNormal | ImGuiHoveredFlags_NoSharedDelay)) {
|
if (ImGui::IsItemHovered(ImGuiHoveredFlags_DelayNormal | ImGuiHoveredFlags_NoSharedDelay)) {
|
||||||
ImGui::SetTooltip(mapping->GetPhysicalDeviceName().c_str());
|
ImGui::SetTooltip("%s", mapping->GetPhysicalDeviceName().c_str());
|
||||||
}
|
}
|
||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
@ -1108,7 +1109,7 @@ void SohInputEditorWindow::DrawLEDSection(uint8_t port) {
|
|||||||
color.b = colorVec.z * 255.0;
|
color.b = colorVec.z * 255.0;
|
||||||
|
|
||||||
CVarSetColor24(CVAR_SETTING("LEDPort1Color"), color);
|
CVarSetColor24(CVAR_SETTING("LEDPort1Color"), color);
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Text("Custom Color");
|
ImGui::Text("Custom Color");
|
||||||
@ -1178,7 +1179,7 @@ void SohInputEditorWindow::DrawGyroSection(uint8_t port) {
|
|||||||
auto id = mapping->GetGyroMappingId();
|
auto id = mapping->GetGyroMappingId();
|
||||||
ImGui::AlignTextToFramePadding();
|
ImGui::AlignTextToFramePadding();
|
||||||
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
|
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
|
||||||
ImGui::BulletText(mapping->GetPhysicalDeviceName().c_str());
|
ImGui::BulletText("%s", mapping->GetPhysicalDeviceName().c_str());
|
||||||
DrawRemoveGyroMappingButton(port, id);
|
DrawRemoveGyroMappingButton(port, id);
|
||||||
|
|
||||||
static float sPitch, sYaw = 0.0f;
|
static float sPitch, sYaw = 0.0f;
|
||||||
@ -1303,7 +1304,7 @@ void SohInputEditorWindow::DrawButtonDeviceIcons(uint8_t portIndex, std::set<N64
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SohInputEditorWindow::DrawAnalogStickDeviceIcons(uint8_t portIndex, Ship::Stick stick) {
|
void SohInputEditorWindow::DrawAnalogStickDeviceIcons(uint8_t portIndex, Ship::StickIndex stickIndex) {
|
||||||
std::set<Ship::ShipDeviceIndex> allLusDeviceIndices;
|
std::set<Ship::ShipDeviceIndex> allLusDeviceIndices;
|
||||||
allLusDeviceIndices.insert(Ship::ShipDeviceIndex::Keyboard);
|
allLusDeviceIndices.insert(Ship::ShipDeviceIndex::Keyboard);
|
||||||
for (auto [lusIndex, mapping] : Ship::Context::GetInstance()
|
for (auto [lusIndex, mapping] : Ship::Context::GetInstance()
|
||||||
@ -1316,7 +1317,7 @@ void SohInputEditorWindow::DrawAnalogStickDeviceIcons(uint8_t portIndex, Ship::S
|
|||||||
std::vector<std::pair<Ship::ShipDeviceIndex, bool>> lusDeviceIndiciesWithMappings;
|
std::vector<std::pair<Ship::ShipDeviceIndex, bool>> lusDeviceIndiciesWithMappings;
|
||||||
for (auto lusIndex : allLusDeviceIndices) {
|
for (auto lusIndex : allLusDeviceIndices) {
|
||||||
auto controllerStick =
|
auto controllerStick =
|
||||||
stick == Ship::Stick::LEFT_STICK
|
stickIndex == Ship::StickIndex::LEFT_STICK
|
||||||
? Ship::Context::GetInstance()->GetControlDeck()->GetControllerByPort(portIndex)->GetLeftStick()
|
? Ship::Context::GetInstance()->GetControlDeck()->GetControllerByPort(portIndex)->GetLeftStick()
|
||||||
: Ship::Context::GetInstance()->GetControlDeck()->GetControllerByPort(portIndex)->GetRightStick();
|
: Ship::Context::GetInstance()->GetControlDeck()->GetControllerByPort(portIndex)->GetRightStick();
|
||||||
if (controllerStick->HasMappingsForShipDeviceIndex(lusIndex)) {
|
if (controllerStick->HasMappingsForShipDeviceIndex(lusIndex)) {
|
||||||
@ -1524,7 +1525,7 @@ void SohInputEditorWindow::DrawMapping(CustomButtonMap& mapping, float labelWidt
|
|||||||
}
|
}
|
||||||
if (ImGui::Selectable(i->second, i->first == currentButton)) {
|
if (ImGui::Selectable(i->second, i->first == currentButton)) {
|
||||||
CVarSetInteger(mapping.cVarName, i->first);
|
CVarSetInteger(mapping.cVarName, i->first);
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
@ -1534,8 +1535,10 @@ void SohInputEditorWindow::DrawMapping(CustomButtonMap& mapping, float labelWidt
|
|||||||
|
|
||||||
void SohInputEditorWindow::DrawOcarinaControlPanel() {
|
void SohInputEditorWindow::DrawOcarinaControlPanel() {
|
||||||
ImVec2 cursor = ImGui::GetCursorPos();
|
ImVec2 cursor = ImGui::GetCursorPos();
|
||||||
ImGui::SetCursorPos(ImVec2(cursor.x + 24, cursor.y + 5));
|
ImGui::SetCursorPos(ImVec2(cursor.x, cursor.y + 5));
|
||||||
|
|
||||||
|
UIWidgets::EnhancementCheckbox("Dpad Ocarina Playback", CVAR_SETTING("CustomOcarina.Dpad"));
|
||||||
|
UIWidgets::EnhancementCheckbox("Right Stick Ocarina Playback", CVAR_SETTING("CustomOcarina.RightStick"));
|
||||||
UIWidgets::EnhancementCheckbox("Customize Ocarina Controls", CVAR_SETTING("CustomOcarina.Enabled"));
|
UIWidgets::EnhancementCheckbox("Customize Ocarina Controls", CVAR_SETTING("CustomOcarina.Enabled"));
|
||||||
|
|
||||||
if (!CVarGetInteger(CVAR_SETTING("CustomOcarina.Enabled"), 0)) {
|
if (!CVarGetInteger(CVAR_SETTING("CustomOcarina.Enabled"), 0)) {
|
||||||
@ -1578,10 +1581,10 @@ void SohInputEditorWindow::DrawCameraControlPanel() {
|
|||||||
UIWidgets::Tooltip("Inverts the Camera X Axis in:\n-First-Person/C-Up view\n-Weapon Aiming");
|
UIWidgets::Tooltip("Inverts the Camera X Axis in:\n-First-Person/C-Up view\n-Weapon Aiming");
|
||||||
UIWidgets::PaddedEnhancementCheckbox("Invert Aiming Y Axis", CVAR_SETTING("Controls.InvertAimingYAxis"), true, true, false, "", UIWidgets::CheckboxGraphics::Cross, true);
|
UIWidgets::PaddedEnhancementCheckbox("Invert Aiming Y Axis", CVAR_SETTING("Controls.InvertAimingYAxis"), true, true, false, "", UIWidgets::CheckboxGraphics::Cross, true);
|
||||||
UIWidgets::Tooltip("Inverts the Camera Y Axis in:\n-First-Person/C-Up view\n-Weapon Aiming");
|
UIWidgets::Tooltip("Inverts the Camera Y Axis in:\n-First-Person/C-Up view\n-Weapon Aiming");
|
||||||
UIWidgets::PaddedEnhancementCheckbox("Invert Shield Aiming Y Axis", CVAR_SETTING("Controls.InvertShieldAimingYAxis"), true, true, false, "", UIWidgets::CheckboxGraphics::Cross, true);
|
UIWidgets::PaddedEnhancementCheckbox("Invert Shield Aiming X Axis", CVAR_SETTING("Controls.InvertShieldAimingXAxis"), true, true, false, "", UIWidgets::CheckboxGraphics::Cross, true);
|
||||||
UIWidgets::Tooltip("Inverts the Shield Aiming Y Axis");
|
|
||||||
UIWidgets::PaddedEnhancementCheckbox("Invert Shield Aiming X Axis", CVAR_SETTING("Controls.InvertShieldAimingYAxis"));
|
|
||||||
UIWidgets::Tooltip("Inverts the Shield Aiming X Axis");
|
UIWidgets::Tooltip("Inverts the Shield Aiming X Axis");
|
||||||
|
UIWidgets::PaddedEnhancementCheckbox("Invert Shield Aiming Y Axis", CVAR_SETTING("Controls.InvertShieldAimingYAxis"));
|
||||||
|
UIWidgets::Tooltip("Inverts the Shield Aiming Y Axis");
|
||||||
UIWidgets::PaddedEnhancementCheckbox("Invert Z-Weapon Aiming Y Axis", CVAR_SETTING("Controls.InvertZAimingYAxis"), true, true, false, "", UIWidgets::CheckboxGraphics::Cross, true);
|
UIWidgets::PaddedEnhancementCheckbox("Invert Z-Weapon Aiming Y Axis", CVAR_SETTING("Controls.InvertZAimingYAxis"), true, true, false, "", UIWidgets::CheckboxGraphics::Cross, true);
|
||||||
UIWidgets::Tooltip("Inverts the Camera Y Axis in:\n-Z-Weapon Aiming");
|
UIWidgets::Tooltip("Inverts the Camera Y Axis in:\n-Z-Weapon Aiming");
|
||||||
UIWidgets::PaddedEnhancementCheckbox("Disable Auto-Centering in First-Person View", CVAR_SETTING("DisableFirstPersonAutoCenterView"));
|
UIWidgets::PaddedEnhancementCheckbox("Disable Auto-Centering in First-Person View", CVAR_SETTING("DisableFirstPersonAutoCenterView"));
|
||||||
|
@ -96,7 +96,7 @@ class SohInputEditorWindow : public Ship::GuiWindow {
|
|||||||
std::set<N64ButtonMask> mModifierButtonsBitmasks;
|
std::set<N64ButtonMask> mModifierButtonsBitmasks;
|
||||||
std::set<N64ButtonMask> mCustomOcarinaButtonsBitmasks;
|
std::set<N64ButtonMask> mCustomOcarinaButtonsBitmasks;
|
||||||
void DrawButtonDeviceIcons(uint8_t portIndex, std::set<N64ButtonMask> bitmasks);
|
void DrawButtonDeviceIcons(uint8_t portIndex, std::set<N64ButtonMask> bitmasks);
|
||||||
void DrawAnalogStickDeviceIcons(uint8_t portIndex, Ship::Stick stick);
|
void DrawAnalogStickDeviceIcons(uint8_t portIndex, Ship::StickIndex stickIndex);
|
||||||
void DrawRumbleDeviceIcons(uint8_t portIndex);
|
void DrawRumbleDeviceIcons(uint8_t portIndex);
|
||||||
void DrawGyroDeviceIcons(uint8_t portIndex);
|
void DrawGyroDeviceIcons(uint8_t portIndex);
|
||||||
void DrawLEDDeviceIcons(uint8_t portIndex);
|
void DrawLEDDeviceIcons(uint8_t portIndex);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,13 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <libultraship/libultraship.h>
|
#include <libultraship/libultraship.h>
|
||||||
|
|
||||||
#define PATCH_GFX(path, name, cvar, index, instruction) \
|
|
||||||
if (CVarGetInteger(cvar, 0)) { \
|
|
||||||
ResourceMgr_PatchGfxByName(path, name, index, instruction); \
|
|
||||||
} else { \
|
|
||||||
ResourceMgr_UnpatchGfxByName(path, name); \
|
|
||||||
}
|
|
||||||
|
|
||||||
// Not to be confused with tabs, groups are 1:1 with the boxes shown in the UI, grouping them allows us to reset/randomize
|
// 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`
|
// every item in a group at once. If you are looking for tabs they are rendered manually in ImGui in `DrawCosmeticsEditor`
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -28,9 +21,19 @@ typedef enum {
|
|||||||
COSMETICS_GROUP_TRAILS,
|
COSMETICS_GROUP_TRAILS,
|
||||||
COSMETICS_GROUP_NAVI,
|
COSMETICS_GROUP_NAVI,
|
||||||
COSMETICS_GROUP_IVAN,
|
COSMETICS_GROUP_IVAN,
|
||||||
|
COSMETICS_GROUP_MESSAGE,
|
||||||
COSMETICS_GROUP_MAX
|
COSMETICS_GROUP_MAX
|
||||||
} CosmeticGroup;
|
} CosmeticGroup;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif //__cplusplus
|
||||||
|
|
||||||
|
Color_RGBA8 CosmeticsEditor_GetDefaultValue(const char* id);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const std::string Name;
|
const std::string Name;
|
||||||
const std::string ToolTip;
|
const std::string ToolTip;
|
||||||
@ -46,8 +49,7 @@ static float TablesCellsWidth = 300.0f;
|
|||||||
static ImGuiTableColumnFlags FlagsTable = ImGuiTableFlags_BordersH | ImGuiTableFlags_BordersV;
|
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 InitCosmeticsEditor();//Init the menu itself
|
ImVec4 GetRandomValue();
|
||||||
ImVec4 GetRandomValue(int MaximumPossible);
|
|
||||||
void CosmeticsEditor_RandomizeAll();
|
void CosmeticsEditor_RandomizeAll();
|
||||||
void CosmeticsEditor_RandomizeGroup(CosmeticGroup group);
|
void CosmeticsEditor_RandomizeGroup(CosmeticGroup group);
|
||||||
void CosmeticsEditor_ResetAll();
|
void CosmeticsEditor_ResetAll();
|
||||||
@ -62,3 +64,4 @@ class CosmeticsEditorWindow : public Ship::GuiWindow {
|
|||||||
void DrawElement() override;
|
void DrawElement() override;
|
||||||
void UpdateElement() override {};
|
void UpdateElement() override {};
|
||||||
};
|
};
|
||||||
|
#endif //__cplusplus
|
@ -1,6 +1,8 @@
|
|||||||
#include <libultraship/bridge.h>
|
#include <libultraship/bridge.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
|
#include "soh/ResourceManagerHelpers.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <libultraship/libultra.h>
|
#include <libultraship/libultra.h>
|
||||||
@ -9,11 +11,6 @@ extern "C" {
|
|||||||
#include "objects/object_gi_soldout/object_gi_soldout.h"
|
#include "objects/object_gi_soldout/object_gi_soldout.h"
|
||||||
#include "objects/object_ik/object_ik.h"
|
#include "objects/object_ik/object_ik.h"
|
||||||
#include "objects/object_link_child/object_link_child.h"
|
#include "objects/object_link_child/object_link_child.h"
|
||||||
|
|
||||||
uint32_t ResourceMgr_GameHasMasterQuest();
|
|
||||||
uint32_t ResourceMgr_GameHasOriginal();
|
|
||||||
void ResourceMgr_PatchGfxByName(const char* path, const char* patchName, int index, Gfx instruction);
|
|
||||||
void ResourceMgr_UnpatchGfxByName(const char* path, const char* patchName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -20,6 +20,10 @@ static const std::unordered_map<std::string, std::string> percentColors = { { "w
|
|||||||
{ "b", QM_BLUE }, { "c", QM_LBLUE }, { "p", QM_PINK },
|
{ "b", QM_BLUE }, { "c", QM_LBLUE }, { "p", QM_PINK },
|
||||||
{ "y", QM_YELLOW }, { "B", QM_BLACK } };
|
{ "y", QM_YELLOW }, { "B", QM_BLACK } };
|
||||||
|
|
||||||
|
static const std::unordered_map<std::string, std::string> 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<std::string, ItemID> altarIcons = {
|
static const std::unordered_map<std::string, ItemID> altarIcons = {
|
||||||
{ "0", ITEM_KOKIRI_EMERALD },
|
{ "0", ITEM_KOKIRI_EMERALD },
|
||||||
{ "1", ITEM_GORON_RUBY },
|
{ "1", ITEM_GORON_RUBY },
|
||||||
@ -147,6 +151,8 @@ void CustomMessage::ProcessMessageFormat(std::string& str, MessageFormat format)
|
|||||||
CleanString(str);
|
CleanString(str);
|
||||||
} else if (format == MF_AUTO_FORMAT){
|
} else if (format == MF_AUTO_FORMAT){
|
||||||
AutoFormatString(str);
|
AutoFormatString(str);
|
||||||
|
}else if (format == MF_ENCODE){
|
||||||
|
EncodeColors(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,6 +287,12 @@ void CustomMessage::Clean() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CustomMessage::Encode() {
|
||||||
|
for (std::string& str : messages) {
|
||||||
|
EncodeColors(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CustomMessage::FormatString(std::string& str) const {
|
void CustomMessage::FormatString(std::string& str) const {
|
||||||
std::replace(str.begin(), str.end(), '&', NEWLINE()[0]);
|
std::replace(str.begin(), str.end(), '&', NEWLINE()[0]);
|
||||||
std::replace(str.begin(), str.end(), '^', WAIT_FOR_INPUT()[0]);
|
std::replace(str.begin(), str.end(), '^', WAIT_FOR_INPUT()[0]);
|
||||||
@ -330,6 +342,15 @@ static size_t NextLineLength(const std::string* textStr, const size_t lastNewlin
|
|||||||
nextPosJump = 1;
|
nextPosJump = 1;
|
||||||
// Assume worst case for player name 12 * 8 (widest character * longest name length)
|
// Assume worst case for player name 12 * 8 (widest character * longest name length)
|
||||||
totalPixelWidth += 96;
|
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 {
|
} else {
|
||||||
// Some characters only one byte while others are two bytes
|
// Some characters only one byte while others are two bytes
|
||||||
// So check both possibilities when checking for a character
|
// So check both possibilities when checking for a character
|
||||||
@ -355,6 +376,65 @@ static size_t NextLineLength(const std::string* textStr, const size_t lastNewlin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t CustomMessage::FindNEWLINE(std::string& str, size_t lastNewline) const {
|
||||||
|
size_t newLine = str.find(NEWLINE()[0], lastNewline);
|
||||||
|
bool done;
|
||||||
|
|
||||||
|
// Bail out early
|
||||||
|
if (newLine == std::string::npos) {
|
||||||
|
return newLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
done = true;
|
||||||
|
if (newLine != 0) {
|
||||||
|
switch (str[newLine - 1]) {
|
||||||
|
case '\x05': // COLOR
|
||||||
|
case '\x06': // SHIFT
|
||||||
|
case '\x07': // TEXTID
|
||||||
|
case '\x0C': // BOX_BREAK_DELAYED
|
||||||
|
case '\x0E': // FADE
|
||||||
|
case '\x11': // FADE2
|
||||||
|
case '\x12': // SFX
|
||||||
|
case '\x13': // ITEM_ICON
|
||||||
|
case '\x14': // TEXT_SPEED
|
||||||
|
case '\x15': // BACKGROUND
|
||||||
|
case '\x1E': // POINTS/HIGH_SCORE
|
||||||
|
done = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (newLine > 1) {
|
||||||
|
switch (str[newLine - 2]) {
|
||||||
|
case '\x07': // TEXTID
|
||||||
|
case '\x11': // FADE2
|
||||||
|
case '\x12': // SFX
|
||||||
|
case '\x15': // BACKGROUND
|
||||||
|
done = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (newLine > 2) {
|
||||||
|
if (str[newLine - 3] == '\x15') { // BACKGROUND
|
||||||
|
done = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!done) {
|
||||||
|
newLine = str.find(NEWLINE()[0], newLine + 1);
|
||||||
|
if (newLine == std::string::npos) {
|
||||||
|
// if we reach the end of the string, quit now to save a loop
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (!done);
|
||||||
|
|
||||||
|
return newLine;
|
||||||
|
}
|
||||||
|
|
||||||
void CustomMessage::AutoFormatString(std::string& str) const {
|
void CustomMessage::AutoFormatString(std::string& str) const {
|
||||||
ReplaceAltarIcons(str);
|
ReplaceAltarIcons(str);
|
||||||
ReplaceColors(str);
|
ReplaceColors(str);
|
||||||
@ -369,7 +449,7 @@ void CustomMessage::AutoFormatString(std::string& str) const {
|
|||||||
const size_t ampersand = str.find('&', lastNewline);
|
const size_t ampersand = str.find('&', lastNewline);
|
||||||
const size_t lastSpace = str.rfind(' ', lastNewline + lineLength);
|
const size_t lastSpace = str.rfind(' ', lastNewline + lineLength);
|
||||||
size_t waitForInput = str.find(WAIT_FOR_INPUT()[0], lastNewline);
|
size_t waitForInput = str.find(WAIT_FOR_INPUT()[0], lastNewline);
|
||||||
size_t newLine = str.find(NEWLINE()[0], lastNewline);
|
size_t newLine = FindNEWLINE(str, lastNewline);
|
||||||
if (carrot < waitForInput){
|
if (carrot < waitForInput){
|
||||||
waitForInput = carrot;
|
waitForInput = carrot;
|
||||||
}
|
}
|
||||||
@ -506,7 +586,23 @@ const char* Interface_ReplaceSpecialCharacters(char text[]) {
|
|||||||
return textChar;
|
return textChar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CustomMessage::EncodeColors(std::string& str) const {
|
||||||
|
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) {
|
||||||
|
str.replace(secondHashtag, 1, "%w");
|
||||||
|
} else {
|
||||||
|
SPDLOG_DEBUG("non-matching hashtags in string: \"%s\"", str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Remove any remaining '#' characters.
|
||||||
|
std::erase(str, '#');
|
||||||
|
}
|
||||||
|
|
||||||
void CustomMessage::ReplaceColors(std::string& str) const {
|
void CustomMessage::ReplaceColors(std::string& str) const {
|
||||||
|
EncodeColors(str);
|
||||||
for (const auto& colorPair : percentColors) {
|
for (const auto& colorPair : percentColors) {
|
||||||
std::string textToReplace = "%";
|
std::string textToReplace = "%";
|
||||||
textToReplace += colorPair.first;
|
textToReplace += colorPair.first;
|
||||||
@ -516,18 +612,6 @@ void CustomMessage::ReplaceColors(std::string& str) const {
|
|||||||
start_pos += textToReplace.length();
|
start_pos += textToReplace.length();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto color: colors) {
|
|
||||||
if (const size_t firstHashtag = str.find('#'); firstHashtag != std::string::npos) {
|
|
||||||
str.replace(firstHashtag, 1, COLOR(color));
|
|
||||||
if (const size_t secondHashtag = str.find('#', firstHashtag + 1); secondHashtag != std::string::npos) {
|
|
||||||
str.replace(secondHashtag, 1, COLOR(QM_WHITE));
|
|
||||||
} else {
|
|
||||||
SPDLOG_DEBUG("non-matching hashtags in string: \"%s\"", str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Remove any remaining '#' characters.
|
|
||||||
std::erase(str, '#');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CustomMessage::ReplaceAltarIcons(std::string& str) const {
|
void CustomMessage::ReplaceAltarIcons(std::string& str) const {
|
||||||
@ -619,6 +703,8 @@ CustomMessage CustomMessageManager::RetrieveMessage(std::string tableID, uint16_
|
|||||||
message.AutoFormat();
|
message.AutoFormat();
|
||||||
} else if (format == MF_CLEAN){
|
} else if (format == MF_CLEAN){
|
||||||
message.Clean();
|
message.Clean();
|
||||||
|
} else if (format == MF_ENCODE){
|
||||||
|
message.Encode();
|
||||||
}
|
}
|
||||||
|
|
||||||
return message;
|
return message;
|
||||||
|
@ -26,7 +26,8 @@ typedef enum {
|
|||||||
MF_FORMATTED,
|
MF_FORMATTED,
|
||||||
MF_CLEAN,
|
MF_CLEAN,
|
||||||
MF_RAW,
|
MF_RAW,
|
||||||
MF_AUTO_FORMAT
|
MF_AUTO_FORMAT,
|
||||||
|
MF_ENCODE,
|
||||||
} MessageFormat;
|
} MessageFormat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -108,6 +109,11 @@ class CustomMessage {
|
|||||||
*/
|
*/
|
||||||
void ReplaceSpecialCharacters(std::string& str) const;
|
void ReplaceSpecialCharacters(std::string& str) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Replaces hashtags with stored colors.
|
||||||
|
*/
|
||||||
|
void EncodeColors(std::string& str) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Replaces our color variable strings with the OoT control codes.
|
* @brief Replaces our color variable strings with the OoT control codes.
|
||||||
*/
|
*/
|
||||||
@ -160,6 +166,11 @@ class CustomMessage {
|
|||||||
*/
|
*/
|
||||||
void Clean();
|
void Clean();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Replaces variable characters with fixed ones to store the sata in string form
|
||||||
|
*/
|
||||||
|
void Encode();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Replaces various symbols with the control codes necessary to
|
* @brief Replaces various symbols with the control codes necessary to
|
||||||
* display them in OoT's textboxes for a single string
|
* display them in OoT's textboxes for a single string
|
||||||
@ -167,6 +178,12 @@ class CustomMessage {
|
|||||||
*/
|
*/
|
||||||
void FormatString(std::string& str) const;
|
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.
|
* textboxes, and use it's formatting.
|
||||||
@ -280,7 +297,7 @@ class MessageNotFoundException : public std::exception {
|
|||||||
: messageTableId(std::move(messageTableId_)), textId(textId_) {
|
: messageTableId(std::move(messageTableId_)), textId(textId_) {
|
||||||
}
|
}
|
||||||
virtual const char* what() const noexcept {
|
virtual const char* what() const noexcept {
|
||||||
char* message;
|
static char message[500];
|
||||||
sprintf(message, "Message from table %s with textId %u was not found", messageTableId.c_str(), textId);
|
sprintf(message, "Message from table %s with textId %u was not found", messageTableId.c_str(), textId);
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
#include <soh/Enhancements/item-tables/ItemTableManager.h>
|
#include <soh/Enhancements/item-tables/ItemTableManager.h>
|
||||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
#include "soh/Enhancements/cosmetics/CosmeticsEditor.h"
|
#include "soh/Enhancements/cosmetics/CosmeticsEditor.h"
|
||||||
@ -518,6 +519,8 @@ static bool SaveStateHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
case SaveStateReturn::FAIL_WRONG_GAMESTATE:
|
case SaveStateReturn::FAIL_WRONG_GAMESTATE:
|
||||||
ERROR_MESSAGE("[SOH] Can not save a state outside of \"GamePlay\"");
|
ERROR_MESSAGE("[SOH] Can not save a state outside of \"GamePlay\"");
|
||||||
return 1;
|
return 1;
|
||||||
|
default:
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -538,6 +541,8 @@ static bool LoadStateHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
case SaveStateReturn::FAIL_WRONG_GAMESTATE:
|
case SaveStateReturn::FAIL_WRONG_GAMESTATE:
|
||||||
ERROR_MESSAGE("[SOH] Can not load a state outside of \"GamePlay\"");
|
ERROR_MESSAGE("[SOH] Can not load a state outside of \"GamePlay\"");
|
||||||
return 1;
|
return 1;
|
||||||
|
default:
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1307,6 +1312,7 @@ static constexpr std::array<std::pair<const char*, CosmeticGroup>, COSMETICS_GRO
|
|||||||
{"trials", COSMETICS_GROUP_TRAILS},
|
{"trials", COSMETICS_GROUP_TRAILS},
|
||||||
{"navi", COSMETICS_GROUP_NAVI},
|
{"navi", COSMETICS_GROUP_NAVI},
|
||||||
{"ivan", COSMETICS_GROUP_IVAN},
|
{"ivan", COSMETICS_GROUP_IVAN},
|
||||||
|
{"message", COSMETICS_GROUP_MESSAGE},
|
||||||
}};
|
}};
|
||||||
|
|
||||||
static bool CosmeticsHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args, std::string* output) {
|
static bool CosmeticsHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args, std::string* output) {
|
||||||
@ -1590,5 +1596,5 @@ void DebugConsole_Init(void) {
|
|||||||
{"group_name", Ship::ArgumentType::TEXT, true},
|
{"group_name", Ship::ArgumentType::TEXT, true},
|
||||||
}});
|
}});
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "../custom-message/CustomMessageManager.h"
|
#include "../custom-message/CustomMessageManager.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
#include "message_data_static.h"
|
#include "message_data_static.h"
|
||||||
#include "variables.h"
|
#include "variables.h"
|
||||||
#include "soh/util.h"
|
#include "soh/util.h"
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <libultraship/bridge.h>
|
#include <libultraship/bridge.h>
|
||||||
#include <libultraship/libultraship.h>
|
#include <libultraship/libultraship.h>
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <z64.h>
|
#include <z64.h>
|
||||||
@ -1174,7 +1175,7 @@ void ActorViewerWindow::DrawElement() {
|
|||||||
Actor_Spawn(&gPlayState->actorCtx, gPlayState, newActor.id, newActor.pos.x, newActor.pos.y,
|
Actor_Spawn(&gPlayState->actorCtx, gPlayState, newActor.id, newActor.pos.x, newActor.pos.y,
|
||||||
newActor.pos.z, newActor.rot.x, newActor.rot.y, newActor.rot.z, newActor.params, 0);
|
newActor.pos.z, newActor.rot.x, newActor.rot.y, newActor.rot.z, newActor.params, 0);
|
||||||
} else {
|
} else {
|
||||||
func_80078884(NA_SE_SY_ERROR);
|
Sfx_PlaySfxCentered(NA_SE_SY_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1187,7 +1188,7 @@ void ActorViewerWindow::DrawElement() {
|
|||||||
newActor.pos.y, newActor.pos.z, newActor.rot.x, newActor.rot.y,
|
newActor.pos.y, newActor.pos.z, newActor.rot.x, newActor.rot.y,
|
||||||
newActor.rot.z, newActor.params);
|
newActor.rot.z, newActor.params);
|
||||||
} else {
|
} else {
|
||||||
func_80078884(NA_SE_SY_ERROR);
|
Sfx_PlaySfxCentered(NA_SE_SY_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,12 +8,14 @@
|
|||||||
#include <libultraship/bridge.h>
|
#include <libultraship/bridge.h>
|
||||||
#include <libultraship/libultraship.h>
|
#include <libultraship/libultraship.h>
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <z64.h>
|
#include <z64.h>
|
||||||
#include "variables.h"
|
#include "variables.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
extern PlayState* gPlayState;
|
extern PlayState* gPlayState;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +62,7 @@ void ColViewerWindow::DrawElement() {
|
|||||||
UIWidgets::LabeledRightAlignedEnhancementCombobox("Col Check", CVAR_DEVELOPER_TOOLS("ColViewer.ColCheck"), ColRenderSettingNames, COLVIEW_DISABLED);
|
UIWidgets::LabeledRightAlignedEnhancementCombobox("Col Check", CVAR_DEVELOPER_TOOLS("ColViewer.ColCheck"), ColRenderSettingNames, COLVIEW_DISABLED);
|
||||||
UIWidgets::LabeledRightAlignedEnhancementCombobox("Waterbox", CVAR_DEVELOPER_TOOLS("ColViewer.Waterbox"), ColRenderSettingNames, COLVIEW_DISABLED);
|
UIWidgets::LabeledRightAlignedEnhancementCombobox("Waterbox", CVAR_DEVELOPER_TOOLS("ColViewer.Waterbox"), ColRenderSettingNames, COLVIEW_DISABLED);
|
||||||
|
|
||||||
UIWidgets::EnhancementCheckbox("Apply as decal", CVAR_DEVELOPER_TOOLS("ColViewer.Decal"));
|
UIWidgets::EnhancementCheckbox("Apply as decal", CVAR_DEVELOPER_TOOLS("ColViewer.Decal"), false, "", UIWidgets::CheckboxGraphics::Cross, true);
|
||||||
UIWidgets::InsertHelpHoverText("Applies the collision as a decal display. This can be useful if there is z-fighting occuring "
|
UIWidgets::InsertHelpHoverText("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.");
|
"with the scene geometry, but can cause other artifacts.");
|
||||||
UIWidgets::EnhancementCheckbox("Shaded", CVAR_DEVELOPER_TOOLS("ColViewer.Shaded"));
|
UIWidgets::EnhancementCheckbox("Shaded", CVAR_DEVELOPER_TOOLS("ColViewer.Shaded"));
|
||||||
@ -276,11 +278,6 @@ void CreateSphereData() {
|
|||||||
sphereGfx.push_back(gsSPEndDisplayList());
|
sphereGfx.push_back(gsSPEndDisplayList());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColViewerWindow::InitElement() {
|
|
||||||
CreateCylinderData();
|
|
||||||
CreateSphereData();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initializes the display list for a ColRenderSetting
|
// Initializes the display list for a ColRenderSetting
|
||||||
void InitGfx(std::vector<Gfx>& gfx, ColRenderSetting setting) {
|
void InitGfx(std::vector<Gfx>& gfx, ColRenderSetting setting) {
|
||||||
uint32_t rm;
|
uint32_t rm;
|
||||||
@ -302,7 +299,7 @@ void InitGfx(std::vector<Gfx>& gfx, ColRenderSetting setting) {
|
|||||||
alpha = 0xFF;
|
alpha = 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Decal"), 0) != 0) {
|
if (CVarGetInteger(CVAR_DEVELOPER_TOOLS("ColViewer.Decal"), 1) != 0) {
|
||||||
rm |= ZMODE_DEC;
|
rm |= ZMODE_DEC;
|
||||||
} else if (setting == ColRenderSetting::Transparent) {
|
} else if (setting == ColRenderSetting::Transparent) {
|
||||||
rm |= ZMODE_XLU;
|
rm |= ZMODE_XLU;
|
||||||
@ -689,3 +686,10 @@ extern "C" void DrawColViewer() {
|
|||||||
|
|
||||||
CLOSE_DISPS(gPlayState->state.gfxCtx);
|
CLOSE_DISPS(gPlayState->state.gfxCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ColViewerWindow::InitElement() {
|
||||||
|
CreateCylinderData();
|
||||||
|
CreateSphereData();
|
||||||
|
|
||||||
|
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnPlayDrawEnd>(DrawColViewer);
|
||||||
|
}
|
||||||
|
@ -18,6 +18,7 @@ extern "C" {
|
|||||||
#include "variables.h"
|
#include "variables.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
#include "soh/Enhancements/randomizer/adult_trade_shuffle.h"
|
#include "soh/Enhancements/randomizer/adult_trade_shuffle.h"
|
||||||
extern PlayState* gPlayState;
|
extern PlayState* gPlayState;
|
||||||
|
|
||||||
@ -1206,7 +1207,7 @@ void DrawQuestStatusTab() {
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
DrawQuestItemButton(QUEST_GERUDO_CARD);
|
DrawQuestItemButton(QUEST_GERUDO_CARD);
|
||||||
|
|
||||||
for (const SongMapEntry& entry : songMapping) {
|
for (const auto& [quest, entry] : songMapping) {
|
||||||
if ((entry.id != QUEST_SONG_MINUET) && (entry.id != QUEST_SONG_LULLABY)) {
|
if ((entry.id != QUEST_SONG_MINUET) && (entry.id != QUEST_SONG_LULLABY)) {
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
}
|
}
|
||||||
|
@ -348,7 +348,7 @@ const std::vector<FlagTable> flagTables = {
|
|||||||
{ 0x24, "Market Crowd Text Randomizer" },
|
{ 0x24, "Market Crowd Text Randomizer" },
|
||||||
{ 0x30, "Entered the Market" },
|
{ 0x30, "Entered the Market" },
|
||||||
} },
|
} },
|
||||||
{ "Randomizer Inf Flags", RANDOMIZER_INF, 16, {
|
{ "Randomizer Inf Flags", RANDOMIZER_INF, (RAND_INF_MAX + 15) / 16, {
|
||||||
{ RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE, "DUNGEONS_DONE_SPIRIT_TEMPLE" },
|
{ RAND_INF_DUNGEONS_DONE_SPIRIT_TEMPLE, "DUNGEONS_DONE_SPIRIT_TEMPLE" },
|
||||||
{ RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE, "DUNGEONS_DONE_SHADOW_TEMPLE" },
|
{ RAND_INF_DUNGEONS_DONE_SHADOW_TEMPLE, "DUNGEONS_DONE_SHADOW_TEMPLE" },
|
||||||
|
|
||||||
@ -511,6 +511,548 @@ const std::vector<FlagTable> flagTables = {
|
|||||||
{ RAND_INF_HAS_OCARINA_C_LEFT, "RAND_INF_HAS_OCARINA_C_LEFT"},
|
{ 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_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_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_CAUGHT_LOACH, "RAND_INF_CAUGHT_LOACH" },
|
||||||
|
|
||||||
{ RAND_INF_CAN_SWIM, "RAND_INF_CAN_SWIM" },
|
{ RAND_INF_CAN_SWIM, "RAND_INF_CAN_SWIM" },
|
||||||
@ -621,6 +1163,394 @@ const std::vector<FlagTable> flagTables = {
|
|||||||
{ RAND_INF_ZF_GREAT_FAIRY_REWARD, "RAND_INF_ZF_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_COLOSSUS_GREAT_FAIRY_REWARD, "RAND_INF_COLOSSUS_GREAT_FAIRY_REWARD" },
|
||||||
{ RAND_INF_OGC_GREAT_FAIRY_REWARD, "RAND_INF_OGC_GREAT_FAIRY_REWARD" },
|
{ RAND_INF_OGC_GREAT_FAIRY_REWARD, "RAND_INF_OGC_GREAT_FAIRY_REWARD" },
|
||||||
|
|
||||||
|
{ 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_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_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_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" },
|
||||||
} },
|
} },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -120,9 +120,9 @@ void DLViewerWindow::DrawElement() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
auto res = std::static_pointer_cast<LUS::DisplayList>(Ship::Context::GetInstance()->GetResourceManager()->LoadResource(activeDisplayList));
|
auto res = std::static_pointer_cast<Fast::DisplayList>(Ship::Context::GetInstance()->GetResourceManager()->LoadResource(activeDisplayList));
|
||||||
|
|
||||||
if (res->GetInitData()->Type != static_cast<uint32_t>(LUS::ResourceType::DisplayList)) {
|
if (res->GetInitData()->Type != static_cast<uint32_t>(Fast::ResourceType::DisplayList)) {
|
||||||
ImGui::Text("Resource type is not a Display List. Please choose another.");
|
ImGui::Text("Resource type is not a Display List. Please choose another.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -4,14 +4,14 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <version>
|
#include <version>
|
||||||
|
|
||||||
static std::unordered_map<const char*, std::unordered_map<HOOK_ID, HookInfo>> hookData;
|
static std::unordered_map<const char*, std::unordered_map<HOOK_ID, HookInfo>*> hookData;
|
||||||
|
|
||||||
const ImVec4 grey = ImVec4(0.75, 0.75, 0.75, 1);
|
const ImVec4 grey = ImVec4(0.75, 0.75, 0.75, 1);
|
||||||
const ImVec4 yellow = ImVec4(1, 1, 0, 1);
|
const ImVec4 yellow = ImVec4(1, 1, 0, 1);
|
||||||
const ImVec4 red = ImVec4(1, 0, 0, 1);
|
const ImVec4 red = ImVec4(1, 0, 0, 1);
|
||||||
|
|
||||||
void DrawHookRegisteringInfos(const char* hookName) {
|
void DrawHookRegisteringInfos(const char* hookName) {
|
||||||
if (hookData[hookName].size() == 0) {
|
if ((*hookData[hookName]).size() == 0) {
|
||||||
ImGui::TextColored(grey, "No hooks found");
|
ImGui::TextColored(grey, "No hooks found");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -27,7 +27,7 @@ void DrawHookRegisteringInfos(const char* hookName) {
|
|||||||
//ImGui::TableSetupColumn("Stub");
|
//ImGui::TableSetupColumn("Stub");
|
||||||
ImGui::TableSetupColumn("Number of Calls");
|
ImGui::TableSetupColumn("Number of Calls");
|
||||||
ImGui::TableHeadersRow();
|
ImGui::TableHeadersRow();
|
||||||
for (auto& [id, hookInfo] : hookData[hookName]) {
|
for (auto& [id, hookInfo] : (*hookData[hookName])) {
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
|
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
@ -100,9 +100,7 @@ void HookDebuggerWindow::DrawElement() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HookDebuggerWindow::UpdateElement() {
|
void HookDebuggerWindow::InitElement() {
|
||||||
hookData.clear();
|
|
||||||
|
|
||||||
#define DEFINE_HOOK(name, _) hookData.insert({#name, GameInteractor::Instance->GetHookData<GameInteractor::name>()});
|
#define DEFINE_HOOK(name, _) hookData.insert({#name, GameInteractor::Instance->GetHookData<GameInteractor::name>()});
|
||||||
|
|
||||||
#include "../game-interactor/GameInteractor_HookTable.h"
|
#include "../game-interactor/GameInteractor_HookTable.h"
|
||||||
|
@ -4,7 +4,7 @@ class HookDebuggerWindow : public Ship::GuiWindow {
|
|||||||
public:
|
public:
|
||||||
using GuiWindow::GuiWindow;
|
using GuiWindow::GuiWindow;
|
||||||
|
|
||||||
void InitElement() override {};
|
void InitElement() override;
|
||||||
void DrawElement() override;
|
void DrawElement() override;
|
||||||
void UpdateElement() override;
|
void UpdateElement() override {};
|
||||||
};
|
};
|
||||||
|
@ -7,6 +7,7 @@ extern "C" {
|
|||||||
#include "variables.h"
|
#include "variables.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
extern PlayState* gPlayState;
|
extern PlayState* gPlayState;
|
||||||
void GfxPrint_SetColor(GfxPrint* printer, u32 r, u32 g, u32 b, u32 a);
|
void GfxPrint_SetColor(GfxPrint* printer, u32 r, u32 g, u32 b, u32 a);
|
||||||
void GfxPrint_SetPos(GfxPrint* printer, s32 x, s32 y);
|
void GfxPrint_SetPos(GfxPrint* printer, s32 x, s32 y);
|
||||||
|
@ -6,13 +6,13 @@
|
|||||||
#include "soh/Enhancements/enhancementTypes.h"
|
#include "soh/Enhancements/enhancementTypes.h"
|
||||||
#include "variables.h"
|
#include "variables.h"
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
|
#include "soh/ResourceManagerHelpers.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <z64.h>
|
#include <z64.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" uint32_t ResourceMgr_IsSceneMasterQuest(s16 sceneNum);
|
|
||||||
|
|
||||||
const char* enemyCVarList[] = {
|
const char* enemyCVarList[] = {
|
||||||
CVAR_ENHANCEMENT("RandomizedEnemyList.Armos"), CVAR_ENHANCEMENT("RandomizedEnemyList.Arwing"),
|
CVAR_ENHANCEMENT("RandomizedEnemyList.Armos"), CVAR_ENHANCEMENT("RandomizedEnemyList.Arwing"),
|
||||||
CVAR_ENHANCEMENT("RandomizedEnemyList.BabyDodongo"), CVAR_ENHANCEMENT("RandomizedEnemyList.Bari"),
|
CVAR_ENHANCEMENT("RandomizedEnemyList.BabyDodongo"), CVAR_ENHANCEMENT("RandomizedEnemyList.Bari"),
|
||||||
|
@ -217,7 +217,7 @@ namespace GameInteractionEffect {
|
|||||||
void _Apply() override;
|
void _Apply() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class PressRandomButton: public GameInteractionEffectBase, public ParameterizedGameInteractionEffect {
|
class PressRandomButton: public RemovableGameInteractionEffect, public ParameterizedGameInteractionEffect {
|
||||||
GameInteractionEffectQueryResult CanBeApplied() override;
|
GameInteractionEffectQueryResult CanBeApplied() override;
|
||||||
void _Apply() override;
|
void _Apply() override;
|
||||||
};
|
};
|
||||||
|
@ -54,13 +54,13 @@ typedef enum {
|
|||||||
} GIColors;
|
} GIColors;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* */ GI_TP_DEST_LINKSHOUSE = ENTR_LINKS_HOUSE_0,
|
/* */ GI_TP_DEST_LINKSHOUSE = ENTR_LINKS_HOUSE_CHILD_SPAWN,
|
||||||
/* */ GI_TP_DEST_MINUET = ENTR_SACRED_FOREST_MEADOW_2,
|
/* */ GI_TP_DEST_MINUET = ENTR_SACRED_FOREST_MEADOW_WARP_PAD,
|
||||||
/* */ GI_TP_DEST_BOLERO = ENTR_DEATH_MOUNTAIN_CRATER_4,
|
/* */ GI_TP_DEST_BOLERO = ENTR_DEATH_MOUNTAIN_CRATER_WARP_PAD,
|
||||||
/* */ GI_TP_DEST_SERENADE = ENTR_LAKE_HYLIA_8,
|
/* */ GI_TP_DEST_SERENADE = ENTR_LAKE_HYLIA_WARP_PAD,
|
||||||
/* */ GI_TP_DEST_REQUIEM = ENTR_DESERT_COLOSSUS_5,
|
/* */ GI_TP_DEST_REQUIEM = ENTR_DESERT_COLOSSUS_WARP_PAD,
|
||||||
/* */ GI_TP_DEST_NOCTURNE = ENTR_GRAVEYARD_7,
|
/* */ GI_TP_DEST_NOCTURNE = ENTR_GRAVEYARD_WARP_PAD,
|
||||||
/* */ GI_TP_DEST_PRELUDE = ENTR_TEMPLE_OF_TIME_7,
|
/* */ GI_TP_DEST_PRELUDE = ENTR_TEMPLE_OF_TIME_WARP_PAD,
|
||||||
} GITeleportDestinations;
|
} GITeleportDestinations;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -76,6 +76,7 @@ typedef enum {
|
|||||||
VB_MIDO_SPAWN,
|
VB_MIDO_SPAWN,
|
||||||
// Opt: *EnMd
|
// Opt: *EnMd
|
||||||
// Vanilla condition: EnMd->interactInfo.talkState == NPC_TALK_STATE_ACTION
|
// Vanilla condition: EnMd->interactInfo.talkState == NPC_TALK_STATE_ACTION
|
||||||
|
// Note: When overriding this, ensure you're not in the intro cutscene as Mido's path has not been loaded
|
||||||
VB_MOVE_MIDO_IN_KOKIRI_FOREST,
|
VB_MOVE_MIDO_IN_KOKIRI_FOREST,
|
||||||
// Opt: *EnMd
|
// Opt: *EnMd
|
||||||
// Vanilla condition: CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD)
|
// Vanilla condition: CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD)
|
||||||
@ -117,7 +118,7 @@ typedef enum {
|
|||||||
/* Vanilla Condition:
|
/* Vanilla Condition:
|
||||||
```
|
```
|
||||||
LINK_IS_ADULT &&
|
LINK_IS_ADULT &&
|
||||||
gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_0 &&
|
gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_FRONT_GATE &&
|
||||||
Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP) &&
|
Flags_GetEventChkInf(EVENTCHKINF_USED_FOREST_TEMPLE_BLUE_WARP) &&
|
||||||
Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP) &&
|
Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP) &&
|
||||||
Flags_GetEventChkInf(EVENTCHKINF_USED_WATER_TEMPLE_BLUE_WARP) &&
|
Flags_GetEventChkInf(EVENTCHKINF_USED_WATER_TEMPLE_BLUE_WARP) &&
|
||||||
@ -126,6 +127,7 @@ typedef enum {
|
|||||||
*/
|
*/
|
||||||
VB_BE_ELIGIBLE_FOR_NOCTURNE_OF_SHADOW,
|
VB_BE_ELIGIBLE_FOR_NOCTURNE_OF_SHADOW,
|
||||||
// Opt: *EnGo2
|
// Opt: *EnGo2
|
||||||
|
VB_GORON_LINK_BE_SCARED,
|
||||||
// Vanilla condition: CUR_CAPACITY(UPG_BOMB_BAG) >= 20 && this->waypoint > 7 && this->waypoint < 12
|
// Vanilla condition: CUR_CAPACITY(UPG_BOMB_BAG) >= 20 && this->waypoint > 7 && this->waypoint < 12
|
||||||
VB_BE_ELIGIBLE_FOR_CHILD_ROLLING_GORON_REWARD,
|
VB_BE_ELIGIBLE_FOR_CHILD_ROLLING_GORON_REWARD,
|
||||||
// Vanilla condition: !CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON)
|
// Vanilla condition: !CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON)
|
||||||
@ -194,6 +196,9 @@ typedef enum {
|
|||||||
// Opt: *EnKz
|
// Opt: *EnKz
|
||||||
// Vanilla condition: Flags_GetEventChkInf(EVENTCHKINF_KING_ZORA_MOVED)
|
// Vanilla condition: Flags_GetEventChkInf(EVENTCHKINF_KING_ZORA_MOVED)
|
||||||
VB_KING_ZORA_BE_MOVED,
|
VB_KING_ZORA_BE_MOVED,
|
||||||
|
// Opt: *EnKz,
|
||||||
|
// Vanilla condition: CHECK_OWNED_EQUIP(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_ZORA)
|
||||||
|
VB_KING_ZORA_TUNIC_CHECK,
|
||||||
// Vanilla condition: gSaveState.bgsFlag
|
// Vanilla condition: gSaveState.bgsFlag
|
||||||
VB_BIGGORON_CONSIDER_TRADE_COMPLETE,
|
VB_BIGGORON_CONSIDER_TRADE_COMPLETE,
|
||||||
// Vanilla condition: gSaveState.bgsFlag
|
// Vanilla condition: gSaveState.bgsFlag
|
||||||
@ -244,6 +249,11 @@ typedef enum {
|
|||||||
```
|
```
|
||||||
*/
|
*/
|
||||||
VB_DRAW_AMMO_COUNT,
|
VB_DRAW_AMMO_COUNT,
|
||||||
|
// Opt: *ObjTsubo
|
||||||
|
VB_POT_SETUP_DRAW,
|
||||||
|
VB_POT_DROP_ITEM,
|
||||||
|
// Opt: *ActorDoorShutter
|
||||||
|
VB_LOCK_BOSS_DOOR,
|
||||||
// Vanilla condition: true
|
// Vanilla condition: true
|
||||||
VB_HAVE_OCARINA_NOTE_D4,
|
VB_HAVE_OCARINA_NOTE_D4,
|
||||||
// Vanilla condition: true
|
// Vanilla condition: true
|
||||||
@ -280,16 +290,26 @@ typedef enum {
|
|||||||
VB_SPAWN_BLUE_WARP,
|
VB_SPAWN_BLUE_WARP,
|
||||||
// Vanilla condition: this->warpTimer > sWarpTimerTarget && gSaveContext.nextCutsceneIndex == 0xFFEF
|
// Vanilla condition: this->warpTimer > sWarpTimerTarget && gSaveContext.nextCutsceneIndex == 0xFFEF
|
||||||
VB_BLUE_WARP_APPLY_ENTRANCE_AND_CUTSCENE,
|
VB_BLUE_WARP_APPLY_ENTRANCE_AND_CUTSCENE,
|
||||||
|
// Vanilla condition: SurfaceType_GetSlope(&play->colCtx, poly, bgId) == 2
|
||||||
|
// Opt: int (original next entrance index)
|
||||||
|
VB_SET_VOIDOUT_FROM_SURFACE,
|
||||||
// Vanilla condition: this->collider.base.acFlags & 2
|
// Vanilla condition: this->collider.base.acFlags & 2
|
||||||
VB_BG_BREAKWALL_BREAK,
|
VB_BG_BREAKWALL_BREAK,
|
||||||
// Vanilla condition: true
|
// Vanilla condition: true
|
||||||
VB_GANON_HEAL_BEFORE_FIGHT,
|
VB_GANON_HEAL_BEFORE_FIGHT,
|
||||||
VB_FREEZE_LINK_FOR_BLOCK_THROW,
|
VB_FREEZE_LINK_FOR_BLOCK_THROW,
|
||||||
VB_MOVE_THROWN_ACTOR,
|
VB_MOVE_THROWN_ACTOR,
|
||||||
|
// Opt: *EnFr
|
||||||
|
// Vanilla condition: this->reward == GI_NONE
|
||||||
|
VB_FROGS_GO_TO_IDLE,
|
||||||
|
|
||||||
/*** Play Cutscenes ***/
|
/*** Play Cutscenes ***/
|
||||||
|
|
||||||
VB_PLAY_TRANSITION_CS,
|
VB_PLAY_TRANSITION_CS,
|
||||||
|
VB_PLAY_GORON_FREE_CS,
|
||||||
|
VB_PLAY_FIRE_ARROW_CS,
|
||||||
|
// Vanilla condition: INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE
|
||||||
|
VB_SPAWN_FIRE_ARROW,
|
||||||
// Opt: *EventChkInf flag
|
// Opt: *EventChkInf flag
|
||||||
VB_PLAY_ENTRANCE_CS,
|
VB_PLAY_ENTRANCE_CS,
|
||||||
// Opt: *cutsceneId
|
// Opt: *cutsceneId
|
||||||
@ -305,6 +325,8 @@ typedef enum {
|
|||||||
// Vanilla condition: !EVENTCHKINF_PULLED_MASTER_SWORD_FROM_PEDESTAL
|
// Vanilla condition: !EVENTCHKINF_PULLED_MASTER_SWORD_FROM_PEDESTAL
|
||||||
VB_PLAY_PULL_MASTER_SWORD_CS,
|
VB_PLAY_PULL_MASTER_SWORD_CS,
|
||||||
VB_PLAY_DROP_FISH_FOR_JABU_CS,
|
VB_PLAY_DROP_FISH_FOR_JABU_CS,
|
||||||
|
// Opt: *EnKz
|
||||||
|
VB_PLAY_MWEEP_CS,
|
||||||
// Vanilla condition: player->getItemId == GI_GAUNTLETS_SILVER
|
// Vanilla condition: player->getItemId == GI_GAUNTLETS_SILVER
|
||||||
VB_PLAY_NABOORU_CAPTURED_CS,
|
VB_PLAY_NABOORU_CAPTURED_CS,
|
||||||
VB_PLAY_ZELDAS_LULLABY_CS,
|
VB_PLAY_ZELDAS_LULLABY_CS,
|
||||||
@ -338,9 +360,24 @@ typedef enum {
|
|||||||
VB_SHOULD_GIVE_VANILLA_FISHING_PRIZE,
|
VB_SHOULD_GIVE_VANILLA_FISHING_PRIZE,
|
||||||
VB_GIVE_RANDO_FISHING_PRIZE,
|
VB_GIVE_RANDO_FISHING_PRIZE,
|
||||||
VB_PLAY_THROW_ANIMATION,
|
VB_PLAY_THROW_ANIMATION,
|
||||||
|
VB_INFLICT_VOID_DAMAGE,
|
||||||
|
// Vanilla condition: Close enough & various cutscene checks
|
||||||
|
// Opt: *EnRu1
|
||||||
|
VB_PLAY_CHILD_RUTO_INTRO,
|
||||||
|
// Vanilla condition: !INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE && in the big okto room
|
||||||
|
// Opt: *EnRu1
|
||||||
|
VB_RUTO_WANT_TO_BE_TOSSED_TO_SAPPHIRE,
|
||||||
|
// Vanilla condition: Landed on the platform in the big okto room
|
||||||
|
// Opt: *EnRu1
|
||||||
|
VB_RUTO_RUN_TO_SAPPHIRE,
|
||||||
|
// Vanilla condition: !Flags_GetInfTable(INFTABLE_145)
|
||||||
|
// Opt: *EnRu1
|
||||||
|
VB_RUTO_BE_CONSIDERED_NOT_KIDNAPPED,
|
||||||
|
|
||||||
|
|
||||||
/*** Give Items ***/
|
/*** Give Items ***/
|
||||||
|
|
||||||
|
VB_FREEZE_ON_SKULL_TOKEN,
|
||||||
// Opt: *EnBox
|
// Opt: *EnBox
|
||||||
VB_GIVE_ITEM_FROM_CHEST,
|
VB_GIVE_ITEM_FROM_CHEST,
|
||||||
// Opt: ItemID
|
// Opt: ItemID
|
||||||
@ -349,7 +386,6 @@ typedef enum {
|
|||||||
VB_GIVE_ITEM_FROM_ITEM_00,
|
VB_GIVE_ITEM_FROM_ITEM_00,
|
||||||
// Opt: *EnSi
|
// Opt: *EnSi
|
||||||
VB_GIVE_ITEM_SKULL_TOKEN,
|
VB_GIVE_ITEM_SKULL_TOKEN,
|
||||||
VB_FREEZE_ON_SKULL_TOKEN,
|
|
||||||
// Opt: *EnCow
|
// Opt: *EnCow
|
||||||
VB_GIVE_ITEM_FROM_COW,
|
VB_GIVE_ITEM_FROM_COW,
|
||||||
// Opt: *EnDns
|
// Opt: *EnDns
|
||||||
@ -362,9 +398,6 @@ typedef enum {
|
|||||||
VB_GIVE_ITEM_FROM_ANJU_AS_CHILD,
|
VB_GIVE_ITEM_FROM_ANJU_AS_CHILD,
|
||||||
// Opt: *EnNiwLady
|
// Opt: *EnNiwLady
|
||||||
VB_GIVE_ITEM_FROM_ANJU_AS_ADULT,
|
VB_GIVE_ITEM_FROM_ANJU_AS_ADULT,
|
||||||
// Opt: *EnKz
|
|
||||||
// Vanilla condition: !CHECK_OWNED_EQUIP(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_ZORA)
|
|
||||||
VB_GIVE_ITEM_FROM_THAWING_KING_ZORA,
|
|
||||||
// Opt: *EnGo2
|
// Opt: *EnGo2
|
||||||
VB_GIVE_ITEM_FROM_GORON,
|
VB_GIVE_ITEM_FROM_GORON,
|
||||||
// Opt: *EnGb
|
// Opt: *EnGb
|
||||||
@ -378,8 +411,6 @@ typedef enum {
|
|||||||
VB_GIVE_ITEM_FROM_MEDIGORON,
|
VB_GIVE_ITEM_FROM_MEDIGORON,
|
||||||
// Opt: *EnMs
|
// Opt: *EnMs
|
||||||
VB_GIVE_ITEM_FROM_MAGIC_BEAN_SALESMAN,
|
VB_GIVE_ITEM_FROM_MAGIC_BEAN_SALESMAN,
|
||||||
// Opt: *EnFr
|
|
||||||
VB_GIVE_ITEM_FROM_FROGS,
|
|
||||||
// Opt: *EnSkj
|
// Opt: *EnSkj
|
||||||
VB_GIVE_ITEM_FROM_OCARINA_MEMORY_GAME,
|
VB_GIVE_ITEM_FROM_OCARINA_MEMORY_GAME,
|
||||||
// Opt: *EnSkj
|
// Opt: *EnSkj
|
||||||
@ -448,13 +479,13 @@ typedef enum {
|
|||||||
// Opt: *EnToryo
|
// Opt: *EnToryo
|
||||||
VB_TRADE_SAW,
|
VB_TRADE_SAW,
|
||||||
// Opt: *EnKz,
|
// Opt: *EnKz,
|
||||||
VB_TRADE_PRESCRIPTION,
|
VB_ADULT_KING_ZORA_ITEM_GIVE,
|
||||||
// Opt: *EnMk
|
// Opt: *EnMk
|
||||||
VB_TRADE_FROG,
|
VB_TRADE_FROG,
|
||||||
|
|
||||||
VB_TRADE_TIMER_ODD_MUSHROOM,
|
VB_TRADE_TIMER_ODD_MUSHROOM,
|
||||||
VB_TRADE_TIMER_EYEDROPS,
|
|
||||||
VB_TRADE_TIMER_FROG,
|
VB_TRADE_TIMER_FROG,
|
||||||
|
VB_TRADE_TIMER_EYEDROPS,
|
||||||
// Opt: *EnNiwLady
|
// Opt: *EnNiwLady
|
||||||
VB_ANJU_SET_OBTAINED_TRADE_ITEM,
|
VB_ANJU_SET_OBTAINED_TRADE_ITEM,
|
||||||
|
|
||||||
@ -479,6 +510,15 @@ typedef enum {
|
|||||||
// Vanilla condition: Actor is ACTOR_EN_ELF, ACTOR_EN_FISH, ACTOR_EN_ICE_HONO, or ACTOR_EN_INSECT
|
// Vanilla condition: Actor is ACTOR_EN_ELF, ACTOR_EN_FISH, ACTOR_EN_ICE_HONO, or ACTOR_EN_INSECT
|
||||||
// Opt: *Actor
|
// Opt: *Actor
|
||||||
VB_BOTTLE_ACTOR,
|
VB_BOTTLE_ACTOR,
|
||||||
|
|
||||||
|
/*** Shuffle Fairies ***/
|
||||||
|
// Opt: *EnElf
|
||||||
|
VB_SPAWN_FOUNTAIN_FAIRIES,
|
||||||
|
VB_FAIRY_HEAL,
|
||||||
|
// Opt: *ObjBean
|
||||||
|
VB_SPAWN_BEAN_STALK_FAIRIES,
|
||||||
|
// Opt: *EnGs
|
||||||
|
VB_SPAWN_GOSSIP_STONE_FAIRY,
|
||||||
} GIVanillaBehavior;
|
} GIVanillaBehavior;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -570,6 +610,34 @@ struct HookInfo {
|
|||||||
va_end(args); \
|
va_end(args); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
#define COND_HOOK(hookType, condition, body) \
|
||||||
|
{ \
|
||||||
|
static HOOK_ID hookId = 0; \
|
||||||
|
GameInteractor::Instance->UnregisterGameHook<GameInteractor::hookType>(hookId); \
|
||||||
|
hookId = 0; \
|
||||||
|
if (condition) { \
|
||||||
|
hookId = GameInteractor::Instance->RegisterGameHook<GameInteractor::hookType>(body); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
#define COND_ID_HOOK(hookType, id, condition, body) \
|
||||||
|
{ \
|
||||||
|
static HOOK_ID hookId = 0; \
|
||||||
|
GameInteractor::Instance->UnregisterGameHookForID<GameInteractor::hookType>(hookId); \
|
||||||
|
hookId = 0; \
|
||||||
|
if (condition) { \
|
||||||
|
hookId = GameInteractor::Instance->RegisterGameHookForID<GameInteractor::hookType>(id, body); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
#define COND_VB_SHOULD(id, condition, body) \
|
||||||
|
{ \
|
||||||
|
static HOOK_ID hookId = 0; \
|
||||||
|
GameInteractor::Instance->UnregisterGameHookForID<GameInteractor::ShouldVanillaBehavior>(hookId); \
|
||||||
|
hookId = 0; \
|
||||||
|
if (condition) { \
|
||||||
|
hookId = REGISTER_VB_SHOULD(id, body); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
class GameInteractor {
|
class GameInteractor {
|
||||||
public:
|
public:
|
||||||
static GameInteractor* Instance;
|
static GameInteractor* Instance;
|
||||||
@ -625,8 +693,8 @@ public:
|
|||||||
inline static std::vector<HOOK_ID> hooksForFilter;
|
inline static std::vector<HOOK_ID> hooksForFilter;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename H> std::unordered_map<uint32_t, HookInfo> GetHookData() {
|
template <typename H> std::unordered_map<uint32_t, HookInfo>* GetHookData() {
|
||||||
return RegisteredGameHooks<H>::hookData;
|
return &RegisteredGameHooks<H>::hookData;
|
||||||
}
|
}
|
||||||
|
|
||||||
// General Hooks
|
// General Hooks
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
#include "GameInteractor.h"
|
#include "GameInteractor.h"
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#include "variables.h"
|
#include "variables.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
extern PlayState* gPlayState;
|
extern PlayState* gPlayState;
|
||||||
}
|
}
|
||||||
@ -341,7 +342,7 @@ void GameInteractor::RawAction::UpdateActor(void* refActor) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GameInteractor::RawAction::TeleportPlayer(int32_t nextEntrance) {
|
void GameInteractor::RawAction::TeleportPlayer(int32_t nextEntrance) {
|
||||||
Audio_PlaySoundGeneral(NA_SE_EN_GANON_LAUGH, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
Audio_PlaySoundGeneral(NA_SE_EN_GANON_LAUGH, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||||
gPlayState->nextEntranceIndex = nextEntrance;
|
gPlayState->nextEntranceIndex = nextEntrance;
|
||||||
gPlayState->transitionTrigger = TRANS_TRIGGER_START;
|
gPlayState->transitionTrigger = TRANS_TRIGGER_START;
|
||||||
gPlayState->transitionType = TRANS_TYPE_FADE_BLACK;
|
gPlayState->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||||
@ -476,7 +477,7 @@ void GameInteractor::RawAction::SetCosmeticsColor(uint8_t cosmeticCategory, uint
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick();
|
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||||
ApplyOrResetCustomGfxPatches();
|
ApplyOrResetCustomGfxPatches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
extern "C" {
|
|
||||||
#include "gameplaystats.h"
|
#include "gameplaystats.h"
|
||||||
}
|
|
||||||
#include "gameplaystatswindow.h"
|
#include "gameplaystatswindow.h"
|
||||||
|
|
||||||
#include "soh/SaveManager.h"
|
#include "soh/SaveManager.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
#include "../UIWidgets.hpp"
|
#include "../UIWidgets.hpp"
|
||||||
#include "soh/util.h"
|
#include "soh/util.h"
|
||||||
|
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "soh/cvar_prefixes.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
uint64_t GetUnixTimestamp(void);
|
||||||
|
char* GameplayStats_GetCurrentTime();
|
||||||
|
#ifdef __cplusplus
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
// When using RTA timing
|
// When using RTA timing
|
||||||
// get the diff since the save was created,
|
// get the diff since the save was created,
|
||||||
// unless the game is complete in which we use the defeated ganon timestamp
|
// unless the game is complete in which we use the defeated ganon timestamp
|
||||||
@ -17,7 +29,6 @@
|
|||||||
gSaveContext.sohStats.sceneTimer)
|
gSaveContext.sohStats.sceneTimer)
|
||||||
|
|
||||||
void InitStatTracker();
|
void InitStatTracker();
|
||||||
char* GameplayStats_GetCurrentTime();
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
// 0x00 to 0x9B (0 to 155) used for getting items,
|
// 0x00 to 0x9B (0 to 155) used for getting items,
|
||||||
|
@ -30,13 +30,13 @@ typedef enum GetItemCategory {
|
|||||||
} GetItemCategory;
|
} GetItemCategory;
|
||||||
|
|
||||||
#define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim, itemCategory, modIndex, getItemId) \
|
#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, NULL }
|
{ 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) \
|
#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, NULL }
|
{ 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 \
|
#define GET_ITEM_NONE \
|
||||||
{ ITEM_NONE, 0, 0, 0, 0, 0, 0, 0, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_JUNK, NULL }
|
{ ITEM_NONE, 0, 0, 0, 0, 0, 0, 0, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_JUNK, ITEM_NONE, 0, NULL }
|
||||||
|
|
||||||
typedef struct PlayState PlayState;
|
typedef struct PlayState PlayState;
|
||||||
typedef struct GetItemEntry GetItemEntry;
|
typedef struct GetItemEntry GetItemEntry;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user